Azure OpenAI自定义数据调用报错:Unrecognized request argument: dataSources
解决Azure OpenAI调用自有数据时dataSources参数未识别的问题
问题根源
你遇到的Unrecognized request argument supplied: dataSources错误,本质是OpenAI Python SDK版本与Azure OpenAI自有数据接口的调用方式不匹配,加上官方教程的部分内容未同步SDK更新导致的。另外,使用extensions base_url时的超时问题,大概率和网络连通性或配置校验有关。
解决方案分版本处理
一、使用新版OpenAI SDK(v1.x+)
新版SDK(如v1.10.0+)要求必须指定extensions专属的base_url,同时通过extra_body传递dataSources参数,具体调整如下:
配置正确的base_url
取消注释代码中base_url的配置,必须指向{endpoint}/openai/deployments/{deployment}/extensions,这是调用自有数据功能的专属接口地址。确保API版本为预览版
必须使用支持extensions的预览版API,比如2023-08-01-preview或更高的预览版本(GA版本不支持自有数据功能)。修正后的完整代码
import os import openai import dotenv dotenv.load_dotenv() endpoint = os.environ.get("AOAIEndpoint") api_key = os.environ.get("AOAIKey") deployment = "gpt-4-32k" client = openai.AzureOpenAI( base_url=f"{endpoint}/openai/deployments/{deployment}/extensions", azure_endpoint=endpoint, api_key=api_key, api_version="2023-08-01-preview", ) completion = client.chat.completions.create( model=deployment, messages=[ { "role": "user", "content": "My user query", }, ], extra_body={ "dataSources": [ { "type": "AzureCognitiveSearch", "parameters": { "endpoint": os.environ["SearchEndpoint"], "key": os.environ["SearchKey"], "indexName": os.environ["SearchIndex"], "top": 3 # 可选:控制返回的搜索结果数量 } } ], "temperature": 0.0 # 可选:降低输出随机性,更贴合数据内容 } ) print(f"{completion.choices[0].message.role}: {completion.choices[0].message.content}")
二、使用旧版OpenAI SDK(v0.28.x)
如果你坚持使用v0.28.x版本,需要调整调用方式,直接将dataSources作为参数传递,而非放在extra_body中:
import os import openai import dotenv dotenv.load_dotenv() openai.api_type = "azure" openai.api_base = f"{os.environ.get('AOAIEndpoint')}/openai/deployments/{deployment}/extensions" openai.api_key = os.environ.get("AOAIKey") openai.api_version = "2023-08-01-preview" response = openai.ChatCompletion.create( engine=deployment, messages=[ {"role": "user", "content": "My user query"} ], dataSources=[ { "type": "AzureCognitiveSearch", "parameters": { "endpoint": os.environ["SearchEndpoint"], "key": os.environ["SearchKey"], "indexName": os.environ["SearchIndex"] } } ], temperature=0.0 ) print(f"{response['choices'][0]['message']['role']}: {response['choices'][0]['message']['content']}")
超时问题排查(使用extensions base_url时)
如果出现InternalServerError: upstream request timeout,按以下步骤排查:
- 检查Azure Cognitive Search的权限:确保使用的Search Key拥有读取索引的权限,而非仅管理权限。
- 验证搜索索引状态:在Azure Portal的Cognitive Search资源中,用「搜索资源管理器」测试索引是否能正常返回数据。
- 网络连通性确认:如果Azure OpenAI和Cognitive Search不在同一虚拟网络,需确保搜索服务的防火墙允许Azure OpenAI的IP访问,或开启「允许所有网络访问」(测试用)。
- 检查索引数据量:如果索引数据过大,可通过
top参数减少返回的搜索结果数量,降低接口响应时间。
额外校验项
- 确认Azure OpenAI部署已启用「自有数据」功能:在Azure Portal的OpenAI资源→部署→「添加你的数据」中,已正确关联目标Cognitive Search索引。
- 环境变量无拼写错误:所有
AOAIEndpoint、SearchEndpoint、SearchKey、SearchIndex的值需完全匹配Azure Portal中的配置。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

