EmacsでLLMを使う: chatgpt-shell
[2025-04-15] 続編 EmacsでLLMを使う: gptel も書いた。
EmacsでLLMを使うには chatgpt-shell が便利そうだ。インストールは melpa でできる。
~/.emacs.d/init.el には例えば次のように書く(APIキーは環境変数 OPENAI_API_KEY に設定されているとする):
(use-package chatgpt-shell :ensure t :custom ((chatgpt-shell-openai-key (getenv "OPENAI_API_KEY"))))
私はさらにGoogleやAnthropicのAPI、さらには Ollama でローカルLLMのGemma 3のGGUF 8ビット版をデフォルトで使うために、次のようにした。
(use-package chatgpt-shell
:ensure t
:custom
((chatgpt-shell-openai-key (getenv "OPENAI_API_KEY"))
(chatgpt-shell-google-key (getenv "GOOGLE_API_KEY"))
(chatgpt-shell-anthropic-key (getenv "ANTHROPIC_API_KEY"))
(chatgpt-shell-model-version "gemma3:27b-it-q8_0")
(chatgpt-shell-model-temperature 0) ; 0.0-2.0
(chatgpt-shell-system-prompt nil)
)
:config
(add-to-list 'chatgpt-shell-models
(chatgpt-shell-ollama-make-model
:version "gemma3:27b-it-q8_0"
:short-version "gemma3-27b-q8"
:token-width 8
:context-window 131072))
)
:token-width は量子化ビット数、:context-window はコンテクスト長である(これらは単なるコメントで、今のところOllamaのコンテクスト長を設定する機能はなさそうだ。これが必要なら gptel のほうがよさそうだ)。
これで M-x chatgpt-shell する。
話題を変えるときは clear と打ち込む。バッファが空になる(ただし undo できる)ので、必要なら clear する前に保存しておく。
モデルを交換するには M-x chatgpt-shell-swap-model (C-c C-v) する。Tabで一覧が出る。
温度を変えるには M-x set-variable ⏎ chatgpt-shell-model-temperature ⏎ 0.7 ⏎ などとする。
1行のプロンプトなら直接書き込んで ⏎ すればいいが、長いプロンプトの場合は別バッファに書いて範囲選択し、M-x chatgpt-shell-send-region するのが便利である。あるいは、C-c C-e (M-x chatgpt-shell-prompt-compose) でプロンプト編集用のバッファを開き、そこにプロンプトを書いて、C-c C-c で送る(または C-c C-k で送らずに閉じる)。
セッションの保存は M-x chatgpt-shell-save-session-transcript (C-x C-s)、リストアは M-x chatgpt-shell-restore-session-from-transcript でできる。