Reporter
把多个 Agent 的输出综合成一份用户能直接使用的结构化报告。
职责
| 负责 | 不负责 |
|---|---|
| 汇总终止节点输出 | 执行单个 Agent |
| 调用结果综合 Agent | 验证结构(verification) |
| 生成统一报告 | 验收与结算 |
| 保留来源引用 | 定义报告的业务口径 |
输入与输出
输入
- Task 下所有终止节点的结果
- 每个节点的
skillId、agentId - 可选的用户偏好(语言、详细程度)
输出
json
{
"summary": "该产品进入德国市场需要完成 4 项合规工作…",
"risks": [
{
"item": "缺少 WEEE 注册号",
"severity": "high",
"basis": "ElektroG §6",
"source": "shenzhen-compliance"
}
],
"missingDocuments": ["技术文件", "符合性声明"],
"nextActions": ["提交 WEEE 注册", "补充德语标签"],
"sources": [
{ "agentId": "shenzhen-compliance", "skillId": "ce-certification-review-v1" }
]
}处理流程
ReporterService.build(taskId)
├─ 读取节点结果
├─ 过滤失败 / 空结果
├─ 按节点顺序聚合
├─ 调用 platform-result-synthesis
│ └─ LLM 综合(EngineChatService)
├─ 校验输出结构
└─ 写入 Task / 返回结果综合 Agent 是 domain=platform 的内部 Agent,不计费。
设计要点
| 要点 | 说明 |
|---|---|
| 保留来源 | 每条结论标注来自哪个 Agent,便于追责 |
| 不吞失败 | 失败节点会显式标注,不静默丢弃 |
| 可重生成 | 报告可以从节点结果重新生成 |
| 语言 | 跟随用户输入语言 |
边界与限制
| 限制 | 说明 |
|---|---|
| 依赖 LLM | 综合质量受模型影响 |
| 不做事实核查 | 只做汇总与表达 |
| 无增量更新 | 节点结果变化后需重新生成 |
| 报告结构固定 | 新场景可能需要扩展字段 |
源码位置
libs/modules/src/reporter/
└── services/reporter.service.ts