Elasticsearch新手?欢迎参加我们的 Elasticsearch入门网络研讨会。您也可以立即开始 免费云试用 或在您的 本地机器 上试用 Elastic。
本系列的 第1至第7部分 描述了一个用于 电商 搜索的受控平面。用户输入查询后,该控制平面会在实际查询产品目录之前,完成意图分类、业务约束强制执行、策略冲突解决以及路由到适当的检索策略等一系列操作。整个架构都假定输入是由人类购物者键入的搜索字符串。
本系列最后一篇文章将探讨:当输入来自AI agent时,会有什么不同?
答案是:架构本身没有改变,但风险却大大增加了。对于人类编写的查询而言,受控平面的每个属性都很重要;而当上游决策者是 大型语言模型 (LLM) 时,这些属性就变得更加重要。确定性、可审计性、冲突解决和约束强制执行不再仅仅是操作上的便利,而成为至关重要的护栏,因为生成输入的系统本质上是概率性的。
AI驱动搜索最常见的方法是直接了当的:将数据库 Schema 提供给LLM,在提示词中提供业务规则,然后让agent直接生成查询。
对于一个电商聊天机器人来说,这意味着需要将 Elasticsearch 索引映射、字段类型、类目分类法、定价逻辑和业务约束注入到agent的上下文窗口中,然后要求LLM将自然语言翻译成有效的Elasticsearch Query DSL。LLM在此过程中扮演了查询编写者的角色。
这种方法在演示中效果不错,但在生产环境中却因以下四个原因而失败。
企业级电商索引映射并非简单的文档。字段定义、嵌套对象、多字段配置和分析器设置等内容,在添加任何业务逻辑之前就可能达到数千个token。除了映射之外,agent还需要类目分类法(在企业级电商中可能包含数万个值)、定价规则、品牌层级、资格约束和营销活动逻辑。
其结果是,上下文窗口被结构化元数据而非用户的实际意图所主导。这不仅增加了延迟和token成本,还随着上下文的增长而削弱了LLM遵循指令的能力。这是一个有据可查的现象,有时被称为“上下文腐烂”(context rot):随着提示词变长,模型对任何特定指令的注意力都会减弱。
LLM根据其训练数据和提供的上下文中的模式生成查询。当被要求生成Elasticsearch Query DSL时,模型可能会出现以下问题:幻觉出不存在的字段名、构建语法无效的查询子句、将错误的过滤器类型应用于不匹配的字段类型,或者生成语法有效但语义错误、返回与用户意图不符结果的查询。
Google Cloud的 BIRD Text-to-SQL 基准测试 展示了这种方法的上限。Google最先进的单一模型结果达到了70%到80%的准确率,这意味着近四分之一生成的查询是错误的。这还是针对SQL而言,SQL比Elasticsearch Query DSL标准化得多。在真实的生产环境中,面对复杂的映射和特定业务语义,LLM生成的Elasticsearch查询的错误率可能会更高。
对于一个营收关键的电商系统来说,四分之一的查询错误率不是一个可以通过迭代解决的调优问题,而是这种方法固有的架构限制。
当LLM能够访问数据库 Schema 并充当查询编写者时,系统就容易受到间接提示注入的攻击。与电商聊天机器人交互的用户可以精心设计输入,诱导agent生成意想不到的查询。
这并非理论风险。提示注入 是部署LLM系统中研究最活跃的攻击面之一。根本问题在于,当agent编写查询时,用户意图与查询执行之间没有结构性边界。LLM同时解释用户请求并构建数据库操作。对前者的任何操纵都会直接影响后者。
某些电商字段具有极高的基数。一个产品目录可能包含17,000个类目值、数千个品牌名称和数百种属性组合。标准的 agentic 工作流 需要将这些值注入到上下文中,以便LLM在构建查询时能够选择正确的值。
这造成了一个不可能的权衡:要么注入所有可能的值(消耗巨大的上下文并降低性能),要么注入一个子集(并接受agent无法引用该子集之外的值),或者退回到不受控的搜索。这直接关系到 第1部分 的核心问题:如果LLM搜索“oranges”,而Elasticsearch返回“orange soda”,聊天体验就会像搜索体验一样下降。缺乏治理意味着系统无法强制执行购物者的预期解析。

