chromadb向量数据库使用 (1)

目录

完整代码

python 复制代码
import chromadb
chroma_client = chromadb.Client()
python 复制代码
collection = chroma_client.create_collection(name="my_collection")
python 复制代码
collection.add(
    documents=[
        "This is a document about pineapple",
        "This is a document about oranges"
    ],
    ids=["id1", "id2"]
)
python 复制代码
results = collection.query(
    query_texts=["This is a query document about hawaii"], 
    n_results=2 
)
print(results)
复制代码
{'ids': [['id1', 'id2']], 'embeddings': None, 'documents': [['This is a document about pineapple', 'This is a document about oranges']], 'uris': None, 'data': None, 'metadatas': [[None, None]], 'distances': [[1.0404009819030762, 1.2430799007415771]], 'included': [<IncludeEnum.distances: 'distances'>, <IncludeEnum.documents: 'documents'>, <IncludeEnum.metadatas: 'metadatas'>]}
python 复制代码
import chromadb
chroma_client = chromadb.Client()


collection = chroma_client.get_or_create_collection(name="my_collection")


collection.upsert(
    documents=[
        "This is a document about pineapple",
        "This is a document about oranges"
    ],
    ids=["id1", "id2"]
)

results = collection.query(
    query_texts=["..."], 
    n_results=2 
)

print(results)
复制代码
{'ids': [['id2', 'id1']], 'embeddings': None, 'documents': [['This is a document about oranges', 'This is a document about pineapple']], 'uris': None, 'data': None, 'metadatas': [[None, None]], 'distances': [[1.8110723495483398, 1.846815824508667]], 'included': [<IncludeEnum.distances: 'distances'>, <IncludeEnum.documents: 'documents'>, <IncludeEnum.metadatas: 'metadatas'>]}

代码解释

以下是逐行代码的中文解释:

python 复制代码
# 导入ChromaDB客户端库
import chromadb

# 创建ChromaDB客户端实例(默认使用内存存储)
chroma_client = chromadb.Client()

# 创建名为"my_collection"的集合(类似数据库表)
collection = chroma_client.create_collection(name="my_collection")

# 向集合添加文档数据
collection.add(
    documents=[
        "This is a document about pineapple",  # 文档1:关于菠萝
        "This is a document about oranges"     # 文档2:关于橙子
    ],
    ids=["id1", "id2"]  # 为每个文档指定唯一ID
)

# 执行相似性查询
results = collection.query(
    query_texts=["This is a query document about hawaii"],  # 查询文本(夏威夷相关)
    n_results=2  # 返回最相似的2个结果
)

# 打印查询结果(包含相似文档及其距离分数)
print(results)
python 复制代码
# 获取或创建集合(如果已存在则直接获取)
collection = chroma_client.get_or_create_collection(name="my_collection")

# 使用upsert方法添加/更新文档(存在则更新,不存在则插入)
collection.upsert(
    documents=[
        "This is a document about pineapple",  # 文档内容与之前相同
        "This is a document about oranges"
    ],
    ids=["id1", "id2"]  # 使用相同ID
)

# 执行空查询(使用"..."作为占位符)
results = collection.query(
    query_texts=["..."],  # 无效查询文本示例
    n_results=2
)

# 打印不同查询条件的结果对比
print(results)

关键点解析:

  1. 存储方式:默认使用内存存储,重启后数据会丢失
  2. 集合操作:
    • create_collection() 严格创建新集合
    • get_or_create_collection() 更安全的获取方式
  3. 文档操作:
    • add() 单纯添加新文档
    • upsert() 支持更新已有文档(基于ID)
  4. 查询结果:
    • distances越小表示相似度越高
    • 无效查询可能返回随机/全部结果
    • 结果排序基于相似度得分

典型使用场景:构建简单的文本相似性搜索系统,适用于知识库检索、FAQ问答等场景。建议后续添加文本向量化模型(如Sentence-BERT)来提升搜索质量。

参考链接:https://docs.trychroma.com/docs/overview/getting-started

相关推荐
CHU72903515 分钟前
在线教学课堂APP前端功能:搭建高效线上教学生态
前端·人工智能·小程序·php
szcsun521 分钟前
机器学习(一)
人工智能·机器学习
sonadorje27 分钟前
矩阵的“内积”和“乘法”
人工智能·机器学习·矩阵
lixin5565561 小时前
基于迁移学习的图像风格增强器
java·人工智能·pytorch·python·深度学习·语言模型
byzh_rc1 小时前
[数学建模从入门到入土] 评价模型
网络·人工智能·深度学习·数学建模·回归·ar
阡陌..1 小时前
浅谈SAR图像处理---形态学滤波
图像处理·人工智能·python
renhongxia11 小时前
多机器人环境监测中的异质性,用于解决时间冲突任务
人工智能·信息可视化·语言模型·自然语言处理·数据分析·机器人
源于花海2 小时前
迁移学习的第三类方法:子空间学习(2)——流形学习
人工智能·机器学习·迁移学习·流形学习·子空间学习
方安乐2 小时前
杂记:文档解析器之MinerU
人工智能
AI猫站长2 小时前
快讯|星海图、众擎机器人、魔法原子释放IPO信号,2026年或成上市大年
人工智能·机器人·具身智能·灵心巧手·上市·星海图·众擎机器人