第 13 期 | 知识库构建:RAG 与长期文档管理

20 分钟阅读 | 更新于:2026-05-07

🎯 学习目标

  • 深入理解 RAG (Retrieval-Augmented Generation,检索增强生成) 的核心原理,及其在克服大型语言模型 (LLM) 知识局限性方面的关键作用。
  • 掌握如何在 Hermes Agent 中配置和使用“上下文文件 (Context Files)”,实现简单直接的知识注入。
  • 学会利用 Hermes Agent 的内置功能,与本地向量数据库 ChromaDB 集成,构建、管理和查询可扩展的长期知识库。
  • 通过实际操作,提升 Hermes Agent 处理特定领域知识、减少“幻觉”并提供更准确、更专业的回答的能力。

📖 核心概念讲解

13.1 RAG (Retrieval-Augmented Generation) 概述

大型语言模型 (LLM) 在生成文本方面表现出色,但它们并非没有局限。它们的主要挑战包括:

  1. 知识截止日期 (Knowledge Cutoff):LLM 的知识仅限于其训练数据的时间点,无法获取最新的信息。
  2. 事实性错误与“幻觉” (Hallucinations):LLM 有时会生成听起来合理但实际上是虚构的信息。
  3. 领域特定知识缺乏 (Lack of Domain-Specific Knowledge):对于特定行业、公司内部或个人专业领域的知识,LLM 往往一无所知。
  4. 可解释性差 (Poor Explainability):LLM 生成的答案通常无法追溯到具体的来源,难以验证其真实性。

为了解决这些问题,RAG (Retrieval-Augmented Generation) 应运而生。RAG 的核心思想是,在 LLM 生成回复之前,首先从一个外部的、可信赖的知识库中检索相关信息,然后将这些检索到的信息作为额外的上下文(context)提供给 LLM,从而增强其生成能力。

RAG 的基本工作流程可以概括为以下几个步骤:

  1. 用户查询 (User Query):用户向 Agent 提出问题或指令。
  2. 检索 (Retrieval):Agent 分析用户查询,并使用该查询从外部知识库中检索最相关的文档片段(chunks)。这个知识库可以是结构化的数据库、非结构化的文档集合,甚至是向量数据库。
  3. 增强 (Augmentation):将检索到的文档片段与原始用户查询结合起来,形成一个包含背景知识的增强型 Prompt。
  4. 生成 (Generation):将增强型 Prompt 发送给 LLM,LLM 基于这些丰富的上下文信息生成最终的响应。

通过 RAG,Hermes Agent 可以:

  • 获取最新信息:只要知识库是实时更新的,Agent 就能访问到最新的数据。
  • 提高事实准确性:通过提供可靠的来源信息,减少 LLM 的“幻觉”。
  • 处理领域特定问题:将企业内部文档、专业手册等纳入知识库,使 Agent 成为领域专家。
  • 增强可解释性:Agent 可以在回答中引用其检索到的源文档,提高透明度。

Hermes Agent 作为一款自进化的 AI 代理,其设计天然支持与外部知识源的集成,以实现强大的 RAG 能力。这不仅包括简单的文件上下文注入,更涵盖了与向量数据库的深度整合,为构建智能化的知识管理系统奠定了基础。

以下是 RAG 流程的一个简化的 Mermaid 流程图:

graph TD
    A[用户查询] --> B{Agent 接收查询};
    B --> C{查询分析};
    C --> D[检索相关文档片段];
    D --> E{外部知识库
(本地文件 / 向量数据库)}; E --> F[检索结果]; F --> G{构建增强型 Prompt}; G --> H[发送至 LLM]; H --> I[LLM 生成响应]; I --> J[Agent 返回最终答案];

13.2 Hermes Agent 的内置 RAG 机制:Context Files 与 Knowledge Base

Hermes Agent 提供了两种主要的内置机制来实现 RAG:context_filesknowledge_base。它们分别适用于不同的场景和需求。

13.2.1 上下文文件 (Context Files):直接注入 Prompt

context_files 是一种轻量级的 RAG 方式,适用于需要将少量、关键信息直接注入到每次 LLM 调用 Prompt 中的场景。当您将文件路径添加到 context_files 配置中时,Hermes Agent 会在每次与 LLM 交互时,将这些文件的内容读取并附加到用户的 Prompt 之前或之后,作为额外的上下文信息。

