← 返回知识目录

Agent 输入理解与意图识别

用户说“第二条不错,但有点贵,有没有更划算、明天能到的”,系统要完成的远不只是选一个意图标签。它需要找到“第二条”对应的商品,区分预算与偏好,识别配送要求,再把这些信息交给正确的业务流程。任何一个环节猜错,后续检索、推荐和执行都可能围绕错误目标展开。

输入理解的交付物应当是一份可核验、可更新的任务描述:用户要什么、哪些条件已经确定、哪些信息仍然缺失,以及每项判断来自哪里。

1. 先区分表达、意图和执行参数

这三个概念相关,但承担不同职责。

层次 核心问题 示例
输入规范化 这句话具体指什么? “第二条”对应上一轮列表中的商品 A
意图识别 应进入哪个业务流程? 商品推荐,而非售后退款
槽位与约束抽取 执行这个流程需要哪些条件? 参考商品、配送城市、到货日期、预算、尺码

规范化可以修正语序、补全省略、解释术语,却不能随意补充业务事实。“更划算”不天然等于“最低价”,“最近”也必须结合任务日期确定。历史画像中的尺码和颜色偏好只能作为候选依据,不能自动变成本次购买的确定条件。

对于少量、边界清楚的业务,可以在一次模型调用中同时完成三项工作;输入复杂、需要分别评估错误时,再拆成独立步骤。拆分的价值在于职责和诊断清楚,代价是增加延迟以及步骤之间传递错误的机会。

2. 输入规范化需要两次机会

前置处理解决当前上下文能够确定的内容:根据上一轮列表消解指代,用领域词汇表解释缩写,将明确日期、金额和单位转成统一格式。保留原始输入,同时保存规范化结果;发生争议时能够回查,避免一次错误改写覆盖用户原话。

执行中的补充处理解决依赖外部信息的问题。例如“上次推荐的看樱花的地方”需要先检索历史对话,再根据地点、活动、时间等属性消歧;“同价位里最耐用”需要先获得候选产品及可比较指标,才有条件完成判断。

对常见输入问题,可以采用下面的处理顺序:

问题 优先依据 信息不足时
“这个、第二个、刚才那个” 当前界面对象 ID、上一轮输出及顺序 返回候选对象,确认具体指代
缺少主语或动作对象 当前任务、最近有效话题 保留歧义,不自动切换业务对象
行业缩写、内部代号 当前业务域、带权限的词汇表 保留多个解释并澄清
“便宜、专业、划算” 用户给出的比较对象和评价维度 提出可执行解释,注明假设
“最新、现在有货” 有时间戳的实时工具结果 标明无法核实,避免用旧知识补齐

词汇表也需要治理。线上新词先作为待审核候选,记录出现范围和解释证据,再决定是否进入个人、团队或公共词汇表。出现频繁不代表含义正确;某团队的内部代号也不能因为多人提及就跨权限公开。

3. 让结构化输出保留不确定性

下面是一个假想的导购请求。假设上一轮已经确认本次配送城市为杭州、颜色偏好为深色,商品 A 的价格来自工具结果;当前用户明确要求明天送达,但并未给出最高预算。历史画像里的 M 码仍然只是待确认线索。

{
  "intent": "product_recommendation",
  "task_operation": "refine",
  "slots": {
    "reference_product_id": "product_A",
    "category": "裤装",
    "city": "杭州",
    "size": null
  },
  "sub_tasks": ["compare_value", "verify_delivery"],
  "hard_constraints": [
    {"field": "delivery_date", "op": "lte", "value": "2026-09-23", "evidence": "message_12"}
  ],
  "soft_preferences": ["优先低于参考价格", "深色优先"],
  "missing_slots": ["size", "budget_max"],
  "provisional_facts": [
    {"field": "size", "value": "M", "evidence": "profile_7"}
  ],
  "constraint_version": 3
}

日期是按该示例的请求日期及用户时区展开的;生产系统应保存解析依据。missing_slots 表示缺失项,并不等于每一项都必须立刻追问。预算缺失时可以先提供不同价位候选;尺码未确认时可以展示商品,但不能宣称“你的尺码有货”。

硬约束需要有执行校验,例如价格上限、禁止修改的文件、明确排除的品牌。软偏好参与排序;无法满足时说明取舍。用户明确说“不超过 100 元”,条件应当是 price <= 100,不能在转换时错误变成严格小于。

4. 意图分类要服务于业务路由

候选意图至少需要名称、适用边界、反例、所需槽位,以及对应流程。模型只能从当前候选中选择,代码负责校验枚举和输出结构。建议保留两个独立出口:

不要把每个要求都拆成一个意图。“查询上月数据并导出表格”可以是一个导出任务,查询是它的步骤。只有存在能够独立交付的目标时,才需要多个意图,并把依赖关系交给任务规划处理。

