yorishiro 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.yorishirorc.sample +51 -0
- data/CHANGELOG.md +41 -0
- data/README.md +134 -8
- data/docs/en/README.md +97 -2
- data/docs/ja/README.md +97 -2
- data/docs/ja/how_to_create_skills.md +0 -0
- data/docs/ja/ollama_setup.md +148 -0
- data/lib/yorishiro/cli.rb +474 -93
- data/lib/yorishiro/compactor.rb +53 -0
- data/lib/yorishiro/configuration.rb +69 -1
- data/lib/yorishiro/conversation.rb +117 -0
- data/lib/yorishiro/diff.rb +92 -0
- data/lib/yorishiro/hooks.rb +64 -0
- data/lib/yorishiro/input_history.rb +49 -0
- data/lib/yorishiro/mcp/server_manager.rb +4 -4
- data/lib/yorishiro/provider/anthropic.rb +37 -8
- data/lib/yorishiro/provider/base.rb +20 -4
- data/lib/yorishiro/provider/ollama.rb +70 -45
- data/lib/yorishiro/provider/open_ai.rb +21 -5
- data/lib/yorishiro/session_resume.rb +73 -0
- data/lib/yorishiro/session_store.rb +168 -0
- data/lib/yorishiro/skill.rb +11 -0
- data/lib/yorishiro/skill_loader.rb +53 -0
- data/lib/yorishiro/sub_agent.rb +143 -0
- data/lib/yorishiro/tool.rb +7 -0
- data/lib/yorishiro/tool_result_cap.rb +31 -0
- data/lib/yorishiro/tools/edit_file.rb +87 -0
- data/lib/yorishiro/tools/execute_command.rb +8 -0
- data/lib/yorishiro/tools/exit_plan_mode.rb +41 -0
- data/lib/yorishiro/tools/grep.rb +118 -0
- data/lib/yorishiro/tools/list_files.rb +10 -8
- data/lib/yorishiro/tools/read_file.rb +27 -9
- data/lib/yorishiro/tools/task.rb +74 -0
- data/lib/yorishiro/tools/write_file.rb +9 -0
- data/lib/yorishiro/version.rb +1 -1
- data/lib/yorishiro.rb +13 -1
- metadata +33 -5
- data/lib/yorishiro/mcp/stdio_transport.rb +0 -85
data/docs/ja/README.md
CHANGED
|
@@ -34,7 +34,9 @@ use provider: :anthropic, api_key: ENV["ANTHROPIC_API_KEY"], model: "claude-sonn
|
|
|
34
34
|
|
|
35
35
|
allow_tool Yorishiro::Tools::ReadFile.new
|
|
36
36
|
allow_tool Yorishiro::Tools::WriteFile.new
|
|
37
|
+
allow_tool Yorishiro::Tools::EditFile.new
|
|
37
38
|
allow_tool Yorishiro::Tools::ListFiles.new
|
|
39
|
+
allow_tool Yorishiro::Tools::Grep.new
|
|
38
40
|
allow_tool Yorishiro::Tools::ExecuteCommand.new,
|
|
39
41
|
allow_commands: ["ls", "git *", "bundle exec *", "cat *"]
|
|
40
42
|
|
|
@@ -63,12 +65,17 @@ assistant> Hi! How can I help you today?
|
|
|
63
65
|
- メッセージを入力し、**Enterを2回**押して送信
|
|
64
66
|
- `Ctrl+C` または `/exit` で終了
|
|
65
67
|
|
|
68
|
+
### セッションの永続化と再開
|
|
69
|
+
|
|
70
|
+
会話は起動ディレクトリ配下の `.yorishiro/sessions/` に自動保存されます(毎ターン後と、長いツールループの途中でも逐次保存)。`yorishiro --continue`(直近)、`yorishiro --resume [ID]`(IDは前方一致可、省略時は選択画面)、または REPL 内の `/resume` で再開できます。`/clear` は新しいセッションを開始しますが、以前のセッションはディスクに残り再開可能です。セッションには作成時のプロバイダ/モデルが記録され、異なる構成で再開すると通知した上で現在の設定で続行します。ディレクトリごとに新しい50セッションが保持されます。
|
|
71
|
+
|
|
66
72
|
### スラッシュコマンド
|
|
67
73
|
|
|
68
74
|
| コマンド | 説明 |
|
|
69
75
|
|---------|------|
|
|
70
76
|
| `/plan` | Planモードの切り替え |
|
|
71
|
-
| `/clear` |
|
|
77
|
+
| `/clear` | 会話履歴をクリア(新しいセッションを開始) |
|
|
78
|
+
| `/resume` | 保存済みセッションの一覧から再開 |
|
|
72
79
|
| `/tools` | 登録済みツール一覧 |
|
|
73
80
|
| `/skills` | 登録済みスキル一覧 |
|
|
74
81
|
| `/exit` | 終了 |
|
|
@@ -80,6 +87,8 @@ assistant> Hi! How can I help you today?
|
|
|
80
87
|
yorishiro --provider anthropic # プロバイダ指定
|
|
81
88
|
yorishiro --model gpt-4o # モデル指定
|
|
82
89
|
yorishiro --plan # Planモードで起動
|
|
90
|
+
yorishiro --continue # 直近のセッションを再開
|
|
91
|
+
yorishiro --resume [ID] # 保存済みセッションを再開(ID省略時は選択画面)
|
|
83
92
|
yorishiro --version # バージョン表示
|
|
84
93
|
yorishiro --help # ヘルプ表示
|
|
85
94
|
```
|
|
@@ -119,14 +128,34 @@ use provider: :ollama, model: "llama3.1"
|
|
|
119
128
|
# 基本ツール(許可不要)
|
|
120
129
|
allow_tool Yorishiro::Tools::ReadFile.new
|
|
121
130
|
allow_tool Yorishiro::Tools::ListFiles.new
|
|
131
|
+
allow_tool Yorishiro::Tools::Grep.new
|
|
122
132
|
|
|
123
|
-
#
|
|
133
|
+
# 書き込み・編集ツール(毎回許可確認、diffプレビュー付き)
|
|
124
134
|
allow_tool Yorishiro::Tools::WriteFile.new
|
|
135
|
+
allow_tool Yorishiro::Tools::EditFile.new
|
|
125
136
|
|
|
126
137
|
# コマンド実行ツール(パターンベース許可)
|
|
127
138
|
allow_tool Yorishiro::Tools::ExecuteCommand.new,
|
|
128
139
|
allow_commands: ["ls", "git *", "bundle exec *"]
|
|
140
|
+
|
|
141
|
+
# サブエージェント(読み取り専用の調査を新しいコンテキストウィンドウへ委譲)
|
|
142
|
+
allow_tool Yorishiro::Tools::Task.new
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### サブエージェント(`task` ツール)
|
|
146
|
+
|
|
147
|
+
`task` ツールを使うと、LLM は読み取り専用の調査タスク(定義箇所の特定、複数ファイルの要約など)を、独立したコンテキストウィンドウでエージェントループを回すサブエージェントに委譲できます。サブエージェントは登録済みの読み取り専用ツール(`read_file` / `list_files` / `grep`。`task` 自身は渡されないためネストしません)を使い、最終的なテキスト要約だけが親の会話に入ります。
|
|
148
|
+
|
|
149
|
+
探索中のツール出力が親のコンテキストに入らないため、小さいローカルコンテキスト(例: Ollama の `num_ctx 8192`)では特に有効です。数ファイル読むだけでコンテキストを使い切る、という状況を避けられます。サブエージェントのツール呼び出しはインデント付きの進捗行として表示されます:
|
|
150
|
+
|
|
129
151
|
```
|
|
152
|
+
[Tool] Executing: task(prompt: Find where sessions are persisted...)
|
|
153
|
+
[task] grep(pattern: def save)
|
|
154
|
+
[task] read_file(path: lib/yorishiro/session_store.rb)
|
|
155
|
+
[Tool] Result: Sessions are saved to .yorishiro/sessions/<id>.json by...
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
ライフサイクルフック(`before_tool_use` / `after_tool_use`)はサブエージェントのツール呼び出しにも適用され、ループは最大15回で打ち切られます。読み取り専用ツールのため許可プロンプトは不要で、プランモードでも利用できます。
|
|
130
159
|
|
|
131
160
|
### コマンド実行の許可モデル
|
|
132
161
|
|
|
@@ -207,6 +236,66 @@ skill GitStatusSkill.new
|
|
|
207
236
|
# => /git_status で利用可能
|
|
208
237
|
```
|
|
209
238
|
|
|
239
|
+
文字列を返すスキルはその出力を表示するだけです。代わりに `prompt(...)` を返すと、
|
|
240
|
+
そのテキストがユーザメッセージとしてLLMに注入され(Planモードも尊重して)実行されます。
|
|
241
|
+
スキルからアシスタントにタスクを渡せます。
|
|
242
|
+
|
|
243
|
+
```ruby
|
|
244
|
+
class ReviewSkill < Yorishiro::Skill
|
|
245
|
+
def name = "review"
|
|
246
|
+
def description = "現在の git diff をレビュー"
|
|
247
|
+
|
|
248
|
+
def execute(_context)
|
|
249
|
+
prompt("あなたはコードレビュアーです。次のdiffをレビューして問題点を挙げてください:\n#{`git diff`}")
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
|
|
253
|
+
skill ReviewSkill.new
|
|
254
|
+
# => /review で diff がLLMに渡り、エージェントループが実行される
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
スキルはファイル配置による自動読み込みもできます。`~/.yorishiro/skills/*.rb`(グローバル)
|
|
258
|
+
または `./.yorishiro/skills/*.rb`(プロジェクトローカル)に `Yorishiro::Skill` の
|
|
259
|
+
サブクラスを定義するだけで、起動時に自動登録されます(`skill ...` の呼び出しは不要)。
|
|
260
|
+
同名のスキルが両方にある場合はプロジェクトローカル側が優先されます。
|
|
261
|
+
|
|
262
|
+
```ruby
|
|
263
|
+
# .yorishiro/skills/changelog.rb
|
|
264
|
+
class ChangelogSkill < Yorishiro::Skill
|
|
265
|
+
def name = "changelog"
|
|
266
|
+
def description = "直近のコミットを要約"
|
|
267
|
+
|
|
268
|
+
def execute(_context)
|
|
269
|
+
prompt("次のコミットをチェンジログ向けに要約してください:\n#{`git log --oneline -20`}")
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
# => /changelog が自動で使えるようになる
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### フック
|
|
276
|
+
|
|
277
|
+
`.yorishirorc` からライフサイクルイベントにRubyブロックを登録できます:
|
|
278
|
+
|
|
279
|
+
```ruby
|
|
280
|
+
# 許可プロンプトの前にツール呼び出しを拒否する
|
|
281
|
+
# (拒否理由はツール結果としてLLMに返り、LLMは方針転換できる)
|
|
282
|
+
on :before_tool_use do |tool_name, args|
|
|
283
|
+
deny("rm is not allowed") if tool_name == "execute_command" && args["command"].to_s.include?("rm ")
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
# ツール実行結果の監査(フックが失敗しても警告表示のみ)
|
|
287
|
+
on :after_tool_use do |tool_name, _args, result|
|
|
288
|
+
File.open(".yorishiro/audit.log", "a") { |f| f.puts "#{tool_name}: #{result.to_s[0, 100]}" }
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
# LLMに届く前にメッセージをブロックする
|
|
292
|
+
on :user_prompt_submit do |input|
|
|
293
|
+
deny("秘密鍵は貼らないでください") if input.include?("BEGIN PRIVATE KEY")
|
|
294
|
+
end
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
拒否は明示的に `deny("理由")`(または `:deny`)を返した場合のみです。それ以外の戻り値は続行するため、ログ出力だけのフックも安全に書けます。`before_tool_use` フックが例外を投げた場合は安全側に倒して拒否になります(fail closed)。フックはMCPツールとPlanモードにも適用されます。
|
|
298
|
+
|
|
210
299
|
### 設定例(フル)
|
|
211
300
|
|
|
212
301
|
```ruby
|
|
@@ -226,7 +315,9 @@ plan_mode false
|
|
|
226
315
|
# 組み込みツール
|
|
227
316
|
allow_tool Yorishiro::Tools::ReadFile.new
|
|
228
317
|
allow_tool Yorishiro::Tools::WriteFile.new
|
|
318
|
+
allow_tool Yorishiro::Tools::EditFile.new
|
|
229
319
|
allow_tool Yorishiro::Tools::ListFiles.new
|
|
320
|
+
allow_tool Yorishiro::Tools::Grep.new
|
|
230
321
|
allow_tool Yorishiro::Tools::ExecuteCommand.new,
|
|
231
322
|
allow_commands: [
|
|
232
323
|
"ls *",
|
|
@@ -235,6 +326,7 @@ allow_tool Yorishiro::Tools::ExecuteCommand.new,
|
|
|
235
326
|
"bundle exec *",
|
|
236
327
|
"ruby *"
|
|
237
328
|
]
|
|
329
|
+
allow_tool Yorishiro::Tools::Task.new
|
|
238
330
|
|
|
239
331
|
# MCPサーバ
|
|
240
332
|
mcp_server "filesystem",
|
|
@@ -248,8 +340,11 @@ mcp_server "filesystem",
|
|
|
248
340
|
|-------|--------|------|------|
|
|
249
341
|
| `read_file` | `Yorishiro::Tools::ReadFile` | ファイル内容を読み込む | 不要 |
|
|
250
342
|
| `write_file` | `Yorishiro::Tools::WriteFile` | ファイルに書き込む | 毎回確認 |
|
|
343
|
+
| `edit_file` | `Yorishiro::Tools::EditFile` | ファイル内の文字列を正確一致で置換 | 毎回確認 |
|
|
251
344
|
| `list_files` | `Yorishiro::Tools::ListFiles` | ディレクトリ一覧・glob検索 | 不要 |
|
|
345
|
+
| `grep` | `Yorishiro::Tools::Grep` | ファイル内容をRuby正規表現で検索 | 不要 |
|
|
252
346
|
| `execute_command` | `Yorishiro::Tools::ExecuteCommand` | シェルコマンドを実行 | パターンベース |
|
|
347
|
+
| `task` | `Yorishiro::Tools::Task` | 読み取り専用の調査を新しいコンテキストのサブエージェントへ委譲 | 不要 |
|
|
253
348
|
|
|
254
349
|
## 開発
|
|
255
350
|
|
|
File without changes
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# Ollama セットアップガイド(yorishiro 用)
|
|
2
|
+
|
|
3
|
+
yorishiro をローカル Ollama で使うために必要な、Ollama サーバ側の設定手順。
|
|
4
|
+
別の PC に環境を作るときはこのドキュメントに沿って設定する。
|
|
5
|
+
|
|
6
|
+
## 検証済みの構成(このドキュメントの前提)
|
|
7
|
+
|
|
8
|
+
| 項目 | 値 |
|
|
9
|
+
|------|-----|
|
|
10
|
+
| 実行環境 | WSL2 (Ubuntu) |
|
|
11
|
+
| GPU | NVIDIA RTX 4070 Laptop (VRAM 8GB) |
|
|
12
|
+
| Ollama | 0.30.9(systemd サービスとして稼働、実行ユーザー `ollama`) |
|
|
13
|
+
| モデル | `gemma4:12b`(7.6GB — 8GB VRAM ではぎりぎり) |
|
|
14
|
+
|
|
15
|
+
VRAM に余裕がある PC(12GB 以上など)では後述の KV キャッシュ量子化は必須ではないが、
|
|
16
|
+
設定しておいて害はない。**VRAM がモデルサイズに対してぎりぎりの PC では必須**。
|
|
17
|
+
|
|
18
|
+
## なぜ設定が必要か
|
|
19
|
+
|
|
20
|
+
デフォルト設定のまま 8GB VRAM で `gemma4:12b` を動かすと、次の問題が起きる:
|
|
21
|
+
|
|
22
|
+
- `num_ctx=8192` 時の KV キャッシュ/チェックポイントの読み書きが GB 単位で発生し、
|
|
23
|
+
ランナー(`llama-server`)が**長時間固まる**(クライアントのキャンセル後にスロット解放まで
|
|
24
|
+
21 分かかった実測あり)
|
|
25
|
+
- WSL2 では CUDA のデバイス検出がタイムアウトし、Vulkan/D3D12 バックエンドへ
|
|
26
|
+
フォールバックすることがあり、これも固まりの一因になる
|
|
27
|
+
- yorishiro は Ollama に対して read timeout を無効化している(ローカルモデルの初回
|
|
28
|
+
プロンプト評価が長いため)ので、サーバ側が固まると **CLI が無反応になり
|
|
29
|
+
クラッシュしたように見える**(実際にはクラッシュしていない)
|
|
30
|
+
|
|
31
|
+
## サーバ側の設定(systemd オーバーライド)
|
|
32
|
+
|
|
33
|
+
**重要:** Ollama は systemd サービス(実行ユーザー `ollama`)として動いているため、
|
|
34
|
+
`~/.bashrc` などシェルの環境変数は**サーバに届かない**。
|
|
35
|
+
サーバ向けの環境変数は必ず systemd の drop-in に書く。
|
|
36
|
+
|
|
37
|
+
### 手順
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
sudo mkdir -p /etc/systemd/system/ollama.service.d
|
|
41
|
+
sudo tee /etc/systemd/system/ollama.service.d/override.conf <<'EOF'
|
|
42
|
+
[Service]
|
|
43
|
+
Environment="OLLAMA_VULKAN=0"
|
|
44
|
+
Environment="OLLAMA_FLASH_ATTENTION=1"
|
|
45
|
+
Environment="OLLAMA_KV_CACHE_TYPE=q8_0"
|
|
46
|
+
EOF
|
|
47
|
+
|
|
48
|
+
sudo systemctl daemon-reload
|
|
49
|
+
sudo systemctl restart ollama
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 各設定の意味
|
|
53
|
+
|
|
54
|
+
| 環境変数 | 値 | 目的 |
|
|
55
|
+
|----------|-----|------|
|
|
56
|
+
| `OLLAMA_VULKAN` | `0` | Vulkan バックエンドを無効化。WSL2 で CUDA 検出がタイムアウトした際の Vulkan/D3D12 フォールバック(固まりの一因)を防ぐ |
|
|
57
|
+
| `OLLAMA_FLASH_ATTENTION` | `1` | Flash Attention を有効化。KV キャッシュ量子化の前提条件でもある |
|
|
58
|
+
| `OLLAMA_KV_CACHE_TYPE` | `q8_0` | KV キャッシュを 8bit に量子化。KV のメモリ使用量が約半分になり(実測 K/V 各 34MiB)、ぎりぎりの VRAM でも `num_ctx=8192` が回る |
|
|
59
|
+
|
|
60
|
+
**q8_0 の副作用:** KV キャッシュのコンテキストシフトが無効になる。
|
|
61
|
+
yorishiro は送信前に自前で履歴をコンテキスト予算内にトリム/要約するため、実用上問題ない。
|
|
62
|
+
|
|
63
|
+
### 反映の確認
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
# 環境変数がサービスに載っているか
|
|
67
|
+
systemctl show ollama -p Environment | tr ' ' '\n' | grep OLLAMA
|
|
68
|
+
|
|
69
|
+
# 実際にランナーへ反映されているか(モデルロード直後のログに以下が出る)
|
|
70
|
+
# --cache-type-k q8_0 --cache-type-v q8_0 --flash-attn on
|
|
71
|
+
journalctl -u ollama -n 100 --no-pager | grep "starting llama-server"
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## モデルの用意
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
ollama pull gemma4:12b
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
VRAM が少ない PC ではより小さいモデル(`gemma3:4b`、`qwen2.5:3b` など)を検討する。
|
|
81
|
+
yorishiro の対応モデルは Ollama インスタンスから動的に取得されるので、
|
|
82
|
+
pull 済みのモデルなら何でも指定できる。
|
|
83
|
+
|
|
84
|
+
## クライアント側(yorishiro)の設定
|
|
85
|
+
|
|
86
|
+
`~/.yorishirorc`(または プロジェクトの `.lyorishirorc`):
|
|
87
|
+
|
|
88
|
+
```ruby
|
|
89
|
+
use provider: :ollama, model: "gemma4:12b"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### コンテキストサイズ(重要な注意点)
|
|
93
|
+
|
|
94
|
+
- yorishiro は Ollama へのリクエストに明示的な `num_ctx` を送る。デフォルトは **8192**
|
|
95
|
+
- 変更する場合は `OLLAMA_NUM_CTX` 環境変数(クライアント側なのでシェルで OK)か、
|
|
96
|
+
rc ファイルの `ollama_num_ctx 16384` で指定
|
|
97
|
+
- **4096 などに下げないこと。** yorishiro のコンテキスト予算は
|
|
98
|
+
`num_ctx − 2048(出力用リザーブ)` で計算されるため、4096 だと実質 2048 トークンしか
|
|
99
|
+
残らず、`read_file` 1回で溢れて「過剰トリム → 空応答」になる。デフォルトの 8192 を維持する
|
|
100
|
+
- **上げる場合の目安(gemma4:12b + RTX 4070 8GB での実測、2026-07-07):**
|
|
101
|
+
gemma4 はスライディングウィンドウ注意 + KV q8_0 のおかげで num_ctx を上げても
|
|
102
|
+
KV はほとんど増えない(131072 でも KV 合計 255MiB)。実測:
|
|
103
|
+
|
|
104
|
+
| num_ctx | 合計メモリ | CPU/GPU 分割 |
|
|
105
|
+
|---------|-----------|--------------|
|
|
106
|
+
| 8192 | 8.7 GB | 32% / 68% |
|
|
107
|
+
| 16384 | 8.7 GB | 34% / 66% |
|
|
108
|
+
| 32768 | 8.8 GB | 35% / 65% |
|
|
109
|
+
| 65536 | 9.0 GB | 40% / 60% |
|
|
110
|
+
| 131072 | 9.3 GB | 45% / 55% |
|
|
111
|
+
| 262144 | 10.0 GB | 53% / 47% |
|
|
112
|
+
|
|
113
|
+
**推奨は 16384**(メモリ増ほぼゼロで予算が 6144 → 14336 トークンに倍増。
|
|
114
|
+
prompt 評価 932 tok/s・生成 12.9 tok/s を実測)。32768 までは実用圏。
|
|
115
|
+
それ以上もロードは通るが GPU 比率が下がって生成が遅くなり、コンテキストを
|
|
116
|
+
実際に埋めたときの prompt 評価時間も長くなる(=固まりと見分けにくくなる)
|
|
117
|
+
- **上限は gemma4:12b の学習コンテキスト長 262144(256k)。** それを超える値
|
|
118
|
+
(524288 など)を指定しても Ollama がモデル上限へ黙ってクランプする
|
|
119
|
+
(`ollama ps` の CONTEXT 列とログの `n_ctx_slot` で確認可能)。
|
|
120
|
+
262144 はこの構成でもロード自体は通るが、GPU 比率が半分を切り、
|
|
121
|
+
仮にコンテキストを実際に埋めると prompt 評価だけで10分超かかる計算に
|
|
122
|
+
なるため実用は非推奨
|
|
123
|
+
|
|
124
|
+
### その他のクライアント側環境変数
|
|
125
|
+
|
|
126
|
+
| 環境変数 | デフォルト | 用途 |
|
|
127
|
+
|----------|-----------|------|
|
|
128
|
+
| `OLLAMA_NUM_CTX` | `8192` | コンテキストウィンドウ(上記の注意を参照) |
|
|
129
|
+
| `OLLAMA_KEEP_ALIVE` | `10m` | モデルを VRAM に保持する時間。ターン間のロード待ちを防ぐ |
|
|
130
|
+
| `OLLAMA_HOST` | `http://localhost:11434` | 別ホストの Ollama を使う場合に指定 |
|
|
131
|
+
| `YORISHIRO_DEBUG` | - | `1` で Ollama へのリクエスト/レスポンスのデバッグログを出力 |
|
|
132
|
+
|
|
133
|
+
## トラブルシューティング
|
|
134
|
+
|
|
135
|
+
**症状: 応答が来ず CLI が無反応になる(クラッシュしたように見える)**
|
|
136
|
+
|
|
137
|
+
1. まず本当に固まっているのか確認する。yorishiro は read timeout を無効化しているので、
|
|
138
|
+
初回のプロンプト評価(大きいコンテキストで数分)と固まりは見分けがつかない
|
|
139
|
+
2. サーバ側の状態を見る:
|
|
140
|
+
```bash
|
|
141
|
+
systemctl status ollama # プロセス自体は生きているはず(Restart 履歴がないか)
|
|
142
|
+
journalctl -u ollama -f # リクエストが処理中か、スロットが解放されないままか
|
|
143
|
+
nvidia-smi # VRAM 使用量とプロセスの有無
|
|
144
|
+
```
|
|
145
|
+
3. `starting llama-server` のログ行に `--cache-type-k q8_0 --flash-attn on` が
|
|
146
|
+
**含まれていない**場合、オーバーライドが効いていない。`daemon-reload` と `restart` を
|
|
147
|
+
やり直す(`sudo systemctl edit` で書いた場合はファイル名が `override.conf` かも確認)
|
|
148
|
+
4. それでも固まりが頻発する場合は、より小さいモデルに切り替えるのが確実
|