thesis-drift
GitHub执行投资论文漂移检测,区分事实、价格与措辞变化。支持指定报告或自动快照对比,校验核心假设、红线及估值锚点。通过精确计算验证数据,确保仅在证据实质改变时判定论文漂移,避免误判。
Trigger Scenarios
Install
npx skills add xbtlin/ai-berkshire --skill thesis-drift -g -y
SKILL.md
Frontmatter
{
"name": "thesis-drift",
"description": "AI Berkshire skill: 投资论文漂移检测:分清事实变化与措辞变化. Source: skills\/thesis-drift.md."
}
Codex adapter note
This skill is generated from skills/thesis-drift.md so Claude Code and Codex users share one canonical workflow.
- Treat
$ARGUMENTSas the user's request in the current Codex thread. - When the source mentions Claude-only surfaces such as Task, Agent, WebSearch, Bash, Read, or Write, use the closest Codex capability available in this session: subagents when available, web search when needed, shell commands for local tools, and normal file edits for workspace files.
- Use shared project tools from
tools/in this repository. Prefer running commands from the repository root with paths likepython3 tools/financial_rigor.py ...; if the current thread starts outside the repo, locate the actual checkout path first instead of assuming a fixed home-directory path. - Before starting research, run the
datecommand to confirm today's date; treat it as the baseline for "latest" data and state the data cutoff date in the report header. Never assume the current date from training data. - Preserve the research quality rules from
AGENTS.md: cross-check financial data, use exact arithmetic tools for valuation/math, and clearly label uncertainty and source gaps.
投资论文漂移检测:分清事实变化与措辞变化
对 $ARGUMENTS 执行投资论文漂移检测。
支持输入格式:
公司名 旧报告路径 新报告路径— 指定两份研究报告或论文快照进行对比公司名 reports/{公司名}-thesis-旧日期.md reports/{公司名}-thesis-新日期.md— 对比两份带日期的论文快照公司名— 自动查找reports/{公司名}-thesis.md及同目录历史快照;如果没有基线则转入缺失基线处理
"当事实改变时,我就改变想法。你呢?" —— 凯恩斯
"股价波动不是论文漂移,事实变了才是。" —— AI Berkshire
设计理念
长期持仓最难的不是每天读新闻,而是区分三件事:
- 事实改变:收入、利润率、竞争格局、管理层行为、资本配置发生可验证变化
- 价格改变:市场情绪或估值倍数变化,但生意本身未变
- 措辞改变:两份报告表达不同,但底层证据和判断没有变化
投资论文漂移检测的目标是:只在证据变化时承认论文变化。不能因为报告换了写法就制造漂移,也不能因为股价涨跌就误判基本面。
本 Skill 依赖 /thesis-tracker 输出的结构化维度:核心假设清单、红线清单、估值锚点、追踪记录表。没有这些结构时,先补齐基线,再做漂移检测。
执行流程
第一步:判断操作模式
解析 $ARGUMENTS:
- 如果提供两份报告路径 → 进入指定报告对比模式
- 如果只提供公司名 → 查找
reports/{公司名}-thesis.md及历史快照,进入自动快照对比模式 - 如果只找到一份报告或没有历史基线 → 进入缺失基线处理模式
- 如果两份报告不是同一家公司 → 停止并要求用户确认,不做跨公司漂移判断
模式A:指定报告对比
A1:读取并校验两份报告
读取旧报告和新报告,提取:
- 报告日期、公司名、股票代码
- 核心论文(5句话)
- 核心假设清单
- 红线清单
- 估值锚点
- 追踪记录表
- 管理层质量判断
- 竞争护城河判断
- 当前建议动作(买入 / 持有 / 观察 / 减仓 / 清仓)
如果报告缺少关键结构,先标注"结构缺失",但仍尽量从正文中抽取证据;抽取不到的维度标为"无法判断",不能编造结论。
A2:证据归一化
把两份报告中的事实证据整理成同一张表:
| 维度 | 旧报告证据 | 新报告证据 | 数据来源 | 是否可验证 |
|---|---|---|---|---|
| 估值锚点 | ||||
| 核心假设 | ||||
| 红线 | ||||
| 管理层质量 | ||||
| 竞争护城河 |
只比较证据,不比较文风。 如果新旧报告只是同义改写、排序变化、语气变化,但事实数据和判断阈值没有变化,判定为 Unchanged。
A3:数值与估值校验
所有数值变化必须使用 tools/financial_rigor.py 做精确计算,禁止 LLM 心算:
python3 tools/financial_rigor.py verify-valuation \
--price {当前价格} \
--eps {EPS} \
--bvps {每股净资产} \
--fcf-per-share {每股自由现金流}
如需计算市值、百分比变化、目标价差异或情景估值,使用:
python3 tools/financial_rigor.py verify-market-cap --price {价格} --shares {股本} --reported {报告市值} --currency {币种}
python3 tools/financial_rigor.py cross-validate --field {字段} --values '{JSON}' --unit {单位}
python3 tools/financial_rigor.py three-scenario --price {价格} --eps {EPS} --shares {股本亿} --growth {乐观} {中性} {悲观} --pe {乐观PE} {中性PE} {悲观PE}
python3 tools/financial_rigor.py calc --expr '{精确算式}'
关键财务数据必须至少两处独立来源交叉验证。来源不足、口径不一致、无法复核的数字必须标注为"低置信度 / 待核实"。
A4:逐维度判定漂移
固定使用以下维度,不要临时增减:
| 维度 | 判定重点 | Improved | Unchanged | Weakened |
|---|---|---|---|---|
| 估值锚点 | 内在价值、PE/PB/FCF Yield、安全边际、目标价区间 | 安全边际扩大或内在价值上修且经工具验算 | 估值区间和安全边际无实质变化 | 安全边际收窄、内在价值下修或估值假设失效 |
| 核心假设清单 | 收入增速、利润率、现金流、用户/订单/产能等可验证假设 | 更多假设被新证据强化 | 假设状态与证据基本一致 | 假设边际弱化、受损或破裂 |
| 红线清单 | 诚信、监管、业务衰退、竞争突破、管理层异常动作 | 原有红线风险解除或显著下降 | 未触发且风险水平不变 | 红线被触发或触发概率上升 |
| 管理层质量 | 诚信、资本配置、回购分红、执行力、股东友好度 | 新行为提高信任度 | 行为延续旧判断 | 行为损害信任或资本配置变差 |
| 竞争护城河 | 市占率、定价权、网络效应、成本优势、替代威胁 | 护城河变宽或竞争优势被验证 | 格局无实质变化 | 护城河被削弱或竞对突破 |
每个维度只能给出三类结论:Improved / Unchanged / Weakened。
A5:证据驱动规则
每个非 Unchanged 的结论必须引用导致变化的具体新证据:
- 财报行项目:例如收入增速、毛利率、经营现金流、回购金额、净现金
- 监管披露:例如 10-K/20-F、年报、中报、港交所公告、SEC filing
- 新闻事件:例如管理层变动、监管处罚、重大客户流失、竞品突破
- 价格与估值:必须说明这是"估值变化"还是"基本面变化",不能混淆
如果找不到能解释变化的证据,必须判定为 Unchanged 或 无法判断,不能用措辞差异推断漂移。
A6:输出漂移报告
报告结构
一、对比对象与时间跨度
二、总体结论:论文是否漂移
三、维度漂移表
四、证据差异明细
五、估值与数值验算
六、建议动作迁移
七、不确定项与需补充来源
八、下次跟踪重点
维度漂移表
| 维度 | 旧判断 | 新判断 | 漂移方向 | 触发证据 | 置信度 |
|---|---|---|---|---|---|
| 估值锚点 | Improved / Unchanged / Weakened | 高/中/低 | |||
| 核心假设清单 | Improved / Unchanged / Weakened | 高/中/低 | |||
| 红线清单 | Improved / Unchanged / Weakened | 高/中/低 | |||
| 管理层质量 | Improved / Unchanged / Weakened | 高/中/低 | |||
| 竞争护城河 | Improved / Unchanged / Weakened | 高/中/低 |
Unchanged 行的触发证据写 —,不要为了填表编造证据。
总体结论必须回答
- 论文是否漂移? 未漂移 / 正向漂移 / 负向漂移 / 证据不足无法判断
- 漂移来自哪里? 估值 / 基本面 / 管理层 / 竞争格局 / 红线事件
- 是事实变化还是价格变化? 明确拆开说明
- 建议动作如何迁移? 例如:Watch → Buy、Buy → Hold、Hold → Reduce、Reduce → Exit
- 下一步需要什么证据? 下一份财报 / 监管披露 / 管理层说明 / 竞对数据
模式B:自动快照对比
B1:查找快照
在 reports/ 中查找:
reports/{公司名}-thesis.mdreports/{公司名}-thesis-*.mdreports/{公司名}/目录下包含thesis、论文、追踪的报告
选择时间最早且结构完整的文件作为旧报告,时间最新的文件作为新报告。若用户指定日期,以用户指定为准。
B2:防止错误配对
对比前必须确认:
- 公司名或股票代码一致
- 报告日期不同
- 两份报告都包含可抽取的论文结构或研究结论
如果无法确认同一公司,停止并要求用户提供明确路径。
B3:执行模式A
找到两份有效快照后,按模式A完整执行。
模式C:缺失基线处理
如果只找到一份报告或没有找到旧快照:
- 明确说明:缺少可比较的历史基线,不能执行漂移检测
- 不要根据记忆或市场印象补造旧论文
- 引导用户先使用
/thesis-tracker {公司名} 建立论文建立结构化基线 - 如果当前报告已足够完整,可建议将它保存为
reports/{公司名}-thesis.md作为未来漂移检测基线
输出格式:
无法执行论文漂移检测:缺少历史基线。
已找到:
- 当前报告:{路径 / 未找到}
- 历史基线:未找到
建议:
1. 先运行 /thesis-tracker {公司名} 建立论文
2. 下次有新财报或重大事件后,再运行 /thesis-drift {公司名} 旧报告 新报告
关键原则
- 证据优先于措辞 — 同义改写不是漂移,只有事实证据变化才是漂移
- 基本面优先于股价 — 股价涨跌只影响估值锚点,不自动改变生意质量
- 数值必须验算 — 所有百分比、估值倍数、目标价差异必须用
tools/financial_rigor.py - 不确定就标注不确定 — 来源缺失、口径不一致、无法复核时,不要硬判
- 红线单独处理 — 红线触发优先级高于估值便宜,不能被低 PE 掩盖
- 输出必须可复盘 — 每个 Improved / Weakened 结论都要能追溯到具体证据
Version History
- 736f163 Current 2026-07-05 09:26


