【LangChain】langchain.vectorstores.Chroma 迁移至 langchain_community.vectorstores.Chroma

代码中使用了 langchain.vectorstores.Chroma 来初始化 Chroma 向量存储,会触发 LangChainDeprecationWarning,提示该导入在 LangChain 0.2 中已被废弃。官方推荐使用 langchain_community.vectorstores.Chroma 替代。本文基于 LangChain 0.3.x,详细解释如何迁移 Chroma 的导入,并提供代码示例,展示 Chroma 在语义搜索场景中的典型用法。

代码废弃告警:
LangChainDeprecationWarning: Importing Chroma from langchain.vectorstores is deprecated. Please replace deprecated imports:
from langchain.vectorstores import Chroma
with new imports of:
rom langchain_community.vectorstores import Chroma
You can use the langchain cli to automatically upgrade many imports. Please see documentation here https://python.langchain.com/docs/versions/v0_2/
from langchain.vectorstores import Chroma ……


为什么需要迁移?

langchain.vectorstores.Chroma 是 LangChain 早期用于与 Chroma 向量数据库交互的类,但随着 LangChain 的模块化重构,向量存储相关的功能(包括 Chroma)已被移到独立的 langchain_community 包中。迁移的原因包括:

  1. 模块化:将社区维护的功能移到 langchain_community,保持 langchain-core 轻量。
  2. 维护性langchain_community 由社区专门维护,更新更及时,支持最新 Chroma 功能。
  3. 长期支持:旧的 langchain.vectorstores.Chroma 在 LangChain 0.2 后废弃,将在未来版本移除。

新的 langchain_community.vectorstores.Chroma 提供与旧类相同的功能,但更稳定,并与 LangChain 0.3.x 的生态(如 LCEL、嵌入模型)兼容。


迁移步骤

以下是将 langchain.vectorstores.Chroma 迁移到 langchain_community.vectorstores.Chroma 的详细步骤,假设你使用 Chroma 进行语义搜索,结合 OpenAI 嵌入模型。

1. 分析原始代码

假设你的代码如下,使用 langchain.vectorstores.Chroma 创建向量存储:

import os
os.environ["OPENAI_API_KEY"] = "Your OpenAI API Key"

from langchain.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings

# 初始化嵌入模型
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

# 准备文档
docs = [
    "人工智能(AI)是计算机科学的一个分支,专注于创建智能系统。",
    "机器学习是 AI 的子领域,涉及从数据中学习模型。"
]

# 创建向量存储
vectorstore = Chroma.from_texts(docs, embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 1})

# 搜索相关文档
results = retriever.invoke("什么是人工智能?")
print(results[0].page_content)

输出示例

人工智能(AI)是计算机科学的一个分支,专注于创建智能系统。

问题

  • from langchain.vectorstores import Chroma 已废弃,需替换为 from langchain_community.vectorstores import Chroma
  • 需要安装 langchain-communitychromadb 包。
  • 确保 OPENAI_API_KEY 有效,支持嵌入模型。
2. 安装必要依赖

确保安装 LangChain 0.3.x、langchain-community 和 Chroma 相关依赖:

pip install --upgrade langchain langchain-community langchain-openai chromadb

确认 Chroma 数据库可用(chromadb 提供 Chroma 的核心功能)。

3. 迁移到 langchain_community.vectorstores.Chroma

以下是迁移后的代码,替换 Chroma 的导入:

import os
os.environ["OPENAI_API_KEY"] = "Your OpenAI API Key"

from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings

# 初始化嵌入模型
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

# 准备文档
docs = [
    "人工智能(AI)是计算机科学的一个分支,专注于创建智能系统。",
    "机器学习是 AI 的子领域,涉及从数据中学习模型。"
]

# 创建向量存储
vectorstore = Chroma.from_texts(docs, embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 1})

# 搜索相关文档
results = retriever.invoke("什么是人工智能?")
print(results[0].page_content)

输出示例

人工智能(AI)是计算机科学的一个分支,专注于创建智能系统。
代码说明
  1. OpenAI API 密钥
    • 通过 os.environ["OPENAI_API_KEY"] 设置,替换为实际密钥。
    • 确保密钥支持嵌入模型(如 text-embedding-3-small)。
  2. 导入替换
    • from langchain.vectorstores import Chroma 替换为 from langchain_community.vectorstores import Chroma
    • 功能保持不变,创建和管理向量存储。
  3. 嵌入模型
    • 使用 langchain_openai.OpenAIEmbeddings 生成文档嵌入。
    • 指定 model="text-embedding-3-small",更高效且成本低。
  4. 向量存储
    • Chroma.from_texts 将文档转换为嵌入并存储。
    • as_retriever 创建检索器,k=1 返回最相关的一个文档。
  5. 调用
    • retriever.invoke 执行语义搜索,返回匹配的文档。
4. 结合 LCEL 和 LLM(完整问答示例)

Chroma 常用于语义搜索后结合 LLM 生成回答。以下是一个完整示例,使用迁移后的 Chroma 和 LCEL 构建问答链:

