使用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密钥:- 确认环境变量
OPENAI_API_KEY已设置,值为你的有效OpenAI API密钥,无多余空格或换行符。 - 也可在代码中显式指定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连接有效性
虽已放开网络权限,仍需确认连接配置正确性:- 替换MongoDB URI中的
<username>和<password>为实际账号密码,若密码含特殊字符(如@、$)需做URL编码(例如@替换为%40)。 - 添加代码测试MongoDB连接:
try: mongodb_client.admin.command('ping') print("MongoDB连接正常") except Exception as e: print(f"MongoDB连接失败:{str(e)}")
- 替换MongoDB URI中的
更新依赖包至稳定版本
部分旧版本的httpcore、h11或llama-index可能存在兼容性问题,执行以下命令更新:pip install --upgrade llama-index pymongo httpcore h11 openai
内容的提问来源于stack exchange,提问作者Ping Kee Ng
相关产品推荐
相关产品推荐

