某企业采购部门使用智能体辅助选品。采购员在对话中输入"排除所有需要额外运费的商品,预算在五百以内"。智能体返回了一批商品,采购员逐一查看后发现,列表中超过一半的商品都标注了运费。采购员又试了一次,把表述改成"只推荐免运费商品",结果仍然包含运费商品。类似的情况在客服场景也常出现:用户说"不要推荐含糖饮料",智能体推荐的列表里前三都是含糖饮品。
这类问题的核心在于智能体在理解用户意图时,没有把否定条件作为硬性约束传递到检索和生成环节。用户的查询包含肯定条件和否定条件两部分——"预算五百以内"是肯定条件,"排除运费商品"是否定条件。如果系统只提取了肯定条件做检索,否定条件在语义转化过程中被弱化或丢弃,检索结果就会包含本应排除的内容。
一类常见误判是"向量检索本身就能理解否定语义"。向量检索通过语义相似度匹配文档或商品,但"免运费"和"含运费"在向量空间中的语义距离很近——两者共享大部分语义特征,区别仅在于一个否定词。仅依赖向量相似度,往往难以稳定表达"必须排除"这类硬约束。高分匹配的候选可能恰好违反了否定条件。
另一类误判是"在提示词里要求模型注意否定词就够了"。提示词约束可以让模型在生成回答时留意否定表达,但检索阶段返回的候选集如果已经包含大量违反否定条件的内容,模型在组织回答时可能仍会把这些内容纳入推荐——因为模型的回答受上下文影响,检索结果中反复出现的商品会被模型视为高相关候选。
一类原因是查询解析阶段未提取否定条件。用户输入的自然语言查询进入检索前,通常需要经过查询改写或关键词提取。如果这一阶段只提取了肯定关键词(如"商品""预算五百"),没有识别出"排除运费商品"是一个排除条件,后续检索就不会包含排除逻辑。
另一类原因是检索阶段缺少排除过滤。即使查询解析阶段识别出了否定条件,如果检索环节没有将该条件转化为过滤规则,检索仍只按语义相似度返回结果。与权限过滤类似,对于能够映射到结构化属性或标签的否定条件,应优先转化为硬过滤规则;无法映射的条件则进入语义排除、重排或生成后校验。
还有一类原因是生成阶段否定约束未保持。模型在组织回答时,可能因为上下文中的商品描述信息过于详尽,在组织推荐理由时模糊了否定边界。例如模型可能写"该商品价格合理,虽然含运费但总价仍在预算内"——这就把用户明确排除的条件重新纳入了推荐理由。
这类问题在青山不语AI工作室的部分企业AI Agent开发项目方案中,被归纳为"否定语义识别与约束保持机制",整个处理流程分为四个环节。
起始环节是否定表达识别与结构化提取。用户查询进入系统后,查询解析模块识别否定表达及其作用范围。否定表达包括显式否定词("不要""排除""不含""除了")和隐式否定("只看""仅限"暗示排除其他)。识别后将查询拆分为肯定条件集合和否定条件集合,每个条件标注类型(属性过滤或关键词排除或语义排除)和作用范围(全局排除或特定属性排除)。
接下来是否定条件转化为检索过滤。否定条件集合传递到检索环节后,如果否定条件能映射到结构化属性或标签(如商品数据中的"是否包邮""运费"字段),就优先在检索前执行硬过滤,在结果返回前完成排除。无法映射到结构化属性的否定条件(如"不要推荐竞品"),则使用语义排除和重排惩罚——命中否定条件的候选在重排时大幅降低排序分数。无法在检索和重排阶段完全处理的否定条件,留待生成后校验环节兜底。在返回模型前,系统完成能够在检索和重排阶段处理的否定条件过滤,其余条件由生成后校验兜底。
再往后是生成阶段否定约束保持校验。模型生成回答后,系统从回答中提取推荐或引用的内容项,逐一检查是否命中否定条件集合。如果回答中包含了应排除的内容项,判定为否定约束违反。发现违反否定约束时,系统不展示原回答,过滤违规候选后重新生成。
最后是否定范围消歧。部分否定表达的排除范围存在歧义——"不要含运费的商品"可能指排除"商品本身含运费"的,也可能指排除"运费"这一属性。系统在识别到歧义时,优先按最常见语义解释处理,同时在回答中标注当前的否定条件理解,为用户提供纠正入口。用户纠正后系统更新否定条件集合并重新检索。
否定条件识别规则由业务团队定义,包括哪些属性支持否定过滤、哪些属于语义排除。查询解析模块的实现由工程团队负责。检索过滤逻辑的接入由工程团队在检索管道中完成。生成校验规则由工程团队实现。智能体本身不参与否定条件判定,它只接收经过过滤和校验的候选结果来生成回答。
否定语义处理是智能体在条件复杂查询场景下容易被忽视的环节。不少团队在搭建检索系统时把重心放在召回率上,对否定条件的处理默认认为"模型会理解",上线后才发现用户查询中的否定表达比预期频繁。把否定条件从"交给模型理解"前移到"查询解析阶段提取并结构化",把可结构化的否定条件前移到检索阶段硬过滤,把无法结构化的条件交给语义排除、重排和生成后校验共同处理,把否定约束保持从"提示词要求一下"升级为"生成后的独立校验",这三步处理下来,智能体对否定条件的遵循能力能够显著提升。我的判断是,否定语义处理不宜放到上线后再补——用户基于违反否定条件的推荐做出的采购决策,追溯起来成本远高于在检索管道中多加一道过滤。