如何为你的AI智能体创建大脑

这篇文章深入探讨了为AI智能体构建有效记忆系统的方法,指出传统RAG方法常因上下文窗口限制和不当的数据处理而失败。作者提出了一种分层记忆架构,区分情景、语义和过程记忆,并强调了精细化分块策略、引入近因效应(recency boost)和置信度门控(confidence gating)对于提升智能体长期记忆和决策能力的关键作用。

每个 AI 智能体都带着同样的缺陷开始。你花费数小时教它你的代码库、你的偏好、你的工作流程。然后上下文窗口满了,它就忘记了一切。

这就是一个随着时间推移变得更智能的智能体和一个停滞不前的智能体之间的区别。我花了几个月为我自己的智能体构建了一个记忆系统,有记忆和无记忆的智能体之间的差距是天壤之别。

大多数 RAG 指南将 80% 的时间花在选择哪种向量数据库和哪种搜索算法最好上,但真正的失败发生在你如何拆分数据、时间推移以及当你的系统没有自信的答案时它会怎么做。

上下文窗口不是大脑

上下文窗口是你的智能体此刻正在使用的临时工作区。智能体真正需要的是回忆上周发生了什么、它们学到了什么模式、你曾说过永远不要再做的事情的能力。

RAG (Retrieval-Augmented Generation,检索增强生成) 是标准答案。外部存储知识,在需要时检索相关片段,并将其注入到提示中。大多数实现都是有缺陷的,因为人们将记忆视为一个单一系统,而它应该是一个分层架构。

三种记忆类型

想想你自己的记忆是如何运作的。你记得昨天会议上发生的事情。你知道 Python 使用缩进来表示作用域。你无需思考就知道如何骑自行车。

Image

AI 智能体需要相同的分离。

情景记忆捕捉发生过的事情:近期对话、用户进行的修正、会话上下文。当你的智能体回忆起上次你要求他们使用 TypeScript 而不是 JavaScript 时,这就是情景检索。

语义记忆存储事实和知识:文档、领域概念、API 参考。这是大多数人首先构建的类型,也是最常被滥用的。将整个文档文件夹扔进向量数据库并称之为“记忆”并不意味着你的 AI 智能体就会理解它。

程序记忆涵盖你的智能体学到的模式和工作流程:如何组织提交消息、在部署前检查哪些文件、你的代码库遵循哪些测试约定。在我的系统中,这些以结构化的 Markdown 文件形式存在,它们与其他所有内容一起被分块并索引。

在存储层面分离你的记忆类型。为每种类型分配专门的文件,这样你的分块就能保持连贯,你的元数据也能保持清晰。当所有内容都按类型组织时,检索器自然会返回更好的结果,因为语义相似的内容会被分块在一起,而不是与不相关的材料交错。

每个人都痴迷的东西

向量数据库和搜索算法的问题主导了每个 RAG 教程。它们很重要,但它们是这条道路上被广泛探索的部分。

对于向量数据库,我使用 ChromaDB。它本地运行,处理我需要的文档,并且开箱即用地使用轻量级模型进行嵌入。处理大型数据库的人可以在规模需要时使用 Qdrant 或 Pinecone。

对于搜索:纯向量检索在精确关键词匹配方面存在盲点。混合搜索(结合向量相似性和 BM25 关键词匹配)以及使用交叉编码器进行重排是有据可查的解决方案,可以提高精度。

在我的系统中,我还没有用到这两种技术,因为强大的分块和元数据设计弥补了大多数遗漏,但它们是值得了解的技术。

然而,即使你选择了完美的数据库,实现了混合搜索,添加了重排器,仍然可能得到糟糕的结果。

分块是许多系统出问题的地方

大多数记忆系统并非在检索时失败,而是在分块时失败。如果你的分块是错误的,再好的嵌入模型和数据库也救不了你。

Image

朴素方法是每隔 N 个 token 进行文本拆分并带有重叠。这对于统一的文档是有效的,但对于任何有结构的内容就会失效。

解决方法是首先按语义边界进行分块。对于 Markdown,按标题拆分并将每个部分视为一个单元。对于代码,按函数和类边界拆分。对于对话,按话题转换拆分。

只有在建立语义边界之后,才应该应用 token 上限(512 是一个可靠的默认值),并带有 20% 的重叠以覆盖边界。

我的索引器按标题拆分 Markdown,然后将任何超过 1200 个字符的内容进行子分块,并带有 200 个字符的重叠。每个分块都带有元数据:源文件、节标题、最后更新时间戳。事实证明,这些元数据与内容本身一样重要,因为它支持了下一个关键功能。

时效性问题

标准向量搜索将每个文档视为同等相关,无论新旧。六个月前的记忆与一小时前学到的东西获得相同的权重。

对于智能体记忆来说,这是错误的。近期信息几乎总是更相关的。如果你的智能体昨天学到了一个新的用户偏好,那么它的优先级应该高于上个月旧的、矛盾的偏好。

解决方法是时效性提升:将语义相似度分数乘以一个时间衰减因子。在一周内更新的文档可以获得最高 20% 的相关性提升,并线性衰减。

Image

这是一个简单的改变,但它对我来说改变了一切。

置信度门控:知道自己何时不懂

当检索器的最佳结果分数低于置信度阈值时,系统应该承认不确定性,而不是提供一个平庸的匹配结果并假装它相关。

在我的实现中,低置信度查询会回退到一个核心上下文文档:一个浓缩了智能体所知一切内容的索引。这可以防止因错误检索而产生的幻觉,同时仍然为智能体提供一些可供其使用的内容。

如果没有置信度门控,你的智能体将自信地引用错误的记忆,因为它是一个数据库中“最相似”的结果,而实际上没有任何内容足够相似。

构建它,然后让它消失

最好的记忆系统是你的智能体在你不经意间使用的系统。

底层架构可以很简单。从一个单一集合和一个语义分块器开始。当关键词遗漏让你感到沮丧时,添加混合搜索。当精度很重要时,添加重排器。每个添加都应该作为解决问题的方案来构建。你不想为了过度设计而过度设计。

这就是你构建大脑的方式。

  • 原文链接: x.com/defiminty/status/2...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
defiminty
defiminty
江湖只有他的大名,没有他的介绍。