17.5 报告生成与人工审阅
面向经管学生、研究者与从业者的 AI 智能体设计教材

分析 agent 产出的是一组结构化中间文件,不是可以直接交给投资委员会的备忘录。报告撰写 agent 的任务是把散落在 analysis/ 目录下的基本面报告、估值报告和行业报告整合为一份完整的投资备忘录(Investment Memo),同时确保每个数字都有来源标注、每条结论都有分析支撑。
报告撰写 agent 的工作方式
report-writer 读取 analysis/ 下所有分析报告,按投资备忘录模板生成初稿,存入 output/memo_draft.md。模板结构固定为六个板块:
| 板块 | 内容 | 数据来源 |
|---|---|---|
| 投资概要 | 一段话概括标的、评级、核心理由 | 综合三份分析报告 |
| 核心逻辑 | 3-5 条支撑投资判断的关键论据 | 行业报告 + 基本面报告 |
| 财务分析 | 关键指标表(ROE、净利率、营收增速等) | 基本面报告 |
| 估值分析 | DCF、可比公司、可比交易三种方法的结果 | 估值报告 |
| 风险因素 | 按影响程度排序的 3-5 条核心风险 | 三份报告的风险章节 |
| 结论与建议 | 评级(增持/中性/减持)+ 目标价区间 + 关键假设 | 综合判断 |
下面是 report-writer 的 agent.md 定义:
---
name: report-writer
description: 投资备忘录撰写子代理。读取 analysis/ 下所有分析报告,按模板生成投资备忘录初稿。每个数字必须标注来源文件和页码。
model: sonnet
tools: Read, Write
---
你是投资备忘录的撰写方。你的任务是整合分析结果,不做独立判断。
## 工作流
1. 读取 analysis/ 下所有 .md 文件,提取关键数据和结论
2. 按 CLAUDE.md 中定义的备忘录模板生成六板块初稿
3. 每个数字后面标注来源:[来源: fundamental_report.md, 表2]
4. 风险因素按影响程度排序,标注概率和影响等级
5. 写入 output/memo_draft.md,末尾附上免责声明
## 关键原则
- 不编造任何数字,所有数据必须可追溯到 analysis/ 中的源文件
- 不同分析维度的结论有冲突时,如实列出分歧,不擅自取舍
- 结论措辞不能有"建议买入""应该卖出"等投资建议用语
- 末尾必须包含"本报告仅供研究参考,不构成投资建议"免责声明
report-writer 只有 Read 和 Write 权限,没有 Bash。它不能跑任何计算脚本,只能基于已有分析报告做文本整合。这个权限设计是刻意的:撰写阶段不应再产生新数据,所有数字都应来自上游 agent 的产出。
人在回路的五个关键节点
投研流水线从信息采集到报告交付,有五个节点必须由分析师亲自把关。
| 节点 | 检查内容 | 为什么不能自动化 |
|---|---|---|
| 1. 数据源确认 | 采集的数据是否齐全、来源是否可靠 | AI 无法判断数据源的权威性和时效性 |
| 2. 核心假设审查 | 增长率、折现率、终值倍数等关键参数 | 这些参数直接决定估值结论,需要行业经验 |
| 3. 分析逻辑审查 | 因果关系是否成立、推理链条是否完整 | AI 可能把相关性当因果性 |
| 4. 结论措辞审查 | 是否过度自信、是否有误导性表述 | 措辞分寸涉及合规风险 |
| 5. 免责声明合规 | 免责声明是否完整、是否符合监管要求 | 法律文本需要专业审核 |
这五个节点的共同特征是:错误成本高、判断标准依赖领域经验、无法用规则自动检验。Hooks 可以在这些节点强制暂停,把决策权交还给分析师。
Hooks 做质量门禁
下面这份 hooks 配置覆盖了报告生成阶段的三类检查:
{
"hooks": {
"PostToolUse": [
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/check-disclaimer.sh \"$CLAUDE_FILE_PATH\""
}
]
},
{
"matcher": "Write",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/check-source-tag.sh \"$CLAUDE_FILE_PATH\""
}
]
}
],
"Stop": [
{
"matcher": "memo_draft",
"hooks": [
{
"type": "command",
"command": "echo '投资备忘录初稿已生成,请人工审阅 output/memo_draft.md 后再继续'"
}
]
}
]
}
}三个 Hook 各管一类风险。第一个 PostToolUse(Write) 在任何文件写入 output/ 后扫描是否包含免责声明,缺了就 exit 2 拦截。第二个 PostToolUse(Write) 检查正文中的数字是否带 [来源: ...] 标注,未标注的数字会触发提示回灌给模型。第三个 Stop 在会话结束输出中匹配到 memo_draft 关键词时打印提示,要求分析师人工审阅备忘录初稿。
投资备忘录的末尾必须包含免责声明。但免责声明不只是一句法律套话。分析师需要确认:备忘录正文中是否有任何措辞暗示了投资建议(如”建议增持”“值得买入”)。即使免责声明存在,正文中的建议性措辞仍可能构成合规风险。Hook 能检查免责声明是否存在,但正文措辞的分寸只能靠人审。
迭代修改闭环
分析师审阅备忘录初稿后,可以直接在 Claude Code 中发出修改指令:
output/memo_draft.md 的估值分析板块有两个问题:第一,DCF 的终值增长率用了 4%,偏高,改成 3%,重新计算估值区间;第二,风险因素里缺少政策风险,补充新能源补贴退坡的影响。修改后更新免责声明的日期。
report-writer 根据修改指令更新备忘录,PostToolUse Hook 再次检查免责声明和来源标注。分析师确认无误后,将 memo_draft.md 重命名为 memo_final.md,完成交付。
审阅投资备忘录时,按以下顺序检查效率最高:
- 先看数字:关键财务指标是否与原始财报一致
- 再看逻辑:核心投资论据的因果链条是否成立
- 然后看一致性:不同板块的结论是否矛盾
- 最后看措辞:是否有过度自信或误导性表述
- 收尾看合规:免责声明是否完整
整个报告生成阶段的核心原则是:AI 做整合和格式化,人做判断和把关。report-writer 负责把散落的分析结果拼成一份结构完整的备忘录,分析师负责确认每个数字、每条逻辑、每句措辞都经得起投资委员会的追问。