2023-03-03 00:28:46 +00:00
|
|
|
# AIChat
|
|
|
|
|
2023-03-03 00:33:57 +00:00
|
|
|
[![CI](https://github.com/sigoden/aichat/actions/workflows/ci.yaml/badge.svg)](https://github.com/sigoden/aichat/actions/workflows/ci.yaml)
|
|
|
|
[![Crates](https://img.shields.io/crates/v/aichat.svg)](https://crates.io/crates/aichat)
|
|
|
|
|
2023-03-06 02:33:13 +00:00
|
|
|
A powerful chatgpt cli.
|
|
|
|
|
|
|
|
![demo](https://user-images.githubusercontent.com/4012553/223005945-3450cbde-b383-434b-9049-d61877f76a4f.gif)
|
2023-03-03 00:28:46 +00:00
|
|
|
|
2023-03-03 00:33:57 +00:00
|
|
|
|
2023-03-03 00:28:46 +00:00
|
|
|
## Install
|
|
|
|
|
|
|
|
### With cargo
|
|
|
|
|
|
|
|
```
|
|
|
|
cargo install --force aichat
|
|
|
|
```
|
|
|
|
|
|
|
|
### Binaries on macOS, Linux, Windows
|
|
|
|
|
|
|
|
Download from [Github Releases](https://github.com/sigoden/aichat/releases), unzip and add opscan to your $PATH.
|
|
|
|
|
2023-03-03 03:44:23 +00:00
|
|
|
## Features
|
|
|
|
|
2023-03-06 05:00:43 +00:00
|
|
|
- Predefine AI [roles](#roles)
|
|
|
|
- Use GPT prompt easily
|
|
|
|
- Powerful [Chat REPL](#chat-repl)
|
|
|
|
- Markdown highlight
|
|
|
|
- Stream output
|
|
|
|
- Multiline input
|
|
|
|
- Proxy support
|
|
|
|
- Save chat messages
|
2023-03-03 03:44:23 +00:00
|
|
|
|
2023-03-03 00:28:46 +00:00
|
|
|
## Config
|
|
|
|
|
2023-03-03 02:34:02 +00:00
|
|
|
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.
|
2023-03-03 00:28:46 +00:00
|
|
|
|
2023-03-03 01:38:53 +00:00
|
|
|
```yaml
|
2023-03-06 02:33:13 +00:00
|
|
|
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
|
2023-03-03 00:28:46 +00:00
|
|
|
```
|
|
|
|
|
2023-03-06 05:00:43 +00:00
|
|
|
> You can specify the configuration directory through `$AICHAT_CONFIG_DIR`
|
2023-03-03 00:28:46 +00:00
|
|
|
|
2023-03-03 02:34:02 +00:00
|
|
|
### Roles
|
2023-03-03 00:28:46 +00:00
|
|
|
|
2023-03-06 02:33:13 +00:00
|
|
|
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`.
|
2023-03-03 00:28:46 +00:00
|
|
|
|
2023-03-06 02:33:13 +00:00
|
|
|
For example, we define a role.
|
2023-03-03 00:28:46 +00:00
|
|
|
|
2023-03-03 01:38:53 +00:00
|
|
|
```yaml
|
2023-03-06 02:33:13 +00:00
|
|
|
- name: shell
|
2023-03-04 11:24:57 +00:00
|
|
|
prompt: >
|
2023-03-06 02:33:13 +00:00
|
|
|
I want you to act as a linux shell expert.
|
|
|
|
I want you to answer only with bash code.
|
|
|
|
Do not write explanations.
|
2023-03-03 00:28:46 +00:00
|
|
|
```
|
|
|
|
|
2023-03-06 02:33:13 +00:00
|
|
|
Let ChatGPT answer questions in the role of a linux shell expert.
|
2023-03-03 00:28:46 +00:00
|
|
|
|
|
|
|
```
|
2023-03-06 02:33:13 +00:00
|
|
|
〉.role shell
|
2023-03-05 03:11:15 +00:00
|
|
|
|
2023-03-06 02:33:13 +00:00
|
|
|
〉resize app.png to 256x256
|
|
|
|
convert app.png -resize 256x256 app.png
|
|
|
|
|
|
|
|
〉 extract password protected app.zip to /tmp/app
|
|
|
|
unzip -P password app.zip -d /tmp/app
|
2023-03-03 00:28:46 +00:00
|
|
|
```
|
|
|
|
|
2023-03-05 03:11:15 +00:00
|
|
|
## CLI
|
2023-03-03 00:28:46 +00:00
|
|
|
|
|
|
|
```
|
2023-03-06 02:33:13 +00:00
|
|
|
A powerful chatgpt cli.
|
2023-03-03 01:15:58 +00:00
|
|
|
|
2023-03-05 03:11:15 +00:00
|
|
|
Usage: aichat [OPTIONS] [TEXT]...
|
|
|
|
|
|
|
|
Arguments:
|
2023-03-06 02:33:13 +00:00
|
|
|
[TEXT]... Input text
|
2023-03-05 03:11:15 +00:00
|
|
|
|
|
|
|
Options:
|
2023-03-06 02:33:13 +00:00
|
|
|
-H, --no-highlight Turn off highlight
|
|
|
|
-L, --list-roles List all roles
|
|
|
|
-r, --role <ROLE> Select a role
|
|
|
|
-h, --help Print help
|
|
|
|
-V, --version Print version
|
2023-03-05 03:11:15 +00:00
|
|
|
```
|
|
|
|
|
2023-03-06 02:33:13 +00:00
|
|
|
```sh
|
|
|
|
aichat calculate 25.6 + 32.5
|
|
|
|
```
|
|
|
|
|
|
|
|
```sh
|
2023-03-06 05:00:43 +00:00
|
|
|
aichat -r shell flip the image horizontally
|
2023-03-06 02:33:13 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
Enter Chat REPL if no text input.
|
2023-03-05 03:11:15 +00:00
|
|
|
```
|
|
|
|
$ aichat
|
2023-03-06 02:33:13 +00:00
|
|
|
Welcome to aichat 0.4.0
|
2023-03-05 03:11:15 +00:00
|
|
|
Type ".help" for more information.
|
|
|
|
〉
|
|
|
|
```
|
|
|
|
|
2023-03-06 02:33:13 +00:00
|
|
|
aichat can accept pipe.
|
|
|
|
```sh
|
|
|
|
# convert toml to json
|
|
|
|
cat Cargo.toml | aichat -H turn toml below to json
|
|
|
|
```
|
|
|
|
|
|
|
|
## Chat REPL
|
|
|
|
|
|
|
|
aichat has a powerful Chat REPL.
|
|
|
|
|
|
|
|
Tle Chat REPL supports:
|
|
|
|
- emacs keybinding
|
|
|
|
- command autocompletion
|
|
|
|
- history search
|
|
|
|
- fish-style history autosuggestion hints
|
|
|
|
- mulitline input
|
|
|
|
- undo support
|
|
|
|
- clipboard integration
|
|
|
|
|
|
|
|
Chat REPL also provide many commands.
|
|
|
|
|
|
|
|
```
|
|
|
|
Welcome to aichat 0.4.0
|
|
|
|
Type ".help" for more information.
|
|
|
|
〉.help
|
|
|
|
.info Print the information
|
|
|
|
.set Modify the configuration temporarily
|
|
|
|
.role Select a role
|
|
|
|
.clear role Clear the currently selected role
|
|
|
|
.prompt Add prompt, aka create a temporary role
|
|
|
|
.history Print the history
|
|
|
|
.clear history Clear the history
|
|
|
|
.clear screen Clear the screen
|
|
|
|
.multiline Enter multiline editor mode
|
|
|
|
.copy Copy last reply message
|
|
|
|
.help Print this help message
|
|
|
|
.exit Exit the REPL
|
|
|
|
|
|
|
|
Press Ctrl+C to abort session, Ctrl+D to exit the REPL
|
|
|
|
```
|
|
|
|
|
2023-03-06 05:00:43 +00:00
|
|
|
- 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 -
|
|
|
|
dry_run false
|
|
|
|
```
|
|
|
|
|
|
|
|
|
2023-03-06 02:33:13 +00:00
|
|
|
- Modify the configuration temporarily
|
|
|
|
|
2023-03-05 03:11:15 +00:00
|
|
|
```
|
2023-03-06 02:33:13 +00:00
|
|
|
〉.set highlight false
|
|
|
|
〉.set save false
|
|
|
|
〉.set temperature 1.2
|
2023-03-05 03:11:15 +00:00
|
|
|
```
|
|
|
|
|
2023-03-06 02:33:13 +00:00
|
|
|
- Input multiline text
|
|
|
|
|
2023-03-05 03:11:15 +00:00
|
|
|
```
|
2023-03-06 02:33:13 +00:00
|
|
|
〉.multiline {convert json below to toml
|
|
|
|
::: {
|
|
|
|
::: "an": [
|
|
|
|
::: "arbitrarily",
|
|
|
|
::: "nested"
|
|
|
|
::: ],
|
|
|
|
::: "data": "structure"
|
|
|
|
::: }
|
|
|
|
::: }
|
2023-03-03 00:28:46 +00:00
|
|
|
```
|
|
|
|
|
2023-03-06 02:33:13 +00:00
|
|
|
- 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
|
|
|
|
|
|
|
|
〉You are a genius
|
|
|
|
👉🧠💡👨🎓
|
|
|
|
|
|
|
|
〉I'm embarrassed
|
|
|
|
🙈😳
|
|
|
|
```
|
|
|
|
|
|
|
|
`.prompt` actually creates a temporary role called `%TEMP%` internally, so you run `.clear role` to clear the prompt.
|
|
|
|
|
|
|
|
When you are satisfied with the prompt, add it to `roles.yaml` for later use.
|
|
|
|
|
|
|
|
- Copy last reply message
|
|
|
|
|
|
|
|
The message may be highlighted, and when copied, you will find that they are different from the original Markdown text.
|
|
|
|
|
|
|
|
At this point you need to use `.copy` to copy the original text to the clipboard.
|
|
|
|
|
|
|
|
|
2023-03-03 00:28:46 +00:00
|
|
|
## 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.
|
|
|
|
|
2023-03-04 13:43:29 +00:00
|
|
|
See the LICENSE-APACHE and LICENSE-MIT files for license details.
|