0

0

OpenAI微调模型API调用中的“模型不存在”错误解析与解决方案

花韻仙語

花韻仙語

发布时间:2025-10-25 15:32:01

|

231人浏览过

|

来源于php中文网

原创

OpenAI微调模型API调用中的“模型不存在”错误解析与解决方案

在使用openai微调模型时,开发者常遇到“the model `xxxxx` does not exist”错误。这通常是由于使用了错误的api端点或请求格式。本文将详细阐述不同基础模型(gpt-3与gpt-3.5 turbo)微调后对应的正确api端点(completions api vs. chat completions api)及请求参数(`prompt` vs. `messages`),并提供多种语言的示例代码,帮助开发者有效解决此类问题。

理解微调模型与API端点的匹配

当您在OpenAI平台对模型进行微调后,虽然通过API列表可以确认该模型确实存在,但在实际调用时仍可能遇到“The model xxxxx does not exist”的错误。这并非模型本身不存在,而是您用于调用该模型的API端点或请求结构不正确,未能与您微调模型的基础类型相匹配。

OpenAI API针对不同类型的模型提供了不同的端点和请求参数:

  • Completions API (/v1/completions): 主要用于访问较早的GPT-3系列模型(如text-davinci-003、babbage-002、davinci-002等)及其微调版本。这些模型通常接受一个简单的字符串作为prompt参数。
  • Chat Completions API (/v1/chat/completions): 专为GPT-3.5 Turbo及GPT-4等对话模型设计。这些模型通过一个messages数组来处理对话历史,每个消息包含role和content。

核心问题:API端点与模型类型的不匹配

最初,OpenAI的微调功能主要针对GPT-3基础模型(如babbage-002和davinci-002)。这些微调模型必须通过Completions API (/v1/completions) 进行调用,并使用prompt参数。如果尝试使用Chat Completions API (/v1/chat/completions) 和messages参数来调用这些GPT-3微调模型,就会出现“模型不存在”的错误。

重要更新(2023年8月22日): OpenAI已推出GPT-3.5 Turbo的微调功能。这意味着,如果您的微调模型是基于gpt-3.5-turbo训练的,那么它现在可以通过Chat Completions API (/v1/chat/completions) 进行调用,并使用messages参数。

解决方案:根据基础模型选择正确的API端点

解决此问题的关键在于识别您的微调模型所基于的基础模型类型,并据此选择正确的API端点和请求结构。

  1. 对于基于GPT-3基础模型(如babbage-002, davinci-002)的微调模型:

    • API端点: https://api.openai.com/v1/completions
    • 请求参数: 使用prompt字段传递您的输入文本。
    • 示例:
      {
        "model": "ft-your-gpt3-model-name",
        "prompt": "您的输入文本"
      }
  2. 对于基于GPT-3.5 Turbo基础模型的微调模型:

    • API端点: https://api.openai.com/v1/chat/completions
    • 请求参数: 使用messages字段传递对话历史数组。
    • 示例:
      {
        "model": "ft-your-gpt35-turbo-model-name",
        "messages": [
          {"role": "system", "content": "您是一个有帮助的助手。"},
          {"role": "user", "content": "您的输入文本"}
        ]
      }

您可以通过查询微调作业的详细信息来确定您的fine_tuned_model是基于哪种基础模型。当微调作业成功后,fine_tuned_model字段会显示模型的名称,其前缀或命名约定通常会暗示其基础模型。

示例代码

以下是针对不同场景和编程语言的调用示例。

Kuwebs企业网站管理系统3.1.5 UTF8
Kuwebs企业网站管理系统3.1.5 UTF8

酷纬企业网站管理系统Kuwebs是酷纬信息开发的为企业网站提供解决方案而开发的营销型网站系统。在线留言模块、常见问题模块、友情链接模块。前台采用DIV+CSS,遵循SEO标准。 1.支持中文、英文两种版本,后台可以在不同的环境下编辑中英文。 3.程序和界面分离,提供通用的PHP标准语法字段供前台调用,可以为不同的页面设置不同的风格。 5.支持google地图生成、自定义标题、自定义关键词、自定义描

下载

原始问题中的Node.js Axios调用修正(假设为GPT-3微调模型)

如果您的微调模型是在2023年8月GPT-3.5 Turbo微调功能发布之前训练的,或者您确定它是基于GPT-3基础模型,则需要将chat/completions端点更改为completions,并将messages参数更改为prompt。

const API_KEY = "/"; // 替换为您的OpenAI API Key
const ORG_ID = "/"; // 替换为您的OpenAI Organization ID
const headers = {
  "Content-Type": "application/json",
  Authorization: "Bearer " + API_KEY,
  "OpenAI-Organization": ORG_ID,
};

