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

2.1 KiB
Raw Blame History

llm-worker 要件

前提

a. userメッセージを追加しなくてもagentの途中ママ投げれば、AIはそれを自身の生成途中と認識して普通に継続する b. KVキャッシュは速度・効率の面で有利で、コンテキストの事後改変はキャッシュヒット率を大幅に下げる c. ツール・フックの基本的なスキーマ自動化を提供する

要件

R1: Resume/Pause

メッセージの送信と生成のResume、一時停止/再開。

  • Worker::run() でターンを開始
  • フックから Pause を返してターンを一時停止
  • Worker::resume() でユーザーメッセージを追加せず継続
  • AIは中断を認識せず、継続として処理する

実装: worker.rsresume(), 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)