package eino import ( "context" "strings" "testing" "github.com/sundynix/sundynix-dispatcher/internal/harness" "github.com/sundynix/sundynix-dispatcher/internal/llm" "github.com/sundynix/sundynix-shared/contract" ) // TestAgentCollaborationPassesOutput 验证编排式多智能体接力: // agent1 的产出注入 agent2 的上下文,agent2 基于它继续;最终成稿 = 下游 agent 的产出。 func TestAgentCollaborationPassesOutput(t *testing.T) { graph := `{"version":"1","nodes":[ {"id":"a1","kind":"agent","config":{"system":"研究"}}, {"id":"a2","kind":"agent","config":{"system":"撰写"}} ],"edges":[{"source":"a1","target":"a2"}]}` saw := false ll := &fakeLLM{ready: true, stream: func(m []llm.ChatMessage) string { var sys string for _, x := range m { if x.Role == "system" { sys = x.Content } } if strings.Contains(sys, "研究产出XYZ") { // agent1 的产出出现在 agent2 的 system → 接力成功 saw = true return "最终报告:基于上游研究撰写" } return "研究产出XYZ" }} o := &Orchestrator{pool: ll, breaker: harness.NewCircuitBreaker(), sink: &fakeSink{}} ans, _, err := o.runGraph(context.Background(), &contract.Task{ID: "tc", Graph: []byte(graph)}, &execTracer{}) if err != nil { t.Fatal(err) } if !saw { t.Fatal("下游 agent 未看到上游 agent 的产出——协作没接力") } if !strings.Contains(ans, "最终报告") { t.Fatalf("最终成稿应为下游 agent 产出,得 %q", ans) } }