🧠

ターミナル で使える対話的な ChatAI CLI

2024/04/09に公開

プログラマなら https://chat.openai.com の WebUI より、すでに手元にあるターミナルで AI と会話したいですよね。

自分が欲しい機能

  • ストリームで出力
  • 対話コンテキストを保存
  • 複数プラットフォームからモデルを選択
    • OpenAI
    • AnthropicAI
    • CloudflareAI
  • そのままだと複数行の入力が難しいので、--edit でvscode を開いて編集
  • いくつかのシステムプロンプトを用意しておいて、対話コンテキスト生成時に選択

作った

というわけで、deno で試作しました。

https://github.com/mizchi/previs/tree/main/chat

デフォルトだと chat で入るのですが、 --name の部分で調整できます。

# install deno on mac
# curl -fsSL https://deno.land/x/install/install.sh | sh
$ deno install -AF https://deno.land/x/previs@v0.1.7/chat/chat.ts --name chat
✅ Successfully installed chat

$ chat -h    
Usage:
  $ chat [cmd] [...options] [message]
  $ chat "hello" # chat with message
  $ chat -e # edit message with vscode

COMMANDS:
  $ chat history [context]      # Show chat history
  $ chat system new <system-name>       # system with vscode
  $ chat context [context]      # Show context or switch
  $ chat model  # Switch model
  $ chat alias [context]        # Create alias
  $ chat delete [context]       # Delete context
  $ chat reset  # Reset context

Options:
  --edit:       Edit file
  --debug:      Debug mode
  --help:       Show help
  --prompt:     Prompt file path
  --file:       from file path
  --template:   Template file path

使い方

使うモデルに応じてAPI_KEY を環境変数をセットしてください。

$ export OPENAI_API_KEY ...
$ export ANTHROPIC_API_KEY ...
$ export CF_API_TOKEN ...
$ export CF_ACCOUNT_ID...

最初に起動するとモデル、システムプロンプトを選択します。

$ chat "Hello"
[chat] iqdh1tsqyg(2)[model: claude-3-opus-20240229][system: default]
Hello! Is there something specific I can help you with today? Feel free to ask me anything.

$ chat --edit
# vscode でファイルが開くので、編集して保存すると送信される

# 会話コンテキストをリセットする
$ chat reset

システムプロンプトの追加

~/.promptsn/templates/my-template.md を追加すると、システムプロンプトを追加します。

$ chat reset                           
[chat] greeting(0)[model: claude-3-opus-20240229][system: default]
Select model
  openai : gpt-4
  openai : gpt-4-turbo
> anthropic : claude-3-opus-20240229
  anthropic : claude-3-sonnet-20240229
  anthropic : claude-3-haiku-20240307
  cloudflare : @cf/meta/llama-2-7b-chat-int8
  cloudflare : @cf/meta/llama-2-7b-chat-fp16

もちろん環境に応じたAPI_KEYが必要になります。

おわり

こういうの、無限に作られているとは思うんですが結局今は自分がほしいのものを自作するしかない気がしてます。

Discussion