--- 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 `$ARGUMENTS` as 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 like `python3 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 `date` command 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 心算: ```bash python3 tools/financial_rigor.py verify-valuation \ --price {当前价格} \ --eps {EPS} \ --bvps {每股净资产} \ --fcf-per-share {每股自由现金流} ``` 如需计算市值、百分比变化、目标价差异或情景估值,使用: ```bash 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 行的触发证据写 `—`,不要为了填表编造证据。** #### 总体结论必须回答 1. **论文是否漂移?** 未漂移 / 正向漂移 / 负向漂移 / 证据不足无法判断 2. **漂移来自哪里?** 估值 / 基本面 / 管理层 / 竞争格局 / 红线事件 3. **是事实变化还是价格变化?** 明确拆开说明 4. **建议动作如何迁移?** 例如:Watch → Buy、Buy → Hold、Hold → Reduce、Reduce → Exit 5. **下一步需要什么证据?** 下一份财报 / 监管披露 / 管理层说明 / 竞对数据 --- ## 模式B:自动快照对比 ### B1:查找快照 在 `reports/` 中查找: - `reports/{公司名}-thesis.md` - `reports/{公司名}-thesis-*.md` - `reports/{公司名}/` 目录下包含 `thesis`、`论文`、`追踪` 的报告 选择时间最早且结构完整的文件作为旧报告,时间最新的文件作为新报告。若用户指定日期,以用户指定为准。 ### B2:防止错误配对 对比前必须确认: - 公司名或股票代码一致 - 报告日期不同 - 两份报告都包含可抽取的论文结构或研究结论 如果无法确认同一公司,停止并要求用户提供明确路径。 ### B3:执行模式A 找到两份有效快照后,按模式A完整执行。 --- ## 模式C:缺失基线处理 如果只找到一份报告或没有找到旧快照: 1. 明确说明:**缺少可比较的历史基线,不能执行漂移检测** 2. 不要根据记忆或市场印象补造旧论文 3. 引导用户先使用 `/thesis-tracker {公司名} 建立论文` 建立结构化基线 4. 如果当前报告已足够完整,可建议将它保存为 `reports/{公司名}-thesis.md` 作为未来漂移检测基线 输出格式: ``` 无法执行论文漂移检测:缺少历史基线。 已找到: - 当前报告:{路径 / 未找到} - 历史基线:未找到 建议: 1. 先运行 /thesis-tracker {公司名} 建立论文 2. 下次有新财报或重大事件后,再运行 /thesis-drift {公司名} 旧报告 新报告 ``` --- ## 关键原则 - **证据优先于措辞** — 同义改写不是漂移,只有事实证据变化才是漂移 - **基本面优先于股价** — 股价涨跌只影响估值锚点,不自动改变生意质量 - **数值必须验算** — 所有百分比、估值倍数、目标价差异必须用 `tools/financial_rigor.py` - **不确定就标注不确定** — 来源缺失、口径不一致、无法复核时,不要硬判 - **红线单独处理** — 红线触发优先级高于估值便宜,不能被低 PE 掩盖 - **输出必须可复盘** — 每个 Improved / Weakened 结论都要能追溯到具体证据