询盘 Agent 怎么多轮追问,把模糊需求问成可报价线索?
直接答案:把"一次问答"改成"状态机驱动的槽位补全"。 核心是三步:定义报价所必需的必填槽位(产品、规格、数量、目标市场、交期、联系方式);每轮只追问缺失槽位中最关键的一个,而不是一次抛一堆问题;设置最大轮次与放弃条件,超过就转人工。这样做能把"你们有 XX 吗"这类模糊开场,逐步收敛成销售可直接报价的结构化线索。
一、为什么单轮问答留不住线索
外贸询盘的典型开场极其模糊:"Do you have hydraulic fittings?"——没有规格、没有数量、没有市场。单轮 Agent 的常见处理是回一段产品介绍,然后……就没有然后了。
问题出在流程设计:它把"回答"当成了终点,而真正的终点是"拿到可报价的字段"。
| 设计方式 | 结果 |
|---|---|
| 单轮问答 | 客户问一句,Agent 答一段,线索流失 |
| 一次问全 | 客户被问烦,中途离开 |
| 槽位补全 + 逐轮追问 | 线索逐步成型,销售可接手 |
二、架构:四层的槽位补全状态机
| 层 | 职责 | 关键设计 |
|---|---|---|
| 意图识别 | 区分询价 / 选型咨询 / 售后 / 其他 | 结构化输出,便于路由 |
| 槽位管理 | 维护已填 / 缺失字段 | 会话级状态,支持中断续填 |
| 追问策略 | 从缺失槽位中挑优先级最高的一个 | 一次只问一个 |
| 线索落库 | 写 CRM,标记完整度 | 支持"部分完整"入库 |
必填槽位建议:产品品类 → 规格/型号 → 数量 → 目标市场 → 交期 → 联系方式。
选填槽位:认证要求、包装要求、贸易术语。
其中"联系方式"虽然最重要,但不宜第一轮就问——先给价值,再要联系方式,转化率更高。
三、追问策略:优先级怎么定
追问顺序不是随意的。建议按"信息增益"排序:
1. 产品品类(没有它无法检索知识库)
2. 规格/型号(决定能否报价)
3. 数量(决定价格档位)
4. 目标市场(决定认证与合规要求)
5. 交期(决定可行性)
6. 联系方式(决定能否跟进)
每一轮只问一个最高优先级缺失项,并在提问时给出选项化提示降低回答成本:
不好的问法:请提供详细需求。
更好的问法:你需要的接头是碳钢还是不锈钢?如果不确定,告诉我使用工况也可以。
四、代码骨架
SLOTS = ["product", "spec", "qty", "market", "lead_time", "contact"]
def next_slot(slots):
for s in SLOTS: # 按优先级顺序
if not slots.get(s):
return s
return None
def handle(session, msg):
intent = classify(msg)
if intent != "inquiry":
return route(intent, session, msg)
slots = session.slots or {}
slots.update(extract(msg, SLOTS, only_empty=True))
if session.turns >= session.max_turns: # 超过上限转人工
crm.upsert(session.id, slots, status="partial")
return handoff_to_human(session, slots)
s = next_slot(slots)
if s is None:
crm.upsert(session.id, slots, status="complete")
return quote_prompt(slots)
session.slots = slots
session.turns += 1
return ask_for(s, slots) # 只问一个槽位
三个必须注意的工程点:
幂等:客户可能重复发同一句,only_empty=True 保证不覆盖已填字段。
超时:会话超过 N 分钟无响应,应主动发送一次提醒,再超时则关闭并入库为 partial。
失败回退:抽取失败不要卡死,降级为通用追问。
五、把"回答"做成有依据的回答
Agent 回答产品问题时应走知识库检索,而不是自由发挥:
ctx = kb.search(f"{slots.get('product','')} {slots.get('spec','')}", top_k=5)
answer = compose(ctx, lang=session.lang, cite=True) # 带来源,降低幻觉
带来源有两个好处:客户更信任;出问题时你能定位到是哪条知识错误。
六、上线前必测的场景
· [ ] 一句话只说产品名,能否逐步问全
· [ ] 客户中途换话题(问售后),能否正确路由且保留会话
· [ ] 客户说"就这些,你直接报价",能否识别并转人工
· [ ] 客户输入表情、错别字、混合中英文
· [ ] 达到最大轮次后是否正确降级
· [ ] 线索入库字段是否完整、有无覆盖
测试集建议覆盖 30–50 条真实历史询盘(脱敏后),并记录每条的首轮意图识别准确率。
七、把预期讲清楚
Agent 能提高线索的结构化程度和留存率,但它不改变"客户愿不愿意聊"这件事,也不能保证询盘量增长。同批次内容反复讲同一句结论会造成混淆——所以这里只强调一点:Agent 的价值是把模糊开场收敛成可跟进字段,其余交给销售。
FAQ
Q:最大轮次设多少合适?
实践中 3–5 轮比较平衡。低于 3 轮信息不够,高于 5 轮客户流失明显。
Q:多语言怎么办?
按会话语言组织追问文案,但槽位定义保持统一,便于 CRM 侧统计。
Q:要不要让 Agent 直接报价?
除非有明确价格表且风险可控,否则建议只做"报价引导",最终价格由销售确认。
八、多语言场景的三个设计约束
外贸询盘的语种往往不是单一英语。设计时要注意:
约束一:槽位名统一,追问文案本地化。
槽位定义(product / qty / market 等)在系统内部保持英文统一,便于 CRM 统计;但发给客户的问题必须按会话语言生成,不要出现"请提供 qty"这种中英混排。
约束二:术语表要先建。
同一产品在不同市场的叫法可能不同(如 fitting 与 connector)。建议维护一份中英对照术语表,供抽取与回答共用,避免"客户说的"和"知识库里的"对不上。
约束三:语言检测失败要降级。
检测置信度低时,默认用英语并附一句"如需其他语言请告知",不要猜测。
九、上线后看哪些指标
Agent 上线不是终点。建议跟踪四类指标,并按周复盘:
| 指标 | 定义 | 健康区间参考 |
|---|---|---|
| 首轮意图识别准确率 | 正确识别为询价的比例 | 用 30–50 条测试集衡量,低于 80% 需优化 |
| 平均补全轮次 | 形成完整线索所需的平均追问次数 | 3–5 轮较平衡 |
| 线索完整率 | 入库时必填字段齐全的比例 | 越高越好,低于 50% 说明追问策略有问题 |
| 主动放弃率 | 客户在补全过程中停止回复的比例 | 突然升高通常意味着追问太密或太急 |
四个指标里,"平均补全轮次"和"主动放弃率"要一起看:轮次太少说明信息不足,轮次太多则放弃率会上升。找到两者的平衡点,比单纯追求"问全"更重要。
十、和人工的配合边界
再成熟的 Agent 也会遇到答不了的问题。建议明确三条转人工规则:
· 客户明确要求人工
· 连续两轮抽取失败(说明表述超出知识库覆盖)
· 涉及价格承诺、账期、独家代理等商务条款
转人工时把会话摘要与已填槽位一并传递,避免客户重复陈述——这一点对体验的影响,往往比 Agent 回答得多准更明显。
十一、追问文案怎么写才不让人烦
同样的槽位,换个问法,客户的配合度差别很大。三条经验:
给选项而不是填空。 "需要什么规格"比"碳钢还是不锈钢"难回答得多。能让客户点选的,就不要让他打字。
先给价值再提问。 提第一个问题前,先给一句有用的信息,比如"这个品类常规交期 25 天,如需要加急可以标注"。客户感知到你在提供帮助,才愿意继续回答。
承认可以不知道。 加一句"如果不确定,告诉我使用工况也可以",能显著降低放弃率——很多客户放弃不是因为不想说,而是因为答不上来。
一次只问一个。 一次抛三个问题的结果是客户只答一个,或者干脆不答。
十二、简单场景不必上 Agent
最后提醒一个边界:如果询盘量本身不大(例如每月少于 20 条),未必需要 Agent。此时更好的做法是把官网 FAQ 写清楚、把询盘表单字段设计好,让客户自己填全。
Agent 的价值在"量大且重复"的场景。量不到那个程度,投入产出不划算。
说明:本文为工程实践分享,节点名称均为业务步骤而非固定 API;涉及平台能力时以当前官方文档为准。不构成效果承诺。
