49 lines
2.1 KiB
Markdown
49 lines
2.1 KiB
Markdown
# 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)
|