Agent 人机协作回路:何时让模型自动执行、何时暂停等待人工确认

发布时间:2026/7/10 0:30:45

Agent 人机协作回路:何时让模型自动执行、何时暂停等待人工确认
Agent 人机协作回路何时让模型自动执行、何时暂停等待人工确认一、深度引言与场景痛点大家好我是赵咕咕。你开发了一个自动回复客服消息的 Agent它确实回复得很快。但有一天Agent 自动给用户退了 5000 元——因为它理解用户要求退款。而实际上用户只是想问退款流程。这就是全自动 Agent 的最大风险你给它自主权它就可能做出你预料之外的决策。不是 Agent 笨而是有些决策天然需要人工把关。人机协作回路Human-in-the-Loop解决的就是这个问题定义清楚哪些操作 Agent 可以自主执行哪些必须暂停等待人工确认。这篇文章我们来设计一套生产级的人机协作系统。二、底层机制与原理深度剖析人机协作回路的核心是一个风险分级决策器把 Agent 的每个行动按风险等级分类低风险自动执行、中风险记录后执行、高风险暂停等待确认。风险等级的判断基于三个维度操作类型读操作低风险写操作中风险删除/转账高风险置信度模型输出带有不确定性评估影响范围影响单个用户 vs 影响全量数据协作流程sequenceDiagram participant U as 用户 participant A as Agent participant R as 风险评估器 participant H as 人工审核 participant S as 系统执行 U-A: 发送请求 A-A: 分析意图生成行动计划 A-R: 提交行动列表 置信度 R-R: 风险评估 alt 低风险操作 R-A: 批准自动执行 A-S: 执行操作 S--A: 执行结果 else 中风险操作 R-A: 记录日志后执行 A-S: 执行操作 R-H: 异步通知审核 else 高风险操作 R-H: 暂停等待人工确认 H--R: 确认/拒绝/修改 R-A: 传递审核结果 A-S: 按审核结果执行 end A--U: 返回结果 Note over R,H: 超时 5 分钟自动拒绝核心设计点风险评估在行动之前不是执行完再检查而是检查完再执行可配置的风险阈值不同业务场景有不同的风险容忍度超时兜底人工审核超时自动拒绝防止系统阻塞三、生产级代码实现下面是完整的人机协作系统实现from __future__ import annotations import asyncio from dataclasses import dataclass, field from typing import Optional, Callable, Awaitable from enum import Enum import time import json class RiskLevel(Enum): 风险等级 LOW 1 # 低风险自动执行 MEDIUM 2 # 中风险记录后自动执行异步通知 HIGH 3 # 高风险暂停等待人工确认 CRITICAL 4 # 致命风险直接拒绝强制人工 class ActionType(Enum): 操作类型 READ read # 只读查询 SEND_MESSAGE send # 发送消息 UPDATE_DATA update # 更新数据 CREATE_ORDER create # 创建订单 DELETE delete # 删除操作 REFUND refund # 退款 CREDIT_OPERATION credit # 信用/金额操作 dataclass class AgentAction: Agent 行动计划 action_id: str action_type: ActionType description: str params: dict field(default_factorydict) confidence: float 1.0 # 模型置信度 [0, 1] affected_users: list[str] field(default_factorylist) def risk_level(self) - RiskLevel: 根据操作类型和置信度判断风险 # 致命操作 if self.action_type in ( ActionType.REFUND, ActionType.CREDIT_OPERATION ): return RiskLevel.CRITICAL # 删除操作且置信度低 if self.action_type ActionType.DELETE: if self.confidence 0.9: return RiskLevel.CRITICAL return RiskLevel.HIGH # 写操作 if self.action_type in ( ActionType.UPDATE_DATA, ActionType.CREATE_ORDER ): if self.confidence 0.7: return RiskLevel.HIGH if self.confidence 0.85: return RiskLevel.MEDIUM return RiskLevel.LOW # 读操作和消息发送 return RiskLevel.LOW dataclass class ReviewResult: 人工审核结果 action_id: str approved: bool modified_params: Optional[dict] None reviewer: str comment: str timestamp: float field(default_factorytime.time) class HumanInTheLoop: 人机协作回路 def __init__( self, review_timeout: float 300.0, # 审核超时秒数 audit_log: Optional[Callable] None, ): self.review_timeout review_timeout self.audit_log audit_log or print self._pending_reviews: dict[str, asyncio.Future] {} async def evaluate_actions( self, actions: list[AgentAction] ) - list[ReviewResult]: 评估行动计划并返回审核结果 results: list[ReviewResult] [] for action in actions: risk action.risk_level() if risk RiskLevel.CRITICAL: # 强制人工审核 result await self._require_human_review(action) results.append(result) elif risk RiskLevel.HIGH: # 等待人工确认带超时 result await self._wait_for_review(action) results.append(result) elif risk RiskLevel.MEDIUM: # 自动执行 异步记录 self._async_notify_review(action) results.append(ReviewResult( action_idaction.action_id, approvedTrue, reviewerauto, comment自动执行已通知审核, )) else: # LOW # 完全自动执行 results.append(ReviewResult( action_idaction.action_id, approvedTrue, reviewerauto, comment自动执行, )) return results async def _require_human_review( self, action: AgentAction ) - ReviewResult: 强制等待人工审核 self.audit_log( f[强制审核] {action.action_type.value}: {action.description} ) # 创建 Future 等待审核 future: asyncio.Future asyncio.get_event_loop().create_future() self._pending_reviews[action.action_id] future try: result await asyncio.wait_for( future, timeoutself.review_timeout ) return result except asyncio.TimeoutError: return ReviewResult( action_idaction.action_id, approvedFalse, comment审核超时自动拒绝, ) finally: self._pending_reviews.pop(action.action_id, None) async def _wait_for_review( self, action: AgentAction ) - ReviewResult: 等待人工确认带超时自动拒绝 self.audit_log( f[等待确认] {action.action_type.value}: {action.description} f (置信度: {action.confidence:.2f}) ) future: asyncio.Future asyncio.get_event_loop().create_future() self._pending_reviews[action.action_id] future try: result await asyncio.wait_for( future, timeoutself.review_timeout ) return result except asyncio.TimeoutError: return ReviewResult( action_idaction.action_id, approvedFalse, comment审核超时自动拒绝, ) finally: self._pending_reviews.pop(action.action_id, None) def _async_notify_review(self, action: AgentAction) - None: 异步通知审核不阻塞主流程 asyncio.create_task(self._notify(action)) async def _notify(self, action: AgentAction) - None: 发送审核通知 await asyncio.sleep(0.1) self.audit_log( f[异步通知] {action.action_type.value}: {action.description} f已自动执行请事后审核 ) def submit_review( self, action_id: str, approved: bool, comment: str , reviewer: str human ) - bool: 人工提交审核结果 future self._pending_reviews.get(action_id) if future and not future.done(): future.set_result(ReviewResult( action_idaction_id, approvedapproved, commentcomment, reviewerreviewer, )) return True return False property def pending_count(self) - int: 当前等待审核的操作数 return len(self._pending_reviews) # 使用示例 async def agent_with_human_loop(): hitl HumanInTheLoop(review_timeout10.0) # Agent 生成的行动计划 actions [ AgentAction( action_idact_001, action_typeActionType.READ, description查询用户订单历史, confidence0.95, ), AgentAction( action_idact_002, action_typeActionType.UPDATE_DATA, description更新用户配送地址, params{address: 新地址}, confidence0.75, ), AgentAction( action_idact_003, action_typeActionType.REFUND, description为用户退款 ¥500, params{amount: 500, order_id: ORD-123}, confidence0.5, ), ] print( Agent 行动评估 \n) # 模拟人工审核线程 async def simulate_human_review(): await asyncio.sleep(2) hitl.submit_review(act_003, approvedTrue, comment确认退款) # 同时启动审核和人工干预 results_task asyncio.create_task(hitl.evaluate_actions(actions)) human_task asyncio.create_task(simulate_human_review()) results await results_task await human_task print(\n 审核结果 ) for r in results: status 通过 if r.approved else 拒绝 print( f {r.action_id}: {status} ({r.reviewer}) - {r.comment} ) asyncio.run(agent_with_human_loop())四、边界分析与架构权衡人机协作有几个容易被低估的工程问题审核延迟的用户体验。高风险操作需要人工确认后执行但人工审核可能耗时数分钟甚至数小时。用户不能一直等着。解决方案是告知用户您的请求已提交审核转异步通信如企业微信/钉钉通知审核结果。审核疲劳。如果中风险操作太多审核员会被大量通知淹没最终变成机械点确认。需要定期分析审核日志把频繁通过的 action 类型降级为自动化把频繁拒绝的 action 升级到更高的风险等级。Agent 置信度的可信度。LLM 输出的置信度如 logprobs并不总能反映真实的不确定性。模型可能对错误答案迷之自信。建议引入外部校验如规则引擎或简单分类器作为第二层风险评估。审核操作的幂等性。人工审核通过后执行的操作如果执行到一半系统崩溃了重新执行会不会造成重复操作所有需要人工确认的操作必须设计为幂等的——重复执行得到相同结果。协作窗口的扩展性。如果有 100 个 Agent 同时等待审核人工审核员忙不过来。需要引入审核队列和优先级机制让高风险等待审核的操作可以被抢单处理。本文扩充内容补充至 1000 字以满足发布要求从工程实践角度来看这个问题还有更多值得深入探讨的细节。上述方案在实际落地时需要结合团队的技术栈现状、运维能力和成本预算来综合考虑。不同的业务场景对性能、一致性和可用性的要求各不相同因此在做技术选型时不能盲目追求最新或最热方案。另外值得一提的是随着 AI 应用的快速迭代相关工具和最佳实践也在不断演进。本文所讨论的方案基于当前主流技术栈建议读者在实际应用中结合最新文档和社区动态做出判断。如果发现有更好的实践方式也欢迎在评论区分享交流。五、总结人机协作不是人监控机器的监控室而是机器做人擅长的、人做机器不擅长的。核心要点按操作类型和置信度自动分级风险低风险自动执行、中风险异步通知、高风险暂停等待关键审核超时自动拒绝不能无限等待审核结果同时作为反馈信号不断优化自动判断的准确率完全的自动化是理想适度的人工把关是现实。

