下面介绍集合中两个常用的便捷方法:
该方法返回集合内向量记录总条数(一条 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 统计的是记录行数,不是向量维度。
预览集合前 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"] 包含向量。