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

使用LangChain与ChromaDB时遇TypeError问题求助

解决Windows 11下Python 3.10使用LangChain+ChromaDB时的TypeError: expected str, bytes or os.PathLike object, not NoneType

问题场景

在Windows 11 + Python 3.10环境中,使用langchain-community集成ChromaDB创建向量库,或直接调用ChromaDB客户端时,均触发以下错误:

Traceback (most recent call last):
  File "C:\...\file.py", line 42, in <module>
    db = Chroma.from_documents(docs, OpenAIEmbeddings(), persist_directory=CHROMA_PATH)
  File ...
  File ...
  File "C:\...\Python310\lib\pathlib.py", line 576, in _parse_args
    a = os.fspath(a)
TypeError: expected str, bytes or os.PathLike object, not NoneType

涉及代码:

LangChain集成Chroma的代码

from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings

# ...

if os.path.exists(CHROMA_PATH):
    shutil.rmtree(CHROMA_PATH)

embedding_function = OpenAIEmbeddings()
db = Chroma.from_documents(docs, OpenAIEmbeddings(), persist_directory=CHROMA_PATH)
db.persist()

直接调用ChromaDB客户端的代码

import chromadb
chroma_client = chromadb.Client()

collection = chroma_client.create_collection(name="my_collection")

collection.add(
    documents=["This is a document", "This is another document"],
    metadatas=[{"source": "my_source"}, {"source": "my_source"}],
    ids=["id1", "id2"]
)

核心原因

错误本质是某个路径参数被传入了None值,路径处理模块无法解析None类型的路径对象。

解决方案

1. 修复LangChain代码中的路径定义

  • 首先确保CHROMA_PATH变量被正确赋值为有效的字符串路径,避免未定义或赋值为None:
    import os
    import shutil
    from langchain_community.vectorstores import Chroma
    from langchain_openai import OpenAIEmbeddings
    
    # 明确指定向量库存储路径(相对路径或绝对路径均可)
    CHROMA_PATH = "./chroma_vector_db"
    
    if os.path.exists(CHROMA_PATH):
        shutil.rmtree(CHROMA_PATH)
    
    # 复用同一个Embeddings实例,避免重复初始化
    embedding_function = OpenAIEmbeddings(api_key="your-openai-api-key")
    db = Chroma.from_documents(docs, embedding_function, persist_directory=CHROMA_PATH)
    db.persist()
    
  • Windows下路径注意事项:使用相对路径,或用双反斜杠/原始字符串表示绝对路径,比如CHROMA_PATH = r"C:\data\chroma_db"

2. 修复直接调用ChromaDB客户端的问题

  • 升级到最新稳定版依赖,避免旧版本的路径处理bug:
    pip install --upgrade chromadb langchain-community langchain-openai
    
  • 若内存模式仍报错,尝试显式指定持久化路径初始化客户端:
    import chromadb
    from chromadb.config import Settings
    
    # 显式设置存储路径,避免默认路径读取异常
    chroma_client = chromadb.Client(Settings(
        persist_directory="./chroma_local_storage",
        is_persistent=True
    ))
    
    collection = chroma_client.create_collection(name="my_collection")
    
    collection.add(
        documents=["This is a document", "This is another document"],
        metadatas=[{"source": "my_source"}, {"source": "my_source"}],
        ids=["id1", "id2"]
    )
    chroma_client.persist()
    
  • 检查系统环境变量,若存在CHROMA_STORAGE_PATH等Chroma相关变量,确保其值为有效路径而非None

3. 额外检查项

  • 确认运行代码的用户对目标路径拥有读写权限
  • 避免路径中包含特殊字符或过长路径,防止Windows路径解析异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:52:43