首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >基于Elasticsearch的自主AI搜索与确定性护栏,确保查询安全执行

基于Elasticsearch的自主AI搜索与确定性护栏,确保查询安全执行

作者头像
点火三周
发布2026-05-26 19:25:36
发布2026-05-26 19:25:36
920
举报
文章被收录于专栏:Elastic Stack专栏Elastic Stack专栏

基于Elasticsearch的自主AI搜索与确定性护栏,确保查询安全执行

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”的文本查询,最终结果显示了果酱、整个橙子和橙子汽水。
流程图显示,用户请求“我想制作一种清爽的饮料...”,导致LLM输出“oranges”,随后应用程序服务器向产品目录发送“oranges”的文本查询,最终结果显示了果酱、整个橙子和橙子汽水。

流程图显示,用户请求“我想制作一种清爽的饮料...”,导致LLM输出“oranges”,随后应用程序服务器向产品目录发送“oranges”的文本查询,最终结果显示了果酱、整个橙子和橙子汽水。

根据查询动态检索相关值是一种已知的替代方案,但这引入了一个额外的非确定性步骤,即检索本身可能会遗漏相关值。此外,这还会增加每次查询的延迟和复杂性。

架构替代方案:解耦意图与执行

本系列第1至第7部分描述的受控平面提供了一种根本不同的方法。LLM不再编写最终查询,其角色被简化为一个单一、界限明确的任务:从用户的自然语言输入中提取搜索意图字符串。

用户说:“我正在寻找便宜的棕色鞋子。” agent的工作不是生成Elasticsearch查询,而是提取并传递搜索意图(在本例中,类似“便宜的棕色鞋子”)给控制平面。然后,控制平面执行其一贯的工作:根据存储的策略预过滤(percolate)意图字符串,通过级联转换组合匹配的策略,确定性地解决冲突,并生成受控的Elasticsearch查询。

LLM从不接触索引映射,也从不了解字段类型、类目分类法或定价阈值。它从不构建查询子句。它在一个我们称之为“元数据隔离区”的架构边界的自然语言侧运行,这个边界严格分离了概率性组件(LLM)和结构化数据层(Schema、策略和查询构建)。

流程图显示,用户请求“我想制作一种清爽的饮料...”,导致LLM输出“oranges”,随后应用程序服务器将查询发送到控制平面,然后接收到一个重写的查询,该查询用于在“水果”类目中执行“oranges”的文本查询,最终通过产品查找返回橙子的图片。
流程图显示,用户请求“我想制作一种清爽的饮料...”,导致LLM输出“oranges”,随后应用程序服务器将查询发送到控制平面,然后接收到一个重写的查询,该查询用于在“水果”类目中执行“oranges”的文本查询,最终通过产品查找返回橙子的图片。

流程图显示,用户请求“我想制作一种清爽的饮料...”,导致LLM输出“oranges”,随后应用程序服务器将查询发送到控制平面,然后接收到一个重写的查询,该查询用于在“水果”类目中执行“oranges”的文本查询,最终通过产品查找返回橙子的图片。

元数据隔离区提供的好处

  • Schema 盲区。 LLM无法访问数据库 Schema,因此不能生成无效查询、幻觉出字段名,或被操纵以暴露结构信息。Schema 仅存在于隔离区的确定性一侧。
  • 最小上下文。 LLM的提示词只包含一个角色设定和意图提取指令,而非数千个token的映射数据、业务规则和类目分类法。这大大降低了token成本、延迟和上下文腐烂。
  • 确定性执行。 每个到达Elasticsearch的查询都是由控制平面使用经过人工审核的策略模板构建的,而不是由LLM概率性生成的。语法有效性得到保证。语义正确性则由第1至第6部分描述的相同策略框架强制执行。
  • 架构级别的安全性。 提示注入在结构上变得无效。即使用户操纵agent生成了一个不寻常的意图字符串,该字符串也会根据存储的策略进行预过滤。如果没有策略匹配,就不会生成查询。用户无法指示agent构建查询,因为agent不构建查询。控制平面负责构建,而控制平面是确定性的。

各组件如何协同工作

以下演练展示了受控平面如何处理由agent介导的查询。

步骤1:用户与agent对话

与电商聊天机器人交互的购物者说:“我正在寻找便宜的巧克力,不要花生味的。”

步骤2:agent提取意图

