Chroma 教程

三种运行姿势:内存、持久化与服务器

🎉摘要:通过示例代码介绍Chroma的三种运行方式:内存模式(EphemeralClient)、本地持久化(PersistentClient)和连接独立服务器(HttpClient),并给出场景选择建议,帮助理解如何切换一行初始化代码实现不同模式的运行。

前面介绍了 Chroma 支持内存模式运行、本地磁盘文件持久化运行和作为独立的服务器运行。

下面通过一个示例介绍这三种模式的使用方式,代码几乎一样,改一行初始化就行(创建 client 不同):

import chromadb
from chromadb import ClientAPI

# 业务逻辑,用于创建集合,保存几条数据,然后进行查询
def business(client:ClientAPI) -> None:
    # 创建一个集合
    col = client.get_or_create_collection("faq")
    # 添加几条数据
    col.add(
        ids=["q1", "q2", "q3", "q4"],
        documents=[
            "订单付款后多久发货?一般 48 小时内出库",
            "如何申请退款?在订单详情页点击申请退款",
            "发票怎么开?在个人中心-发票管理里申请电子发票",
            "快递丢了怎么办?联系客服补发或全额退款",
        ],
        metadatas=[
            {"category": "物流"},
            {"category": "售后"},
            {"category": "财务"},
            {"category": "售后"},
        ],
    )
    # 查询数据
    res = col.query(query_texts=["怎么申请退款"], n_results=2)
    for id_, doc, dist in zip(res["ids"][0], res["documents"][0], res["distances"][0]):
        print(id_, round(dist, 4), doc)


# 内存模式,啥都不存,适合调试和跑测试
def ephemeral_client() -> None:
    print("=" * 30, "内存模式", "=" * 30)
    client = chromadb.EphemeralClient()
    business(client)

# 本地持久化,数据写到磁盘上的目录
def persistent_client() -> None:
    print("=" * 30, "本地持久化", "=" * 30)
    client = chromadb.PersistentClient(path="./chroma_data")
    business(client)

# 连一个独立跑着的 Chroma 服务
def standard_client() -> None:
    print("="*30, "服务器模式", "="*30)
    client = chromadb.HttpClient(host="localhost", port=8000)
    business(client)


if __name__ == "__main__":
    ephemeral_client() # 内存模式
    persistent_client() # 本地持久化
    standard_client() # 服务器模式

如果你要使用服务器模式,可以参考第一章安装部分,推荐使用 Docker 快速安装 Chroma。

还有个 chromadb.Client(),这是老写法,等价于内存客户端,现在官方文档里已经不推荐了,新代码用 EphemeralClient() 更清楚。例如,老写法

import chromadb

# 旧API,不推荐:Client(),内存临时实例,进程销毁数据丢失
client = chromadb.Client()
col = client.get_or_create_collection("demo")
print(col.name)

选择建议:

场景用哪个
写脚本、跑 notebook、写单元测试EphemeralClient
单机应用、本地工具、原型PersistentClient
多进程/多机共享、生产环境HttpClient + 独立服务
不想自己运维、要弹性伸缩CloudClient(Chroma Cloud 托管)

第 8 章会把这几种客户端的参数、坑和备份方式讲清楚。

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