Prompt 与 RAG:从模板到可引用检索
0. 元信息
- 主题路径:
docs/topics/llm-applications/subtopics/prompt-and-rag/ - 父主题:
llm-applications - 适合对象:具备 Python、HTTP 和 JSON 基础的学习者
- 建议周期:2~3 周
- 前置知识:无额外前置(继承父主题依赖)
- 最终目标:能设计可复用 Prompt,完成文档切分、Embedding、向量检索、引用和检索评测
1. 学习路线
Prompt 模板与约束
→ 结构化输出与注入防护
→ 文档清洗与切分
→ Embedding 与向量库
→ 召回、重排与引用
→ 检索评测与 RAG 问答
3. 阶段表
| 阶段 | 核心知识 | 实践产出 | 可观察学会标准 |
|---|---|---|---|
| 1. Prompt 基础 | 角色、任务、约束、少样本、schema | 三类可复用模板 | 输出能通过 JSON/schema 校验,失败样例有记录 |
| 2. 文档处理 | 清洗、切分、metadata、chunk overlap | 可重复的导入脚本 | 能解释切分粒度取舍,空文档和超长文档不崩溃 |
| 3. 向量检索 | Embedding、距离、索引、top-k、过滤 | 小型向量库 | 能用 3 组问题检查召回结果并解释误召回 |
| 4. RAG 全流程 | query rewrite、召回、重排、上下文拼接、引用、拒答 | 带来源问答 API | 能区分检索错、上下文错和生成错 |
| 5. 检索评测 | recall@k、MRR、命中率、人工抽样 | 评测集与报告 | 能报告指标并基于数据改切分或检索参数 |
9. 学习资料汇聚(v0.3 自包含)
9.1 背景与动机
Prompt 决定模型如何执行任务,RAG 则把模型连接到可更新的外部知识。可靠应用必须同时验证指令遵循、证据召回和最终引用,而不是只看一句回答是否流畅。
9.2 概念地图
flowchart LR
Prompt --> Query
Docs[文档] --> Chunk[切分]
Chunk --> Embed[Embedding]
Embed --> DB[向量库]
Query --> Embed
DB --> Retrieve[召回]
Retrieve --> Rerank[重排]
Rerank --> Context[上下文+来源]
Context --> Answer[回答/拒答]
9.3 基础知识讲解
主推官方 Embedding/模型 API 文档、Qdrant 文档;备查 FAISS 和 LlamaIndex 文档。先用内存列表完成检索,再引入向量库;复制代码前确认 LICENSE。
9.4 经典问题与经典案例
| 问题 | 最简答案 |
|---|---|
| chunk 太大 | 召回包含噪声,按标题/段落和 token 预算切分 |
| chunk 太小 | 语义断裂,增加 overlap 或保留父文档关系 |
| 相似但不相关 | 加 metadata 过滤、重排或混合检索 |
| 没有答案 | 明确拒答,不让模型凭空补全 |
| 引用不可信 | 保存 chunk id、来源和偏移,输出前校验 |
| 评测只看生成 | 分开测 recall@k、引用正确性和答案质量 |
9.5 学习难点
- 概念难点:向量相似度不是事实正确性;把召回和生成分开测。
- 思维难点:RAG 是数据流,不是一个黑盒 API;先画 ingestion/query 两条链路。
- 工程难点:文档更新、索引版本、权限和来源一致性需要可追踪。
9.6 技术标准与接口
Entity
Embedding API、向量数据库 collection/index、metadata filter、top-k 检索和来源引用对象。
Scope
Embedding 把文本映射为向量;向量库负责近邻检索,不负责回答事实和权限判断。
Structure
必须掌握文本、向量、维度、距离度量、chunk id、source、score、top-k、filter、引用片段等字段。
Ecosystem
FAISS、Qdrant、Milvus、pgvector 等实现各有索引和持久化取舍;框架封装不等于统一行为。
Depth Tiers
L0 知道存在;L1 看懂检索示例;L2 能导入和查询;L3 能定位召回错误;L4 能设计更新、权限和评测方案。本子主题要求 L3。
Source
官方 Qdrant、FAISS、模型 Embedding 文档;版本快照日期:2026-07-28。