one-api 请确保多轮请求以用户角色或功能响应结尾,

vx6bjr1n  于 3个月前  发布在  其他
关注(0)|答案(9)|浏览(46)

例行检查
[//]: # (方框内删除已有的空格,填 x 号

问题描述

{"error":{"message":"请确保多轮请求以用户角色或功能响应结尾。(请求ID: 20231218115733848767070nWkJNglT)","type":"","param":"","code":400}}

复现步骤
预期结果
相关截图

如果没有的话,请删除此节。

5us2dqdw

5us2dqdw1#

我昨天一开始也遇到了这个问题,我怀疑这跟文心一言一样,要求在多伦对话时,传入的列表必须是单数,不能是偶数。我自己在客户端编写了一个代码,当判断发过去的对话是偶数的情况下,就删除最前面的一条消息。直到现在还没有遇到报错。你也可以考虑看看是否能解决这个问题。

mrfwxfqh

mrfwxfqh2#

我也遇到了,应该不是个例。

xienkqul

xienkqul3#

我也遇到过这个问题,看起来像是多轮回话,同一个用户不能连续说多次,只能多角色相互交替发言。

ymzxtsji

ymzxtsji4#

要解决这个问题,您可以在Langchain中使用ConversationChainConversationBufferMemory。这就是我在尝试使用消息之前所使用的。
起初,我认为消息会随着我们追加消息而动态更新,但似乎它无法处理多于一个人类消息

ymdaylpp

ymdaylpp5#

或者尝试这个:babaohuang/GeminiProChat#28(评论)
我之前的评论并不完全正确(消息部分没有处理多条消息),而是应该将人类消息和AI消息的连续性结合起来,我在提供的链接中解释得更好。

wfauudbj

wfauudbj6#

你们使用的是哪个客户端?

sxpgvts3

sxpgvts37#

你们使用的是哪个客户端?
chatx和jb idea codegpt插件

oalqel3c

oalqel3c8#

我怎么会在这里结束?

u4dcyp6a

u4dcyp6a9#

根据当前的实现,只要系统消息和助手消息同时存在,就会发生错误。
one-api/relay/adaptor/gemini/main.go
第120行到第131行
| | // 如果系统消息是最后一条消息,我们需要添加一个虚拟模型消息,以使gemini正常工作 |
| | if shouldAddDummyModelMessage { |
| | geminiRequest.Contents=append(geminiRequest.Contents, ChatContent{ |
| | Role: "model", |
| | Parts: []Part{ |
| | { |
| | Text: "Okay", |
| | }, |
| | }, |
| | }) |
| | shouldAddDummyModelMessage=false |
| | } |
示例:

// 1. works
[
  { "role": "system", "content": "system_prompt" },
  { "role": "user", "content": "user_content" }
]
// ->
[
  { "role": "user", "content": "system_prompt" },
  { "role": "model", "content": "Okay" },
  { "role": "user", "content": "user_content" }
]

// 2. broken

[
  { "role": "system", "content": "system_prompt" },
  { "role": "assistant", "content": "xxxx" },
  { "role": "user", "content": "user_content" }
]
// ->
[
  { "role": "user", "content": "system_prompt" },
  { "role": "model", "content": "Okay" },
  { "role": "model", "content": "xxxx" },
  { "role": "user", "content": "user_content" }
]

相关问题