便捷方法:count 和 peek

🎉摘要:本文介绍 ChromaDB 集合中的 count() 和 peek() 便捷方法。count() 无需加载数据即可快速统计记录总量,peek() 直接预览前 N 条原始数据,帮助高效了解集合概况,适合数据探查与轻量统计场景。

下面介绍集合中两个常用的便捷方法:

count()

该方法返回集合内向量记录总条数(一条 id 对应一条记录),用法如下:

total = col.count()
print(total) # 输出整数,例如 128

返回类型为 int。

完整示例如下:

import chromadb

client = chromadb.EphemeralClient()

col = client.create_collection("faq")
col.add(
    ids=["q1", "q2", "q3", "q4"],
    documents=[
        "订单付款后多久发货?一般 48 小时内出库",
        "如何申请退款?在订单详情页点击申请退款",
        "发票怎么开?在个人中心-发票管理里申请电子发票",
        "快递丢了怎么办?联系客服补发或全额退款",
    ],
    metadatas=[
        {"category": "物流"},
        {"category": "售后"},
        {"category": "财务"},
        {"category": "售后"},
    ],
)

print(f"集合中共 {col.count()} 条记录")
# 结果:
# 集合中共 4 条记录

注意:

  • 方法不会加载文档 / 向量到内存,轻量,速度很快,适合快速统计总量。

  • 统计集合里所有记录,不受过滤条件影响;已删除的数据不会计入。

  • count 统计的是记录行数,不是向量维度。

peek()

预览集合前 N 条原始数据(不是相似度检索!单纯取入库靠前的样本,不做向量搜索),用法如下:

res = col.peek() # 默认 limit=10,返回前10条

参数:limit: int,可选,默认 = 10,如果要返回集合最前面 3 条记录,可以这样:

col.peek(limit=3)

peek() 返回结果结构是一个字典,列主格式,和 get() 结构一样,例如:

{
  "ids": ["id0", "id1", "id2"],
  "documents": ["文本块0", "文本块1", "文本块2"],
  "metadatas": [{"source":"a.pdf"}, {}, {}],
  "embeddings": None,  # 默认不返回向量,需要要手动用include开启
  "uris": None
}

完整示例如下:

import chromadb

client = chromadb.EphemeralClient()
col = client.create_collection(name="kb_notes", embedding_function=None)
col.add(
    ids=[f"q{i}" for i in range(20)],
    documents=[
        f"问题{i}" for i in range(20)
    ],
    metadatas=[
        {"category": f"{"物流" if i%2==0 else "售后"}"} for i in range(20)
    ],
)

# 不传递 limit 参数
print(col.peek())

# 传递 limit 参数,只拿前 2 条
print(col.peek(limit=2))

运行示例,输出结果如下:

{'ids': ['q0', 'q1', 'q2', 'q3', 'q4', 'q5', 'q6', 'q7', 'q8', 'q9'], 
 'embeddings': array([[ 0.01125662,  0.05613644,  0.01662251, ...,  0.05694565,
         0.00316395, -0.03827527],
       [-0.03753816,  0.00808446,  0.06410947, ...,  0.06134809,
         0.01357233, -0.01718419],
       [ 0.01518752,  0.02186214,  0.05588233, ...,  0.08395418,
         0.00207805, -0.01517769],
       ...,
       [-0.05747313,  0.01544143,  0.05591037, ...,  0.04218245,
        -0.01418458, -0.03097752],
       [-0.04952905,  0.04676653,  0.06403549, ...,  0.0456598 ,
         0.02060105, -0.05399661],
       [-0.03795654,  0.00531766,  0.0550991 , ...,  0.07153945,
         0.02233934, -0.06487111]], shape=(10, 384)), 
 'documents': ['问题0', '问题1', '问题2', '问题3', '问题4', '问题5', '问题6', '问题7', '问题8', '问题9'], 'uris': None, 
 'included': ['metadatas', 'documents', 'embeddings'], 'data': None, 
 'metadatas': [{'category': '物流'}, {'category': '售后'}, {'category': '物流'}, 
    {'category': '售后'}, {'category': '物流'}, {'category': '售后'}, {'category': '物流'}, 
    {'category': '售后'}, {'category': '物流'}, {'category': '售后'}]}
{'ids': ['q0', 'q1'], 
 'embeddings': array([[ 1.12566240e-02,  5.61364442e-02,  1.66225061e-02,...,
         5.69456518e-02,  3.16395005e-03, -3.82752679e-02],
       [-3.75381634e-02,  8.08445923e-03,  6.41094670e-02,...,
         6.59778295e-03,  7.90602717e-05,  3.35016139e-02,
         6.13480918e-02,  1.35723306e-02, -1.71841886e-02]]), 
 'documents': ['问题0', '问题1'], 'uris': None, 
 'included': ['metadatas', 'documents', 'embeddings'], 'data': None, 
 'metadatas': [{'category': '物流'}, {'category': '售后'}]}

注意,peek() 方法默认 include=["documents", "metadatas", "embedding"] 包含向量。

说说我的看法
全部评论()
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号