被这个功能困扰了好久,一直没实现,因为网上的Gin框架实现的SSE都非常复杂,写成了一整套复杂的中间件,经过研究,写出了一套精简的实现。
SSE接口代码, 发送信息修改sendEvents内代码即可:
func ChatStreamSSE(ctx context.Context, c *gin.Context, req vo.ChatCompletionRequest) {
event := Event{
ConversationId: uuid.New().String(),
IsFinish: false,
IsReasoning: false,
}
stream, err := openai.NewChatCompletionStream(ctx, req)
if err != nil {
logger.Ex(ctx, tag, "NewChatCompletionStream:%+v", err)
event.Content = fmt.Sprintf("new chat completion stream failed. err:[%+v]", err)
event.IsFinish = true
c.SSEvent("data", event)
c.Writer.Flush()
return
}
defer stream.Close()
for {
streamData, streamErr := stream.Recv()
if streamErr != nil && !errors.Is(streamErr, io.EOF) && streamErr.Error() != "EOF" {
logger.Ex(ctx, tag, "stream data error: %v", streamErr)
event.Content = fmt.Sprintf("stream data error: %v", streamErr)
event.IsFinish = true
c.SSEvent("data", event)
c.Writer.Flush()
}
c.SSEvent("data", event)
c.Writer.Flush()
}
return
}
如果因为害怕失败,而不去努力,那就不会有能够成功的人。
早点睡吧,早睡早起身体好