50 lines
2.7 KiB
Markdown
50 lines
2.7 KiB
Markdown
## 各クレートの役割
|
||
|
||
- **`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サーバーの並列初期化による高速化 |