## File: README.md # 主动基金 / 基金经理?请看 [基佬skills](https://github.com/wbh604/jilao-skills) **UZI-Skill 负责个股深度分析;基佬skills 负责主动基金和基金经理行为鉴定。** 它用真实公开数据逐笔验证基金经理的买卖行为,评的是行为,不是净值。在线示例:[兴全合宜 163417 · 谢治宇行为报告](https://wbh604.github.io/jilao-skills/assets/fund-163417.html) --- --- ## 🚀 30 秒上手 **任何 agent 里丢一句话 · 装好就能用**。详细装法见 [安装](#安装)。 | 你用的 agent | 直接丢这句 | |---|---| | **Claude Code** | `/plugin marketplace add wbh604/UZI-Skill` 然后 `/plugin install stock-deep-analyzer@uzi-skill` | | **Codex / OpenAI CLI** | "按 https://raw.githubusercontent.com/wbh604/UZI-Skill/main/.codex/INSTALL.md 装 UZI-Skill,分析 600519" | | **Cursor** | `/add-plugin stock-deep-analyzer` | | **Gemini CLI** | `gemini extensions install https://github.com/wbh604/UZI-Skill` | | **Hermes** | ⚠️ `hermes skills install` 当前被 [Skills Guard 误判](https://github.com/NousResearch/hermes-agent/issues/1006) · 用一键脚本绕过:`curl -fsSL https://raw.githubusercontent.com/wbh604/UZI-Skill/main/install-hermes.sh \| bash` · 详见 [INSTALL-HERMES.md](INSTALL-HERMES.md) | | **OpenClaw / 龙虾** | "装 https://github.com/wbh604/UZI-Skill 这个股票分析技能" | | **CLI 直用** | `git clone https://github.com/wbh604/UZI-Skill.git && cd UZI-Skill && pip install -r requirements.txt && python run.py 贵州茅台` | 装好后最常用 4 条命令(任何 agent 里直接说): ``` /stock-deep-analyzer:analyze-stock 贵州茅台 ← 完整 22 维 × 66 评委分析(5-8min) /stock-deep-analyzer:quick-scan 002217 ← 30 秒速判 /stock-deep-analyzer:scan-trap 002217 ← 杀猪盘排查 /stock-deep-analyzer:dcf 600519 ← DCF 估值专项 ``` > 💡 **当前最新稳定版 v3.9.4** · 完整演进见 [更新日志](#-更新日志): > - **66 位评审团 · 9 大流派**(v3.7 新增 a16z Andreessen / Naval / 黄仁勋 / 马斯克 / 高瓴张磊 / Burry / Chanos 等 13 位 + 独立 I 组 Serenity AI 卡位猎手)· 242 条量化规则 > - **Serenity 严谨化**(v3.8):8 罚分因子 + 3 级证据阶梯("有定点量产"≈90 分 vs "仅题材"≈60 分)+ 供应链 8 层分层 > - **Tier-1 五方法**(v3.8):`/ai-readiness` `/earnings-preview` `/model-update` `/returns` `/rebalance` > - **多股对比 & 组合**(v3.6):`--versus` 2-4 只横向对决 · `--portfolio` CSV 组合健康度 · 暗色模式 + sticky TOC(v3.9.1 起可一键折叠)+ 术语悬浮 > - **流派视角锁定**(v3.5):`--school A-I` 只看一派的判断 · 报告带 SCHOOL LOCK banner > - **架构**:v3.0 pipeline 默认主干 · 685 tests 全过 · v2.x API 100% 向后兼容(`UZI_LEGACY=1` 回老路径) > > **Hermes 用户**:`hermes skills install` 被上游 Skills Guard 误判 · 用一键脚本装:`curl -fsSL https://raw.githubusercontent.com/wbh604/UZI-Skill/main/install-hermes.sh | bash` · 详见 [INSTALL-HERMES.md](INSTALL-HERMES.md). --- ## 💬 没有群!虽然我也不知道为什么交流群也没涉及什么东西会被封号。。。 我再说明一下,没有群,也不拉群。 > 添加人过多,请备注好事宜,我才知道出什么问题了。。 --- --- ## 鸣谢 学AI,上L站! 感谢 [Linux.do](https://linux.do/) 社区支持。 ## 这是啥 一句话:输入一只股票,Claude 变成你的私人分析师,跑完 22 个维度的数据、调 22 种华尔街分析模型、让 66 个投资风格完全不同的大佬各自打分,最后吐出一份 600KB 的 Bloomberg 风格报告。 ``` /stock-deep-analyzer:analyze-stock 国盾量子 ``` 5-8 分钟后你会得到: - **一份 HTML 报告** — 可以直接用浏览器打开,自包含,离线也能看 - **一张朋友圈竖图** — 1080×1920,直接发 - **一张微信群战报** — 1920×1080 - **一段话摘要** — 复制粘贴就能发群里 ## 为什么做这个 之前看一只票的流程:东方财富翻基本面 → 同花顺看 K 线 → 雪球刷大 V 说了啥 → 研报系统找卖方观点 → Excel 算个 DCF → 结果买进去还是亏。 这些活儿本质上就是"搜集信息 → 多角度分析 → 给个结论",让 AI 全干了不行吗? 市面上看了一圈,要么是输出三段废话的 GPT wrapper,要么是用不起的机构终端。Anthropic 出了个 [financial-services-plugins](https://github.com/anthropics/financial-services-plugins),方法论很好(DCF / Comps / LBO 那套),但完全是美股视角 + 全要付费数据源。 所以自己搓了一个。**全免费数据源,零 API key,A 股直接能跑。** --- ## 安装 不管你用什么 agent,**都是丢一句话过去就行**: ### Claude Code ``` /plugin marketplace add wbh604/UZI-Skill /plugin install stock-deep-analyzer@uzi-skill ``` 装好后说 `/stock-deep-analyzer:analyze-stock 贵州茅台`。 > ⚠️ **必须带 `stock-deep-analyzer:` 命名空间前缀** > > Claude Code 装 plugin 后,所有 skill/command 都以 `stock-deep-analyzer:` 开头。 > 部分环境下短名(`/analyze-stock`)不会被自动解析——稳妥起见请一律用全名: > > - `/stock-deep-analyzer:analyze-stock ` > - `/stock-deep-analyzer:quick-scan ` > - `/stock-deep-analyzer:scan-trap ` > - `/stock-deep-analyzer:dcf ` > - `/stock-deep-analyzer:ic-memo ` > - `/stock-deep-analyzer:investor-panel ` > - `/stock-deep-analyzer:trap-detector ` > - `/stock-deep-analyzer:deep-analysis ` > - 等全部 14 条 > > Cursor / Gemini CLI / Codex 同理:**一律用 `/stock-deep-analyzer:` 全名**, > 避免短名解析失败。 ### Codex 直接对 Codex 说: > 请按照 https://raw.githubusercontent.com/wbh604/UZI-Skill/main/.codex/INSTALL.md 的指引安装 UZI-Skill,然后帮我深度分析 贵州茅台。 ### OpenClaw / 龙虾 对龙虾说: > 帮我安装 https://github.com/wbh604/UZI-Skill 这个股票分析技能,装好后分析 贵州茅台。 ### Cursor ``` /add-plugin stock-deep-analyzer ``` 然后说"分析 贵州茅台"。 ### Gemini CLI ```bash gemini extensions install https://github.com/wbh604/UZI-Skill ``` ### OpenCode 对 OpenCode 说: > 请按照 https://raw.githubusercontent.com/wbh604/UZI-Skill/main/.opencode/INSTALL.md 安装并分析 贵州茅台。 ### Windsurf / Devin / 其他 Agent 丢这句话进去: > 克隆 https://github.com/wbh604/UZI-Skill ,读 AGENTS.md 了解怎么用,帮我深度分析 贵州茅台。 ### 📱 不在电脑前? 对任何 agent 说: > 分析 贵州茅台,用远程模式,生成一个公网链接让我手机能看。 agent 会用 `--remote` 启动 Cloudflare Tunnel,给你一个 `https://xxx.trycloudflare.com` 链接。若本机没有 `cloudflared`,默认只提示安装方式;确认要自动安装时再加 `--install-cloudflared`。 --- ## 用法 ### 完整深度分析(5-8 分钟) ``` /stock-deep-analyzer:analyze-stock 水晶光电 /stock-deep-analyzer:analyze-stock 002273 /stock-deep-analyzer:analyze-stock 00700.HK /stock-deep-analyzer:analyze-stock AAPL /stock-deep-analyzer:analyze-stock 7203.T /stock-deep-analyzer:analyze-stock 005930.KS ``` ### 专项命令 > 都要加 `/stock-deep-analyzer:` 前缀才保证执行得通。 | 命令 | 干嘛的 | |---|---| | `/stock-deep-analyzer:dcf 600519` | DCF 估值 · WACC + 5×5 敏感性表 | | `/stock-deep-analyzer:comps 002273` | 同行对标 · PE/PB 分位分析 | | `/stock-deep-analyzer:lbo 600519` | LBO 测试 · PE 买方能赚多少 IRR | | `/stock-deep-analyzer:initiate 002273` | 机构首次覆盖报告 · JPM/GS 格式 | | `/stock-deep-analyzer:ic-memo 002273` | 投委会备忘录 · 三情景回报 | | `/stock-deep-analyzer:earnings 002273` | 财报解读 · beat/miss 检测 | | `/stock-deep-analyzer:catalysts 002273` | 催化剂日历 · 未来 60 天 | | `/stock-deep-analyzer:thesis 002273` | 投资逻辑追踪 · 5 支柱监控 | | `/stock-deep-analyzer:screen 002273` | 5 套量化筛选 · value/growth/quality | | `/stock-deep-analyzer:dd 002273` | 尽调清单 · 5 工作流 21 项 | | `/stock-deep-analyzer:quick-scan 002273` | 30 秒速判 | | `/stock-deep-analyzer:panel-only 600519` | 只看 66 评委投票 | | `/stock-deep-analyzer:scan-trap 002273` | 杀猪盘排查 | | `/stock-deep-analyzer:segmental-model 300308` | 分业务收入 bottom-up 建模 · 3 情景 × 3 年 projection · 对 DCF 反向校验 | | `/stock-deep-analyzer:ai-readiness 002273` | 🆕 v3.8 · 单票 AI 就绪度/卡位评估 · 3 道 gate → Go/Wait + 评级 | | `/stock-deep-analyzer:earnings-preview 002273` | 🆕 v3.8 · 财报**前**预览 · 一致预期 + Bull/Base/Bear + 隐含波动 | | `/stock-deep-analyzer:model-update 002273` | 🆕 v3.8 · 新财报/指引增量更新模型 · 假设 delta → DCF/thesis 影响 | | `/stock-deep-analyzer:returns` | 🆕 v3.8 · 组合收益归因 · 按持仓/行业拆解 + Top 贡献/拖累 | | `/stock-deep-analyzer:rebalance` | 🆕 v3.8 · 逐持仓再平衡 · 漂移 + 交易清单 + A股印花税/佣金换手成本 | ### CLI 直跑进阶玩法(git clone 用户) ```bash python run.py 600519.SH --depth lite --no-browser # 30-60s 快速档 python run.py 300394.SZ --school I # 只看 Serenity 卡位视角(A-I 九派任选) python run.py --versus 茅台 五粮液 002594.SZ # 2-4 只票横向对决 · ★WIN 高亮 python run.py --portfolio holdings.csv # CSV 组合 · 加权评分 + 健康度 python run.py 600519.SH --output-dir /tmp/out # SaaS 集成 · index.html + meta.json python run.py 600519.SH --remote # 公网链接 · 缺 cloudflared 时默认不改系统 ``` --- ## 🎯 评分校准(v2.11) 用户反馈"茅台 47 分"、"没超过 65 分"—— 诊断发现两处公式偏严苛,v2.11 校准: | 改动 | 旧 (v2.9.1) | 新 (v2.11) | 影响 | |---|---|---|---| | **verdict 阈值** | 85/70/55/40 | **80/65/50/35** | 从未有股能 ≥85("值得重仓"档空设),下调 5 分让白马/真强股进"可以蹲一蹲"档 | | **consensus neutral 权重** | 0.5(半权) | **0.6** | (v2.11 校准)价值派+游资 35 人偏保守,neutral 权重 0.5 让白马 consensus 仅 37,0.6 更贴近"不坑但不是心头好"的真实语义 | 公式(未变):`overall = fund_score × 0.6 + consensus × 0.4` 典型白马(如茅台)预期: - v2.9.1:`fund=62 consensus=45 → overall 55 → 观望优先` - v2.11:`fund=62 consensus=50 → overall 57 → 观望优先`(但更接近"可以蹲一蹲"边界,白马行情启动时容易进 65) 两档合计影响 ~5-8 分。**真正的坑仍会 < 35 → 回避**,分数辨识度不降反升。 诊断字段 `panel.json::consensus_formula.version = "v2.11 · (bullish + 0.6*neutral) / active"` 可审计。 回归测试:`tests/test_v2_11_scoring_calibration.py` 8 个用例。 完整校准记录见 [BUGS-LOG.md v2.11.0 章节](docs/BUGS-LOG.md#v2110-2026-04-18--评分校准--用户反馈驱动)。 --- ## 🎚️ 三档思考深度(v2.10.3 新增) 给用户自己选择分析力度——快想 / 正常 / 深挖: ```bash python run.py 600519 --depth lite # ⚡ 速判模式(1-2 分钟) python run.py 600519 # 📊 标准分析(5-8 分钟)· 默认 python run.py 600519 --depth deep # 🔬 深度研究(15-20 分钟) ``` 或通过环境变量: ```bash export UZI_DEPTH=lite # 或 medium / deep python run.py 600519 ``` ### 三档差异一览 | 维度 | ⚡ **lite** 速判 | 📊 **medium** 标准 | 🔬 **deep** 机构级 | |---|---|---|---| | **预计耗时** | 1-2 分钟 | 5-8 分钟 | 15-20 分钟 | | **fetcher 维度** | 核心 7 维 | 全 22 维 | 全 22 维 + 强化 fallback | | **评委数量** | 10 位代表 | 66 位完整 | 66 位 + **Bull-Bear 结构化辩论** | | **机构方法** | 只 DCF | 全 22 种 | 全 22 种 + **Segmental Build-Up** | | **ddgs 定性查询** | **全 skip**(省 token)| 按需 · 预算 30 次 | 跑满 · 预算 60 次 | | **fund_holders** | Top 5 完整业绩 | Top 20 完整 + 其余清单 | Top 100 完整 | | **自查 gate** | critical block | critical block · warning 可 ack | 两级都 block | | **Playwright 兜底**(v2.13.1) | ❌ 完全禁用 | opt-in · `UZI_PLAYWRIGHT_ENABLE=1` · **6 维**(4_peers/8_materials/15_events/17_sentiment/7_industry/14_moat) | ✅ 默认启用 · **10 维**(medium 6 + 3_macro/13_policy/18_trap/19_contests)· 首次 y/n 交互装 Chromium | | **Token 消耗(Codex)** | 最省 | 中等 | 最大 | | **适用场景** | 随手看 / 老板临时问 / 预判 ETF 成分股 | 日常深度分析 · 写研报 | 投委会备忘录 · 建仓前深挖 | ### 自动降级策略 - **第一次安装** / `.cache/_global` 空时 → 自动切 lite(省首次冷启动时间) - **网络预检 3+ 域不通** → 自动切 lite(避免卡死) - 手动 `--depth` 始终覆盖自动判定 ### 实战选择 | 问题 | 推荐档位 | |---|---| | "帮我看看这只票能不能买" | `medium`(默认) | | "15 分钟内给我个结论" | `lite` | | "老板明天投委会要看" | `deep`(含 Bull-Bear 辩论 + bottom-up segmental) | | "ETF 代码输进去了(系统会提示选成分股)" | `lite`(成分股快速预判)| | "Codex 环境 / 首次安装" | 不用管 · 自动 lite | ### 命令映射(隐式档位) | 命令 | 隐式档位 | |---|---| | `/stock-deep-analyzer:quick-scan 600519` | lite | | `/stock-deep-analyzer:panel-only 600519` | lite | | `/stock-deep-analyzer:analyze-stock 600519` | medium(默认)| | `/stock-deep-analyzer:ic-memo 600519` | deep | | `/stock-deep-analyzer:initiate 600519` | deep | --- ## 🎭 66 位评审团 不是模板话术。每个人有自己的**量化规则集**(共 236 条),给出的建议必须引用具体命中了哪条。 v3.7.0 起新增 **13 位新晋科技大佬** + 独立的 **I 组 Serenity(AI 卡位/瓶颈猎手)**;v3.9.0 再添从十年实盘交割单蒸馏的 **股海贼王**,覆盖 9 大流派: | 组 | 风格 | 人数 | 代表人物 | |---|---|---|---| | A | 经典价值 | 6 | 巴菲特 · 格雷厄姆 · 芒格 · 费雪 · 邓普顿 · 卡拉曼 | | B | 成长投资 | 9 | 林奇 · 木头姐 · 蒂尔 · **Andreessen (a16z)** · **Gurley (Benchmark)** · **Naval** · **Gerstner (Altimeter)** · **Chamath** | | C | 宏观对冲 | 7 | 索罗斯 · 达里奥 · 霍华德马克斯 · 德鲁肯米勒 · 罗伯逊 · **Burry(大空头)** · **Chanos(做空猎手)** | | D | 技术趋势 | 4 | 利弗莫尔 · 米内尔维尼 · 达瓦斯 · 江恩 | | E | 中国价投 | 7 | 段永平 · 张坤 · 朱少醒 · 谢治宇 · 冯柳 · 邓晓峰 · **张磊(高瓴)** | | F | A 股游资 | 24 | 章盟主 · 赵老哥 · 炒股养家 · **股海贼王 🆕**(淘股吧十年实盘蒸馏)· 北京炒家 … | | G | 量化系统 | 4 | 西蒙斯 · 索普 · 大卫·肖 · **Asness (AQR)** | | H | 科技领袖派 🆕 | 4 | **黄仁勋 (NVIDIA)** · **马斯克 (Tesla)** · **Sam Altman (OpenAI)** · **Saylor (MSTR)** | | I | AI 卡位/瓶颈猎手 🆕 | 1 | **Serenity(@aleabitoreddit)** | > v3.7.0(2026-06)新晋 13 人加粗。**H 组**是带着自家产业链视角的科技 CEO;**I 组 Serenity** 是单人特殊评委(见下)。 **举个例子**: > **巴菲特** 给水晶光电打 62 分 · 中性 > "观望:护城河 27/40 可见;但 ROE 5 年最低 6.7%,达标率仅 0/5" > ✅ 资产负债率 30% 保守 · ❌ ROE 5 年最低 6.7% > **黄仁勋** 给某 CPO 光模块股打 100 分 · 看多 > "在 AI 算力链上 · 数据中心 Capex 直接受益 · 毛利率 ≥50% 定价权强——这是光速摩尔定律的受益方。" > ✅ AI 算力需求强相关 · ✅ CUDA/生态绑定深 > **卡拉曼** 给水晶光电打 0 分 · 看空 > "看空核心:无 30% 安全边际" --- ## 🧠 I 组 · Serenity · AI 卡位/瓶颈猎手 > **重磅角色**:2026 年 X(推特)爆火的海外散户研究员 [@aleabitoreddit](https://x.com/aleabitoreddit)。 > 单独成组、单独评分——因为她的打法极度集中、极度逆共识,跟任何机构大佬都不一样。 ### 她是谁 - 自述背景:**前 AI 研究科学家 · Nature 论文作者 · 前 RISC-V 基金会成员 · 半导体/光通信工程师** - 二次元头像、匿名、不露脸、不卖课、不跟单,研究**全部免费公开**,X 粉丝 30 万+ - 成名战:提前约一年押中 InP 磷化铟衬底瓶颈股 **$AXTI($12 → $70+,最高 $115–140)**,2026 Q1 被 IntelliEPI CEO 公开印证"InP 短缺是整个 AI 基建的瓶颈" > ⚠️ 身份与收益均为**自述/媒体转述、未经第三方审计**,各来源数字互相矛盾。本项目仅蒸馏其**方法论**作为一个分析视角,不代表认可其真实战绩。详见 [`docs/serenity-research-dossier.md`](docs/serenity-research-dossier.md)(全网 20+ 来源逐条档案)。 ### 她在 UZI-Skill 里的作用 把她的「**AI 产业链卡脖子/瓶颈点理论(Chokepoint Theory)**」做成一个可量化的评委—— **不买 AI 龙头**(英伟达这种已被充分定价的票),而是沿供应链往上游拆,找那个"全世界都绕不过去、又最容易供给见底"的二三线上游小盘,抢在市场定价前埋伏。 ``` 龙头被买爆 → 沿供应链往上拆 → 找最难替代的环节 → 找该环节里供给最紧的小盘 → 提前埋伏 ``` **核心打分逻辑「卡位决定态度」**——不看估值便宜、不看成长快,只看一个变量:**这家公司的产品在当前 AI 浪潮里有没有卡住别人的脖子**。 | 判定 | 态度 | |---|---| | 卡住了(不可替代 + 供给瓶颈 + 没被定价) | 🟢 **看多 / 可能重仓** | | 在 AI 链上但卡位不硬(能被替代 / 产能充足) | ⚖️ 中性 · 待验证 | | 没卡到位 / 只是蹭概念 / 不在 AI 链 | 🔴 **直接 skip**(白酒、银行护城河满分也给 0 分) | 判一个环节是不是"卡位点"看三件事:① **难替代**(换供应商/材料/工艺要多久,越久越好 → `14_moat` 切换成本)② **供给紧**(产能跟不跟得上 AI 需求曲线,越跟不上越好 → `7_industry`)③ **没被定价**(市场还在用"周期股/老半导体/小众材料"旧叙事看它 → `5_chain` + `15_events`)。 ### 怎么单独跑 Serenity 视角 ```bash python run.py 300394.SZ --school I # 只看 Serenity 的"卡没卡位"判断 python run.py NVDA --school H # 只看 H 组科技领袖派(黄仁勋/Musk/Altman/Saylor) ``` > 方法论六步法 + alpha 5 维详见 [`skills/deep-analysis/references/fin-methods/serenity-bottleneck.md`](skills/deep-analysis/references/fin-methods/serenity-bottleneck.md); > 语气库 + 评分规则见 [`skills/investor-panel/references/group-i-serenity.md`](skills/investor-panel/references/group-i-serenity.md)。 --- ## 📐 22 种机构级方法 从 [anthropics/financial-services-plugins](https://github.com/anthropics/financial-services-plugins) 移植方法论,适配了 A 股参数(rf=2.5% / ERP=6% / 税率 25% / 终值 g=2.5%)。首批 17 种 + v3.8.0 Tier-1 续引 5 种(`/ai-readiness` `/earnings-preview` `/model-update` `/returns` `/rebalance` · 见 [专项命令](#专项命令)): **估值建模** - DCF(WACC 拆解 + 两段 FCF + Gordon Growth 终值 + 5×5 敏感性热力图) - Comps 同行对标(PE / PB / EV-EBITDA 分位 + 隐含目标价) - 三表预测(5 年 IS / BS / CF 联动) - Quick LBO(PE 基金视角 IRR 交叉校验) - 并购增厚/摊薄模型 **研究工作流** - 首次覆盖报告(JPM/GS/MS 格式 · 评级 + 目标价 + 论点 + 风险) - 财报 beat/miss 解读 - 催化剂日历(真实事件提取 + 未来预排 + 影响分级) - 投资逻辑追踪(5 支柱健康度) - 晨报 · 量化筛选 · 行业综述 **深度决策** - IC 投委会备忘录(8 章节 · Bull/Base/Bear 三情景) - Porter 五力 + BCG 矩阵 - DD 尽调清单(5 工作流 21 项 · 自动标注完成状态) - 单位经济学 · 价值创造计划 · 组合再平衡 --- ## 📸 报告长什么样 > 以下截图全部来自水晶光电(002273.SZ)的真实分析结果。 ### 综合评分 + 核心结论 ### 多空大分歧 · The Great Divide 费雪 100 分 vs 卡拉曼 96 分,三轮互喷,每轮引用具体数字。 ### 65 位评审团 · 审判席 每个人一盏灯——绿色看多、红色看空、灰色中性。 ### 聊天室模式 评委们用自己的语言风格发言,引用命中的具体规则。 ### DCF 估值 · 5×5 敏感性热力图 WACC 6.96% · 内在价值 ¥20.73 · 安全边际 -28.6%,颜色从深绿(低估)到深红(高估)。 ### IC 投委会备忘录 · 三情景回报 Bull ¥26.95 / Base ¥20.73 / Bear ¥14.51,每个情景有概率和假设。 ### 22 维深度卡 每个维度有独立可视化——K 线蜡烛图 / PE Band / 雷达图 / 供应链流程图 / 温度计 / 环形图。 ### 朋友圈竖图 · 一键分享 --- ## 🔧 数据源 全部免费,零 API key: | 数据 | 主源 | 备用 | |---|---|---| | 实时行情 / PE / 市值 | 东方财富 push2 | 雪球 → 腾讯 → 新浪 → 百度 | | 财报历史 | akshare | 雪球 f10 | | K 线 / 技术指标 | akshare | yfinance | | 龙虎榜 / 北向 / 两融 | akshare | 东财 | | 研报 / 公告 | 巨潮 cninfo + akshare | 同花顺 | | 港股 | akshare hk | yfinance | | 美股 | yfinance | akshare us | | 全球同行 | Yahoo Equity Screener + Fundamentals Timeseries | 本地行业同行 + 24h 缓存 | | 全球汇率 | Yahoo Chart FX | 原币值始终保留 | | 宏观 / 政策 / 舆情 / 杀猪盘 | DuckDuckGo web search | — | | **社交热榜**(v2.12 新增) | **微博 / 知乎 / 百度 / 抖音 / 头条 / B 站 · 各平台官方 JSON API** | 5min 文件缓存 · 单平台失败不影响其他 | 多层 fallback 链 — 一个源挂了自动切下一个。 ### 全球同行业绩对比 分析单只股票时,`4_peers` 会先保留本地市场同行,再按细分行业发现全球上市公司候选, 只为相关度最高的 8 家补齐年度财务。报告展示全球同行中位数、目标公司分位、 营收规模/毛利率散点和跨市场明细表;Comps 估值也会复用有效全球同行。 已识别中国、香港、美国、日本、韩国、台湾、新加坡、印度、加拿大、澳大利亚、 英国及欧洲主要交易所,并支持 Yahoo 可识别的其他交易所代码作为通用全球标的。 口径约束: - 年报、季度和 TTM 不混在同一序列。 - 营收、利润等金额保留原币值,另写基准币换算值;原始值不会被覆盖。 - 不同币种的原始市值不会直接用于规模相似度评分。 - 负利润和负 ROE 是有效数据,不会改写成零。 - 有效同行少于 3 家时只展示数据,不输出全球分位结论。 - 单个同行或汇率源失败不会中断主报告,失败代码会保留在结果中。 可选配置: ```bash # 完全关闭全球同行,只保留原有本地同行 export UZI_DISABLE_GLOBAL_PEERS=1 # 调整最终补全数量,范围 3-12,默认 8 export UZI_GLOBAL_PEER_LIMIT=10 ``` ### 📱 6 平台社交热榜(v2.12 新增) 散户情绪和杀猪盘题材经常先在抖音/小红书/微博发酵,DuckDuckGo 扫不到。v2.12 起 `17_sentiment` 维度自动查: - **微博热搜** · 抓 `weibo.com/ajax/side/hotSearch` · 50 条实时热搜 - **知乎热榜** · 抓 `zhihu.com/api/v3/feed/topstory/hot-list-web` · 50 条 - **百度热搜** · 抓 `top.baidu.com/api/board` · 实时榜单 - **抖音热点** · 抓 `douyin.com/aweme/v1/web/hot/search/list/` · 搜索热点 - **头条热榜** · 抓 `toutiao.com/hot-event/hot-board/` · 热点事件 - **B 站热搜** · 抓 `s.search.bilibili.com/main/hotword` · 全站热搜 股票名(含简称,如"贵州茅台"→"贵州"/"茅台")在热榜标题里命中 → 计入情绪热度 + 记录具体条目。 数据结构:synthesis 的 `17_sentiment.data.hot_trend_mentions`: ```json { "stock_name": "贵州茅台", "platforms_ok": 6, "total_hits": 3, "by_platform_count": {"weibo": 2, "zhihu": 1, ...}, "mentions": { "weibo": [{"rank":3, "title":"茅台 1499 回归", ...}], ... } } ``` > 致谢:本模块设计参考了 [run-bigpig/jcp](https://github.com/run-bigpig/jcp) (韭菜盘 AI) 的 `hottrend` 服务实现。 ### 🔑 可选:东方财富妙想 Skills API(v2.3 新增) 2026 年 `push2.eastmoney.com` 在大陆网络经常被反爬拦截。若设置 `MX_APIKEY`,UZI-Skill 会优先走官方 NLP API: - **中文名纠错**:"北部港湾" → 自动识别为 "北部湾港(000582.SZ)" - **行情快照**:绕过 push2 直接拿到最新价/市值/PE/PB/行业 配置: ```bash cp .env.example .env # 编辑 .env 填入 MX_APIKEY(免费申领:https://dl.dfcfs.com/m/itc4) ``` 无 key 时全部回退到 XueQiu/akshare 链,现有用户零感知。 ### 🔓 需登录的数据源(v2.7.1 新增) 部分数据源 2026 年起加了登录鉴权,UZI-Skill 默认**不主动弹登录窗**(保持无人值守)。 用户可按需启用: | 数据源 | 维度 | 启用方式 | 影响 | |---|---|---|---| | **XueQiu cubes_search.json** | `19_contests` 实盘比赛持仓 | `export UZI_XQ_LOGIN=1` 然后 `python -m lib.xueqiu_browser login`(一次性弹浏览器登录) | 不启用:报告 19_contests 显示"⚠️ XueQiu 需登录,0 cube";启用后能看到雪球 50+ 个实盘组合持有本股 | #### XueQiu 登录步骤 ```bash # 1. 启用环境变量(一次性,可加进 .zshrc) export UZI_XQ_LOGIN=1 # 2. 一次性登录(首次跑会弹有头浏览器,登录后回到终端按回车) python -m lib.xueqiu_browser login # → 浏览器弹出,手动账密 / 微信扫码 / 短信登录 # → 登录成功后回终端按回车,cookie 持久化到 ~/.uzi-skill/playwright-xueqiu/ # 3. 后续跑分析自动复用登录态(cookie 通常有效 ≥ 30 天) python run.py 贵州茅台 --no-browser # 19_contests 维度会显示真实雪球组合数 + 收益率分布 # 4. 如果直接跑 run.py 想启用,加 flag python run.py 贵州茅台 --enable-xueqiu-login ``` #### 跳过登录(默认行为) 不想登录?什么都不用做。XueQiu 维度会清晰标注 `⚠️ 需登录,0 cube`, 其他 21 个维度照常工作。 #### 状态查询 ```bash python -m lib.xueqiu_browser status # 显示:profile dir / cookie 是否存在 / 是否启用 ``` ### 🚨 数据缺口怎么处理(v2.3) 若某些字段脚本拿不到(网络限制 / 新股 / 停牌),pipeline **不会塞默认值糊弄**: 1. 生成 `_data_gaps.json` 列出每个缺口的建议恢复动作(浏览器 / MX / WebSearch / 推导) 2. Agent 按 [HARD-GATE-DATAGAPS](skills/deep-analysis/SKILL.md) 逐条尝试补齐 3. 真的补不到 → 在 `agent_analysis.json` 里 `data_gap_acknowledged` 显式承认 4. HTML 报告顶部显示橙色 banner + 相关字段显示 "—" 并划线 这样你永远能分辨"这只股真的不适合买" vs "只是数据没拿到"。 ### 🌐 网络受限环境(v2.4 新增) UZI-Skill 在大陆和海外都能跑,但瓶颈不同,建议对号入座: **大陆网络 · `pip install` 失败怎么办?** `run.py` 和 `setup.sh` 会自动尝试国内镜像(清华 → 阿里云 → 中科大), 所以常见情况你什么都不用做。若要手动指定: ```bash pip install -r requirements.txt \ -i https://pypi.tuna.tsinghua.edu.cn/simple \ --trusted-host pypi.tuna.tsinghua.edu.cn ``` **Codex / 海外 agent · 数据源访问慢怎么办?** 国内数据源(尤其 `push2.eastmoney.com`)从海外访问经常超时。**强烈建议 设置 `MX_APIKEY`**(免费申领 → https://dl.dfcfs.com/m/itc4),它走 `mkapi2.dfcfs.com` 境内外都通,同时天然具备中文名纠错能力。 ```bash cp .env.example .env # 编辑 .env 填入 MX_APIKEY python run.py 贵州茅台 ``` **双端都不通**:agent 应保留 `_data_gaps.json` / `_resolve_error.json`, 等网络恢复后直接跑 `stage2()` 可以复用已采集数据,不用从头来过。 详见 [AGENTS.md · 网络受限环境](AGENTS.md) 的场景 A/B/C 速查。 --- ## 📁 项目结构(v3.x 架构) ``` /* Detailed source-code truncated for AI context efficiency. */ ``` **v3.2 重构分层亮点**: | 层 | 文件 | 职责 | |---|---|---| | 入口 | `run.py` | CLI 主入口 · `UZI_LEGACY=1` 回退老路径 | | 管道 | `lib/pipeline/*` | v3.0 主干 · collect / score / synthesize | | 纯函数 | `lib/pipeline/score_fns.py` | v3.1 · score_dimensions / generate_panel / generate_synthesis | | 渲染 | `lib/report/*` | v3.2 · 5 个子模块 · svg / viz / inst / panel / special | | Legacy | `run_real_test.py` + `assemble_report.py` | v2.x 向后兼容层 · re-export 所有迁移函数 | --- ## 🧠 设计理念 **Agent 驱动分析,脚本只是工具。** 整个流程分两段——中间 agent 必须介入,**最后必须自查**(v2.9 起机械强制): ``` Stage 1 (脚本) → 数据采集 + 模型计算 + 规则引擎骨架分 ⏸️ Agent 介入 → 读数据 → role-play 66 评委 → 写判断 → 审查假设 Stage 2 (脚本) → 综合研判 + 自动跑 13 条自查 → 报告生成 ↑ v2.9 核心:critical 不过 → 拒绝出 HTML ``` **66 个评委不是跑公式出分数**——agent 要真正站在每个人的角度思考: - 巴菲特分析苹果 → agent 知道这是伯克希尔第一大持仓 → override 看多 - 赵老哥分析美股 → agent 知道游资不做美股 → skip - 木头姐分析白酒 → agent 知道她只看颠覆创新 → "不在平台里" - 格雷厄姆看到 PE 33 → 不需要复杂推理 → 看空 每个判断都可以覆盖规则引擎的机械得分,但必须给出理由。 **三层评估**:真实持仓 → 行业亲和度 → 量化规则。真金白银比任何公式都有说服力。 ### 🛡 机械级自查 gate(v2.9 起) 过往 `HARD-GATE-FINAL-CHECK` 是"软要求"——agent 可能跳过、可能忘、可能做半截。BUG#R10(云铝被归为"农副食品加工")就是全流程跑完报告发出去,才被用户发现行业分类错了。**软 gate 不够,v2.9 起机械强制。** **`lib/self_review.py`** 13 条自动检查覆盖所有历史 BUG 经验: | severity | 抓什么 | 背后 BUG | |---|---|---| | 🔴 critical | 行业碰撞(工业金属→农副食品加工) | BUG#R10 | | 🔴 critical | 维度缺失 / 空 data / 占位符 | wave2 timeout、fetcher 崩溃 | | 🔴 critical | HK kline 0 根 / HK 财报空 | BUG#R7 / R8 | | 🔴 critical | panel 全 skip / coverage < 60% | 数据灾难 | | 🔴 critical | agent_analysis 缺 / 未 review | agent 偷懒 | | 🟡 warning | DCF 全 0 / 金属股 materials 空 | v2.8.x coverage gap | | 🟡 warning | 编造"苹果产业链"无 raw_data 证据 | 联想编造 | **`assemble_report::assemble()` 入口自动跑 review**,critical > 0 → `raise RuntimeError("⛔ BLOCKED by self-review")`,**物理上无法出报告**,直到 agent 修完。 ```bash # agent 迭代流程 loop: python review_stage_output.py 读 .cache//_review_issues.json 对每条 critical 执行 suggested_fix 直到 critical == 0 才出 HTML ``` 每次新 BUG 修完,对应的 `check_*` 规则都会加到 self_review,**下次同类问题跑完就自动抓到,不再靠用户反馈**。 --- ## ❓ FAQ **Q: 跑一次要多久?** A: 5-8 分钟,主要是数据采集慢(22 个维度要调十几个 API)。纯计算的机构建模部分 < 1 秒。 **Q: 需要付费数据源吗?** A: 不需要。全部免费源(akshare / yfinance / DuckDuckGo / 巨潮 / 东方财富 / 雪球),零 API key。 **Q: 港股美股能用吗?** A: 能。`/stock-deep-analyzer:analyze-stock 00700.HK` 或 `/stock-deep-analyzer:analyze-stock AAPL`。 **Q: 数据准不准?** A: 实时数据走东方财富 / 雪球,财报走巨潮 / akshare,和你在东方财富 App 上看到的一样。但 web search 质量不稳定(DuckDuckGo 中文搜索有时会返回无关结果),所以 Claude 会做二次审查。 **Q: 能当投资建议吗?** A: 不能。这是工具不是神仙,66 个大佬的意见都是规则引擎模拟的,不代表真人观点。买不买你自己决定。 **Q: 怎么知道这次报告数据是否可信?** A: v2.9 起**强制**机械自查。报告生成前跑 13 条检查,critical 不过物理上发不出报告。`.cache//_review_issues.json` 里能看到本次跑有没有 warning,每条都带 `suggested_fix`。每次新 BUG 修完都加对应检查 → 下次同类问题自动抓到,不靠用户反馈。 **Q: 怎么升级到新版本?自动提示吗?** A: 会。v2.14.0 起每次启动 CLI 或 agent 会话都会后台检测 GitHub 最新 release: - 有新版本 → 弹三选一提示(是 / 跳过本版 / 否)+ 改动摘要 - 选"是"→ 按你装的方式执行对应命令: - Claude Code: `/plugin update stock-deep-analyzer` - git clone: `cd UZI-Skill && git pull` - Hermes: `hermes skills update wbh604/UZI-Skill/skills/deep-analysis` - 选"跳过本版"→ 该版本不再提示,下一个新版本出来时才再弹 - 选"否"→ 下次启动再问 - 网络慢 / 关掉检查:`export UZI_NO_UPDATE_CHECK=1`(CI / Codex 环境推荐) - 缓存 6 小时 · 不会每次都打 GitHub API **Q: 之前报告里有 BUG 怎么办?** A: 2026-04-17 前跑过"工业金属 / 工业母机 / 工业机械"相关股票的用户,cache 里的 `7_industry` 维度是错的(云铝被归为农副食品加工的那个 bug)。清 cache 重跑即可: ```bash rm -rf skills/deep-analysis/scripts/.cache//raw_data.json python run.py --no-resume ``` --- ## 📋 更新日志 | 版本 | 日期 | 主要变化 | |---|---|---| | **v3.9.4** | 2026-08-08 | **前端显示修复 + 美化(kimi-k3)** · ① None 泄漏清零:政策面(方向/补贴/监管/反垄断)与资金面"主力资金 20日"在数据源返回 null 时曾直接显示 `None`,现统一兜底为 "—"/"数据暂缺"。② 移动端图表裁切:sparkline SVG 固定 220px 宽度撑破容器(LBO 的 EBITDA 路径/债务偿还、维度卡迷你图),改为 `width:100%` 自适应 + 移动端单列堆叠;敏感性表/机构建模表移动端横向可滚动。③ 治理面措辞:"关联交易/违规"此前仅因搜过查询词就显示"未发现"(`qualitative_search` 存的是搜索词非结果),改为中性"暂无公开违规记录"。④ 抄作业卡片"时间框架/仓位风格/翻盘条件"标签与正文粘连,改为标签不换行+留白+正文右对齐。⑤ 美化:维度卡顶部常驻分级色条(高绿/中金/低红)+ hover 高亮、全局平滑锚点滚动、文本选择色、`:focus-visible` 聚焦环、细滚动条、section/卡片进入视口轻浮现(尊重 `prefers-reduced-motion`)、TOC 锚点 `scroll-margin` 防遮挡。⑥ 版本对齐:3 个子 skill(investor-panel/lhb-analyzer/trap-detector)原停在 3.9.2 与主 manifest 不一致,全部统一 bump 到 3.9.4。全量 685 passed | | **Unreleased** | 2026-08-05 | **全球同行业绩对比 + 数据完整性 hotfix** · 自动按全球细分行业发现候选并补全 Top 8 年度财务,覆盖日/韩/台/新/印/加/澳/英/欧洲等 Yahoo 交易所后缀;原币与 USD 标准化值分离,跨币种原始市值不混算,同行失败隔离、后备候选递补并缓存 24h。报告新增目标高亮、同行中位数、全球分位、规模/毛利率散点和明细表,结果接入 Comps 与维度评分。同步包含 issue #87/#90 的行情 scale、自身同行剔除和美股 TTM 修复。22 个全球同行专项测试 · 全量 685 passed | | **v3.9.3** | 2026-08-07 | **茅台深度实测驱动的数据/渲染修复** · ① 现金流误判:`fcf_positive` 从 OCF/净利比改为真实 FCF,茅台(FCF 658亿)不再显示"现金流为负";`_ic_risks` 的"行业周期下行"不再无条件追加,仅行业判定衰退时才算。② 同行修复:push2 被反爬时 4_peers 曾只剩自己一行("暂无可比股")——新增 INDUSTRY_PEERS 硬编码同行兜底(白酒→五粮液/泸州老窖/洋河/山西汾酒),用 `stock_financial_analysis_indicator_em`(不走 push2)拉 ROE。③ 渲染修复:评委 pass/fail dict 不再泄漏成 Python 字面量(报告曾出现 162 处 `{'msg':...}`);4_peers 对比条 `abs(None)` 崩溃;一致目标价不再显示"(None)"。④ deep 档强制 agent 介入 role-play:`--depth deep` 不再 CLI 一把梭,须 stage1 → 读 persona → 写 agent_analysis.json(`per_investor_override` 已能真正合并)。⑤ Codex 评审反馈(P1/P2):`fcf_positive` 优先用真实经营现金流(净利×0.8 仅作缺失回退);同行兜底补别名匹配(集成电路→半导体 / 工业金属→有色金属)且被分析股不在同行列表时补 self 行;HK rank-only 的 `peer="—"` 不再被渲染成 0 对比条。45+ 回归测试 | | **v3.9.2** | 2026-07-07 | **流程与数据契约 hotfix(issue #82/#83)** · ① `fetch_financials` 显式输出 `ocf` / `ocf_history` / `ocf_to_net_income_ratio`,不再只把经营现金流藏在 `fcf` 字段里;`stock_features` 读入 OCF/净利比,避免 trap-detector 默认 1.0 误判。② `industry=None` 时 `fetch_peers` 返回 self-only fallback + reason,`fetch_valuation` 用 cninfo 市场加权 PE 兜底并标明原因。③ pipeline registry 字段契约对齐 legacy 输出(`financial_health` / `pe_quantile` 等),避免假 data_gaps。④ `agent_analysis.json` 结构性 schema error 现在真正 fallback 到脚本骨架,不再污染 synthesis。⑤ `run.py` 统一 fund summary / `--versus` / `--portfolio` 的浏览器、`--output-dir`、`--remote` 后处理;`cloudflared` 缺失时默认不自动安装,需显式 `--install-cloudflared`。8 个新回归测试 | | **v3.9.1** | 2026-06-23 | **HTML 报告导航栏可折叠(issue #79 · @QKioi)** · v3.6.0 加的左侧 sticky 章节导航栏会略微遮挡正文,本次按社区建议加折叠按钮:展开态 `◀`,点一下收起成一个 `☰` 小把手(items 全藏 · 不再压住正文),再点一下展开 · 状态写入 `localStorage`(`uzi-toc-collapsed`) 刷新记忆 · 全程安全 DOM(无 innerHTML) + `aria-expanded` 可访问性. 7 个新回归 · 总 649 passed | | **v3.9.0** | 2026-06-11 | **新评委「股海贼王」· 首位从真实交割单蒸馏的评委 (65→66)** · 数据源:淘股吧十年实盘帖 (2016-02 开贴) · 3898 张持仓截图 OCR → **8951 笔反推交割单** + **5069 条发言**. 定量画像:33 万→3131 万 (~95 倍/10 年) · 持仓中位 1 天/P75 3 天 · 同时 3-5 只 · 第一重仓中位 51% · 10 年 2010 只票题材轮动 (鸿博/川能/人民网/大众交通). 方法论蒸馏(风格提炼·不逐字转载原帖):复盘三问(为啥涨停/板块地位/大盘地位) · 弱转强快速板才算超预期 · 逻辑硬的低位票爆发力足 · 格局票=时代的情绪载体(三五倍格局论) · 反复强调不跟单. 落地:F 组 flagship · 6 条数据驱动规则 (阈值来自其真实行为统计) · 台词按风格原创撰写 · `docs/ghzw-dossier.md` 蒸馏档案. **原始交割单/截图/发言均为本地数据 · 未入库.** 实测:鸿博式妖股 bullish 100 (他真做过 22 次) · 茅台 bearish 9.5 · 美股 skip. 10 个新回归 · 总 642 passed | | **v3.8.1** | 2026-06-09 | **skills 全面体检 · H/I 两组配套层 6 处补齐** · 体检发现 v3.6.3/v3.7.0 加 14 位评委时配套层漏更新(全部静默降级所以没暴露):① 14 评委缺头像 SVG → 报告破图(gen_pixel_avatars 补齐 · 总 65)② `render_school_scores` order=[A..G] → H/I 两派分数永远不渲染 ③ GROUP_LABELS ×3 处缺 H/I → 显示裸字母 ④ `GROUP_DEFAULT` 缺 H/I → profile 全 "—" ⑤ `STYLE_GROUP_WEIGHTS` 缺 H/I → v2.7 风格加权对两组失效(现 I 在红利股 0.2/科技成长 1.5)⑥ 13 新评委补显式 MARKET_SCOPE + PERSONAS voice 台词(之前群聊全是 generic 套话). 文档同步 ~35 处(52→65 评委 / 7→9 流派 / 180→236 规则 / --school A-G→A-I). 10 个新体检回归 · 总 632 passed | | **v3.8.0** | 2026-06-08 | **Tier-1 五方法 + Serenity 严谨化 + 技术指标/杜邦扩展**(参考 `anthropics/financial-services` + `lolifamily/ashare-mcp` + `muxuuu/serenity-skill`). **① Tier-1 5 方法**(新包 `lib/tier1/`):`/ai-readiness`(AI 就绪度/卡位 · 复用 `ai_chokepoint_score`)· `/earnings-preview`(财报前预览 · Bull/Base/Bear + 隐含波动)· `/model-update`(增量更新模型 · 假设 delta + 对 DCF/Comps/thesis 影响)· `/returns`(组合收益归因)· `/rebalance`(逐持仓再平衡 + 本地化换手成本,A股无资本利得税故不做 TLH). **② Serenity 严谨化**(不再只会看多):8 罚分因子(炒作无订单/微盘流动性/杀猪盘/治理/周期/替代设计/地缘/稀释 · 封顶 60% 折扣)+ 3 级证据阶梯(强公告财报×1.0 > 中媒体卖方×0.85 > 弱叙事×0.70 · 同卡位"有定点量产"≈90 vs"仅题材"≈60)+ 供应链 8 层分层(材料→...→下游 · 越上游瓶颈分越高). **③ 指标扩展**:DuPont 杜邦分解(ROE 质量来源 margin_driven/leverage_driven · 价值派用)+ KDJ/OBV/Williams%R(K 线卡片新增副指标徽章 · 技术派用). 61 个新回归测试 · 总 622 passed | | **v3.7.1** | 2026-06-04 | **首页补 Serenity 介绍 + `--school H/I` 放开** · 用户反馈"README 没把 Serenity 写清楚". 修复:(1) 评审团章节重写 52→65 人 · 7→9 组完整表 (A–I)· 规则 180→236; (2) 新增专门 `## 🧠 I 组 · Serenity · AI 卡位/瓶颈猎手` 介绍块(她是谁 + 未审计免责 + Chokepoint Theory 作用 + "卡位决定态度"打分表 + `--school I/H` 用法); (3) **bug fix** · v3.7.0 起 evaluator `SCHOOL_LABELS` 已含 H/I 但 `run.py` argparse `choices` 还停在 A-G · 文档说能用实跑报错 · 现 choices 扩到 A-I + `_SCHOOL_NAMES` 补中文名; (4) README/CLAUDE/AGENTS/GEMINI 当前状态计数 52→65 评委同步(历史 changelog 不动). 533 passed | | **v3.7.0** | 2026-06-03 | **13 位新晋科技大佬集体入团 · 52→65 评委** · 用户反馈"评委库新晋科技 / AI / VC 视角覆盖不足". 新增分布:**B 成长派 +5** (Marc Andreessen a16z / Bill Gurley Benchmark / Naval Ravikant AngelList / Brad Gerstner Altimeter / Chamath Palihapitiya Social Capital) · **C 宏观派 +2** 做空猎手 (Michael Burry Big Short / Jim Chanos Kynikos) · **E 中国价投 +1** (张磊 高瓴 · "做时间的朋友") · **G 量化派 +1** (Cliff Asness AQR 价值×质量×动量三因子) · **H AI 卡位/瓶颈猎手 +4** (黄仁勋 NVIDIA / Musk TSLA / Sam Altman OpenAI / Saylor MSTR). 每位评委 ≥4 条规则 (测试守护) · `_render_school_lock_banner` THEMES 全派代表评委更新为真实在册成员 · H 派配色紫色 🔗. NVDA 跑分实测 Andreessen/Gerstner/Huang/Altman 全 100 · 茅台跑分 Andreessen 38 (industry filter ✓ 白酒不在 software/AI) · 张磊 80 (✓ 长跑道龙头). 18 个新回归测试 · 总 532 passed | | **v3.6.3** | 2026-06-03 | **重磅角色 Serenity · AI 卡位/瓶颈猎手(新增第 52 位评委 · 独立 I 组)** · 把 X 爆火的 AI 供应链「卡脖子/瓶颈点」投资人 Serenity ([@aleabitoreddit](https://x.com/aleabitoreddit)) 接入评审团 · 参考 [serenity-alpha skill](https://github.com/haskaomni/serenity-skill/tree/main/serenity-alpha) 方法论 + 爬 X 真实言论建语气库. **核心打分逻辑「卡位决定态度」**:新增派生特征 `ai_chokepoint_score`(AI 链命中 × 不可替代性 × 中小市值弹性 × 需求拐点)· `SERENITY_RULES` 全 weight 5 · 产品卡在 AI 瓶颈(光模块/CPO/HBM/CoWoS/InP 衬底…)+ 上游不可替代 + 小市值 → **bullish 重仓**;没卡到位/不在 AI 链上 → **bearish 不碰**(白酒/银行护城河满分也 score=0);在链但卡位不硬 → neutral 待验证. 改动 `investor_db`(独立 I 组)/`investor_criteria`/`investor_evaluator`(`--school I`)/`investor_personas`/`investor_profile`/`stock_features`/`agents/investor-panel.md`/`investor-cards.json`(置顶高亮). 新增 `group-i-serenity.md` + `fin-methods/serenity-bottleneck.md`(六步法 + alpha 5 维 + $AXTI 范例)+ `serenity-voice.md` 语气库 + `docs/serenity-research-dossier.md`(全网 20 条评价档案). 8 个新回归 + 实测水晶光电(neutral 59) · 总 533 passed | | **v3.6.2** | 2026-06-03 | **cninfo 翻页长尾修复 + Hermes 脚本 pip 探测** · 两个社群 issue 同发. **#68** ([@xy2yp](https://github.com/wbh604/UZI-Skill/issues/68)):`--versus 000958 600406 --depth lite` 卡在 15_events cninfo 公告 · `0/854 [01:53<6:11:58]` · 根因 `akshare.stock_zh_a_disclosure_report_cninfo` 内部翻完全部 854 页才返回 · 我们 `.head(30)` 是事后截取没用. 修法:新增 `_cninfo_direct_api` 直连 cninfo `/new/hisAnnouncement/query` HTTP · `pageSize=30 + pageNum=1 + 15s 硬超时` · akshare 慢路径默认禁用(`UZI_AK_CNINFO_FALLBACK=1` opt-in)· 几小时 → ≤15s. **#69** ([@FrankHuy](https://github.com/wbh604/UZI-Skill/issues/69)):Linux + Py3.11 跑安装脚本 `pip: command not found` · akshare 装不上. 修法:脚本启动加 Python 版本预检(≥3.10)· pip 五层级联探测(venv/.venv/pip/pip3/python -m pip)· 完全失败时给 apt/yum/ensurepip 三套指令 · install 失败给镜像源 + 升级 pip 建议. 12 个新回归 · 总 507 passed | | **v3.6.1** | 2026-05-29 | **Hermes Skills Guard 假阳性绕过** · [issue #66](https://github.com/wbh604/UZI-Skill/issues/66) (@zodiacg) 反馈:`hermes skills install` 报 `Verdict: DANGEROUS · 168 findings` · `--force` 也覆盖不了. 诊断:Hermes Skills Guard 模式匹配假阳性 · 把我们读 `os.environ.get("UZI_DEPTH")` 当 "exfiltration" · `subprocess.run(["brew", "install", "cloudflared"])` 当 "privilege_escalation" · HTML 注释当 "injection". Hermes 团队已知问题 ([#1006](https://github.com/NousResearch/hermes-agent/issues/1006)/[#7072](https://github.com/NousResearch/hermes-agent/issues/7072))· 官方 builtin skills 也被自家扫描器拦. 修法:新增 `install-hermes.sh` (96 行 · `set -euo pipefail`) · `curl ... \| bash` 一键 clone + symlink + venv pip · 完全等价 Hub 安装但跳过扫描. `INSTALL-HERMES.md` 头部重写解释假阳性原因. 11 个新回归测试守护 (script 存在/bash 语法/严格模式/4 skill 覆盖/venv fallback/文档链接) · 总 495 passed | | **v3.6.0** | 2026-05-29 | **视觉/交互大升级 + 多股横向对比 + 组合分析** · 三 Phase 拼合发布. **Phase A 视觉**:(1) 暗色模式 toggle(右上角 🌙 · `localStorage` 持久化 + `prefers-color-scheme` 自动初始化)· (2) 左侧 sticky TOC + IntersectionObserver scroll-spy · (3) 大评分 count-up 动画 · (4) PE/PB/ROE/DCF/IRR/WACC/EV-EBITDA/LBO/YTD/TTM/PEG/LHB 自动包 `.jargon` + 悬浮 tooltip · (5) 报告底部 QR 码(扫码直达完整报告)· 🔒 全部用 `createElement + textContent` 安全 DOM · 不用 innerHTML (XSS 防御). **Phase B `--versus`**:2-4 只票横向对比 · `lib/versus_runner.py` (380 行)· ★ WIN 高亮 12 个核心指标 · 单 HTML 自包含 · 复用 cache. **Phase C `--portfolio`**:用户上传 CSV (ticker/weight/note) · 容错解析(header/无 header/中英文列名/0-1 vs 0-100 权重)· 权重自动归一 · 输出排名 + KPI(加权评分 + 集中度 + 行业分散)+ metadata.json · `lib/portfolio_runner.py` (370 行). Phase D(`--sector` / `--as-of`)需 fetcher date-aware · 留到 v3.7. 39 个新回归测试 · 总 484 passed | | **v3.5.0** | 2026-05-29 | **单一流派视角锁定 (`--school A-G`) + SaaS 集成 (`--output-dir`)** · 社群反馈"我只想看 F 派游资视角 · 不想 51 评委一起 vote". (1) `run.py` 加 `--school A/B/C/D/E/F/G` · 价值/成长/宏观/技术/中国价投/游资/量化 七选一 · `investor_evaluator.evaluate` 入口检查 `UZI_SCHOOL` env · 非该派评委直接 `_skip_result(reason="用户锁定 X 派视角")` 不进规则引擎. (2) `synthesis.school_lock={group,label}` 编码进 syn · `_render_school_lock_banner` 7 派各自配色(A=深绿/F=深红/G=青)渲染在报告顶部 · 让分享者一眼看出本次仅看了该派 · 避免被误读为 51 评委结论. (3) `SKILL.md` 加 HARD-GATE · agent role-play 时严格只 role-play 该派 · `panel_insights` 不写跨派对比. (4) 同时合入早先准备的 `--output-dir DIR` SaaS 集成参数 · 把 `reports/{ticker}_{date}/` 拷到外部路径 + 写 `index.html` / `report.meta.json` 供 Celery worker 落库. 11 个新回归测试 · 总 445 passed | | **v3.4.5** | 2026-05-12 | **F 派游资 LHB 反查 + low-confidence banner** · 社群 codex agent 跑京东方 (000725) 实测发现两点:① F 派 23 人全 skip(市值 2000 亿超射程)· 但 LHB 实际有 3-5 个游资席位参与涨停博弈 · 评委逻辑与数据脱节. ② 规则引擎 fund_score 37.6 但 agent 重评 65/100 · 报告无任何"score 不可信"警告 · 用户误判. 修法:(1) `_is_youzi_out_of_range` 加 LHB 反查 · features.matched_youzi 含该游资昵称时强制不 skip. (2) `_render_data_gap_banner` 新增 syn 参数 · stock + fund_score<50 + cov<60% → 渲染 low-confidence 红色 banner · 文案明确引导看 agent 重评估. 10 个新回归测试 · 总 407 passed | | **v3.4.4** | 2026-05-12 | **data quality banner UX 优化** · 社群反馈两点:① ETF 报告 "覆盖率 17%" 让用户误判可信度(实际 ETF 本就无 ROE/PE 个股字段)· ② 橙色 banner 上橙色字(`#f59e0b/#fbbf24`)看不清. 修法:(1) banner 检测 ETF/LOF/mutual_fund · 切换 `fund-type` 蓝色调 banner · 文案明确"基金类型预期缺字段·不影响可信度"+ 引导看持仓股报告. (2) CSS 对比度大改 · title→#92400e 深棕 · subtitle strong→#7c2d12 + 加粗 800 · chip 文字→#7c2d12 · subtitle 正文→#1f2937 深灰. 11 个新 CSS + 行为回归测试 · 总 397 passed | | **v3.4.3** | 2026-05-12 | **开放式基金分类修复 + 字段级 fallback gate** · (1) [#60 复议](https://github.com/wbh604/UZI-Skill/issues/60) (@SchrodingerBarbatos) · 用户输 110011 易方达优质 → 被错判 convertible_bond early-exit. 修法:`classify_security_type` 在判 cb 前用 `akshare.fund_name_em` 二次校验 · 加 `mutual_fund` 类型 · run.py + preflight 路由到 fund_holdings_runner · 005xxx 等股票前缀外的基金也识别. (2) [PR #63](https://github.com/wbh604/UZI-Skill/pull/63) (@Wood Letitia · 313+137 行) · 字段级 fallback gate · 修 source-level 整块切换导致 name 永远缺的问题 · 主源拿到 price/PE/PB 但 name 空时 · 自动调 tencent_qt → baostock → ak_code_name 补全 · 仅填空不覆盖. 386 tests passed | | **v3.4.2** | 2026-05-11 | **Windows + Clash + Schannel TLS 兼容** · 社群反馈"Clash 国内规则 DIRECT 还是 Schannel · 东方财富彻底不可用 · 只有 baostock 能用". 修法:(1) `lib/data_sources.fetch_basic` 在所有 eastmoney 链路(xueqiu / push2 / baidu / tencent_qt)后追加 baostock fallback · `query_history_k_data_plus` 拿 peTTM/pbMRQ/close · `query_stock_basic` 拿 name/listed_date; (2) `fetch_financials._fetch_a_share` 当 ROE/营收/净利率全空时调 baostock `query_profit_data` 拉 5 年季报 · 解析 ROE history / 营收 history / 净利率 / 毛利率. 实测茅台 baostock 拿到 ROE=19.25% / 净利率 52.6% / 营收 893.5 亿. 6 个新回归 test (含真机烟雾) · 总 374 passed | | **v3.4.1** | 2026-05-11 | **verdict 粒度细化** · 社群反馈"神剑股份(58分) / 博云新材(60分) verdict 都是观望优先 看不出差异". 修法:(1) verdict 50-65 拆三档(观望偏空 50-55 / 观望中性 55-60 / 观望偏多 60-65)· 65-70 加"可以蹲(偏弱)"; (2) verdict label 追加"X 派看多 / Y 派看空"; (3) synthesis 加 `verdict_detail = "基本面 X · 共识 Y"` · assemble_report 渲染时拼到 verdict 后. 改后两只票 verdict 仍同段(55-60)但 detail 让基本面 +2 分差异显式可见. 5 个新回归 test · 总 368 passed | | **v3.4.0** | 2026-05-10 | **基金/ETF 持仓循环分析 + baostock ≥0.9.1** · ETF/LOF 不再 early-exit · 改为列出前 10 持仓 + 估算耗时 + **二次确认**(y / 数字 / N) · 确认后循环跑 stock-analyze + 生成 fund-holdings-summary.html. partial failure 容忍 · `UZI_FUND_AUTO_YES=1` 跳过 prompt(CI/agent). 可转债/指数仍 early-exit. 同时 `requirements.txt` 锁 `baostock>=0.9.1` (社群通知 2026-04-22 起服务端要求). 新建 `lib/fund_holdings_runner.py` (240 行) · 7 个回归测试 · 总 362 passed. 真机:510300 持仓正确拉到(茅台 5.89% top1) | | **v3.3.4** | 2026-05-10 | **mini_racer V8 crash escape hatch** ([#61](https://github.com/wbh604/UZI-Skill/issues/61)) · 用户 @dragonforai 报 `python run.py SEHK.03690 --depth deep` → `[FATAL:address_pool_manager.cc(67)] Check failed`. 根因:macOS Py 3.12/3.13 下 mini_racer V8 isolate pool 即使串行化仍可能双重初始化 SIGTRAP(进程级崩 · Python `try/except` 抓不到). 多重修法:① `UZI_DISABLE_MINI_RACER=1` 显式禁用. ② **Sentinel 文件机制(核心创新)**:调 mini_racer fetcher 前 arm `~/.uzi-skill/_minirackercrash.sentinel` · 成功后 disarm · 进程崩则 sentinel 留下 · 下次启动自动 disable + 提示用户. ③ `UZI_FORCE_MINI_RACER=1` 强制启用. legacy + pipeline 双路径都加保护. 新增 7 个回归 test · 总 355 passed | | **v3.3.3** | 2026-05-06 | **社区 PR 4 合 1**([#52](https://github.com/wbh604/UZI-Skill/pull/52) / [#54](https://github.com/wbh604/UZI-Skill/pull/54) / [#55](https://github.com/wbh604/UZI-Skill/pull/55) / [#59](https://github.com/wbh604/UZI-Skill/pull/59)) · #52 [LHB akshare 1.18+ "近一月" 失效](https://github.com/wbh604/UZI-Skill/pull/52) (@qdby26) · 改 YYYYMMDD 日期循环 + 6 mock test。#55 [agent_analysis schema docs](https://github.com/wbh604/UZI-Skill/pull/55) (@DragonQuix) · SKILL.md + analyze-stock.md 文档化 12 条 validator 校验规则。#54 (@DragonQuix) cherry-pick svg_radar import · #59 (@Charlson852) cherry-pick Python 3.11 嵌套 f-string SyntaxError 修复(**避开了 #59 原版的 items.append 缩进 bug**)· 新增 5 个回归 test 守护 · 总 348 passed | | **v3.3.2** | 2026-04-28 | **GitHub issue #50 + #51 hotfix**(社区驱动)· #50 [Stage 2 总是超时](https://github.com/wbh604/UZI-Skill/issues/50):v3.2 拆分时 `lib/report/institutional.py` 漏 import `svg_sparkline` · `_render_lbo_block` 触发 NameError → stage2 崩 · 加进 import 块即修复(致谢 @chenxiang-bj 报告 + agent 诊断)。#51 [XueQiu 登录验证失败](https://github.com/wbh604/UZI-Skill/issues/51):`/cubes/cubes_search.json` endpoint 已下线 · 改用 `/query/v1/search/cube/stock.json?q={code}` (致谢 @bilieebiliee1-design 报告 + @Kylin824 提供 fix)。3 处文件同步换 endpoint。新增 5 个回归 test · 总 337 passed | | **v3.3.1** | 2026-04-28 | **Hermes 兼容回归修复 (hotfix)** · 群友反馈"更新后不支持 hermes 报错"。根因:v3.0/v3.1/v3.2 重构期 main 上从未包含 hermes 兼容代码(`INSTALL-HERMES.md` / `skills/deep-analysis/run.py` / `requirements.txt` / 4 个 SKILL.md hermes metadata 全缺)· 但 README 仍叫 hermes 用户装 main · 装下来缺文件就崩。修复:从 `hermes-compat` 分支 cherry-pick 5 项核心适配到 main + `run.py` 加双 layout 探测。**hermes 用户重装一次 skill 即恢复**(`hermes skills uninstall` + install 4 个)| | **v3.3.0** | 2026-04-23 | **分支大整合**:唯一未合 feature(v2.10 segmental 渲染层 · 228 行 + 222 CSS)cherry-pick 到 v3.2 架构 · 新建 `lib/report/segmental.py` (555 行)。同时清理 22 个 stale 分支(refactor/* / docs/* / feature/v2.14-v2.15.3 都已 superseded)· 仅保留 main + hermes-compat · 单一开发主干. | | **v3.2.0** | 2026-04-23 | **assemble_report.py 深度拆分 (-80%)**:2964 → 587 行 · 拆 5 个子模块 `lib/report/svg_primitives` (602) / `dim_viz` (742) / `institutional` (532) / `panel_cards` (183) / `special_cards` (544)。v2.x 所有 API 保持 re-export · 332 tests 全过 · e2e 零差异 · 加 `CODEX.md` + `AGENTS.md::Repository Layout` 给 codex 准确入口指引 | | **v3.1.0** | 2026-04-23 | **run_real_test.py 瘦身 65%**:2105 → 735 行。1228 行纯函数 (`_f/score_dimensions/generate_panel/generate_synthesis/_autofill_qualitative_via_mx`) → `lib/pipeline/score_fns.py`;166 行 preflight/resolve/ETF guard → `lib/pipeline/preflight_helpers.py::prepare_target()`。rrt 做 re-export 保持完整向后兼容 · 332 tests 全过 · 002217 resume 10s 出报告 | | **v3.0.0** | 2026-04-23 | **pipeline 架构默认启用**:`python run.py ` 默认走 `pipeline.run_pipeline` · `UZI_LEGACY=1` 强制回老路径 · pipeline 异常自动 fallback。Phase 6c 解耦:`pipeline.score` 直接调 rrt 纯函数(不再走 stage1 重复 collect)· 002217 score_from_cache 从 180s → 10.6s。Pipeline 预检 guards (中文名 / ETF / LOF / 可转债 → fallback legacy) | | **v2.15.5** | 2026-04-23 | **评分公式重校准**:`panel_consensus` 从单一 vote 公式升级为混合公式 `0.65*score_mean + 0.35*vote_weighted` + 极化拉伸 (k=1.3) · 解决"大多数分在一个区间徘徊"问题 · 7 流派 consensus 分歧更清晰 · 002217 F 游资 51→43.7(vote 高估修正)· G 量化 50→59.3(实分低估修正) | | **v2.15.4** | 2026-04-22 | **按流派打分 school_scores**:7 大流派 (A 价值 / B 成长 / C 宏观 / D 技术 / E 中式 / F 游资 / G 量化) 各自产出 consensus/avg_score/verdict · 报告新增"SCHOOL SCORES"卡片 · 同一只票可见不同哲学的分歧(宏观派买入 vs 成长派回避) | | **v2.15.3** | 2026-04-21 | **性能 hotfix** · fetch_capital_flow 每股重抓全 A 大宗/解禁/融资数据集 → 每股 3+ min · 新增 `_universe_*()` 4 个 helper + `cached("_universe", ...)` 24h TTL · 全股共享 · 二次跑 universe 部分 0.01s(**100+ 倍加速**)· 6 专项测试 | | **v2.15.2** | 2026-04-21 | **GitHub issue hotfix**:#36 Gemini CLI 安装报错(gemini-extension.json 加 version + 纳入 version-bump)· #30 网络自检增强(Clash 本地代理端口侦测 + 数据源分组诊断 + 多行修复建议 · 写进 `.cache/_global/network_profile.json` 供 agent 读)· 10 专项测试 | | **v2.15.1** | 2026-04-20 | **报告质量 2 bug hotfix**(实测 300470 发现)· Bug 1: fund-card 一堆 "5Y +0.0%" 假数据 · 修 `_build_row_full` + `render_fund_managers` 让 lite 行降级 · Bug 2: 14_moat 护城河被贵州茅台数据污染(DDGS 对生僻公司返超级股票结果)· 加 `_SUPERSTAR_POLLUTERS` 过滤 · 11 专项测试 | | **v2.15.0** | 2026-04-20 | **YAML persona 接入 agent role-play**(借鉴 augur · 取长补短):新增 `personas/` 目录 51 个 YAML 文件(12 flagship 手写 + 39 stub 自动生成)· `lib/personas.py` 加载 + prefix-stable system message(prompt cache 省 50-90%)· `lib/i18n.py` zh/en 语言开关 · `HARD-GATE-PERSONA-ROLEPLAY` 强制 agent 读 YAML · 双盲测试(3 股 × 5 投资者)显示 YAML 14/15 vs Rules 8/15 方向准确率 · 修复 Rules 4 类"历史立场错位"硬伤 · 14 专项测试 | | **v2.14.0** | 2026-04-20 | **自动检测 GitHub 新版本**:每次启动 CLI 或 agent 会话,插件会检测 GitHub latest release · 有更新则弹 `y / s / n` 三选一(是 / 跳过本版 / 否)· 跳过本版后直到下一版才再弹 · 6h 缓存防 API 限流 · 非 TTY / `UZI_NO_UPDATE_CHECK=1` / 网络异常 silent skip 不阻塞 · `HARD-GATE-UPDATE-PROMPT` 让 agent 主动展示 · 13 专项测试 | | **main** | 2026-04-20 | **Segmental Revenue Build-Up 落地**(`lib/segmental_model.py` 408 行 + `compute_segmental.py` CLI + `/segmental-model` slash command)· deep 档 `enable_segmental_model` flag 之前只在 profile 声明,实现缺失——本次从老分支 cherry-pick 3 个新文件,零冲突接入 · 同步新增 `CONTRIBUTORS.md` · 清理 14 个已合入幽灵分支 | | **v2.13.7** | 2026-04-19 | **16 新源真正接入 fetcher**:v2.13.4/6 登记但未用的 16 源全部接通——新建 `lib/news_providers.py`(jin10/em 快讯/em 公告/同花顺 4 源聚合)接入 `fetch_events` + `fetch_sentiment`;`_yahoo_v8_chart` 直连 HTTP 接入 US/HK K 线链(绕 yfinance cookie);cfachina 期货协会源接入 `fetch_policy`(期货/商品 industry 专用)。实测 4/4 新闻源通 · A 股 15_events 密度 3-5 → 10-30 条 · pytest 217 passed | | **v2.13.6** | 2026-04-19 | **新增 6 个经 curl 验证的期货 + 财经新闻源**(SOURCES 64 → 70):jin10_flash(类财联社零 Key 替代)/ em_kuaixun / em_stock_ann / ths_news_today / 99qh / cfachina · 8 专项测试 | | **v2.13.5** | 2026-04-19 | **NetworkProfile 自适应 + agent HARD-GATE 主动触发 Playwright**:9 目标 3 组网络预检(domestic/overseas/search)+ 代理检测 + 5min cache · SKILL.md / AGENTS.md 加 `HARD-GATE-PLAYWRIGHT-AUTOFILL` 让 agent 主动 FORCE · 15 专项测试 | | **v2.13.4** | 2026-04-19 | **新增 10 个经 curl 验证的无 Key 公开数据源**(SOURCES 54 → 64):Yahoo Chart v8 / 腾讯 qt HK / 加密货币(CoinGecko/Binance/CoinCap)/ ECB / World Bank 等 · 11 专项测试 | | **v2.13.3** | 2026-04-19 | **51 评委规则全员历史立场还原**:林奇 PE<40 Rolls Royce 红线、索罗斯 long/short 拆分、木头姐 CPO/光模块 whitelist、段永平/张坤/邓晓峰 PE 硬红线、游资 range 校验 · 10 专项测试 | | **v2.13.2** | 2026-04-19 | **Playwright 触发逻辑升级 · 数据质量感知 + FORCE flag**:`_dim_quality_score` 公开字段真空检测 · `UZI_PLAYWRIGHT_FORCE=1` 强制全维兜底 · 8 专项测试 | | **v2.13.1** | 2026-04-18 | **Playwright 全 10 维覆盖**(开源研究场景扩展):v2.13.0 Codex 保守排除的 5 维(7_industry 百度搜索 / 14_moat 百度百科 / 13_policy 证监会 / 18_trap 小红书 / 19_contests 雪球组合)全部加回 · medium 4→6 维 · deep 5→10 维 · 22 专项测试 | | **v2.13.0** | 2026-04-18 | **Playwright 通用兜底 · 按三档 profile 分级**:lite `off` / medium `opt-in` (4 维) / deep `default` (5 维 · 首次 y/n 自动装 Chromium)。新增 `lib/playwright_fallback.py` · 抽离 `lib/junk_filter.py` | | **v2.12.1** | 2026-04-18 | **4 个报告板块空数据/错数据修复**(中际旭创实测驱动):4_peers 三层 fallback + 雪球 Playwright opt-in · 7_industry regex 上下文感知 · core_material 垃圾过滤 · BCG 真实算 market_share + 阈值调整 · 16 专项测试 | | **v2.12.0** | 2026-04-18 | **6 平台社交热榜聚合**:微博/知乎/百度/抖音/头条/B站 官方 API + 5min 文件缓存 + 单平台失败不影响其他 · `17_sentiment` 维度新增 `hot_trend_mentions` 字段补 DuckDuckGo 盲区 · 抄 jcp/hottrend 设计 · 17 个专项测试 | | **v2.11.0** | 2026-04-18 | **评分校准(用户反馈驱动)**:论坛+微信反馈"茅台 47 分"、"没超过 65 分" → verdict 阈值 `85/70/55/40 → 80/65/50/35`;consensus neutral 权重 `0.5 → 0.6`(A 股白马结构性偏低问题);`stock_style` 同步对齐 | | **v2.10.7** | 2026-04-18 | **Codex 审查 3 处修复**:`raw.market` 硬编"A"污染 HK/US · `resume` 对别名输入失效(中文名/三位港股 cache 不命中)· AGENTS.md 强制全量流程与 CLI/lite 降载设计冲突 → 深浅两路径决策树 | | **v2.10.6** | 2026-04-18 | **Providers 框架实际落地**:v2.10.3 建的 5 provider 链(akshare/efinance/tushare/baostock/direct_http)实际接入 `data_sources.py` K 线链 · Tushare kline 补齐 · `hermes skills install` 风格 health CLI | | **v2.10.5** | 2026-04-18 | **v2.10.4 遗漏补丁**:`check_coverage_threshold` profile-aware(lite 不再结构性偏低)· `run.py` 自动 `UZI_CLI_ONLY=1`(medium/deep CLI 直跑也出报告)· `render_fund_managers` None 字段兜底 | | **v2.10.4** | 2026-04-17 | **Codex 测试反馈 3 bug**:lite 模式 self-review 9 critical 误报 · `agent_analysis.json` 缺失 CLI 直跑误报 critical · ETF 早退 `RuntimeError: Stage 2 缺少数据` | | **v2.10.3** | 2026-04-18 | **三档思考深度**:`lite` (30s-2min · 7 维 + 10 投资者) / `medium` (2-4min · 默认 · 22 维 + 51 投资者) / `deep` (15-20min · 含 Bull-Bear 辩论 + Segmental) · `--depth` CLI arg · direct_http provider(腾讯/新浪/etnet 直连脱离 akshare) | | **v2.10.0-2** | 2026-04-18 | 首次安装 + Codex 机器耗时/token 优化 · `lib/net_timeout_guard` 4 层网络超时保护(代理/GFW 不通快速 fail) · Fund holders 双层策略(Top N full + rest lite) · 首次运行 10-15min → 2-4min | | **v2.9.x** | 2026-04-17 | **机械级 agent 自查 gate**:13 条自动检查 + `assemble_report` 入口强制 block critical → 修完再出 HTML · fetch_industry 动态 `search_trusted`(236 个行业不再是"—")· HK industry_pe fallback · consensus 半权公式 | | **v2.8.x** | 2026-04-17 | **BUG#R10 修复** 行业分类碰撞(工业金属→农副食品加工)· 134 条申万→证监会硬映射 · 22 位海外人物真实原话 + URL 溯源 · 每评委自己方法论回答 3 字段 · English README · Munger/Alibaba hook | | **v2.7.x** | 2026-04-17 | HK financials 实现(BUG#R7)· HK kline fallback 链(BUG#R8)· wave2 flush(BUG#R9)· 风格动态加权 7+1 · 量化结构性识别(top-1<2%)· XueQiu 登录 opt-in · 14 权威数据源 + search_trusted | | **v2.6.x** | 2026-04-17 | agent 闭环写回 · `agent_analysis.json` 合并 · dim_commentary · 22 维覆盖 | | **v2.5** | 2026-04-16 | 数据源注册表 54 条 · HK AASTOCKS 支持 · 3 层 tier 分类 | | **v2.0–v2.3** | 2026-04-16 | 17 种机构分析方法 · 51 评委 180 规则 · 两段式 pipeline · MX 妙想 API · 多平台支持 | | **v1.0** | 2026-04-14 | 初版 · 19 维 + 50 评委 + 杀猪盘检测 | 完整更新日志见 [RELEASE-NOTES.md](RELEASE-NOTES.md) --- ## 🤝 致谢 - [anthropics/financial-services-plugins](https://github.com/anthropics/financial-services-plugins) — 机构级分析方法论 - [obra/superpowers](https://github.com/obra/superpowers) — 多平台架构 / HARD-GATE / hooks / sub-agent 设计 - [akshare](https://github.com/akfamily/akshare) — A 股数据引擎 - [titanwings/colleague-skill](https://github.com/titanwings/colleague-skill) — Skill 架构参考 - [virattt/ai-hedge-fund](https://github.com/virattt/ai-hedge-fund) — Pydantic Signal 模式 - [TauricResearch/TradingAgents](https://github.com/TauricResearch/TradingAgents) — 多空辩论循环 --- ## ⚠️ 免责声明 本工具由 AI 模型基于公开数据生成分析报告。所有评分、建议、模拟评语均为算法输出,不代表任何真实投资者的实际观点。**不构成投资建议**,投资有风险,入市需谨慎。 --- ## ⭐ Star History 实时 stars: > 注:star-history.com 服务端有 24h 缓存,增长很猛的前几天图可能滞后(想看当前真实数字看上面的 shields.io badge,或点图进 star-history 官网会触发刷新)。 --- --- ## File: docs/superpowers/specs/2026-06-03-serenity-role-design.md # 重磅角色 Serenity 接入 UZI-Skill 评审团 — 设计文档 - 日期:2026-06-03 - 状态:待用户审阅 - 参考:[serenity-alpha skill](https://github.com/haskaomni/serenity-skill/tree/main/serenity-alpha)、X @aleabitoreddit ## 1. 背景与目标 Serenity(X @aleabitoreddit)是 2026 年爆火的海外散户/研究员,前 AI 研究科学家、前 RISC-V 基金会成员、光通信工程师。核心方法论是 **「AI 产业链卡脖子/瓶颈点」投资法**:不直接买 AI 龙头, 而是拆解供应链、找到**最难被替代、最容易出现供给瓶颈的二三线上游小盘**,抢在市场定价之前埋伏。 代表战是提前一年押中 InP 衬底瓶颈股 AXTI($12 → $70+,10 倍+)。 目标:把 Serenity 作为**重磅角色**接入 UZI-Skill 的投资大佬评审团,覆盖 4 件事: 1. 新增一位评委(独立流派); 2. 实现「卡位决定态度」的打分逻辑; 3. 提供独立的「瓶颈点投资法」分析模块; 4. 模仿其真实语气 + 沉淀其底层知识库; 并额外交付一份**全网研究方法评价档案**。 ## 2. 现状架构(接入点) 评审团是**双层架构**: - **规则引擎层**(确定性):`skills/deep-analysis/scripts/lib/` - `investor_db.py` — 每位评委元数据(id/name/group/fields/avatar_seed),`assert_count` 现为 51。 - `investor_criteria.py` — `INVESTOR_RULES[id]` = `Rule(check=lambda features)` 列表,出「骨架分」。 - `investor_evaluator.py` — 跑规则 → score/signal/confidence;`SCHOOL_LABELS` 现为 A–G; `--school` 可锁单一流派;F 组有射程检查。 - `investor_personas.py` — `PERSONAS[id]` = bullish/bearish/neutral 的 signature lines(拟人台词)。 - **LLM agent 层**(拟人):`agents/investor-panel.md` — 按 Group Profile 复盘,**可覆盖**规则骨架分, 产出最终 `{signal, score, headline, reasoning}` JSON。 - **展示层**:`skills/investor-panel/assets/investor-cards.json`(HTML 渲染卡片)、 `skills/investor-panel/references/group-{a..g}.md`(方法论)、`quotes-knowledge-base.md`(语料)。 - 特征来源:`stock_features.py`,已有 `5_chain`(供应链)、`14_moat`(护城河 4 维)等维度。 现状注意点: - 无 `build_cards.py`(`_meta` 注释提到但不存在);`investor-cards.json` 现有 50 条 vs db 51 条, **已存在漂移**。本次手动同步,把 Serenity 补成第 52 条。 - `fin-methods/` 目录现仅 `README.md`。 ## 3. 设计决策 | 决策 | 选择 | 理由 | |---|---|---| | 卡位判断放哪层 | **双层都做** | 规则引擎出 `ai_chokepoint_score` 骨架分(可追溯),LLM agent 层用人设做最终裁决,与现有哲学一致 | | 流派归属 | **新建 H 组**「AI 卡位/瓶颈猎手」 | 方法论独特,塞进 A–G 任一组都失真;独立组可被 `--school H` 单独锁定 | | 显示名 | **Serenity** + 中文 tagline「AI 卡脖子猎手」 | 保留推特 ID 辨识度 | | 票权 | **仅高亮置顶,不加票权**(一人一票) | 不破坏现有共识分公平性;重磅感由高亮卡片 + 独立方法论专栏体现 | | 语气来源 | 爬 @aleabitoreddit X 原帖 + Tracker/Substack/媒体直接引用 | 真实语料,避免编造 | ## 4. 实现方案(5 块) ### 块 1 · 新增第 52 位评委(H 组) - `investor_db.py`:在末尾新增 H 组与条目: ```python {"id": "serenity", "name": "Serenity", "en": "Serenity (@aleabitoreddit)", "group": "H", "tier": "flagship", "fields": ["5_chain", "7_industry", "14_moat", "13_policy", "15_events"], "source": "serenity-alpha skill / X @aleabitoreddit", "avatar_seed": "Serenity-Chip"} ``` `assert_count` 51 → 52;`__main__` 自检按组计数保持通过。 - `investor_evaluator.py`:`SCHOOL_LABELS["H"] = "AI 卡位/瓶颈猎手"`(使 `--school H` 生效)。 - `investor_personas.py`:新增 `PERSONAS["serenity"]`(见块 5)。 - `skills/investor-panel/references/group-h-serenity.md`:H 组方法论文档。 - `skills/investor-panel/assets/investor-cards.json`:手动新增 Serenity 卡片,`_meta.count`/groups 同步, `tier:"flagship"` 字段用于前端置顶高亮。 ### 块 2 · 卡位打分逻辑(核心) 新增派生特征 `ai_chokepoint_score`(0–100),在 `stock_features.py` 计算,四因子合成: 1. **AI 链命中**:行业/`5_chain` 文本命中关键词库(光模块/CPO/光芯片/HBM/CoWoS/先进封装/InP 衬底/ PCB/液冷/铜连接/电源/交换机/AI-ASIC/RISC-V/铜缆/PCB 载板…)。 2. **不可替代性**:`14_moat` 的 switching(切换成本)+ scale 分位高 → 上游卡点。 3. **弹性**:中小市值(市值越小弹性越大)。 4. **需求拐点**:`13_policy` / `15_events` 出现需求/扩产/缺货信号。 `SERENITY_RULES`(全部 weight 5,体现强信念): - 看多:`ai_chokepoint_score ≥ 70` 且不可替代性达标 → bullish。 - 中性:在 AI 链但卡位不明确(score 40–70)→ neutral,列出待验证项。 - **看空/skip:`ai_chokepoint_score < 40`(产品在 AI 浪潮里没卡到位)→ 他直接不碰** (= 用户强调的「卡位决定态度」)。 - LLM agent 层(块 4)H 组 profile 一句话定调: *「我只看一件事——这家的产品在当前 AI 浪潮里卡没卡住脖子。卡住=重仓,没卡=不看。」* ### 块 3 · 独立「瓶颈点投资法」分析模块 - 新增 `skills/deep-analysis/references/fin-methods/serenity-bottleneck.md`,落地 serenity-alpha 六步法: ① 信号去噪 ② 映射财务科目 ③ 猎misclassified 小盘 ④ 验证错误定价 ⑤ 建验证链 ⑥ alpha 评分。 alpha 5 维评分:**确定性 / 清晰度 / 纯度 / 弹性 / 时间窗**。 - 报告输出**独立专栏**:供应链瓶颈地图 → 卡位评级 → 验证链(财报/backlog/ASP/产能/客户 roadmap) → 仓位建议。挂到 `task2.5-qualitative-deep-dive.md` 与 `task3-investor-panel.md` 流程。 ### 块 4 · LLM agent 接入 - `agents/investor-panel.md` 增加 `### Group H · AI 卡位/瓶颈猎手 (Serenity)` profile: 焦点 = 供应链不可替代性、二三线上游、需求拐点;忽略 EPS/估值传统指标; 卡位裁决规则 + 上面那句定调;可覆盖规则骨架分。 - `task3-investor-panel.md` / `task3-agent-evaluation.md`:H 组纳入分派与 schema。 ### 块 5 · 语气模拟 + 底层知识库 - 实现阶段爬取/汇总 @aleabitoreddit 原帖 + Tracker(semiconstocks.com)/Substack/PANews/Futu 等直接引用, 产出: - `skills/investor-panel/references/serenity-voice.md` — 底层知识库(方法论 + 典型案例 AXTI 等 + 口头禅/术语表)。 - 并入 `quotes-knowledge-base.md` — 全局语料复用。 - `PERSONAS["serenity"]` signature lines 用其真实口吻,示例: - bullish:「别盯着 EPS——问这家在 AI 基建里可不可被替代。不可替代,就是印钞机。」 - bearish:「{name} 在供应链里没有卡点,对我没意义。」 - neutral:「卡位还没被验证,等客户 roadmap / 缺货信号坐实再说。」 风格标签:技术流、供应链偏执、鄙视盯短期 EPS、断言式、点名具体节点、略带战斗性。 ### 交付物 · 全网研究方法评价档案 - 新增 `docs/serenity-research-dossier.md`:汇总知乎/雪球/PANews/区块周刊/东方财富/腾讯/网易/ Futu/KuCoin/HTX/Substack/semiconstocks 等所有帖子与评价。 - 每条 = 来源 + 核心观点摘要 + 对其方法的评价(正面/质疑,含「从不公开认错」「选择性展示」 「收益不可审计」等批评)+ 原文链接。实现阶段再扩一轮搜索做全。 ## 5. 测试与验收 - `investor_db.assert_count()` → 52 通过;`python investor_db.py` 分组计数含 H=1。 - 新增 `test_serenity_rules.py`: - AI 卡点小盘(如模拟 AXTI 类)→ Serenity bullish 且 score 高; - 非 AI/无卡位标的(如白酒/银行)→ skip 或 bearish; - `--school H` 锁定时仅 Serenity 参与、其余 skip。 - 现有 `test_v2_13_3_investor_rules.py` 等回归不破。 - 报告渲染:卡片置顶高亮 + 瓶颈点投资法专栏正常出现。 ## 6. 影响文件清单 - 改:`investor_db.py`、`investor_evaluator.py`、`investor_criteria.py`、`investor_personas.py`、 `stock_features.py`、`agents/investor-panel.md`、`investor-cards.json`、 `task2.5/task3` 两个 reference、`quotes-knowledge-base.md`。 - 增:`references/group-h-serenity.md`、`fin-methods/serenity-bottleneck.md`、 `references/serenity-voice.md`、`docs/serenity-research-dossier.md`、`tests/test_serenity_rules.py`。 ## 7. 非目标(YAGNI) - 不做实时抓取 X API(用静态汇总语料)。 - 不改共识分聚合算法(不加票权)。 - 不重构现有 build_cards 缺失问题(仅手动同步本次卡片)。 --- ## File: docs/BUGS-LOG.md # BUGS-LOG · 防回归记录 每个 bug 修完都登记到这里。**未来改这些代码区域时,必须回看本文件确保不引入回归。** 对应单元测试在 `skills/deep-analysis/scripts/tests/test_no_regressions.py` + `tests/test_v2_10_4_fixes.py` + `tests/test_v2_11_scoring_calibration.py` + `tests/test_v2_12_1_data_fixes.py` + `tests/test_v2_13_playwright_strategy.py` + `tests/test_v3_9_2_flow_bugfixes.py` + `tests/test_issue87_em_direct_and_comps.py` + `tests/test_issue90_us_financials_ttm.py`。 **登记规范**:每条必含 症状 / 位置 / 根因 / 影响 / 修法 / 验证 / 回归测试 / "未来改该区域注意事项" --- ## Unreleased (2026-07-18 · 数据完整性 hotfix · issue #87/#90) ### BUG · 东财直连字段/单位误读、Comps 自引用、美股财报只看年报 - **症状**: 1. [#87](https://github.com/wbh604/UZI-Skill/issues/87) · A 股基础数据走 EastMoney push2 直连 fallback 时,把 `f47` 成交量错误当作 `change_pct` 兜底,导致涨跌幅异常;同时 `f116` 市值原始单位是元,下游按“亿”读会把 DCF/市场份额等派生指标放大 1e8 倍。 2. [#87](https://github.com/wbh604/UZI-Skill/issues/87) · Comps 同行估值在只有目标公司自身样本时仍继续计算分位与估值结论,报告可能出现“自己和自己对标”的假结论。 3. [#90](https://github.com/wbh604/UZI-Skill/issues/90) · 美股财务数据只读取 `yfinance.Ticker.financials` 年报,未合并更新的 quarterly financials,财报季后会继续展示旧年报口径,无法暴露 TTM 最新收入/净利。 - **位置**: - `lib/data_sources.py::_fetch_basic_a` / `_fetch_financials_impl` - `lib/stock_features.py::extract_features` - `lib/fin_models.py::build_comps_table` - `fetch_financials.py::_fetch_us` - **根因**: - EastMoney push2 字段 scale 混杂:`f43/f60` 是 price * 100,`f170` 是涨跌幅 * 100,`f47` 是成交量,`f116/f117` 是元;旧代码没有集中解析契约。 - Comps 模型只检查 `peers` 是否为空,没有剔除 `is_self` / 同 ticker / 同 name,也没有最低有效同行数 gate。 - 美股路径把年报列直接作为最新历史序列,没有读取 `quarterly_financials` 做最近 4 季 TTM,也没有 `financial_basis` / `financial_period` 告诉报告当前口径。 - **影响**: - A 股 fallback 下涨跌幅、市值、市占率、DCF per-share 和估值结论可能严重失真。 - 同行样本不足时仍给出估值判断,用户会把无样本报告误读成有效 peer comp。 - 美股在最新季报后仍显示旧年报趋势,尤其对周期股/半导体/高波动成长股会低估或高估盈利拐点。 - **修法**: 1. 新增 `_parse_em_direct_payload` 集中归一化 push2 字段:只用 `f170` 或 `price/prev_close` 计算 `change_pct`,`f47` 只保留为 `volume`,`f116/f117` 转成 `xx亿` 并保留 raw。 2. `stock_features._market_cap_to_yi` 识别原始元单位并转成“亿”,市值、市占率走同一转换函数。 3. `build_comps_table` 剔除目标公司自身样本;有效同行少于 2 家时直接返回“同行样本不足 · 无法对标”,不输出分位和隐含价。 4. `_fetch_us` 读取 quarterly financials 最近 4 季 TTM;季度期末晚于年报时追加 `revenue_ttm` / `net_profit_ttm`,写 `financial_basis=TTM` 和 `financial_period`;最新口径超过 180 天时写 staleness warning。 5. `_fetch_financials_impl` 美股原始源暴露 `quarterly_income`,让数据排查能看到季度输入。 - **验证**: - `tests/test_issue87_em_direct_and_comps.py` 覆盖东财字段不把成交量当涨跌幅、原始元市值转“亿”、self-only Comps 被拒绝。 - `tests/test_issue90_us_financials_ttm.py` 覆盖 quarterly TTM 追加、旧财报时效 warning、raw data source 暴露 `quarterly_income`。 - 全量 `pytest tests -q`:663 passed。 - **未来改该区域注意事项**: - 新增东财 push2 字段时必须先写字段 scale 注释和解析测试,不要在 fetcher 内临时 `(field or other_field) / 100`。 - 下游模型的市值统一使用“亿”口径,raw 元只能作为溯源字段存在。 - Comps 估值必须有真实 peer universe;少于 2 家同行只能展示数据缺口,不能生成估值结论。 - 美股报告展示历史财务时必须同时写 `financial_basis` 和 `financial_period`,避免用户不知道当前是 annual 还是 TTM。 --- ## v3.9.2 (2026-07-07 · 流程与数据契约 hotfix · issue #82/#83) ### BUG · OCF 缺失、industry=None、CLI report 后处理早退、agent_analysis 坏结构继续合并 - **症状**: 1. [#82](https://github.com/wbh604/UZI-Skill/issues/82) · `fetch_financials` 只把经营现金流写成 `fcf`,没有显式 `ocf` / `ocf_history` / `ocf_to_net_income_ratio`,A 股 trap-detector 的现金利润匹配规则会读不到真实 OCF。 2. [#83](https://github.com/wbh604/UZI-Skill/issues/83) · `basic.industry=None` 时 `fetch_peers` 整个 A 股分支跳过,返回空同行表且 `fallback=False`;`fetch_valuation` 也直接丢行业/市场 PE。 3. fund/ETF/LOF 持仓汇总、`--versus`、`--portfolio` 生成 HTML 后直接 `sys.exit(0)`,绕过 `--output-dir` / `--remote` / 浏览器打开。 4. `agent_analysis.json` schema error 只打印 `_agent_analysis_errors.json`,但仍传给 `generate_synthesis`,坏结构可能污染报告或触发 `.get()` 异常。 - **位置**: - `fetch_financials.py` 现金流段 - `fetch_peers.py` A 股 `industry` 分支 - `fetch_valuation.py` cninfo 行业 PE 段 - `run.py` CLI 分支和 remote 后处理 - `run_real_test.py::stage2` - `lib/pipeline/fetchers/registry.py` - **根因**: - 数据契约漂移:legacy fetcher 输出 `financial_health` / `pe_quantile`,registry 却期待顶层 `debt_ratio/current_ratio` / `pe_ttm/pe_percentile`。 - 控制流分散:多报告模式各自早退,没有共享 report post-process。 - schema validator 只写错误清单,没有把 error 级问题转成 fallback。 - **影响**: - 现金流质量被默认值掩盖,可能把 OCF/净利大幅背离的股票误判为通过。 - 行业缺失时报告同行/估值区块空白但不标 fallback。 - SaaS/远程查看模式在 fund/versus/portfolio 下失效。 - 非 Claude/Codex 生成的坏 `agent_analysis.json` 可能导致 stage2 崩溃或错用用户覆盖字段。 - **修法**: 1. `fetch_financials._apply_operating_cash_flow` 显式输出 OCF 字段;`stock_features` 读取 `ocf_to_net_income_ratio`。 2. `fetch_peers` 在 industry 缺失时 self-only fallback,并写 `fallback_reason`。 3. `fetch_valuation` 在 industry 缺失/未匹配时用 cninfo 市场加权 PE 兜底,并写 `industry_pe_fallback_reason`。 4. pipeline registry 对齐 legacy 输出字段。 5. `run.py` 抽出 direct report path + shared post-process,fund summary / versus / portfolio 均复用 `--output-dir` / `--remote`;`cloudflared` 缺失时默认只提示,显式 `--install-cloudflared` 才自动安装。 6. `run_real_test._validate_agent_analysis_or_fallback` 对 error 级 schema issue 直接丢弃 payload,回退脚本骨架。 - **验证**:新增 `tests/test_v3_9_2_flow_bugfixes.py`,覆盖 8 个回归。 - **未来改该区域注意事项**: - 新增/改名 fetcher 字段时,同步更新 `lib/pipeline/fetchers/registry.py`,并加行为测试,不只 grep 源码。 - 所有“生成 HTML 的 CLI 模式”都必须返回 report path 并进入统一 post-process;不要再在 runner 分支里直接 `sys.exit(0)`。 - `cloudflared` / `brew` / `sudo` 属于系统变更,默认只提示,必须显式 opt-in。 ## v3.8.1 (2026-06-09 · 全面体检 · H/I 两组配套层 6 处补齐) ### BUG · 加评委没加配套 · 6 个静默降级缺陷 - **症状**:v3.6.3 (Serenity I 组) / v3.7.0 (13 位科技大佬 H 等组) 上线后 · 报告中 ① 14 位新评委头像破图 ② 流派评分卡永远只显示 7 派(H/I 静默消失)③ H/I 组标签 显示裸字母 ④ H/I 评委的 time_horizon/position_sizing 全 "—" ⑤ 风格动态加权对 H/I 失效 ⑥ 新评委群聊台词全是 generic 套话 - **根因**:加评委只改了 investor_db + investor_criteria · 但仓库里有 **6 处按组 遍历/查表的硬编码 A-G 配套层** · 全部用 `.get(g, default)` 优雅降级 → 不崩 · 所以 CI 全绿 · 视觉缺陷一直没暴露 - **修法**: 1. `gen_pixel_avatars.py` 重跑 → 补 14 头像(脚本本身就支持增量 · 之前没人跑) 2. `special_cards.render_school_scores` order A-G → A-I 3. `panel_cards.GROUP_LABELS` + `special_cards` 内联副本 → 补 H/I 4. `investor_profile.GROUP_DEFAULT` → 补 H/I 流派档案 5. `stock_style.STYLE_GROUP_WEIGHTS` 8 风格 × 补 H/I 列 6. `MARKET_SCOPE` 13 人显式登记 + `PERSONAS` 13 人 voice 台词 - **验证**:10 个体检回归测试 (`test_v3_8_1_audit_fixes.py`) · 632 passed - **未来改该区域注意事项**(防再犯 · 关键): - **加新评委的 checklist**(缺一不可):investor_db → investor_criteria → `gen_pixel_avatars.py` 重跑 → MARKET_SCOPE → PERSONAS 台词 → 若新增组: GROUP_LABELS ×2 / render_school_scores order / GROUP_DEFAULT / STYLE_GROUP_WEIGHTS / SCHOOL_LABELS / run.py --school choices / _render_school_lock_banner THEMES / score_fns GROUP_META - 体检测试 `test_v3_8_1_audit_fixes.py` 已把以上大部分变成硬断言 · 新加组时这些测试会先红 · 跟着修就不会漏 - 不要依赖 `.get(g, 1.0)` 这类优雅降级当"没问题"的证据 —— 它恰恰是 本次 6 个缺陷能潜伏两个版本的原因 --- ## v3.6.3 (2026-06-03 · 重磅角色 Serenity · AI 卡位/瓶颈猎手 I 组) ### BUG · Serenity 卡位关键词库漏掉 AR/消费光学,把光学股误判成「不在 AI 链」 - **症状**:实测 `python run.py 002273 --depth lite`(水晶光电,真实行业「光学光电子」· AR/VR + 车载光学 + iPhone 相机模组 · 市值 404 亿)· Serenity 给出 `bearish / 0`,headline「不在 AI 产业链上 —— 对我没有意义」。但水晶光电明显踩在 AR/AI 光学链上,应识别为「在链但卡位不够硬 → neutral」,而非一票否决。 - **位置**:`skills/deep-analysis/scripts/lib/stock_features.py` · 派生特征 `ai_chokepoint_score` 的 `_AI_CHOKEPOINT_KW` 关键词库 - **根因**:关键词库只覆盖了**数据中心光**(光模块/CPO/光通信/光器件/激光器)+ 先进封装 + 化合物半导体 + 互连 + 算力,**漏了 AR/消费/车载光学族**(光学/光电子/光学元件/光波导/滤光片/镀膜/棱镜/镜头/相机模组/AR-VR/近眼显示/车载光学)。`光学光电子` 行业整段命中 0 词 → `ai_chain_hit=False` → 直接腰斩到 score≈0。 - **影响**:所有 AR/VR/消费光学/车载光学方向的真实卡位候选(水晶光电、蓝特光学、舜宇、长光华芯等)会被 Serenity 误判为「不在 AI 链」而错杀,丧失「在链→再按不可替代性/市值判断」的分级能力。 - **修法**:`_AI_CHOKEPOINT_KW` 扩充一组 AR/光学终端侧词条。**注意刻意不加裸词 `ar`/`vr`/`mr`**(会在 lowercase 的 JSON blob 里匹配到 market/margin/warrant 等英文子串造成全局误命中)· 改用中文词(增强现实/虚拟现实/混合现实/头显/近眼显示)+ 带斜杠的 `ar/vr` + `ar眼镜`。 - **验证**: - 水晶光电真实数据重评 → `ai_chain_hit=True`(命中 光学/光电子/相机模组/ar-vr/车载光学)· 卡位分 70.1 · 但不可替代=False(切换5+规模6=11<12) + 市值404亿>300 → **neutral / 59**「命中 AI 链但可替代性偏高、市值偏大,不是真瓶颈」(地道的 Serenity 视角) - `test_serenity_rules.py` 7 项不破:白酒(高粱酿造)/银行(存款贷款) 仍 `ai_chain_hit=False` → bearish(无 AR/光学词误命中) - 全量 532 passed - **未来改该区域注意事项**: - **永远不要在 `_AI_CHOKEPOINT_KW` 加 2 字母以内的裸英文词**(ar/vr/mr/ic/ai 单独)· blob 是 lowercase 拼接的中英文 + JSON · 短英文子串必然误命中。要加英文必须够长够特异(waveguide / micro-led / cowos)。 - 扩词只影响 `ai_chain_hit` 这道**门槛**;是否 bullish 仍由 `chokepoint≥70 + 不可替代 + 中小市值` 三条 weight-5 规则把关。所以扩词宁可**宽进严出**,不会让普通光学股变成 Serenity 重仓。 - 改词库后必跑 `test_serenity_rules.py::test_bearish_on_non_ai_regardless_of_moat`(确保非 AI 股仍被否)。 --- ## v3.6.2 (2026-06-03 · cninfo 翻页长尾 #68 + install-hermes.sh pip 探测 #69) ### BUG #68 · cninfo 公告分页 854 页拖几小时 - **症状**:用户 [@xy2yp](https://github.com/wbh604/UZI-Skill/issues/68) 反馈 `python run.py --versus 000958 600406 --depth lite` 卡在 15_events 维度 · 进度条 `0/854 [01:53<6:11:58, 26.44s/it]` · 单股 4-6 小时 - **位置**:`skills/deep-analysis/scripts/fetch_events.py::_cninfo_disclosures` - **根因**:调 `akshare.stock_zh_a_disclosure_report_cninfo` · 该 akshare 函数内部用循环翻完全部分页(cninfo 一只票常有 800+ 页公告)才把 DataFrame 返给我们 · 后续 `.head(30)` 截取已无用 · 翻页时间已经花掉了 - **修法**: 1. 新增 `_cninfo_direct_api(code, page_size=30, timeout=15)` · 直接 `requests.post` 到 `http://www.cninfo.com.cn/new/hisAnnouncement/query` · `pageNum=1 + pageSize=30` · 一次 HTTP ≤15s · 永远不翻全部页 2. 板块路由:`000/001/002/3xx → szse` · `6xx/688 → sse` · `8xx → bse` 3. 响应解析:`announcements[*].announcementTime` (毫秒) / `announcementTitle` / `adjunctUrl` (拼 `http://static.cninfo.com.cn/` 前缀) 4. `_cninfo_disclosures` 优先调直连 API · 直连失败时**默认不调 akshare**(防长尾)· 仅 `UZI_AK_CNINFO_FALLBACK=1` 显式启用时才走 akshare 慢路径 - **验证**: - mock `requests.post` ConnectionError → 返 [] · 不抛 - mock 200 + 合法 JSON → 解析正确 / 路由正确 - 网络失败 + 未设 fallback env → 不调 akshare(关键 · 防止再次踩坑) - **未来改该区域注意事项**: - **永远不要回去用 `ak.stock_zh_a_disclosure_report_cninfo`** · 这是 akshare 实现的死结 · 它会翻完所有页 - 直连 API 的 pageSize 上限 cninfo 文档说 30 · 别贪心设大数字(会被服务端拒) - cninfo 的时间戳是 **毫秒** · 不要忘了 `/ 1000` 再 `fromtimestamp` - 板块路由 prefix 列表要保持齐:未来 cninfo 加新板块要更新(如果 北交所 8xx 后还有新代码段) ### BUG #69 · install-hermes.sh 在 Linux 找不到 pip - **症状**:用户 [@FrankHuy](https://github.com/wbh604/UZI-Skill/issues/69) 在 CentOS-like + Python 3.11 跑一键脚本:`line 95: pip: command not found` + akshare 装不上 - **位置**:`install-hermes.sh` line ~94(装依赖段) - **根因**:很多 Linux 发行版(Debian/Ubuntu/CentOS/RHEL)**默认不提供 plain `pip` 命令** · 用户必须用 `pip3` / `python3 -m pip` · 我们脚本只试 `pip` 直接报错 · 后续 akshare 报"找不到 wheel"其实是因为底层 pip 不存在 · 不是真的 wheel 不兼容 - **修法**: 1. 启动加 Python 版本预检(`python3` → `python` 探测 + 版本 ≥3.10 检查)· 警告而非阻断 · 给三种系统的安装命令 2. pip 探测改为 5 层级联:`$HERMES/venv/bin/pip` → `$HERMES/.venv/bin/pip` → `pip` → `pip3` → `$PY_BIN -m pip` 3. 全部探测失败 → exit 4 + 给 apt / yum / ensurepip / get-pip 四种安装路径 4. `pip install` 失败 → exit 5 + 提示版本/镜像源/升级 pip - **验证**: - `bash -n install-hermes.sh` 语法过 - 测试 grep 验证脚本含 pip3 / -m pip / tuna.tsinghua / upgrade pip 等关键字 - **未来改该区域注意事项**: - 不要在主体代码里假设 `pip` 命令存在 · 用 `command -v` 探测 - `set -euo pipefail` 严格模式下任何 fail 立即退出 · 必须 *先* 探测再 *用* - 镜像源 fallback 只在文案里建议 · 不要默认走清华源(部分海外用户访问慢)· 让用户主动加 `-i` --- ## v3.6.1 (2026-05-29 · Hermes Skills Guard 假阳性绕过 · issue #66) ### BUG · `hermes skills install` 报 DANGEROUS · `--force` 覆盖不了 - **症状**:用户 @zodiacg ([#66](https://github.com/wbh604/UZI-Skill/issues/66)) 反馈 `hermes skills install wbh604/UZI-Skill/skills/deep-analysis` 失败 · scanner 168 findings · DANGEROUS verdict - **位置**:Hermes Skills Guard 模式匹配扫描器(NousResearch/hermes-agent · 上游 bug · 不是 UZI-Skill 的问题) - **根因**:Skills Guard 是 v0.x 纯模式匹配 (`r'os\.environ\b'`) · 不区分"读自己配置"vs"窃取用户敏感 env" · 也不识别 docstring / HTML 注释 / opt-in 用户功能 - **影响**:community 源任何 finding 都会 BLOCK · `--force` 设计上不能覆盖 DANGEROUS · 用户 Hub 装不下来 - **修法**:提供 `install-hermes.sh` 一键脚本 · `git clone + ln -sfn` 到 `~/.hermes/skills/` · 跳过 Hub quarantine 扫描 · Hermes 跑时只看目录 layout · 完全等价 - **绝不能做的事**: - ❌ 用 dynamic import + 字符串拼接绕 Skills Guard 检测(这是上游 issue #7072 提到的恶意绕过 · 我们绝不走这条路 · 那是窃取信任模型) - ❌ 删除合法的 `os.environ.get` 代码来降 findings · 那是把功能砍了 - ✅ 只提供 clone+symlink 路径 · 用户主动决定信任我们 · 而不是欺骗 Hub 让它判 "safe" - **验证**: - `bash install-hermes.sh` 在干净环境跑通 · 4 个 skill symlink + venv pip 装包 + SKILL.md 版本验证 - 11 个回归测试 (`test_v3_6_1_install_hermes.py`) - **未来改该区域注意事项**: - 若 Hermes Skills Guard 升级到 allowlist 模型 · `hermes skills install` 重新可用时 · 在 INSTALL-HERMES.md 顶部加 "Skills Guard 已修 · 直接 hub 装" 提示 - 但 install-hermes.sh 应该保留作为 dev 路径(clone + symlink 让 git pull 立刻生效 · Hub 装是 snapshot) - 改 skill 目录结构时 · 必须同步更新脚本里的 `SKILLS=(deep-analysis ...)` 数组 - 永远不要"为了 Skills Guard 评分好看"砍合法功能 · `--remote` cloudflared 是用户主动 opt-in · 默认不跑 --- ## v3.6.0 (2026-05-29 · 视觉升级 + 多股对比 + 组合分析) ### FEATURE A1 · 暗色模式 toggle - **位置**:`assets/report-template.html`(CSS `:root` + `[data-theme="dark"]` 块 · 末尾 `