← 返回目录
a2.3动手⏱ 约 8 分钟

让小雅读你的资料:RAG

把你的笔记、文档喂给它,它就能答"你的私货"了

🔎 最后验证 2026-06📚 来源:🧰 扣子 Coze✅ 27 人学过👁 66 次阅读
为什么学这个

小雅现在能记住"你是谁",但它有个尴尬的盲区:它没读过你的东西。

你问它"我上周课程笔记里记的那个部署命令是啥?"——它两眼一抹黑,因为这些笔记从来没进过它的脑子。

这一节,我们给小雅一项杀手锏本领:让它读你的资料。喂给它你的笔记、文档、产品手册,它就能基于你的私货来回答,还能告诉你答案出自哪一段。这招的名字,叫 RAG

为什么不能"把资料直接塞给它"?

你可能想:那把 100 页文档全贴进对话不就行了?

不行——还记得那块白板(上下文窗口) 吗?100 页根本写不下;就算写得下,又贵又慢,它还容易抓不住重点

聪明的办法不是"全塞",而是“用哪段、才翻哪段”。

💡 打个比方

这就像开卷考试

  • 笨办法:把整本书背下来(塞满白板)——做不到,也没必要。
  • 聪明办法:拿到题目,先翻到相关的那一两页,再照着答

RAG 干的就是这件事:先检索、再回答。

RAG 三步:切块 → 检索 → 生成

RAG(检索增强生成)听着唬人,其实就三步:

  1. 切块:把你的资料切成一小段一小段,存进一个"资料库"。
  2. 检索:你一提问,系统先从资料库里捞出最相关的几小段
  3. 生成:把"你的问题 + 捞出来的那几段"一起交给小雅,让它照着这几段来回答。

关键好处有两个:

  • 不再瞎编:它的答案有据可依(就是捞出来的那几段),幻觉大大减少。
  • 能用私有知识:你的笔记、内部文档,它都能答——这是通用大模型给不了的。
✂️切块
资料切成一小段段
📥入库
每段算嵌入,存起来
🔍检索
按问题捞最相关几段
💬生成
据这几段作答 + 给出处
RAG 管线:资料切块入库(一次性)→ 提问时检索 → 拼进提示 → 生成有据答案
❓ 测验
RAG 让小雅回答时,靠的是什么?

🙌 动手:给小雅建一个"资料库"

扣子里这个能力叫知识库

  1. 在小雅的编排页,找到 知识库,新建一个。
  2. 上传几份你的资料(课程笔记、一份说明文档、几篇文章都行),平台会自动帮你切块、入库。
  3. 把这个知识库关联给小雅
  4. 提一个只有你资料里才有答案的问题,比如"我笔记里写的那个一键部署命令是什么?"
  5. 看小雅从你的资料里捞出原文、据此回答——好的平台还会标出答案来自哪一段。

✅ 学完这步,你已经能把小雅变成任何一份资料的问答专家了——产品手册、课程讲义、公司制度,喂进去就能问。

🔧 上手:30 行写一个能跑的迷你 RAG

下面这段 Python 复制即可运行,把上面三步全做了。嵌入用本地中文模型(免 API、免 VPN,首次自动下载约 100MB),生成用 DeepSeek:

# pip install sentence-transformers openai
from sentence_transformers import SentenceTransformer, util
from openai import OpenAI

embedder = SentenceTransformer("BAAI/bge-small-zh-v1.5")   # 本地中文嵌入模型
client = OpenAI(api_key="你的KEY", base_url="https://api.deepseek.com")

# ① 切块:你的资料切成一段段(真实项目从文件读,这里手写几段演示)
chunks = [
    "一键部署命令是 bash deploy.sh,部署前要先备份数据库。",
    "项目用 Next.js + Prisma,数据库是 MySQL。",
    "课程分 5 章,从'什么是智能体'到'多智能体与上线'。",
]
# ② 入库:每段算成向量(归一化,便于算余弦相似度)
chunk_vecs = embedder.encode(chunks, normalize_embeddings=True)

def rag_answer(question: str, k: int = 2) -> str:
    # ③ 检索:问题也算成向量,找最相近的 k 段
    q_vec = embedder.encode(question, normalize_embeddings=True)
    scores = util.cos_sim(q_vec, chunk_vecs)[0]
    top = scores.argsort(descending=True)[:k]
    context = "\n".join(f"- {chunks[i]}" for i in top)
    print("🔍 检索到:\n", context)
    # ④ 生成:问题 + 检索到的原文一起喂给模型,要求"只据此作答"
    prompt = (f"只根据下面的资料回答问题,并说明依据;资料没有就说不知道。\n"
              f"资料:\n{context}\n\n问题:{question}")
    return client.chat.completions.create(
        model="deepseek-chat", messages=[{"role": "user", "content": prompt}]
    ).choices[0].message.content

print("💬 答:", rag_answer("一键部署的命令是什么?"))

运行结果: 它会先打印检索到的那两段原文,再给出"是 bash deploy.sh,依据是第 1 段资料;另外记得先备份数据库"这种有据可查的回答。

第 ③ 步那个"按含义找最相近的几段"到底怎么算的?——下一节我们专门拆开那张神奇的"意思地图"。

⚠️ 避坑RAG 不是万能:检索不到,就答不好

RAG 的上限,卡在"能不能检索到对的那几段"。如果资料切得太碎/太大、或问题和资料用词差太远,可能捞错段落,小雅就会"一本正经地答偏"。

两个习惯能救命:① 资料尽量结构清晰;② 让它给出处——这样你一眼能看出它是"有据"还是"瞎编"。

🤖 规划你的第一个知识库
我想用 RAG 做一个能回答『我自己资料』的助手。请帮我想:①我手头有哪些资料适合喂给它 ②怎么组织/命名这些资料检索效果更好 ③有哪些问题适合用来测试它检索得准不准。
✅ 小结

现在的小雅,能读你的资料、据此回答、还给出处了——它从"懂你这个人"进化到"懂你的事"。学完这节,你已经能把任何一份资料变成一个问答助手。

但有个神奇的地方还没解释:你上传了 100 页,它怎么精准地翻到相关那一两段的?它可不是按关键词死磕——你问"怎么上线",它能找到写着"部署流程"的那段,哪怕一个字都没对上。

它是按"意思"在找。下一节,我们揭开这背后那张奇妙的"意思地图"——嵌入与向量。放心,不堆数学,只讲直觉。

下一节 → 它怎么「按意思找」?嵌入与向量(直觉版)
智图软件的赞赏码
都看到这了,打个赏呗!
接下来 · a2.4
它怎么"按意思找"?嵌入与向量
继续读下一节 →