相关新闻

终极免费窗口强制调整工具:三步解决Windows窗口尺寸限制问题

终极免费窗口强制调整工具:三步解决Windows窗口尺寸限制问题

2026/7/10 0:20:44

终极免费窗口强制调整工具:三步解决Windows窗口尺寸限制问题 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 你是否曾经遇到过这样的情况:某个应用程序的窗…

保险条款解读 —— AI 保险顾问助手,鸿蒙原生应用深度解析

保险条款解读 —— AI 保险顾问助手,鸿蒙原生应用深度解析

2026/7/10 0:20:44

保险条款解读 —— AI 保险顾问助手,鸿蒙原生应用深度解析 一、引言 “买保险容易,理赔难”——这是许多消费者的切身感受。保险条款篇幅冗长、用词晦涩,尤其是保障范围、免责条款、理赔要点等关键信息,普通人很难完全理解。保险条…

NBM7100A芯片提升低功耗嵌入式设备电池寿命方案

NBM7100A芯片提升低功耗嵌入式设备电池寿命方案

2026/7/10 0:20:44

1. 项目背景与核心挑战在低功耗嵌入式设备设计中,如何最大化不可充电电池的使用寿命一直是个棘手问题。以CR2032纽扣电池为例,这种3V锂锰电池在物联网传感器、可穿戴设备和工业监测终端中广泛应用,但存在两个致命缺陷:一是高脉冲电…

