基于Reflex+Azure OpenAI的CSV问答应用报错:需提供engine/deployment_id
问题排查:Azure OpenAI + LangChain 缺少engine/deployment_id参数错误
错误原因
你遇到的openai.error.InvalidRequestError核心原因是:使用Azure OpenAI时,LangChain的ChatOpenAI类必须明确指定部署名称(deployment_id),而非仅传入模型名称(如"gpt-4")。Azure OpenAI的API逻辑要求必须绑定具体的部署实例,同一个模型可能存在多个不同的部署,因此无法通过模型名称直接定位资源。
修复方案
1. 修改ChatOpenAI初始化代码
将原代码中:
llm = ChatOpenAI(model="gpt-4")
替换为:
llm = ChatOpenAI( model="gpt-4", deployment_id="<你的Azure部署名称>", # 关键:添加部署ID openai_api_type="azure", openai_api_version="<OPENAI_API_VERSION>", # 如2024-02-15-preview openai_api_base="https://<OPENAI_API_BASE>.openai.azure.com/", openai_api_key="<OPENAI_API_KEY>" )
注:部署名称是你在Azure门户中创建模型部署时自定义的名称,并非模型本身的名称(例如你可能部署了名为gpt-4-prod的gpt-4实例)。
2. 验证关键参数准确性
- 登录Azure门户,进入OpenAI资源的「部署」页面,确认部署名称与代码中
deployment_id完全一致(区分大小写) - 检查
openai_api_version是否匹配Azure OpenAI支持的版本,避免使用过时版本 - 确保
openai_api_base无拼写错误(如末尾多余斜杠、域名错误)
3. 优化环境变量使用(可选)
虽然你已设置环境变量,但直接在ChatOpenAI初始化时传入参数能减少环境变量冲突风险。若保留环境变量方式,需确保所有变量生效且无覆盖情况。
修复后核心代码片段
def answer(self): # ... 其他代码保持不变 ... # 替换原llm初始化逻辑 llm = ChatOpenAI( model="gpt-4", deployment_id="your-azure-deployment-name", # 替换为实际部署名称 openai_api_type="azure", openai_api_version="2024-02-15-preview", openai_api_base="https://<OPENAI_API_BASE>.openai.azure.com/", openai_api_key="<OPENAI_API_KEY>" ) # ... 后续代码保持不变 ...
内容的提问来源于stack exchange,提问作者Nat
相关产品推荐
相关产品推荐

