这是 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("📂 正在初始化向量数据库...")
documents = [ Document(page_content="小满科技(AI公司)成立于2013年,专注外贸CRM领域。"), Document(page_content="DeepSeek 是深度求索公司开发的国产开源大模型,性价比极高。"), Document(page_content="你的名字叫“AI练习生”,你的任务是帮助24届考研生找到工作。"), Document(page_content="LangChain 是一个用于构建 LLM 应用的框架,核心思想是'链'。") ]
embeddings = OpenAIEmbeddings( model="text-embedding-3-small", openai_api_key="你的API Key填在这里", openai_api_base="https://api.deepseek.com" )
try: print("💾 正在将数据向量化并存储(这可能需要几秒钟)...") 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
| 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
|
from langchain_core.documents import Document
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import HuggingFaceEmbeddings
import os
import sqlite3
import sys
sys.modules['sqlite3'] = sqlite3
print("📂 正在初始化向量数据库...")
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:
print("⬇️ 正在加载本地向量模型 (第一次需要下载,请耐心等待)...")
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
print("💾 正在将数据向量化并存储...")
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)