Part 5 · 进阶应用
让 AI 懂你的私有数据
> 本篇定位:理解当前 80% 企业 AI 应用的工作机制。学完本篇,你能向非技术人员解释"AI 客服为什么能回答我司产品问题"。 > 阅读时长:20 分钟 > 心流产出:用流程图描述一次完整的 RAG 问答全过程。
一、三个第三层概念
| # | 概念 | 重要度 | 一句话 |
|---|---|---|---|
| 10 | Embedding | ⭐⭐⭐⭐ | 文本转数字向量 |
| 11 | Vector Database | ⭐⭐⭐⭐ | 存储与检索向量的数据库 |
| 12 | RAG | ⭐⭐⭐⭐⭐ | 检索 + 生成的复合范式 |
二、概念 10:Embedding(向量嵌入)
类比
把每句话拍扁成"指纹"——一段数字。这串数字保留了语义信息:
- 语义相近的句子,指纹在高维空间里距离近。
- 语义无关的句子,指纹距离远。
from openai import OpenAI
client = OpenAI()
resp = client.embeddings.create(
model="text-embedding-3-small",
input="今天天气真好"
)
vector = resp.data[0].embedding
print(len(vector)) # 1536 个数字
print(vector[:5]) # 形如 [0.012, -0.034, 0.056, 0.021, -0.078]
> 关键认知:Embedding 是 AI 实现"语义理解"而非"关键词匹配"的基础。 不是"包含'游戏机'三个字才算相关",而是"意思接近就算相关"。
三、概念 11:Vector Database(向量数据库)
类比
传统数据库按"精确字段"查(SQL:WHERE name = '张三'),向量数据库按"距离近不近"查("找出和'推荐游戏'最像的 10 条记录")。
行为示例
你问:"推荐游戏"。
| 候选文档 | 关键词匹配 | 向量距离 | 是否被召回 |
|---|---|---|---|
| "PS5 评测" | ❌ 关键词无重叠 | 近 | ✅ |
| "游戏机分类介绍" | ✅ 包含"游戏机" | 近 | ✅ |
| "Switch 使用心得" | ❌ 关键词无重叠 | 近 | ✅ |
| "今日股市收盘" | ❌ | 远 | ❌ |
用户感受到的是"AI 真的懂我意思"——背后是向量数据库在做毫秒级语义检索。
常见向量数据库
| 名称 | 特点 |
|---|---|
| Chroma | 轻量、Python 原生,入门首选 |
| Milvus | 国产、开源、企业级 |
| Pinecone | 云托管、按量付费,省心 |
| Weaviate | 开源、模块化设计 |
四、概念 12:RAG(Retrieval-Augmented Generation,检索增强生成)
为什么需要 RAG?
大模型有两个固有缺陷:
- 知识陈旧:训练数据有截止日期,问"昨天发生了什么"它答不上来。
- 私有数据无法访问:模型不知道你公司产品手册里的内容。
RAG 就是解决这两个问题的标准范式。
RAG 的两步流程
┌──────────────────────────────────────────┐
│ 步骤 1:检索(Retrieval) │
│ ├─ 用户提问 → 转 Embedding │
│ ├─ 在向量数据库中找 Top-K 相似文档 │
│ └─ 把找到的文档片段收集起来 │
│ │
│ 步骤 2:生成(Generation) │
│ ├─ 把"用户提问 + 检索到的文档"拼成 Prompt │
│ └─ 发给大模型,让它基于这些资料回答 │
└──────────────────────────────────────────┘
一个真实例子
用户问题:"我们的旗舰产品 X-Pro 的保修期是多久?"
步骤 1(检索):
- 提问转 Embedding → 在产品手册向量库中检索
- 召回:「X-Pro 保修期 24 个月,自激活日起算」
步骤 2(生成):
- 拼接 Prompt:
基于以下资料回答用户问题。如果资料中没有答案,请说"我不确定"。
【资料】
X-Pro 保修期 24 个月,自激活日起算。
【用户问题】
我们的旗舰产品 X-Pro 的保修期是多久?
- 模型回答:"X-Pro 的保修期为 24 个月,自激活日起算。"
> 关键认知:理解 RAG = 理解当前 80% 企业 AI 应用的工作机制。 智能客服、企业知识库、文档问答助手,本质都是 RAG。
五、最小可运行 RAG 流程(概念代码)
# 1. 准备文档 → Embedding → 存入向量库
import chromadb
from openai import OpenAI
client = OpenAI()
chroma = chromadb.PersistentClient(path="./chroma_db")
collection = chroma.get_or_create_collection("products")
docs = [
"X-Pro 保修期 24 个月,自激活日起算。",
"Y-Lite 保修期 12 个月。",
"Z-Max 提供 7 天无理由退货。"
]
# Embedding + 存入
embeddings = [
client.embeddings.create(model="text-embedding-3-small", input=d).data[0].embedding
for d in docs
]
collection.add(documents=docs, embeddings=embeddings, ids=["1", "2", "3"])
# 2. 提问 → 检索 → 生成
question = "X-Pro 保修期多久?"
q_emb = client.embeddings.create(model="text-embedding-3-small", input=question).data[0].embedding
results = collection.query(query_embeddings=[q_emb], n_results=1)
context = results["documents"][0][0]
# 3. 拼 Prompt 让 LLM 回答
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "你是产品客服,仅基于提供的资料回答。"},
{"role": "user", "content": f"【资料】{context}\n\n【问题】{question}"}
]
)
print(response.choices[0].message.content)
六、本篇动手任务(20 分钟)
任务 A:流程图描述
不写代码,用纸笔画出一次 RAG 问答的完整流程:用户问题 → Embedding → 向量检索 → Prompt 拼接 → LLM 生成 → 返回答案。每一步标注用到的概念。
任务 B(选做进阶):跑通上面的最小 RAG
如果你已能访问 OpenAI / DeepSeek,按上面的代码把 3 条产品资料存入 Chroma,然后问"X-Pro 保修期多久?",观察是否返回了正确答案。
七、进入下一篇
RAG 流程已懂。进入 Part 6 · 调试与信息窗口,我们学习程序员的"透视眼"——所有"AI 调不通"问题的根因定位方法。