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

Gemini的流式返回存在问题 #1408

Closed manjieqi closed 3 weeks ago

manjieqi commented 2 months ago

例行检查

问题描述 Gemini仅返回几个字,因为它们把"finish_reason":"stop"作为回答停止的信号 如果openai的返回格式是标准的,那Gemini的流式还需要改一下

Gemini的回答,可以看见每一个部分都有stop

Snipaste_2024-05-04_13-13-19

GPT的回答,仅最后的一个部分有stop

Snipaste_2024-05-04_13-14-14
RexWzh commented 1 month ago

+1 似乎是最新版引入的问题,我之前使用是正常的

data: {"id":"","object":"chat.completion.chunk","created":0,"model":"gemini","choices":[{"index":0,"delta":{"content":"我是 Gemini,一个由 Google 开发的多模态 AI 模型。作为一个大型语言"},"finish_reason":"stop"}]}

data: {"id":"","object":"chat.completion.chunk","created":0,"model":"gemini","choices":[{"index":0,"delta":{"content":"模型,我接受了大量文本数据的训练,能够理解和生成人类语言、回答问题并提供信息。我不断学习和完善,致力于提供全面"},"finish_reason":"stop"}]}

data: {"id":"","object":"chat.completion.chunk","created":0,"model":"gemini","choices":[{"index":0,"delta":{"content":"且有帮助的响应。"},"finish_reason":"stop"}]}

data: [DONE]
SLF-Heisenberg commented 1 month ago

我也遇到了 同样的问题 每一次的 调用结果 都是 "finish_reason": "stop" 但是 只有 最后一个包分发完毕的 才是 "stop" image

youjin-git commented 1 month ago

这个bug还没修复吗?

SLF-Heisenberg commented 1 month ago

看样子还没有解决,bug状态是open

RexWzh commented 1 month ago

看样子还没有解决,bug状态是open

回退到 v0.6.6-alpha 可以,但会少一些近期更新的东西。项目维护的人好像很少,更新功能的同时,可能会引入一些 bug。

要么另外开个稳定的 one-api 来过渡,或者接入 litellmAI-Gateway

SLF-Heisenberg commented 1 month ago

ok 非常感谢~

mxdlzg commented 1 month ago

早期的版本应该没有返回FinishReason?所以流不会被截断。 但是在v0.6.7左右的版本修复stream流问题时这部分被修正了https://github.com/songquanpeng/one-api/pull/1382,引入了FinishReason字段。涉及问题https://github.com/songquanpeng/one-api/issues/1345、 https://github.com/songquanpeng/one-api/pull/1328。 但是有个比较尴尬的地方在于,实际上Gemini的API本身就在每个流message中返回STOP(看起来跟早期的Gemini的表现不太一致,不知道为什么会出现这个问题)。

因为是流式返回,没法准确预知哪个是最后一条message,只能暂时去掉FinishReason字段了。#1477

SLF-Heisenberg commented 1 month ago

早期的版本应该没有返回FinishReason?所以流不会被截断。 但是在v0.6.7左右的版本修复stream流问题时这部分被修正了https://github.com/songquanpeng/one-api/pull/1382,引入了FinishReason字段。涉及问题https://github.com/songquanpeng/one-api/issues/1345、 https://github.com/songquanpeng/one-api/pull/1328。 但是有个比较尴尬的地方在于,实际上Gemini的API本身就在每个流message中返回STOP(看起来跟早期的Gemini的表现不太一致,不知道为什么会出现这个问题)。

因为是流式返回,没法准确预知哪个是最后一条message,只能暂时去掉FinishReason字段了。#1477

您的描述 很有意义,我在尝试把这个 问题 返回给谷歌 ~ 希望会有所答复~

manjieqi commented 4 weeks ago

ChatGPT NextWeb的请求是这样的: POST /v1beta/models/gemini-1.5-pro:streamGenerateContent?key=xxxxxxxx OneAPI的请求是这样的: POST /v1beta/models/gemini-1.5-pro:streamGenerateContent?alt=sse

怎么拉取请求还没有合并啊