LangChain 0.1.x中Azure AI Search向量存储APIConnectionError解决问询
Azure OpenAI + Azure AI Search RAG 连接问题排查与修复
问题背景
使用Azure OpenAI和Azure AI Search实现RAG方案,依赖配置如下:
azure-core==1.29.6 azure-common==1.1.28 azure-identity==1.15.0 azure-keyvault-keys==4.8.0 azure-keyvault-secrets==4.7.0 azure-search-documents==11.4.0 openai==1.8.0 langchain==0.1.1 fastapi==0.109.0 uvicorn==0.26.0 tiktoken==0.5.2 gunicorn==21.2.0 langchain-openai==0.0.2
连接Azure Search的代码逻辑:
# Cognitive Search connection setting index_name = os.environ["AZURE_SEARCH_INDEX_NAME"] service_name = COGNOS_SERVICE key = AZURE_SEARCH_ADMIN_KEY vector_store_address = "https://{}.search.windows.net/".format(service_name) vector_store_password = AZURE_SEARCH_ADMIN_KEY # Define LLM llm = AzureChatOpenAI( model="gpt-35-turbo", streaming=True, azure_deployment="chatgpt-gpt35-turbo", temperature=0.0, ) embedding_model: str = "text-embedding-ada-002" embeddings: OpenAIEmbeddings = OpenAIEmbeddings( deployment=embedding_model, chunk_size=1 ) vector_store = AzureSearch( azure_search_endpoint=vector_store_address, azure_search_key=vector_store_password, index_name=index_name, embedding_function=embeddings.embed_query, # content_key="report_content" )
运行后触发错误:
File d:\xxxx\.venv\lib\site-packages\openai\_base_client.py:919, in SyncAPIClient._request(self, cast_to, options, remaining_retries, stream, stream_cls) 909 return self._retry_request( 910 options, 911 cast_to, (...) 915 response_headers=None, 916 ) 918 log.debug("Raising connection error") --> 919 raise APIConnectionError(request=request) from err 921 log.debug( 922 'HTTP Request: %s %s "%i %s"', request.method, request.url, response.status_code, response.reason_phrase 923 ) 925 try: APIConnectionError: Connection error.
已按LangChain 0.1+版本要求切换至langchain-community导入,旧版本LangChain使用相同配置可正常运行。
修复步骤
针对LangChain 0.1.x版本的Azure Search连接逻辑变化,按以下点修改:
确认AzureSearch导入路径
LangChain 0.1.x将AzureSearch组件迁移至langchain_community.vectorstores,确保导入语句正确:from langchain_community.vectorstores import AzureSearch显式初始化SearchClient
新版本AzureSearch类推荐传入预配置的SearchClient,避免内部初始化时的连接参数缺失:from azure.search.documents import SearchClient from azure.core.credentials import AzureKeyCredential # 手动创建SearchClient实例 search_client = SearchClient( endpoint=vector_store_address, index_name=index_name, credential=AzureKeyCredential(vector_store_password) ) # 用预创建的search_client初始化AzureSearch vector_store = AzureSearch( search_client=search_client, embedding_function=embeddings.embed_query, # content_key="report_content" 按需开启 )补全OpenAI Embeddings的Azure配置
确保嵌入模型的Azure端点、密钥等参数配置完整,避免嵌入请求时的连接异常:embeddings: OpenAIEmbeddings = OpenAIEmbeddings( deployment=embedding_model, chunk_size=1, azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"], api_key=os.environ["AZURE_OPENAI_API_KEY"], api_version="2024-02-15-preview" # 替换为你的Azure OpenAI API版本 )适配依赖版本
更新依赖包至与LangChain 0.1.x兼容的版本,新增langchain-community并升级azure-search-documents:# 修改后的requirements.txt langchain==0.1.1 langchain-community==0.0.13 langchain-openai==0.0.2 azure-search-documents==11.4.1 azure-core==1.29.6 azure-identity==1.15.0 openai==1.8.0 fastapi==0.109.0 uvicorn==0.26.0 tiktoken==0.5.2 gunicorn==21.2.0执行升级命令:
pip install -r requirements.txt --upgrade验证网络与权限
- 检查运行环境是否能正常访问Azure Search和Azure OpenAI的端点(无防火墙、代理拦截)
- 确认Azure Search管理员密钥有效,且拥有目标索引的读写权限
内容的提问来源于stack exchange,提问作者Saurabh Jain
相关产品推荐
相关产品推荐

