第 12 章 · 六年级(初二) 下学期

RAG与知识库应用

从文档解析、向量库、检索重排到完整 RAG 系统与效果评估,做出能读你自己的 PDF / 网页 / 数据库的私人知识库。

12 课时 19 个知识点 4 大易错点 3 档分层作业
一年级上一年级下二年级上二年级下三年级上三年级下四年级上四年级下五年级上五年级下六年级上六年级下七年级上七年级下
01

情景导航

用故事和生活类比打开这学期的大门,先「知其所以然」再学语法。

大模型什么都懂,但它没读过你的课本、你的笔记、你公司的文档。RAG 就是给它配一个「开卷考场」:先从你的资料里检索相关内容,再让它照着回答。这学期小强要做出一个能读 PDF、能查网页、能查数据库的私人知识库——从此 AI 回答问题,句句有出处。

💯生活类比:把新知识挂在旧经验上
📖

RAG = 开卷考试

先翻书(检索)找到那一页,再答题(生成),不许凭记忆瞎编。

检索+生成
✂️

分块 = 切蛋糕

整本教材太大塞不下,切成一口一块才好检索与拼接。

chunk 切分
🧭

向量 = 语义 GPS

意思相近的话,在向量地图上也挨得近;「开心」和「快乐」是邻居。

语义空间
🔄

重排序 = 复赛评委

初赛(召回)先选 20 篇,复赛(精排)再挑最好的 5 篇。

两段筛选
核 心 口 诀文档切块向量化,检索召回再重排;
拼进Prompt作上下文,生成有据不瞎编;
评估指标常回测,知识库越用越聪明!
02

知识探究

RAG与知识库应用 —— 共 12 课时,全部知识点一网打尽。

📖RAG 原理(1 课时)
第1课RAG是什么
🎯 趣味项目:让AI读你的文档📚 教学目标:掌握检索增强生成原理,在项目实战中巩固运用
检索增强生成原理
PythonRAG:开卷考试(流程)
def rag_answer(question, knowledge_base):
    chunks = split(knowledge_base)          # ① 切块
    vecs = [embed(c) for c in chunks]      # ② 向量化
    top = rank_by_similarity(
        question, vecs, top_k=5)           # ③ 检索+重排
    context = "\n".join(top)               # ④ 拼上下文
    prompt = f"根据以下资料回答:\n{context}\n问题:{question}"
    return llm(prompt) + cite(top)          # ⑤ 生成+引用
运 行 结 果
回答:Python 由 Guido 于 1991 年发布……
[来源: python-history.pdf 第2页]
🛠️管线搭建(4 课时)
第2课文档处理
🎯 趣味项目:PDF转文本📚 教学目标:掌握文档加载、解析、分块,在项目实战中巩固运用
文档加载解析分块
PythonRAG 第一步:文档加载与分块
# 任何格式 → 纯文本 → 切成合适大小的块
doc = "Python是一种解释型语言。" * 3        # 假装是一篇 PDF
def chunk(text, size=30, overlap=5):         # 30字一块,重叠5字
    return [text[i:i+size] for i in range(0, len(text), size - overlap)]
chunks = chunk(doc)
print("文档总长:", len(doc), "字 → 分成", len(chunks), "块")
print("块1:", chunks[0][:30] + "…")
print("分块心法:块太大检索不准,块太小丢上下文,重叠防切断语义")
运 行 结 果
文档总长: 57 字 → 分成 5 块
块1: Python是一种解释型语言。Python是一种解释型语言。…
分块心法:块太大检索不准,块太小丢上下文,重叠防切断语义
第3课向量数据库
🎯 趣味项目:语义搜索入门📚 教学目标:掌握Embedding、向量存储,在项目实战中巩固运用
Embedding向量存储
Python向量数据库:语义搜索
# "语义GPS":意思近的句子距离也近
import numpy as np
def cosine(a, b):                    # 余弦相似度
    return np.dot(a, b) / (
        np.linalg.norm(a) * np.linalg.norm(b))

