gptel-translate.el
は gptel
での翻訳をサポートするためパッケージです。
LLM(大規模言語モデル)に「翻訳したいテキスト」と「入力/出力言語」を渡し、翻訳結果を取得します。
-
gptel が扱う任意の LLM(OpenAI, Gemini, Ollama 等)をそのまま利用できます。
-
モデルに応じてプロンプトを自動調整します。
-
翻訳のソース言語とターゲット言語は、ミニバッファ補完機能を使用していつでも変更できます。
注意
このパッケージは alpha バージョンであり、大きな変更が入る可能性があります。
インストールと設定
-
パッケージの取得
git clone https://github.com/TPKato/gptel-translate.git ~/.emacs.d/site-lisp/gptel-translate -
パッケージのロード & カスタマイズ
ここでは
use-packageを利用している場合の例を記載します。(use-package gptel-translate :load-path "site-lisp/gptel-translate" :config ;; 必要であれば gptel 用の設定 (モデルの追加) ;; ここで設定することもできますが、(use-package gptel ...) で追加することを推奨します (gptel-make-openai "ollama" :host "localhost:11434" :protocol "http" :endpoint "/v1/chat/completions" :stream t :models '(translategemma:4b mitmul/plamo-2-translate:latest)) :custom ;; デフォルト言語 (バッファに設定がない場合に問い合わせのデフォルトとして使用) (gptel-translate-default-lang-from "Japanese") (gptel-translate-default-lang-to "English") :bind ; optional (("C-c t" . gptel-translate-mode)))
使い方 (例)
-
gptelでのモデルの選択まず
gptelを起動し、翻訳したい LLM モデルを選択します。M-x gptel-menu RET -m ;; モデル選択 M-x gptel ;; gptel の対話モードを起動 -
gptel-translate-modeの有効化M-x gptel-translate-modeあるいは、
use-packageでバインドしたキー (C-c tなど) を押します。 -
テキストを送信
-
翻訳したいテキストを
gptelの入力領域に入力します。 -
M-x gptel-send(C-c C-m)。 この際、入力/出力言語が未設定の場合はミニバッファーで聞かれるので、入力します。 -
C-u M-x gptel-send(C-u C-c C-m) とすると、言語ペアを対話で 再設定します。入力言語としてrevを入力すると、現在の入力/出力言語を入れ替えます。
-
コマンド
-
gptel-translate-mode -
翻訳モードのオン/オフ
-
gptel-translate-change-languages -
言語ペアを対話で設定します。from 入力時に
revを指定すると、入力/出力言語を入れ替えます。 -
gptel-translate-swap-languages -
現在設定されている入力/出力言語を入れ替えます。
gptel-send の動作
gptel-translate-mode がアクティブな場合、 gptel-send は以下のように動作します。
-
M-x gptel-send -
プロンプトを LLM に送信します。
-
C-u M-x gptel-send -
送信前に翻訳言語をユーザーに問い合わせます。
-
C-u C-u M-x gptel-send -
オリジナルの
C-u M-x gptel-sendと同じ、 つまりgptel-menuを起動します。
翻訳モデルグループの設定
gptel-translate.el では翻訳モデルグループを定義して、情報を管理しています。
翻訳モデルグループは、
-
識別子
-
LLMモデル
-
翻訳言語
-
プロンプト変換関数
で構成されています。
デフォルトの翻訳モデルグループ
デフォルトで以下の翻訳モデルグループが登録されています (言語は省略)。 詳細はソースコードを参照して下さい。
"translategemma"
:models '(translategemma:4b translategemma:12b)
:languages '( ... )
:transform #'gptel-translate--transform-translategemma"plamo-translate"
:models '(plamo-2-translate mmnga/plamo-2-translate-gguf mitmul/plamo-2-translate)
:languages '( ... )
:transform #'gptel-translate--transform-plamoまた、フォールバックとして以下が定義されています。 現在のモデルが含まれる翻訳モデルグループがない場合にはこれが使用されます。
gptel-translate-generic-group-name
:languages '( ... )
:transform #'gptel-translate--transform-generic翻訳モデルグループの追加
gptel-translate.el では下記のように自作グループを定義できます。
すでに同名のグループがある場合は上書きされます。
(defun gptel-translate--transform-mymodel (srclang dstlang)
;; ここに必要な処理 (プロンプトの変更) を記述
;;
;; https://gptel.org/manual.html#orgbd9b14b 参照
;; (9. Configuration > 9.1. The anatomy of gptel-send)
)
(gptel-translate-make-model-group
"my-model-group" ; ユニークなモデルグループ名
:models '(model-1 model-2)
:languages '("Japanese" "German" "English" "French")
:transform #'gptel-translate--transform-mymodel)- 識別子 (文字列)
-
第1引数としてモデルグループ名 (識別子) を指定します。ユニークであれば何でも構いません
-
:models(シンボルのリスト) -
使用したい LLM モデルのリスト
-
:languages(文字列のリスト) -
入出力言語を入力する際の補完候補 (モデルがサポートする全ての言語を列挙する必要はありません)
-
:transform(文字列のリスト) -
プロンプトを変換する関数
翻訳モデルグループの一部更新
定義済みのモデルグループの一部を変更したい場合は、
gptel-translate-update-model-group を使用します。
(gptel-translate-update-model-group
"my-group"
:languages '("Japanese" "English")
:models '(model-1 model-2))
このようにすると、モデルグループ my-group の
:languages と :models を更新 (上書き) しますが
:transform は変更しません。
もし、フォールバック時のモデルグループの言語を変更したければ、
(gptel-translate-update-model-group
gptel-translate-generic-group-name
:languages '("English" "German"))のようにできます。
技術的背景(内部構造)
gptel-translate.el が読み込まれると、以下が行われます
-
gptel-sendに advicegptel-translate--advice-gptel-sendを付与。 これにより、プレフィックス (C-u) の動作を変更しています。 -
gptel-prompt-transform-functionsフックにgptel-translate--prompt-transformを追加
gptel-translate-mode が non-nil のときに gptel-send が実行されると、
gptel-prompt-transform-functions フック経由で
gptel-translate--prompt-transform が実行されます。
この関数は、定義された翻訳モデルグループから現在のモデルに対応する関数
を取得し、実行します。これにより、送信前に LLM 用のプロンプトを現在の
モデルに応じて修正します。
gptel-translate-mode が nil の場合は
gptel-translate--advice-gptel-send 及び
gptel-translate--prompt-transform はいずれも gptel-send の動作に
影響を与えません。
動作確認環境
-
GNU Emacs 30.2 + gptel 0.9.9.3 on Arch Linux
-
LM Studio 0.3.37 on Windows 11
-
mmnga/plamo-2-translate-gguf
-
-
Ollama 0.14.0 on Windows 11
-
mitmul/plamo-2-translate:latest
-
translategemma:4b
-
Repository
ライセンス
-
GPL-3.0