大規模言語モデル(LLM)の登場以降、テキストベースの作業は大きく変わりつつあります。
個人的にはLLMは直接的な知識提供よりは、やはり自然言語操作における能力で真価を発揮すると考えています。 この能力は、ノート作成やブログ記事の執筆など、テキストベースの作業の効率を大いに向上させます。 私自身、Emacsのorg-modeを用いてメモシステムやブログの作成に取り組んでおり、EmacsにLLMを組み込むことで、この作業がさらに便利になっています。
本記事では、 chatgpt-shell
を利用してEmacsにChatGPTを組み込む方法を紹介します。
chatgpt-shellのセットアップ
chatgpt-shell
をインストールします。MELPAからインストールできます。
|
|
OpenAI API Keyの取得
chatgpt-shell
はOpenAI APIを利用するので、API Keyが必要です。
https://platform.openai.com/api-keysから Create new secret key
を選択して新しいシークレットを作成します。
Restricted scopeを選ぶ場合は以下のAPIが使える Model capabilities
を Write
権限で付与します。
- /v1/audio
- /v1/chat/completions
- /v1/embeddings
- /v1/images
- /v1/moderations
PassによるAPI Keyの保存
OpenAIのAPI KeyをEmacsから利用するために、今回はPassを使います。
Pass: The Standard Unix Password Manager
PassはコマンドラインベースのPassword Managerです。Debian系では apt
でインストールできます。
|
|
Passでは保存される情報はGPGを使って暗号化されるため、まずGPGのKeyを作成します。
|
|
プロンプトに沿ってKeyが作成できたら、 gpg --list-secret-keys --keyid-format=long
と実行してKey IDを確認します。
|
|
上記の例では、 3AA5C34371567BD2
がKey IDになります。
このKey IDを使ってPassを初期化します。
|
|
この後 pass
でストアが作成されたことが確認できます。
ストアができたらシークレットを保存します。
|
|
EmacsからAPI Keyを利用する
Emacsからは auth-source
経由でPassからシークレットを取得できます。
GPGの復号は auth-source
がやってくれます。利用時にEmacsからインタラクティブにGPGで設定したパスワードが要求されます。
上記の手順で作成したシークレットは、 openai-key
で保存されていますので、 (auth-source-pass-get 'secret "openai-key")
で取得できます。
chatgpt-shell
のconfigに追加します。
|
|
chatgpt-shellの使い方
上記の手順でOpenAI API Keyの設定が完了していれば、準備は完了です。
Chat shellを使う
最も基本的な使い方として、ChatGPTのWebフロントのようにChatシェルを使って対話をすることができます。
以下は M-x chatgpt-shell
を呼び出して、elispを生成している例です。コードのハイライトもできています。
Chatの出力を作業バッファに直接書いてもらう
M-x chatgpt-shell-prompt-appending-kill-ring
でミニバッファにChat入力をして、出力をカレントバッファに直接書き出してもらうことができます。
ブラウザとEmacsを行き来したり、コピペする必要すらないので非常に便利です。
プロンプトテンプレートを登録して、よくやる作業をコマンド化する
chatgpt-shell
にはリージョンで囲んだコードのユニットテストを書いてもらったり、文章の校正をお願いしたりするコマンドが用意されています。
これらは実際プロンプトテンプレートが書かれており、コマンドでリージョン内の文章と合わせてGPTのモデルに投げることで実現されています。
なので、同じように自分でプロンプトテンプレートを用意しておくことで独自のコマンドを作ることができます。 以下は英単語の意味と用例を特定のフォーマットで出力してもらうためのコマンド例です。
|
|
(chatgpt-shell-prompt-query-response-style 'inline)
としておくと、カレントバッファに出力してくれます。
まとめ
この記事では、EmacsにChatGPTを組み込む方法として、 chatgpt-shell
のインストールと設定プロセスを説明しました。
chatgpt-shell
は、テキスト編集やコーディングにChatGPTの能力を利用することを可能にし、直接的なテキスト入力、ChatGPTとのインタラクティブな対話、カスタムコマンドの作成など、
Webフロントで使うよりも一歩踏み込んだ効率的な使い方を実現できます。
EmacsにChatGPTを組み込むことで、ノートやコーディングを含むあらゆるテキストベースの作業効率を爆上げすることができるので、非常におすすめです。
今回は触れていませんが、 chatgpt-shell
は他にもDALL-Eによる画像生成や org-babel
との連携機能などもあるため、応用の可能性はまだまだありそうです。