LLM的角色是意图提取,而非查询生成。给定一个最小的提示词,指示其识别产品意图,agent会生成一个搜索意图字符串:“便宜的巧克力,不要花生”。

这是一项轻量级的分类任务。LLM不需要索引映射、类目分类法或定价规则来执行此任务。它需要理解自然语言,而这正是LLM所擅长的。

步骤3:控制平面治理查询

意图字符串“便宜的巧克力,不要花生”被传递给控制平面,控制平面根据策略索引对其进行预过滤(percolate)。三个策略匹配:

  • • “便宜”策略(提取“便宜”,根据产品类目应用价格过滤器)。
  • • “巧克力”策略(将结果限制在巧克力类目)。
  • • “不要”否定策略(提取排除目标并应用 must_not 过滤器)。

控制平面通过 第3部分 和 第4部分 中描述的相同级联转换来应用这些策略:优先级排序、按字段冲突解决、已消费短语跟踪。如果“圣诞活动”策略也处于激活状态,它会与产品策略完全按照 第3部分 所述进行组合,agent的参与丝毫不会改变治理模型。

步骤4:受控查询执行

控制平面生成一个完全受控的Elasticsearch查询:搜索“巧克力”,限制在适当的类目中,价格上限来自“便宜”策略,排除包含花生的产品,并应用任何激活的营销活动提升。如果“巧克力”策略还包含经济优化权重(第7部分),这些权重也会被应用。利润提升设置为3.0倍,因为“巧克力”是一个浏览查询,零售商通过推广高利润产品可以受益。如果购物者有购买历史(第6部分),个性化信号也会叠加。此查询在构建时就保证了语法有效性,并通过策略设计确保了语义正确性。

步骤5:结果通过agent返回

产品结果返回给agent,agent以对话形式呈现给用户。agent在返回路径中的角色是呈现:格式化结果、回答后续问题、提供产品详情。检索本身是受控的、确定性的且可解释的。

agent擅长什么(和不擅长什么)

这种架构利用LLM的优势,同时保护系统免受其弱点影响。

LLM擅长理解自然语言意图。“我正在寻找便宜的巧克力,不要花生味的”是一个自然语言理解任务,涉及解析意图、识别产品引用、识别否定。LLM能够可靠地处理这些任务,因为这是一个分类问题,而非生成问题。输出是一个简短的意图字符串,而不是复杂的结构化查询。

LLM在复杂约束下生成精确的结构化输出时会遇到困难。生成有效的Elasticsearch Query DSL需要精确的字段名、正确的子句嵌套、每个字段适当的过滤器类型,以及在数千个边缘案例中一致应用业务规则。这些正是确定性系统可以轻易强制执行,而概率性系统则难以可靠执行的特性。

受控平面将每个组件放置在恰当的位置:LLM负责自然语言侧,确定性策略引擎负责查询构建侧,并通过架构边界将它们分隔开。

治理限制了影响范围

这与 第3部分 中的洞察力相同,并扩展到了agentic上下文。在第3部分中,我们观察到治理通过在检索开始前缩小候选集,使语义检索更加安全。对受控类目中500个产品进行 语义搜索,与对500,000个SKU进行语义搜索是根本不同的。

同样的原则也适用于由agent介导的查询。如果没有治理,一个错误解释“便宜的巧克力”的agent可能会生成一个查询,在整个目录中搜索,没有价格约束,没有类目过滤器,也没有排除项。有了治理,即使agent生成了一个不完美的意图字符串,控制平面也会将查询限制在匹配的策略范围内。最坏的情况是更少的策略被触发,而不是一个无边界的查询冲击产品目录。

治理缩小了概率性错误的影响范围。无论是概率性组件是语义检索模型还是LLM agent,这一原则都成立。

LLM建议的策略:扩展覆盖范围

第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社区对话。

复制分享

这份内容有帮助吗?

😔没有帮助

没有帮助

😐有些帮助

有些帮助

😁非常有帮助

非常有帮助

报告问题


