用Chroma构建本地知识库
入门·10 分钟·通过可运行代码讲解「用Chroma构建本地知识库」,覆盖环境准备、核心代码、参数说明、异常处理、工程化改造和练习任务,适合 AI 编程入门。
用Chroma构建本地知识库
Chroma 是一个适合本地开发和小型项目的向量数据库。用它可以快速构建一个本地知识库问答原型,不需要一开始就部署复杂服务。
适合场景
Chroma 适合:
- 个人文档问答;
- 本地 RAG 原型;
- 小团队知识库验证;
- 教程和实验项目。
如果是大规模生产环境,还需要评估并发、权限、备份和监控。
安装依赖
pip install chromadb langchain langchain-community
根据使用的 embedding 模型,可能还要安装额外包。
准备文档
可以从简单文本开始:
from langchain_core.documents import Document
docs = [
Document(page_content='差旅报销需要提交发票和审批单', metadata={'source': 'travel.md'}),
Document(page_content='请假超过三天需要直属主管审批', metadata={'source': 'leave.md'}),
]
真实项目中可以从 Markdown、PDF、网页或数据库加载。
写入Chroma
from langchain_chroma import Chroma
vectorstore = Chroma.from_documents(
documents=docs,
embedding=embedding_model,
persist_directory='./chroma_db'
)
persist_directory 用于保存本地索引,下次启动可以继续加载。
查询知识库
results = vectorstore.similarity_search('报销出差费用要什么材料?', k=2)
for doc in results:
print(doc.page_content, doc.metadata)
返回结果应该包含内容和来源,方便后续引用。
接入大模型回答
检索到文档后,把内容拼成 context:
context = '\n'.join([doc.page_content for doc in results])
prompt = f'请根据资料回答问题。\n资料:{context}\n问题:报销出差费用要什么材料?'
模型回答时要求基于资料,不知道就说不知道。
常见坑
- 文档没有来源,无法追溯;
- chunk 太大导致检索噪声多;
- 修改文档后忘记重建索引;
- embedding 模型换了但旧向量还在;
- 本地路径写死,部署后找不到数据。
小结
Chroma 很适合学习 RAG。先用少量文档跑通“加载—向量化—检索—回答”流程,再考虑权限、更新、评估和上线。