aichat/README.md

285 lines
7.7 KiB
Markdown
Raw Normal View History

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)
Use ChatGPT/GPT-3.5/GPT-4 in the terminal.
2023-03-06 02:33:13 +00:00
2023-03-21 01:45:48 +00:00
AIChat in chat mode:
![chat mode](https://user-images.githubusercontent.com/4012553/226499667-4c6b261a-d897-41c7-956b-979b69da5982.gif)
AIChat in command mode:
![command mode](https://user-images.githubusercontent.com/4012553/226499595-0b536c82-b039-4571-a077-0c40ad57f7db.png)
2023-03-03 00:33:57 +00:00
2023-03-03 00:28:46 +00:00
## Install
### With cargo
```
cargo install --force aichat
```
### Binaries for macOS, Linux, Windows
2023-03-03 00:28:46 +00:00
Download it from [GitHub Releases](https://github.com/sigoden/aichat/releases), unzip and add aichat to your $PATH.
2023-03-03 00:28:46 +00:00
2023-03-03 03:44:23 +00:00
## Features
2023-03-21 01:45:48 +00:00
- Support chat and command modes
2023-03-06 05:00:43 +00:00
- Predefine AI [roles](#roles)
- Use GPT prompt easily
- Powerful [Chat REPL](#chat-repl)
- Context-aware conversation
- Syntax highlighting markdown and 200 other languages
- Stream output with hand-typing effect
2023-03-21 01:45:48 +00:00
- Support multiple models
- Support proxy connection
- Dark/light theme
2023-03-06 05:00:43 +00:00
- Save chat messages
2023-03-03 03:44:23 +00:00
2023-03-03 00:28:46 +00:00
## Config
On first launch, aichat will guide you through the configuration.
2023-03-03 02:34:02 +00:00
```
> No config file, create a new one? Yes
> OpenAI API Key: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2023-03-03 02:34:02 +00:00
> Use proxy? Yes
> Set proxy: socks5://127.0.0.1:1080
> Save chat messages Yes
```
On completion, 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
```yaml
api_key: "<YOUR SECRET API KEY>" # Request via https://platform.openai.com/account/api-keys
organization_id: "org-xxx" # optional, set organization id
model: "gpt-3.5-turbo" # optional, choose a model
temperature: 1.0 # optional, see https://platform.openai.com/docs/api-reference/chat/create#chat/create-temperature
save: true # optional, If set 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 true, start a conversation immediately upon repl
light_theme: false # optional, If set true, use light theme
connect_timeout: 10 # optional, Set a timeout in seconds for connect to gpt.
2023-03-03 00:28:46 +00:00
```
2023-03-13 02:26:33 +00:00
> You can use `.info` to view the current configuration file path and roles file path.
2023-03-03 00:28:46 +00:00
> You can use [Environment Variables](https://github.com/sigoden/aichat/wiki/Environment-Variables) to customize certain configuration items.
2023-03-08 23:04:12 +00:00
2023-03-03 02:34:02 +00:00
### Roles
2023-03-03 00:28:46 +00:00
We can let ChatGPT play a certain role through `prompt` to have it better generate what we want.
2023-03-06 02:33:13 +00:00
We can predefine a batch of roles in `roles.yaml`.
2023-03-03 00:28:46 +00:00
2023-03-21 01:45:48 +00:00
> We can get the location of `roles.yaml` through the repl's `.info` command or cli's `--info` option.
2023-03-13 02:26:33 +00:00
For example, we can define a role:
2023-03-03 00:28:46 +00:00
```yaml
2023-03-06 02:33:13 +00:00
- name: shell
2023-03-04 11:24:57 +00:00
prompt: >
I want you to act as a Linux shell expert.
2023-03-06 02:33:13 +00:00
I want you to answer only with bash code.
2023-03-10 06:51:15 +00:00
Do not provide explanations.
2023-03-03 00:28:46 +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-10 02:27:24 +00:00
shell〉 extract encrypted zipfile app.zip to /tmp/app
2023-03-08 13:35:21 +00:00
mkdir /tmp/app
unzip -P PASSWORD app.zip -d /tmp/app
```
2023-03-21 01:45:48 +00:00
We have provided many awesome [Role Examples](https://github.com/sigoden/aichat/wiki/Role-Examples).
2023-03-06 02:33:13 +00:00
## Chat REPL
aichat has a powerful Chat REPL.
2023-03-10 06:51:15 +00:00
The Chat REPL supports:
2023-03-10 06:51:15 +00:00
- Emacs keybinding
- Command autocompletion
- History search
- Fish-style history autosuggestion hints
- Edit/past multiline input
- Undo support
2023-03-06 02:33:13 +00:00
### Multi-line editing
2023-03-10 02:27:24 +00:00
2023-03-13 02:26:33 +00:00
**Type `{` 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 `}` or `)` at the end of the line to exit the mode and submit the content.
2023-03-06 02:33:13 +00:00
```
2023-03-10 02:27:24 +00:00
〉{ convert json below to toml
{
"an": [
"arbitrarily",
"nested"
],
"data": "structure"
}}
```
### `.help` - Print help message
```
〉.help
.info Print the information
.set Modify the configuration temporarily
2023-03-21 01:45:48 +00:00
.model Choose a model
2023-03-10 02:27:24 +00:00
.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
2023-03-13 02:26:33 +00:00
Type `{` to enter the multi-line editing mode, type '}' to exit the mode.
Press Ctrl+C to abort readline, Ctrl+D to exit the REPL
2023-03-06 02:33:13 +00:00
```
### `.info` - View current configuration information
2023-03-06 05:00:43 +00:00
```
〉.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
api_key sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2023-03-21 01:45:48 +00:00
organization_id -
model gpt-3.5-turbo
2023-03-06 05:00:43 +00:00
temperature -
save true
highlight true
proxy -
2023-03-10 02:27:24 +00:00
conversation_first false
2023-03-13 02:26:33 +00:00
light_theme false
2023-03-21 01:45:48 +00:00
connect_timeout 10
2023-03-06 05:00:43 +00:00
dry_run false
```
### `.set` - Modify the configuration temporarily
2023-03-06 02:33:13 +00:00
```
2023-03-21 01:45:48 +00:00
〉.set dry_run true
2023-03-06 02:33:13 +00:00
〉.set highlight false
〉.set save false
〉.set temperature 1.2
```
### `.model` - Choose a model
2023-03-21 01:45:48 +00:00
```
> .model gpt-4
> .model gpt-4-32k
> .model gpt-3.5-turbo
> .model gpt-3.5-turbo-16k
2023-03-21 01:45:48 +00:00
```
### `.prompt` - Set GPT prompt
2023-03-06 02:33:13 +00:00
When you set up a prompt, every message sent later will carry the prompt.
```
2023-03-10 02:27:24 +00:00
〉{ .prompt
I want you to translate the sentences I write into emojis.
2023-03-10 02:27:24 +00:00
I will write the sentence, and you will express it with emojis.
2023-03-13 02:26:33 +00:00
I just want you to express it with emojis.
I want you to reply only with emojis.
2023-03-10 02:27:24 +00:00
}
2023-03-06 02:33:13 +00:00
Done
2023-03-10 02:27:24 +00:00
〉You are a genius
2023-03-06 02:33:13 +00:00
👉🧠💡👨‍🎓
2023-03-10 02:27:24 +00:00
〉I'm embarrassed
2023-03-06 02:33:13 +00:00
🙈😳
```
2023-03-21 01:45:48 +00:00
`.prompt` actually creates a temporary role internally, so **run `.clear role` to clear the prompt**.
2023-03-06 02:33:13 +00:00
When you are satisfied with the prompt, add it to `roles.yaml` for later use.
### `.role` - Let the AI play a role
2023-03-08 13:35:21 +00:00
Select a role:
2023-03-10 02:27:24 +00:00
2023-03-08 13:35:21 +00:00
```
2023-03-10 02:27:24 +00:00
〉.role emoji
name: emoji
prompt: I want you to translate the sentences I write 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}.
2023-03-10 02:27:24 +00:00
temperature: null
```
AI takes the role we specified:
2023-03-10 02:27:24 +00:00
```
emoji〉hello
👋
2023-03-08 13:35:21 +00:00
```
Clear current selected role:
2023-03-08 13:35:21 +00:00
```
2023-03-10 02:27:24 +00:00
emoji〉.clear role
〉hello
2023-03-10 02:27:24 +00:00
Hello there! How can I assist you today?
2023-03-08 13:35:21 +00:00
```
2023-03-10 02:27:24 +00:00
### `.conversation` - start a context-aware conversation
2023-03-06 02:33:13 +00:00
2023-03-10 02:27:24 +00:00
By default, aichat behaves in a one-off request/response manner.
2023-03-06 02:33:13 +00:00
2023-03-10 02:27:24 +00:00
You can run `.conversation` to enter context-aware mode, or set `config.conversation_first` true to start a conversation immediately upon repl.
2023-03-06 02:33:13 +00:00
2023-03-08 13:35:21 +00:00
```
2023-03-10 02:27:24 +00:00
〉.conversation
list 1 to 5, one per line 4089
1
2
3
4
5
reverse the list 4065
5
4
3
2
1
2023-03-08 13:35:21 +00:00
```
2023-03-06 02:33:13 +00:00
When entering conversation mode, prompt `〉` will change to ``. A number will appear on the right,
indicating how many tokens are left to use.
2023-03-10 02:27:24 +00:00
Once the number becomes zero, you need to start a new conversation.
Exit conversation mode:
2023-03-21 01:45:48 +00:00
```
.clear conversation 4043
```
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.