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 でできる。