# 人机协同:Supervisor 模式与审批 本示例演示了 **Supervisor** 多智能体模式与 **审批** 人机协同模式的结合。 它展示了如何构建一个层级化的多智能体系统,其中主管智能体协调专业化的子智能体,而敏感操作(如资金转账)在执行前需要用户的明确批准。 ## 工作原理 1. **Supervisor 架构**:一个金融顾问主管管理两个专业化的子智能体: - **account_agent**:处理账户相关查询,如查询余额 - **transaction_agent**:处理金融交易,如资金转账 2. **可审批工具**:`transaction_agent` 拥有一个被 `InvokableApprovableTool` 包装的 `transfer_funds` 工具。这确保在执行任何资金转账之前,用户必须明确批准。 3. **工作流程**: - 用户发起请求(例如,"查询余额并转账 $500") - 主管将余额查询委托给 `account_agent` - 主管将转账操作委托给 `transaction_agent` - 当调用 `transfer_funds` 时,触发**中断** - 用户批准或拒绝交易 - 智能体恢复执行并完成(或取消)操作 4. **定向恢复**:用户输入后,调用 `runner.ResumeWithParams` 传递审批结果,允许智能体继续执行。 ## 实际示例 以下是审批流程的示例: ``` ======================================== User Query: Check my checking account balance, and then transfer $500 from checking to savings account. ======================================== name: financial_supervisor path: [{financial_supervisor}] action: transfer to account_agent name: account_agent path: [{financial_supervisor} {account_agent}] tool name: check_balance arguments: {"account_id":"checking"} name: account_agent path: [{financial_supervisor} {account_agent}] tool response: {"account_id":"checking","balance":5000,"currency":"USD"} name: financial_supervisor path: [{financial_supervisor}] action: transfer to transaction_agent name: transaction_agent path: [{financial_supervisor} {transaction_agent}] tool name: transfer_funds arguments: {"from_account":"checking","to_account":"savings","amount":500,"currency":"USD"} ======================================== APPROVAL REQUIRED ======================================== tool 'transfer_funds' interrupted with arguments '{"from_account":"checking","to_account":"savings","amount":500,"currency":"USD"}', waiting for your approval, please answer with Y/N Approve this transaction? (Y/N): Y ======================================== Resuming execution... ======================================== name: transaction_agent path: [{financial_supervisor} {transaction_agent}] tool response: {"transaction_id":"TXN-2025-001234","status":"completed",...} ``` 此跟踪记录展示了: - **层级委托**:主管将任务路由到适当的子智能体 - **余额查询**:账户智能体无需审批即可获取余额 - **需要审批**:转账操作触发中断以获取用户确认 - **定向恢复**:批准后,交易完成 ## 如何配置环境变量 在运行示例之前,您需要设置 LLM API 所需的环境变量。您有两个选项: ### 选项 1: OpenAI 兼容配置 ```bash export OPENAI_API_KEY="{your api key}" export OPENAI_BASE_URL="{your model base url}" # 仅在使用 Azure 类 LLM 提供商时配置此项 export OPENAI_BY_AZURE=true # 'gpt-4o' 只是一个示例,请配置您的 LLM 提供商提供的实际模型名称 export OPENAI_MODEL="gpt-4o-2024-05-13" ``` ### 选项 2: ARK 配置 ```bash export MODEL_TYPE="ark" export ARK_API_KEY="{your ark api key}" export ARK_MODEL="{your ark model name}" ``` 或者,您可以在项目根目录创建一个 `.env` 文件来设置这些变量。 ## 如何运行 确保您已设置好环境变量(例如,LLM API 密钥)。然后,在 `eino-examples` 仓库的根目录下运行以下命令: ```sh go run ./adk/human-in-the-loop/5_supervisor ``` 您将看到主管在智能体之间进行协调,当尝试进行资金转账时,系统会提示您批准或拒绝交易。 ## 工作流程图 ```mermaid graph TD A[用户请求] --> B{金融主管}; B --> C[委托给 account_agent]; C --> D[查询余额]; D --> E[返回余额]; E --> B; B --> F[委托给 transaction_agent]; F --> G{transfer_funds 工具}; G --> H[中断:需要审批]; H --> I{用户输入}; I -- "Y (批准)" --> J[恢复:已批准]; J --> K[转账已执行]; K --> L[最终响应]; I -- "N (拒绝)" --> M[恢复:已拒绝]; M --> N[转账已取消]; N --> L; ```