songquanpeng / one-api

OpenAI 接口管理 & 分发系统,支持 Azure、Anthropic Claude、Google PaLM 2 & Gemini、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360 智脑以及腾讯混元,可用于二次分发管理 key,仅单可执行文件,已打包好 Docker 镜像,一键部署,开箱即用. OpenAI key management & redistribution system, using a single API for all LLMs, and features an English UI.
https://openai.justsong.cn/
MIT License
19.04k stars 4.26k forks source link

`/chat/completions` 请求在传入图片 url 时报错 #703

Closed xuzuodong closed 12 months ago

xuzuodong commented 12 months ago

例行检查

问题描述

OpenAI 的 /v1/chat/completions 请求现在支持指定新的 gpt-4-vision-preview 模型,该模型支持在请求体中附带图片 URL 以解读图片。为了使老接口支持这个功能,messages.content 字段现在支持传入数组,但 one-api 似乎暂不支持解析数组类型的 messages.content,从而出现 Go 报错的情况。具体报错信息为:

{
    "error":{
        "message":"json: cannot unmarshal array into Go struct field Message.messages.content of type string (request id: 20231113163130757459477SS3Vq0eK)",
        "type":"one_api_error",
        "param":"",
        "code":"bind_request_body_failed"
    }
}

复现步骤

注意把 url 和 token 换成真正可用的。并且下面的请求体现在 openai 官方是能够正确处理的。

curl https://openai.justsong.cn/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer xxxxx" \
  -d '{
    "model": "gpt-4-vision-preview", 
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "text",
            "text": "What’s in this image?"
          },
          {
            "type": "image_url",
            "image_url": {
              "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg"
            }
          }
        ]
      }
    ],
    "max_tokens": 300
  }'

预期结果 正确返回 JSON 格式数据

FYI https://platform.openai.com/docs/guides/vision

xuzuodong commented 12 months ago

不好意思,已经有对这个问题的 issue 了:https://github.com/songquanpeng/one-api/issues/683