工作原理:

  1. 文件加载:Hermes Agent 启动或配置更新时,会加载 context_files 中指定的所有文件。
  2. 内容嵌入:每次生成请求时,Agent 会将这些文件的全部内容(或其部分内容,取决于文件大小和 LLM 的上下文窗口限制)直接拼接到用户输入的 Prompt 中。
  3. LLM 处理:LLM 接收到一个包含用户查询和额外文件内容的完整 Prompt,并基于这些信息生成回复。

适用场景:

  • 提供固定的、通用的背景信息,例如公司章程、产品概述、个人简历等。
  • 在特定对话中,需要 LLM 始终记住的少量关键数据。
  • 对实时性要求不高,且文件内容变化不频繁的场景。

优点:

  • 配置简单,无需额外工具或数据库。
  • 对于小型文件,效果直接、可靠。

缺点:

  • 受限于 LLM 的上下文窗口大小。如果文件过大,可能无法完全加载,或者导致 Token 成本过高。
  • 不适用于大规模文档集合,因为每次都需要加载所有内容,效率低下。
  • 不支持高级的语义搜索和检索,只能进行简单的文本拼接。

配置示例:

假设您有一个名为 project_overview.md 的 Markdown 文件,其中包含了您正在进行的项目的重要信息。

<!-- project_overview.md -->
# 项目名称:Hermes Agent 教程系列

## 项目目标
*   为 Hermes Agent 用户提供全面、深入的学习资源。
*   涵盖从基础安装到高级应用的所有核心功能。
*   通过实战演示,帮助用户快速上手并高效利用 Hermes Agent。

## 关键里程碑
*   第一阶段:基础功能与核心概念 (已完成)
*   第二阶段:高级特性与生态集成 (进行中)
*   第三阶段:生产部署与未来展望 (规划中)

## 团队成员
*   技术内容作者:[您的名字/团队]
*   审核与校对:[审核团队]

您可以通过 hermes config set 命令将其配置为上下文文件:

hermes config set context_files project_overview.md

或者直接编辑 config.yaml 文件:

# ~/.config/hermes-agent/config.yaml (部分内容)
# ...
context_files:
  - project_overview.md
# ...

配置完成后,Hermes Agent 在每次与 LLM 交互时都会将 project_overview.md 的内容包含在 Prompt 中。

13.2.2 知识库 (Knowledge Base) 与向量数据库:可扩展的 RAG

对于大规模、多格式、需要高效检索的文档集合,Hermes Agent 提供了与向量数据库集成的 knowledge_base 功能。目前,Hermes Agent 内置支持 ChromaDB,这是一个轻量级的、易于部署的开源向量数据库。

工作原理:

  1. 文档摄入 (Document Ingestion):用户通过 hermes docs add 命令将文档添加到知识库。Hermes Agent 会:
    • 读取文档内容。
    • 将文档分块 (chunking) 为更小的、可管理的片段。
    • 使用嵌入模型 (embedding model) 将每个文本块转换为高维向量(embeddings)。
    • 将这些向量及其原始文本、元数据存储到配置的向量数据库(如 ChromaDB)中。
  2. 检索 (Retrieval):当用户向 Agent 提问时,Agent 会将用户查询也转换为一个向量。然后,它会在向量数据库中进行相似性搜索,找到与查询向量最相似的文档块的向量。
  3. 增强与生成 (Augmentation & Generation):检索到的最相关的文档块被提取出来,作为上下文信息提供给 LLM,LLM 基于这些信息生成最终回复。

适用场景:

  • 管理大量的公司内部文档、技术手册、研究报告、会议纪要等。
  • 需要支持复杂、语义化查询的场景。
  • 需要 Agent 能够访问最新且不断更新的知识。
  • 对准确性和可追溯性有较高要求的应用。

优点:

  • 可扩展性:能够处理海量文档,不受 LLM 上下文窗口限制。
  • 高效检索:向量搜索能够快速找到语义上最相关的文档片段。
  • 支持多种文档格式:通常可以处理 PDF、Markdown、TXT、DOCX 等多种格式。
  • 减少幻觉:通过提供明确的证据来源,大幅降低 LLM 产生幻觉的风险。

缺点:

  • 需要额外的向量数据库组件(尽管 ChromaDB 易于部署)。
  • 文档摄入过程需要计算资源和时间(用于分块和嵌入)。
  • 对嵌入模型和分块策略的选择有一定要求。

