博客

你知道的,为了情境--第二部分:代理人工智能和情境工程的必要性

了解 LLM 如何向代理人工智能发展,从而增加了对上下文工程的需求,以解决 RAG 上下文限制和内存管理问题。

Agent Builder is available now GA. Get started with an Elastic Cloud Trial, and check out the documentation for Agent Builder here.

有了关于 LLM 如何改变信息检索底层过程的(相当广泛的)背景知识,让我们来看看它们是如何改变我们查询数据的方式的。

与数据交互的新方式

生成式人工智能(genAI)和代理式人工智能的工作方式与传统搜索不同。过去,我们开始研究信息的方式是搜索("让我谷歌一下......"),而基因人工智能和代理的发起行动通常是通过在聊天界面输入自然语言。聊天界面是与 LLM 的讨论,LLM 利用其语义理解能力将我们的问题转化为经过提炼的答案,这种经过总结的回答似乎来自一个对各种信息都有广泛了解的神谕。真正的卖点在于,法学硕士能够产生连贯、深思熟虑的句子,将浮现的知识点串联起来--即使不准确或完全是幻觉,也有其真实性

我们习惯于使用的老式搜索栏,可以看作是我们自己作为推理代理时使用的 RAG 引擎。现在,即使是互联网搜索引擎也正在将我们习以为常的 "猎取和啄食 "词条搜索体验转变为人工智能驱动的概述,通过对结果的总结来回答查询,帮助用户避免自己点击和评估单个结果。

生成式人工智能& RAG

生成式人工智能试图利用其对世界的语义理解来解析聊天请求中表达的主观意图,然后利用其推理能力即时创建专家答案。生成式人工智能交互由几个部分组成:首先是用户的输入/询问,聊天会话中之前的对话可用作额外的上下文,然后是指导性提示,告诉 LLM 如何推理以及在构建回复时应遵循哪些程序。提示已从简单的""像五岁小孩一样解释给我听 "类型的指导发展到如何处理请求的完整细分。这些细目通常包括不同的部分,详细描述人工智能的角色/作用、生成前的推理/内部思维过程、客观标准、限制条件、输出格式、受众,以及有助于展示预期结果的示例。

除了用户查询和系统提示外,检索增强生成(RAG)还在所谓的 "上下文窗口 "中提供额外的上下文信息。RAG 是该架构的重要补充;我们用它来告知 LLM 在其对世界的语义理解中缺失的部分。

背景窗口在提供内容、地点和数量方面可能有点挑剔。当然,选择哪种上下文非常重要,但所提供上下文的信噪比以及窗口的长度也很重要。

信息太少

在查询、提示或上下文窗口中提供过少的信息可能会导致幻觉,因为 LLM 无法准确判断正确的语义上下文,从而生成响应。文件块大小的矢量相似性也存在问题--一个简短、简单的问题可能与我们矢量化知识库中丰富、详细的文件在语义上不一致。目前已开发出假设文档嵌入(HyDE)等查询扩展技术,利用 LLM 生成比简短查询更丰富、更具表现力的假设答案。当然,这里的危险在于,假定的文件本身就是一种幻觉,它使法律硕士更加偏离正确的语境。

信息太多

就像我们人类一样,上下文窗口中过多的信息会让法律硕士不知所措,不知道哪些是重要部分。上下文溢出(或 "上下文腐烂")会影响生成式人工智能操作的质量和性能;它会极大地影响 LLM 的 "注意力预算"(其工作记忆),并稀释许多竞争标记的相关性。语境轮换 "的概念还包括这样一个观察结果,即语言学习者往往有一种位置偏差--他们更喜欢语境窗口开头或结尾的内容,而不是中间部分的内容。

分散注意力或相互冲突的信息

上下文窗口越大,就越有可能包含多余或相互冲突的信息,从而分散 LLM 的注意力,使其无法选择和处理正确的上下文。在某种程度上,这就成了一个 "垃圾进/垃圾出 "的问题:只需将一组文档结果倒入上下文窗口,就能为 LLM 提供大量信息供其咀嚼(可能太多),但根据上下文的选择方式,更有可能渗入相互冲突或无关的信息。

