揭秘检索增强生成 (RAG)

发布: (2025年12月11日 GMT+8 15:47)
5 min read
原文: Dev.to

Source: Dev.to

什么是 RAG?

RAG 是一种通过将大型语言模型(LLM)连接到外部知识库来增强其能力的技术。模型不再仅依赖预训练数据,而是首先 检索 来自特定数据集(例如内部文档、数据库或网站)的相关信息,然后 生成 更准确、上下文感知的响应。

这就像是 LLM 的开卷考试:模型不必记住所有内容,只需要知道在回答前如何查找正确的信息。

为什么需要它?

RAG 的主要动机是克服独立 LLM 的固有局限:

  • 知识截止点: LLM 对训练后出现的事件或数据毫不知情。RAG 提供了获取最新信息的直接渠道。
  • 幻觉(Hallucinations): 当 LLM 不知道答案时,可能会生成听起来合理但实际上错误的回复。RAG 将模型根植于事实数据,大幅降低幻觉。
  • 缺乏专业性: 通用 LLM 可能缺乏对细分领域(如内部政策或技术手册)的深入了解。RAG 让你注入领域专属的专业知识。
  • 可验证性: 使用 RAG 时,你通常可以引用生成答案所依据的来源,为用户提供验证信息的途径。

RAG 是如何工作的?

RAG 过程可以分为两个主要阶段。

步骤 1:索引(设置阶段)

  1. 加载文档: 导入 PDF、Markdown 文件、数据库记录等。
  2. 切块(Chunking): 将每个文档拆分为更小、易于管理的文本块。
  3. 嵌入(Embedding): 使用嵌入模型将每个块转换为数值向量。
  4. 存储: 将块及其向量保存在 向量库 中,以实现快速相似度搜索。

此离线索引仅在源文档发生变化时执行。

步骤 2:检索与生成(实时阶段)

  1. 用户查询: 用户提交问题(例如 “我们的远程工作政策是什么?”)。
  2. 嵌入查询: 使用相同的嵌入模型将查询转换为向量。
  3. 搜索: 向量库返回最相似的文本块。
  4. 增强: 将原始查询与检索到的块合并为一个丰富的提示。
  5. 生成: 将增强后的提示发送给 LLM,生成最终答案。

概念性 Python 示例

# Pre‑configured components:
# - vector_store: database of indexed document chunks
# - embedding_model: model that converts text to vectors
# - llm: large language model for generation

def answer_question_with_rag(query: str) -> str:
    """
    Answers a user's query using the RAG process.
    """
    # 1. Embed the user's query
    query_embedding = embedding_model.embed(query)

    # 2. Retrieve relevant context from the vector store
    relevant_chunks = vector_store.find_similar(query_embedding, top_k=3)

    # 3. Augment the prompt
    context = "\n".join(relevant_chunks)
    augmented_prompt = f"""
Based on the following context, please answer the user's query.
If the context does not contain the answer, say so.

Context:
{context}

Query:
{query}
"""

    # 4. Generate the final answer
    final_answer = llm.generate(augmented_prompt)

    return final_answer

# Example usage
user_query = "What is our policy on remote work?"
response = answer_question_with_rag(user_query)
print(response)

何时使用 RAG

  • 客服聊天机器人: 使用产品手册、FAQ 和历史支持工单来回答问题。
  • 内部知识库: 让员工查询公司政策、技术文档或项目历史。
  • 个性化内容推荐: 根据用户查询和项目目录推荐文章或产品。
  • 教育工具: 构建 “问书” 或 “问讲座” 应用,让学生查询课程材料。

何时 使用 RAG

  • 高度创意或开放式任务: 诗歌、虚构故事或头脑风暴不需要特定文档。
  • 通用知识问答: 像 “法国的首都是什么?” 这类查询可由 LLM 的内部知识高效回答。
  • 极低延迟需求: 检索会增加响应时间;对于毫秒级响应,直接调用 LLM 可能更合适。
  • 简单的指令控制: “打开灯光” 或 “播放音乐” 等任务更适合专用的 NLU 系统,而不是完整的 RAG 流程。

通过了解其优势与局限,你可以利用 RAG 构建更准确、可靠且有价值的 AI 驱动应用。

Back to Blog

相关文章

阅读更多 »