J'Blog

5 课 · RAG

语义检索

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

检索与增强生成

原文:Retrieval 与 RAG

一句话

检索(Retrieval)通过查询时获取相关外部知识,解决了大语言模型(LLM)的有限上下文和静态知识限制,构成了检索增强生成(RAG)的基础。

什么时候翻这页

当你需要构建基于外部知识的问答系统、处理超出模型训练数据范围的问题,或者需要将最新信息整合到LLM回答中时。

核心概念

  • 检索(Retrieval):在查询时获取相关外部知识的过程,解决LLM的有限上下文和静态知识问题
  • 知识库(Knowledge Base):用于检索的文档或结构化数据存储库
  • 检索增强生成(RAG):将检索与生成结合,增强LLM回答的上下文相关性和准确性
  • 2-Step RAG:检索始终在生成前执行的架构,简单且可预测
  • Agentic RAG:由LLM驱动的代理决定何时以及如何检索信息的架构,灵活性高
  • Hybrid RAG:结合两种架构特点并包含验证步骤的混合架构

怎么做

  1. 构建知识库

    • 使用文档加载器(Document Loaders)从外部源(如Google Drive、Slack、Notion等)摄取数据
    • 使用文本分割器(Text Splitters)将大文档分割成适合检索的小块
    • 使用嵌入模型(Embedding Models)将文本转换为向量表示
    • 使用向量存储(Vector Stores)存储和搜索嵌入
  2. 实现RAG架构

    • 2-Step RAG:先检索相关文档,再生成答案
    • Agentic RAG:创建代理,使用工具(如fetch_url)在推理过程中决定何时检索
    • Hybrid RAG:结合查询增强、检索验证和答案验证等中间步骤

命令 / API 速查

# 创建代理工具
@tool
def fetch_url(url: str) -> str:
    """从URL获取文本内容"""
    response = requests.get(url, timeout=10.0)
    response.raise_for_status()
    return response.text

# 创建代理
agent = create_agent(
    model="claude-sonnet-4-6",
    tools=[fetch_url],
    system_prompt="使用fetch_url当需要从网页获取信息时;引用相关片段",
)

与 LangGraph / RAG 手册的联系

LangChain提供高层级的RAG实现框架,而LangGraph更专注于底层编排和代理控制。在LangChain中,RAG主要通过create_agent和工具实现,而在LangGraph中,可以更精细地控制检索和生成的流程。

初学者易错点

  1. 忽略知识库的质量:检索效果很大程度上取决于知识库的质量和相关性
  2. 过度依赖单一检索策略:不同场景可能需要不同的检索架构
  3. 忽略上下文窗口限制:即使使用RAG,也要注意LLM的上下文窗口限制
  4. 不验证检索结果:特别是在Agentic RAG中,需要验证检索到的信息是否足够回答问题

相关词条

  • Document Loaders:从外部源摄取数据并返回标准化Document对象
  • Text Splitters:将大文档分割成可检索的小块
  • Embedding Models:将文本转换为向量表示,使相似含义的文本在向量空间中靠近
  • Vector Stores:专门用于存储和搜索嵌入的数据库
  • Retrievers:根据非结构化查询返回文档的接口
  • Tools:代理用于获取外部知识的函数接口

官方原文:https://docs.langchain.com/oss/python/langchain/retrieval