eino icon indicating copy to clipboard operation
eino copied to clipboard

eino.RegisterServerHandlers 怎么实现流式输出呢

Open yangzinan opened this issue 2 months ago • 5 comments

在eino 使用好像没有这个方法

Image

是使用 EventConvertor 还是 OutputMessageConvertor 能给个例子吗

yangzinan avatar Oct 29 '25 23:10 yangzinan

我测试的这样是可以的不知道还有没有什么好的方法,这个看着比较笨啊

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
		},

yangzinan avatar Oct 30 '25 01:10 yangzinan

没太看明白,想要达到的效果是什么?

shentongmartin avatar Oct 30 '25 01:10 shentongmartin

Image就是要实现这样

yangzinan avatar Oct 30 '25 02:10 yangzinan

a2a ?

shentongmartin avatar Oct 30 '25 03:10 shentongmartin

是的 在RegisterServerHandlers 配上EventConvertor 不配置返回是这样的一次全返回了。配上就是上面图片那个样子流式返回了

Image

yangzinan avatar Oct 30 '25 08:10 yangzinan