AIChat

CI Crates

A powerful ChatGPT command line tool that allows easy chat with ChatGPT-3.5 in a terminal.

demo

Install

With cargo

cargo install --force aichat

Binaries on macOS, Linux, Windows

Download from Github Releases, unzip and add opscan to your $PATH.

Features

Config

On first launch, aichat will guide you through configuration.

```

No config file, create a new one? Yes Openai API Key: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Use proxy? Yes Set proxy: socks5://127.0.0.1:1080 Save chat messages Yes ```

After setting, it will automatically create the configuration file. Of course, you can also manually set the configuration file.

yaml api_key: "<YOUR SECRET API KEY>" # Request via https://platform.openai.com/account/api-keys temperature: 1.0 # optional, see https://platform.openai.com/docs/api-reference/chat/create#chat/create-temperature save: true # optional, If set to true, aichat will save chat messages to message.md highlight: true # optional, Set false to turn highlight proxy: "socks5://127.0.0.1:1080" # optional, set proxy server. e.g. http://127.0.0.1:8080 or socks5://127.0.0.1:1080 conversation_first: false # optional, If set ture, start a conversation immediately upon repl

You can specify the configuration directory through $AICHAT_CONFIG_DIR

You can use .info to view the current configuration file path

Roles

We can let ChatGPT play a certain role through prompt to make it better generate what we want.

We can predefine a batch of roles in roles.yaml.

For example, we define a role.

yaml - name: shell prompt: > I want you to act as a linux shell expert. I want you to answer only with bash code. Do not write explanations. # temperature: 0.3

Let ChatGPT answer questions in the role of a linux shell expert. ``` 〉.role shell

shell〉 extract encrypted zipfile app.zip to /tmp/app

mkdir /tmp/app

unzip -P PASSWORD app.zip -d /tmp/app

```

CLI

``` A powerful chatgpt cli.

Usage: aichat [OPTIONS] [TEXT]...

Arguments: [TEXT]... Input text

Options: -H, --no-highlight Turn off highlight -S, --no-stream No stream output --list-roles List all roles -r, --role Select a role -h, --help Print help -V, --version Print version ```

Command mode

sh aichat math 3.8x4

control highlighting and streaming

sh aichat how to post a json in rust # highlight, streaming output aichat -H -S how to post a json in rust # no highlight, output all at once

pipe input/output ```sh

convert toml to json

cat data.toml | aichat turn toml below to json > data.json ```

Chat mode

Enter Chat REPL if no text input. $ aichat Welcome to aichat 0.5.0 Type ".help" for more information. 〉

Chat REPL

aichat has a powerful Chat REPL.

Tle Chat REPL supports: - emacs keybinding - command autocompletion - history search - fish-style history autosuggestion hints - edit/past multiline input - undo support - clipboard integration

multi-line editing mode

Type { or ( or [ at the beginning of the line to enter the multi-line editing mode. In this mode you can type or paste multiple lines of text. Type the corresponding }, ) ] at the end of the line to exit the mode and submit the content.

〉{ convert json below to toml { "an": [ "arbitrarily", "nested" ], "data": "structure" }}

.help - Print help message

``` 〉.help .info Print the information .set Modify the configuration temporarily .prompt Add a GPT prompt .role Select a role .clear role Clear the currently selected role .conversation Start a conversation. .clear conversation End current conversation. .history Print the history .clear history Clear the history .help Print this help message .exit Exit the REPL

Press Ctrl+C to abort conversation, Ctrl+D to exit the REPL

```

.info - view current configuration information.

〉.info config_file /home/alice/.config/aichat/config.yaml roles_file /home/alice/.config/aichat/roles.yaml messages_file /home/alice/.config/aichat/messages.md role - api_key sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx temperature - save true highlight true proxy - conversation_first false dry_run false

.set - modify the configuration temporarily

〉.set highlight false 〉.set save false 〉.set temperature 1.2

.prompt - use GPT prompt

When you set up a prompt, every message sent later will carry the prompt.

``` 〉{ .prompt I want you to translate the sentences I wrote into emojis. I will write the sentence, and you will express it with emojis. I don't want you to reply with anything but emoji. } Done

P〉You are a genius 👉🧠💡👨‍🎓

P〉I'm embarrassed 🙈😳 ```

.prompt actually creates a temporary role called %TEMP% internally, so run .clear role to clear the prompt.

When you are satisfied with the prompt, add it to roles.yaml for later use.

.role - let the ai play a role

Select a role.

〉.role emoji name: emoji prompt: I want you to translate the sentences I wrote into emojis. I will write the sentence, and you will express it with emojis. I just want you to express it with emojis. I don't want you to reply with anything but emoji. When I need to tell you something in English, I will do it by wrapping it in curly brackets like {like this}. temperature: null

AI play the role we specified emoji〉hello 👋

Clear current selected role ``` emoji〉.clear role

〉hello Hello there! How can I assist you today? ```

.conversation - start a context-aware conversation

By default, aichat behaves in a one-off request/response manner.

You can run .conversation to enter context-aware mode, or set config.conversation_first true to start a conversation immediately upon repl.

``` 〉.conversation

$list 1 to 5, one per line 4089 1 2 3 4 5

$reverse the list 4065 5 4 3 2 1

$.clear conversation 4043

〉 ```

When enter conversation mode, prompt will change to , A number will appear on the right, which means how many tokens left to use. Once the number becomes zero, you need to start a new conversation.

License

Copyright (c) 2023 aichat-developers.

aichat is made available under the terms of either the MIT License or the Apache License 2.0, at your option.

See the LICENSE-APACHE and LICENSE-MIT files for license details.