Closed eswulei closed 7 months ago
流式输出的 最终停止原因 可以通过函数的返回值 resp 来获取, resp 的数据类型就是完全按照 qwen 官方文档来实现的
// 回调函数获取 llm 流式文本输出
streamCallbackFn := func(ctx context.Context, chunk []byte) error {
fmt.Print(string(chunk))
return nil
}
req := &dashscopego.TextRequest{
Input: input,
StreamingFn: streamCallbackFn,
}
ctx := context.TODO()
resp, err := cli.CreateCompletion(ctx, req)
if err != nil {
panic(err)
}
// 获取最终结果: stop
log.Println("stop reason: ",resp.Output.Choices[0].FinishReason)
看这样是否符合你的需求呢??
补充:
stream-output 目前是仅提取了以下这个数据结构 中的message content 文本 ,
当需要 finish_reason / token_usage / request_id 时 都是在最终返回的 resp
中获取的
{
"output":{
"choices": [
{
"finish_reason":"stop",
"message": {
"role": "system",
"content": "如果你在中国,我推荐你去北京的颐和园 ... ... 适合散步和欣赏景色。",
}
}
]
"finish_reason":"stop"
},
"usage":{
"output_tokens":380,
"input_tokens":633
},
"request_id":"d89c06fb-46a1-47b6-acb9-bfb17f814969"
}
补充2: 这个库内部已经做了 finish_reason 的检查, 流式输出时碰到 finish_reason 不为空的情况会终止, 并在 resp 中返回了终止的原因。
if choice.FinishReason != "" && choice.FinishReason != "null" {
break
}
感谢!
现在的流式输出的输出内容是string,能否改为一个结构体,里面包含是否stop,这个在官方的python示例有这个功能的。