[智能体-301]:Chroma向量数据库详解,包括主要接口,代码示例
一、Chroma 概述Chroma是开源、轻量级、嵌入式向量数据库专为 LLM/RAG 设计主打✅零依赖内置 SQLiteDuckDB无需单独部署✅本地优先支持内存 / 持久化两种模式✅自动嵌入内置OpenAI / 句子嵌入模型开箱即用✅简单 APIPython/JS 多语言5 分钟上手✅LangChain 原生集成核心用途文档语义检索、知识库问答、Agent 记忆、相似内容推荐。二、安装bash运行# 基础版核心功能 pip install chromadb # 完整版含内置嵌入、可视化 pip install chromadb[all]三、核心概念Client数据库连接入口内存 / 持久化 / 云Collection向量集合类比 “表”含ids唯一标识必填embeddings向量可选可自动生成documents原始文本可选metadatas元数据过滤用四、主要接口Python1. 客户端Clientpython运行import chromadb # 1内存模式临时程序退出丢失 client chromadb.Client() # 2持久化模式数据存文件夹常用 client chromadb.PersistentClient(path./chroma_db) # 3云服务模式Chroma Cloud client chromadb.CloudClient(tenantxxx, databaseyyy, api_keyzzz)2. 集合Collection管理python运行# 创建/获取集合不存在则创建存在则获取 collection client.get_or_create_collection( namemy_knowledge, metadata{hnsw:space: cosine} # 距离度量cosine/l2/ip ) # 列出所有集合 client.list_collections() # 删除集合 client.delete_collection(namemy_knowledge)3. 增add/upsertpython运行# 方式1自动生成向量推荐传文本即可 collection.add( documents[ RAG 检索增强生成, Chroma 轻量级向量库, 向量数据库用于语义搜索 ], metadatas[{topic: AI}, {topic: DB}, {topic: Search}], ids[doc1, doc2, doc3] # 必须唯一 ) # 方式2手动传向量自定义模型 collection.add( embeddings[[0.1,0.2,...], [0.3,0.4,...]], # 与文本一一对应 documents[文本1, 文本2], ids[id1, id2] ) # upsert存在则更新不存在则插入 collection.upsert(...)4. 查query/get语义检索核心python运行results collection.query( query_texts[什么是向量数据库], # 查询文本自动转向量 n_results2, # 返回 top2 where{topic: DB}, # 元数据过滤 where_document{$contains: 向量} # 文本内容过滤 ) # 结果结构 # results { # ids: [[doc2, doc3]], # distances: [[0.12, 0.34]], # 距离越小越相似 # documents: [[Chroma 轻量级向量库, 向量数据库用于语义搜索]], # metadatas: [[{topic:DB}, {topic:Search}]] # }精确获取按 ID / 过滤python运行# 按 ID 获取 items collection.get(ids[doc1, doc2]) # 过滤分页 items collection.get( where{topic: AI}, limit10, offset0, include[documents, metadatas] # 只返回指定字段 )5. 改updatepython运行collection.update( ids[doc1], documents[更新RAG 检索增强生成技术], metadatas[{topic: AI, updated: True}] )6. 删deletepython运行# 按 ID 删除 collection.delete(ids[doc3]) # 按条件删除 collection.delete(where{topic: old}) # 清空集合 collection.delete(where{})7. 其他常用python运行# 集合总数 collection.count() # 预览前 5 条 collection.peek(limit5)五、完整代码示例RAG 最小 Demopython运行import chromadb # 1. 初始化客户端持久化 client chromadb.PersistentClient(path./chroma_rag) # 2. 创建集合 collection client.get_or_create_collection( namerag_demo, metadata{hnsw:space: cosine} ) # 3. 准备知识库文本 docs [ Chroma 是轻量级开源向量数据库专为 LLM 应用设计。, RAG 通过检索外部知识库让大模型回答更准确、时效性更强。, 向量数据库将文本转为高维向量支持语义相似度搜索。 ] ids [rag1, rag2, rag3] metas [{source: intro}, {source: tech}, {source: concept}] # 4. 存入数据库自动嵌入 collection.add(documentsdocs, idsids, metadatasmetas) # 5. 语义查询 query RAG 如何提升大模型回答准确性 results collection.query(query_texts[query], n_results2) # 6. 打印结果 print( 最相似文档 ) for i, (doc, dist) in enumerate(zip(results[documents][0], results[distances][0])): print(f{i1}. 距离{dist:.4f} | 内容{doc})输出示例plaintext 最相似文档 1. 距离0.1823 | 内容RAG 通过检索外部知识库让大模型回答更准确、时效性更强。 2. 距离0.4567 | 内容向量数据库将文本转为高维向量支持语义相似度搜索。六、LangChain 集成常用python运行from langchain_community.vectorstores import Chroma from langchain_core.documents import Document # 1. 从 Document 列表创建向量库 documents [Document(page_content文本1, metadata{source: test})] vectorstore Chroma.from_documents( documentsdocuments, persist_directory./chroma_langchain # 持久化 ) # 2. 加载已有向量库 vectorstore Chroma(persist_directory./chroma_langchain) # 3. 转为检索器 retriever vectorstore.as_retriever(k3) docs retriever.invoke(你的问题)七、最佳实践生产用持久化模式避免内存模式数据丢失元数据规范化统一source/page/topic字段便于过滤距离度量选 cosine文本语义检索最常用批量添加减少 IO提升性能敏感数据加密元数据可加is_secret标记过滤