配置示例:

首先,您需要安装 ChromaDB 客户端库:

pip install chromadb

然后,配置 Hermes Agent 使用 ChromaDB 作为知识库提供者,并指定知识库的存储路径:

hermes config set knowledge_base_provider chromadb
hermes config set knowledge_base_path ./my_hermes_kb

这里 ./my_hermes_kb 是一个本地目录,ChromaDB 会在此目录中存储其数据。

管理知识库文档:

  • 添加文档
    hermes docs add my_document.pdf
    hermes docs add ./my_project_docs/
    
    您可以添加单个文件,也可以添加整个目录。Hermes Agent 会自动处理文档的加载、分块和嵌入。
  • 列出已添加文档
    hermes docs list
    
    这会显示知识库中已索引的所有文档及其元数据。
  • 移除文档
    hermes docs remove my_document.pdf
    
    移除指定文档及其所有相关的向量嵌入。

Agent 如何使用知识库:

knowledge_base_provider 被配置并有文档被添加后,Hermes Agent 在接收到用户查询时,会智能地判断是否需要从知识库中检索信息。如果判断需要,它会自动执行检索步骤,并将检索到的相关文档片段作为上下文提供给 LLM,从而回答用户问题。您无需在 Prompt 中明确指示 Agent 去“查询知识库”,它会根据其内部逻辑和您的配置自动完成。

通过结合 context_files 的直接性与 knowledge_base 的可扩展性,Hermes Agent 为您构建了一个强大而灵活的知识管理系统,能够有效应对各种信息检索和生成挑战。


💻 实战演示

本节我们将通过两个实际场景,演示如何在 Hermes Agent 中利用 context_filesknowledge_base 来构建和管理知识。

场景一:使用上下文文件 (Context Files) 增强 Agent 对特定信息的感知

在这个场景中,我们将创建一个关于 Hermes Agent 教程系列计划的 Markdown 文件,并将其配置为 context_files,然后验证 Agent 是否能利用这些信息回答问题。

操作步骤:

  1. 创建上下文文件 在您的 Hermes Agent 工作目录(或任何您方便的位置)下,创建一个名为 tutorial_plan.md 的文件,并填充以下内容:

    # Hermes Agent 教程系列计划
    
    ## 第一阶段:基础入门 (已完成)
    *   第 01 期 | 认识 Hermes Agent:架构总览与极速安装
    *   第 02 期 | 模型切换与 Provider 配置实战
    *   第 03 期 | Skills 系统深度剖析:让 Agent 自我进化
    *   第 04 期 | Memory 与用户画像:跨会话的持久记忆
    *   第 05 期 | 消息网关:通过 Telegram/Discord 随时对话
    
    ## 第二阶段:高级特性与生态集成 (进行中)
    *   第 06 期 | MCP 工具生态:连接外部世界的桥梁
    *   第 07 期 | Cron 调度与自动化任务编排
    *   第 08 期 | Context Files 与工作区感知
    *   第 09 期 | 多轮对话与复杂任务分解
    *   第 10 期 | Hermes Agent 的安全模型与权限控制
    *   第 11 期 | 自定义 Persona:打造专属领域 Agent
    *   第 12 期 | Agent 协作:多 Agent 通信与任务委派
    *   第 13 期 | 知识库构建:RAG 与长期文档管理 (本期内容)
    
    ## 第三阶段:生产部署与未来展望 (规划中)
    *   第 18 期 | 生产环境部署:$5 VPS 到 GPU 集群
    *   第 19 期 | 社区生态与 Skill Marketplace 贡献指南
    *   第 20 期 | 未来展望:从个人助手到自治组织
    
  2. 配置 Hermes Agent 使用上下文文件 使用 hermes config set 命令将 tutorial_plan.md 添加到 context_files 列表中。如果之前没有配置过,它会创建一个新的列表。如果已经有其他文件,它会追加。

    hermes config set context_files tutorial_plan.md
    

    (如果您想添加多个文件,可以使用逗号分隔,例如 hermes config set context_files file1.md,file2.txt

  3. 与 Agent 交互并验证 启动 Hermes Agent 并提问关于教程系列计划的问题。

    hermes
    

    用户输入:

    告诉我 Hermes Agent 教程系列的第二阶段包含哪些课程?
    

    预期输出 (示例):

    Agent: Hermes Agent 教程系列的第二阶段(高级特性与生态集成)包含以下课程:
    
    *   第 06 期 | MCP 工具生态:连接外部世界的桥梁
    *   第 07 期 | Cron 调度与自动化任务编排
    *   第 08 期 | Context Files 与工作区感知
    *   第 09 期 | 多轮对话与复杂任务分解
    *   第 10 期 | Hermes Agent 的安全模型与权限控制
    *   第 11 期 | 自定义 Persona:打造专属领域 Agent
    *   第 12 期 | Agent 协作:多 Agent 通信与任务委派
    *   第 13 期 | 知识库构建:RAG 与长期文档管理
    
    本期我们正在学习的就是第 13 期课程!
    

    分析: Agent 能够准确地从 tutorial_plan.md 文件中提取信息并进行回答,这表明 context_files 已成功生效。

场景二:构建与查询 ChromaDB 知识库

本场景将演示如何配置 Hermes Agent 使用 ChromaDB 作为知识库,并添加多个文档进行索引,最后通过 Agent 进行查询。

操作步骤:

  1. 安装 ChromaDB 客户端库 确保您的 Python 环境中安装了 chromadb

    pip install chromadb
    
  2. 配置 Hermes Agent 使用 ChromaDB 知识库 我们将指定 chromadb 作为知识库提供者,并设置一个本地目录来存储 ChromaDB 的数据。

    hermes config set knowledge_base_provider chromadb
    hermes config set knowledge_base_path ./hermes_knowledge_base
    

    这会在当前目录下创建一个名为 hermes_knowledge_base 的文件夹,用于存储 ChromaDB 的数据。

  3. 创建示例文档 创建几个不同主题的文档,模拟一个小型知识库。

    • 创建 doc_hermes_features.md:
      # Hermes Agent 核心特性
      
      Hermes Agent 是 NousResearch 出品的自进化 AI 代理,具备以下核心特性:
      *   **内置学习循环**:从经验中创建和优化 Skill。
      *   **跨会话记忆**:通过 Memory 系统实现持久化记忆和用户画像。
      *   **多模型支持**:通过 OpenRouter 支持 200+ LLM 模型。
      *   **消息网关**:支持 Telegram/Discord,实现随时随地对话。
      *   **MCP 集成**:通过 MCP (Multi-Agent Communication Protocol) 连接外部工具和系统。
      *   **Cron 调度**:支持定时任务和自动化。
      
    • 创建 doc_rag_intro.txt:
      RAG (Retrieval-Augmented Generation) 是一种结合了信息检索和文本生成的技术。它的主要目的是通过从外部知识库中检索相关信息来增强大型语言模型 (LLM) 的生成能力,从而解决 LLM 的知识截止日期、幻觉和领域特定知识缺乏等问题。RAG 的核心流程包括查询、检索、增强和生成。
      
    • 创建 doc_project_setup.md:
      # 项目启动指南
      
      ## 1. 环境准备
      *   安装 Python 3.9+
      *   克隆项目仓库:`git clone https://github.com/your-org/your-project.git`
      *   安装依赖:`pip install -r requirements.txt`
      
      ## 2. 配置数据库
      *   创建 `.env` 文件
      *   设置 `DATABASE_URL=postgresql://user:password@host:port/dbname`
      
      ## 3. 运行应用
      *   启动后端服务:`python app.py`
      *   启动前端:`npm start`
      
  4. 将文档添加到 Hermes Agent 知识库 使用 hermes docs add 命令将这些文档添加到 ChromaDB 知识库中。

    hermes docs add doc_hermes_features.md
    hermes docs add doc_rag_intro.txt
    hermes docs add doc_project_setup.md
    

    您会看到类似“Processing document...”和“Document added successfully.”的输出。

  5. 查看已索引文档 (可选) 您可以列出当前知识库中已索引的文档。

    hermes docs list
    

    预期输出 (示例):

    Indexed Documents:
    - ID: 0123...4567, Path: doc_hermes_features.md, Chunks: 2
    - ID: 89ab...cdef, Path: doc_rag_intro.txt, Chunks: 1
    - ID: fedc...ba98, Path: doc_project_setup.md, Chunks: 3
    

    这表明文档已被成功分块并索引。

  6. 与 Agent 交互并查询知识库 启动 Hermes Agent 并提问跨文档或特定领域的问题。

    hermes
    

    用户输入:

    什么是 RAG?Hermes Agent 有哪些核心特性?
    

    预期输出 (示例):

    Agent: RAG (Retrieval-Augmented Generation) 是一种结合了信息检索和文本生成的技术,旨在通过从外部知识库中检索相关信息来增强大型语言模型 (LLM) 的生成能力,从而解决 LLM 的知识截止日期、幻觉和领域特定知识缺乏等问题。其核心流程包括查询、检索、增强和生成。
    
    Hermes Agent 作为一款自进化 AI 代理,拥有以下核心特性:
    *   内置学习循环:从经验中创建和优化 Skill。
    *   跨会话记忆:通过 Memory 系统实现持久化记忆和用户画像。
    *   多模型支持:通过 OpenRouter 支持 200+ LLM 模型。
    *   消息网关:支持 Telegram/Discord,实现随时随地对话。
    *   MCP 集成:通过 MCP 连接外部工具和系统。
    *   Cron 调度:支持定时任务和自动化。
    

    分析: Agent 成功地从 doc_rag_intro.txtdoc_hermes_features.md 两个文档中检索了相关信息,并进行了整合回答。这展示了 Hermes Agent 结合 ChromaDB 实现 RAG 的强大能力。

    用户输入:

    我该如何配置项目数据库?
    

    预期输出 (示例):

    Agent: 根据项目启动指南,配置数据库的步骤如下:
    1.  创建 `.env` 文件。
    2.  在 `.env` 文件中设置 `DATABASE_URL=postgresql://user:password@host:port/dbname`。
    

    分析: Agent 准确地从 doc_project_setup.md 中检索到了配置数据库的具体步骤。

通过这两个实战演示,您应该已经掌握了 Hermes Agent 两种主要的知识库构建方法,并能根据实际需求选择合适的策略来增强您的 AI 代理。


🔧 涉及的命令与工具

命令/工具 描述 示例
hermes config set 用于设置 Hermes Agent 的各项配置参数,包括 context_filesknowledge_base_providerknowledge_base_path hermes config set context_files my_doc.md
hermes config set knowledge_base_provider chromadb
hermes docs add 将本地文件或目录添加到 Hermes Agent 的知识库中,进行分块、嵌入和索引。 hermes docs add project_notes.txt
hermes docs add ./manuals/
hermes docs list 列出当前知识库中已索引的所有文档。 hermes docs list
hermes docs remove 从知识库中移除指定的文档及其所有相关的嵌入。 hermes docs remove old_policy.pdf
hermes 启动 Hermes Agent 的 CLI 交互界面,与 Agent 进行对话。Agent 会根据配置自动利用知识库进行 RAG。 hermes
pip install chromadb Python 包管理器命令,用于安装 ChromaDB 客户端库,这是 Hermes Agent 知识库功能所依赖的向量数据库。 pip install chromadb
Markdown / TXT / PDF 各种文档格式,Hermes Agent 的 knowledge_base 支持多种文档格式的摄入和索引。
.env 文件 环境变量文件,虽然不是 Hermes Agent 的直接命令,但在配置数据库或其他外部服务时常用,这里作为 doc_project_setup.md 中的一个示例。

📝 本期要点回顾

  • RAG 核心价值:RAG (Retrieval-Augmented Generation) 是解决 LLM 知识截止日期、幻觉和领域特定知识缺乏的关键技术,通过外部知识检索来增强 LLM 的生成能力。
  • Context Files:Hermes Agent 提供了 context_files 配置,允许将少量关键文档内容直接注入到 LLM 的 Prompt 中,适用于固定且不频繁更新的背景信息。
  • Knowledge Base (ChromaDB):对于大规模、多格式、需要高效检索的文档,Hermes Agent 集成了 ChromaDB 作为向量数据库,实现可扩展的长期知识库管理。
  • 知识库管理:通过 hermes docs add 命令可以方便地将文件或目录摄入到 ChromaDB 知识库中,hermes docs listhermes docs remove 则用于管理已索引的文档。
  • 智能检索与生成:配置并填充知识库后,Hermes Agent 会在对话中智能地判断并自动利用这些知识源进行检索,并将相关信息提供给 LLM,从而生成更准确、更专业的回答。

🔗 参考资料