ターミナルからCLIベースでChatGPTを使用できたら何となくかっこいいかも!
と思ったので今回はGo製CLI「aski」を使ってみようと思います。
事前準備
1. Opne AIのAPI KEYを発行しましょう。
下記からOpenAIのサイトにとんでください。
OpenAI
※アカウントの作成とログインは事前に必要です。
ログインした状態で左サイドバー鍵マーク「API Key」からAPIキーを作成することができます。
API KEYは一度しか表示されないので必ずメモしておきましょう
最後にクレジットカード情報を登録して完了です。
APIの使用はトークン使用量やChatgptのモデルに応じて料金が発生します。
料金体系は事前に確認しておきましょう。
2. askiのインストール
いよいよターミナルの出番です。下記のコマンドからインストールしました。
$ go install github.com/kznrluk/aski
3. askiの設定を行う
インストールが完了したらconfig.yamlファイルに
作成したAPIキーとChatGPTのモデルを入力してください。
# 例
api_key: <API Key>
model: gpt-3.5-turbo-16k
以上でaskiを使用する準備は完了です!なんと簡単なんでしょうか
4. 実際に使ってみよう
使用する際は$askaiのあとに質問を入力します。
試しにじゃんけんをしてみました。
$aski 'じゃんけんをしましょう'
$assistant ->
'じゃんけん、楽しいですね!それでは、あなたは何を出しますか? グー、チョキ、またはパーからお選びください。'
$user ->
'グー'
$assistant ->
'あなたがグーを出しましたね。では、私はパーを出します。あなたの負けです。もう一度やりますか?'
きちんと回答してくれました。さすがAIです。
忖度抜きの後出しじゃんけんで何度やっても勝たせてくれませんでした。
5. いろいろな使い方
askiには下記のオプションが用意されています。
上手く使えればCLIベースならではの便利な使い方ができそうです。
- `-h, --help` : ヘルプメッセージを表示します。
- `-p, --profile` : この会話で使用するプロファイルを選択します。
プロファイルは.aski/profilesディレクトリ内のファイル名を指定するか、任意の場所のYAMLファイルを直接指定することができます。
- `-f, --file` : 会話とともに送信するファイルを指定します。
- `-c, --content` : 対話モードを利用せず、引数のコンテンツの回答を出力してプログラムを終了します。他アプリケーションとの連携に便利です。
- `-r, --restore` : 会話履歴をヒストリファイルから復元します。このオプションを使用すると、以前の会話を続けることができます。前方一致。
- `-m, --model` : 使用するモデルを指定します。OpenAIのAPIで利用できる値である必要があります。
[Models - OpenAI API](https://platform.openai.com/docs/models/chatgpt)
Claude3を使用する場合は `claude-3-opus-20240229` を指定します。
- `--rest` : REST APIで通信します。ストリーミングが不安定な場合や、適切な応答が受信できない場合に便利です。
ストリーミングが不安定な際にREST API通信が使えるみたいです。
使わなさそうですが面白いですね。
ファイルの送信
レビューしたいコードのパスを-fで指定することで指定したファイルをテキストとしてChatGPTに送信してくれます。このオプションを使用してコードレビューをしてみました。
$ aski -f .¥lib¥ aski.go -p CodeReview -c "上記コードの改善点を教えてください。"
1. `isBinary`関数の動きが不正確であるため、バイナリファイルを無視しないようになっています。バイナリファイルを無視して、テキストファイルのみを処理するようにトラップ処理を追加しましょう。
2. `Single`関数の応答がエラー解釈によって異なるため、返り値を明確にしましょう。
3. コードがパッケージ名に関連していないため、パッケージ名を変更しましょう。
4. 変数名をより適切にして、コードの読み易さを向上させましょう。
5. ファイルのコンテキストを追加することで、シンタックスハイライトが備わり、クオートされた文の出力を避けることができます。
他にもアスタリスクで指定してまとめてファイルをChatGPTに送信することもできます
# まとめてファイルを送信する
$ aski -f *.txt
# 特定のファイルのみを送信することもできます。
$ aski -f hello.txt -f world.txt ...
応用編
プロファイル機能というものを見つけました。
よく使うプロンプトを定義しておくことで自由に使いまわせる機能です。
プロファイルはユーザーのホームディレクトリ内、.aski/config.yaml に格納されています。
試しに以下のようなプロファイルを作成しました。
#どんな長文も100文字程度に要約
- ProfileName: Summary
UserName: AJhfuk
Model: gpt-3.5-turbo
Current: true
SystemContext: |
- 指定したファイルの中身を100文字程度で要約してください
UserMessages: []
プロファイルを実行するには以下のコマンドを使用します。
aski -p ProfileName -c
ChatGPTで適当な文章を作って要約してもらいました。
ask -f test.txt -p Summary -c
asisstant ->
'春の風が心地よく吹き抜ける午後、小鳥たちのさえずりが耳に心地よく響く。色とりどりの花々が咲き誇り、
自然の美しさが満ち溢れる。思いがけない出会いや新たな挑戦に胸躍る日々。夢と希望が空を舞い、人々の心を満たす。'
よくわからない300文字くらいの文章がきちんと100文字程に要約されました。
様々なプロファイルを事前に定義しておけば作業時間の短縮にも繋がりそうです。
6. まとめ
今回は初めてChatGPTのAPIを使ってみました。活用する方法は無限にあると思うのでこれを機に他のAPIも調べて使ってみようと思います。皆さんも是非askiを活用してみてください
