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-10-27 10:52:31 +00:00
Use ChatGPT, LocalAI and other LLMs 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
```
2023-07-10 03:17:42 +00:00
### Binaries for macOS, Linux, Windows
2023-03-03 00:28:46 +00:00
2023-07-10 03:17:42 +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-10-28 14:22:37 +00:00
- Supports multiple AIs, including openai and localai.
2023-03-21 01:45:48 +00:00
- Support chat and command modes
2023-10-30 02:36:08 +00:00
- Use [roles ](#roles )
2023-03-06 05:00:43 +00:00
- Powerful [Chat REPL ](#chat-repl )
2023-10-28 13:39:17 +00:00
- Context-aware conversation/session
2023-07-10 03:17:42 +00:00
- Syntax highlighting markdown and 200 other languages
- Stream output with hand-typing effect
2023-03-21 01:45:48 +00:00
- Support multiple models
2023-07-10 03:17:42 +00:00
- 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
2023-07-10 03:17:42 +00:00
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
2023-10-28 14:22:37 +00:00
> Select AI? openai
2023-10-27 10:44:27 +00:00
> API key: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
> Has Organization? No
> Use proxy? No
2023-03-03 02:34:02 +00:00
> Save chat messages Yes
```
2023-07-10 03:17:42 +00:00
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
2023-03-03 01:38:53 +00:00
```yaml
2023-10-27 10:52:31 +00:00
model: openai:gpt-3.5-turbo # Choose a model
temperature: 1.0 # See https://platform.openai.com/docs/api-reference/chat/create#chat/create-temperature
2023-10-28 13:39:17 +00:00
save: true # If set true, aichat will save non-session chat messages to messages.md
2023-10-27 10:44:27 +00:00
highlight: true # Set false to turn highlight
light_theme: false # If set true, use light theme
2023-10-30 02:07:01 +00:00
wrap: no # Specify the text-wrapping mode (no*, auto, < max-width > )
wrap_code: false # Whether wrap code block
2023-10-27 10:44:27 +00:00
auto_copy: false # Automatically copy the last output to the clipboard
2023-10-27 13:22:24 +00:00
keybindings: emacs # REPL keybindings, possible values: emacs (default), vi
2023-10-27 10:44:27 +00:00
2023-10-28 14:22:37 +00:00
clients: # Setup AIs
2023-10-29 02:44:30 +00:00
# See https://platform.openai.com/docs/quickstart
2023-10-27 10:44:27 +00:00
- type: openai # OpenAI configuration
2023-10-28 23:01:13 +00:00
api_key: sk-xxx # OpenAI api key, alternative to OPENAI_API_KEY
2023-10-27 10:52:31 +00:00
organization_id: org-xxx # Organization ID. Optional
proxy: socks5://127.0.0.1:1080 # Set proxy server. Optional
connect_timeout: 10 # Set a timeout in seconds for connect to gpt. Optional
2023-10-29 02:44:30 +00:00
# See https://github.com/go-skynet/LocalAI
2023-10-27 10:44:27 +00:00
- type: localai # LocalAI configuration
2023-10-28 23:01:13 +00:00
url: http://localhost:8080/v1/chat/completions # LocalAI api server
2023-10-29 02:44:30 +00:00
api_key: xxx # Api key. alternative to LOCALAI_API_KEY
2023-10-27 10:44:27 +00:00
models: # Support models
- name: gpt4all-j
max_tokens: 4096
2023-10-29 02:48:19 +00:00
proxy: socks5://127.0.0.1:1080 # Set proxy server. Optional
connect_timeout: 10 # Set a timeout in seconds for connect to gpt. Optional
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
2023-07-10 03:17:42 +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
2023-10-30 02:36:08 +00:00
We can define 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
2023-07-10 03:17:42 +00:00
For example, we can 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-07-10 03:17:42 +00:00
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
```
2023-07-10 03:17:42 +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-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-10-27 11:01:22 +00:00
AIChat with roles will be a universal tool.
```
$ aichat --role shell extract encrypted zipfile app.zip to /tmp/app
unzip -P password app.zip -d /tmp/app
$ cat README.md | aichat --role spellcheck
```
For more details about roles, please visit [Role Guide ](https://github.com/sigoden/aichat/wiki/Role-Guide ).
2023-03-05 03:11:15 +00:00
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-07-10 03:17:42 +00:00
2023-03-10 06:51:15 +00:00
- Emacs keybinding
- Command autocompletion
- History search
- Fish-style history autosuggestion hints
2023-10-27 10:44:27 +00:00
- Edit/paste multiline input
2023-03-10 06:51:15 +00:00
- Undo support
2023-03-06 02:33:13 +00:00
2023-10-27 10:44:27 +00:00
### Multi-line input
2023-03-10 02:27:24 +00:00
2023-10-30 02:19:15 +00:00
AIChat supports bracketed paste, so you can paste multi-lines text directly.
2023-10-27 10:44:27 +00:00
2023-10-27 14:00:28 +00:00
AIChat also provides `.edit` command for multi-lines editing.
2023-03-06 02:33:13 +00:00
```
2023-10-27 10:44:27 +00:00
〉.edit convert json below to toml
2023-03-10 02:27:24 +00:00
{
"an": [
"arbitrarily",
"nested"
],
"data": "structure"
2023-10-27 10:44:27 +00:00
}
2023-03-10 02:27:24 +00:00
```
2023-10-27 10:44:27 +00:00
> Submit the multi-line text with `Ctrl+S`.
2023-03-10 02:27:24 +00:00
### `.help` - Print help message
```
〉.help
2023-10-27 10:44:27 +00:00
.info Print system-wide information
2023-03-10 02:27:24 +00:00
.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
.role Select a role
.clear role Clear the currently selected role
2023-10-28 13:39:17 +00:00
.session Start a session
.clear session End current session
2023-10-27 10:44:27 +00:00
.copy Copy the last output to the clipboard
2023-10-28 13:39:17 +00:00
.read Read the contents of a file and submit
2023-10-27 10:44:27 +00:00
.edit Multi-line editing (CTRL+S to finish)
2023-10-28 23:01:13 +00:00
.history Print the REPL history
.clear history Clear the REPL history
2023-03-10 02:27:24 +00:00
.help Print this help message
.exit Exit the REPL
2023-03-13 02:26:33 +00:00
Press Ctrl+C to abort readline, Ctrl+D to exit the REPL
2023-03-06 02:33:13 +00:00
```
2023-07-10 03:17:42 +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
2023-10-28 13:39:17 +00:00
sessions_dir /home/alice/.config/aichat/sessions
2023-10-27 10:44:27 +00:00
model openai:gpt-3.5-turbo
temperature 0.7
2023-03-06 05:00:43 +00:00
save true
highlight true
2023-03-13 02:26:33 +00:00
light_theme false
2023-03-06 05:00:43 +00:00
dry_run false
2023-10-27 10:44:27 +00:00
vi_keybindings true
2023-03-06 05:00:43 +00:00
```
2023-07-10 03:17:42 +00:00
### `.set` - Modify the configuration temporarily
2023-03-06 02:33:13 +00:00
2023-03-05 03:11:15 +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
2023-03-05 03:11:15 +00:00
```
2023-07-10 03:17:42 +00:00
### `.model` - Choose a model
2023-03-21 01:45:48 +00:00
```
2023-10-27 10:44:27 +00:00
> .model openai:gpt-4
> .model localai:gpt4all-j
2023-03-21 01:45:48 +00:00
```
2023-07-10 03:17:42 +00:00
### `.role` - Let the AI play a role
2023-03-08 13:35:21 +00:00
2023-07-10 03:17:42 +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
2023-07-10 03:17:42 +00:00
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
```
2023-07-10 03:17:42 +00:00
AI takes the role we specified:
2023-03-10 02:27:24 +00:00
```
emoji〉hello
👋
2023-03-08 13:35:21 +00:00
```
2023-07-10 03:17:42 +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
2023-07-10 03:17:42 +00:00
〉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-10-28 13:39:17 +00:00
## Session - 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-10-28 14:22:37 +00:00
You should run aichat with `-s/--session` or use the `.session` command to start a session.
2023-03-06 02:33:13 +00:00
2023-03-08 13:35:21 +00:00
```
2023-10-28 13:39:17 +00:00
〉.session
2023-10-29 02:44:30 +00:00
temp) 1 to 5, odd only 4089
2023-10-28 13:39:17 +00:00
1, 3, 5
2023-03-10 02:27:24 +00:00
2023-10-29 02:44:30 +00:00
temp) to 7 4070
2023-10-28 13:39:17 +00:00
1, 3, 5, 7
2023-03-10 02:27:24 +00:00
2023-10-28 13:39:17 +00:00
temp) .clear session
2023-03-21 01:45:48 +00:00
2023-10-28 13:39:17 +00:00
〉
2023-03-21 01:45:48 +00:00
```
2023-10-28 13:39:17 +00:00
```sh
2023-10-28 23:01:13 +00:00
aichat --list-sessions # List sessions.
aichat -s # Start with a new temp session.
aichat -s temp # Reuses previous temp session.
aichat -s rust # Reuses session named rust. If it does not exist, create a new session named rust.
aichat -s rust --info # Show session details.
2023-03-21 01:45:48 +00:00
```
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.