智能体 AI

我告诉过你有很多内容要讲,但我们做到了--我们终于开始讨论代理人工智能话题了!代理式人工智能(Agentic AI)是 LLM 聊天界面的一种非常令人兴奋的新用法,它扩展了生成式人工智能(我们可以称之为 "传统 "人工智能吗?)的能力,即根据自身知识和您提供的上下文信息合成回复。随着生成式人工智能变得越来越成熟,我们意识到可以让 LLM 执行一定程度的任务和自动化操作,这些操作最初被归类为乏味的低风险活动,可以很容易地由人工进行检查/验证。在很短的时间内,最初的范围就扩大了:一个 LLM 聊天窗口现在可以成为一个火花,让一个人工智能代理去自主规划、执行、迭代评估和调整其计划,以实现指定的目标。代理可以访问其 LLM 自身的推理、聊天历史和思维记忆(比如说),他们还可以利用特定的工具来实现这一目标。我们现在看到的架构还允许一个顶级代理作为多个 子代理 的协调者,每个 子代理 都有自己的逻辑链、指令集、上下文和工具。

代理是大部分自动化工作流程的切入点:它们是自主的,能够与用户聊天,然后使用 "逻辑 "来决定有哪些工具可以帮助回答用户的问题。与代理相比,工具通常被认为是被动的,是为完成一种任务而构建的。工具可以执行的任务类型是无限的(这确实令人兴奋!),但工具执行的一项主要任务是收集上下文信息,供代理在执行工作流程时考虑。

作为一项技术,代理人工智能仍处于起步阶段,很容易患上法学硕士的注意力缺陷症--很容易忘记要求它做的事情,经常跑去做其他根本不在任务范围内的事情。在表面神奇的背后,LLM 的 "推理 "能力仍然是基于预测序列中下一个最有可能的标记。要使推理(或有朝一日的人工通用智能(AGI))变得可靠和值得信赖,我们需要能够验证,在获得正确、最新的信息时,它们会按照我们所期望的方式进行推理(也许还会给我们提供我们自己可能没有想到的更多信息)。要做到这一点,代理架构需要具备清晰的通信能力(协议),遵守我们赋予它们的工作流程和约束条件(护栏),记住它们在任务中的位置(状态),管理可用的内存空间,以及验证它们的响应是否准确并符合任务标准。

用我能听懂的语言跟我说话

在新的开发领域(尤其是在 LLM 领域),代理与工具之间的通信最初有很多方法,但很快就趋同于模型上下文协议(MCP),将其作为事实上的标准。模型上下文协议的定义其实就在名字里--它是 模型 用来请求和接收 上下文 信息的 协议 。MCP 是 LLM 代理连接外部工具和数据源的通用适配器;它简化了应用程序接口并使之标准化,这样不同的 LLM 框架和工具就能轻松互操作。这就使得 MCP 成为一种支点,它介于协调逻辑和系统提示与发送给工具的操作之间,前者要求代理为实现其目标而自主执行,而后者则要求代理以更孤立的方式执行(至少与启动代理隔离)。

这个生态系统是如此之新,以至于每个扩展方向都像是一个新领域。我们有类似的协议用于代理与代理之间的交互 (Agent2Agent (A2A) natch!),也有其他项目用于改进代理的推理记忆 (ReasoningBank ),为手头的工作选择最佳的 MCP 服务器 (RAG-MCP ),以及使用语义分析 ( 如输入和输出的零点分类和模式检测)作为控制代理操作内容的 Guardrails

您可能已经注意到,这些项目的根本目的都是为了提高返回到代理/人工智能上下文窗口的信息的质量和控制?虽然人工智能代理生态系统将继续发展更好地处理上下文信息(对其进行控制、管理和操作)的能力,但始终需要检索最相关的上下文信息,作为代理的研磨材料。

欢迎使用情境工程!

