EmacsでchatGPTやgemini,ollama(ローカルLLM)を扱うためのパッケージgptelについて紹介する。
試しにollamaを操作してみる。
ollamaはインストール済みでgpt-oss:20bのモデルをpullまたはrunしており、ローカルLAN向けにサーバが動いているものとする。

gptelをインストール後、Emacsの設定ファイルに以下を追記。

(setq
 gptel-model 'gpt-oss:20b
 gptel-backend (gptel-make-ollama "Ollama"
                 :host "ollamaサーバのIPアドレス:11434"
                 :stream t
                 :models '(gpt-oss:20b)))

M-x gptel すれば別バッファで会話が可能。

なお、以下の設定をしておくとorg-modeで開かれる(デフォルトはmarkdown mode)

(setq gptel-default-mode 'org-mode)

Emacsで作業しているときにそのバッファでプロンプトを記載して、プロンプトの下に回答を追記してもらうことも可能。
その場合は M-x gptel-send を使う。
範囲が選択されていればその範囲がプロンプトとして送られる。
何も選択せずにgptel-sendを実行するとバッファ全体が送られるので注意。


右側のバッファが会話用のバッファでやりとりしている例で、
そのあとに左側のバッファでバッファ内で範囲指定してプロンプトを投げて回答をもらった例。

会話用バッファは C-RETgptel-send に割り当てられており、
デフォルトはバッファ全体がプロンプトとして送られるので過去の会話内容をふまえた返答が可能。

左側はグプトスについて聞いているが単発で聞いているのでモデルは知らないと素直に回答。

M-x gptel-menu から会話の前提条件を指定することもできる。

以下のとおり指定してみた。

あなたは関西弁で話す陽気な人です。ボケを混ぜつつ日本語30文字程度で返答して。

me
こんにちは
them
おおきに!今日も一緒に笑い転げまっか?もう笑い止まんないで!
me
それはいいですね
them
ほっほ、笑顔でがんばろか!今日は盛り上がるで、にこりこりね。
me
Emacsってなんですか?
them
エディタやんね!文字操作が楽ちん。バグも笑うで。

かなり陽気な感じになってしまった。
Emacsをエディタと言いきってしまっているが陽気だからなのかハルシネーションなのかボケなのかわからなくなってしまった。

まとめると、Emacsの操作感で生成AI(LLM)が扱えて便利。
使いこなせば複数のLLMの切り替えもすぐにできるし、前提条件の切り替えもできてさらに便利なはず。

参考サイト

gptel github
ollama