EmacsでLLMを使う: gptel
[2025-04-16] gptelがgpt-4.1に対応したので一部削除しました。
EmacsでLLMを使う: chatgpt-shell の続編として、gptel を試してみた。
インストールはやはり melpa でできる。念のため説明すると、~/.emacs.d/init.el に
(require 'package) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) (package-initialize)
と書いておいて、M-x package-list-packages
で gptel の上で I
を打ち、x
でインストールを実行する。ついでに markdown-mode も入ってなければ入れておく。アップデートは、ときどき M-x package-list-packages
してみて、アップデートの知らせがあれば U
を打ち、x
で実行する。
インストールできたら ~/.emacs.d/init.el に例えば次を書き加える。ただしOpenAIのAPIキーが環境変数 OPENAI_API_KEY
に設定されているとする。
(use-package gptel :ensure t :config (setq gptel-api-key (getenv "OPENAI_API_KEY")))
次はもっと複雑な例で、まだgptelに登録されていないgpt-4.1を含むいくつかのモデルをメニューに加え、ローカルで動いているOllamaのモデルをデフォルトにする:
(use-package gptel :ensure t :config (setq gptel-api-key (getenv "OPENAI_API_KEY")) ;; (gptel-make-openai "OpenAI" ;; :key (getenv "OPENAI_API_KEY") ;; :models '(gpt-4.1) ;; :stream t) (gptel-make-anthropic "Claude" :key (getenv "ANTHROPIC_API_KEY") :models '(claude-3-7-sonnet-20250219) :stream t) (gptel-make-gemini "Gemini" :key (getenv "GOOGLE_API_KEY") :models '(gemini-2.5-pro-preview-03-25) :stream t) (setq gptel-model 'gemma3:27b-it-q8_0) (setq gptel-backend (gptel-make-ollama "Ollama" :host "localhost:11434" :models '(gemma3:27b-it-q8_0) :stream t)) (setq gptel-temperature 0) (setq gptel-max-tokens 8192) ; max response tokens (setq gptel--system-message nil))
M-x gptel-menu
でメニューが出る。メニューにあるように -m
でモデルが選択できる。
通常は M-x gptel-send
だけ覚えればよい。バッファの先頭からカーソル位置までがプロンプトになる。カーソル位置から返答が表示されるので、その後にさらに質問を書けば、さらにその後に答えが返る。過去のやりとりを編集することもできる。バッファの一部分だけをプロンプトにしたい場合は、範囲(リージョン)を指定してから M-x gptel-send
する。
もう一つの方法として、M-x gptel
でチャット専用バッファを出して、そこで会話する。送信は C-c RET
である。