v1 = embed("我今天很开心")
v2 = embed("我今天很高兴")
v3 = embed("明天会下雨")
print("开心 vs 高兴:", round(cosine(v1, v2), 3))
print("开心 vs 下雨:", round(cosine(v1, v3), 3))
运 行 结 果
开心 vs 高兴: 0.94
开心 vs 下雨: 0.31
第4课检索策略
🎯 趣味项目:找得更准📚 教学目标:掌握相似度计算、重排序,在项目实战中巩固运用
相似度计算重排序
Python检索策略:找到最相关的知识
import numpy as np
def cos(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
q  = np.array([0.9, 0.8, 0.1])              # 问题「怎么装 Python」
d1 = np.array([0.95, 0.7, 0.0])             # 文档A:安装教程
d2 = np.array([0.1, 0.2, 0.9])              # 文档B:蟒蛇习性
print("与文档A相似度:%.3f  ← 相关!" % cos(q, d1))
print("与文档B相似度:%.3f  ← 无关" % cos(q, d2))
print("进阶:BM25 关键词打分 + 语义向量召回 → Rerank 重排")
运 行 结 果
与文档A相似度:0.995  ← 相关!
与文档B相似度:0.144  ← 无关
进阶:BM25 关键词打分 + 语义向量召回 → Rerank 重排
第5课完整RAG系统
🎯 趣味项目:私人知识库问答📚 教学目标:掌握RAG完整流程,在项目实战中巩固运用
RAG完整流程
Python完整 RAG 系统:检索增强生成
# RAG = 先查资料再回答,让 AI 「开卷考试」
# 五步流水线:
pipeline = [
    "① 加载:读取 PDF/网页 → 切块",
    "② 向量化:每块转成 embedding 存入向量库",
    "③ 检索:用户问题 → 找最相关的 Top-K 块",
    "④ 拼装:问题 + 检索到的资料 → 组成 Prompt",
    "⑤ 生成:LLM 基于资料作答(可标注出处)",
]
for step in pipeline:
    print(step)
print("价值:知识可随时更新、能答私有数据、少幻觉")
运 行 结 果
① 加载:读取 PDF/网页 → 切块
② 向量化:每块转成 embedding 存入向量库
③ 检索:用户问题 → 找最相关的 Top-K 块
④ 拼装:问题 + 检索到的资料 → 组成 Prompt
⑤ 生成:LLM 基于资料作答(可标注出处)
价值:知识可随时更新、能答私有数据、少幻觉
🚀进阶应用(4 课时)
第6课RAG优化
🎯 趣味项目:回答更准确📚 教学目标:掌握检索优化、生成优化,在项目实战中巩固运用
检索优化生成优化
PythonRAG 优化:让回答更准
# 常见病 → 常用药:
fixes = [
    ("检索不到", "改小分块 / 混合检索(BM25+向量) / 查询改写"),
    ("检索到但排序差", "加 Rerank 重排模型"),
    ("答案缺出处", "Prompt 里要求『仅根据资料回答并引用编号』"),
    ("资料太长爆窗口", "Top-K 调小 / 压缩摘要后再拼"),
    ("多轮对话指代不清", "先做问题改写『它指的是什么』"),
]
for symptom, cure in fixes:
    print(f"症状:{symptom}\n  处方:{cure}")
运 行 结 果
症状:检索不到
  处方:改小分块 / 混合检索(BM25+向量) / 查询改写
症状:检索到但排序差
  处方:加 Rerank 重排模型
症状:答案缺出处
  处方:Prompt 里要求『仅根据资料回答并引用编号』
症状:资料太长爆窗口
  处方:Top-K 调小 / 压缩摘要后再拼
症状:多轮对话指代不清
  处方:先做问题改写『它指的是什么』
第7课多模态RAG
🎯 趣味项目:图片也能问答📚 教学目标:掌握图文混合检索,在项目实战中巩固运用
图文混合检索
Python多模态 RAG:图片也能问答
# 让图片和文字躺进同一个向量空间
# 步骤:图片 → CLIP 编码 → 向量;文字 → 同空间向量
# 检索时:问题(文字) 也能搜到 相关图片
schema = {"知识库": ["产品手册.pdf", "示意图.png", "FAQ.docx"],
          "统一编码": "全部转成同维度向量",
          "检索": "问题 → 同时命中文字块和图片",
          "生成": "多模态 LLM 看图作答"}
for k, v in schema.items():
    print(f"{k}:{v}")
print("应用:『这个报错截图是什么意思?』")
运 行 结 果
知识库: ['产品手册.pdf', '示意图.png', 'FAQ.docx']
统一编码: 全部转成同维度向量
检索: 问题 → 同时命中文字块和图片
生成: 多模态 LLM 看图作答
应用:『这个报错截图是什么意思?』
第8课网页爬虫+RAG
🎯 趣味项目:实时信息问答📚 教学目标:掌握网页抓取、动态更新,在项目实战中巩固运用
网页抓取动态更新
Python网页爬虫 + RAG:实时信息问答
# 解决「模型知识停在训练那天」的问题
flow = [
    "① 触发:用户问了一个时效性问题",
    "② 爬取:实时抓取相关网页(带 UA、限速)",
    "③ 清洗:去标签留正文 → 切块",
    "④ 检索:新块与老知识库一起参与召回",
    "⑤ 生成:答案标注来源与时间",
]
for s in flow:
    print(s)
print("加分项:缓存已爬内容 + 定时增量更新 + 失效检测")
运 行 结 果
① 触发:用户问了一个时效性问题
② 爬取:实时抓取相关网页(带 UA、限速)
③ 清洗:去标签留正文 → 切块
④ 检索:新块与老知识库一起参与召回
⑤ 生成:答案标注来源与时间
加分项:缓存已爬内容 + 定时增量更新 + 失效检测
第9课数据库+RAG
🎯 趣味项目:结构化数据问答📚 教学目标:掌握Text-to-SQL,在项目实战中巩固运用
Text-to-SQL
PythonText-to-SQL:用嘴查数据库
# 用户说人话 → 模型写 SQL → 查库返回
user_q = "数学不及格的同学都有谁?"
sql = llm(f"把问题转成SQL,表schema:{schema}\n"
          f"问题:{user_q}")
# 生成:SELECT name FROM scores
#       WHERE subject='数学' AND score < 60
rows = db.query(sql)
运 行 结 果
生成 SQL:SELECT name FROM scores WHERE subject='数学' AND score<60
结果:[('小刚', 55), ('小丽', 58)]
📏评估与认证(3 课时)
第10课RAG评估
🎯 趣味项目:谁的知识库更好📚 教学目标:掌握评估指标、自动化测试,在项目实战中巩固运用
评估指标自动化测试
PythonRAG 评估:知识库谁更好?
# 指标三件套:检索准不准 + 答案对不对 + 引用真不真
metrics = {
    "召回率 Recall@K": "该找到的资料,找到了几条",
    "忠实度 Faithfulness": "答案是否忠于检索资料(不瞎编)",
    "答案相关性": "答没答到点子上",
}
# 自动化:准备 20 个标准问题 + 标准出处,脚本跑分
for k, v in metrics.items():
    print(f"{k}:{v}")
print("人工盲测:把两个版本答案打乱给评委,投票谁更好")
运 行 结 果
召回率 Recall@K:该找到的资料,找到了几条
忠实度 Faithfulness:答案是否忠于检索资料(不瞎编)
答案相关性:答没答到点子上
人工盲测:把两个版本答案打乱给评委,投票谁更好
第11课LMCC初赛精讲2
🎯 趣味项目:材料题专项📚 教学目标:掌握Prompt设计实战,在项目实战中巩固运用
Prompt设计实战
PythonLMCC 初赛:材料题 Prompt 实战
# 材料题:给一大段材料 + 任务 → 考 Prompt 设计
# 万能模板:角色 + 任务 + 材料 + 格式 + 约束
template = """你是{role}。
请阅读以下材料:"""{material}"""
任务:{task}
要求:
- 严格基于材料,不使用外部知识
- 以 JSON 输出:{{\"answer\": \"…\", \"evidence\": \"原文出处…\"}}"""
print(template.format(role="阅读理解专家",
      material="(1000字材料……)",
      task="总结三个核心观点"))
print("\n评分点:是否引用原文、格式是否规范、有无幻觉")
运 行 结 果
你是阅读理解专家。
请阅读以下材料:"""(1000字材料……)"""
任务:总结三个核心观点
要求:
- 严格基于材料,不使用外部知识
- 以 JSON 输出:{"answer": "…", "evidence": "原文出处…"}

评分点:是否引用原文、格式是否规范、有无幻觉
🏆 期末项目期末项目
🎯 趣味项目:课程学习助手📚 教学目标:掌握综合运用,在项目实战中巩固运用
综合运用
Python期末项目:课程学习助手
# 需求:上传课件 → AI 出题/答疑/划重点
features = {
    "知识库": "把 14 学期课件切块入库",
    "出题模式": "根据某章内容生成 5 道选择题 + 答案解析",
    "苏格拉底模式": "不直接给答案,反问引导学生想",
    "错题本": "记录答错的知识点,重点复习",
}
for k, v in features.items():
    print(f"{k}:{v}")
print("技术栈:文档分块 + 向量检索 + LLM + 简单 Web 界面")
运 行 结 果
知识库: 把 14 学期课件切块入库
出题模式: 根据某章内容生成 5 道选择题 + 答案解析
苏格拉底模式: 不直接给答案,反问引导学生想
错题本: 记录答错的知识点,重点复习
技术栈:文档分块 + 向量检索 + LLM + 简单 Web 界面
03

实践应用

每个知识点都要落到能跑、能玩、能演示的作品上。

🏆 期末项目课程学习助手

期末项目是整学期知识点的综合检验场:综合运用。学生将独立完成需求拆解 → 功能实现 → 调试打磨 → 上台演示的完整闭环。

💡 验收标准:功能完整可运行、代码结构清晰、能给同学讲明白实现原理。
📊本学期课时一览表(可打印)
课次主题趣味项目知识点
1RAG是什么让AI读你的文档检索增强生成原理
2文档处理PDF转文本文档加载、解析、分块
3向量数据库语义搜索入门Embedding、向量存储
4检索策略找得更准相似度计算、重排序
5完整RAG系统私人知识库问答RAG完整流程
6RAG优化回答更准确检索优化、生成优化
7多模态RAG图片也能问答图文混合检索
8网页爬虫+RAG实时信息问答网页抓取、动态更新
9数据库+RAG结构化数据问答Text-to-SQL
10RAG评估谁的知识库更好评估指标、自动化测试
11LMCC初赛精讲2材料题专项Prompt设计实战
12期末项目课程学习助手综合运用
04

总结提升

把一学期的知识点串成体系,看清来路与去向。

📌知识点体系图
📖 RAG 原理
检索增强生成原理
🛠️ 管线搭建
文档加载解析分块Embedding向量存储相似度计算重排序RAG完整流程
🚀 进阶应用
检索优化生成优化图文混合检索网页抓取动态更新Text-to-SQL
📏 评估与认证
评估指标自动化测试Prompt设计实战综合运用
🔄承上启下

◀ 上一章:六年级 上学期 · 大模型原理与Prompt工程

下一章 ▶:七年级 上学期 · AI Agent与应用开发

💪 学完这学期,你将获得

从文档解析、向量库、检索重排到完整 RAG 系统与效果评估,做出能读你自己的 PDF / 网页 / 数据库的私人知识库。

结业时你将带走:1 个完整大模型产品 + LMCC 认证 + 从想法到上线的全栈能力。

05

学习检测

避开高频易错点,再用速查表把语法焊进肌肉记忆。

易错点 1

分块太大

✗ 错误写法
chunk = 整章 5000 字
# 检索粒度太粗,噪声大
✓ 正确写法
chunk 300~500 字
配合 50 字重叠
💡 为什么:块太大检索不准,块太小上下文丢失;300~500 字 + 适当重叠是常用起点。
易错点 2

只靠向量检索

✗ 错误写法
搜「2024年」毫无结果
# 向量不认精确词
✓ 正确写法
向量检索 + 关键词检索
两路召回取并集
💡 为什么:语义检索找「意思像的」,关键词检索找「一字不差的」,混合才是完全体。
易错点 3

召回太少没兜底

✗ 错误写法
top_k = 1
# 唯一一块还不相关
✓ 正确写法
top_k = 5~10
+ 相似度阈值过滤
💡 为什么:多召回几块再让重排和模型自己挑,比孤注一掷稳得多。
易错点 4

不评估全靠感觉

✗ 错误写法
感觉回答变好了
# 到底好了多少?
✓ 正确写法
建评估集:
问题/标准答案/打分维度
💡 为什么:没有评估集的优化都是玄学,faithfulness / 相关性要量化。
📋语法速查表
功能写法一句话理解
文本分块split(每块300~500字, 重叠50)切块是检索质量的地基
向量化embeddings.encode(文本)文字 → 语义坐标
相似度cosine(A, B)余弦越接近 1 越相似
向量库FAISS / Chroma亿级向量毫秒搜
两路召回向量 + 关键词 → 合并去重混合检索
重排序rerank 对 top20 精排复赛评委再筛一轮
答案带引用回答末尾附 [来源1][来源2]句句有出处
评估维度忠实度 / 相关性 / 完整性三把尺子量质量
分 层 作 业

练习作业

按 A / B / C 三档难度自主选择:保底完成 A 组,学有余力挑战 B、C 组。

A组·基础任选其一深入完成
  1. 手算两个句子的词袋余弦相似度(老师课堂给的例子)。
  2. 为一本 20 页的 PDF 设计分块策略(块大小/重叠/依据)。
  3. 画出 RAG 完整流程图:从用户提问到带引用的回答。
B组·提高任选其一深入完成
  1. 私人知识库:导入自己 3 份笔记 PDF,实现问答。
  2. 网页实时问答:先抓取再回答「今天…」类问题。
  3. Text-to-SQL 演示:用自然语言查学生成绩数据库。
C组·挑战任选其一深入完成
  1. 课程学习助手:上课传讲义,下课问问题。
  2. RAG 优化对比实验:分块大小 × 检索策略,量化效果差。
  3. 多模态图文问答:图片 + 文字混合知识库。