RAG 核心技术极简实战指南

从阿里云 ACP 大模型C2课程 6 节 RAG 课程中提炼的生产级干货,只保留工作中最常用、最有效的技术。


一、RAG 本质(一句话)

先检索相关知识片段,再让大模型基于片段生成答案。 解决大模型"不知道私域知识"和"上下文窗口有限"的矛盾。

用户提问 → 向量检索(top-k相关片段) → 拼接Prompt(问题+片段) → LLM生成答案

二、构建 RAG 的 5 个关键步骤

步骤 核心动作 生产要点
1. 文档解析 PDF/Word → 文本 复杂文档用 DashScopeParse 转为 Markdown,保留表格结构
2. 文本切片 长文档切分 Markdown切片 > 语义切片 > 句子切片 > Token切片
3. 向量化 文本 → 向量 用最新 Embedding 模型(如 text-embedding-v3),效果差距显著
4. 存储索引 向量入库 开发用内存,生产用 DashVector / Milvus
5. 检索生成 召回+LLM回答 召回数量默认 2,复杂场景可扩至 5-10

LlamaIndex 一键搭建:

from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
from llama_index.embeddings.dashscope import DashScopeEmbedding
​
documents = SimpleDirectoryReader('./docs').load_data()
index = VectorStoreIndex.from_documents(documents, embed_model=DashScopeEmbedding(...))
query_engine = index.as_query_engine(similarity_top_k=5)

三、检索侧优化(决定 RAG 上限)

3.1 问题改写(多轮/歧义场景必做)

用户问"他的主管是谁"→ 改写为"张三的主管是谁"。

from llama_index.core.chat_engine import CondenseQuestionChatEngine
chat_engine = CondenseQuestionChatEngine.from_defaults(
    query_engine=query_engine,
    condense_question_prompt=custom_prompt  # 让LLM根据历史改写问题
)

3.2 检索前增强

技术 解决什么问题 使用场景
Query扩写 问题太简略 "找张伟" → "公司所有叫张伟的员工及部门"
HyDE 问题与文档表述差异大 让LLM先写"假答案",再用假答案去检索
标签过滤 需要精确过滤 提取"部门=教研部"标签,先过滤再向量检索
多步分解 复杂问题 "张伟不在找谁" → 先查张伟职责,再查同职责人员

3.3 检索后精排

ReRank 是性价比最高的优化。 先召回 20 个,再用重排序模型(如 gte-rerank)选出最相关的 3-5 个。

node_postprocessors=[
    DashScopeRerankPostprocessor(top_n=3),  # 重排序
    SimilarityPostprocessor(similarity_cutoff=0.2)  # 过滤低相关
]

3.4 上下文质量原则

  • 知识浓度 > 数量:无关信息会淹没关键内容(Lost in the Middle)

  • 结构化文档 > 纯文本:Markdown/表格格式召回准确率远高于 plain text


四、生成侧优化(Prompt 工程)

4.1 提示词六要素框架

写 Prompt 时检查是否包含:

要素 作用 示例
任务目标 明确做什么 "根据参考信息回答用户问题"
上下文 背景信息 召回的文档片段
角色 设定身份 "你是公司客服小蜜"
受众 输出风格 "面向零编程基础的新员工"
输出格式 结构化要求 "只输出 JSON,不要代码块"
样例 少样本学习 给 1-2 个输入输出示例

4.2 高阶技巧

  • 分隔符:用 【】---、XML 标签明确分隔不同部分

  • COT 思维链:复杂推理任务加"请一步步推导"

  • Meta Prompting:让 LLM 帮你优化 Prompt,迭代到满意

  • AI 裁判:训练一个"评分 Prompt",自动判断输出是否达标

4.3 推理模型 vs 通用模型

推理模型(Qwen3/DeepSeek-R1) 通用模型(Qwen-Plus/Max)
优势 逻辑严谨,带思考过程 响应快,成本低
适用 复杂推理、代码、数学、Prompt优化 信息查询、文本生成、简单问答
提示 无需写"逐步思考",保持简洁 可显式引导 COT

最佳实践:推理模型做规划/分析,通用模型做执行。


五、自动化评测(Ragas)

评测决定优化方向,评测先行,再针对性优化。

5.1 核心指标

指标 含义 低分优化方向
Context Recall 正确答案是否被召回 补充知识库 / 换 Embedding / Query 改写
Context Precision 召回内容的相关度排名 加 ReRank / 优化切片
Answer Correctness 最终答案准确度 优化 Prompt / 换 LLM / 调 temperature
Faithfulness 答案是否基于检索内容(无幻觉) 加提示词约束"不知道就说不知道"

5.2 评测集构建原则

  • 问题来源:真实用户提问,非技术人员编造

  • 标准答案:必须由业务专家提供

  • 持续迭代:随业务变化更新评测集


六、大模型参数速查

参数 作用 建议
temperature 控制随机性,越低越确定 事实查询 0.1-0.3,创意任务 0.7-1.0
top_p 控制候选词范围 一般不建议与 temperature 同时调
seed 固定输出 需要可复现结果时设置
max_tokens 输出长度限制 摘要设小,长文设大
presence_penalty 减少重复 输出重复严重时调高

注意:temperature=0 也不能保证输出完全一致(分布式系统引入的微小随机性)。


七、生产工具链

环节 推荐工具
RAG 框架 LlamaIndex / LangChain
Embedding text-embedding-v3(DashScope)
向量数据库 DashVector / Milvus / Qdrant
PDF 解析 DashScopeParse(转 Markdown)
评测框架 Ragas / TruLens / DeepEval
ReRank gte-rerank / qwen3-rerank
可视化搭建 阿里云百炼应用构建(0代码)

八、快速排查清单

遇到回答不准确时,按顺序检查:

  1. 检索问题? → 看 source_nodes,召回了什么内容

  2. Context Recall 低? → 知识库缺内容 / Embedding 不够强 / Query 太简略

  3. Context Precision 低? → 加 ReRank / 优化文档切片

  4. 答案幻觉? → Prompt 加"不知道就说不知道" / 降低 temperature

  5. 格式不对? → Prompt 明确输出格式 + 给少样本示例


九、一句话总结

RAG 的精度瓶颈不在 LLM,而在上下文的"知识浓度"。检索准了,答案就准了一半。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