🤖

ターミナルから ChatGPT に質問できる Go 製 CLI 「askai」の紹介

2023/09/19に公開

だいぶ今更感もありますが、ターミナルからパッと AI に質問投げられたらいいなぁと思ったので作りました。


こういうの


こういうことや


こういうこともできる

https://github.com/koki-develop/askai

類似のツールも色々ありますが作りたかったので作りました。
この記事では askai のインストール方法から基本的な使い方、仕組みについて簡単にまとめます。

インストール

Homebrew を使用している場合は次のコマンドでインストールすることができます。

$ brew install koki-develop/tap/askai

go install を使用してインストールすることも可能です。

$ go install github.com/koki-develop/askai@latest

準備

1. OpenAI API の API Key を発行する

askai では内部的に OpenAI API を使用しています。
OpenAI API にリクエストするために必要な API Key を発行します。

まず「API keys」にアクセスします。

Create new secret key をクリックします。

Name に任意の名前を入力し、 Create secret key をクリックします。

API Key が発行されるので、ひかえておきます。

2. askai の設定を行う

askai --configure を実行すると対話的なセットアップが始まります。

$ askai --configure

入力する項目は次の通りです。

  • OpenAI API Key: 「1. OpenAI API Key を発行する」手順で発行した API Key 。
  • Model: 使用するモデル名。
    • 有効な値: gpt-4, gpt-4-0613, gpt-4-32k, gpt-4-32k-0613, gpt-3.5-turbo, gpt-3.5-turbo-0613, gpt-3.5-turbo-16k, gpt-3.5-turbo-16k-0613

設定が完了するとカレントディレクトリに .askai という名前で設定ファイルが作成されます。

.askai
# 例
api_key: <API Key>
model: gpt-4

これで準備は完了です。

使い方

単発の質問をする

askai の引数に質問内容を渡して実行するだけです。
次のコマンドは、 Hello world と出力する Go プログラムを書いてもらう例です。

$ askai 'Please write a program in Go that outputs "Hello world”.'

対話形式で質問をする

-i もしくは --interactive フラグを指定することで対話形式で質問をすることもできます。
もちろん複数行にも対応しており、 Ctrl + d でメッセージを送信します。

$ askai -i

質問内容を標準入力から渡す

質問内容は標準入力から渡すこともできます。

# 標準入力から渡す
$ echo '質問' | askai

# ファイルの場合
$ askai < question.txt

標準入力からの入力と引数は同時に渡すこともできます。
これを活用すると、例えば次のように特定のファイルの内容を要約させたりもできます。

$ cat README.md | askai 'この内容を日本語で要約してください。'

仕組み

go-openai を利用して Chat Completions API にリクエストを送信しています。

https://github.com/sashabaranov/go-openai

対話モードのテキスト入力の描画には Bubble Tea を使用しています。
CLI フレームワークには Cobra 、リリースには GoReleaser を使用しています。
これらについては簡単に説明した記事があるのでこちらをご参照ください。

https://zenn.dev/kou_pg_0131/articles/go-cli-packages
https://zenn.dev/kou_pg_0131/articles/goreleaser-usage

まとめ

我ながら良きです。

Discussion