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
16.14k stars 3.74k forks source link

[ Request ] Claude 系列的 Relay 能否不要修改为 OpenAI 格式? #1284

Open bbb3n opened 3 months ago

bbb3n commented 3 months ago

例行检查

功能描述

根据您的 Slogan 和 源码 可以看出 您将 Anthropic 也修改为了 OpenAI 格式的出参

官方格式:
{
    "id": "xxx",
    "type": "message",
    "role": "assistant",
    "content": [
        {
            "type": "text",
            "text": "1"
        }
    ],
    "model": "claude-3-sonnet-20240229",
    "stop_reason": "end_turn",
    "stop_sequence": null,
    "usage": {
        "input_tokens": 10,
        "output_tokens": 5
    }
}
one-api 中转后的格式:
{
    "id": "xxx",
    "object": "chat.completion",
    "created": 1711260508,
    "model": "claude-3-sonnet-20240229",
    "choices": [
        {
            "index": 0,
            "message": {
                "role": "assistant",
                "content": "1"
            },
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 10,
        "completion_tokens": 5,
        "total_tokens": 15
    }
}

最核心的 内容部分 官方是 "content": [] 您改成了 "choices": []

但后果是,各大第三方客户端都遵循官方的 json 格式来读取内容,您这样改相当于 让我们用户自己 放弃了所有第三方客户端 (除了 NextChat)

所以我希望做透明中继,您可以适配

v1/messages 为透明传递,完全遵循官方格式 v1/chat/completions 为您修改为 OpenAI 格式的

应用场景

适配各大第三方客户端

他们都使用 /v1/messages 端点,x-api-key 鉴权

QAbot-zh commented 3 months ago

one-api 的初衷就是早期第三方客户端都只适配了OpenAI的格式,使用one-api来方便大家进行格式统一,节省开发时间和调用难度。如果不需要OpenAI格式,只是聚合中转,那遇到不支持特定格式的客户端也会有困扰。

不过你的解决方案有道理,就是有一定的工作量,没有pr的话就得看群主评判优先级了。

wfce commented 2 months ago

支持,现在新版nextchat已经全部走/v1/messages了 自定义也是

songquanpeng commented 2 months ago

会处理,需要时间,期待pr

ye4293 commented 2 months ago

这个的意思就是,不但兼容成openai的渠道,同时也保留源路径的请求信息把

bbb3n commented 2 months ago

这个的意思就是,不但兼容成openai的渠道,同时也保留源路径的请求信息把

bingo

我个人认为这样既能满足 songquanpeng 大佬最开始的口号,也能满足市面上第三方客户端的正常调用 两全其美,何乐而不为 不过个人代码水平有限,所以不敢pr,期待哪位大佬拨冗适配一下