当 AI 不够用的时候,它选择去问人——Claude 这个细节让我重新理解了 Agent 设计
当 AI 不够用的时候,它选择去问人——Claude 这个细节让我重新理解了 Agent 设计
大多数 AI 遇到信息不够的时候,要么编,要么停。
编的那种,你大概见过:你问它一个它不知道答案的问题,它给你一个听起来很有把握的回答,细节丰满、逻辑自洽,但是错的。停的那种也常见:任务描述模糊,它就原地转圈,要么反复追问你"请提供更多信息",要么直接给你一个完全没有针对性的通用回答。
Claude 在 Project 场景里选择了第三条路:去问人。
不是随机问,不是问你一堆废话,而是识别出信息缺口在哪里,然后生成一份有优先级的追问清单,发给能回答这些问题的人。
这个细节让我盯着屏幕想了很久。
---
第一章:它做了一件很多 AI 不敢做的事
Anthropic 在演示 Claude 的 Project 功能时,有一个场景让我印象深刻。
场景大概是这样:用户给 Claude 分配了一个商务尽调任务,但给的背景材料是残缺的——对方公司的财务数据不全,某几个关键条款的谈判记录也没有同步过来。
换一个普通的 AI,这里有两条路:
1. 幻觉填充:根据行业均值或者训练数据里的"常见情况",把空白补上,给你一份看起来完整的分析报告。
2. 沉默中断:告诉你"信息不足,无法分析",然后停下来等你去补材料。
Claude 做的是第三件事:它识别出"我缺少什么信息",然后主动生成了一份结构化的追问清单,并且知道这些问题应该发给哪个角色——财务数据的问题发给 CFO,合同条款的问题发给法务。
这个行为有几个细节值得注意:
- 追问是有优先级的:它不是把所有疑问一股脑列出来,而是区分了"必须知道才能继续"和"知道了会更好"两个层级。
- 问题是为对方设计的:发给 CFO 的问题用的是财务语言,发给法务的问题用的是合同语言,不是同一份问卷发给所有人。
- 它在等答案的同时没有停下来:可以继续处理已有信息能支撑的部分,等追问回来之后再补全。
这不是一个小功能点,这是一个 Agent 设计哲学的体现。
---
第二章:拆解这个 Agent 的设计逻辑
把这个行为拆开来看,背后是三层设计:
第一层:信息缺口识别
在执行任务之前,先做一次"信息盘点"。把任务目标和当前已有信息做对比,找出哪些是"执行这个任务的必要输入",哪些是"当前缺失的"。
这一步听起来简单,但大多数 AI 在这里就已经跑偏了——它们不做这个对比,直接进入"生成答案"模式。
信息缺口识别的核心 Prompt 逻辑大概是这样的:
你是一个信息审计员。
给定任务目标:[TASK]
给定已有信息:[CONTEXT]
请完成以下分析:
1. 完成这个任务,必须知道的信息是什么?(列出清单)
2. 在已有信息中,哪些必要信息是缺失的?
3. 哪些缺失信息是"阻断性的"(没有它无法继续),哪些是"补充性的"(有了会更好)?
输出格式:
- 阻断性缺口:[列表]
- 补充性缺口:[列表]
- 可以先行处理的部分:[描述]
第二层:问题优先级排序
识别出缺口之后,不是把所有问题都抛出去,而是按照"阻断程度"和"获取难度"做排序。
阻断程度高、获取难度低的问题,优先追问。阻断程度低、获取难度高的问题,先放一放,用已有信息做推断性处理。
这个逻辑和人类处理信息的方式很接近——一个有经验的分析师不会在拿到一份残缺报告的时候,立刻去找所有人要所有资料。他会先判断:哪个缺口最致命,然后集中精力先解决那个。
第三层:异步追问 + 汇总
问题发出去之后,不是死等,而是继续处理已有信息能支撑的部分。等追问回来之后,把新信息和已处理的内容合并,更新结论。
这是一个典型的异步信息收集模式,在工程上对应的是"并发请求 + 结果聚合"的架构思路。
---
对比:两种 AI 的信息处理方式
幻觉填充型 AI 主动追问型 Agent
──────────────────────────────────────────────────
接收任务 接收任务
↓ ↓
直接进入生成模式 信息盘点(任务 vs 已有信息)
↓ ↓
用训练数据填补空白 识别信息缺口 + 分级
↓ ↓
输出"完整"但可能错误的结果 优先级排序 → 生成追问清单
↓
异步追问 + 处理已有部分
↓
整合回答 → 输出结论
差异不只是"准不准确",而是对不确定性的处理态度。幻觉填充是在假装不确定性不存在,主动追问是把不确定性显式化,然后有策略地消除它。
---
第三章:我是怎么把这个逻辑搬进自己工作流的
看完这个设计之后,我做的第一件事是:把这个逻辑搬进我自己处理需求的流程里。
我的场景是:经常接到模糊的内容需求,比如"帮我写一篇关于 XX 产品的推广文章"——没有受众、没有核心卖点、没有渠道信息、没有字数要求。以前我要么反复微信来回确认,要么凭经验猜,猜错了再改。
现在我搭了一个"需求澄清 Agent",逻辑如下:
import anthropic
client = anthropic.Anthropic(api_key="YOUR_API_KEY")
def clarification_agent(task_description: str) -> dict:
"""
需求澄清 Agent:识别信息缺口,生成结构化追问清单
"""
# Step 1: 信息缺口识别
gap_analysis_prompt = f"""
你是一个需求分析专家。
用户提交的任务:{task_description}
请分析:
1. 完成这个任务,哪些信息是必须知道的?
2. 当前描述中,哪些必要信息是缺失的?
3. 哪些缺口是"阻断性的"(没有无法开始),哪些是"补充性的"?
以 JSON 格式输出:
{{
"blocking_gaps": ["缺口1", "缺口2"],
"optional_gaps": ["缺口3"],
"can_proceed_with": "描述可以先做的部分"
}}
"""
gap_response = client.messages.create(
model="claude-opus-4-5",
max_tokens=1024,
messages=[{"role": "user", "content": gap_analysis_prompt}]
)
gaps = gap_response.content[0].text # 实际使用时需要 JSON 解析
# Step 2: 生成结构化追问清单
question_gen_prompt = f"""
基于以下信息缺口分析:{gaps}
请生成一份追问清单,要求:
- 每个问题简洁、具体,对方能直接回答
- 阻断性问题排在前面,标注"[必填]"
- 补充性问题排在后面,标注"[选填]"
- 问题总数不超过 6 个
- 语气友好,像在和同事确认,不像在审讯
直接输出追问清单,不需要额外解释。
"""
question_response = client.messages.create(
model="claude-opus-4-5",
max_tokens=1024,
messages=[{"role": "user", "content": question_gen_prompt}]
)
return {
"gap_analysis": gaps,
"questions": question_response.content[0].text
}
使用示例
result = clarification_agent("帮我写一篇关于我们新产品的推广文章")
print(result["questions"])
输出大概长这样:
[必填] 这篇文章的目标读者是谁?(比如:B端采购决策者 / C端普通用户)
[必填] 产品最核心的差异化优势是什么?用一句话描述。
[必填] 文章发布在哪个渠道?(公众号 / 官网 / 朋友圈广告)
[选填] 期望的文章长度是多少字?
[选填] 有没有需要规避的竞品名称或敏感词?
[选填] 有没有参考风格的文章链接?
这个清单发出去之后,对方填完,我再把答案喂回给模型,开始正式生成内容。整个流程比以前来回微信确认快了很多,而且最终产出的质量明显更高——因为信息是完整的。
💡 想直接跑这段代码?
文中调用的是 Claude API,国内可以通过 [api.884819.xyz](https://api.884819.xyz) 直接接入,无需折腾网络问题,按量计费,新用户注册即送体验 token,可以先试跑这个追问 Agent 的完整 Demo。
---
第四章:这个模式能迁移到哪些场景
这套"信息缺口识别 → 结构化追问"的逻辑,不只适合内容需求场景。我整理了三个可以直接落地的方向:
场景一:销售 / 商务跟进自动化
痛点:销售在跟进客户时,经常不知道下一步该问什么,要么问太泛,要么漏掉关键信息。 核心 Prompt 结构:你是一个销售顾问。
已知客户信息:[CRM 数据]
已知沟通记录:[最近 N 条对话]
销售目标:[本阶段目标,如:确认预算 / 推进决策链]
请识别:为了达成本阶段目标,还缺少哪些关键信息?
生成:3-5 个可以在下次跟进中自然提出的问题,按优先级排序。
需要调整的参数:行业术语、决策链角色名称、销售阶段定义。
---
场景二:产品需求收集
痛点:产品经理收到用户反馈时,反馈往往是"我觉得这个功能不好用"——没有具体场景、没有频率、没有期望。 核心 Prompt 结构:你是一个用户研究员。
用户反馈原文:[FEEDBACK]
请分析:
1. 这条反馈背后,用户真正的使用场景是什么?(推断)
2. 要把这条反馈转化为可执行的需求,还需要知道哪些信息?
3. 生成追问清单(不超过 4 个问题),帮助产品经理在下次用户访谈中获取关键信息。
需要调整的参数:产品类型(B端/C端)、反馈来源渠道(应用商店/客服工单/用户群)。
---
场景三:内容素材采集
痛点:写深度报道或行业分析时,采访前不知道该问什么,采访完发现漏掉了最关键的问题。 核心 Prompt 结构:你是一个资深内容编辑。
文章选题:[TOPIC]
已有素材:[已收集的资料摘要]
目标读者:[描述]
请分析:
1. 这篇文章要写得有说服力,还缺少哪些类型的信息?(数据 / 案例 / 专家观点 / 用户故事)
2. 如果要采访一位行业专家,最值得问的 5 个问题是什么?
3. 哪些问题是"只有这位专家能回答的",哪些是可以通过公开资料补充的?
需要调整的参数:行业背景、受访者角色、文章类型(新闻 / 评论 / 教程)。
---
第五章:边界和踩坑提醒
这个模式好用,但不是没有代价。我踩过几个坑,值得提前说清楚。
踩坑一:追问次数过多,用户直接放弃
根据我自己的使用经验,以及一些社区分享的案例,追问轮次超过两轮,回复率会明显下降。用户的耐心是有限的,如果你的 Agent 在第一轮问了 6 个问题,用户好不容易填完,第二轮又来 4 个,大概率他就不回了。
经验原则:第一轮追问不超过 5 个问题,必填项不超过 3 个。如果信息还不够,宁可用推断性处理,把假设明确写出来,而不是继续追问。踩坑二:问题设计不好,采集到无效信息
"你对这个功能有什么看法?"这种问题,采集回来的答案对你没有任何帮助。
经验原则:好的追问问题有三个特征——具体(有明确的答案范围)、可操作(回答之后你知道下一步怎么做)、对方能回答(不需要对方做额外调研才能回答你)。在 Prompt 里显式要求这三点,生成的问题质量会好很多。
踩坑三:异步场景下的超时处理
如果你的 Agent 是异步发问的(比如发邮件或者发飞书消息等对方回复),要设置超时逻辑:如果 24 小时没有回复,Agent 应该用推断性假设继续,而不是无限等待。
同时,超时之后的推断性处理,要在输出里明确标注"以下假设基于[X],如果实际情况不同,请告知"——这样既不阻塞流程,又保持了透明度。
---
结语:我们给 AI 的任务,有多少是我们自己没想清楚的?
把追问逻辑搞清楚之后,我开始想一个更大的问题。
Claude 之所以要主动追问,是因为任务描述本身是模糊的。但这个模糊是谁造成的?是 AI 的问题,还是我们给任务的方式本身就有问题?
很多时候,我们给 AI 的任务,其实是我们自己都没想清楚的需求。我们把模糊扔给 AI,期待它能变出一个清晰的答案——这本身就是一种不合理的期待。
Claude 的追问机制,某种程度上是在帮我们把这个模糊显式化。它逼着你去想:你到底想要什么?
这个设计背后其实是一个更深的 Agent 原则——好的 Agent 不是让你省思考,而是帮你把思考做得更结构化。
---
把追问逻辑搞清楚之后,我开始想下一个问题:
信息收集完了,Agent 怎么"决策"?它凭什么判断哪条信息更重要、哪个方向值得推进?
下一篇我会拆一个更有意思的案例——AI 在多方博弈场景里的优先级排序机制。如果你做过项目管理或者商务谈判,那篇你应该会有感触。
---
本文由8848AI原创,转载请注明出处。关注8848AI,带你从零开始学AI。#AI教程 #Claude #Agent设计 #Prompt技巧 #工作流自动化 #8848AI #人工智能 #AI实战