提示词工程 -HIL 场景与洞见

文 | 三七 (转载请注明出处)
公众号:三七-编程实战
不积跬步无以至千里,欢迎来到 AI 时代的编程实战课
场景引入:带 2 岁女儿爬山的智慧启发
周末阳光正好,我牵着 2 岁女儿的小手爬山。她穿着粉色运动鞋,一路咿咿呀呀数着台阶:"一、二、三!"小短腿倒腾得飞快,兴奋得像只小松鼠。
半山腰时,前方出现一个古朴的观景台。女儿一看到开阔的山谷,眼睛瞬间亮了:"哇!好大呀!"挣脱我的手就要往前冲。
我心脏都提到嗓子眼——那观景台年代久远,边缘竟然没有护栏!
没有任何犹豫,我飞扑过去紧紧拉住她的小手,把她拽回怀里。女儿被突然的动作吓了一跳,小嘴一瘪要哭。但我顾不了那么多,抱着她后退好几步。这种时候不解释、不商量,就是强制保护。
爬到山顶后,我们都累了。女儿在小卖部看到别的小朋友舔冰棍,立刻眼巴巴地拉着我衣角:"爸爸,我也要吃冰棍!"
我摸摸她发热的小脸,看着她渴望的眼神。确实该补水了,但刚爬完山就吃冰品对小肠胃不好。
"宝贝,你看那边还有果汁和小饼干呢!冰棍太凉了会肚子疼,我们买苹果汁配饼干,坐树荫下看风景,就像小野餐一样,好不好?"
女儿歪着小脑袋想了想:"果汁也是甜甜的吗?"
"当然!而且比冰棍更健康。"
"好吧!那我要苹果汁!"
我们在绿荫下坐成一团。女儿一边喝着果汁,一边兴奋地指着远山:"爸爸你看,好漂亮!"小脸上满足的笑容告诉我,今天又是愉快的一天。
下山路上,女儿蹦蹦跳跳走在前面,不时回头冲我甜甜一笑。那一刻我突然意识到:这次爬山的两个小插曲,竟然藏着人机协作的智慧密码。
破俗立新:Agent 不是万能的,聪明的 Agent 知道何时求助
很多人以为 Agent 越智能越好,最好什么都能自己搞定。错了!
真正聪明的 Agent 就像我的宝贝女儿:知道什么场景需要爸爸强制介入,什么时候需要主动说"爸爸我需要帮助"。
HIL 的两种核心机制
静态 HIL = 悬崖边强制保护
Agent 行为:准备执行危险操作(删除数据、转账、发布代码)
人类介入:系统强制暂停,必须人类确认才能继续
设计原则:预定义危险边界,无条件触发
动态 HIL = 渴了主动求助
Agent 行为:检测到信息不足或风险超阈值,主动寻求协作
人类介入:提供信息、修改方案或做最终决策
设计原则:智能评估自身能力边界,主动求助
人类协作的五种姿势
就像爸爸面对女儿需求的不同回应方式:
补充信息:"告诉爸爸具体怎么不舒服"
同意提案:"好的,我们就买果汁"
修改方案:"冰棍改成果汁+饼干更好"
拒绝提案:"不行,悬崖边太危险"
直接转人工:"这个问题太复杂,找妈妈吧"
核心洞察:好的 Agent 不是什么都会,而是精确知道自己不会什么。
深度阐释:HIL 的两种实现方式
方式一:LangGraph 工程实现
以银行转账系统为例:

