你正在 进阶版 · 🤖 智能体实验室 · ← 回到学院 · 进阶版主页 · 总入口

← 十二个项目

项目 08 · 暂停 · 询问 · 调度

用 AutoGen Studio(微软开源)做一个多步智能体。每一步都有"是否要先问用户"的决策点。带审计日志。

技术栈

AutoGen Studio(开源) + Ollama 本地模型 + 前端 React 控制台。

步骤 1 · 装 AutoGen Studio

pip install autogenstudio
autogenstudio ui --port 8081

它会启动一个图形界面让你拖动配置智能体。配后端用 Ollama:在 ~/.autogenstudio 里配置好 model 指向 http://localhost:11434

步骤 2 · 设计 5 步工作流

选一个具体任务:比如"帮我整理这周的工作总结邮件"。把它拆成 5 步:

  1. 读取这周的会议记录(要不要先问用户:哪些算"这周"?)
  2. 提取关键事项(不需要问 —— 内部)
  3. 起草邮件正文(要不要问:发给谁?)
  4. 检查口气和长度(不需要问)
  5. 发送(必须先问

步骤 3 · 写"决策点"逻辑

每一步的代码里加一个 shouldPauseAndAsk()。三种规则:

步骤 4 · 审计日志

每一步、每一次决策、每一次询问、用户回应 —— 全部 append 到 audit.log。这是工程上"可追责" 的基础。

← 上一个下一个:脆弱用户 →

工程测验 什么时候 agent 应该「暂停并询问用户」?
下面哪种情况最应该让 agent 暂停?
解释:暂停的原则很简单:「如果出错后无法恢复,就要问」。删除数据、花钱、发送消息 —— 这些都是不可逆的,所以要暂停。但是「搜索信息」、「生成草稿」这样无伤大雅的操作就不需要问。
分步引导 实现 Agent 的「暂停确认机制」的 3 步
  1. 定义「危险操作清单」。哪些操作需要确认?写下来。
    看参考

    例:删除、修改、支付、发送、部署。对每个操作写一个确认文案:「确认删除 100 条消息吗?此操作无法撤销。」

  2. 在执行之前,如果操作在清单里,就抛出一个 `ConfirmationRequired` 异常,停止执行。
    看参考

    例:```javascript\nif (action === 'delete') throw new ConfirmationRequired('确认删除?'); ```

  3. 在 UI 层捕获这个异常,显示「确认对话框」。用户说「是」时,用一个特殊的 flag(如 `confirmed: true`)重新调用 agent。
    看参考

    例:用户点「删除」→ Agent 抛 ConfirmationRequired → UI 显示对话框 → 用户点「确认」→ 重新执行 delete(confirmed: true)。

动手 为一个 Agent 实现暂停确认逻辑
任务:写一个 `AgentWithConfirmation` 类。`execute(action, params)` 方法:如果是危险操作就抛 ConfirmationRequired;如果有 `confirmed: true` flag 就执行。
参考实现

工程级参考答案(带完整注释):

// 生产级 Agent Confirmation 实现
type ActionSeverity = 'safe' | 'warning' | 'danger';

interface ActionPolicy {
  requiresConfirmation: boolean;
  severity: ActionSeverity;
  confirmationMessage: string;
  rollbackable: boolean;
}

class ProductionAgent {
  private actionPolicies: Map;
  private auditLog: Array<{ timestamp: Date; action: string; confirmed: boolean; result: any }> = [];
  
  constructor() {
    this.actionPolicies = new Map([
      ['delete', { requiresConfirmation: true, severity: 'danger', confirmationMessage: '此操作无法撤销', rollbackable: false }],
      ['transfer', { requiresConfirmation: true, severity: 'danger', confirmationMessage: '确认转账金额无误?', rollbackable: false }],
      ['send', { requiresConfirmation: true, severity: 'warning', confirmationMessage: '消息发送后无法编辑', rollbackable: false }],
      ['search', { requiresConfirmation: false, severity: 'safe', confirmationMessage: '', rollbackable: true }],
    ]);
  }
  
  async execute(action: string, params: any & { confirmed?: boolean } = {}): Promise {
    const { confirmed = false, ...actionParams } = params;
    const policy = this.actionPolicies.get(action);
    
    if (!policy) {
      throw new Error(`Unknown action: ${action}`);
    }
    
    if (policy.requiresConfirmation && !confirmed) {
      throw new ConfirmationRequired({
        action,
        message: policy.confirmationMessage,
        severity: policy.severity,
      });
    }
    
    try {
      const result = await this.performAction(action, actionParams);
      this.auditLog.push({
        timestamp: new Date(),
        action,
        confirmed,
        result,
      });
      return result;
    } catch (err) {
      // 如果操作失败且可回滚,尝试回滚
      if (policy.rollbackable) {
        await this.rollback(action, actionParams);
      }
      throw err;
    }
  }
  
  private async performAction(action: string, params: any): Promise {
    // 实现实际的业务逻辑
    return { success: true, action };
  }
  
  private async rollback(action: string, params: any): Promise {
    console.log(`回滚 ${action}...`);
  }
  
  getAuditLog() {
    return this.auditLog;
  }
}
动手 为你的 Agent 写一个「危险操作确认」的 system prompt
任务:写一个 system prompt,定义:(1) 什么是危险操作;(2) 执行前要问什么问题;(3) 用户如果回答不清楚,agent 应该怎么办;(4) 有没有「不可逆转操作的例外」。

在下面框里写你自己的 prompt(可以用中文):

→ 打开通义千问粘贴试 已复制 ✓
看参考 prompt

参考 prompt(这是一个模板,你可以改细节):

你是一个领域专家。请基于以下规则回答问题:

1. 只基于你的专业知识和常见做法回答,不编造。
2. 如果问题超出你的领域,明确说「这不在我的专业范围内」。
3. 给出的建议应该包括「为什么」和「什么时候不应该这样做」。
4. 对于有争议的做法,列出不同观点。

现在,开始回答用户的问题。