流程图显示,用户请求“我想制作一种清爽的饮料...”,导致LLM输出“oranges”,随后应用程序服务器向产品目录发送“oranges”的文本查询,最终结果显示了果酱、整个橙子和橙子汽水。
根据查询动态检索相关值是一种已知的替代方案,但这引入了一个额外的非确定性步骤,即检索本身可能会遗漏相关值。此外,这还会增加每次查询的延迟和复杂性。
本系列第1至第7部分描述的受控平面提供了一种根本不同的方法。LLM不再编写最终查询,其角色被简化为一个单一、界限明确的任务:从用户的自然语言输入中提取搜索意图字符串。
用户说:“我正在寻找便宜的棕色鞋子。” agent的工作不是生成Elasticsearch查询,而是提取并传递搜索意图(在本例中,类似“便宜的棕色鞋子”)给控制平面。然后,控制平面执行其一贯的工作:根据存储的策略预过滤(percolate)意图字符串,通过级联转换组合匹配的策略,确定性地解决冲突,并生成受控的Elasticsearch查询。
LLM从不接触索引映射,也从不了解字段类型、类目分类法或定价阈值。它从不构建查询子句。它在一个我们称之为“元数据隔离区”的架构边界的自然语言侧运行,这个边界严格分离了概率性组件(LLM)和结构化数据层(Schema、策略和查询构建)。

