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

185 lines
6.8 KiB
Markdown
Raw 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` ライブラリ
`worker`は、LLM大規模言語モデルとの対話を抽象化し、複数のLLMプロバイダを統一的に扱うための共通ライブラリです。動的ツール登録システム、フックシステム、MCPプロトコル統合を提供します。
## アーキテクチャ
**Core Crate Pattern**を採用:`worker-types`(基本型)→ `worker-macros`(マクロ)→ `worker`(メインライブラリ)
循環依存を解消し、型安全性と保守性を向上させています。
## 概要
LLMプロバイダGemini, Claude, OpenAI, Ollama, XAIを統一インターフェースで利用できます。`Worker`構造体が中心となり、プロンプト管理、ツール登録、フックシステム、MCPサーバー統合を提供します。
## 主要なコンポーネント
### `Worker`
LLMとの対話における中心的な構造体です。
- **LLMクライアントの保持**: `LlmClient` enumを通じて複数プロバイダの統一インターフェースを提供
- **プロンプト管理**: `PromptComposer`によるテンプレートベースのプロンプト組み立て
- **ストリーミング処理**: リアルタイムイベントストリーム(`process_task_stream`)とメッセージ履歴管理(`process_task_with_history`
- **動的ツール管理**: 実行時ツール登録・実行、MCPサーバー統合
- **フックシステム**: メッセージ送信、ツール利用、ターン完了時の拡張ポイント
- **セッション管理**: メッセージ履歴の保存・復元機能
### `Tool` トレイト
動的ツール登録の基盤。`worker-types`で定義され、`#[tool]`マクロで自動実装可能です。
### `StreamEvent`
LLMストリーミング応答のイベント型。テキストチャンク、ツール呼び出し、ツール結果、完了通知、デバッグ情報、フックメッセージをサポートします。
### `LlmClient` Enum
各LLMプロバイダクライアントの統合enum。`LlmClientTrait`を実装し、統一されたストリーミング対話と接続確認機能を提供します。
### フックシステム
- `WorkerHook` トレイト: カスタムフック実装の基盤
- `HookManager`: フック登録・実行管理
- `HookEvent`: OnMessageSend、PreToolUse、PostToolUse、OnTurnCompleted
- `HookContext`: フック実行時のコンテキスト情報
### その他の主要型
- `Message`: LLM対話のメッセージrole + content + tool_calls
- `LlmDebug`: デバッグログ制御と詳細出力
- `ModelInfo`: モデル情報とサポート機能
- `SessionData`: セッション永続化データ
## 基本的な使用方法
```rust
use worker::{Worker, LlmProvider, types::{Message, Role, StreamEvent}};
use futures_util::StreamExt;
// Worker初期化
let mut worker = Worker::new(
LlmProvider::Gemini,
"gemini-1.5-flash",
&api_keys,
None
)?;
// ツール登録(オプション)
worker.register_tool(Box::new(some_tool))?;
// メッセージ送信とストリーム処理(履歴あり)
let mut stream = worker.process_task_with_history(
"Hello, how are you?".to_string(),
None
).await;
while let Some(Ok(event)) = stream.next().await {
match event {
StreamEvent::Chunk(text) => print!("{}", text),
StreamEvent::ToolCall(call) => println!("Tool: {}", call.name),
StreamEvent::ToolResult { tool_name, result } => {
println!("Result from {}: {:?}", tool_name, result);
},
StreamEvent::Completion(_) => break,
_ => {}
}
}
```
### ツール登録と実行
```rust
// 個別ツール登録
worker.register_tool(Box::new(ReadFileTool::new()))?;
// MCPサーバーからのツール登録
let mcp_config = McpServerConfig {
name: "filesystem".to_string(),
command: "npx".to_string(),
args: vec!["-y".to_string(), "@modelcontextprotocol/server-filesystem".to_string()],
env: HashMap::new(),
};
worker.register_mcp_tools(mcp_config).await?;
// 複数MCPサーバーの並列初期化
worker.queue_mcp_server(config1);
worker.queue_mcp_server(config2);
worker.init_mcp_servers().await?;
// ツール実行
let result = worker.execute_tool("read_file", json!({"path": "./file.txt"})).await?;
```
### フックシステム
```rust
// カスタムフック実装例
struct MyHook;
#[async_trait::async_trait]
impl WorkerHook for MyHook {
fn name(&self) -> &str { "my_hook" }
fn hook_type(&self) -> &str { "OnMessageSend" }
fn matcher(&self) -> &str { "" }
async fn execute(&self, mut context: HookContext) -> (HookContext, HookResult) {
// メッセージ前処理
let new_content = format!("[処理済み] {}", context.content);
context.set_content(new_content);
(context, HookResult::Continue)
}
}
// フック登録
worker.register_hook(Box::new(MyHook));
```
### 主要API
- `register_tool()`: ツール登録
- `register_mcp_tools()`: MCPサーバーからのツール登録
- `register_hook()`: フック登録
- `get_tools()`: 登録済みツール一覧
- `execute_tool()`: ツール実行
- `process_task_stream()`: LLMストリーミング対話履歴なし
- `process_task_with_history()`: メッセージ履歴付きストリーミング対話
- `get_session_data()`: セッションデータ取得
- `load_session()`: セッション復元
## 型システム
**Core Crate Pattern**により型を分離:
- `worker-types`: 基本型Tool, Message, StreamEvent等
- `worker`: 実装とエラー型WorkerError等
後方互換性のため`worker::types::`経由で全型にアクセス可能。
## 主要型
- `ToolResult<T>`: ツール実行結果
- `DynamicToolDefinition`: ツール定義情報
- `WorkerError`: ライブラリ固有エラー型
## LLMプロバイダサポート
全プロバイダでストリーミング対話、ツール呼び出し、モデル一覧取得、接続確認を完全実装:
- Gemini (Google)
- Claude (Anthropic)
- OpenAI
- Ollama
- XAI (Grok)
## 主要機能
- **Core Crate Pattern**: 循環依存解消による保守性向上
- **動的ツール登録**: 実行時ツール追加・実行
- **#[tool]マクロ**: 関数からツール自動生成
- **フックシステム**: メッセージ送信・ツール利用・ターン完了時の拡張ポイント
- **ストリーミング対話**: リアルタイムLLM応答とイベント処理
- **複数プロバイダ**: 統一インターフェースでの5つのLLMプロバイダサポート
- **MCP統合**: Model Context Protocolサーバーとの動的連携
- **セッション管理**: メッセージ履歴の永続化・復元
- **ワークスペース検出**: Git情報を含む作業環境の自動認識
- **型安全性**: 強い型チェックとエラーハンドリング
- **並列処理**: MCPサーバーの並列初期化による高速化