流式输出停止符的问题

BUG反馈 · 87 次浏览
dunkelsvL 创建于 9天6小时前

我用了自建的API转发服务 uni-api (https://github.com/yym68686/uni-api) 来使用gemini模型在quicker上进行API调用。

刚开始还算正常,最近在quicker上进行AI调用的时候出现了错误:

步骤(sys:ai)执行失败,原因:索引超出范围。必须为非负值并小于集合大小。 参数名: index
停止动作:索引超出范围。必须为非负值并小于集合大小。 参数名: index

AI调用时使用了流式输出到文本窗口,而错误是出现在文本窗口流式输出结束后发生的。然后我调出了 uni-api 的log:

猜测可能是quicker没有识别出流式输出的停止标志 "finish_reason": "stop" 导致最后一个输出token的响应没有index而出错。

经过询问 chatgpt(问的是AI,不是客服),流式输出的停止标志现在确实是 "finish_reason": "stop" ,而文档中提到的 <|endoftext|> 可能是以前非流式请求使用的停止标志符,也不知真假。

 


回复内容
CL 9天5小时前
#1

我搜了一下代码里没有这个,可能是其它原因。 如果方便的话可以把你的服务临时开一个端口,然后弄个动作我这里调试一下看看。

dunkelsvL 回复 CL 9天5小时前 :

因为是内网环境搭建的,不太方便……

顺便忘记提了,测试时的模型用的是gpt-4o类型的,然后关闭流式输出后就不再出错了,然后再把最终文本输出到窗口其实也还行。

https://platform.openai.com/docs/api-reference/chat-streaming 这是openai的API文档,也确认了是通过 finish_reason 来控制停止生成token。


flyingfeather 回复 CL 3天19小时前 :
closeai 转发的gpt api 同样遇到这个报错,在别的兼容chat api的客户端均无问题
CL 回复 flyingfeather 3天17小时前 :

closeai我测试了一下,有一些消息会缺失choices数据,看起来中转不是直接转发原始需求的。我等加个判断一下。

CL 回复 flyingfeather 1天8小时前 :

https://getquicker.net/Help/Versions 试下最新版看看。

CL 1天8小时前
#2

https://getquicker.net/Help/Versions 试下最新版看看。 

dunkelsvL 回复 CL 1天6小时前 :
确认已修复。感谢!
回复主贴