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
18.2k stars 4.11k forks source link

Claude模型异常 #1135

Open zisanjun opened 6 months ago

zisanjun commented 6 months ago

例行检查

问题描述

大佬,自claude3发布后,好像API通信要求被改了,有了更多的要求,下游客户端出现了多种报错,如下:

{ "error": { "message": "messages: Unexpected role "system". The Messages API accepts a top-level system parameter, not "system" as an input message role. (request id: 2024031217275455426917732821996)", "type": "invalid_request_error", "param": "", "code": null } }

{"error":{"message":"messages: first message must use the "user" role (request id: 2024031211095676132633895366427) (request id: 2024031211095627433661757301115)","type":"invalid_request_error","param":"","code":null}}

{"success":false,"content":null,"tokenCount":0,"errorMessage":"{"error":{"message":"messages: roles must alternate between \"user\" and \"assistant\", but found multiple \"user\" roles in a row (request id: 2024031218095472528132521153205)","type":"invalid_request_error","param":"","code":null}}","inputTokens":-1,"outputTokens":-1}

我可以提供多个claude apikey以供测试 可以发到大佬您的邮箱或者加我QQ84680396 复现步骤

预期结果

zisanjun commented 6 months ago

体现在oneapi上的错误就是日志有记录,但该条记录的token数量为空白 (应该与issue中另外一位伙伴是同一个问题)

zisanjun commented 6 months ago

新报错: {"error":{"message":"messages: first message must use the "user" role (request id: 2024031223523252991746241451096) (request id: 2024031223523195377616522158465)","type":"invalid_request_error","param":"","code":null}}

songquanpeng commented 6 months ago

麻烦发一下请求体

zisanjun commented 6 months ago

