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)) )
これで M-x chatgpt-shell する。
話題を変えるときは clear と打ち込む。バッファが空になる(ただし undo できる)ので、必要なら clear する前に保存しておく。
モデルを交換するには M-x chatgpt-shell-swap-model とする。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 リストアは M-x chatgpt-shell-restore-session-from-transcript でできる。