🐥
Clineで動作するようにOllamaモデルを調整する
llOllamaモデルをClineで動作させるにあたり、2つの課題があります。
1つ目は入力コンテキストの制限です。多くのデフォルトのOllamaモデル設定ではClineのシステムプロンプトが途切れてしまうため、num_ctxパラメータの増加が必要です。Cline側でOllama APIのパラメータを動的に付与するという計画もあるのですが、それまではモデルを自分でビルドする方法があります。
2つ目はプロンプト形式の不一致です。Clineは入出力で独自のXML形式を要求しており、システムプロンプトでToolsを定義し、モデルの応答で呼び出すToolsと引数を受け取る必要があります。これに対しては、ollamaのTEMPLATE定義を上書きしてClineの仕様に準拠するように変更することで対応できます。
例としてllama3.1:8bの調整をしました。
ここでは以下の変更をしました
- PARAMETER num_ctx を2048→20480 に変更
- TEMPLATEに「# Tools」「<tool_call>」ブロックを追加
TEMPLATEの書式はGoのテンプレート形式であり、各ディレクティブの説明が以下にあります。
https://github.com/ollama/ollama/blob/main/docs/template.md
これを利用するには以下のコマンドでビルドします。
llama create llama3.1-cline:8b -f ./lama3.1-cline-8b.Modelfile
llama3.1:8b以外のモデルを使いたい場合もこのTEMPLATE部分を調整するのが基本になります。ただTool呼び出しの対応しているモデルをベースにする必要があります。
モデルのTEMPLATEの元データを見るにはollama showコマンドを実行します。
❯ ollama show qwen2.5:latest --template
{{- if .Messages }}
{{- if or .System .Tools }}<|im_start|>system
{{- if .System }}
{{ .System }}
{{- end }}
{{- if .Tools }}
...
この内容を参考にModelfileを記述します。
実際に送信されてくるシステムプロンプトを見るにはOLLAMA_DEBUG=1 ollama start
でサーバーを起動します。
APPENDIX: Clineのアーキテクチャ
-
タスク分析: ユーザーから「
src/main.js
ファイルの内容を読み取って表示して」というタスクが与えられたとします。Cline
はまず、タスクを分析し、必要な情報を収集するためのツールを選択します。 -
ツール選択: モデルがこのタスクには、
read_file
ツールが最適であると判断します。 -
パラメータ設定: モデルが
path
パラメータは、ユーザーが提供したsrc/main.js
であると判断します。 -
ツール実行:
Cline
は、モデルのレスポンス内のXML形式のツール呼び出しをパースします。<read_file> <path>src/main.js</path> </read_file>
-
結果待機:
Cline
がread_fileという処理を実行してファイルの内容を取得します。 -
結果処理: ファイルの内容を受け取った後、
Cline
はそれを処理し、結果をユーザーに提示するために、attempt_completion
ツールを使用します。 -
完了:
Cline
は、タスクが完了したことをユーザーに通知し、必要に応じて追加のコマンドを提供します。
<attempt_completion>
<result>src/main.js ファイルの内容は以下の通りです: {ファイルの内容}</result>
</attempt_completion>
この動作原理が分かるとあとは以下のシステムプロンプト定義から他のタスクも実行フローが調べられます。
References
Discussion