aichat/README.md

318 lines
8.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)
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
```
### 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-10-30 09:09:53 +00:00
- Supports multiple LLMs, including OpenAI and LocalAI.
2023-03-21 01:45:48 +00:00
- Support chat and command modes
2023-10-30 09:09:53 +00:00
- Use [Roles](#roles)
2023-03-06 05:00:43 +00:00
- Powerful [Chat REPL](#chat-repl)
- Context-aware conversation/session
- Syntax highlighting markdown and 200 other languages
- Stream output with hand-typing effect
2023-10-30 09:09:53 +00:00
- Support proxy
- Dark/light theme
2023-10-30 09:09:53 +00:00
- Save chat messages/sessions
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
2023-10-31 08:50:08 +00:00
> AI Platform: openai
> API Key: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2023-03-03 02:34:02 +00:00
```
2023-10-31 09:34:16 +00:00
Feel free to adjust the configuration according to your needs.
2023-03-03 00:28:46 +00:00
```yaml
2023-10-31 09:34:16 +00:00
model: openai:gpt-3.5-turbo # LLM model
temperature: 1.0 # GPT temperature, between 0 and 2
save: true # Whether to save the message
2023-10-27 10:44:27 +00:00
highlight: true # Set false to turn highlight
2023-10-31 09:34:16 +00:00
light_theme: false # Whether to use a light theme
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-31 09:34:16 +00:00
keybindings: emacs # REPL keybindings. values: emacs, vi
2023-10-27 10:44:27 +00:00
2023-10-31 08:50:08 +00:00
clients:
- type: openai
api_key: sk-xxx
2023-10-31 09:34:16 +00:00
organization_id:
2023-10-29 02:44:30 +00:00
2023-10-31 09:34:16 +00:00
- type: local ai
2023-10-31 08:50:08 +00:00
api_base: http://localhost:8080/v1
2023-03-03 00:28:46 +00:00
```
2023-10-31 09:34:16 +00:00
Check out [config.example.yaml](config.example.yaml) for all configuration items.
2023-03-03 00:28:46 +00:00
2023-10-31 09:34:16 +00:00
There are some configurations that can be set through environment variables. Please see the [Environment Variables](https://github.com/sigoden/aichat/wiki/Environment-Variables) for details.
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 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
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-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-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-10-30 05:36:08 +00:00
- Emacs/Vi keybinding
2023-03-10 06:51:15 +00:00
- Command autocompletion
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-30 05:36:08 +00:00
### `.help` - print help message
2023-03-10 02:27:24 +00:00
```
〉.help
2023-10-30 06:17:15 +00:00
.help Print this help message
.info Print system info
2023-10-27 10:44:27 +00:00
.edit Multi-line editing (CTRL+S to finish)
2023-10-30 06:17:15 +00:00
.model Switch LLM model
.role Use role
.info role Show role info
2023-10-30 06:17:15 +00:00
.exit role Leave current role
.session Start a context-aware chat session
.info session Show session info
2023-10-30 06:17:15 +00:00
.exit session End the current session
.set Modify the configuration parameters
.copy Copy the last reply to the clipboard
.read Import from file and submit
2023-03-10 02:27:24 +00:00
.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-10-30 06:17:15 +00:00
2023-03-06 02:33:13 +00:00
```
### `.info` - view 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
sessions_dir /home/alice/.config/aichat/sessions
2023-10-27 10:44:27 +00:00
model openai:gpt-3.5-turbo
2023-10-30 07:08:49 +00:00
temperature -
2023-03-06 05:00:43 +00:00
save true
highlight true
2023-03-13 02:26:33 +00:00
light_theme false
2023-10-30 07:08:49 +00:00
wrap no
wrap_code false
2023-03-06 05:00:43 +00:00
dry_run false
2023-10-30 07:08:49 +00:00
keybindings emacs
2023-03-06 05:00:43 +00:00
```
2023-10-30 05:36:08 +00:00
### `.edit` - multiline editing
AIChat supports bracketed paste, so you can paste multi-lines text directly.
AIChat also provides `.edit` command for multi-lines editing.
```
〉.edit convert json below to toml
{
"an": [
"arbitrarily",
"nested"
],
"data": "structure"
}
```
2023-10-30 06:17:15 +00:00
> Submit with `Ctrl+S`.
2023-10-30 05:36:08 +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-10-30 05:36:08 +00:00
> You can easily enter enter model name using autocomplete.
### `.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
```
2023-10-30 11:30:28 +00:00
Send message with the role:
2023-03-10 02:27:24 +00:00
```
emoji〉hello
👋
2023-03-08 13:35:21 +00:00
```
Leave current role:
2023-03-08 13:35:21 +00:00
```
2023-10-30 06:17:15 +00:00
emoji〉.exit role
2023-03-10 02:27:24 +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
```
Show role info:
```
emoji〉.info role
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}.
temperature: null
```
2023-10-30 11:30:28 +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
```
〉.session
2023-10-30 05:36:08 +00:00
temp1 to 5, odd only 4089
1, 3, 5
2023-03-10 02:27:24 +00:00
2023-10-30 05:36:08 +00:00
tempto 7 4070
1, 3, 5, 7
2023-03-10 02:27:24 +00:00
2023-10-30 06:17:15 +00:00
temp.exit session
2023-03-21 01:45:48 +00:00
2023-03-21 01:45:48 +00:00
```
2023-10-30 06:17:15 +00:00
### `.set` - modify the configuration temporarily
```
〉.set temperature 1.2
〉.set dry_run true
〉.set highlight false
〉.set save false
```
2023-10-30 09:09:53 +00:00
## Command Line
```
Usage: aichat [OPTIONS] [TEXT]...
Arguments:
[TEXT]... Input text
Options:
-m, --model <MODEL> Choose a LLM model
-r, --role <ROLE> Choose a role
-s, --session [<SESSION>] Create or reuse a session
-H, --no-highlight Disable syntax highlighting
-S, --no-stream No stream output
-w, --wrap <WRAP> Specify the text-wrapping mode (no*, auto, <max-width>)
--light-theme Use light theme
--dry-run Run in dry run mode
--info Print related information
--list-models List all available models
--list-roles List all available roles
--list-sessions List all available sessions
-h, --help Print help
-V, --version Print version
```
2023-10-30 11:30:28 +00:00
Here are some practical examples:
2023-10-30 09:09:53 +00:00
```sh
aichat -s # Start REPL with a new temp session
2023-10-30 11:30:28 +00:00
aichat -s temp # Reuse temp session
2023-10-30 09:09:53 +00:00
aichat -r shell -s # Create a session with a role
aichat -m openai:gpt-4-32k -s # Create a session with a model
aichat -s sh unzip a file # Run session in command mode
aichat -r shell unzip a file # Use role in command mode
aichat -s shell unzip a file # Use session in command mode
cat config.json | aichat convert to yaml # Read stdin
cat config.json | aichat -r convert:yaml # Read stdin with a role
cat config.json | aichat -s i18n # Read stdin with a session
2023-10-30 09:09:53 +00:00
aichat --list-models # List all available models
aichat --list-roles # List all available roles
aichat --list-sessions # List all available models
aichat --info # system-wide information
aichat -s temp --info # Show session details
aichat -r shell --info # Show role info
$(echo "$data" | aichat -S -H to json) # Use aichat in a script
2023-10-30 09:09:53 +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.