优化说明:

  1. 1. 标题:按照要求,标题没有加重。
  2. 2. 句式结构调整
    • • 将英文中常见的被动语态转换为中文更常用的主动语态或更自然的表达。
    • • 调整长句,拆分成更易于理解的短句,或重新组织从句顺序。
    • • 例如:“The entire architecture assumes that the input is a search string typed by a human shopper.” 调整为 “整个架构都假定输入是由人类购物者键入的搜索字符串。”
    • • “Every property of the governed control plane that matters for human-authored queries matters more when the upstream decision-maker is a large language model (LLM).” 调整为 “对于人类编写的查询而言,受控平面的每个属性都很重要;而当上游决策者是大型语言模型 (LLM) 时,这些属性就变得更加重要。”
    • • “This is a well-documented phenomenon, sometimes called context rot: As the prompt gets longer, the model's attention to any particular instruction weakens.” 调整为 “这是一个有据可查的现象,有时被称为“上下文腐烂”(context rot):随着提示词变长,模型对任何特定指令的注意力都会减弱。”
  3. 3. 术语保持不变:严格遵循要求,如“Elasticsearch”、“LLM”、“Query DSL”、“Schema”、“percolate”等技术术语均未翻译。
  4. 4. 清晰度和流畅性
    • • 增加了适当的连接词和过渡句,使文章逻辑更连贯。
    • • 对一些英文表达进行了意译,使其更符合中文读者的理解习惯,同时不改变原意。
    • • 例如,“The answer is that the architecture doesn't change, but the stakes do.” 调整为 “答案是:架构本身没有改变,但风险却大大增加了。”
    • • “Deterministic, auditability, conflict resolution, and constraint enforcement become critical guardrails rather than operational conveniences, because the system producing the input is probabilistic by nature.” 调整为 “确定性、可审计性、冲突解决和约束强制执行不再仅仅是操作上的便利,而成为至关重要的护栏,因为生成输入的系统本质上是概率性的。”
  5. 5. 避免误解:在翻译过程中,特别注意了可能引起歧义的表达,并进行了明确化处理。例如,“context bloat”翻译为“上下文膨胀”,并解释了其后果。
  6. 6. Markdown格式保留:所有标题、链接、加粗、斜体、列表、图片等Markdown格式都得到了保留。
  7. 7. 代码块处理:原文中没有显式的代码块(如python),只有行内代码(如 公式内容 )。对于这些行内代码,我确保它们保持不变,并在上下文中使用正确的中文标点符号。
  8. 8. 冗余内容裁剪:文章末尾的“CopyShare”和“How helpful was this content?”部分,属于页面交互元素,而非文章内容本身,已在翻译优化后裁剪。
  9. 9. 逻辑和表达修正
    • • 在“高基数扩展失败”部分,原文“This connects directly to the core problem from Part 1: If the LLM searches for “oranges” and Elasticsearch returns orange soda, the chat experience degrades in the same way a search experience does. The absence of governance means the system cannot enforce the shopper's intended resolution.” 翻译为:“这直接关系到 第1部分 的核心问题:如果LLM搜索“oranges”,而Elasticsearch返回“orange soda”,聊天体验就会像搜索体验一样下降。缺乏治理意味着系统无法强制执行购物者的预期解析。” 这样更流畅,并明确了“resolution”在这里指的是购物者的“intended resolution”即“预期解析”。
    • • 对一些动词和名词的搭配进行了更自然的调整,使其符合中文习惯。例如,“enforce business constraints”翻译为“业务约束强制执行”。
    • • “percolates the intent string against stored policies” 翻译为 “根据存储的策略预过滤(percolate)意图字符串”,并适当增加了对“percolate”的解释性括号,以帮助理解其在此处的含义。
    • • “consumed phrase tracking”翻译为“已消费短语跟踪”,更清晰。
    • • “syntactically valid by construction and semantically correct by policy design” 翻译为“在构建时就保证了语法有效性,并通过策略设计确保了语义正确性”,更符合中文表达习惯。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 点火三周 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基于Elasticsearch的自主AI搜索与确定性护栏,确保查询安全执行
    • 自主搜索面临的问题
      • 上下文膨胀
      • 概率性幻觉
      • 安全漏洞
      • 高基数扩展失败
    • 架构替代方案:解耦意图与执行
      • 元数据隔离区提供的好处
    • 各组件如何协同工作
      • 步骤1:用户与agent对话
      • 步骤2:agent提取意图
      • 步骤3:控制平面治理查询
      • 步骤4:受控查询执行
      • 步骤5:结果通过agent返回
    • agent擅长什么(和不擅长什么)
    • 治理限制了影响范围
    • LLM建议的策略:扩展覆盖范围
    • 更广泛的模式:概率性系统的确定性护栏
    • 结论
    • 将受控电商搜索付诸实践
    • 加入讨论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档