RAG初识

这是 RAG(检索增强生成)最核心的一步。我们要把资料存进一个向量数据库里,这样 AI 才能“想起来”。 为了避免到处去找 PDF 文件的麻烦,直接用代码生成一段模拟的“机密文档”,先跑通流程。
为了保证代码 100% 能运行 且符合最新版 LangChain 的规范(解决那个导入报错),同…’


构建知识库(给 AI 装上“海马体”)

这是 RAG(检索增强生成)最核心的一步。我们要把资料存进一个向量数据库里,这样 AI 才能“想起来”。

为了避免到处去找 PDF 文件的麻烦,直接用代码生成一段模拟的“机密文档”,先跑通流程。

1
pip install pypdf chromadb

编写“建库”代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from langchain.schema import Document
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
import os

print("📂 正在初始化向量数据库...")

# 1. 这里我们模拟几段“内部机密数据”
# 以后你可以用 pypdf 读取真正的 PDF 文件替换这里
documents = [
Document(page_content="小满科技(AI公司)成立于2013年,专注外贸CRM领域。"),
Document(page_content="DeepSeek 是深度求索公司开发的国产开源大模型,性价比极高。"),
Document(page_content="你的名字叫“AI练习生”,你的任务是帮助24届考研生找到工作。"),
Document(page_content="LangChain 是一个用于构建 LLM 应用的框架,核心思想是'链'。")
]

# 2. 定义 Embedding 模型 (负责把文字变成向量/数字)
# 因为 DeepSeek 暂时没有官方的 Embedding API 兼容,我们这里暂时用 OpenAI 的兼容模式
# 注意:这里需要你确保 API Key 是填好的
embeddings = OpenAIEmbeddings(
model="text-embedding-3-small", # 这是一个通用的模型名,DeepSeek 其实目前主要支持 chat,
# 如果这里报错,我们稍后换 huggingface 的本地模型
openai_api_key="你的API Key填在这里",
openai_api_base="https://api.deepseek.com" # ⚠️ 注意:DeepSeek 目前可能不支持 Embedding API,如果报错往下看
)

# 【紧急修正预案】
# DeepSeek 官方 API 目前主要开放 Chat,Embedding 可能不稳定。
# 如果上面的运行报错,我们将换成下面的“本地免费方案”(这也是企业里常用的)
# 但首先,我们试试简单的。

try:
print("💾 正在将数据向量化并存储(这可能需要几秒钟)...")

# 3. 创建并保存到本地目录 'my_knowledge_db'
db = Chroma.from_documents(
documents=documents,
embedding=embeddings,
persist_directory="./my_knowledge_db" # 数据存在当前目录下的文件夹里
)

print("\n✅ 数据库构建成功!")
print(f"共存储了 {len(documents)} 条知识片段。")
print("现在你的目录下应该多了一个 'my_knowledge_db' 的文件夹。")

except Exception as e:
print(f"\n❌ 出错了:{e}")
print("⚠️ 可能是 DeepSeek 还没开放 Embedding 接口,或者是网络问题。")

安装本地向量模型库

为了保证代码 100% 能运行 且符合最新版 LangChain 的规范(解决那个导入报错),同时避开 DeepSeek 没有 Embedding 接口 的大坑(DeepSeek 目前只支持对话,不支持向量化),我把代码做了一次重大升级

我们要改用 “本地离线向量模型” (HuggingFace)我们自己在本地跑模型,不依赖云端 API!

**1、一个专门处理向量的库 sentence-transformers

1
pip install sentence-transformers

**2、Embedding 模型把“文本”变成了“特征向量”

HuggingFaceEmbeddings 模型,把每一句话“吃”进去,吐出来了一个 多维数组(向量)

比如“DeepSeek”这几个字,可能变成了一个 [0.1, -0.5, 0.8, ...] 的 384 维数组。这个数组代表了这句话的“语义”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# 修复了导入路径,符合最新版 LangChain 规范

from langchain_core.documents import Document

from langchain_community.vectorstores import Chroma

from langchain_community.embeddings import HuggingFaceEmbeddings

import os



# 强制使用标准库 sqlite3,防止某些环境报错

import sqlite3

import sys

sys.modules['sqlite3'] = sqlite3



print("📂 正在初始化向量数据库...")



# 1. 模拟数据(以后换成读取 PDF)

documents = [

    Document(page_content="小满科技(AI公司)成立于2013年,专注外贸CRM领域。"),

    Document(page_content="DeepSeek 是深度求索公司开发的国产开源大模型,性价比极高。"),

    Document(page_content="你的名字叫“AI练习生”,你的任务是帮助24届考研生找到工作。"),

    Document(page_content="LangChain 是一个用于构建 LLM 应用的框架,核心思想是'链'。"),

    Document(page_content="RAG (检索增强生成) 的核心流程是:文档 -> 向量 -> 检索 -> 回答。")

]



print(f"准备处理 {len(documents)} 条数据...")



try:

    # 2. 定义 Embedding 模型 (改用本地 HuggingFace 模型,免费且稳定!)

    # 第一次运行会自动下载模型 (model: all-MiniLM-L6-v2),大概需要几分钟

    print("⬇️ 正在加载本地向量模型 (第一次需要下载,请耐心等待)...")

    embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")



    print("💾 正在将数据向量化并存储...")

    # 3. 创建并保存到本地目录 'my_knowledge_db'

    db = Chroma.from_documents(

        documents=documents,

        embedding=embeddings,

        persist_directory="./my_knowledge_db"

    )

    print("\n✅ 数据库构建成功!")

    print("现在你的目录下应该多了一个 'my_knowledge_db' 的文件夹。")



except Exception as e:

    print(f"\n❌ 出错了:{e}")

    print("💡 提示:如果是网络连接错误,可能是下载模型时超时了,请检查网络。")

![[Pasted image 20260121234347.png]]

**3、存入“高维空间索引” (ChromaDB)

  • 动作: db = Chroma.from_documents(...)

  • 过程: 只存向量
    并没有像 SQL 数据库那样存文本(虽然也存了),它核心存的是那些*向量。它把这些向量扔进了一个高维几何空间里。*

  • 目的: 为了以后能算距离

    • 如果用户问:“小满科技是干啥的?” —— 这句话也会被变成向量。

    • 计算机发现:用户的问题向量,和数据库里“小满科技成立于…”这条数据的向量,在空间里距离最近(余弦相似度最高)。

    • 于是,计算机就知道该把这条数据调出来给 AI 看了。

作者

K.S.J

发布于

2026-02-05

更新于

2026-02-28

许可协议