{"model":"claude-1.3-100k","contentType":"Text","sessionUuid":null,"mask":null,"stream":"true","temperature":0.5,"n":null,"functions":null,"messages":[{"id":null,"role":"assistant","content":"迷糊通常表示以下几个意思:\n\n1. 意识模糊,思维不清晰。如刚睡醒后的状态,还没有完全清醒过来。\n\n2. 对某件事不太清楚,缺乏清晰和准确的理解。如对工作任务或学习内容迷糊,不太明白。\n\n3. 记忆力差,健忘。常常忘记要做的事或忘记已经做过的事,给人留下随意或不靠谱的印象。\n\n4. 不太精明或机警,容易上当受骗。如对陌生人太过信任,容易被人利用。\n\n5. 举止或言语不太连贯清晰,让人觉得似懂非懂。这种迷糊往往让人觉得这人有点儿糊涂或傻乎乎的。\n\n所以,迷糊是一个比较负面的词,表示一定程度上的意识不清、判断不准、记忆差等状态。对一个人来说,时常迷糊会给人留下不太靠谱或有点儿糊涂的印象。但偶尔迷糊也是人之常情,不必太过在意。重要的是要尽量避免在重要场合或工作中迷糊以免影响表现。","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},{"id":null,"role":"user","content":"你好吗","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},{"id":null,"role":"assistant","content":"json\n{\n \"error\": {\n \"message\": \"messages: first message must use the \\\"user\\\" role (request id: 2024031212402264177661902963411) (request id: 2024031212402259186095833740833)\",\n \"type\": \"invalid_request_error\",\n \"param\": \"\",\n \"code\": null\n }\n}\n","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},{"id":null,"role":"user","content":"为什么报错了","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null}],"modelEntity":null,"apiKeyEntity":null,"sessionEntity":null,"plugins":null,"resend":false,"assistantMessageId":null,"threadUuid":null,"lastMessage":{"id":null,"role":"user","content":"为什么报错了","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},"presence_penalty":0.0,"frequency_penalty":0.0,"top_p":1.0,"max_tokens":null}

响应:{"success":false,"content":null,"tokenCount":0,"errorMessage":"{\"error\":{\"message\":\"messages: first message must use the \\"user\\" role (request id: 2024031300350947244414732578428)\",\"type\":\"invalid_request_error\",\"param\":\"\",\"code\":null}}","inputTokens":-1,"outputTokens":-1}

使用的下游客户端程序是nextweb

大佬,不同报错我得收集,收集到了我继续comment,您先休息,早点睡觉,祝好梦

zisanjun commented 6 months ago

请求: {"model":"claude-3-sonnet-200k","contentType":"Text","sessionUuid":null,"mask":null,"stream":"true","temperature":0.5,"n":null,"functions":null,"messages":[{"id":null,"role":"system","content":"You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2021-09\nCurrent model: claude-3-sonnet-20240229\nCurrent time: 2024-03-14","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},{"id":null,"role":"system","content":"这是历史聊天总结作为前情提要:对话内容涉及了问候、能力介绍、数学题求解等。下面是一个简要总结:\n\n用户问候并询问助手是否能够解答数学题,助手回答肯定并表示可以解答各种数学题。用户提出了一个关于鸡和兔子数量的问题,助手通过列方程并解方程的方式给出了解答。接着用户提问了一个乘法题,助手进行了详细的计算并给出了答案。","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},{"id":null,"role":"user","content":"888X999等于多少","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},{"id":null,"role":"assistant","content":"好的,让我们计算一下888 x 999的值:\n\n888\nx999\n------\n888,000\n79,920,000\n71,904,000\n----------\n888,888,000\n\n过程是:\n1) 先把888乘以999的最后一位9,得到888 x 9 = 7,992\n2) 把7,992加上一个0,得到79,920,000\n3) 再把888乘以99的9,得到888 x 99 = 87,912\n4) 把87,912乘以10,得到879,120,000\n5) 把第2步和第4步的结果相加,得到888,888,000\n\n所以,888 x 999 = 888,888,000","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},{"id":null,"role":"user","content":"666x777是?","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},{"id":null,"role":"assistant","content":"好的,让我们计算666 x 777:\n\n666\nx777\n-------\n4,662\n53,292\n466,662\n---------\n517,722\n\n解释如下:\n1) 先计算666 x 7 = 4,662\n2) 把4,662加一个0,得53,292,000\n3) 再计算666 x 77 = 51,282\n4) 把51,282乘以10,得512,820,000\n5) 把第2步和第4步的结果相加,得517,722,000\n\n所以,666 x 777 = 517,722,000","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},{"id":null,"role":"user","content":"你好聪明啊","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null}],"modelEntity":null,"apiKeyEntity":null,"sessionEntity":null,"plugins":null,"resend":false,"assistantMessageId":null,"threadUuid":null,"lastMessage":{"id":null,"role":"user","content":"你好聪明啊","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},"presence_penalty":0.0,"frequency_penalty":0.0,"top_p":1.0,"max_tokens":null}

响应: {"success":false,"content":null,"tokenCount":0,"errorMessage":"{\"error\":{\"message\":\"messages: Unexpected role \\"system\\". The Messages API accepts a top-level system parameter, not \\"system\\" as an input message role. (request id: 2024031420285160774753140428724)\",\"type\":\"invalid_request_error\",\"param\":\"\",\"code\":null}}","inputTokens":-1,"outputTokens":-1}

zisanjun commented 6 months ago

目前使用的oneapi版本:v0.6.2-alpha.13