import os
os.environ["OPENAI_API_KEY"] = "Your OpenAI API Key"

from langchain_community.vectorstores import Chroma
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough

# 初始化嵌入模型和 LLM
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
llm = ChatOpenAI(temperature=0, model="gpt-4o-mini")

# 准备文档
docs = [
    "人工智能(AI)是计算机科学的一个分支,专注于创建智能系统。",
    "机器学习是 AI 的子领域,涉及从数据中学习模型。",
    "深度学习是机器学习的一种,使用神经网络处理复杂任务。"
]

# 创建向量存储
vectorstore = Chroma.from_texts(docs, embeddings)
retriever = vectorstore.as_retriever(search_kwargs={"k": 2})

# 定义提示模板
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个助手,根据以下上下文回答问题:\n{context}"),
    ("human", "{question}")
])

# 创建 LCEL 链
chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

# 调用链
response = chain.invoke("什么是人工智能?")
print(response)

输出示例

人工智能(AI)是计算机科学的一个分支,专注于创建能够执行需要人类智能的任务的系统,例如学习、推理和决策。
代码说明
  1. Chroma
    • 使用 langchain_community.vectorstores.Chroma 创建向量存储。
    • retriever 搜索与查询最相关的 2 个文档(k=2)。
  2. LCEL 链
    • RunnableParallel(通过字典 {"context": retriever, "question": RunnablePassthrough()})并行处理检索和输入传递。
    • prompt | llm | StrOutputParser 生成基于上下文的回答。
  3. 调用
    • 输入为字符串问题,输出为 LLM 生成的回答。
5. 自动迁移(可选)

LangChain 提供 CLI 工具自动升级废弃导入:

  1. 安装 LangChain CLI:
    pip install langchain-cli
    
  2. 运行迁移命令:
    langchain migrate
    
  3. 按提示扫描代码,工具会将 langchain.vectorstores.Chroma 替换为 langchain_community.vectorstores.Chroma

注意

  • 迁移工具可能无法处理复杂代码,建议手动验证。
  • 确保安装 langchain-community 以支持新导入。
6. 测试与验证
  • 依赖
    • 确认已安装 langchain-communitychromadbpip install chromadb)。
    • 验证 OPENAI_API_KEY 有效,支持嵌入模型。
  • 运行
    • 测试向量存储创建,确认文档嵌入正确。
    • 测试语义搜索,验证检索和回答质量。
  • Chroma 配置
    • 默认使用内存存储,生产环境可设置持久化路径:
      vectorstore = Chroma.from_texts(docs, embeddings, persist_directory="./chroma_db")
      

注意事项

  1. API 密钥安全
    • 避免硬编码密钥,推荐使用 .env 文件:
      from dotenv import load_dotenv
      load_dotenv()  # 加载 OPENAI_API_KEY
      
    • 确保密钥支持嵌入模型(检查 OpenAI 仪表板)。
  2. 嵌入模型选择
    • text-embedding-3-small:1536 维,成本低,适合大多数场景。
    • text-embedding-3-large:3072 维,精度更高,成本更高。
    • text-embedding-ada-002:旧模型,仍广泛使用。
  3. Chroma 配置
    • 默认内存模式适合测试,持久化需设置 persist_directory
    • 支持其他向量存储(如 FAISS、Pinecone),可根据需求替换。
  4. 性能
    • 嵌入生成速度依赖 API 调用,批量处理(from_texts)可提高效率。
    • Chroma 的搜索性能依赖文档数量和硬件。
  5. Ollama 替代
    • 若想避免 OpenAI API 费用,可使用 langchain_ollama.OllamaEmbeddings
      from langchain_ollama import OllamaEmbeddings
      embeddings = OllamaEmbeddings(model="nomic-embed-text")
      

常见问题

Q1:可以继续使用 langchain.vectorstores.Chroma 吗?
A:可以,但不建议。它已废弃,迁移到 langchain_community.vectorstores.Chroma 更安全。

Q2:新旧 Chroma 功能有差异吗?
A:功能相同,仅导入路径变更,新类支持最新 Chroma 功能和 LangChain 0.3.x 生态。

Q3:如何选择向量存储?
A:Chroma 适合本地测试和中小规模数据,FAISS 适合高性能本地存储,Pinecone 适合云端大规模部署。

Q4:Chroma 支持持久化吗?
A:支持,通过 persist_directory 参数保存数据到磁盘,参考 Chroma 文档


总结

langchain.vectorstores.Chroma 迁移到 langchain_community.vectorstores.Chroma 的步骤包括:

  1. 安装 langchain, langchain-community, langchain-openai, 和 chromadb
  2. 替换导入:from langchain.vectorstores import Chroma 改为 from langchain_community.vectorstores import Chroma
  3. 设置 OPENAI_API_KEY,确保支持嵌入模型。
  4. 使用 Chroma.from_texts 创建向量存储,结合 LCEL 和 LLM 实现语义搜索。
  5. 可选使用 LangChain CLI(langchain migrate)自动升级导入。
  6. 可选使用 langchain_ollama.OllamaEmbeddings 替代 OpenAI 嵌入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值