You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

集成ChatGPT API实现图像物体检测遇异常,求技术答疑

集成ChatGPT API实现图像物体检测时的异常问题

我在集成ChatGPT API实现图像物体检测时遇到异常:根据OpenAI官方视觉接口文档,该API应支持图像分析能力,但调用后API回复称自身是文本模型,无法查看或分析图像。我需要获取图像中物品的名称及数量以对接Edamam API,请求答疑。

错误原因分析

从提供的代码来看,问题出在两个核心点:

  • 模型选择错误:使用了不支持视觉能力的gpt-4模型,必须使用专门的多模态视觉模型gpt-4-vision-preview
  • 请求格式错误:构造请求时,将image_url类型的内容转换成纯文本字符串(Image URL: ${contentItem.image_url}),并合并成单一文本内容传递给API,完全不符合视觉API要求的多模态消息格式,导致API将请求识别为纯文本交互。

修复方案

  • 替换模型为gpt-4-vision-preview
  • 保留消息的多模态结构,直接传递包含text和image_url类型的内容数组,不做文本转换
  • 调整Message接口,使其支持灵活的内容元素数组(而非固定两个元素)

修复后的代码

openAI.ts

import OpenAI from "openai";
import dotenv from "dotenv";

dotenv.config();

// 调整接口,支持灵活的内容元素类型
export interface Message {
  role: "user" | "assistant";
  content: Array<
    { type: "text"; text: string } | { type: "image_url"; image_url: { url: string } }
  >;
}

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
});

async function fetchChatCompletion(messages: Message[]): Promise<string> {
  console.log("messages: \n", messages);

  try {
    const response = await openai.chat.completions.create({
      model: "gpt-4-vision-preview", // 使用支持视觉的模型
      messages: messages, // 直接传递原始多模态消息结构
      max_tokens: 1024, // 按需调整token数量
    });

    const latestResponse = response.choices[0].message.content;
    return latestResponse;
  } catch (error) {
    console.error("API Error: ", error.message);
    return error.message;
  }
}
export { fetchChatCompletion };

openAI.test.ts

import env from "dotenv";
import { fetchChatCompletion, Message } from "../../services/openAI";
env.config();

const imageURL =
  "https://www.diabetesfoodhub.org/system/user_files/Images/1837-diabetic-pecan-crusted-chicken-breast_JulAug20DF_clean-simple_061720.jpg";

const message: Message[] = [
  {
    role: "user",
    content: [
      {
        type: "text",
        text: "Hello, Could you please provide me the name of each item and the quantity of each item in the image for using it in Edamam API?",
      },
      {
        type: "image_url",
        image_url: { url: imageURL },
      },
    ],
  },
];

describe("fetchChatCompletion", () => {
  test("fetches chat completion successfully", async () => {
    try {
      const response = await fetchChatCompletion(message);
      expect(response).toBeDefined();
      console.log("response from API: \n", response);
    } catch (error) {
      console.error("API Error: ", error.message);
    }
  }, 30000); // 延长超时时间至30秒
});

内容的提问来源于stack exchange,提问作者Dolev Shmueli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 01:52:09