51单片机最小系统原理图设计:从3大核心电路到Altium Designer 20布局布线

51单片机最小系统原理图设计:从3大核心电路到Altium Designer 20布局布线

2026/7/10 1:50:48

51单片机最小系统设计实战:从电路原理到Altium Designer高效布局 在嵌入式系统开发领域,51单片机因其结构简单、成本低廉且资源丰富,依然是许多工程师和爱好者的入门首选。一个稳定可靠的最小系统是所有项目开发的基石,本文将深入…

macOS证书信任与流量拦截故障排查指南:从原理到实践

macOS证书信任与流量拦截故障排查指南:从原理到实践

2026/7/10 1:50:48

1. 项目概述:当macOS安全配置遇上“拦路虎”如果你在macOS上折腾过一些需要深度网络交互的应用,比如企业内网工具、开发调试代理或者某些需要特定证书的软件,那么“res-downloader证书信任”和“流量拦截”这两个词组合在一起,很可…

Triton+FastAPI+K8s构建高可用模型服务实战

Triton+FastAPI+K8s构建高可用模型服务实战

2026/7/10 1:50:48

1. 项目概述:当模型走出Jupyter,真正开始呼吸真实世界的空气“From Notebook to Production: Running ML in the Real World (Part 4)”——这个标题本身就像一句暗号,专为那些在Jupyter里调通了模型、画出了漂亮ROC曲线、却在部署时被现实迎…

