You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Microsoft Semantic Kernel代码从SimpleVectorStore迁移至Chroma

解决Semantic Kernel从SimpleVectorStore迁移到ChromaStore的问题

问题原因

ChromaStore的API设计和SimpleVectorStore不同,它没有add_documents这个同步方法,需要改用异步的add_async方法,或通过VectorStoreClient封装统一操作。

正确迁移步骤

1. 安装必要依赖

确保已安装相关包:

pip install semantic-kernel chromadb

2. 修改向量存储初始化代码

替换原SimpleVectorStore的初始化逻辑,改为ChromaStore:

import chromadb
from semantic_kernel.connectors.memory.chroma import ChromaStore
from semantic_kernel.memory import VectorStoreClient

# 初始化Chroma客户端,支持本地持久化或内存模式
chroma_client = chromadb.PersistentClient(path="./travel_chroma_db")  # 本地持久化存储
# 内存模式:chroma_client = chromadb.InMemoryClient()

# 初始化ChromaStore,指定集合名称
chroma_store = ChromaStore(
    client=chroma_client,
    collection_name="travel_guide"
)

# 可选:封装为VectorStoreClient,统一操作接口
memory_store = VectorStoreClient(chroma_store)

3. 替换文档添加逻辑

原add_documents调用需替换为异步的add_async方法,同步代码需用asyncio.run包裹执行:

异步代码示例

import asyncio
from semantic_kernel.contents.document_content import DocumentContent

async def add_travel_documents():
    # 构造要添加的文档列表
    travel_docs = [
        DocumentContent(text="北京故宫是明清两代皇家宫殿,建议游玩3小时", id="beijing_gugong"),
        DocumentContent(text="上海外滩夜景绝美,适合傍晚前往观赏", id="shanghai_bund")
    ]
    
    # 批量添加文档到ChromaStore
    await chroma_store.add_async(documents=travel_docs)
    # 或用VectorStoreClient执行:await memory_store.add_async(documents=travel_docs)

asyncio.run(add_travel_documents())

同步代码兼容处理

如果原有代码是同步逻辑,可通过asyncio包裹异步方法:

import asyncio
from semantic_kernel.contents.document_content import DocumentContent

def add_docs_sync(doc_list):
    asyncio.run(chroma_store.add_async(documents=doc_list))

# 调用示例
docs = [DocumentContent(text="成都火锅以麻辣鲜香著称,推荐春熙路周边门店", id="chengdu_hotpot")]
add_docs_sync(docs)

4. 修改文档检索逻辑

检索操作同样需使用异步方法get_nearest_matches_async:

async def retrieve_travel_info(query_text):
    results = await chroma_store.get_nearest_matches_async(
        collection_name="travel_guide",
        query_text=query_text,
        limit=3
    )
    for item in results:
        print(f"相关内容: {item.text}, 相似度: {item.relevance_score:.2f}")

asyncio.run(retrieve_travel_info("北京必去景点"))

关键注意点

  • ChromaStore的核心操作均为异步,需遵循async/await语法规则
  • 必须将待添加内容封装为DocumentContent类型,不能直接传入原始文本
  • 若使用远程Chroma服务,需将客户端初始化改为chromadb.HttpClient(host="your-host", port=8000)

内容的提问来源于stack exchange,提问作者One Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 12:42:35