Zenn
🐥

Clineで動作するようにOllamaモデルを調整する

2025/01/05に公開
6

llOllamaモデルをClineで動作させるにあたり、2つの課題があります。

1つ目は入力コンテキストの制限です。多くのデフォルトのOllamaモデル設定ではClineのシステムプロンプトが途切れてしまうため、num_ctxパラメータの増加が必要です。Cline側でOllama APIのパラメータを動的に付与するという計画もあるのですが、それまではモデルを自分でビルドする方法があります。

2つ目はプロンプト形式の不一致です。Clineは入出力で独自のXML形式を要求しており、システムプロンプトでToolsを定義し、モデルの応答で呼び出すToolsと引数を受け取る必要があります。これに対しては、ollamaのTEMPLATE定義を上書きしてClineの仕様に準拠するように変更することで対応できます。

例としてllama3.1:8bの調整をしました。

ここでは以下の変更をしました

これを利用するには以下のコマンドでビルドします。

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のアーキテクチャ

  1. タスク分析: ユーザーから「src/main.js ファイルの内容を読み取って表示して」というタスクが与えられたとします。Clineはまず、タスクを分析し、必要な情報を収集するためのツールを選択します。
  2. ツール選択: モデルがこのタスクには、read_fileツールが最適であると判断します。
  3. パラメータ設定: モデルがpathパラメータは、ユーザーが提供したsrc/main.jsであると判断します。
  4. ツール実行: Clineは、モデルのレスポンス内のXML形式のツール呼び出しをパースします。
    <read_file>
      <path>src/main.js</path>
    </read_file>
    
  5. 結果待機: Clineがread_fileという処理を実行してファイルの内容を取得します。
  6. 結果処理: ファイルの内容を受け取った後、Clineはそれを処理し、結果をユーザーに提示するために、attempt_completionツールを使用します。
  7. 完了: Clineは、タスクが完了したことをユーザーに通知し、必要に応じて追加のコマンドを提供します。
 <attempt_completion>
  <result>src/main.js ファイルの内容は以下の通りです: {ファイルの内容}</result>
 </attempt_completion>

この動作原理が分かるとあとは以下のシステムプロンプト定義から他のタスクも実行フローが調べられます。
https://github.com/cline/cline/blob/a7e9d473752c668d7040d2f6ff9e03123c3334d6/src/core/prompts/system.ts

References

https://github.com/cline/cline/discussions/241
https://zenn.dev/kun432/scraps/f87398fffd51a7

6

Discussion

ログインするとコメントできます