相近意图也不必追求语言意义上的绝对互斥。“比较商品”和“推荐商品”天然可能重叠。应先判断它们是否导致不同流程和权限;如果执行方式相同,可以合并流程,用 comparison_targets 等参数表达差异。若行为差异显著,则补充边界例子和路由优先级。

5. 分层识别是可选架构

一种常见实现是按复杂度逐级处理,而不是每次都调用最大模型。

层级 适合处理 必须满足的边界
确定性代码 按钮操作、固定命令、格式合法性、明确状态转换 规则必须结合会话状态,“继续”不能无条件复用旧任务
轻量模型 常见表达、槽位抽取、候选排序 在真实样本上验证成本、延迟与错误率
更强模型 多轮指代、边界冲突、复杂语义关系 仍允许拒识和澄清,升级不等于保证正确

级联适合请求量大、简单输入占比较高的系统。小型领域应用中,一次模型调用加结构校验可能更简单;额外层级也可能因为前层误判而降低质量。

不要把模型输出的 confidence: 0.9 当成真实的 90% 正确率。路由可以综合候选间距、槽位完整性、规则证据、业务后果和历史错误分布;在验证或校准集上确定阈值,再用保留测试集评估。涉及重要写操作时,意图识别正确也不能代替执行期授权。

意图也可以放进执行循环中逐步识别。这适合需要先查历史资料才能确定目标的情况,但会使分类、工具选择和任务状态互相影响。折中做法是先完成粗路由,限制可用业务域;循环获得新证据后再细化意图。在触发不同权限或副作用之前,必须完成明确的路由与条件检查,不能以“还在理解用户”为由提前执行。

6. 意图多时,先解决候选质量

候选集合过大,可以按业务域分层,或先检索相关候选,再进行精细识别。层次路由减少单次分类负担,但上层走错会排除正确分支;检索过滤节省上下文,却会受到召回率限制。因此需要“无合适候选时扩大范围”的出口,分别记录候选召回与最终分类结果。

动态 few-shot 适合放入当前容易混淆的正反例。固定部分保留拒识、澄清和输出协议,动态部分只加入相关案例。示例应来自经过标注的样本,避免把模型自己生成的错误答案循环强化。

向量相似度只能表示表达接近,不能保证意图相同。例如“退款成功了吗”和“帮我退款”很相似,却可能分别对应只读查询和写操作。高风险路由应额外检查动作、否定、时态和权限条件,不能直接凭最近邻执行。

多识别器投票和微调都是后续选项。多个模型可能犯相关错误,简单多数票不会自动提升准确率;微调也需要稳定标签、足够的高质量样本和独立评测。先修复标签重叠、上下文缺失和错误示例,通常更容易看清问题。

7. 多轮对话应更新任务,而非重新猜一遍

用户可能延续、补充、改约束、切换、取消或恢复任务。系统应同时判断业务意图与 task_operation,然后对状态做受控更新。

例如第一轮预算是 5000 元,第二轮“可以加到 8000,但不要太重”,表示预算更新与偏好新增,而非全新推荐。更新需记录新旧值及对应消息,明确冲突时以当前有效指令为准。模型的推测、检索文本中的命令,都不能自行修改用户约束。

复用上一轮意图可以降低调用量,但只适合任务状态明确的低风险路径。取消、否定和话题切换必须有独立检查;在发现方向不对之后再回滚,无法撤销已经发送、支付或删除的操作。

8. 用错误类型组织验证

一份有效测试集需要包含标准表达、口语、歧义指代、缺参、相近标签、域外请求,以及跨轮修改和取消。测试样本应包含识别时实际可见的上下文,不能只测试孤立句子。

检查维度 需要回答的问题
分类 Top1 是否正确?各意图的精确率、召回率和混淆情况如何?
候选召回 正确意图是否进入候选集合?
槽位 值、单位、时间范围是否正确?用户提供的条件是否漏掉?
拒识与澄清 是否误拒、漏拒,追问能否让任务继续?
多轮状态 修改是否覆盖正确字段?取消是否及时阻止执行?
业务效果 是否减少约束违规,同时控制延迟、成本和无效追问?

用户说“不是这个意思”是失败线索,但不一定证明意图分类错了,也可能是检索、排序或表达问题。应回看完整链路,标注具体错误,再把样本加入回归集。

验证还需要隔离数据泄漏:同一段对话的改写句不宜分别放入训练集和测试集,线上反馈进入示例库后,也应保留未被用于调参的新样本。对“推荐还是比较”这类确实允许多种路由的表达,先标注可接受的处理结果,再决定采用单标签还是多标签口径,避免把标签争议误报成模型错误。

没有适用于所有 Agent 的统一准确率门槛。可比较的结果需要交代标签空间、样本分布、测试时间、标注规则和评估口径。只有在同样测试条件下比较改动前后,才能判断复杂机制是否值得保留。