流程图显示,用户请求“我想制作一种清爽的饮料...”,导致LLM输出“oranges”,随后应用程序服务器将查询发送到控制平面,然后接收到一个重写的查询,该查询用于在“水果”类目中执行“oranges”的文本查询,最终通过产品查找返回橙子的图片。
以下演练展示了受控平面如何处理由agent介导的查询。
与电商聊天机器人交互的购物者说:“我正在寻找便宜的巧克力,不要花生味的。”
LLM的角色是意图提取,而非查询生成。给定一个最小的提示词,指示其识别产品意图,agent会生成一个搜索意图字符串:“便宜的巧克力,不要花生”。
这是一项轻量级的分类任务。LLM不需要索引映射、类目分类法或定价规则来执行此任务。它需要理解自然语言,而这正是LLM所擅长的。
意图字符串“便宜的巧克力,不要花生”被传递给控制平面,控制平面根据策略索引对其进行预过滤(percolate)。三个策略匹配:
must_not 过滤器)。控制平面通过 第3部分 和 第4部分 中描述的相同级联转换来应用这些策略:优先级排序、按字段冲突解决、已消费短语跟踪。如果“圣诞活动”策略也处于激活状态,它会与产品策略完全按照 第3部分 所述进行组合,agent的参与丝毫不会改变治理模型。
控制平面生成一个完全受控的Elasticsearch查询:搜索“巧克力”,限制在适当的类目中,价格上限来自“便宜”策略,排除包含花生的产品,并应用任何激活的营销活动提升。如果“巧克力”策略还包含经济优化权重(第7部分),这些权重也会被应用。利润提升设置为3.0倍,因为“巧克力”是一个浏览查询,零售商通过推广高利润产品可以受益。如果购物者有购买历史(第6部分),个性化信号也会叠加。此查询在构建时就保证了语法有效性,并通过策略设计确保了语义正确性。
产品结果返回给agent,agent以对话形式呈现给用户。agent在返回路径中的角色是呈现:格式化结果、回答后续问题、提供产品详情。检索本身是受控的、确定性的且可解释的。
这种架构利用LLM的优势,同时保护系统免受其弱点影响。
LLM擅长理解自然语言意图。“我正在寻找便宜的巧克力,不要花生味的”是一个自然语言理解任务,涉及解析意图、识别产品引用、识别否定。LLM能够可靠地处理这些任务,因为这是一个分类问题,而非生成问题。输出是一个简短的意图字符串,而不是复杂的结构化查询。
LLM在复杂约束下生成精确的结构化输出时会遇到困难。生成有效的Elasticsearch Query DSL需要精确的字段名、正确的子句嵌套、每个字段适当的过滤器类型,以及在数千个边缘案例中一致应用业务规则。这些正是确定性系统可以轻易强制执行,而概率性系统则难以可靠执行的特性。
受控平面将每个组件放置在恰当的位置:LLM负责自然语言侧,确定性策略引擎负责查询构建侧,并通过架构边界将它们分隔开。
这与 第3部分 中的洞察力相同,并扩展到了agentic上下文。在第3部分中,我们观察到治理通过在检索开始前缩小候选集,使语义检索更加安全。对受控类目中500个产品进行 语义搜索,与对500,000个SKU进行语义搜索是根本不同的。
同样的原则也适用于由agent介导的查询。如果没有治理,一个错误解释“便宜的巧克力”的agent可能会生成一个查询,在整个目录中搜索,没有价格约束,没有类目过滤器,也没有排除项。有了治理,即使agent生成了一个不完美的意图字符串,控制平面也会将查询限制在匹配的策略范围内。最坏的情况是更少的策略被触发,而不是一个无边界的查询冲击产品目录。
治理缩小了概率性错误的影响范围。无论是概率性组件是语义检索模型还是LLM agent,这一原则都成立。
第2部分 介绍了LLM可以建议新策略,这些策略进入与人工编写策略相同的“编写 → 测试 → 推广”流程。在agentic上下文中,这成为一个强大的反馈循环。
LLM可以分析查询日志,识别控制平面没有匹配策略的模式(即那些回退到未经修改的检索的查询),并建议新的策略来填补这些空白。商品经理会审查每个建议,测试它,如果它产生了预期的行为,则进行推广。治理模型确保任何LLM建议的策略在未经人工验证之前都不会进入生产环境。
随着时间的推移,这创造了一个良性循环:控制平面的策略覆盖范围扩大,需要未经修改检索的查询比例缩小,系统变得越来越受控,每个策略都可审计、版本化且可单独回滚。
本系列描述的架构——一个位于概率性输入源和数据检索系统之间的确定性控制平面——并非电商搜索所独有。同样的模式适用于任何AI agent需要与结构化数据交互的场景。
agent查询SQL数据库面临同样的挑战:Schema注入导致的上下文膨胀、幻觉列名、提示注入风险以及高基数值选择。agent与Jira等票务系统、Salesforce等客户关系管理(CRM)系统或GitHub等代码仓库交互时,也会面临类似的问题。在每种情况下,核心的架构问题都是相同的:LLM应该编写查询,还是LLM应该提取意图并将其传递给一个确定性层来编写查询?
受控平面为这个问题提供了一个可重复的答案。策略是数据。意图提取是LLM的工作。查询构建是控制平面的工作。元数据隔离区使它们保持分离。而治理框架(优先级排序、冲突解决、级联转换、可审计性)确保了随着策略数量的增长,确定性层在操作上是可管理的。
本系列中描述的电商搜索治理模式(策略即数据、编写 → 测试 → 推广工作流、级联转换、按字段冲突解决、基于 percolator 的反向匹配以及多层回退)最初是为商品经理编写策略和购物者键入查询的世界设计的。但该架构能够实现的功能远不止其最初的用例。
当输入源是AI agent而非人类购物者时,受控平面就成为概率性系统与生产数据存储之间的关键安全层。它提供了企业系统所需的确定性保证(语法有效性、语义正确性、可审计性和安全性),而这些是LLM本身无法提供的。
确定性控制平面不会取代AI agent。它使AI agent能够安全部署。
本系列中描述的受控平面架构,从“策略即数据”范式到基于 percolator 的查找、个性化、经济优化和agentic隔离区,均由 Elastic Services Engineering 设计和构建。本系列中描述的每一个模式都来自一个经过构建和验证,能够处理企业级产品目录的工作系统。
如果您的团队正在构建AI驱动的搜索体验,并且需要为agent介导的查询提供确定性护栏,或者您希望在Elasticsearch上实现受控、业务可编辑的搜索架构,Elastic专业服务可以加速您的实施。请联系 Elastic专业服务。
对搜索治理、检索策略或电商搜索架构有疑问?欢迎加入更广泛的 Elastic社区对话。
复制分享
😔没有帮助
没有帮助
😐有些帮助
有些帮助
😁非常有帮助
非常有帮助
报告问题
优化说明: