J'Blog

9 课 · 进阶

语义检索

基于 Chroma 向量库,与 Workspace 知识库分离。用自然语言描述你想查的内容。 非管理员每人每天可检索 5 次(消耗站点 AI 配额)。

记忆与检索

原文:Hello-Agents · 第八章 记忆与检索 · 在线阅读

一句话

为HelloAgents框架增加记忆系统和检索增强生成(RAG)系统,使智能体具备记住交互历史和从外部知识库检索信息的能力。

什么时候翻这页

  • 当智能体需要记住之前的对话内容,实现连续对话能力
  • 当智能体需要从历史经验中学习,改进自身表现
  • 当智能体需要获取最新或专业领域知识,弥补内置知识局限
  • 当需要构建具有个性化服务能力的智能应用
  • 当需要处理大量文档并实现智能问答功能

核心概念

记忆系统 (Memory System)

模仿人类记忆的多层次认知系统,分为四种类型:

  1. 工作记忆 (Working Memory):存储当前对话的临时信息,容量有限,TTL自动清理
  2. 情景记忆 (Episodic Memory):存储具体交互事件和经历,支持时间序列检索
  3. 语义记忆 (Semantic Memory):存储抽象知识、概念和规则,形成知识体系
  4. 感知记忆 (Perceptual Memory):处理图像、音频等多模态信息,支持跨模态检索

检索增强生成 (Retrieval-Augmented Generation, RAG)

在模型生成回答前,从外部知识库检索相关信息作为上下文,解决LLM知识时效性、专业领域知识不足和事实准确性问题。

高级检索策略

  1. 多查询扩展 (Multi-Query Expansion, MQE):生成语义等价的多样化查询,提高召回率
  2. 假设文档嵌入 (Hypothetical Document Embeddings, HyDE):生成假设答案文档,桥接查询和文档的语义鸿沟

怎么做

记忆系统实现

  1. 架构设计:采用四层架构

    • 基础设施层:MemoryManager、MemoryItem、MemoryConfig、BaseMemory
    • 记忆类型层:WorkingMemory、EpisodicMemory、SemanticMemory、PerceptualMemory
    • 存储后端层:QdrantVectorStore、Neo4jGraphStore、SQLiteDocumentStore
    • 嵌入服务层:DashScopeEmbedding、LocalTransformerEmbedding、TFIDFEmbedding
  2. 记忆操作

    • 添加记忆:支持四种类型,设置重要度(0.0-1.0)
    • 搜索记忆:混合检索策略,支持按类型筛选
    • 遗忘记忆:基于重要性、时间、容量三种策略
    • 整合记忆:将短期记忆转化为长期记忆

RAG系统实现

  1. 文档处理

    • 使用MarkItDown统一转换各种格式为Markdown
    • 基于Markdown结构的智能分块策略
    • 批量编码和向量化存储
  2. 检索策略

    • 基础检索:向量相似度搜索
    • 扩展检索:MQE + HyDE,提高召回率和精度
    • 上下文构建:智能片段合并与截断

智能文档问答助手构建

结合MemoryTool和RAGTool,实现:

  • 智能文档处理与索引
  • 高级检索问答
  • 多层次记忆管理
  • 个性化学习支持

命令 / 代码速查

安装HelloAgents框架

# 安装指定版本
pip install "hello-agents[all]==0.2.0"
python -m spacy download zh_core_web_sm
python -m spacy download en_core_web_sm

配置环境变量

# Qdrant 向量数据库配置
QDRANT_URL=https://your-cluster.qdrant.tech:6333
QDRANT_API_KEY=your_qdrant_api_key_here
QDRANT_COLLECTION=hello_agents_vectors

# Neo4j 图数据库配置
NEO4J_URI=neo4j+s://your-instance.databases.neo4j.io
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=your_neo4j_password_here

# 嵌入(Embedding)配置
EMBED_MODEL_TYPE=dashscope
EMBED_MODEL_NAME=
EMBED_API_KEY=

创建具有记忆能力的Agent

from hello_agents import SimpleAgent, HelloAgentsLLM, ToolRegistry
from hello_agents.tools import MemoryTool, RAGTool

# 创建LLM实例
llm = HelloAgentsLLM()

# 创建Agent
agent = SimpleAgent(
    name="智能助手",
    llm=llm,
    system_prompt="你是一个有记忆和知识检索能力的AI助手"
)

# 创建工具注册表
tool_registry = ToolRegistry()

# 添加记忆工具
memory_tool = MemoryTool(user_id="user123")
tool_registry.register_tool(memory_tool)

# 添加RAG工具
rag_tool = RAGTool(knowledge_base_path="./knowledge_base")
tool_registry.register_tool(rag_tool)

# 为Agent配置工具
agent.tool_registry = tool_registry

使用MemoryTool

# 添加记忆
memory_tool.execute("add", 
    content="用户是一名Python开发者,专注于机器学习",
    memory_type="semantic",
    importance=0.8
)

# 搜索记忆
memory_tool.execute("search", 
    query="Python开发",
    limit=5,
    memory_types=["semantic", "episodic"]
)

# 遗忘记忆
memory_tool.execute("forget",
    strategy="importance_based",
    threshold=0.2
)

# 整合记忆
memory_tool.execute("consolidate",
    from_type="working",
    to_type="episodic",
    importance_threshold=0.7
)

使用RAGTool

# 添加文档
rag_tool.execute("add_document",
    file_path="./document.pdf",
    chunk_size=1000,
    chunk_overlap=200
)

# 高级检索问答
rag_tool.execute("ask",
    question="什么是大语言模型?",
    limit=5,
    enable_advanced_search=True,
    enable_mqe=True,
    enable_hyde=True
)

与 Python / Claude Code 手册的联系

  • Python手册:本章大量使用Python实现记忆系统和RAG系统,包括类的设计、接口定义、数据处理等
  • Claude Code手册:使用Claude Code进行LLM调用、提示词设计,特别是在MQE和HyDE策略中生成多样化查询和假设文档

初学者易错点

  1. 记忆类型混淆:不清楚何时使用哪种记忆类型,导致数据存储不当

    • 工作记忆:临时信息,会话结束后自动清理
    • 情景记忆:具体事件,需要长期保存
    • 语义记忆:抽象知识,用于推理和决策
    • 感知记忆:多模态数据,如图像、音频
  2. RAG检索策略选择不当:盲目使用高级检索策略导致性能下降

    • 简单查询:基础检索即可
    • 专业领域查询:建议使用MQE+HyDE
    • 性能敏感场景:可仅使用基础检索或MQE
  3. 嵌入模型选择不当:未根据实际场景选择合适的嵌入方案

    • 百炼API:高质量但需要API密钥
    • 本地Transformer:离线部署但资源消耗大
    • TF-IDF:轻量级但语义理解能力弱
  4. 分块参数设置不合理:chunk_size和chunk_overlap设置不当影响检索效果

    • 过小:上下文信息不足
    • 过大:检索精度下降
    • 一般设置:chunk_size=1000, chunk_overlap=200

相关词条

官方原文:https://github.com/datawhalechina/hello-agents/blob/main/docs/chapter8/%E7%AC%AC%E5%85%AB%E7%AB%A0%20%E8%AE%B0%E5%BF%86%E4%B8%8E%E6%A3%80%E7%B4%A2