2.1 KiB
2.1 KiB
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]マクロでツールサーバーを自動構成Hooktraitで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)