Do NOT run stage2() until ALL of the following are complete:
1. You have READ .cache/{ticker}/panel.json and reviewed the 52 skeleton scores
2. You have SPAWNED sub-agents (or personally analyzed) each investor group
3. You have MERGED agent results back into panel.json with updated headline/reasoning/score
4. You have WRITTEN agent_analysis.json with dim_commentary (≥5 dimensions) + panel_insights
5. You have SET agent_reviewed: true in agent_analysis.json
Skipping this step produces a report with mechanical rule-engine output instead of
genuine investment analysis. The whole point of this plugin is agent-driven judgment.
</HARD-GATE>
核心是:
- 读
.cache/{ticker}/panel.json 中 65 人的骨架分
- Spawn 4 个并行 sub-agent 分组 role-play 投资者——让他们真正"扮演"巴菲特/赵老哥思考
- 用 agent 的判断覆盖 panel.json 中的 headline/reasoning/score
- 写
agent_analysis.json 到 .cache/{ticker}/ — 这是闭环的关键!
agent_analysis.json 必填字段(缺字段 stage2 会 schema warning/error):
| 字段 |
要求 |
触发校验 |
agent_reviewed |
必须 true |
⚠️ 缺 → warning |
dim_commentary |
至少 5 个维度,每条 ≥20 字(引用具体数字,禁止空泛) |
🔴 <20 字 → warning |
panel_insights |
≥30 字,评委投票分布 + 多空分歧分析 |
⚠️ <30 字 → warning |
great_divide_override |
punchline(≥10 字) + bull_say_rounds(≥3 条) + bear_say_rounds(≥3 条) |
🔴 缺字段 → error |
narrative_override.core_conclusion |
≥20 字综合定论 |
⚠️ <20 字 → warning |
narrative_override.risks |
≥3 条风险 |
⚠️ <3 条 → warning |
narrative_override.buy_zones |
必须含 value/growth/technical/youzi 四个 key,每个 key 内含 price(数值) + rationale(≥5 字解释) |
🔴 缺 key → error / ⚠️ 缺子字段 → warning |
qualitative_deep_dive |
覆盖 3_macro/7_industry/8_materials/9_futures/13_policy/15_events 共 6 维。每维含:evidence 数组(≥2 条 {source, url, finding, retrieved_at})、associations 跨域因果链(6 维合计 ≥3 条 {link_to, chain_id, causal_chain, estimated_impact})、conclusion(1-2 句)。详见 references/task2.5-qualitative-deep-dive.md 第 5 节 |
🔴 evidence 非 list → error / ⚠️ associations<3 → warning |
data_gap_acknowledged |
v2.3+ 推荐。dict 格式 {"dim_key": "已尝试 X 但失败的原因"}。标记数据采集失败但 agent 已知晓的维度,HTML 报告显示 ⚠️ 橙色徽章而非空白 |
🔴 类型非 dict → error |
agent_analysis.json 格式
{
"agent_reviewed": true,
"dim_commentary": {
"0_basic": "建筑央企,主营市政/房建。市值偏小,营收稳但利润率极薄(1.2%),典型低毛利基建股。",
"1_financials": "ROE 不到 8%,连续 3 年下滑。现金流波动大,应收账款占营收比偏高,回款风险明显。",
"2_kline": "均线空头排列,MACD 死叉,量能萎缩。典型下跌趋势,不满足 Stage 2 条件。"
},
"panel_insights": "65 评委中,价值派集体看空(ROE 太低+无护城河),游资中性(有地方城投概念但板块热度不够),只有少数逆向投资者给出中性偏多。整体共识 32%,偏弱。",
"great_divide_override": {
"punchline": "DCF 说高估 23%,但城投重组预期让 LBO 视角的 IRR 仍有 18% — 这个冲突值得关注。",
"bull_say_rounds": [
"宁波城投整合预期 + 地方债化解受益,估值有弹性",
"PB 仅 0.9x,历史底部区间,安全边际够",
"综合看 62 分,城投故事讲通了就是翻倍"
],
"bear_say_rounds": [
"ROE 连降 3 年,基建毛利率 8% 是天花板",
"应收账款 / 营收 > 60%,回款是生死线",
"综合看 35 分,低质量资产不值得冒险"
]
},
"narrative_override": {
"core_conclusion": "宁波建工 · 48 分 · 谨慎。典型地方基建股,ROE 不到 8%、毛利率 8%,靠城投整合讲故事。65 位大佬 12 人看多,29 人看空。DCF 高估 23%,但 LBO 压力测试 IRR 18% — 博弈价值存在但风险更大。",
"risks": [
"ROE 持续下滑,连续 3 年低于 8%",
"应收账款占比过高,回款周期拉长",
"地方财政压力传导至工程款支付",
"行业竞争加剧,中标价格战",
"房建业务受地产下行拖累"
],
"buy_zones": {
"value": {"price": 3.85, "rationale": "PB 0.8x · 历史底部 + 净资产折价"},
"growth": {"price": 4.10, "rationale": "城投整合落地前的博弈价"},
"technical": {"price": 4.25, "rationale": "MA120 支撑位 · 需放量确认"},
"youzi": {"price": 4.50, "rationale": "城投板块联动时的短线切入点"}
}
}
}
stage2() 会自动读取 agent_analysis.json,合并到 synthesis 中。 Agent 写入的字段优先级高于脚本生成的 stub。
Stage 2 · 生成报告
python -c "from run_real_test import stage2; stage2('<ticker>')"
Stage 2 读取你更新后的 panel.json + agent_analysis.json,合并生成 HTML 报告。
如果没有 agent_analysis.json,退化为纯脚本模式(会打印警告)。
快速模式(跳过 agent 介入)
如果用户说"快速分析"或时间紧:
cd <repo_root>
python run.py <股票> --no-browser
这会 stage1 + stage2 一把跑完,不做 agent 分析。速度快但评委判断全是规则引擎的机械输出。
🚀 详细流程(run.py 跑完后的人工审查)
第 0 步 · 识别股票
run.py 已经自动识别了 ticker 并跑完所有 Task
- 读
.cache/{ticker}/raw_data.json 确认数据
- 向用户汇报:"{name} ({ticker}) 分析完成,正在审查数据质量..."
Task 1-3 · 已由 run.py 自动完成
run.py 内部执行了:
这个脚本会:
- Wave 1 快速 fetcher(basic/kline/financials/valuation)
- Wave 2 慢速 fetcher(research/events/macro/industry/materials/policy/sentiment/trap)
- Wave 3 特殊维度(fund_managers, similar_stocks)
- Task 1.5 自动跑:compute_dim_20/21/22 (DCF/Comps/LBO/3-Stmt/IC Memo/Porter/…)
- 数据完整性校验(
lib/data_integrity.py)
- 65 评委量化引擎自动执行
脚本跑完后你读 .cache/{ticker}/raw_data.json,向用户汇报:
- 数据快照时间 + 市场状态
- 完整性报告(
_integrity 字段)
- 有多少个 fallback 维度
- Task 1.5 的核心输出预览
🧠 逐维数据质量审查(每一步都必须 agent 介入)
Do NOT proceed to Stage 2 until you have personally inspected EVERY dimension's data
and fixed any garbage. Scripts collect data, YOU guarantee quality.
If a dimension has irrelevant content (city tourism guides for a stock analysis),
you MUST re-search and replace the data yourself.
脚本只是第一道粗搜。DuckDuckGo 中文搜索经常返回无关结果(搜"宁波建工"返回"宁波旅游攻略")。你必须逐维审查 + 修复:
审查清单(每条都要过)
| 维度 |
检查什么 |
垃圾特征 |
你怎么修 |
| 0_basic |
name/industry 是否正确 |
industry=None |
你 web search "{code} 所属行业 主营业务" 补上 |
| 5_chain |
upstream/downstream 是否是这家公司的 |
文字截断或无关 |
web search "{name} 上游供应商 下游客户" 重写 |
| 7_industry |
行业增速/TAM 有没有数据 |
全是默认值或空 |
web search "{industry} 行业规模 增速 2026" |
| 8_materials |
原材料描述是否相关 |
和主营无关 |
web search "{name} 原材料 成本构成" |
| 13_policy |
政策是否与该公司/行业相关 |
搜到无关政策 |
web search "{industry} 最新政策 2026" |
| 14_moat |
文字是否是公司分析 |
出现"拼音"、"字典释义"、"汉字演变" |
web search "{name} 竞争优势 核心技术 壁垒" |
| 15_events |
事件是否与这家公司相关 |
"如何评价宁波"、"宁波旅游"、城市生活指南 |
web search "{name} {code} 最新公告 合同 中标 研发" |
| 17_sentiment |
舆情是否在说这家公司 |
短公司名匹配到同名无关内容 |
web search "site:xueqiu.com {name} 股票" |
| 3_macro |
宏观环境描述是否有内容 |
全是空或默认 |
web search "中国 {industry} 宏观环境 利率 2026" |
| 同行对比 |
similar_stocks 是否同行业 |
建筑股配了光学同行 |
检查行业是否正确,手动指定正确同行 |
审查流程
for each dimension in raw_data.dimensions:
1. 读数据 → 肉眼扫一遍文字内容
2. if 内容与公司主营无关 or 明显是垃圾:
→ web search 重新搜(用公司名 + 行业关键词)
→ 用搜索结果替换 raw_data 中的内容
3. if 数据完全缺失:
→ web search 补充
→ 如果搜不到 → 在报告中标注"数据缺失"而非留空
4. if 数据看起来合理:
→ 通过,下一个维度
重搜模板
当你发现某个维度数据有问题时,用 web search 重搜:
事件驱动(最容易出垃圾):
搜索 "{公司全称} {股票代码} 最新公告 合同中标 研发进展 2026"
不要搜 "{城市名}"——只搜公司名和代码
宏观环境(脚本经常搜不到):
搜索 "中国 {行业} 宏观环境 利率政策 景气度 2026"
护城河(容易搜到字典页):
搜索 "{公司名} 核心竞争力 技术壁垒 市场份额 护城河"
舆情(短名容易误匹配):
搜索 "site:xueqiu.com {股票代码}" 或 "site:guba.eastmoney.com {股票代码}"
数据缺失时的升级策略
脚本拿不到数据时,不要留空,按优先级升级:
- Web search(最快)— 用 WebSearch tool 直接搜
- 浏览器搜索(更准)— 用 Chrome/browser tool 打开东方财富/雪球,手动查数据
- 计算推导(兜底)— 从已有数据推算(如 从营收和净利算净利率)
- 标注缺失(最后手段)— 在报告中明确写"该维度数据暂缺",不要假装有数据
每个维度都要有内容。如果 22 个维度里有超过 3 个是空的或垃圾,你的报告就是不合格的。
原则:脚本是你的数据采集助手,但你是质量把关人。垃圾数据进报告 = 你的失职。
🧠 你的判断环节(Task 1.5 假设审查)
脚本跑 DCF / LBO / 3-Stmt 用的是默认假设(见 references/task1.5-institutional-modeling.md):
- Stage 1 growth 10% · Stage 2 growth 5% · terminal g 2.5%
- Beta 1.0 · target debt ratio 30% · tax 25%
你必须审视这些默认值对这只股是否合理:
- 如果是光学/半导体 → beta 应该 1.3+,stage1_growth 可能 15-20%
- 如果是消费白马 → terminal g 可以给到 3%,beta 可以 0.8
- 如果是 ST / 周期低谷 → stage1_growth 负值,别用 10%
如果默认假设明显不对,你应该:
- 在 Task 4 的叙事里明说: "默认 DCF 用 stage1 10% 偏低,行业实际 18%"
- 或重跑一次:
from lib.fin_models import compute_dcf
adjusted = compute_dcf(features, assumptions={"stage1_growth": 0.18, "beta": 1.3})
将调整后的数字写入 synthesis.json 的 adjusted_dcf 字段供报告引用。
Task 2 · 22 维打分 + Agent 定性判断 (🤖 脚本 + 🧠 你)
脚本部分:score_dimensions(raw) 给每个维度一个 1-10 打分 + weight。
🧠 你的判断环节(最重要 — 不能跳过)
脚本的打分是"看数字给分",但很多维度需要你真正理解背后的故事。
推荐做法:对关键维度(财报 / 估值 / 护城河 / 行业),spawn 一个 sub-agent 去做 web search,搜索这家公司的最新深度分析文章:
Agent prompt:
搜索 "{company_name}" 的最新深度分析,重点关注:
1. 最近一个季度的业绩亮点和隐忧
2. 行业竞争格局变化
3. 管理层最近的公开表态
4. 券商研报的核心观点分歧
来源:雪球 / 东方财富 / 券商研报 / 财经媒体
用搜索结果来写每个维度的定性评语——这样你的评语是基于真实信息的判断,不是对着数字编故事。
每个维度你都要写一条 1-2 句话的定性评语,回答 5 个问题:
- 数据可信吗? (数据源 / 时效 / fallback 比例)
- 数字背后的故事是什么? (光看 ROE 11.8% 不够 — 为什么从 18% 掉到 11.8%?)
- 与同行比怎么样? (peer comparison 里它排第几)
- 有哪些结构性问题? (一次性损益 / 关联交易 / 存货堆积)
- 对论点影响大吗? (这维度该加权还是降权)
把你的评语写到 synthesis.json 的 dim_commentary 字段,格式:
"dim_commentary": {
"1_financials": "ROE 从 2021 年的 18% 掉到 2024 年的 11.8%,主因是…(你的解读)",
"2_kline": "Stage 2 但距 60 日高点仅 -5%,动量接近顶部…",
...
}
没有评语的维度会被标红显示 ⚠️ 未分析,所以别跳过。
Task 3 · 65 评委审判 (🧠 Agent 主导 · 规则引擎仅为参考)
核心原则:每个投资者的判断不是"跑公式",而是 Claude 真正站在这个人的角度思考。规则引擎给出量化参考分,最终判断由你做。
详细架构见 references/task3-agent-evaluation.md
Step 3.1 · 跑规则引擎获取骨架分
run_real_test.py 已经自动完成了三层评估(investor_knowledge.py 现实检验 → investor_criteria.py 规则打分 → 合成)。读 .cache/{ticker}/panel.json 拿到结果。
Step 3.2 · Spawn 并行 Sub-Agent(核心步骤)
你必须 spawn 4 个并行 sub-agent(用 Agent tool),每个负责一组投资者。不是让他们跑脚本,而是让他们 role-play 这些投资者做判断:
Agent 1 · 价值 + 成长派(巴菲特/格雷厄姆/费雪/芒格/邓普顿/卡拉曼/林奇/欧奈尔/蒂尔/木头姐 · 10 人)
你要扮演 10 位投资大佬,逐一对 {stock_name} ({ticker}) 给出判断。
公司数据摘要:
{raw_data 的关键数据:价格/PE/ROE/行业/护城河/FCF/增速/估值分位...}
规则引擎参考分(仅供参考,你可以覆盖):
{每人的 rule_score + pass_rules + fail_rules}
真实世界信息:
{investor_knowledge 里的持仓/行业亲和度}
要求:
1. 对每个人,先想"如果我是他,看到这些数据,我会怎么想?"
2. 巴菲特看苹果 → 他实际持有,这比任何规则都重要
3. 格雷厄姆看科技股 → PE > 15 他就不买,但要解释 WHY,不是只说数字
4. 木头姐看量子 → 她会兴奋,看传统制造 → 她会说"不在我们平台里"
5. 每人输出: {investor_id, signal, score, headline(引用数字), reasoning(2-3句)}
Agent 2 · 宏观 + 技术派(索罗斯/达里奥/马克斯/德鲁肯米勒/罗伯逊 + 利弗莫尔/米内尔维尼/达瓦斯/江恩 · 9 人)
宏观派关心:利率周期/汇率/地缘/大宗商品 对这只票的影响
技术派关心:Stage/均线排列/MACD/成交量/距高点距离
数据:{macro_dim + kline_dim 摘要}
Agent 3 · 中国价投 + 量化(段永平/张坤/朱少醒/谢治宇/冯柳/邓晓峰 + 西蒙斯/索普/肖 · 9 人)
中国价投关心:好生意+好价格+好管理,长期持有
量化关心:因子暴露(动量/价值/质量/波动率)
数据:{financials + valuation + moat 摘要}
真实持仓:{段永平持有苹果/茅台/腾讯,张坤重仓白酒...}
Agent 4 · 游资组(23 人 — 只有 A 股才需要 spawn)
如果这只票不是 A 股 → 直接输出 23 人全部 "skip: 不看{market}市场"
如果是 A 股:
- 市值是否在各人射程内?(赵老哥 > 20 亿、章盟主 > 200 亿...)
- 龙虎榜数据:{lhb_dim}
- 最近涨停板:{kline 最近连板情况}
- 板块热度:{sentiment}
- 每人风格不同:赵老哥打板/章盟主趋势/炒股养家情绪/佛山无影脚快进快出
Step 3.3 · 合并 Sub-Agent 结果
4 个 agent 返回后,你逐一把他们的 {signal, score, headline, reasoning} 覆盖到 panel.json 对应的投资者上。
如果 sub-agent 给的分和规则引擎差 > 30 分,在 panel_insights 里标记为"分歧点"——这本身是有价值的信息(说明量化指标和主观判断不一致)。
Step 3.4 · 整体审查
合并后检查:
- Great Divide 选角:最高分的 bull 和最低分的 bear 各是谁?他们的 headline 有没有说服力?
- 派系一致性:价值派全看空但技术派全看多 → 这是结构性分歧,写进 synthesis
- 异常值:有没有谁的分数明显不合理?(比如巴菲特给苹果 0 分 — 这在新架构下不应该发生了)
- Skip 统计:多少人 skip 了?如果分析美股,23 个游资全 skip 是正常的
将观察写进 synthesis.json 的 panel_insights。
Task 4 · 综合研判 + 叙事合成 (🧠 你主导)
这是整个流程里最依赖你判断的 Task。脚本只给你原材料,最终叙事必须你写。
🧠 你必须完成的 5 件事
4.1 构建 Great Divide(多空大分歧)
找出最有说服力的多方和最有说服力的空方:
- 从 panel 里选 bull 得分最高 + bear 得分最低的两人
- 读他们的
pass_rules 和 fail_rules
- 让他们"辩论" 3 轮(每轮 2 句话),引用具体数字
4.2 写 3 条核心结论
用 "但是" 结构,不要和稀泥:
- ✅ "ROE 连续 6 年盈利但从未破 15%,典型的长期平庸。" — 有定论
- ❌ "ROE 有起伏,需要观察。" — 废话
4.3 估值三角验证
- DCF 说什么?(dim 20)
- Comps 说什么?
- LBO 说什么?
- 三者冲突时,写出冲突并给出你的解读
4.4 催化剂 + 风险排序
- 从 dim 21
catalyst_calendar 取未来 60 天高影响事件
- 按概率 × 影响度排序 Top 3 催化剂
- 再挑 Top 3 风险(来自 dim 22 IC Memo 的 risks_mitigants)
4.5 四派系买入区间
给出 4 个有说服力的价位:
- 价值派:DCF 内在价 × 0.85 (要 15% 安全边际)
- 成长派:3 年 EPS × 中位数 PE
- 技术派:60 日均线附近 或 Stage 2 起涨点
- 游资派:龙虎榜集中区间
每个价位必须附一句解释。
写入(v2.2 闭环机制)
以上 5 件事全部写入 .cache/{ticker}/agent_analysis.json(不是直接写 synthesis.json!)。
stage2() 的 generate_synthesis() 会自动读取 agent_analysis.json 并合并:
dim_commentary → 替换脚本占位符
panel_insights → 写入 synthesis
great_divide_override → 替换脚本生成的辩论轮次和金句
narrative_override.core_conclusion → 替换脚本结论
narrative_override.risks → 替换脚本风险
narrative_override.buy_zones → 替换脚本买入区间
agent_reviewed: true → 标记为 agent 已审查
如果你直接写 synthesis.json,stage2() 会覆盖它。 必须写 agent_analysis.json,stage2 会合并。
Task 5 · 报告组装 (🤖 脚本 + 🧠 你的金句)
脚本部分:
python scripts/assemble_report.py {ticker}
python scripts/inline_assets.py {ticker} # 生成自包含 HTML
python scripts/render_share_card.py {ticker} # 朋友圈 PNG
python scripts/render_war_report.py {ticker} # 战报 PNG
🧠 你的金句审查
在调 assemble_report 之前,检查一遍 synthesis.json 中这 5 个字段:
| 字段 |
检查点 |
great_divide.punchline |
是不是一句能传播的话?有冲突感吗?引用数字了吗? |
dashboard.core_conclusion |
1-2 句结论,必须有定论 |
debate.rounds[*].bull_say / bear_say |
每轮必须引用具体数字 |
buy_zones.*.rationale |
每个价位必须给出计算逻辑(不能只写"基于技术面") |
risks[*] |
风险必须具体到数字 / 事件 |
任何一个字段没达标,直接重写后再调脚本。
完成验证
生成的 HTML 报告打开必须满足:
- 无 console error
- 22 维深度卡全部出现(包含新增的 dim 20/21/22)
- 65 评委聊天室 + 审判席都渲染
- Great Divide punchline 不为空
- 杀猪盘等级显示
- 文件大小 > 400 KB(低于说明有大段缺失)
🖥️ Codex / 远程环境适配
如果你在 Codex / Docker / SSH 等无 GUI 环境中运行,使用 run.py 根入口:
# 在仓库根目录
python run.py <股票代码> # 自动检测环境,无浏览器时给路径
python run.py <股票代码> --remote # 完成后启动 Cloudflare Tunnel,生成公网链接
python run.py <股票代码> --no-browser # 强制不打开浏览器
--remote 模式的工作流:
- 正常跑完 6 个 Task,生成 HTML 报告
- 自动启动本地 HTTP 服务器(端口 8976)
- 调用
cloudflared tunnel 映射到 https://xxx.trycloudflare.com
- 输出公网链接 — 用户手机扫码 / 发微信就能看报告
- Ctrl+C 停止服务
Task 0 可选步骤:询问用户环境
在开始分析之前,你可以先问用户:
"你现在在电脑前吗?如果不在,我可以生成一个公网链接方便手机查看。"
如果用户说不在电脑前 → 加 --remote 参数。
Codex / 国产模型 自适配(v2.6 论坛 bug 修复)
非 Claude 平台跑 UZI-Skill 时常见问题已被代码层修复,但 agent 也要主动适配:
| 论坛报告问题 |
v2.6 代码层做了什么 |
agent 还要做什么 |
KeyError: 'skip' |
preview_with_mock.py 加 'skip' key + .get() 兜底 |
无 |
| 失败卡死整条 pipeline |
as_completed/result 加 90s timeout,单 fetcher 超时不影响其他 |
不要绕过 timeout 重试 |
| 中断不能续跑 |
stage1 默认 --resume,每 3 个 fetcher 增量保存 raw_data.json |
不要手动 --no-resume 除非真要重抓 |
| Python 3.9 语法报错 |
所有新文件加 from __future__ import annotations |
无 |
| mini_racer V8 thread crash |
给 fetch_industry/capital_flow/valuation 加共享锁 |
无 |
| share/war report 渲染失败 |
render_*.py 加 main() alias |
无 |
| 非 Claude agent_analysis 错乱 |
stage2 调用 lib.agent_analysis_validator.validate() 写 _agent_analysis_errors.json |
跑完看 console 是否有 🔴 schema error,按提示修 |
| Top bull/bear 排序错乱 |
排除 score=0 异常,按 score 排(不再先按 signal 分组) |
检查 panel.json 数据合理性 |
| 编造事实 (药明康德↔Apple) |
HARD-GATE-FACTCHECK 强制 cite raw_data |
agent 写每条结论都要能在 raw_data 找出处 |
Codex 启动时检测:
echo "${CODEX:-${OPENAI_API_KEY:+codex_via_openai}}"
Codex 推荐设置:
MX_APIKEY=... 必设(push2 在境外更不稳)
--remote 默认开(生成公网链接,无需 GUI)
--no-resume 别加(断网了能续)
🎛️ 模式选择
| 触发 |
行为 |
| 默认 |
完整 6 Task |
/quick-scan |
只跑 dim 0/1/2/10/18 + Top 10 投资者,跳过 dim 21/22 |
/panel-only |
跳过 Task 2, 只输出 65 评委 + synthesis |
/scan-trap |
只跑 dim 18 (杀猪盘),不调评审团 |
/dcf |
只跑 DCF 估值单独输出 |
/comps |
只跑同行对标 |
/initiate |
完整 6 Task + 强制生成机构首次覆盖章节 |
/ic-memo |
完整 6 Task + 强制生成 IC Memo 8 章节 |
/catalysts |
完整 Task + 重点展示催化剂日历 |
/thesis |
只跑 thesis_tracker 单独输出 |
/screen |
跑 5 套量化筛选 |
/dd |
跑 DD 清单 |
📁 数据契约 & 文件路径
| 文件 |
谁写 |
谁读 |
闭环角色 |
.cache/{ticker}/raw_data.json |
Task 1/1.5 脚本 |
Task 2-5 + 你 |
数据源 |
.cache/{ticker}/dimensions.json |
Task 2 脚本 |
Task 4-5 |
评分 |
.cache/{ticker}/panel.json |
Task 3 规则引擎 → 你覆盖 |
stage2 |
骨架→真实判断 |
.cache/{ticker}/agent_analysis.json |
🧠 你写 |
stage2 自动合并 |
闭环关键 |
.cache/{ticker}/synthesis.json |
stage2 (合并 agent_analysis) |
Task 5 |
最终研判 |
reports/{ticker}_{date}/full-report.html |
Task 5 脚本 |
用户 |
报告 |
reports/{ticker}_{date}/full-report-standalone.html |
inline_assets.py |
用户分享 |
独立报告 |
reports/{ticker}_{date}/share-card.png |
render_share_card |
朋友圈 |
分享卡 |
reports/{ticker}_{date}/war-report.png |
render_war_report |
战报 |
战报 |
reports/{ticker}_{date}/one-liner.txt |
assemble 副产 |
快速摘要 |
一句话 |
⚠️ agent_analysis.json 是 v2.2 新增的闭环文件。 stage2() 会自动读取并合并到 synthesis 中。如果你不写这个文件,stage2 退化为纯脚本模式(会打印警告)。
详细 schema 见 assets/data-contracts.md。
🔧 工具箱速查
估值建模
lib.fin_models.compute_dcf(features, assumptions) — DCF + WACC + 5×5 敏感性
lib.fin_models.build_comps_table(target, peers) — 同行对标
lib.fin_models.project_three_stmt(features, assumptions) — 5 年 IS/BS/CF
lib.fin_models.quick_lbo(features, ...) — PE 买方视角 IRR 测试
lib.fin_models.accretion_dilution(acquirer, target, ...) — 并购增厚/摊薄
研究工作流
lib.research_workflow.build_initiating_coverage(...) — 机构首次覆盖
lib.research_workflow.build_earnings_analysis(...) — beat/miss 解读
lib.research_workflow.build_catalyst_calendar(...) — 催化剂日历
lib.research_workflow.build_thesis_tracker(...) — 投资逻辑追踪
lib.research_workflow.build_morning_note(...) — 晨报
lib.research_workflow.run_idea_screen(features, style) — 5 套量化筛选 (value/growth/quality/gulp/short)
lib.research_workflow.build_sector_overview(...) — 行业综述
深度决策
lib.deep_analysis_methods.build_ic_memo(...) — 投委会备忘录 8 章
lib.deep_analysis_methods.build_unit_economics(...) — LTV/CAC 或毛利拆解
lib.deep_analysis_methods.build_value_creation_plan(...) — EBITDA 桥
lib.deep_analysis_methods.build_dd_checklist(...) — 5 工作流 21 项 DD
lib.deep_analysis_methods.build_competitive_analysis(...) — Porter 5 Forces + BCG
lib.deep_analysis_methods.build_portfolio_rebalance(...) — 组合再平衡
量化评委 / 规则引擎
lib.stock_features.extract_features(raw, dims) — 108 标准化特征
lib.investor_criteria.INVESTOR_RULES — 65 人 236 条规则
lib.investor_evaluator.evaluate(investor_id, features) — 单人裁决
lib.investor_evaluator.evaluate_all(features) — 65 人批量
lib.investor_evaluator.panel_summary(results) — panel 汇总
数据质量
lib.data_integrity.validate(raw) — 100% 覆盖度校验器
📚 详细参考文档
references/task1-data-collection.md — 22 维 fetcher 清单 + 并行策略
references/task1.5-institutional-modeling.md — DCF/Comps/LBO 默认参数与 A 股适配(重要!)
references/task2-dimension-scoring.md — 打分规则
references/task3-investor-panel.md — 65 评委规则
references/task4-synthesis.md — 叙事合成规范
references/task5-report-assembly.md — 报告组装
references/fin-methods/README.md — 17 种机构方法论索引
assets/data-contracts.md — 所有 JSON schema
assets/quality-checklist.md — 完成前的 checklist
✅ 完成定义
- 6 个 JSON 产物全部落地(raw_data + dimensions + panel + agent_analysis + synthesis + report)
raw_data.json 完整性覆盖 ≥ 90%
agent_analysis.json 必须存在且 agent_reviewed: true
dim_commentary 至少覆盖 15/22 维度(在 agent_analysis.json 中)
synthesis.json 中 punchline / core_conclusion / debate.rounds / buy_zones / risks 都来自 agent 覆盖(通过 agent_analysis.json 合并)
- HTML 报告打开无 console error
- 金句里包含具体数字
- 杀猪盘等级始终显示
现在开始:从第 0 步识别股票开始。记住 — 你是分析师,不是脚本运行器。