// 假设 ft-modelname 是基于 GPT-3 的微调模型
const res = await axios.post(
  "https://api.openai.com/v1/completions", // 更改为 completions 端点
  {
    model: "ft-modelname",
    prompt: "您的输入消息。", // 更改为 prompt 参数
    max_tokens: 150 // 可选:设置生成文本的最大长度
  },
  { headers }
);

console.log(res.data.choices[0].text); // Completions API 的响应结构不同

使用OpenAI官方库的通用示例

Python

import os
import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

# 对于基于 GPT-3 的微调模型
# 例如: ft-your-babbage-002-model
response_gpt3 = openai.Completion.create(
    model="ft-your-gpt3-model-name",
    prompt="这是您的输入文本。",
    max_tokens=150
)
print(response_gpt3.choices[0].text)

# 对于基于 GPT-3.5 Turbo 的微调模型
# 例如: ft-gpt-3.5-turbo-your-model-id
response_gpt35_turbo = openai.ChatCompletion.create(
    model="ft-your-gpt35-turbo-model-name",
    messages=[
        {"role": "system", "content": "你是一个乐于助人的助手。"},
        {"role": "user", "content": "这是您的输入文本。"}
    ],
    max_tokens=150
)
print(response_gpt35_turbo.choices[0].message.content)

Node.js (使用 openai 库)

const { Configuration, OpenAIApi } = require("openai");

const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});

const openai = new OpenAIApi(configuration);

// 对于基于 GPT-3 的微调模型
// 例如: ft-your-babbage-002-model
async function callGpt3FineTune() {
  const response = await openai.createCompletion({
    model: "ft-your-gpt3-model-name",
    prompt: "这是您的输入文本。",
    max_tokens: 150
  });
  console.log(response.data.choices[0].text);
}

// 对于基于 GPT-3.5 Turbo 的微调模型
// 例如: ft-gpt-3.5-turbo-your-model-id
async function callGpt35TurboFineTune() {
  const response = await openai.createChatCompletion({
    model: "ft-your-gpt35-turbo-model-name",
    messages: [
      { role: "system", content: "你是一个乐于助人的助手。" },
      { role: "user", content: "这是您的输入文本。" }
    ],
    max_tokens: 150
  });
  console.log(response.data.choices[0].message.content);
}

callGpt3FineTune();
callGpt35TurboFineTune();

cURL

# 对于基于 GPT-3 的微调模型
curl https://api.openai.com/v1/completions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ft-your-gpt3-model-name",
    "prompt": "这是您的输入文本。",
    "max_tokens": 150
  }'

# 对于基于 GPT-3.5 Turbo 的微调模型
curl https://api.openai.com/v1/chat/completions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ft-your-gpt35-turbo-model-name",
    "messages": [
      {"role": "system", "content": "你是一个乐于助人的助手。"},
      {"role": "user", "content": "这是您的输入文本。"}
    ],
    "max_tokens": 150
  }'

OpenAI CLI

# 对于基于 GPT-3 的微调模型
openai api completions.create -m  -p "这是您的输入文本。" --max-tokens 150

# 对于基于 GPT-3.5 Turbo 的微调模型
# 注意:CLI 目前对 chat completions 的微调模型调用可能需要特定版本或格式,
# 通常直接使用 API 客户端更灵活。以下是一个概念性示例,实际可能需要调整。
# 更好的做法是使用 Python/Node.js 客户端或 cURL。
# openai api chat.completions.create -m  \
#   -M '[{"role": "system", "content": "你是一个乐于助人的助手。"}, {"role": "user", "content": "这是您的输入文本。"}]' \
#   --max-tokens 150

注意事项与总结

  1. 确认微调模型的基础类型: 在使用微调模型之前,务必确认它是基于GPT-3系列(如babbage-002)还是GPT-3.5 Turbo。这决定了您应该使用哪个API端点和请求参数。
  2. API端点和参数匹配:
    • GPT-3微调模型 → Completions API (/v1/completions) + prompt 参数。
    • GPT-3.5 Turbo微调模型 → Chat Completions API (/v1/chat/completions) + messages 参数。
  3. 响应结构差异: Completions API和Chat Completions API的响应结构不同。Completions API的响应通常在choices[0].text中包含生成内容,而Chat Completions API的响应在choices[0].message.content中。
  4. 模型名称准确性: 确保您在API请求中使用的微调模型名称与OpenAI平台返回的fine_tuned_model名称完全一致。

通过遵循这些指导原则,您可以避免“模型不存在”的常见错误,并成功地将您的OpenAI微调模型集成到应用程序中。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

278

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1491

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

621

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

551

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

566

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

166

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

82

2025.08.07

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 11.2万人学习

Django 教程
Django 教程

共28课时 | 3.3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号