aichat/README.md

250 lines
6.0 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-03-06 05:37:34 +00:00
A powerful ChatGPT command line tool that allows easy chat with ChatGPT-3.5 in a terminal.
2023-03-06 02:33:13 +00:00
2023-03-08 13:35:21 +00:00
![demo](https://user-images.githubusercontent.com/4012553/223645914-f397b95f-1a30-4eda-a6a8-5bd0c2903add.gif)
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)
2023-03-08 13:35:21 +00:00
- syntax highlighting markdown and other 200 languages.
- Stream output with hand typing effect
- Multiline input support and emacs-like editing experience
2023-03-06 05:00:43 +00:00
- 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
```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-08 23:04:12 +00:00
> You can use `.info` to view the current configuration file path
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
```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-08 13:35:21 +00:00
# temperature: 0.3
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-08 13:35:21 +00:00
〉 extract encrypted zipfile app.zip to /tmp/app
```
```bash
mkdir /tmp/app
unzip -P PASSWORD app.zip -d /tmp/app
2023-03-03 00:28:46 +00:00
```
## CLI
2023-03-03 00:28:46 +00:00
```
2023-03-06 02:33:13 +00:00
A powerful chatgpt cli.
Usage: aichat [OPTIONS] [TEXT]...
Arguments:
2023-03-06 02:33:13 +00:00
[TEXT]... Input text
Options:
2023-03-06 02:33:13 +00:00
-H, --no-highlight Turn off highlight
2023-03-08 13:35:21 +00:00
-S, --no-stream No stream output
--list-roles List all roles
2023-03-06 02:33:13 +00:00
-r, --role <ROLE> Select a role
-h, --help Print help
-V, --version Print version
```
2023-03-08 13:35:21 +00:00
### Command mode
2023-03-06 02:33:13 +00:00
```sh
2023-03-08 13:35:21 +00:00
aichat math 3.8x4
2023-03-06 02:33:13 +00:00
```
2023-03-08 13:35:21 +00:00
control highlighting and streaming
2023-03-06 02:33:13 +00:00
```sh
2023-03-08 13:35:21 +00:00
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
2023-03-06 02:33:13 +00:00
```
2023-03-08 13:35:21 +00:00
pipe input/output
```sh
# convert toml to json
cat data.toml | aichat turn toml below to json > data.json
```
### Chat mode
2023-03-06 02:33:13 +00:00
Enter Chat REPL if no text input.
```
$ aichat
2023-03-08 13:35:21 +00:00
Welcome to aichat 0.5.0
Type ".help" for more information.
```
2023-03-06 02:33:13 +00:00
## Chat REPL
aichat has a powerful Chat REPL.
Tle Chat REPL supports:
- emacs keybinding
- command autocompletion
- history search
- fish-style history autosuggestion hints
2023-03-08 13:35:21 +00:00
- edit/past multiline input
2023-03-06 02:33:13 +00:00
- undo support
- clipboard integration
Chat REPL also provide many commands.
```
2023-03-08 13:35:21 +00:00
Welcome to aichat 0.5.0
2023-03-06 02:33:13 +00:00
Type ".help" for more information.
.info Print the information
.set Modify the configuration temporarily
2023-03-08 13:35:21 +00:00
.prompt Add a GPT prompt
2023-03-06 02:33:13 +00:00
.role Select a role
.clear role Clear the currently selected role
.history Print the history
.clear history Clear the history
2023-03-08 13:35:21 +00:00
.editor Enter editor mode for multiline input
2023-03-06 02:33:13 +00:00
.help Print this help message
.exit Exit the REPL
Press Ctrl+C to abort session, Ctrl+D to exit the REPL
```
2023-03-08 13:35:21 +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
role -
api_key sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
temperature -
save true
highlight true
proxy -
dry_run false
```
2023-03-08 13:35:21 +00:00
### `.set` - modify the configuration temporarily
2023-03-06 02:33:13 +00:00
```
2023-03-06 02:33:13 +00:00
〉.set highlight false
〉.set save false
〉.set temperature 1.2
```
2023-03-08 13:35:21 +00:00
### `.prompt` - use GPT prompt
2023-03-06 02:33:13 +00:00
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
🙈😳
```
2023-03-08 13:35:21 +00:00
`.prompt` actually creates a temporary role called `%TEMP%` 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.
2023-03-08 13:35:21 +00:00
### `.role` - let the ai play a role
Select a role.
```
〉.role shell
```
Unselect a role.
```
〉.clear role
```
Use `.info` to check current selected role.
2023-03-06 02:33:13 +00:00
2023-03-08 13:35:21 +00:00
### `.editor` - input/paste multiline text
2023-03-06 02:33:13 +00:00
2023-03-08 13:35:21 +00:00
Type `.editor {` to enter editor mode, you can input/paste multiline text, quite editor mode with `}`
2023-03-06 02:33:13 +00:00
2023-03-08 13:35:21 +00:00
```
〉.editor {convert json below to toml
::: {
::: "an": [
::: "arbitrarily",
::: "nested"
::: ],
::: "data": "structure"
::: }
::: }
```
2023-03-06 02:33:13 +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.