长期记忆 (RAG)

AnyLLM 具备基于 RAG (Retrieval-Augmented Generation) 方法的长期记忆功能。简单来说,这是代理“记住”您过去会话内容并在当前工作中使用这些知识的能力。

为什么需要它?

想象一下,您在一个项目上工作了好几天。没有长期记忆,每次新启动都是一个全新的开始。您必须一次又一次地向代理解释上下文。

有了 RAG 功能,代理可以查询其对话存档 (episodes.jsonl),找到类似问题的解决方案,或回忆起您之前商定的重要细节。这使其从一个简单的执行者转变为一个在处理您的项目过程中不断学习的成熟伙伴。

激活方法

此功能默认禁用。您可以通过以下两种方式之一激活它:

1. 通过 anyllm.json (推荐方式):

将一个 rag 对象添加到您的配置文件中,该对象包含两个必需参数:enablemode

{
  "rag": {
    "enable": true,
    "mode": "command" 
  }
}

2. 通过启动标志:

标志优先于配置文件。

  • --rag-command: 在手动模式下启用 RAG。
  • --rag-llm: 在自动模式下启用 RAG。

如果配置文件中存在 rag 对象,但缺少 enablemode 字段,应用程序将显示错误,要求您修复配置。

操作模式

有两种操作模式,专为不同的工作流程和模型能力而设计。

command 模式 (手动搜索)

建议: 非常适合中小型模型 (例如 7B-13B) 以及希望完全控制上下文的用户。

在此模式下,代理不会自动将检索到的信息添加到其提示中。在普通对话中,记忆不会影响令牌消耗。

取而代之的是,您会得到一个强大的命令 /search_history <查询>,它允许您手动在过去的会话中搜索信息。

示例: 您与代理一起工作后,第二天想记起是否创建了一个 User 类。

> /search_history user class
• Searching history for: 'user class'...

Found 1 relevant entries from past sessions:
--------------------------------------------------
Session: 20260203_151023_cfc60b2b (2026-02-03T15:11:50+00:00)
User: 创建一个带有两个参数的 User.php 类
Assistant: TOOL_CALL: write_file({"path":"User.php","content":"..."})
--------------------------------------------------

您看到结果并记起是的,已经创建了这样一个类。现在您可以在下一个提示中使用此信息。

llm 模式 (自动搜索)

建议: 适用于能够处理大上下文而不会在“噪音”中迷失的大型强力模型 (40B+)。

在此模式下,在您的每个提示之前,代理都会自动搜索其记忆。找到的最相关的对话片段将被添加到一个特殊的 <relevant_history> 块中,并包含在其系统提示中。

示例: 在上述示例的会话之后,您开始一个新的对话。

> 我已经创建了一个用户类吗?

// 代理自动在其记忆中找到过去的会话。
// 它理解了问题的含义,但不会盲目相信记忆。
// 它决定检查文件系统以给出准确的答案。

我将检查项目中是否存在 User 类。
🛠  Using tool: search_content
│ Tool Output: Search results for 'class User':
src/Domain/User.php:5:class User

// 只有在核实事实后,代理才会给您答案。
是的,您已经创建了一个 User 类。它位于 `src/Domain/User.php` 文件中。

这个例子完美地展示了高级行为:代理使用记忆来理解意图,但使用工具来验证当前状态

警告: 此模式会显著增加每一步发送给模型的上下文大小。这可能会增加付费 API 的请求成本,并对小型模型的性能产生负面影响,因为它们可能会被额外的信息“搞糊涂”。请谨慎使用。

模式摘要

模式 自动上下文 手动命令 建议
command 中小型模型
llm 大型强力模型