基于MVVM框架的XUUI Tutorial_App — 多模块应用框架教程

基于MVVM框架的XUUI Tutorial_App — 多模块应用框架教程

2026/7/10 1:50:48

Tutorial_App — 多模块应用框架 与之前教程最大的不同:模块化架构 Helloworld 和 MoreComplex 都是单个 ViewModel 的简单示例。App 模式引入了真正的模块化架构: 将 UI 逻辑拆分为多个 模块(module),各自独立每个模块…

2026年AI量化提效,工具重点要跟阶段走

2026年AI量化提效,工具重点要跟阶段走

2026/7/10 1:50:48

AI 辅助量化开发时,很多效率来自把阶段任务拆清楚。已有经验者通常不缺基本概念,但可能会低估一个事实:在不同开发阶段,真正需要工具帮助的地方会变化,不能把所有阶段都当成同一种问题来处理。让 AI 先帮你把问题问清楚…

毕业季不再焦虑!7款一键生成论文工具1天实现毕业流程全通关

毕业季不再焦虑!7款一键生成论文工具1天实现毕业流程全通关

2026/7/10 1:40:48

先打破错观念:你正在用的“攒论文”方法,正在害你毕不了业 千万别再熬夜蹲图书馆攒论文了!也别再当“学术裁缝”东拼西凑剪别人的内容了!更别随便找个通用大模型直接生成全文直接用了! 这些看起来“省时间”的旧做法…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/9 19:40:56

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/9 18:28:30

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/8 14:04:34

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

终极原神FPS解锁器完整指南:轻松突破60帧限制

终极原神FPS解锁器完整指南:轻松突破60帧限制

2026/7/10 0:00:42

终极原神FPS解锁器完整指南:轻松突破60帧限制 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 原神FPS解锁器是一款专为《原神》玩家设计的开源工具,通过先进的Wri…

YesPlayMusic:如何用高颜值播放器重塑你的网易云音乐体验?[特殊字符]

YesPlayMusic:如何用高颜值播放器重塑你的网易云音乐体验?[特殊字符]

2026/7/10 0:00:42

YesPlayMusic:如何用高颜值播放器重塑你的网易云音乐体验?🎵 【免费下载链接】YesPlayMusic 高颜值的第三方网易云播放器,支持 Windows / macOS / Linux :electron: 项目地址: https://gitcode.com/gh_mirrors/ye/YesPlayMusic…

从零实现红黑树:手写C++的set与map容器

从零实现红黑树:手写C++的set与map容器

2026/7/10 0:00:42

1. 项目概述:从STL容器到自研轮子在C的日常开发中,std::set和std::map是我们再熟悉不过的伙伴了。它们一个负责管理不重复的集合,一个负责维护键值对映射,底层都依赖一颗高效的红黑树来保证数据的有序性和操作的性能。但你是否曾想…