llm-worker-rs/docs/architecture.md
2025-08-30 04:22:42 +09:00

50 lines
2.7 KiB
Markdown
Raw Permalink 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.

## 各クレートの役割
- **`worker-types`**: 全ての基本型定義Tool, Message, StreamEvent, フック関連型等)
- **`worker-macros`**: プロシージャルマクロ(#[tool])による自動実装
- **`worker`**: メインライブラリWorker, LLMクライアント, プロンプトコンポーザー等)
- **`tools`**: 具体的なツール実装read, write, bash, mcp等
`worker`クレートは`worker-types`の全型を再エクスポートし、外部からは`worker::types::`でアクセス可能です。
## エラーハンドリング戦略
- **`worker-types`**: `ToolResult<T>` - 汎用的なツールエラー(`Result<T, Box<dyn std::error::Error + Send + Sync>>`
- **`worker`**: `WorkerError` - ライブラリ固有エラー設定、ネットワーク、ツール実行、JSON解析等
自動的な型変換(`From` trait実装により、一貫したエラーハンドリングを実現しています。認証エラーの自動検出機能も含まれています。
## マクロ実装
`worker-macros`は完全修飾パスで型を参照し、Core Crate Patternに準拠
```rust
// #[tool]マクロが生成するコード例
impl ::worker_types::Tool for ReadFileTool {
fn name(&self) -> &str { "read_file" }
fn description(&self) -> &str { "ファイルを読み込みます" }
fn parameters_schema(&self) -> ::worker_types::serde_json::Value { /* スキーマ */ }
#[::worker_types::async_trait::async_trait]
async fn execute(&self, args: ::worker_types::serde_json::Value)
-> ::worker_types::ToolResult<::worker_types::serde_json::Value> {
// 元の関数呼び出し
}
}
```
## 利用ガイドライン
- **新しいツール**: `#[tool]`マクロでasync関数を装飾し、`worker::types::ToolResult`を返り値型に使用
- **新しいLLMプロバイダ**: `worker/src/llm/`にクライアント実装を追加し、`LlmClient` enumに追加
- **新しいフック**: `WorkerHook` traitを実装し、`HookManager`で管理
- **型の変更**: `worker-types`で基本型を変更し、コンパイルエラーで影響範囲を確認
- **MCP統合**: `mcp_tool`モジュールを使用してModel Context Protocolサーバーとの連携を実装
## 主要な設計パターン
- **委譲パターン**: `LlmClient` enumでの各プロバイダクライアントへの委譲
- **ストリーミング**: async streamを使用したリアルタイムイベント処理
- **プロンプトテンプレート**: Handlebarsベースの動的プロンプト生成
- **セッション管理**: メッセージ履歴の永続化と復元
- **並列処理**: MCPサーバーの並列初期化による高速化