Excel VBA调用ChatGPT API报错:Unknown endpoint for this model 问题排查
Excel VBA调用ChatGPT API错误排查与修复
错误核心原因分析
返回的Unknown endpoint for this model错误主要由两个关键问题导致,同时代码还存在其他潜在隐患:
API端点错误
原代码使用的https://api.openai.com/v1/engines/davinci/jobs是OpenAI用于创建微调训练任务的专用端点,不适用于普通文本生成请求。调用Davinci模型进行文本补全,必须使用文本补全接口端点:https://api.openai.com/v1/completions。请求体JSON格式非法
原代码中request.send的内容是两个独立JSON对象用逗号拼接:{"prompt":""" & question & """},{"max_tokens":1000},不符合JSON语法规范,导致API无法解析请求参数。正确格式是将所有参数放在同一个JSON对象内。响应解析逻辑脆弱
原代码通过简单字符串替换处理API响应,一旦OpenAI调整返回格式,解析会直接失效,且无法正确处理错误信息。
修复后的完整代码
Sub SendQuestionToGPT3() '声明变量 Dim request As Object Dim responseText As String Dim APIKey As String Dim question As String Dim jsonPayload As String '读取API密钥和问题(指定工作表避免歧义) APIKey = ThisWorkbook.Worksheets("API").Range("A1").Value question = ThisWorkbook.ActiveSheet.Range("A3").Value '创建HTTP请求对象(使用6.0版本提升兼容性) Set request = CreateObject("MSXML2.XMLHTTP.6.0") '设置正确的API端点 request.Open "POST", "https://api.openai.com/v1/completions", False request.setRequestHeader "Content-Type", "application/json" request.setRequestHeader "Authorization", "Bearer " & APIKey '构造合法JSON请求体:转义问题中的双引号,指定正确模型 jsonPayload = "{""model"":""text-davinci-003"",""prompt"":""" & Replace(question, """", "\""") & """,""max_tokens"":1000}" '发送请求并捕获基础错误 On Error Resume Next request.send jsonPayload If Err.Number <> 0 Then ThisWorkbook.ActiveSheet.Range("A6").Value = "请求失败:" & Err.Description Set request = Nothing Exit Sub End If On Error GoTo 0 responseText = request.responseText '解析响应(此处使用VBA-JSON模块,需提前导入) Dim jsonObj As Object Set jsonObj = CreateObject("Scripting.Dictionary") Set jsonObj = JsonConverter.ParseJson(responseText) '处理响应结果或错误 If jsonObj.Exists("choices") Then ThisWorkbook.ActiveSheet.Range("A6").Value = Trim(jsonObj("choices")(1)("text")) ElseIf jsonObj.Exists("error") Then ThisWorkbook.ActiveSheet.Range("A6").Value = "API错误:" & jsonObj("error")("message") End If '清理对象 Set jsonObj = Nothing Set request = Nothing End Sub
关键修复说明
- 端点修正:替换为
v1/completions,适配文本生成场景 - JSON格式修复:将
prompt、model、max_tokens整合到同一JSON对象中,同时转义问题文本中的双引号,避免破坏JSON结构 - 错误处理:添加基础请求错误捕获,同时通过JSON解析正确处理API返回的错误信息
- 兼容性优化:使用
MSXML2.XMLHTTP.6.0替代旧版本对象 - 严谨解析:使用JSON解析库提取结果,而非脆弱的字符串替换
额外注意事项
- 若使用代码中的JSON解析逻辑,需导入VBA-JSON模块(可通过VBA编辑器的"工具-引用"或导入模块文件实现);若不想依赖外部模块,可编写简单的字符串匹配逻辑提取
choices中的text字段 - 确保使用的模型名称正确,
text-davinci-003是Davinci系列的文本生成模型,若切换其他模型需同步修改model参数 - 确认API密钥权限正常,且账户有足够的调用额度
内容的提问来源于stack exchange,提问作者Jens W.
相关产品推荐
相关产品推荐

