zhangjh / gemini_sdk

Google gemini api's java implement
16 stars 2 forks source link

stream模式结束 #1

Closed vacuityv closed 5 months ago

vacuityv commented 5 months ago

有点搞不懂为啥要有这段:

image

这样会让用户难以判断输出结束,假设用这个[done]判断,如果恰好Gemini返回的content里面就正好是这个怎么办

zhangjh commented 5 months ago
  1. 这实际上是server-sent events的协议标准,你也可以参看一下ChatGpt的API文档 image 不过我这里的实现去除了前面的”data:“,值得商榷
  2. 你可以再仔细看一下这里的代码,这里的代码逻辑有个前置条件: bufferedReader.readLine() == null, 也就是说这里不存在用户的输出内容,所以你可以理解这个[done]就是我的框架内部自定义的结束标记:一种私有协议。
vacuityv commented 5 months ago

@zhangjh 我理解这段代码,我知道那里不含输出,问题就出在这里,在回调函数无法区分这个[done]是你加的还是Gemini真的返回了一个[done]

vacuityv commented 5 months ago

@zhangjh 而且data:[done]这个和单纯的[done]差挺多的其实,你去看看他右边的straming返回示例就知道了,就像你说的他是一个标准的一部分,所以你用curl来调用的话这个done都不会被显示出来

zhangjh commented 4 months ago

@zhangjh 我理解这段代码,我知道那里不含输出,问题就出在这里,在回调函数无法区分这个[done]是你加的还是Gemini真的返回了一个[done]

我理解你的疑问了,在输出内容仅包含跟框架预设的结束标记内容雷同的情况下(无论该结束标记是什么内容),确实会出现这种情况,当然这种概率是特别小的。SSE的标准也是同样。

@zhangjh 而且data:[done]这个和单纯的[done]差挺多的其实,你去看看他右边的straming返回示例就知道了,就像你说的他是一个标准的一部分,所以你用curl来调用的话这个done都不会被显示出来

你可以实际的调用看一下,结束标记内容仅是响应的普通的一部分 image