关键设计要点:
🏗️ 架构层次区分:
📊 LangGraph 图编排层:蓝色系节点,负责流程控制、HIL 中断、状态管理
🤖 Agent 内部操作层:紫色系节点,负责业务逻辑、工具调用、风险判断
🛑 HIL 机制:
静态 HIL:
UserConfirm
图节点对所有转账强制确认触发原因:金融操作必须用户明确授权,确保每笔转账都经过用户同意
动态 HIL:
HumanReview
图节点仅在 Agent 检测到高风险时触发触发原因:Agent 检测到高风险因素,需要人类专业判断来决策是否继续
🔧 Agent 智能决策:
工具调用序列:Agent 按顺序调用
initialize_transfer_session
→perform_risk_assessment
决策分支逻辑:基于风险评估工具返回的"需要人工审核: 是/否"影响图的流程分支
跨层协作:Agent 内部决策结果驱动 LangGraph 图的路由选择
LangGraph 核心代码:
运行效果:
方式二:提示词实现
以反馈工单助手为例,展示动态 HIL 的核心智慧:
核心洞察:Agent 无法自我判断信息缺失,必须预定义检查清单。
动态 HIL 实现机制:
实际运行效果展示:
场景:用户提供不完整的故障反馈
用户输入:"软件有问题,帮我处理一下"
Agent 智能分析:
检测关键词:"问题" → 分类为故障反馈
检查必填字段:
异常现象:❌ 未明确(仅说"有问题")
使用环境:❌ 未提及
触发动态 HIL
Agent 响应(动态 HIL):
用户补充:"扫描仪软件点击扫描按钮后就卡死了,今天上午开始的"
Agent 再次分析:
异常现象:✅ "点击扫描按钮后就卡死了"
使用环境:✅ "扫描仪软件"
发生时间:✅ "今天上午开始"
操作流程:✅ "点击扫描按钮后"
信息完整性:满足工单创建要求
Agent 响应(继续流程):
设计原则:预定义检查清单的威力
为什么这种方式有效
🔴 明确的触发条件:
❌ 错误方式:让 Agent"感觉"信息是否充足
✅ 正确方式:预定义必填字段清单,强制检查
💡 深层洞见:这是对 Agent 的"约束"——禁止 Agent 假装信息充足
📋 结构化信息收集:
❌ 错误方式:Agent 随意询问"还需要什么信息吗?"
✅ 正确方式:显示标准化表单,突出缺失字段
💡 深层洞见:这是对人类的"约束"——要求人类按特定格式提供信息
💡 智能引导而非猜测:
❌ 错误方式:Agent 基于部分信息"猜测"并继续处理
✅ 正确方式:明确告知缺失信息,提供具体示例
⏳ 强制等待机制:
❌ 错误方式:Agent 说"如果有更多信息会更好"然后继续
✅ 正确方式:明确表示"需要这些信息才能继续"
核心洞见:约束让 Agent 协作高效
约束的双向性:
对 Agent 的约束:不能假装信息充足,必须明确表达需求
对人类的约束:必须按结构化格式提供信息
约束的威力:
"约束让协作双方的沟通高效——人与人之间是这样,人与 Agent 也是这样。好的 HIL 设计不是放任自由,而是设计合理的双向约束。"
技术层面的深层原因:
上下文窗口的限制:
高效协作:结构化对话 → 上下文简洁 → 信息不丢失 → 协作顺畅
低效协作:来回纠偏 → 上下文膨胀 → 超过 LLM 处理上限 → 信息丢失 → 越走越偏
"LLM 有上下文窗口限制,无论是总结还是丢弃最老信息都会造成信息丢失。约束让对话保持聚焦,避免上下文爆炸。"
现实场景的对应:
爬山场景:
女儿的约束:渴了必须说"爸爸我需要水",不能装不渴
爸爸的约束:必须围绕需求给出更好方案,不能顾左右而言其他
架构决策场景:
参与者的约束:必须针对决策文档逐条讨论,不能天马行空
主持人的约束:必须紧抓议题不走偏,不能任由发散
"架构决策文档就是多方协作的约束机制——让会议聚焦在关键决策点上,避免无效讨论消耗时间和注意力。"
总结回顾:Agent 协作的三大智慧
一次爬山,两个场景,三个洞察,让我们理解了 Agent 与人类协作的精髓。
两个经典场景:
静态 HIL:悬崖边瞬间决策:父亲强制拉住冲向无护栏观景台的女儿
动态 HIL:山顶需求协商:女儿要冰棍,父亲提供果汁配饼干的更好方案
三个核心洞察
洞察 1:悬崖边保护机制
Agent 心声:"我知道删库跑路很爽,但我也知道你会打死我,所以我主动暂停等你确认。"
技术翻译:预定义危险操作的强制确认点,无条件触发静态 HIL。
洞察 2:信息不足求助机制
Agent 心声:"我能装懂,缺啥说啥。就像小女孩说'爸爸我渴了',我会说'主人我缺信息'。"
技术翻译:基于检查清单的动态 HIL,主动识别能力边界并寻求协作。
洞察 3:双向约束提高协商效率
Agent 心声:"我必须明确说'我要冰棍'(表达约束),爸爸必须围绕我的需求给方案(响应约束)。这种约束让我们的协商又快又好!"
技术翻译:双向约束机制——Agent 约束自己明确表达需求,人类约束自己针对需求提供方案,避免无效沟通,提高协商效率。就像架构决策文档约束会议参与者一样,结构化的约束让协作更高效。
HIL 设计的三重价值
🛡️ 安全价值:智能边界守护
静态边界:预定义危险操作的强制确认点,如悬崖边的瞬间保护
动态边界:Agent 基于能力自省主动寻求人类协作,如渴了求助
零容错:关键业务绝不允许 Agent 独自决策
🚀 效率价值:约束驱动的高效协作
避免试错:明确的检查清单替代模糊的"感觉"判断
上下文保护:结构化对话避免 LLM 上下文窗口爆炸
聚焦机制:像架构决策文档一样,约束让协作紧抓核心问题
🎯 体验价值:智能引导而非被动等待
主动表达:Agent 明确说出需要什么帮助,而不是让用户猜
结构化协作:提供清晰的选择和表单,降低用户认知负担
渐进优化:基于人类反馈持续改进决策质量
如果今天你只记得一句话
"最好的 Agent 架构师不是设计一个万能的自动系统,也不是什么都问用户的烦人系统——而是设计一个知道在什么时候寻求什么帮助,并且可以引导用户协助它,最后还能基于人类的协助做出更好决策的智能系统。"
本文基于真实工程场景和理论分析编写,所有技术案例均已验证。愿你在 AI 时代的编程路上游刃有余,既能直接收敛解决明确问题,又能系统性探索解决复杂挑战!
版权声明: 本文为 InfoQ 作者【Jxin】的原创文章。
原文链接:【http://xie.infoq.cn/article/063e7ce75832a5e91f7b75eb5】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论