0Pricing
Learn AI with Python · 课时

端到端构建 RAG 问答系统

RetrievalQA 链、自定义提示词、来源标注,以及使用 RAGAS 评估 RAG。

端到端构建 RAG 问答系统 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

什么是 RAG

检索增强生成(Retrieval-Augmented Generation)让 LLM 以您自己的数据为依据。在查询时,系统会从向量存储中检索相关分块,并将它们注入提示词,使模型根据事实回答,而不是凭空猜测。

RAG 流程

每次 RAG 查询都遵循四个步骤:(1) 为问题创建嵌入;(2) 检索相似分块;(3) 将这些分块作为上下文填入提示词;(4) LLM 根据该上下文生成答案。

将存储转换为检索器

使用 as_retriever 将向量存储转换为检索器。search_kwargs 字典控制检索行为,其中最重要的是 k,它表示每个问题要获取的分块数量。

retriever = db.as_retriever(
    search_kwargs={"k": 4}
)

调整搜索参数

search_kwargs 还可以设置分数阈值或 MMR 选项。请从 k=4 开始;如果答案缺少上下文,就提高该值;如果要降低令牌成本和噪声,则降低该值。

retriever = db.as_retriever(
    search_type="similarity_score_threshold",
    search_kwargs={"k": 6, "score_threshold": 0.5}
)

RetrievalQA 链

RetrievalQA 链会将检索和生成连接起来。使用 from_chain_type 构建它,并传入您的 llm 和 retriever。现在,只需一次调用即可根据您的文档回答问题。

from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI

qa = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model="gpt-4o"),
    retriever=retriever
)

链类型:如何组合上下文

chain_type 控制检索到的分块如何进入提示词。"stuff"(默认选项)会将所有分块放入一个提示词中;只要它们能放入上下文窗口,这种方式就简单且效果最好。"map_reduce" 等其他类型可以处理大量较大的分块。

qa = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=retriever
)

提出问题

使用 invoke 运行链,并将问题放在 query 键下。链会执行检索、构建提示词,并返回有依据的答案。

response = qa.invoke({"query": "What is the refund window?"})
print(response["result"])

返回来源文档

设置 return_source_documents=True,即可获取用于生成答案的分块。这样可以添加引用,也让用户能够核实每条事实的来源,这对建立信任至关重要。

qa = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=retriever,
    return_source_documents=True
)
resp = qa.invoke({"query": "Refund window?"})
for d in resp["source_documents"]:
    print(d.metadata)

为什么要评估 RAG

RAG 可能以两种方式失败:检索带来了错误的分块,或者生成过程即使获得了正确分块仍然产生幻觉。您需要使用指标来判断应该修复哪一部分。仅靠人工浏览答案无法扩展到大规模场景。

RAGAS 指标

RAGAS 是一个用于评估 RAG 质量的库。主要指标包括:faithfulness(答案是否得到上下文支持)、answer_relevancy(答案是否回应问题)以及 context_precision(检索到的分块是否相关)。

pip install ragas

from ragas.metrics import faithfulness, answer_relevancy, context_precision

运行评估

构建一个包含问题、生成的答案、检索到的上下文和真实答案的数据集,然后调用 evaluate。这些分数会告诉您应该改进分块方式、检索数量还是提示词。

from ragas import evaluate

result = evaluate(
    dataset,
    metrics=[faithfulness, answer_relevancy, context_precision]
)
print(result)

快速检查

测试您对 RAG 的理解。

回顾:端到端 RAG

您构建了一条完整的 RAG 流水线:使用带有 search_kwargs 的 db.as_retriever,基于您的 llm 和检索器构建 RetrievalQA.from_chain_type 链,并使用 return_source_documents=True 添加引用。您还学会了使用 RAGAS 指标(例如忠实度和上下文精确率)衡量质量。

常见问题解答

「端到端构建 RAG 问答系统」课时是免费的吗?

是的 — 「端到端构建 RAG 问答系统」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「端到端构建 RAG 问答系统」这节课中我会学到什么?

RetrievalQA 链、自定义提示词、来源标注,以及使用 RAGAS 评估 RAG。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「端到端构建 RAG 问答系统」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. LangChain 架构与 LCEL
  2. 文档加载、拆分与嵌入
  3. 向量存储:Chroma 与 FAISS
  4. 端到端构建 RAG 问答系统
← 返回 Learn AI with Python