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

使用LlamaIndex+MongoDB向量搜索遇API连接及协议错误求助

问题:LlamaIndex集成MongoDB Atlas向量搜索时出现LocalProtocolError错误

我参考LlamaIndex官方的MongoDBAtlasVectorSearch示例实现向量搜索,运行代码如下:

# mongo_uri = os.environ["MONGO_URI"]
mongo_uri = (
    "mongodb+srv://<username>:<password>@ai-test.ugfvqq8.mongodb.net?retryWrites=true&w=majority"
)
mongodb_client = pymongo.MongoClient(mongo_uri)
store = MongoDBAtlasVectorSearch(mongodb_client)
storage_context = StorageContext.from_defaults(vector_store=store)
uber_docs = SimpleDirectoryReader(
    input_files=["./data/10k/uber_2021.pdf"]
).load_data()
index = VectorStoreIndex.from_documents(
    uber_docs, storage_context=storage_context
)

运行后出现如下错误:

WARNING:llama_index.llms.openai_utils:Retrying llama_index.embeddings.openai.get_embeddings in 0.02318287802497976 seconds as it raised APIConnectionError: Connection error..
---------------------------------------------------------------------------
LocalProtocolError                        Traceback (most recent call last)
/usr/local/lib/python3.10/dist-packages/httpcore/_exceptions.py in map_exceptions(map)
      9     try:
---> 10         yield
     11     except Exception as exc:  # noqa: PIE786

294 frames
/usr/local/lib/python3.10/dist-packages/httpcore/_sync/http11.py in _send_request_headers(self, request)
    141         with map_exceptions({h11.LocalProtocolError: LocalProtocolError}):
---> 142             event = h11.Request(
    143                 method=request.method,

/usr/local/lib/python3.10/dist-packages/h11/_events.py in __init__(self, method, headers, target, http_version, _parsed)
     95             object.__setattr__(
---> 96                 self, "headers",     normalize_and_validate(headers, _parsed=_parsed)
     97             )

/usr/local/lib/python3.10/dist-packages/h11/_headers.py in   normalize_and_validate(headers, _parsed)
    163             validate(_field_name_re, name, "Illegal header name {!r}", name)
---> 164             validate(_field_value_re, value, "Illegal header value {!r}", value)
    165         assert isinstance(name, bytes)

/usr/local/lib/python3.10/dist-packages/h11/_util.py in validate(regex, data, msg, *format_args)
     90             msg = msg.format(*format_args)
---> 91         raise LocalProtocolError(msg)
     92     return match.groupdict()

LocalProtocolError: Illegal header value b'Bearer '

已将MongoDB的网络访问权限设置为0.0.0.0/0,但问题仍存在,求解决方案。


解决方案

  • 检查OpenAI API密钥配置
    错误提示Illegal header value b'Bearer '说明请求OpenAI Embedding接口时,Authorization头的Bearer值为空,核心原因是未正确配置OpenAI API密钥:

    1. 确认环境变量OPENAI_API_KEY已设置,值为你的有效OpenAI API密钥,无多余空格或换行符。
    2. 也可在代码中显式指定API密钥:
      from llama_index.embeddings.openai import OpenAIEmbedding
      
      # 显式设置嵌入模型及API密钥
      embed_model = OpenAIEmbedding(api_key="你的实际OpenAI API密钥")
      index = VectorStoreIndex.from_documents(
          uber_docs, storage_context=storage_context, embed_model=embed_model
      )
      
  • 验证MongoDB连接有效性
    虽已放开网络权限,仍需确认连接配置正确性:

    1. 替换MongoDB URI中的<username>和<password>为实际账号密码,若密码含特殊字符(如@、$)需做URL编码(例如@替换为%40)。
    2. 添加代码测试MongoDB连接:
      try:
          mongodb_client.admin.command('ping')
          print("MongoDB连接正常")
      except Exception as e:
          print(f"MongoDB连接失败:{str(e)}")
      
  • 更新依赖包至稳定版本
    部分旧版本的httpcore、h11或llama-index可能存在兼容性问题,执行以下命令更新:

    pip install --upgrade llama-index pymongo httpcore h11 openai
    

内容的提问来源于stack exchange,提问作者Ping Kee Ng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:23:16