无法调用Azure OpenAI API:提示需提供engine或deployment_id参数
解决Azure OpenAI API调用时的"Must provide an 'engine' or 'deployment_id'"错误
问题描述
部署模型后调用Azure OpenAI API,收到如下错误:
openai.error.InvalidRequestError: Must provide an ‘engine’ or ‘deployment_id’ parameter to create a <class ‘openai.api_resources.chat_completion.ChatCompletion’>
问题原因
核心原因是环境变量未正确加载,导致AZURE_OPENAI_MODEL_NAME或AZURE_DEPLOYMENT_NAME为空值,调用ChatCompletion.create()时传入无效参数触发错误。
解决方案
1. 补全环境变量加载逻辑
代码中导入了load_dotenv但未执行加载操作,导致.env文件中的配置未生效。在代码开头添加加载语句:
import openai import os import load_dotenv load_dotenv.load_dotenv() # 加载.env文件中的环境变量
2. 确保环境变量配置正确
检查.env文件,确认以下变量与Azure Portal中的部署信息完全匹配(区分大小写):
AZURE_OPENAI_RESOURCE=AI_Sandbox AZURE_OPENAI_MODEL=gpt-3.5-turbo AZURE_OPENAI_KEY=你的API密钥 AZURE_OPENAI_ENDPOINT=https://AI_Sandbox.openai.azure.com/ AZURE_OPENAI_MODEL_NAME=gpt-35-turbo AZURE_DEPLOYMENT_NAME=GPT-35-TURBO
3. 简化ChatCompletion调用参数
Azure OpenAI API中,engine和deployment_id只需传入其中一个即可,推荐使用deployment_id(与Azure部署概念更匹配)。修改prompt方法:
def prompt(self, prompt): return openai.ChatCompletion.create( deployment_id=AZURE_DEPLOYMENT_NAME, messages=[{"role": "user", "content": prompt}], temperature=0, timeout=60, )
4. 新增参数有效性校验
在OpenAIService的__init__方法中添加检查,提前发现空值问题:
def __init__(self): if not AZURE_OPENAI_KEY: raise ValueError("AZURE_OPENAI_KEY环境变量未设置") if not AZURE_DEPLOYMENT_NAME: raise ValueError("AZURE_DEPLOYMENT_NAME环境变量未设置") openai.api_key = AZURE_OPENAI_KEY openai.api_type = "azure" openai.api_base = base_url openai.api_version = "2023-03-15-preview"
内容的提问来源于stack exchange,提问作者Stanislav Jirak CZ
相关产品推荐
相关产品推荐

