eino
eino copied to clipboard
eino.RegisterServerHandlers 怎么实现流式输出呢
在eino 使用好像没有这个方法
是使用 EventConvertor 还是 OutputMessageConvertor 能给个例子吗
我测试的这样是可以的不知道还有没有什么好的方法,这个看着比较笨啊
EventConvertor: func(ctx context.Context, stream *adk.AsyncIterator[*adk.AgentEvent], writer func(p models.ResponseEvent) error) (err error) {
for {
event, ok := stream.Next()
if !ok {
break
}
if event.Err != nil {
fmt.Println("err: ", event.Err)
break
}
if event.Output != nil && event.Output.MessageOutput != nil {
if event.Output.MessageOutput.Message != nil {
if event.Output.MessageOutput.Message.Content == "" {
continue
}
err = writer(models.ResponseEvent{
TaskContent: &models.TaskContent{
Status: models.TaskStatus{
State: models.TaskStateWorking,
Message: &models.Message{
Role: models.RoleAgent,
Parts: []models.Part{
{
Kind: models.PartKindText,
Text: &event.Output.MessageOutput.Message.Content,
},
},
},
},
},
})
}
if event.Output.MessageOutput.MessageStream != nil {
s := event.Output.MessageOutput.MessageStream
for {
msg, err := s.Recv()
if err != nil {
break
}
if msg.Content == "" {
continue
}
err = writer(models.ResponseEvent{
TaskContent: &models.TaskContent{
Status: models.TaskStatus{
State: models.TaskStateWorking,
Message: &models.Message{
Role: models.RoleAgent,
Parts: []models.Part{
{
Kind: models.PartKindText,
Text: &msg.Content,
},
},
},
},
},
})
}
}
}
}
return
},
没太看明白,想要达到的效果是什么?
就是要实现这样
a2a ?
是的 在RegisterServerHandlers 配上EventConvertor 不配置返回是这样的一次全返回了。配上就是上面图片那个样子流式返回了