yoi/crates/llm-worker/docs/requirements.md
2026-04-05 01:02:31 +09:00

49 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# llm-worker 要件
## 前提
a. userメッセージを追加しなくてもagentの途中ママ投げれば、AIはそれを自身の生成途中と認識して普通に継続する
b. KVキャッシュは速度・効率の面で有利で、コンテキストの事後改変はキャッシュヒット率を大幅に下げる
c. ツール・フックの基本的なスキーマ自動化を提供する
## 要件
### R1: Resume/Pause
メッセージの送信と生成のResume、一時停止/再開。
- `Worker::run()` でターンを開始
- フックから `Pause` を返してターンを一時停止
- `Worker::resume()` でユーザーメッセージを追加せず継続
- AIは中断を認識せず、継続として処理する
**実装**: `worker.rs``resume()`, `get_pending_tool_calls()`, `WorkerResult::Paused`
### R2: 暗黙的KVキャッシュ保証
キャッシュを破壊しうる操作を明示的にブロックせずとも、いつの間にかキャッシュ破壊してた状態にはしたくない。
- Type-stateパターン`Mutable` / `CacheLocked`)でコンパイル時に保証
- `Worker::lock()` でCacheLocked状態に遷移
- CacheLocked状態ではシステムプロンプトや履歴の変更APIが型レベルで利用不可
- `locked_prefix_len` でプレフィックスの不変性を追跡
**実装**: `state.rs` (sealed trait), `worker.rs` (state-specific impl blocks)
### R3: ツール・フックスキーマ自動化
- `#[tool]` マクロでツール定義を自動生成
- `#[tool_registry]` マクロでツールサーバーを自動構成
- `Hook` traitで10種のフックポイント
**実装**: `llm-worker-macros/`, `tool.rs`, `tool_server.rs`, `hook.rs`
### R4: フックは上層の関心事
フックはLLMクライアント層ではなく、Workerオーケストレーション層に配置する。
- LLMクライアント (`llm_client/`) はストリーミングとプロトコルのみ
- Worker層でフック実行、ツール統合、Pause/Resume制御
**実装**: `worker.rs` (hook integration), `hook.rs` (trait definitions)