如果你熟悉生成式人工智能术语,你可能听说过 "提示工程"--在这一点上,它几乎是一门伪科学。提示工程用于找到最佳和最有效的方法,主动描述您希望 LLM 在生成响应时使用的行为。上下文工程"将 "提示工程 "技术从代理侧扩展到 MCP 协议工具侧的可用上下文源和系统,并包括上下文管理、处理和生成等广泛主题:

  • 上下文管理 - 与在长期运行和/或更复杂的代理工作流程中保持状态和上下文效率有关。对任务和工具的调用进行迭代规划、跟踪和协调,以实现代理的目标。由于代理工作的 "注意力预算 "有限,上下文管理主要涉及帮助完善上下文窗口的技术,以捕捉最全面和最重要的上下文信息(精确度与召回率!)。这些技术包括压缩、归纳,以及持续保留先前步骤或工具调用的上下文,以便在工作记忆中为后续步骤中的额外上下文留出空间。

  • 上下文处理 --对从不同来源获取的上下文进行整合、规范化或细化的逻辑步骤,希望这些步骤主要是程序性的,以便代理能够以某种统一的方式对所有上下文进行推理。底层工作是让所有来源(提示、RAG、记忆等)的上下文都能被代理尽可能高效地消耗掉。

  • 上下文生成 --如果上下文处理的目的是让代理可以使用检索到的上下文,那么上下文生成就赋予了代理随意请求和接收附加上下文信息的能力,但同时也有限制条件。

LLM 聊天应用程序的各种历时直接(有时以重叠的方式)映射到上下文工程的这些高级功能:

  • 指令/系统提示--提示是生成式(或代理式)人工智能活动如何引导其思维实现用户目标的支架。提示本身就是一种语境;它们不仅仅是音调指令,还经常包含任务执行逻辑和规则,如 "逐步思考 "或 "深呼吸",然后再做出回应,以验证答案是否完全满足用户的要求。最近的测试表明,标记语言在框定提示的不同部分时非常有效,但也要注意在过于模糊和过于具体之间调整指示;我们希望提供足够的指示,让 LLM 找到正确的上下文,但又不能过于规范,以至于错过意想不到的见解。

  • 短期记忆(状态/历史)--短期记忆主要是用户与 LLM 之间的聊天会话互动。这些信息有助于在现场会议中完善上下文,并可保存起来供今后检索和继续使用。

  • 长时记忆--长时记忆应包含在多个时段都有用的信息。通过 RAG 访问的不仅仅是特定领域的知识库,最近的研究还利用以前的代理/生成式人工智能请求的结果,在当前的代理互动中进行学习和参考。在长期记忆领域,一些最有趣的创新与调整状态的存储和链接方式有关,这样,代理就能从他们离开的地方继续前进。

  • 结构化输出--认知需要花费精力,因此,即使拥有推理能力,LLM(就像人类一样)也希望在思考时花费更少的精力,这一点不足为奇。在没有定义好的应用程序接口或协议的情况下,有一个如何读取工具调用返回数据的地图(模式)是非常有用的。将 "结构化输出 "作为代理框架的一部分,有助于使这些机器与机器之间的交互更快、更可靠,同时减少思维驱动的解析。

  • 可用工具- 工具可以做各种各样的事情,从收集额外信息(如向企业数据存储库或通过在线 API 发出 RAG 查询)到代表代理执行自动操作(如根据代理请求的标准预订酒店房间)。工具也可以是子代理,有自己的代理处理链。

  • 检索增强生成(RAG)--我非常喜欢将 RAG 描述为 "动态知识集成"。如前所述,RAG 是一种提供 LLM 在接受训练时无法获得的额外信息的技术,或者说是重申我们认为对获得正确答案最重要的想法--与我们的主观疑问最相关的想法。

惊人的宇宙力量,微不足道的生活空间!

代理人工智能有许多迷人而令人兴奋的新领域有待探索!我们仍有许多传统的数据检索和处理问题需要解决,但同时也面临着全新的挑战,这些挑战现在才在新的 LLM 时代暴露出来。我们今天要解决的许多紧迫问题都与情境工程有关,即如何在不占用有限工作记忆空间的前提下,为 LLM 提供所需的额外情境信息。

