以下是 Chroma 向量数据库的使用教程:
安装
- 使用 Python 的 pip 包管理器安装 Chroma:
bash复制
- 如果只需要使用 Chroma 的客户端功能,可以安装轻量级的客户端库:
bash复制
- pip install chromadb-client
复制代码 初始化客户端
- 本地恒久化客户端:将数据保存到本地指定路径,并在启动时主动加载。
Python复制
- import chromadb
- client = chromadb.PersistentClient(path="/path/to/save/to")
复制代码 - HTTP 客户端:毗连到运行中的 Chroma 服务器。
Python复制
- chroma_client = chromadb.HttpClient(host='localhost', port=8000)
复制代码 创建集合
集合是 Chroma 中存储数据的根本单元。可以通过以下代码创建集合:
Python复制
- collection = client.create_collection(name="my_collection")
复制代码
- 集合名称有以下限制:长度 3 到 63 个字符,开头和结尾只能是小写字母或数字,不能包罗两个一连的点,不能是有效的 IP 地址。
- 可以通过 embedding_function 参数指定嵌入函数,若不指定则使用默认的 all-MiniLM-L6-v2 模型。
- 也可以通过 metadata 参数自界说嵌入空间的距离方法,例如:
Python复制
- collection = client.create_collection(
- name="collection_name",
- metadata={"hnsw:space": "cosine"} # 使用余弦相似度
- )
复制代码 添加数据
向集合中添加数据时,需要提供以下内容:
- ids:唯一标识。
- documents:数据本体,通常是文本。若未提供 embeddings,Chroma 会主动从 documents 天生嵌入向量。
- metadatas(可选):数据的额外描述,可用于后续的过滤查询。
- embeddings(可选):手动传入的嵌入向量。
示例代码:
Python复制
- collection.add(
- documents=["This is a document about engineer", "This is a document about steak"],
- metadatas=[{"source": "doc1"}, {"source": "doc2"}],
- ids=["id1", "id2"]
- )
复制代码 查询数据
可以通过嵌入向量或文本举行查询。以下是两种查询方式的示例:
- 基于嵌入向量查询:
Python复制
- results = collection.query(
- query_embeddings=[[11.1, 12.1, 13.1]],
- n_results=2 # 返回最相关的 2 个结果
- )
复制代码 - 基于文本查询:Chroma 会主动将文本转换为嵌入向量举行查询。
Python复制
- results = collection.query(
- query_texts=["Which food is the best?"],
- n_results=2
- )
复制代码 查询结果是一个字典,包罗以下字段:
- ids:匹配到的数据的 ID。
- documents:匹配到的数据内容。
- metadatas:匹配到的数据的元数据。
- distances:查询向量与匹配向量之间的距离。
其他操作
- 更新数据:
Python复制
- collection.update(
- ids=["id1", "id2"],
- documents=["Updated document 1", "Updated document 2"]
- )
复制代码 - 删除数据:
Python复制
- collection.delete(ids=["id1"])
复制代码 - 过滤查询:可以通过元数据或文档内容举行过滤查询。
Python复制
- results = collection.query(
- query_embeddings=[[11.1, 12.1, 13.1]],
- n_results=2,
- where={"source": "doc1"} # 按元数据过滤
- )
复制代码 - 指定返回字段:在查询时可以通过 include 参数指定返回的字段,例如:
Python复制
- results = collection.query(
- query_embeddings=[[11.1, 12.1, 13.1]],
- include=["documents", "metadatas"]
- )
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |