Agent Engineering 课程阅读
首页/课程一 · RAG 手写/先跑通:你的第一个 RAG

在 GitHub 查看原文

本页目录

Lesson 01 — 先跑通:你的第一个 RAG

本课目标:20 分钟内跑通一个完整的 RAG,先看到效果,建立全局认知。理论细节后面的课再深入。


1. RAG 到底在解决什么问题?

直接问大模型(比如 GLM-4)会有三个痛点:

痛点 例子
幻觉 它会一本正经地编造不存在的"事实"
知识截止 它的训练数据有截止日期,不知道最近的事
不知道你的私有数据 它不知道你们公司的请假制度、你的产品文档

RAG(Retrieval-Augmented Generation,检索增强生成)的思路很朴素: 回答之前,先去你的文档库里"检索"相关片段,把片段塞进提问里,让模型基于真实材料作答。

💡 一个类比:闭卷考试 vs 开卷考试。直接问大模型 = 闭卷(靠记忆,可能记错);RAG = 开卷(允许翻书,答案更靠谱)。


2. RAG 的完整流水线

┌─────────────┐     ┌──────────────┐     ┌─────────────┐     ┌──────────────┐     ┌──────────┐
│  用户提问    │ ──▶ │  问题向量化   │ ──▶ │  向量检索    │ ──▶ │  拼接 Prompt  │ ──▶ │ 大模型生成│
│ "年假几天?" │     │  (Embedding)  │     │  Top-K 片段  │     │  上下文+问题  │     │   答案    │
└─────────────┘     └──────────────┘     └─────────────┘     └──────────────┘     └──────────┘
                                                ▲
                                                │ 从这里取
                                    ┌───────────────────────┐
                                    │ 你的文档 → 向量化 → 存储 │  (提前做好,存进向量库)
                                    └───────────────────────┘

一句话概括:把"问题"和"文档"都变成向量,算谁和谁更近,把最近的几段喂给大模型。


3. 三个核心概念(先有个印象,后面课会深讲)

  • Embedding(向量嵌入):把一段文字变成一串数字(向量)。语义相近的文字,向量也相近。这是让计算机"理解"文字相似度的方法。
  • 向量检索:在所有文档向量里,找出和"问题向量"最接近的 K 个(Top-K)。本课用 Chroma 这个向量库来做。
  • Prompt 拼接:把检索到的文档片段 + 用户问题,按固定格式拼成一段提示词,交给大模型生成答案。

4. 本课代码在做什么

打开同目录的 code.py,你会发现它被拆成了几个函数,每个函数对应流水线的一个环节:

函数 对应环节 干什么
create_zhipu_client() 准备 用 API Key 初始化智谱客户端
embed_texts() 向量化 调 embedding-3 把文本变成向量
build_knowledge_base() 存储 把知识文本向量化后存进 Chroma
retrieve() 检索 把问题向量化,从 Chroma 捞最相关的 K 段
generate_answer() 生成 把检索结果拼进 prompt,调 GLM-4 生成答案
main() 串联 把上面几步串起来跑一遍

重点观察:运行时程序会打印出"检索到了哪些片段""模型最终回答"。这是理解 RAG 的关键——你能亲眼看到模型"看到了什么材料"才作答。


5. 跑起来

# 1. 在仓库根目录安装第一课依赖
python -m pip install -r requirements-quickstart.txt

# 2. 配置密钥(把 .env.example 复制成 .env,填入你的 Key)
cp .env.example .env
# 然后编辑 .env,把 ZHIPUAI_API_KEY 换成真实值

# 3. 运行
python rag-lessons/01_getting_started/code.py

跑通后,试着改 code.py 里的 QUESTION,或增删 KNOWLEDGE 列表里的内容,看模型回答怎么变。

💰 省钱提示:智谱的 glm-4-flash 模型是免费的。如果想零成本试,可把代码里 model="glm-4" 改成 model="glm-4-flash",效果略弱但不花钱。


下一课 Lesson 02 — 深入 Embedding 我们再拆开讲"向量到底怎么表示语义"。