()
| 12 | ) |
| 13 | |
| 14 | func main() { |
| 15 | fmt.Println("=== SubAgent Middleware 示例 ===") |
| 16 | |
| 17 | // 1. 创建 Backend |
| 18 | backend := backends.NewStateBackend() |
| 19 | fmt.Println("✓ 创建 StateBackend") |
| 20 | |
| 21 | // 2. 定义子代理规格 |
| 22 | specs := []middleware.SubAgentSpec{ |
| 23 | { |
| 24 | Name: "researcher", |
| 25 | Description: "深度研究和分析专家", |
| 26 | Prompt: "你是一个专注于深度研究的 AI。仔细分析问题,提供详细的研究报告。", |
| 27 | }, |
| 28 | { |
| 29 | Name: "coder", |
| 30 | Description: "代码编写和重构专家", |
| 31 | Prompt: "你是一个专业的程序员。编写高质量、可维护的代码。", |
| 32 | }, |
| 33 | { |
| 34 | Name: "reviewer", |
| 35 | Description: "代码审查和质量检查专家", |
| 36 | Prompt: "你是一个严格的代码审查员。识别潜在问题,提出改进建议。", |
| 37 | }, |
| 38 | } |
| 39 | fmt.Printf("✓ 定义了 %d 个子代理规格\n", len(specs)) |
| 40 | |
| 41 | // 3. 创建子代理工厂 |
| 42 | factory := func(ctx context.Context, spec middleware.SubAgentSpec) (middleware.SubAgent, error) { |
| 43 | // 这里使用 SimpleSubAgent 作为演示 |
| 44 | // 实际应用中应该创建真正的 Agent 实例 |
| 45 | execFn := func(ctx context.Context, description string, parentContext map[string]any) (string, error) { |
| 46 | return fmt.Sprintf("[%s] 已执行任务: %s\n系统提示: %s\n上下文: %v", |
| 47 | spec.Name, description, spec.Prompt, parentContext), nil |
| 48 | } |
| 49 | return middleware.NewSimpleSubAgent(spec.Name, spec.Prompt, execFn), nil |
| 50 | } |
| 51 | fmt.Println("✓ 创建子代理工厂") |
| 52 | |
| 53 | // 4. 创建 SubAgentMiddleware |
| 54 | subagentMiddleware, err := middleware.NewSubAgentMiddleware(&middleware.SubAgentMiddlewareConfig{ |
| 55 | Specs: specs, |
| 56 | Factory: factory, |
| 57 | EnableParallel: true, |
| 58 | }) |
| 59 | if err != nil { |
| 60 | log.Fatalf("创建 SubAgentMiddleware 失败: %v", err) |
| 61 | } |
| 62 | fmt.Println("✓ 创建 SubAgentMiddleware") |
| 63 | |
| 64 | // 5. 创建 FilesystemMiddleware |
| 65 | fsMiddleware := middleware.NewFilesystemMiddleware(&middleware.FilesystemMiddlewareConfig{ |
| 66 | Backend: backend, |
| 67 | EnableEviction: true, |
| 68 | }) |
| 69 | fmt.Println("✓ 创建 FilesystemMiddleware") |
| 70 | |
| 71 | // 6. 创建 Middleware Stack |
nothing calls this directly
no test coverage detected