Part 5 · 进阶应用

让 AI 懂你的私有数据

● Embedding / Vector Database / RAG ● 心流产出:用流程图描述 RAG 全过程 ● Part 5 / 7

> 本篇定位:理解当前 80% 企业 AI 应用的工作机制。学完本篇,你能向非技术人员解释"AI 客服为什么能回答我司产品问题"。 > 阅读时长:20 分钟 > 心流产出:用流程图描述一次完整的 RAG 问答全过程。


一、三个第三层概念

#概念重要度一句话
10Embedding⭐⭐⭐⭐文本转数字向量
11Vector Database⭐⭐⭐⭐存储与检索向量的数据库
12RAG⭐⭐⭐⭐⭐检索 + 生成的复合范式

二、概念 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?

大模型有两个固有缺陷:

  1. 知识陈旧:训练数据有截止日期,问"昨天发生了什么"它答不上来。
  2. 私有数据无法访问:模型不知道你公司产品手册里的内容。

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 调不通"问题的根因定位方法。