半自主代理可以使用一系列工具(和其他代理),其灵活性为人工智能的实施带来了许多新思路,我们很难想象会有什么不同的方法可以将这些碎片组合在一起。目前的大部分研究都属于上下文工程学领域,主要集中在构建能够处理和跟踪大量上下文的内存管理结构上,这是因为我们真正希望 LLM 能够解决的深度思考问题具有更高的复杂性和更长的多阶段思考步骤,在这些问题中,记忆极为重要。

该领域正在进行的许多实验都是为了找到最佳的任务管理和工具配置,以满足代理的需求。代理推理链中的每次工具调用都会产生累积成本,既包括执行工具功能所需的计算量,也包括对有限上下文窗口的影响。为 LLM 代理管理上下文的一些最新技术造成了意想不到的连锁效应,如 "上下文崩溃",在这种情况下,压缩/汇总长期运行任务的累积上下文会造成过多损失。理想的结果是工具能够返回简洁准确的上下文,而不会让无关信息渗入宝贵的上下文窗口内存空间。

太多/太多种可能性

我们希望职责分离,并能灵活地重复使用工具/组件,因此创建专用的代理工具来连接特定的数据源是完全合理的--每种工具都可以专门查询一种类型的存储库、一种类型的数据流,甚至一种使用案例。但要注意:为了节省时间/金钱/证明某些事情是可行的,我们会受到强烈的诱惑,把 LLM 用作联盟工具......尽量不要这样做,我们以前走过这条路!联合查询就像一个 "通用翻译器",它将输入的查询转换成远程存储库能理解的语法,然后以某种方式将多个来源的结果合理化为一个连贯的响应。联盟作为一种技术,在小范围内效果 还可以,但在大范围内,特别是当数据是多模态的时候,联盟试图弥合的差距就太大了。

在代理世界中,代理将是联合器,而工具(通过 MCP)将是人工定义的与不同资源的连接。使用专用工具跨未连接的数据源进行访问,看似是在每次查询的基础上动态联合不同数据流的强大新方法,但使用工具向多个数据源提出相同的问题,最终可能会造成更多问题,而不是解决问题。每个数据源下面都可能有不同类型的存储库,每个存储库都有自己的数据检索、排序和安全功能。当然,资源库之间的差异或 "阻抗不匹配 "会增加处理负荷。它们还可能引入相互冲突的信息或信号,看似无关紧要的评分失准可能会严重影响对返回上下文的重视程度,并最终影响生成回复的相关性。

计算机也很难进行上下文切换

当你派出一名特工执行任务时,他们的首要任务往往是找到其可以访问的所有相关数据。就像人类一样,如果代理连接的每个数据源都给出了不同的分类回复,那么从检索到的内容中提取显著的上下文信息就会产生认知负荷(尽管不是完全相同的类型)。这需要时间/计算,而在代理逻辑链中,每一点都是累加的。由此得出的结论是,就像正在讨论的MCP 一样,大多数代理工具的行为应该更像应用程序接口(API)--具有已知输入和输出的孤立函数,经过调整以支持不同类型代理的需求。哎呀,我们甚至意识到,语言学硕士需要上下文语境--他们在连接语义点方面做得更好,尤其是在将自然语言翻译成结构化语法这样的任务中,当他们有模式可参考时(确实是 RTFM!)。

第 7 局

现在,我们已经介绍了LLM 对数据检索和查询的影响,以及聊天窗口如何逐渐成为人工智能代理体验。让我们把这两个主题放在一起,看看如何利用新式搜索和检索功能来改进上下文工程的结果。进入第三部分:混合搜索在情境工程中的威力

相关内容

如何使用 Mastra 和 Elasticsearch 构建代理式 AI 应用程序

Enrico Zimuel

使用 TypeScript 构建 Elasticsearch MCP 服务器

Jeffrey Rengifo

shell 工具并非上下文工程的灵丹妙药

Leonie Monigatti

使用 Elasticsearch 推理 API 以及 Hugging Face 模型

Jeffrey Rengifo

适用 Elasticsearch 的 Gemini CLI 扩展及工具和技能

Walter Rafelsberger