请求: {"model":"claude-1.3-100k","contentType":"Text","sessionUuid":null,"mask":null,"stream":"true","temperature":0.5,"n":null,"functions":null,"messages":[{"id":null,"role":"system","content":"You are ChatGPT, a large language model trained by OpenAI.\nKnowledge cutoff: 2021-09\nCurrent model: claude-1.3\nCurrent time: 2024-03-14","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},{"id":null,"role":"system","content":"这是历史聊天总结作为前情提要:对话总结:用户询问AI对文职类工作的看法,AI表示对文职工作持积极正面态度,认为文职工作稳定、适合不喜欢频繁学习新技术的人,工作压力小,工资和福利相对稳定。用户特别提到文员工作,AI进一步解释文员工作的稳定性、工作内容的固定性,以及晋升机会较少但工作稳定性高的特点。AI总结文员工作适合追求稳定生活的人,但需综合考虑工资水平。","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},{"id":null,"role":"user","content":"我觉得文员比较靠谱","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},{"id":null,"role":"assistant","content":"是的,文员工作属于典型的文职工作,比较靠谱稳定。具体来说:\n\n1. 文员工作的技能和知识要求比较固定,不需要频繁学习新的技能,比较适合那些不喜欢经常学习新的技术的人。\n\n2. 文员的工作内容和工作流程比较稳定,不会经常发生很大变化,所以工作强度和压力也比较小。\n\n3. 文员工作提供的工资和福利也比较稳定。虽然工资水平不高,但基本能保障生活,也有各种法定福利。\n\n4. 文员工作的晋升机会较少,但工作稳定性高。很多人可以长期在同一个文员岗位工作多年。\n\n5. 文员工作门槛较低,比较容易找到工作。只要有一定的语言文字功底和办公软件使用能力,基本上可以胜任文员工作。\n\n所以,总体来说,文员工作比较稳定可靠,工作压力小,比较适合那些追求稳定生活的人。如果对工作的发展和晋升机会要求不高,文员工作可以作为一个不错的选择。当然,如果工资水平无法满足生活需要,也需要综合考虑。","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},{"id":null,"role":"user","content":"是的,不过工资方面是看地方的","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},{"id":null,"role":"assistant","content":"json\n{\n \"error\": {\n \"message\": \"messages: Unexpected role \\\"system\\\". The Messages API accepts a top-level `system` parameter, not \\\"system\\\" as an input message role. (request id: 2024031420420164887999431360752)\",\n \"type\": \"invalid_request_error\",\n \"param\": \"\",\n \"code\": null\n }\n}\n","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},{"id":null,"role":"user","content":"?","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null}],"modelEntity":null,"apiKeyEntity":null,"sessionEntity":null,"plugins":null,"resend":false,"assistantMessageId":null,"threadUuid":null,"lastMessage":{"id":null,"role":"user","content":"?","hasName":false,"name":null,"tool_call_id":null,"function_call":null,"tool_calls":null},"presence_penalty":0.0,"frequency_penalty":0.0,"top_p":1.0,"max_tokens":null}

响应:

{"success":false,"content":null,"tokenCount":0,"errorMessage":"{\"error\":{\"message\":\"messages: Unexpected role \\"system\\". The Messages API accepts a top-level system parameter, not \\"system\\" as an input message role. (request id: 2024031420453130110263771958642)\",\"type\":\"invalid_request_error\",\"param\":\"\",\"code\":null}}","inputTokens":-1,"outputTokens":-1}

FoamCold commented 6 months ago

The Messages API accepts a top-level sysChat Completion API messages: Unexpected role "system". The Messages API accepts a top-levelsystemparameter, not "system" as an input message role. (request id: 202403180721225026027321890617)tem parameter, not "system" as an input message role

FoamCold commented 6 months ago

The Messages API accepts a top-level sysChat Completion API messages: Unexpected role "system". The Messages API accepts a top-levelsystemparameter, not "system" as an input message role. (request id: 202403180721225026027321890617)tem parameter, not "system" as an input message roleMessages API接受顶级 sysChat Completion API messages: Unexpected role "system". The Messages API accepts a top-level system parameter, not "system" as an input message role. (request id: 202403180721225026027321890617)tem 参数,而不是“system”作为输入消息角色

确实,我也遇到这个问题

FoamCold commented 6 months ago

试了下,就是只能第一条role: "system",第二条role: "user",第三条 role: "assistant",然后后续都user、assistant交替,不能第一条role: "system",第二条role: "system",也不能第一条role: "system",第二条role: "assistant",对于像SillyTavern这种交互就不行了,希望能尽快改善吧

L9qmzn commented 5 months ago

可以简单修改一下/relay/channel/anthropic/main.go第53行,把系统提示词拼接起来。 claudeRequest.System = "" for _, message := range textRequest.Messages { if message.Role == "system" { claudeRequest.System += message.StringContent() continue }

slot181 commented 3 months ago

+1,我发现这问题到今天还存在,chatbox在发送图片也会出现这个情况,酒馆就更不用说了,直接压根用不了……

hackerpayne commented 1 month ago

+1 同样的问题,求Fix

jerry-intrii commented 1 month ago

+1 cursor遇到相同問題

panthole commented 1 month ago

+1 求修复

E-sion commented 3 weeks ago

+1

00010110 commented 2 weeks ago

有计划修复吗?