<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
    <channel>
      <title>Jason&#039;s Blog</title>
      <link>https://jiachen.lol</link>
      <description>最近的10条笔记 on Jason&#039;s Blog</description>
      <generator>Quartz -- quartz.jzhao.xyz</generator>
      <item>
    <title>AI 记忆架构的三维进化：从管道到网络</title>
    <link>https://jiachen.lol/%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%B4%A2/29ebda74</link>
    <guid>https://jiachen.lol/%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%B4%A2/29ebda74</guid>
    <description><![CDATA[ <h1 id="ai-记忆架构的三维进化从管道到网络">AI 记忆架构的三维进化：从管道到网络<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#ai-记忆架构的三维进化从管道到网络" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h1>
<blockquote>
<p>三个月前我画了一个「热→温→冷」的线性管道。跑下来发现，纵向晋升是必要条件，但不是充分条件。知识不是沿管道流动的液体，它是根系——向下扎根的同时，横向蔓延、交叉嫁接。管道负责把信息从对话层送到知识层，但知识到达目的地之后的关联、腐化、可发现性，是另一组问题。</p>
</blockquote>
<hr>
<h2 id="起点一条管道">起点：一条管道<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#起点一条管道" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>最初的想法很简单：对话中的信息，提炼后存下来，需要时拿出来。</p>
<pre><code>对话（热）→ 提炼（温）→ 沉淀（冷）
</code></pre>
<p>这个模型没有错。context-infrastructure 的 Observer→Reflector→GC Pipeline 证明了纵向晋升是可行的。温记忆压缩到 100 行，任何平台秒加载，这个设计确实好用。</p>
<p>但跑了三个月，三个管道解决不了的问题冒出来了。</p>
<h2 id="问题一知识孤岛">问题一：知识孤岛<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#问题一知识孤岛" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>wiki 里建了 40 个页面。AI 可观测性和 Agent 护栏各自写得很好，但没人发现它们说的是同一件事——<strong>LLM 系统的可信度防御</strong>。一个管输出质量评估，一个管行为约束，底层逻辑是同构的。</p>
<p>纵向管道不负责这个——它的职责是把信息从热送到冷，不是让冷知识之间互相认识。这就像图书馆买了很多书，每本都分类入库了，但没有目录卡，也没有「相关推荐」。信息到了终点，但终点之间没有路。</p>
<p><strong>解法：横向关联</strong></p>
<pre><code>wikilinks（双向链接）
  页面 A 引用页面 B，B 的反向链接自动显示 A
  → 不需要主动维护，写的时候随手一链就行

标签聚类
  同标签的页面自动归类
  `agent` 标签下：agent-architecture, agent-memory, agent-guardrails, harness-engineering
  → 浏览一个标签就能看到整个领域地图

横向扫描（LINT 检查项之一）
  同周创建 + 共享 2+ 标签 + 未互链 → 自动报告
  → 发现隐性关联，人脑记不住所有页面的创建时间和标签组合

跨域桥接
  科技洞察 → 投资判断（如 AI 推理成本归因 → 算力股估值逻辑）
  哲学思考 → 决策框架（如 Goodhart's Law → TDD 失效 → 管理指标陷阱）
  → 这是 wiki 最核心的价值，靠标签交叉和 wikilinks 实现
</code></pre>
<p>知识不是一棵树，是一张网。纵向管道处理深度，横向关联处理广度。两者不矛盾——管道把书买进来，关联让书和书之间产生对话。</p>
<p>需要说明的是，横向关联和活性维护之间有交叉。比如 LINT 的「横向链接缺失」检查项——它既是横向关联的发现工具（找到应该连接但没连接的页面对），也是活性维护的一部分（定期巡检）。这不是设计缺陷，是两个维度在边界处自然重叠，就像城市里「修路」（横向）和「市政巡检」（活性）本来就有交叉。</p>
<h2 id="问题二知识腐化">问题二：知识腐化<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#问题二知识腐化" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>40 个页面，如果不维护，三个月后：</p>
<ul>
<li>有些过时了（工具版本、API 变化）</li>
<li>有些互相矛盾（三月的认知和五月的新信息冲突）</li>
<li>有些变成孤岛（创建后没人再链接过）</li>
<li>标签体系漂移（随手加了不在分类法里的标签）</li>
</ul>
<p>纵向管道只管往里灌，不管清淤。</p>
<p><strong>解法：活性维护</strong></p>
<pre><code>Wiki LINT（每周自动运行，7 项检查）
  1. 矛盾检测 — frontmatter contradictions 字段 + 内容冲突扫描
  2. 孤立页面 — 入站链接 = 0
  3. 缺失概念页 — 被引用 2+ 次但不存在的 wikilink
  4. 过时内容 — updated 超过 60 天
  5. 标签一致性 — 不在分类法中的标签
  6. 横向链接缺失 — 同周 + 共享标签但未互链
  7. Index 同步 — 实际文件 vs index.md 条目差异

  → 只报告不修改，人确认后才执行

公理反馈回路
  应用记录追踪：每次公理被引用/用于决策，记一行
  → 日期 / 场景 / 触发 / 结果
  → 应用次数 ≥ 5 → 升级候选
  → 周报推送提醒评审
  → 确认升级 → 进入公理正式序列
  → 否决 → 重置计数，记录理由

  → 知识库不是博物馆，是活的系统
</code></pre>
<p>纵向管道的 GC 只管”这条记忆过不过期”。活性维护管的是”整个知识库健不健康”。</p>
<p>但不是所有冷知识都需要同等强度的维护。有些知识是稳定态——数学定理、经典文献、思维模型（比如二阶效应），写完基本不用动。有些是快速变化态——工具版本、API 变化、市场数据，一两个月就过时。LINT 检查的「过时内容」项（updated 超过 60 天）是一个粗粒度的过滤，实际操作中我会看内容性质决定是否更新，而不是机械地刷日期。</p>
<h2 id="问题三找不到">问题三：找不到<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#问题三找不到" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>冷知识存在 Obsidian wiki 里，40 个页面，几千行内容。你说”之前讨论过 Agent 文件系统的三代演化”，我需要能找到它。</p>
<p>两个问题：</p>
<ol>
<li><strong>精确回忆</strong> — 你提到了具体关键词，FTS5 全文搜索能搞定</li>
<li><strong>模糊关联</strong> — 你说”那个关于知识怎么长的模型”，关键词匹配失效，需要语义检索</li>
</ol>
<p><strong>解法：多层检索</strong></p>
<pre><code>MEMORY.md（Prompt Memory）
  每轮注入，~2K 字符，最紧急的信息
  → 不需要搜索，永远在眼前

Session Search（FTS5）
  历史对话全文检索
  → 精确回忆：关键词、人名、项目名
  → 跨 session 回忆：两个月前讨论过什么

ObsidianRAG（向量检索）
  287 notes → 2120 chunks
  all-MiniLM-L6-v2 本地 embedding
  → 语义搜索：描述性查询、模糊关联
  → 不依赖精确关键词

Wiki Index + Wikilinks（导航）
  index.md → 领域地图
  wikilinks → 页面间跳转
  → 浏览式探索：不知道要找什么时用
</code></pre>
<p>四层检索各有边界。不是谁替代谁，是不同场景用不同工具。</p>
<h2 id="三维模型">三维模型<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#三维模型" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>把三个问题的解法合在一起：</p>
<pre><button class="expand-button" aria-label="Expand mermaid diagram" data-view-component><svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor"><path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 1.06L2.56 7h10.88l-2.22-2.22a.75.75 0 011.06-1.06l3.5 3.5a.75.75 0 010 1.06l-3.5 3.5a.75.75 0 11-1.06-1.06l2.22-2.22H2.56l2.22 2.22a.75.75 0 11-1.06 1.06l-3.5-3.5a.75.75 0 010-1.06l3.5-3.5z"></path></svg></button><code class="mermaid" data-clipboard="&#x22;graph TD\n    subgraph 纵向晋升\n        H[热记忆<br/>对话采集] --> W[温记忆<br/>核心画像]\n        W --> C[冷知识<br/>Wiki 页面]\n    end\n\n    subgraph 横向关联\n        WL[wikilinks<br/>双向链接]\n        TAG[标签聚类<br/>同标签发现]\n        LAT[横向扫描<br/>隐性关联]\n    end\n\n    subgraph 活性维护\n        LINT[LINT 巡检<br/>7 项检查]\n        AX[公理反馈<br/>应用追踪]\n        RET[RAG + FTS5<br/>语义+精确检索]\n    end\n\n    C --- WL\n    C --- TAG\n    C --- LAT\n    C --- LINT\n    C --- AX\n    C --- RET\n    LAT -.->|边界交叉| LINT&#x22;">graph TD
    subgraph 纵向晋升
        H[热记忆&#x3C;br/>对话采集] --> W[温记忆&#x3C;br/>核心画像]
        W --> C[冷知识&#x3C;br/>Wiki 页面]
    end

    subgraph 横向关联
        WL[wikilinks&#x3C;br/>双向链接]
        TAG[标签聚类&#x3C;br/>同标签发现]
        LAT[横向扫描&#x3C;br/>隐性关联]
    end

    subgraph 活性维护
        LINT[LINT 巡检&#x3C;br/>7 项检查]
        AX[公理反馈&#x3C;br/>应用追踪]
        RET[RAG + FTS5&#x3C;br/>语义+精确检索]
    end

    C --- WL
    C --- TAG
    C --- LAT
    C --- LINT
    C --- AX
    C --- RET
    LAT -.->|边界交叉| LINT
</code><div id="mermaid-container" role="dialog"><div id="mermaid-space"><div class="mermaid-content"></div></div></div></pre>
<ul>
<li><strong>纵向晋升</strong>（热→温→冷）：信息的密度递减、持久性递增</li>
<li><strong>横向关联</strong>（链接/标签/扫描）：知识节点之间的语义连接</li>
<li><strong>活性维护</strong>（LINT/反馈/检索）：保持整个系统的健康和可发现性</li>
</ul>
<p>原文的「热→温→冷」没有错，但它只描述了一个维度。就像只说”树要扎根”——没错，但根系也会横向蔓延，土壤也需要定期松土施肥。</p>
<h2 id="实际数据">实际数据<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#实际数据" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>跑了三个月的 Obsidian wiki：</p>


















































<table><thead><tr><th>指标</th><th>数值</th><th>说明</th></tr></thead><tbody><tr><td>Wiki 页面总数</td><td>40</td><td>entity + concept + comparison + query</td></tr><tr><td>实体页</td><td>6</td><td>公司/产品实体</td></tr><tr><td>概念页</td><td>27</td><td>技术/思维模型概念</td></tr><tr><td>跨域 wikilinks</td><td>~120 条出站链接</td><td>平均每页 3 个出站链接</td></tr><tr><td>公理条目</td><td>25 条</td><td>三轮审计后从 43 条合并，去重+精简</td></tr><tr><td>LINT 检查项</td><td>7 项</td><td>每周一自动运行</td></tr><tr><td>RAG 索引</td><td>287 notes → 2120 chunks</td><td>全库（wiki 40 页 + 日记/剪藏/非wiki笔记 247 篇）</td></tr><tr><td>Session Search</td><td>全量历史对话 FTS5 索引</td><td>跨 session 精确回忆</td></tr></tbody></table>
<p>说明几个数据点：</p>
<p><strong>287 vs 40</strong>：wiki 页面只有 40 个，是经过提炼的结构化知识。RAG 索引覆盖整个 Obsidian vault（287 篇），包括日记、剪藏、非 wiki 笔记——这些是原始素材，还没消化进 wiki。两个数字不矛盾，正好对应了三层模型中的「冷知识（wiki）」和「收集层（全库）」。</p>
<p><strong>公理从 43 到 25</strong>：不是简单去重。三轮审计做了三件事：合并语义重叠的条目（比如「做减法」和「简单优先」合并成一条）、淘汰实践中反复不被引用的条目、升级从实践经验中涌现的新条目。审计过程记录在 <a href="../公理审计报告" class="internal alias" data-slug="公理审计报告">公理审计报告</a>。</p>
<p><strong>效果层面</strong>：横向关联最具体的例子是「AI 是品位的放大器」这条公理——它链接到投资领域的复利职业策略，又链接到哲学层的认知框架。三个领域的页面因为 wikilinks 形成了三角连接。这不是规划出来的，是写的时候自然发生的。但坦诚说，目前只有一个这样的跨域三角连接案例，大部分 wikilinks 还是在同领域内（AI 页面链 AI 页面）。横向关联的潜力已经能看到，但密度还不够。</p>
<h2 id="和原文的关系">和原文的关系<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#和原文的关系" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>本文是对 <a href="../跨平台AI人格与记忆架构设计" class="internal alias" data-slug="跨平台AI人格与记忆架构设计">跨平台AI人格与记忆架构设计</a> 中「第二层：记忆」的实战演进。原文定义了纵向晋升模型，本文补上了横向关联和活性维护两个维度。</p>
<p>如果把记忆架构比作图书馆：</p>
<ul>
<li>纵向晋升是<strong>入库流程</strong> — 新书从采购（热）到编目（温）到上架（冷）</li>
<li>横向关联是<strong>目录卡和推荐架</strong> — 让读者发现「借了这本的人也借了那本」</li>
<li>活性维护是<strong>馆员巡检</strong> — 定期清查过时书籍、修复断裂的目录引用、补充缺失的交叉推荐</li>
</ul>
<p>只有入库没有目录，书在架子上但找不到。只有入库和目录没有巡检，几年后目录卡和实际书籍对不上了。</p>
<p>至于这套体系值不值得——40 个页面的 wiki，LINT 每周运行一次，确认时间大概 5 分钟。公理反馈回路是自动追踪，只在周报时才需要人看。RAG 索引构建一次，后续增量更新。目前这个规模下，维护成本可以接受。如果 wiki 涨到 400 页，可能需要重新评估 LINT 的噪声水平和人工确认的负担。</p> ]]></description>
    <pubDate>Sat, 16 May 2026 16:00:00 GMT</pubDate>
  </item><item>
    <title>Harness 层的下一战：AI Agent 的跨平台人格与记忆架构</title>
    <link>https://jiachen.lol/%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%B4%A2/0b90077b</link>
    <guid>https://jiachen.lol/%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%B4%A2/0b90077b</guid>
    <description><![CDATA[ <h1 id="harness-层的下一战ai-agent-的跨平台人格与记忆架构">Harness 层的下一战：AI Agent 的跨平台人格与记忆架构<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#harness-层的下一战ai-agent-的跨平台人格与记忆架构" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h1>
<blockquote>
<p>MCP 标准化了工具调用，AGENTS.md 正在统一指令格式——但 Agent 的灵魂、记忆、知识，每个平台还是各管各的。该有人管管了。</p>
</blockquote>
<hr>
<h2 id="30-秒读完">30 秒读完<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#30-秒读完" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p><strong>痛点：</strong> 你用 8 个 AI Agent 平台（OpenClaw、Claude Code、Codex、Cursor、Windsurf、Copilot、Trae、CatPaw），每个平台有自己的配置文件格式。换一个平台，Agent 就失忆——人格没了、偏好没了、好不容易教会的东西全没了。</p>
<p><strong>本质：</strong> 不是文件格式问题，是<strong>架构问题</strong>——身份、记忆、知识没有统一的跨平台层。</p>
<p><strong>解决方案：agent-sync</strong> — 一个 CLI，把 AI Agent 的身份、记忆、知识定义在一个地方（<code>universal-agent/</code>），自动同步到所有平台。</p>
<p><strong>三层架构：</strong></p>
<ol>
<li><strong>身份</strong> — Soul → Identity → User（一个源头，按平台适配）</li>
<li><strong>记忆</strong> — 三维模型：纵向晋升（热→温→冷）+ 横向关联（wikilinks/标签聚类/跨域桥接）+ 活性维护（LINT/公理反馈/RAG检索）</li>
<li><strong>指令+技能</strong> — Directives（怎么思考）+ Skills（怎么做），都需要你确认</li>
</ol>
<p><strong>和 agentinit 的区别：</strong> agentinit 只管规则同步。agent-sync 管的是<strong>身份 + 记忆 + 知识 + 技能</strong>——完整的 Agent 生命周期。</p>
<p><strong>离线可用：</strong> 内网 Git + 本地 Obsidian，不需要任何云服务。</p>
<hr>
<h2 id="我们卡在哪">我们卡在哪<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#我们卡在哪" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>2026 年，AI Agent 的 Harness 层已经跑通了三件事：</p>
<ol>
<li><strong>工具标准化</strong> — MCP 被所有主流平台采纳，一个协议搞定工具调用</li>
<li><strong>指令格式收敛</strong> — AGENTS.md 成为 Codex、OpenCode、Windsurf 兼容的事实标准</li>
<li><strong>沙箱与权限</strong> — 各平台的审批模式、隔离机制基本成熟</li>
</ol>
<p>但有一个问题没人解决：<strong>你换了工具，Agent 就失忆了。</strong></p>
<p>在 Claude Code 里你教了它用 pnpm、写中文注释、走 feature branch 工作流。切到 Cursor，这些全没了——你得重新写一遍 .cursorrules。OpenClaw 知道你的沟通偏好和风险提示，Copilot 一点都不知道。每个工具都是白纸，每次都要从零培养。</p>
<p>这不是体验问题，这是架构问题。</p>
<h2 id="同一件事8-种文件名">同一件事，8 种文件名<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#同一件事8-种文件名" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>先看现状：</p>







































































<table><thead><tr><th>概念</th><th>OpenClaw</th><th>Claude Code</th><th>Codex</th><th>Cursor</th><th>Windsurf</th><th>Copilot</th><th>Trae</th><th>CatPaw</th></tr></thead><tbody><tr><td>人格/指令</td><td>SOUL.md</td><td>CLAUDE.md</td><td>AGENTS.md</td><td>.cursorrules</td><td>.windsurfrules</td><td>copilot-instructions.md</td><td>trae-rules.md</td><td>catpaw-rules</td></tr><tr><td>记忆</td><td>MEMORY.md</td><td>Auto Memory</td><td>无</td><td>Cascade Memory</td><td>Memories</td><td>Agentic Memory</td><td>无</td><td>无</td></tr><tr><td>配置层级</td><td>3 层</td><td>3 层</td><td>1 层</td><td>4 模式</td><td>2 层</td><td>2 层</td><td>1 层</td><td>1 层</td></tr><tr><td>工具</td><td>Skills/</td><td>MCP</td><td>MCP</td><td>MCP</td><td>MCP</td><td>MCP</td><td>MCP</td><td>MCP</td></tr><tr><td>开源</td><td>是</td><td>部分</td><td>是</td><td>否</td><td>否</td><td>否</td><td>否</td><td>否</td></tr></tbody></table>
<p>本质都一样——告诉 AI 你是谁、项目怎么工作、该怎么做。但格式、位置、语法全部不同。</p>
<h2 id="八个平台的真实差异">八个平台的真实差异<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#八个平台的真实差异" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>上表已经列出了基本信息。以下是踩完坑之后对几个重点平台的评价。其他平台（Codex、Windsurf、Copilot、Trae、CatPaw）要么配置极简（一个文件搞定），要么没有人格/记忆概念——核心问题都一样：<strong>没有跨平台统一层</strong>。</p>
<h3 id="openclaw--唯一认真对待灵魂的">OpenClaw — 唯一认真对待「灵魂」的<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#openclaw--唯一认真对待灵魂的" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<pre><code>SOUL.md → 元人格：行为边界、核心信条
IDENTITY.md → 具体人格：名字、风格、价值观
USER.md → 用户画像：服务对象是谁
</code></pre>
<p>OpenClaw 把「灵魂」做成了和「规则」平级的一等公民。SOUL.md 里写的是 “你不是用户的代言人”、“先试再问”，不是编码规范。这让 AI 有了性格，不是只有服从。</p>
<p>这是目前唯一原生支持人格分层的平台。缺点是格式非标准，只有 OpenClaw 生态能读。</p>
<h3 id="claude-code--配置体系最成熟">Claude Code — 配置体系最成熟<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#claude-code--配置体系最成熟" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<pre><code>全局 ~/.claude/CLAUDE.md → 项目 CLAUDE.md → .claude/rules/*.md
Auto Memory → AI 自动从交互中学习偏好
</code></pre>
<p>三层配置 + Auto Memory，用起来最舒服。但人格和规则混在 CLAUDE.md 里——“用 pnpm” 和 “说话别端着” 写在同一个文件，身份和指令不分家。</p>
<h3 id="cursor--作用域控制最灵活">Cursor — 作用域控制最灵活<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#cursor--作用域控制最灵活" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<pre><code>.cursor/rules/*.mdc → 4 种激活模式
  alwaysApply / 智能应用 / globs 匹配 / 手动 @引用
</code></pre>
<p>Cursor 的 <code>.mdc</code> 激活模式是所有平台里最精细的作用域控制——写 React 的规则只在 <code>.tsx</code> 文件触发，API 规范只在 <code>api/</code> 目录生效。社区甚至有人用 rules 创建了完整人格（比如 “Luna” persona）。</p>
<p>但 Cascade Memory 是个痛点，持久化记忆需要社区插件补。</p>
<h2 id="架构三层分离">架构：三层分离<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#架构三层分离" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>各平台差异在表层（文件名、格式），深层处理的是同一组问题：<strong>身份、记忆、知识</strong>。该把它们拆开。</p>
<h3 id="第一层人格identity">第一层：人格（Identity）<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#第一层人格identity" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>人格是分层的，不是复制的：</p>
<pre><code>Soul → 元人格
  行为边界、核心信条、气质
  平台无关，所有 AI 通用

Identity → 具体人格
  名字、沟通风格、价值观
  根据平台微调，核心不变

User Context → 用户画像
  服务对象、偏好、状态
  所有平台共享同一份
</code></pre>
<p><strong>在一个源头定义，其他平台引用。</strong> 不是复制，是映射。</p>
<p><a href="https://github.com/openclaw" class="external">OpenClaw<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> 是目前唯一原生支持这个分层的平台。其他平台通过适配器翻译：SOUL.md 里写的”你不是用户的代言人”，到 CLAUDE.md 里变成一段行为约束，到 .cursorrules 里变成一条 guardrail——同一个意思，不同表达。</p>
<h3 id="第二层记忆memory">第二层：记忆（Memory）<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#第二层记忆memory" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>三个维度，不只是纵向晋升：</p>
<pre><code>纵向：按密度分层
热记忆（每次对话）
  自动采集：观察、日志、决策
  ↓ Reflector 提炼
温记忆（跨会话）
  核心画像 + 关键偏好 + 风险提示
  压缩到 ~100 行，任何平台秒加载
  ↓ GC 清理
冷记忆（长期知识）
  Obsidian wiki / 知识库
  结构化笔记（entity/concept/comparison）

横向：跨节点关联
  wikilinks 双向链接 — 页面间的语义连接
  标签聚类 — 同标签跨域自动发现
  横向扫描 — 同周创建、共享标签但未互链的页面对
  跨域桥接 — 科技→投资、哲学→决策的隐性关联

活性：自洁与验证
  LINT 定期检查 — 孤立页面、矛盾、过时内容、链接缺失
  公理反馈回路 — 应用记录追踪，实践验证后晋升/淘汰
  RAG 向量检索 — 全库语义搜索，不依赖精确关键词
  Session Search — 历史对话全文检索（FTS5），跨 session 回忆
</code></pre>
<p>单纯的「热→温→冷」是一条管道——东西只能往上流。但知识不是这样长的。两个概念在不同领域各自发展，突然发现它们说的是同一件事（比如 AI 的 reward hacking 和管理中的 Goodhart’s Law）。这需要<strong>横向扫描</strong>，不是纵向晋升能发现的。</p>
<p>温记忆的存在是为了<strong>把核心信息压缩到任何平台都能快速加载的体积</strong>。活性维护的存在是为了<strong>不让知识库变成垃圾场</strong>——定期清理、验证、关联，保持知识的新鲜度和连通性。</p>
<p><a href="https://github.com/context-infrastructure" class="external">context-infrastructure<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> 的 Observer→Reflector→GC Pipeline 解决了纵向晋升。<a href="https://help.obsidian.md/" class="external">Obsidian wiki<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> 的 wikilinks + 标签 + 反向链接解决了横向关联。两者结合才是完整的记忆架构。</p>
<h3 id="第三层指令--技能directives--skills">第三层：指令 + 技能（Directives + Skills）<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#第三层指令--技能directives--skills" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>两个不同的东西：</p>
<p><strong>Directives — 我怎么思考</strong></p>
<p>不是 SOUL 里的「我是谁」，而是「我怎么思考」。不是公开知识（像 “Python 的 list comprehension 语法”），而是个人的决策偏好和认知沉淀。比如「设计哲学的天花板决定了系统的上限」——这是价值观判断，不是事实陈述。</p>
<p><strong>Skills — 我会做什么</strong></p>
<p>不是”我怎么想”，而是”我怎么操作”。可复用的工具流程和标准操作。比如「用 Jina Reader 抓网页 → 存 Obsidian Clippings/」——这是可执行的操作序列。</p>
<p>按领域组织，带唯一 ID 和路由索引：</p>
<pre><code>directives/
├── INDEX.md              # 路由索引 + 关键词触发
├── ai/                   # AI 协作领域
├── technical/            # 技术决策
├── management/           # 管理哲学
└── cross-domain/         # 跨域隐喻

skills/
├── jina-clip/SKILL.md    # 网页剪藏流程
├── deploy/SKILL.md       # 部署标准操作
└── review/SKILL.md       # 代码审查 checklist
</code></pre>
<p>INDEX.md 做路由——“管理 AI” 这个关键词自动触发 AI 领域的相关指令。Agent 不用每次读全部文件，按需检索就行。</p>
<h3 id="外挂大脑">外挂大脑<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#外挂大脑" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>Obsidian（或 Notion、Logseq）作为「查看层」覆盖在 Agent 执行层之上：</p>
<pre><code>Agent 工作空间（执行层）      知识库（查看层）
├── SOUL.md                 ├── （引用，不复制）
├── IDENTITY.md             ├── （引用，不复制）
├── MEMORY.md               ├── （引用，不复制）
├── directives/             ├── directives/ ← 同一份数据
├── memory/diary/ ─软链─→  └── 日记/diary/
</code></pre>
<p>Agent 工作空间是 AI 的世界——读写文件来工作。知识库是人的世界——浏览、搜索、反思。数据只有一份，入口不同。</p>
<h2 id="agent-sync">agent-sync<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#agent-sync" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>把以上架构变成一个 CLI：</p>
<pre><code>┌──────────────────────────────────────────┐
│          universal-agent/（Git 仓库）      │
│                                           │
│  人格: soul → identity → user            │
│  记忆: 热 → 温 → 冷                      │
│  指令: directives/（索引 + 详情）          │
│  技能: skills/（MCP + SKILL.md）          │
└──────────────────┬───────────────────────┘
                   │
              agent-sync
             （双向适配）
                   │
   ┌───────┬───────┼───────┬────────┐
   ↓       ↓       ↓       ↓        ↓
OpenClaw  Claude  Codex  Cursor  Windsurf  Copilot
</code></pre>
<p>一个命令同步所有平台。改了 SOUL.md，CLAUDE.md、AGENTS.md、.cursorrules 自动刷新。记忆通过 Git 在平台间流转。</p>
<p>和 <a href="https://github.com/agentinit/agentinit" class="external">agentinit<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> 的区别：agentinit 只管规则文件同步。我们管的是<strong>身份 + 记忆 + 知识 + 技能</strong>——完整的 Agent 生命周期。</p>
<h3 id="记忆技能的自动发现">记忆→技能的自动发现<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#记忆技能的自动发现" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>温记忆中反复出现的操作模式，Reflector 会自动识别为 skill 候选：</p>
<pre><code>claude-mem 观察记录（热）
       ↓ Reflector.collect_observations()
温记忆 core.md（每条自动分类）
       ↓ category = procedure / tool_pattern
       ↓ Reflector.discover_skill_candidates()
  只提取可重复流程类条目 + 出现次数 >= 2
       ↓ agent-sync skills discover
  列出候选，问用户确认
       ↓ --confirm
  skill-creator 生成 skills/&#x3C;name>/SKILL.md 脚手架
</code></pre>
<p>不是所有观察都能变成 skill。Reflector 在晋升温记忆时就分类（insight / procedure / tool_pattern / preference），只有 procedure 和 tool_pattern 才会被推荐为 skill 候选。用户确认后才创建，避免噪声。</p>
<p>详细的架构设计文档见 → <a href="https://github.com/jasonjcwu/agent-sync" class="external">agent-sync Architecture Spec<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a>（GitHub）</p>
<h2 id="记忆架构的实战演进">记忆架构的实战演进<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#记忆架构的实战演进" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>上面的三维模型是设计阶段的框架。跑了三个月后，横向关联和活性维护的实际效果超出了预期——详见 <a href="../技术探索/AI记忆架构的三维进化" class="internal alias" data-slug="技术探索/AI记忆架构的三维进化">AI记忆架构的三维进化</a>。</p>
<h2 id="不适用的场景">不适用的场景<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#不适用的场景" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>说清楚边界：</p>
<ul>
<li><strong>纯规则场景</strong>（代码审计、CI lint）不需要人格，只需要规则</li>
<li><strong>团队协作</strong>需要的是共识和 code review 标准，不是个人认知沉淀</li>
<li><strong>单平台用户</strong>用不上跨平台同步</li>
</ul>
<h2 id="离线--内网环境">离线 &#x26; 内网环境<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#离线--内网环境" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>agent-sync 完全支持离线使用，不依赖任何云服务：</p>
<ul>
<li><strong>Git 同步</strong>：用内网 GitLab CE、Gitea 或任何自建 Git，不需要 GitHub</li>
<li><strong>知识库</strong>：Obsidian 本地 vault，不走外网</li>
<li><strong>记忆采集</strong>：只配 OpenClaw 源（markdown 文件），跳过 claude-mem</li>
<li><strong>冷知识输出</strong>：公司内只沉淀到 directives/，不绑 Obsidian；个人环境可以绑</li>
</ul>
<figure data-rehype-pretty-code-figure=""><pre tabindex="0" data-language="yaml" data-theme="github-light github-dark"><code data-language="yaml" data-theme="github-light github-dark" style="display: grid;"><span data-line=""><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D"># memory.yaml — 公司/离线模式</span></span>
<span data-line=""><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">sources</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">:</span></span>
<span data-line=""><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">  - </span><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">type</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">openclaw</span></span>
<span data-line=""><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">    path</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">../memory/</span><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D">    # 纯本地 markdown 文件</span></span></code></pre></figure>
<p>全程无外部 API 调用，无云服务依赖。</p>
<h2 id="参考">参考<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#参考" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<ul>
<li><a href="https://github.com/openclaw" class="external">OpenClaw<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> — 目前最完整的 AI Agent 人格系统</li>
<li><a href="https://github.com/context-infrastructure" class="external">context-infrastructure<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> — Observer/Reflector 记忆 Pipeline</li>
<li><a href="https://github.com/agentinit/agentinit" class="external">agentinit<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> — 规则同步工具（覆盖 Claude Code、Cursor、Windsurf、Copilot）</li>
<li><a href="https://openai.com/index/harness-engineering/" class="external">OpenAI: Harness Engineering<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> — Harness Engineering 概念提出</li>
</ul> ]]></description>
    <pubDate>Sat, 16 May 2026 16:00:00 GMT</pubDate>
  </item><item>
    <title>给 hermes-webui 提交 PR 全记录：从性能优化到实时通知</title>
    <link>https://jiachen.lol/%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%B4%A2/0740e0bf</link>
    <guid>https://jiachen.lol/%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%B4%A2/0740e0bf</guid>
    <description><![CDATA[ <p>给 <a href="https://github.com/nesquena/hermes-webui" class="external">hermes-webui<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> 提了 18 个 PR，全部被上游合并，跨越 v0.50.226 到 v0.51.65。</p>
<p>挑三个有难度的展开写，其余列在末尾表里。</p>
<h2 id="1158--session-切换从-800ms-到-40ms">#1158 — Session 切换从 800ms 到 40ms<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#1158--session-切换从-800ms-到-40ms" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="起因">起因<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#起因" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>WebUI 跑在远程服务器上，我在国内，切一个长对话的 session 要等 1-2 秒，loading 闪烁看着烦。</p>
<p>打开 session 本来就想看最后几句话，但后端把 400 条完整历史全序列化打包传过来，前端再全部渲染——然后你才看到那几句。</p>
<p>这不是 bug，是设计假设和实际使用场景的错位。WebUI 最早是本地开发的工具，localhost 下传 86KB 一眨眼的事。放到远程部署，一次 HTTP 往返 200ms，86KB payload 再乘以 2 是 400ms，前端渲染几百条 DOM 节点又是几百 ms。1+1=2。</p>
<h3 id="四个串行瓶颈">四个串行瓶颈<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#四个串行瓶颈" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>对着代码翻了几个小时：</p>
<ol>
<li><strong>展开的目录挨个请求</strong> — 每个展开的目录一个 HTTP 请求，一个等一个。5 个目录 = 5 × RTT。</li>
<li><strong>语法高亮堵住目录加载</strong> — 前端先跑 Prism.js 高亮，跑完才发目录请求。两个不相关的任务硬串了。</li>
<li><strong>Git 信息三个子进程串行</strong> — <code>git status</code>、<code>git rev-list --ahead</code>、<code>git rev-list --behind</code> 用 <code>subprocess.run</code> 一个一个跑。三次 shell 子进程启动 = 三次开销。</li>
<li><strong>每次拉全场消息</strong> — 不管 100 条还是 500 条，后端全量序列化。最长 session 压缩后还 86KB，用户能看到的屏幕范围最多 30 条。</li>
</ol>
<h3 id="做法">做法<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#做法" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p><strong>消息分页</strong>：后端加 <code>msg_limit</code>/<code>msg_before</code> 参数，默认取最后 30 条（~16KB，降 70%），前端滚动到顶部懒加载老消息。</p>
<p>有个麻烦：重试、撤销、压缩这些操作需要全量消息。加了一个 <code>_ensureAllMessagesLoaded()</code> 先全拉再做操作。代价是前端要维护 <code>_messagesTruncated</code> 布尔值，在所有路径下正确重置。</p>
<p><strong>并行化</strong>：</p>
<ul>
<li>展开目录：<code>for...of + await</code> → <code>Promise.all()</code></li>
<li>高亮和目录加载：互换顺序，先发目录请求再跑 Prism.js，两个并行</li>
<li>Git 信息：三个 <code>subprocess.run</code> → <code>ThreadPoolExecutor(max_workers=3)</code></li>
</ul>
<p>代码改动不大。难的是判断串行之间有没有隐含依赖——比如高亮和目录加载的顺序有没有人依赖了某种副作用。这种优化的通用矛盾：不是并行化难，而是得搞清楚为什么之前是串行的。</p>
<h3 id="效果">效果<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#效果" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>






























<table><thead><tr><th>瓶颈</th><th>优化前</th><th>优化后</th></tr></thead><tbody><tr><td>展开目录预取</td><td>N × 网络往返</td><td>1 × 网络往返</td></tr><tr><td>目录 + 高亮</td><td>串行阻塞</td><td>并行</td></tr><tr><td>Git 信息</td><td>3 × 子进程开销</td><td>1 × 子进程开销</td></tr><tr><td><strong>消息传输</strong></td><td><strong>全量 ~86KB</strong></td><td><strong>后 30 条 ~16KB，降 70%</strong></td></tr></tbody></table>
<p><strong>~800ms → ~40ms</strong>，loading 闪烁消失。</p>
<h3 id="pr-过程">PR 过程<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#pr-过程" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>5 个 commit 提上去。reviewer 对分页部分提了 hold——担心 <code>_messagesTruncated</code> 在边界路径（重试、撤销、错误恢复）没重置，界面会显示错误的加载提示。补了 cancellation safety 修复后 merge。</p>
<p>这个项目的测试覆盖率让我意外：test/ 下 150+ 文件、4 万行，覆盖渲染器到 CSRF 到 i18n 几乎每个角落。给这种项目做贡献最大的安全感不是代码写得多漂亮，而是改完东西知道不会被静默打破什么。</p>
<p>PR: <a href="https://github.com/nesquena/hermes-webui/pull/1158" class="external">#1158<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a></p>
<hr>
<h2 id="1350--1355--sse-实时推送-approval-和-clarify-通知">#1350 / #1355 — SSE 实时推送 Approval 和 Clarify 通知<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#1350--1355--sse-实时推送-approval-和-clarify-通知" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="起因-1">起因<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#起因-1" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>Agent 发起 approval（执行终端命令前等确认）或 clarify（向用户提问）时，前端靠轮询拿状态，延迟 5-10 秒。用户体验上就是点了个按钮，等半天才有反应。</p>
<h3 id="架构选择">架构选择<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#架构选择" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>轮询 → SSE（Server-Sent Events）。没有选 WebSocket，因为这里只需要服务端推、客户端收，不需要双向通信。SSE 的好处是原生浏览器支持、自动重连、HTTP 协议兼容、不需要额外的连接管理。</p>
<h3 id="设计">设计<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#设计" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>后端维护一个 per-session 的事件队列。客户端通过 <code>/api/sse/subscribe</code> 建立长连接，事件发生时 <code>put</code> 到队列，SSE 流推给前端。</p>
<p>几个要处理的点：</p>
<p><strong>跨 session 隔离</strong> — 每个 session 有自己的订阅，不能把 A session 的 approval 推给 B。用 session_id 做 key 管理订阅字典。</p>
<p><strong>队列溢出</strong> — 如果客户端断连但服务端还在推，队列会无限增长。加了 maxlen 限制，满了就丢弃最老的事件（反正客户端重连后会重新拉全量状态）。</p>
<p><strong>并发订阅</strong> — 同一个 session 理论上可能在多个浏览器标签页打开。允许多个订阅同时存在，事件广播到所有订阅者。</p>
<p><strong>生命周期管理</strong> — 客户端断连时自动 unsubscribe（SSE 的 <code>EventSource</code> 关闭触发后端清理）。</p>
<h3 id="测试">测试<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#测试" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>写了 subscribe/unsubscribe 生命周期、跨 session 隔离、队列溢出、并发订阅几组测试。reviewer 专门提了测试质量。</p>
<p>#1350（Approval）先做，#1355（Clarify）是把同样的模式移植到 clarify 流程——同样的事件队列机制，不同的事件类型和前端 UI 渲染。</p>
<p>PR: <a href="https://github.com/nesquena/hermes-webui/pull/1350" class="external">#1350<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> / <a href="https://github.com/nesquena/hermes-webui/pull/1355" class="external">#1355<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a></p>
<hr>
<h2 id="1884--侧边栏折叠点击当前-rail-按钮切换">#1884 — 侧边栏折叠：点击当前 rail 按钮切换<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#1884--侧边栏折叠点击当前-rail-按钮切换" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="起因-2">起因<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#起因-2" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>WebUI 侧边栏可以折叠成一条窄 rail（只显示图标），但折叠后想展开只能点汉堡菜单。移动端或窄屏上汉堡菜单不一定可见，rail 上又没有明确的展开入口。</p>
<h3 id="做法-1">做法<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#做法-1" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>点击 rail 上已经激活（高亮）的按钮，触发侧边栏展开/折叠。逻辑很简单——判断点击的按钮是否是当前激活项，是就 toggle。</p>
<h3 id="有趣的部分合并-pr">有趣的部分：合并 PR<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#有趣的部分合并-pr" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>另一个贡献者 @spektro33 同时提了 #1924 做同样的事，方案几乎一样。维护者把我们两个的 PR 合成一个 #2054，给了双作者署名（<code>Co-authored-by</code>）。</p>
<p>第一次遇到开源项目里这种合并方式。维护者的原话：“Fusing this into a stealth-mode PR — they were both proposing the same UX from different angles.”</p>
<p>PR: <a href="https://github.com/nesquena/hermes-webui/pull/1884" class="external">#1884<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a></p>
<hr>
<h2 id="2186--并发-send-竞态消息丢失和流吞没">#2186 — 并发 send() 竞态：消息丢失和流吞没<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#2186--并发-send-竞态消息丢失和流吞没" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="起因-3">起因<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#起因-3" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>WebUI 用 <code>S.busy</code> 布尔值防止用户在 agent 回复过程中重复发送消息。但 <code>setBusy(true)</code> 在 <code>send()</code> 内部第一个 <code>await</code> 之后才执行——也就是说，两次快速 <code>send()</code> 调用之间有个时间窗口，第二次能通过 busy 检查，两条流并发跑。</p>
<p>结果：第二条消息的流覆盖第一条的输出，或者前端渲染混乱。</p>
<h3 id="做法-2">做法<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#做法-2" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>把 <code>setBusy(true)</code> 移到 <code>send()</code> 函数的最顶部，在任何 <code>await</code> 之前。改动只有几行，但需要确认所有错误路径（catch / finally）都正确重置了 busy 状态。</p>
<p>PR: <a href="https://github.com/nesquena/hermes-webui/pull/2186" class="external">#2186<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a></p>
<hr>
<h2 id="2236--静默失败检测扫了全量消息">#2236 — 静默失败检测扫了全量消息<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#2236--静默失败检测扫了全量消息" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="起因-4">起因<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#起因-4" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>当 provider 返回错误（401、429、rate-limit），agent 没有生成新回复，WebUI 需要检测这个”静默失败”并给用户显示错误。</p>
<p>问题在于检测逻辑在 <code>_assistant_added</code> 里扫的是 session 的 <strong>全部历史消息</strong>，而不是刚跑完的这轮新增消息。长 session 下这不是性能问题——是因为全量扫描碰到了旧消息里的错误标记，误判为新失败，弹出不该出现的错误提示。</p>
<h3 id="做法-3">做法<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#做法-3" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>改成只扫描本轮新增的消息。需要在调用点传入消息范围（<code>result["messages"]</code> 里新消息的起始 index），检测函数只看这个窗口。</p>
<p>代码 217 行 additions，主要因为补了对应的测试覆盖。</p>
<p>PR: <a href="https://github.com/nesquena/hermes-webui/pull/2236" class="external">#2236<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a></p>
<hr>
<h2 id="2187--steer-消息在聊天界面显示">#2187 — Steer 消息在聊天界面显示<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#2187--steer-消息在聊天界面显示" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="起因-5">起因<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#起因-5" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>WebUI 有个 <code>busy_input_mode=steer</code> 功能——agent 忙的时候，用户输入的消息不会排队等 agent 处理，而是直接注入 agent 的 context（“steer”它的方向）。</p>
<p>问题是注入后消息就消失了，用户看到输入框闪了一下，不知道消息去哪了。</p>
<h3 id="做法-4">做法<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#做法-4" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>Steer 注入的消息现在在聊天界面显示——半透明的斜体气泡，带一个 <code>Steer</code> 标记。用户能看到消息被投递了，也知道它走的是 steer 通道。</p>
<p>PR: <a href="https://github.com/nesquena/hermes-webui/pull/2187" class="external">#2187<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a></p>
<hr>
<h2 id="2185--session-切换触发压缩状态-404">#2185 — Session 切换触发压缩状态 404<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#2185--session-切换触发压缩状态-404" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="起因-6">起因<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#起因-6" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>切 session 时前端调用 <code>GET /api/session/compress/status</code> 检查有没有正在跑的压缩任务。没任务时后端返回 <code>None</code>（从 <code>j()</code> 函数），Flask 把 <code>None</code> 当成 404 处理。控制台一堆红字，虽然不影响功能但碍眼。</p>
<h3 id="做法-5">做法<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#做法-5" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>空状态返回 <code>{"active": false}</code> 而不是 <code>None</code>。3 个文件改了 144 行（含测试），1 行删除。</p>
<p>PR: <a href="https://github.com/nesquena/hermes-webui/pull/2185" class="external">#2185<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a></p>
<hr>
<h2 id="全部-pr-一览">全部 PR 一览<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#全部-pr-一览" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>











































































































<table><thead><tr><th>#</th><th>标题</th><th>类型</th><th>版本</th></tr></thead><tbody><tr><td>1149</td><td>修复符号链接无限递归</td><td>fix</td><td>v0.50.227</td></tr><tr><td><strong>1158</strong></td><td><strong>Session 切换性能优化 800ms→40ms</strong></td><td><strong>perf</strong></td><td><strong>v0.50.229</strong></td></tr><tr><td>1219</td><td>加载老消息后滚动位置跳动修复</td><td>fix</td><td>v0.50.237</td></tr><tr><td>1213</td><td>DeepSeek V4 + Z.AI/GLM Provider 支持</td><td>feat</td><td>v0.50.237</td></tr><tr><td>1317</td><td>Cron Job NameError（run_job 未 import）</td><td>fix</td><td>v0.50.245</td></tr><tr><td>1341</td><td>Session 持久化 context_length 等字段</td><td>fix</td><td>v0.50.246</td></tr><tr><td>1349</td><td>Context 指示器无需显式 context_length</td><td>fix</td><td>v0.50.248</td></tr><tr><td><strong>1350</strong></td><td><strong>SSE 实时推送 Approval 通知</strong></td><td><strong>feat</strong></td><td><strong>v0.50.248</strong></td></tr><tr><td><strong>1355</strong></td><td><strong>SSE 实时推送 Clarify 通知</strong></td><td><strong>feat</strong></td><td><strong>v0.50.249</strong></td></tr><tr><td>1780</td><td>Kanban 文档字符串 + init_db 修复</td><td>fix</td><td>v0.51.17</td></tr><tr><td>1782</td><td>自定义 CSS Tooltip 替换原生 title</td><td>feat</td><td>v0.51.17</td></tr><tr><td><strong>1884</strong></td><td><strong>点击 rail 按钮切换侧边栏折叠</strong></td><td><strong>feat</strong></td><td><strong>v0.51.43</strong></td></tr><tr><td><strong>2185</strong></td><td><strong>Session 切换压缩状态 404 修复</strong></td><td><strong>fix</strong></td><td><strong>v0.51.62</strong></td></tr><tr><td><strong>2186</strong></td><td><strong>并发 send() 竞态修复</strong></td><td><strong>fix</strong></td><td><strong>v0.51.62</strong></td></tr><tr><td><strong>2187</strong></td><td><strong>Steer 消息在聊天界面显示</strong></td><td><strong>feat</strong></td><td><strong>v0.51.62</strong></td></tr><tr><td><strong>2236</strong></td><td><strong>静默失败检测改为只扫新消息</strong></td><td><strong>fix</strong></td><td><strong>v0.51.65</strong></td></tr></tbody></table>
<h2 id="几点感受">几点感受<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#几点感受" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p><strong>自用驱动。</strong> 每个 PR 都从自己的使用痛点出发——session 切换慢、通知延迟、UI 不顺手。这种贡献比”为了贡献而贡献”自然，也更容易写好 PR 描述，因为你就是用户。</p>
<p><strong>Reviewer 的严格对双方都好。</strong> 不是”能跑就行”，而是要求覆盖边界路径、状态重置、并发安全。#1158 的 <code>_messagesTruncated</code> 被 hold 了两天直到补全 cancellation 路径。代码质量在这种反馈循环里实打实地涨。</p>
<p><strong>Batch release 模式。</strong> 维护者不直接 merge，而是把多个 PR 打包成 batch release，统一跑 CI 后发布。PR 状态显示 “CLOSED” 而不是 “MERGED”，但代码确实进了主分支。</p> ]]></description>
    <pubDate>Thu, 14 May 2026 16:00:00 GMT</pubDate>
  </item><item>
    <title>腾讯控股 Q1 2026 财报深度分析</title>
    <link>https://jiachen.lol/%E6%8A%95%E8%B5%84/8fac419b</link>
    <guid>https://jiachen.lol/%E6%8A%95%E8%B5%84/8fac419b</guid>
    <description><![CDATA[ <h1 id="腾讯控股-q1-2026-深度价值分析">腾讯控股 Q1 2026 深度价值分析<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#腾讯控股-q1-2026-深度价值分析" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h1>
<blockquote>
<p>腾讯从”高回购+稳增长”的防御标的，变成”缩减回购+加码AI”的成长叙事。Forward PE 13.8x，扣投资组合后主营PE仅10.6x。市场给出了悲观定价，问题是：这是机会还是陷阱？</p>
</blockquote>
<h2 id="一核心财务数据">一、核心财务数据<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#一核心财务数据" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>







































































<table><thead><tr><th>指标</th><th>Q1 2026</th><th>同比</th><th>环比</th></tr></thead><tbody><tr><td>营收</td><td>1965亿</td><td>+9%</td><td>+1%</td></tr><tr><td>毛利</td><td>1113亿</td><td>+11%</td><td>+3%</td></tr><tr><td>毛利率</td><td>57%</td><td>+1pp</td><td>+1pp</td></tr><tr><td>IFRS归母净利润</td><td>581亿</td><td>+21%</td><td>~持平</td></tr><tr><td>Non-IFRS归母净利润</td><td>679亿</td><td>+11%</td><td>+5%</td></tr><tr><td>Non-IFRS经营利润</td><td>756亿</td><td>+9%</td><td>+9%</td></tr><tr><td>经营现金流</td><td>1014亿</td><td>+32%</td><td>—</td></tr><tr><td>资本开支</td><td>370亿</td><td>+35%</td><td>—</td></tr><tr><td>自由现金流</td><td>567亿</td><td>—</td><td>—</td></tr><tr><td>现金净额</td><td>1469亿</td><td>—</td><td>+400亿</td></tr></tbody></table>
<p><strong>营收低于预期</strong>（共识~1994亿，差近30亿），<strong>利润超预期</strong>（IFRS净利581亿 vs 预期578亿）。增速从Q4的13%放缓到9%，AI投入砍掉一半利润增速。</p>
<h2 id="二业务拆解">二、业务拆解<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#二业务拆解" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="21-增值服务-961亿占比49同比4">2.1 增值服务 961亿（占比49%，同比+4%）<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#21-增值服务-961亿占比49同比4" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>

































<table><thead><tr><th>子业务</th><th>Q1 2026</th><th>同比</th><th>环比</th><th>备注</th></tr></thead><tbody><tr><td>本土游戏</td><td>454亿</td><td>+6%</td><td>+19%</td><td>流水实际”十几%“增长，春节错位致收入递延Q2</td></tr><tr><td>国际游戏</td><td>188亿</td><td>+13%</td><td>-11%</td><td>海外增速持续高于国内</td></tr><tr><td>社交网络</td><td>319亿</td><td>-2%</td><td>+4%</td><td>受春节错位影响</td></tr></tbody></table>
<p>关键细节：</p>
<ul>
<li>《王者荣耀》《和平精英》《三角洲行动》三款季度流水均创新高</li>
<li>《三角洲行动》2月DAU突破5000万，成核心增量</li>
<li>《洛克王国世界》3月上线，9天注册破3000万，首月流水约10亿</li>
<li>《皇室战争》DAU和流水创历史新高</li>
<li>游戏收入递延意味着Q2有释放空间</li>
</ul>
<h3 id="22-营销服务-382亿占比19同比20">2.2 营销服务 382亿（占比19%，同比+20%）⭐<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#22-营销服务-382亿占比19同比20" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>本季最大亮点。增速较Q4的17%进一步提速。</p>
<p>驱动因素：</p>
<ul>
<li>视频号用户时长同比+20%+，广告负载仍低于同行</li>
<li>AIM+智能投放已覆盖广告主约30%投放金额</li>
<li>微信搜一搜AI增强后查询量快速增长</li>
<li>京东、美团等头部商家小程序广告投放需求增长</li>
</ul>
<h3 id="23-金融科技及企业服务-599亿占比31同比9">2.3 金融科技及企业服务 599亿（占比31%，同比+9%）<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#23-金融科技及企业服务-599亿占比31同比9" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>

















<table><thead><tr><th>子业务</th><th>表现</th></tr></thead><tbody><tr><td>企业服务</td><td>同比+20%，云业务受AI需求+涨价驱动加速</td></tr><tr><td>金融科技</td><td>低个位数增长，支付业务随宏观温和复苏</td></tr></tbody></table>
<p>腾讯云Q1两轮涨价：</p>
<ul>
<li>3月：混元模型API提价5.6倍</li>
<li>4月：AI算力、容器服务涨价5%</li>
</ul>
<h2 id="三多方法估值分析">三、多方法估值分析<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#三多方法估值分析" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="31-pe-估值">3.1 PE 估值<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#31-pe-估值" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>

























<table><thead><tr><th>口径</th><th>数值</th><th>判断</th></tr></thead><tbody><tr><td>TTM PE（Non-IFRS）</td><td>14.7x</td><td>历史分位约34%</td></tr><tr><td>Forward PE（2026E）</td><td>13.8x</td><td>低于历史中位数</td></tr><tr><td>行业对比</td><td>美国科技Meta 22x / Google 35x</td><td>明显折价</td></tr></tbody></table>
<p>腾讯 PE 历史区间约10-45x，当前处于偏低位置（约30-35%分位）。</p>
<h3 id="32-投资组合扣除法核心">3.2 投资组合扣除法（核心）<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#32-投资组合扣除法核心" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<pre><code>总市值：39,261 亿 RMB（463 HKD × 91.18亿股）

投资组合（2025年末，打折后）：
  上市投资公允价值：6,727 亿 × 0.8 = 5,382 亿
  非上市投资账面价值：3,631 亿 × 0.6 = 2,179 亿
  投资组合合计（打折后）：7,560 亿

净现金：1,469 亿

主营市值 = 39,261 - 7,560 - 1,469 = 30,232 亿
2026E Non-IFRS净利润 = 2,850 亿
主营PE = 30,232 / 2,850 = 10.6x
</code></pre>
<p><strong>10.6x 主营PE，对一个年增10%+、FCF充裕的平台公司，偏低。</strong></p>
<h3 id="33-sotp-分部估值">3.3 SOTP 分部估值<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#33-sotp-分部估值" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>



























































<table><thead><tr><th>板块</th><th>2026E收入</th><th>适用倍数</th><th>板块价值</th></tr></thead><tbody><tr><td>游戏（本土+海外）</td><td>~2,725亿</td><td>PS 6x</td><td>16,350亿</td></tr><tr><td>社交网络</td><td>~1,341亿</td><td>PS 4x</td><td>5,364亿</td></tr><tr><td>营销服务</td><td>~1,710亿</td><td>PS 7x</td><td>11,970亿</td></tr><tr><td>金融科技+企业服务</td><td>~2,524亿</td><td>PS 4x</td><td>10,096亿</td></tr><tr><td>投资组合（打折）</td><td>—</td><td>—</td><td>7,560亿</td></tr><tr><td>净现金</td><td>—</td><td>—</td><td>1,469亿</td></tr><tr><td><strong>合计</strong></td><td></td><td></td><td><strong>52,809亿</strong></td></tr><tr><td><strong>每股</strong></td><td></td><td></td><td><strong>579 RMB ≈ 623 HKD</strong></td></tr></tbody></table>
<h3 id="34-dcf-折现">3.4 DCF 折现<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#34-dcf-折现" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>假设：Base FCF 1,800亿，5年增速10%，之后进入永续。</p>





























<table><thead><tr><th></th><th>永续2%</th><th>永续3%</th><th>永续4%</th></tr></thead><tbody><tr><td><strong>WACC 8%</strong></td><td>525 HKD</td><td>609 HKD</td><td>734 HKD</td></tr><tr><td><strong>WACC 10%</strong></td><td>394 HKD</td><td>436 HKD</td><td>491 HKD</td></tr><tr><td><strong>WACC 12%</strong></td><td>316 HKD</td><td>340 HKD</td><td>370 HKD</td></tr></tbody></table>
<p>中性情景（WACC 10%，永续3%）：<strong>436 HKD</strong>
乐观情景（WACC 8%，永续3%）：<strong>609 HKD</strong></p>
<h3 id="35-fcf-yield">3.5 FCF Yield<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#35-fcf-yield" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<pre><code>TTM FCF：1,922 亿
市值：39,261 亿
FCF Yield = 4.9%
</code></pre>
<p>接近5%的吸引力门槛。中国10年国债利率~1.8%，FCF Yield 超出国债+3%。</p>
<h3 id="36-peg">3.6 PEG<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#36-peg" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<pre><code>Forward PE = 13.8x
3年预期EPS增速 ≈ 12%
PEG = 13.8 / 12 = 1.15
</code></pre>
<p>PEG略高于1，在合理区间上沿，不算便宜但也不贵。</p>
<h3 id="估值汇总">估值汇总<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#估值汇总" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>















































<table><thead><tr><th>方法</th><th>悲观</th><th>中性</th><th>乐观</th></tr></thead><tbody><tr><td>PE（Non-IFRS）</td><td>380 HKD</td><td>460 HKD</td><td>550 HKD</td></tr><tr><td>投资组合扣除法</td><td>390 HKD</td><td>480 HKD</td><td>570 HKD</td></tr><tr><td>SOTP</td><td>480 HKD</td><td>620 HKD</td><td>750 HKD</td></tr><tr><td>DCF</td><td>394 HKD</td><td>436 HKD</td><td>609 HKD</td></tr><tr><td>FCF Yield反推(4-6%)</td><td>387 HKD</td><td>484 HKD</td><td>580 HKD</td></tr><tr><td><strong>综合区间</strong></td><td><strong>390-400 HKD</strong></td><td><strong>460-490 HKD</strong></td><td><strong>580-620 HKD</strong></td></tr></tbody></table>
<p>当前 463 HKD → <strong>处于中性区间偏下沿</strong>。</p>
<h2 id="四护城河与竞争">四、护城河与竞争<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#四护城河与竞争" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="护城河层级">护城河层级<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#护城河层级" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>🧱 <strong>第一层（最深）</strong>：微信社交网络效应</p>
<ul>
<li>14.02亿月活，用户迁移成本极高</li>
<li>社交关系链不可复制</li>
<li>C2C网络效应 > C2Creator > C2B</li>
</ul>
<p>🧱 <strong>第二层（深）</strong>：游戏IP+运营能力</p>
<ul>
<li>PVP游戏自带网络效应</li>
<li>长青游戏组合（王者/和平精英/三角洲行动）形成飞轮</li>
<li>全球最大游戏公司，海外收入首破100亿美元</li>
</ul>
<p>🧱 <strong>第三层（中等）</strong>：支付+金融牌照</p>
<ul>
<li>支付双寡头之一（微信支付+支付宝）</li>
<li>低费率+高渗透，护城河来自监管+规模</li>
</ul>
<p>🧱 <strong>第四层（较浅）</strong>：AI+云</p>
<ul>
<li>混元3.0处于追赶阶段，非领先</li>
<li>但微信生态是AI Agent的天然载体</li>
</ul>
<h3 id="竞争对手对比">竞争对手对比<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#竞争对手对比" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>








































<table><thead><tr><th>公司</th><th>PE</th><th>收入增速</th><th>毛利率</th><th>特点</th></tr></thead><tbody><tr><td>腾讯</td><td>14x</td><td>~10%</td><td>57%</td><td>社交+游戏+支付生态</td></tr><tr><td>阿里</td><td>12x</td><td>~6%</td><td>~40%</td><td>电商+云，增速更低</td></tr><tr><td>Meta</td><td>22x</td><td>~20%</td><td>~80%</td><td>社交+广告，AI投入更激进</td></tr><tr><td>字节（未上市）</td><td>—</td><td>~30%</td><td>—</td><td>短视频+AI，增长最快但无公开数据</td></tr></tbody></table>
<p>腾讯在港股互联网中估值中等偏低，增速优于阿里，但低于Meta。</p>
<h2 id="五风险与催化剂">五、风险与催化剂<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#五风险与催化剂" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="风险">风险<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#风险" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>



































<table><thead><tr><th>风险</th><th>严重度</th><th>说明</th></tr></thead><tbody><tr><td>AI投入ROI不明确</td><td>⭐⭐⭐</td><td>2026年AI投入360亿+，短期内看不到回报路径</td></tr><tr><td>回购缩水</td><td>⭐⭐⭐</td><td>从800亿港元降到不确定水平，股价支撑力减弱</td></tr><tr><td>营收增速放缓</td><td>⭐⭐</td><td>Q1仅+9%，连续放缓趋势（13%→9%）</td></tr><tr><td>宏观消费疲软</td><td>⭐⭐</td><td>支付业务增长依赖消费复苏</td></tr><tr><td>监管风险</td><td>⭐</td><td>游戏版号、反垄断常态化，边际减轻</td></tr></tbody></table>
<h3 id="催化剂">催化剂<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#催化剂" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>



































<table><thead><tr><th>催化剂</th><th>时间</th><th>影响</th></tr></thead><tbody><tr><td>Q2游戏收入释放（春节递延）</td><td>2026年8月</td><td>流水已创新高，收入确认只是时间问题</td></tr><tr><td>混元3.0正式版发布+商业化</td><td>2026年H1</td><td>模型能力若跃升，可驱动估值重估</td></tr><tr><td>微信AI Agent落地</td><td>2026年H2</td><td>如果微信Agent能自动操作小程序，变现空间巨大</td></tr><tr><td>腾讯云持续涨价</td><td>2026年全年</td><td>定价环境改善，利润率提升</td></tr><tr><td>广告加速增长</td><td>持续</td><td>AIM+渗透率提升+视频号广告负载还有空间</td></tr></tbody></table>
<h2 id="六击球区判断">六、击球区判断<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#六击球区判断" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="当前是否在击球区">当前是否在击球区？<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#当前是否在击球区" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p><strong>结论：刚进入击球区下沿，值得关注但不必急。</strong></p>
<p>理由：</p>
<ul>
<li>463 HKD 处于综合估值中性区间偏下（460-490下沿）</li>
<li>悲观估值支撑约390-400 HKD，下行空间约15%</li>
<li>乐观估值580-620 HKD，上行空间约25-35%</li>
<li>风险回报比约 1:2，可以开始关注</li>
</ul>
<h3 id="不急于重仓的原因">不急于重仓的原因<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#不急于重仓的原因" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<ol>
<li>Q1营收低于预期，增速放缓趋势未止</li>
<li>AI投入对利润的侵蚀刚开始，下半年可能更大</li>
<li>回购缩水后缺乏股价支撑，短期可能继续承压</li>
<li>市场情绪从”AI受益”转向”AI烧钱”，估值可能继续压缩</li>
</ol>
<h3 id="分批建仓参考">分批建仓参考<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#分批建仓参考" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>



































<table><thead><tr><th>阶段</th><th>价格区间</th><th>仓位</th><th>触发条件</th></tr></thead><tbody><tr><td>观察</td><td>460-480 HKD</td><td>0%</td><td>当前区间，等待更多信号</td></tr><tr><td>首批</td><td>420-440 HKD</td><td>1/3</td><td>接近悲观估值上沿，或者Q2业绩超预期</td></tr><tr><td>加仓</td><td>380-400 HKD</td><td>2/3</td><td>接近悲观估值，或者AI商业化出现明确进展</td></tr><tr><td>满仓</td><td>&#x3C;380 HKD</td><td>100%</td><td>极端恐慌（如宏观危机），对应主营PE&#x3C;8x</td></tr></tbody></table>
<h3 id="止损参考">止损参考<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#止损参考" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<ul>
<li>如果主营PE跌破7x（约330 HKD），意味着基本面出现重大恶化</li>
<li>如果AI投入持续扩大但6个季度内看不到收入贡献，需重新评估</li>
</ul>
<h3 id="等待的触发条件">等待的触发条件<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#等待的触发条件" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<ol>
<li><strong>Q2财报</strong>（2026年8月）：游戏递延收入释放+广告能否持续加速</li>
<li><strong>混元3.0商业化数据</strong>：API调用量、付费用户数、对企业服务的收入贡献</li>
<li><strong>回购指引</strong>：管理层是否给出明确的2026年回购+分红方案</li>
<li><strong>微信AI Agent</strong>：从概念到实际可用的产品，这是最大的潜在催化剂</li>
</ol>
<hr>
<p><em>数据截止：2026年5月13日。本文为个人分析，不构成投资建议。</em></p> ]]></description>
    <pubDate>Tue, 12 May 2026 16:00:00 GMT</pubDate>
  </item><item>
    <title>AI 是怎么学会操作电脑的</title>
    <link>https://jiachen.lol/%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%B4%A2/7c37a4d2</link>
    <guid>https://jiachen.lol/%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%B4%A2/7c37a4d2</guid>
    <description><![CDATA[ <p>2024 年 10 月，Anthropic 跟 Claude 3.5 Sonnet 一起公布了 Computer Use 的 API 公测——注意，这跟 Claude Code 不是一回事。Computer Use 让 Claude 能看你的屏幕、识别界面元素、操控鼠标键盘帮你干活——在 Salesforce 里填报销单，在浏览器里预约会议。Claude Code 是 2025 年中才出的 CLI 编程工具，干的是另一件事。OpenAI 紧接着推出 Operator，GPT 自己开个虚拟浏览器帮你订餐买票。到 2026 年，这两家的桌面 Agent 都已经进了普通用户的产品里。</p>
<p>一个自然的问题是：<strong>AI 怎么学会操作电脑的？</strong> 训练数据从哪来？模型怎么学会”看到这个按钮该点”的？</p>
<p>答案比你想的有趣。</p>
<h2 id="学术数据集够做-demo不够做产品">学术数据集：够做 demo，不够做产品<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#学术数据集够做-demo不够做产品" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>在 Anthropic 和 OpenAI 动手之前，学术圈已经攒了不少 UI 操作数据集——GUI-360、OSWorld、WebArena 这些。格式没问题：一张截图配一个操作目标。</p>
<p>但拿来训练产品级 Agent，有三个硬伤：</p>
<p><strong>应用覆盖太窄。</strong> 学术数据集覆盖几十种软件，真实世界有上千种。每多一类界面，模型要学的布局规律就多一个维度。长尾填不上。</p>
<p><strong>场景太干净。</strong> 打开菜单、填表单、保存文件——这些简单操作占了大头。真实工作中的弹窗打断、加载延迟、表单校验报错，在数据集里很少出现。</p>
<p><strong>轨迹太短。</strong> 真实操作是一串连续动作：“打开软件 → 点这个 → 填那个 → 等加载 → 关弹窗 → 继续填”。学术数据以单步或短轨迹为主，缺少多步之间的依赖关系。</p>
<p>三件事叠在一起：学术数据集能训出一个跑 benchmark 的 prototype，训不出一个在各种软件上都能用的产品。</p>
<h2 id="anthropic-的做法把操作变成推理数据">Anthropic 的做法：把操作变成推理数据<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#anthropic-的做法把操作变成推理数据" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>2025 年 10 月，一项 Anthropic 的专利（U.S. 12,437,238）获批。它保护的不是”AI 怎么操作电脑”——那叫推理，每家都在做。它保护的是<strong>训练数据的采集和生成管线</strong>。</p>
<p>这条管线的核心思路：<strong>不只是记录”做了什么”，还要记录”为什么这么做”。</strong></p>
<p>学术数据集的样本是”看到这个界面 → 做这个动作”，一组静态映射。Anthropic 的管线产出的样本是”看到这个界面 → 理解当前状态 → 判断下一步该做什么 → 做这个动作”，一条推理链。</p>
<p>具体怎么做？三个环节。</p>
<h3 id="第一步截获">第一步：截获<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#第一步截获" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>在用户和软件之间放一个透明中间层。用户正常操作——点按钮、填表、滚动页面——中间层记录每一步操作前后的界面状态（截图 + 可访问性元数据 + 文本内容）。</p>
<p>最有意思的部分写在专利 Claim 5 里：用户可以附加”思考标注”——“我点这个按钮是因为它通常在右下角”、“应该选第三个选项，因为前两个是灰色的”。这些标注是人类在当前界面做决策的推理过程，直接编码进训练数据。</p>
<p>对模型来说，训练信号不再是”模仿这个点击”，而是”理解为什么要点这里”。</p>
<h3 id="第二步翻译">第二步：翻译<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#第二步翻译" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>原始操作——“(342, 157) 点击”——送进一个多模态 transformer 模型。模型结合界面截图和上下文，推断用户意图，输出语义化命令：“识别到文本为’提交’的按钮元素，在 (330, 150, 400, 170) 区域内，执行点击”。</p>
<p>关键不是坐标转换，是让模型<strong>推理出操作背后的意图</strong>——用户不是随机点了一个像素，用户是想提交表单。</p>
<h3 id="第三步合成扩展">第三步：合成扩展<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#第三步合成扩展" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>一条真实轨迹经过截获和翻译，变成一份带推理链的训练样本。然后 Anthropic 用一个更强的模型对这份样本做扩展——给同一张操作前截图，让强模型生成多种合理的操作变体。一条真实轨迹扩展出几十条训练样本，每条都包含完整的”看界面 → 推理 → 做动作”链路。</p>
<p>三个环节做的事是同一件：<strong>把原始操作转换为推理数据。</strong> 第一步从人类那里获取推理标注，第二步用模型补齐意图推断，第三步用更强的模型生成更多推理变体。</p>
<h2 id="openai-的做法让-agent-自己学">OpenAI 的做法：让 Agent 自己学<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#openai-的做法让-agent-自己学" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>OpenAI 的 Operator 背后是一个叫 CUA（Computer-Using Agent）的模型。它基于 GPT-4o，但训练方法和 Anthropic 完全不同——走的是<strong>强化学习（RL）</strong> 路线。</p>
<p>核心区别：Anthropic 靠人类操作数据+模型翻译来制造训练样本，OpenAI 让 Agent 在虚拟环境里自己探索学习。</p>
<p>具体怎么做的：</p>
<h3 id="搭建-web-gym">搭建 Web Gym<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#搭建-web-gym" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>不让没训练过的 Agent 在真实网站上乱点——那会点出事。OpenAI 搭建了模拟真实网站的沙箱环境（Web Gym），Agent 在里面随便试，不会搞坏任何东西。</p>
<p>好的 Gym 要满足五个条件：足够真实（DOM 和真实网站接近）、可以探索（按钮真的能点）、数据多样（不能让 Agent 过拟合）、验证器准确（自动判断任务有没有完成）、基础设施稳定（训练环境不能老崩）。</p>
<h3 id="设计好任务">设计好任务<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#设计好任务" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>任务设计直接影响学习效果。“买个衬衫”太模糊，Agent 学不到东西。“买最便宜的蓝色 M 码棉衬衫”才是好任务——它迫使 Agent 学会搜索、筛选、比价、验证属性，每一步都有明确的对错标准。</p>
<h3 id="rl-训练">RL 训练<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#rl-训练" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>Agent 反复在 Gym 里尝试任务。成功了拿奖励，失败了扣分。关键难点是保持模型的推理能力——RL 训练容易让模型变得”短视”，只会追求即时奖励，丧失长程规划能力。OpenAI 专门做了处理来防止这个问题。</p>
<p>CUA 的运行方式是一个循环：截图（感知）→ 想一想当前状态和下一步（推理，Chain-of-Thought）→ 点击/输入（动作）。每一步都有内部独白，不是直接输出坐标。</p>
<h2 id="两条路线一个规律">两条路线，一个规律<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#两条路线一个规律" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>把两家放在一起看：</p>








































<table><thead><tr><th></th><th>Anthropic</th><th>OpenAI</th></tr></thead><tbody><tr><td><strong>核心方法</strong></td><td>人类操作数据 + 模型翻译 + 合成扩展</td><td>强化学习（RL）</td></tr><tr><td><strong>数据来源</strong></td><td>真人操作轨迹 + 思考标注</td><td>虚拟 Web Gym 环境内自学习</td></tr><tr><td><strong>推理怎么来</strong></td><td>数据里自带推理标注</td><td>模型自己通过 CoT 学推理</td></tr><tr><td><strong>扩展方式</strong></td><td>强模型生成操作变体</td><td>环境交互自动生成经验</td></tr><tr><td><strong>优势</strong></td><td>数据质量高，带因果推理</td><td>不依赖人类标注，覆盖更多异常场景</td></tr><tr><td><strong>劣势</strong></td><td>人类标注贵且慢</td><td>RL 训练不稳定，推理能力可能退化</td></tr></tbody></table>
<p>Amazon AGI Lab 也发了类似的研究，结论基本一致：好的环境 + 好的任务设计 + 准确的验证器 + 保持推理能力，四层缺一不可。</p>
<h2 id="独立-browser-agent-的死局">独立 Browser Agent 的死局<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#独立-browser-agent-的死局" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>2026 年 5 月 4 日，Google 无预告关掉了 Project Mariner——去年 I/O 大会的 AI Agent 旗舰产品。官方页面只留了一句话：“Technology voyaged to other Google products.”</p>
<p>有意思的是，Anthropic 和 OpenAI 也得出了同样的结论。OpenAI 的 Operator 关了，Instant Checkout 也关了。Anthropic 的 Computer Use 发布 18 个月仍然 beta，官方自己都说”从低风险任务开始”。三家做同类产品的公司，几乎同时放弃了独立 browser agent 路线。</p>
<p>不是技术不行，是<strong>结构性死局</strong>。</p>
<h3 id="你在和反爬系统打仗">你在和反爬系统打仗<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#你在和反爬系统打仗" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>独立 browser agent 的部署方式（headless Chrome、云托管浏览器、独立 VM）会创建全新的浏览器会话——没有 cookie、没有浏览历史、没有人类行为特征。这正是网站反爬系统十几年来擅长探测的目标。</p>
<p>OpenAI 的 Operator 连 ChatGPT.com 都访问不了——自己公司的网站都把它当爬虫。Amazon 在 2026 年 3 月对 Perplexity Comet 拿到了法院禁令，法官依据《计算机欺诈和滥用法》判定：Comet 访问 Amazon 账户”有用户许可但没有 Amazon 授权”。</p>
<p>做独立 browser agent 的团队，工程资源不在提升模型能力上，而在和有几十年反爬经验、有直接经济激励的平台打军备竞赛。而且你的每一轮规避策略都会触发下一轮检测升级。</p>
<h3 id="browser-agent-vs-computer-use">Browser Agent vs Computer Use<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#browser-agent-vs-computer-use" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>先厘清一个关键区分：</p>























<table><thead><tr><th>品类</th><th>代表</th><th>运行环境</th><th>能力</th></tr></thead><tbody><tr><td><strong>Browser Agent</strong></td><td>Operator、Mariner</td><td>独立 headless 浏览器</td><td>只能操作网页</td></tr><tr><td><strong>Computer Use</strong></td><td>Anthropic Computer Use、Codex 插件</td><td>VM/沙箱 或 用户真实桌面</td><td>控制整个桌面</td></tr></tbody></table>
<p>Browser Agent 瞄准的场景（订机票、比价、购物）对可靠性要求极高。用户容忍不了偶尔买错，而”买错”和自己操作的区别只是几分钟——认知上的收益太小。</p>
<p>真正的需求在 Computer Use 这边：医院 90 年代的病历系统、保险理赔软件、Bloomberg Terminal（API 访问要六位数美元的额外合同）。这些不会因为 AI 出现就自动装上 API，而且它们绝大多数不是网页应用。</p>
<blockquote>
<p>需求没错，品类错了。</p>
</blockquote>
<h3 id="解法共享用户的真实会话">解法：共享用户的真实会话<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#解法共享用户的真实会话" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>三家公司最后都走向了同一个方向——不让 Agent 开新浏览器，而是<strong>直接操作用户已在用的浏览器或桌面</strong>。从网站角度看，分不出是用户在点还是 Agent 在点。</p>
<ul>
<li><strong>Google</strong>：把 Mariner 技术做进了 Chrome（auto-browse），跑在用户真实浏览器里</li>
<li><strong>OpenAI</strong>：Codex Computer Use 走 macOS 桌面插件路线，直接跑在用户真实 Mac 上，共享桌面环境和浏览器登录态</li>
<li><strong>Anthropic</strong>：Claude for Chrome 跑在用户真实浏览器里，活得很好</li>
</ul>
<p>到 Computer Use（控制用户整个桌面）的时候，优势更明显：用户桌面有真实人类操作轨迹——鼠标移动速度、打字节奏、标签切换模式。这些信号 bot 几乎不可能伪造。</p>
<h2 id="benchmark-现实">Benchmark 现实<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#benchmark-现实" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>说完方向，说现实。当前的成绩离”可靠”还很远：</p>

























<table><thead><tr><th>模型</th><th>OSWorld（全桌面）</th><th>WebArena（网页）</th></tr></thead><tbody><tr><td>人类</td><td>72.4%</td><td>—</td></tr><tr><td>OpenAI CUA</td><td>38.1%</td><td>58.1%</td></tr><tr><td>Anthropic Computer Use</td><td>22%</td><td>—</td></tr></tbody></table>
<p>最好的 Agent 在全桌面任务上的成功率刚过人类的三分之一。这就是为什么三家公司都在换方向——不是训练方法的问题，是<strong>部署环境</strong>的问题。在 headless 浏览器里训得再好，反爬系统一拦就白搭。换到共享真实会话的部署方式，同样的模型能力立刻能发挥出来。</p>
<h2 id="如果你想自己做">如果你想自己做<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#如果你想自己做" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>总结一下，如果是一个公司或团队想开发桌面操作 Agent：</p>
<p><strong>选对部署方式比选对训练方法更重要。</strong> 不要做独立 headless browser agent，那是死路。做浏览器扩展、桌面插件、或者直接接用户桌面——共享真实会话。</p>
<p><strong>最快的起步方式</strong>：做一个浏览器扩展或桌面插件，用大模型的 vision 能力做 zero-shot——截图扔给 GPT-4o 或 Claude，让它输出坐标和动作。不用专门训练，先跑通。</p>
<p><strong>要提升成功率</strong>：收集失败案例，人工标注正确操作，训练专门的视觉定位模型。加入异常处理：弹窗、加载中、报错、页面滚动。引入 accessibility tree 作为截图的补充信号。</p>
<p><strong>要规模化</strong>：建数据飞轮——用户使用产生轨迹 → 人工审核 → 训练模型 → 模型变强 → 吸引更多用户。或者走 RL 路线，搭虚拟环境让 Agent 自己学。</p>
<p>至于 Anthropic 的专利——它保护的是”截获层 + 思考标注 + 翻译 + 合成扩展”的特定管线组合。如果你走 RL 路线，或者用纯 API 调用（截图 → 大模型 → 坐标），根本不在专利覆盖范围内。</p>
<h2 id="一个更深的观察">一个更深的观察<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#一个更深的观察" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>Computer Use 的竞争，表面上是模型能力的竞争，实际上是<strong>训练数据的生产效率 × 部署环境的选择</strong>的竞争。</p>
<p>谁家的 Agent 能覆盖更多软件、更稳定地完成任务，取决于两件事：训练数据的质量和规模，以及 Agent 跑在什么环境里。Anthropic 的专利卡的是数据生产，Google 关掉 Mariner 说明部署环境同样关键。最好的训练数据配上 headless 浏览器，打不过一般的训练数据配上用户真实会话。</p>
<p>方向是确定的：<strong>AI 操作电脑这件事，不是一个功能，是一个新的交互范式。</strong> 但范式落地的路径已经从”给 Agent 一个独立浏览器”转向了”让 Agent 操作用户已有的浏览器和桌面”。这个转向不是退步，是把工程资源从打反爬战争转移到真正提升模型能力上。</p> ]]></description>
    <pubDate>Sun, 10 May 2026 16:00:00 GMT</pubDate>
  </item><item>
    <title>程序员在 AI 时代的复利</title>
    <link>https://jiachen.lol/%E5%93%B2%E5%AD%A6/a1bf45d2</link>
    <guid>https://jiachen.lol/%E5%93%B2%E5%AD%A6/a1bf45d2</guid>
    <description><![CDATA[ <h2 id="一个不太舒服的类比">一个不太舒服的类比<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#一个不太舒服的类比" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>有个观察让我困扰了挺久：医生越老越值钱，程序员越老越尴尬。</p>
<p>医生看了一万个病例，临床直觉会长出来。那个直觉不可替代，也不可压缩——你没法把它写成文档让新手直接用。程序员呢？你写了十年 Java，Spring 那套东西确实熟了，但 AI 现在写得比你快。你花三年搞明白的分布式系统调优，Claude Code 五分钟给你一个比你好一点的方案。</p>
<p>不是夸张。我自己用 Claude Code 和 Hermes Agent 做开发，一个下午干完以前两三天的活。如果”写代码”是我的核心价值，那我确实在被替代的路上。</p>
<p>但这个类比本身就有问题。</p>
<h2 id="医生的护城河不是你想的那样">医生的护城河不是你想的那样<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#医生的护城河不是你想的那样" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>医生真正不可替代的不是诊断能力——这块 AI 已经在碾压了。影像识别的准确率，AI 超过大部分放射科医生。IBM Watson 几年前就能根据症状列表给出比主治医师更全的鉴别诊断。</p>
<p>医生真正值钱的是三样东西：执照（制度性壁垒）、患者信任（关系壁垒）、出了事找他（责任壁垒）。前两个跟技能无关，是制度和社会契约在保护。程序员没有这些保护，所以焦虑来得更早更直接。</p>
<p>但反过来说，你也不需要这些保护。因为程序员的价值锚点本来就不在”写代码”上。只是大部分人——包括之前的我——把它搞混了。</p>
<h2 id="代码成本坍塌之后什么在涨价">代码成本坍塌之后，什么在涨价<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#代码成本坍塌之后什么在涨价" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>我写过一篇长文聊”当人类智力不再稀缺”，从宏观角度拆了这个问题。这次换个角度，从个人出发。</p>
<p>一句话：<strong>执行层价值归零，判断层价值放大。</strong> 每次技术革命都是这个规律。计算器干掉了算术能力，会计师没消失，但他们的活从”算对”变成了”知道该算什么”。摄影干掉了写实绘画，画家没消失，但价值从”画得像”变成了”画什么”。</p>
<p>AI 干掉的是代码执行。那程序员应该积累什么？</p>
<h3 id="品味">品味<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#品味" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>品味听着玄，拆开看就是：<strong>你见过足够多好的和差的，形成了”这个方向对了/错了”的直觉，并且能把直觉说出来。</strong></p>
<p>我有一个买房评分体系，13 个维度，每个维度有权重。AI 可以帮我搜任何一个维度的数据，但”这 13 个维度各占多少分”是我定的。别人拿到同样的数据，可能觉得学校比交通重要，或者噪音根本不算事儿。没有标准答案，但做判断的是人。</p>
<p>还有一个”去 AI 味五条”写作规范，是我改了几十篇文章之后提炼出来的。每一条都是踩过坑才知道的——“动词 unnatural”这条，是我发现自己写完的东西读出来像翻译腔，才意识到问题在哪。</p>
<p>品味的本质是压缩了无数次试错的结果。你可以把最终结论告诉别人，但他没法从结论反推出压缩过程。这就是不可替代的部分。</p>
<h3 id="问题定义">问题定义<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#问题定义" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>最近半年我一直在用 AI 做开发，发现一件事：花时间最多的不是”让 AI 写代码”，是”写清楚验收标准”。</p>
<p>举个例子，让 AI 做一个翻译功能。如果你只说”翻译这段文字”，你会得到一堆中英混杂、术语不一致的东西。但如果你写清楚：翻译后不能有中文字符、术语表必须前后一致、每个技术术语第一次出现要标注英文原文——那 AI 一次就能过。</p>
<p>这个过程让我意识到，“定义什么是对的”比”做出对的东西”难得多。前者需要你理解领域、理解约束、理解边界情况。AI 可以帮你执行任何标准，但标准本身得有人定。</p>
<h3 id="上下文积累">上下文积累<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#上下文积累" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>我有一个 Obsidian wiki 系统，里面 20 多个页面，记录了技术判断、投资分析、思维公理。这些东西的价值不只是”存了资料”，而在于形成了只有我拥有的语义网络。每个页面之间的链接——比如公理 A03（IC→Manager）连到 T05（认知是资产）再连到具体的代码案例——这是我的思维路径。别人拿到同样的原始材料，建不出同样的结构。</p>
<p>Hermes Agent 的记忆系统也是这个思路。四层记忆分离，从即时上下文到长期知识库，每次交互都被蒸馏成可复用的认知。这个东西越用越值钱，因为上下文在叠加。</p>
<h3 id="跨域连接">跨域连接<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#跨域连接" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>在程序员里我懂投资，在投资者里我懂技术，在技术人里我关心哲学——佛学无常、认知科学、决策框架。这种跨域视角是自然长出来的，不是刻意学的。</p>
<p>AI 能在每个领域给我信息，但它不会主动把”佛学的无常""投资的周期""技术的范式转移”连在一起讲。而这三件事其实是同一个模式：旧的稳态在崩塌，新的还没建立，过渡期最危险也最有机会。这种连接是人的活儿。</p>
<h2 id="我在怎么做">我在怎么做<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#我在怎么做" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>不是理论，是过去半年实际在做的事。</p>
<p><strong>把判断力外化。</strong> 每次做一个重要决策——技术选型、投资判断、产品方向——我把思路写成结构化文档。不是记录结论，是记录”我当时的判断依据是什么”。过一阵回头看，有些对了，有些错了。对了的沉淀成公理，错了的变成教训。这个过程本身就在练品味。</p>
<p><strong>练习写验收标准。</strong> 每次用 AI 完成一个任务，先写验收标准再动手。一周之后回头看：哪些标准写得好（AI 一次过），哪些写得差（反复修改）。好和差之间的差距，就是品味在生长的地方。</p>
<p><strong>建了一个 wiki 系统当第二大脑。</strong> 前面说的那个。三层信息流：收集层（原文不动）、结构层（消化后的笔记）、稳定层（从实践中提炼的核心认知，我管它叫”公理”，改动的频率是季度级的）。这个系统越用越顺，因为认知在叠加而不是每次从零开始。</p>
<p><strong>继续跑步和力量训练。</strong> 跟 AI 没直接关系，但身体技能是不可自动化的。42 公里只能用自己的腿跑。说极端一点，能跑半马、能爬山的人，在未来可能比能写代码的人更稀缺。不是比喻，是字面意思——物理共在的服务在涨价。</p>
<h2 id="身份这件事">身份这件事<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#身份这件事" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>说到底，焦虑的根源不是”程序员会不会失业”，是把”自我”绑在了”程序员”这个身份上。</p>
<p>我之前有一篇自我评估，结论是”觉醒的工程师”。工程师不是”写代码的人”，是”解决问题的人”。代码是当前时代的工具，就像铁锤是铁匠时代的工具。下一个时代的工具会变，但”定义问题、分解任务、验收结果、承担责任”这些能力不变。</p>
<p>佛学讲无常，不是说”一切都会变所以躺平”，是说”一切都会变所以别把锚钉在会变的东西上”。代码会变，框架会变，语言会变。判断力、品味、跨域理解——这些沉淀得慢，但不会过期。</p>
<h2 id="我不确定的地方">我不确定的地方<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#我不确定的地方" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>品味能不能被 AI 学习？现在看起来不能——它需要真实的体验和反馈闭环。但如果 AI 开始模拟反馈闭环呢？</p>
<p>“AI 编排者”这个角色会不会也被 AI 化？如果”定义验收标准”可以自动化，那人的价值又在哪？也许在于定义”验收标准的标准”——但这听着像无限递归。</p>
<p>物理世界的不可替代性能维持多久？具身智能的进展速度比我预期的快。</p>
<p>这些问题没有答案。但把不确定说出来，比假装确定好。假装确定的人死得最快。</p>
<hr>
<blockquote>
<p>这篇是 <a href="../wiki/concepts/compound-career-ai-era" class="internal" data-slug="wiki/concepts/compound-career-ai-era">compound-career-ai-era</a> 的博客化版本，更完整的框架和学习方向见 wiki。</p>
</blockquote> ]]></description>
    <pubDate>Wed, 06 May 2026 16:00:00 GMT</pubDate>
  </item><item>
    <title>RAG 学习路线：从 Pipeline 到 Agent</title>
    <link>https://jiachen.lol/%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%B4%A2/cbcb8e25</link>
    <guid>https://jiachen.lol/%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%B4%A2/cbcb8e25</guid>
    <description><![CDATA[ <h2 id="为什么要系统学-rag">为什么要系统学 RAG<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#为什么要系统学-rag" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>我有一个 Obsidian wiki 系统当第二大脑，63 个页面，覆盖 AI、投资、哲学、运动四个领域。页面之间有 wikilink 交叉引用，三层信息流（收集→结构→公理）。平时想查一个概念，得自己翻目录、点链接、拼上下文。</p>
<p>这就引出一个自然的需求：给 wiki 加一个问答入口。输入”佛学无常和投资周期有什么关系”，系统从 63 个页面里找到相关的段落，拼好上下文，生成回答。</p>
<p>这就是 RAG——Retrieval-Augmented Generation。技术本身不复杂，但 RAG 的基础 pipeline 正在被平台快速吸收。2023 年要自己搭的 chunk → embed → retrieve → generate 全链路，现在 OpenAI File Search 一个配置就搞定了。Anthropic 有 Contextual Retrieval，Google 有 Vertex AI RAG Engine，AWS 有 Bedrock Knowledge Bases。</p>
<p>真正值得花时间的是三件事：<strong>评估体系、Agentic Workflow、数据治理。</strong> 平台替代不了，也是 RAG 从”能用”到”好用”的关键。</p>
<h2 id="三个阶段">三个阶段<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#三个阶段" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="第一阶段基础-rag-系统设计">第一阶段：基础 RAG 系统设计<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#第一阶段基础-rag-系统设计" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>目标不是搭 demo，是建立”组件之间怎么配合”的直觉。</p>
<p><strong>要搞明白的东西：</strong></p>
<ul>
<li><strong>文档处理</strong>：PDF/HTML/Markdown 的解析策略，表格和图片怎么处理</li>
<li><strong>Chunking 策略</strong>：按长度切、按语义切、按结构切，各适合什么场景。没有万能方案，但要知道 trade-off</li>
<li><strong>Embedding 模型选择</strong>：OpenAI text-embedding-3-large vs 开源（BGE、E5、GTE），中文场景的选型差异</li>
<li><strong>检索方式</strong>：Dense retrieval（向量搜索）+ Sparse retrieval（BM25），Hybrid Search 为什么比单一方式好</li>
<li><strong>Reranking</strong>：检索后的重排序，Cohere Rerank 或 cross-encoder 模型</li>
</ul>
<p><strong>产出标准：</strong> 独立完成一个支撑 1000+ 文档的问答系统，跑通”用户提问 → 检索 → 生成 → 返回答案”全链路，能用真实数据验证检索质量。</p>
<p><strong>时间参考：</strong> 2-3 周（每天 2-3 小时）。</p>
<h3 id="第二阶段评估与可观测性">第二阶段：评估与可观测性<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#第二阶段评估与可观测性" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>RAG demo 和生产系统最大差距在于：你能不能区分出了什么问题。</p>
<p>demo 时检索不好手动调两下就行，生产环境出了问题你得知道是检索的锅还是生成的锅。评估能力通用性很高——学会了，换到推荐系统、搜索系统都能用。</p>
<p><strong>要搞明白的东西：</strong></p>
<ul>
<li><strong>测试集构建</strong>：怎么造出覆盖面够广的（问题，相关文档，正确答案）三元组。不能只测 happy path</li>
<li><strong>分层指标</strong>：
<ul>
<li>Retrieval 层：Precision@K、Recall@K、MRR、nDCG</li>
<li>Generation 层：Faithfulness（生成内容是否忠于检索结果）、Answer Relevancy（回答是否切题）、Citation Coverage（引用覆盖度）</li>
</ul>
</li>
<li><strong>工具链</strong>：Ragas、TruLens、DeepEval 这类评估框架怎么用</li>
<li><strong>线上监控</strong>：用户反馈闭环、回归测试、检索质量漂移检测</li>
</ul>
<p><strong>产出标准：</strong> 给第一阶段搭的系统加上评估层，能自动化跑评测、输出指标报告、定位问题出在哪一环。</p>
<p><strong>时间参考：</strong> 2 周。</p>
<h3 id="第三阶段纵深方向">第三阶段：纵深方向<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#第三阶段纵深方向" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>基础打好了，根据你的项目选一个方向深挖。</p>
<h4 id="方向-aagentic-workflow--context-engineering">方向 A：Agentic Workflow / Context Engineering<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#方向-aagentic-workflow--context-engineering" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h4>
<p>从”写一段固定的检索代码”变成”设计一个能自己做检索决策的 Agent”。</p>
<ul>
<li>检索变成 Agent 的工具调用：搜几轮、换关键词、追线索、判断什么时候该停止</li>
<li>Multi-step retrieval：先检索概览，再根据概览细化查询</li>
<li>Tool use + RAG：Agent 自己决定用哪个知识库、要不要搜索、要不要调 API</li>
<li>长上下文信息密度管理：context window 在变大，但塞太多不相关信息会稀释答案质量</li>
</ul>
<p>以我的 wiki 问答系统为例：用户问”无常和投资周期有什么关系”，Agent 要决定——先查哲学分区的无常概念，再查投资分区的周期理论，然后查有没有现成的跨域对比页面。每一步都可能需要换关键词、扩大检索范围、或者判断”够了，可以生成回答了”。</p>
<h4 id="方向-b数据治理与权限控制">方向 B：数据治理与权限控制<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#方向-b数据治理与权限控制" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h4>
<p>企业场景下这个能力直接决定系统敢不敢上线。</p>
<ul>
<li>RBAC/ABAC 访问控制模型</li>
<li>向量检索层的 metadata 预过滤</li>
<li>多租户场景下的数据隔离</li>
<li>审计日志和合规追溯</li>
</ul>
<p>适合 ToB 业务或有合规要求的场景。</p>
<h4 id="方向-c评估体系专家">方向 C：评估体系专家<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#方向-c评估体系专家" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h4>
<p>第二阶段继续深化，成为”AI 系统质量”方向的专家。不只 RAG 评估，而是所有 LLM 应用的评测方法论。通用性最强，迁移成本最低。</p>
<h2 id="实战项目wiki-问答系统">实战项目：Wiki 问答系统<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#实战项目wiki-问答系统" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>拿自己的 Obsidian wiki 做实战项目。63 个页面，四个领域（AI、投资、哲学、运动），有 wikilink 交叉引用，有分层结构。数据量适中，内容熟悉，能快速判断检索质量好坏。</p>
<pre><code>阶段一 → Wiki RAG Pipeline
├── 数据源：63 个 wiki Markdown 页面
├── Chunking：按 section 切（每个 ## 块为一个 chunk）
├── Embedding：BGE-M3（中英混合内容）
├── 检索：Hybrid Search（向量 + BM25）
├── Rerank：cross-encoder
└── 生成：基于检索片段 + 页面 wikilink 上下文生成回答

阶段二 → 加评估层
├── 测试集：手写 30 个跨领域问题 + 预期相关页面
├── 指标：检索命中率 + 回答 faithfulness + wikilink 覆盖率
└── 监控：回答质量主观评分（1-5）

阶段三 → Agentic 升级
├── 简单事实查询 → 单次检索直接回答
├── 跨领域问题 → Agent 多步检索，先查一个领域再追线索到另一个
├── 概念对比 → Agent 主动查找 comparison 类页面
└── 反馈闭环 → 用户修正的答案回流为新的知识条目
</code></pre>
<p>这个项目的好处：做完之后 wiki 真的能用了，输入问题就能检索知识，比手动翻目录快得多。学以致用。</p>
<h2 id="学习资源">学习资源<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#学习资源" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>按优先级排：</p>
<p><strong>基础概念：</strong></p>
<ul>
<li><a href="https://python.langchain.com/docs/tutorials/rag/" class="external">LangChain RAG 从零到一<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a>（官方 tutorial，概念清晰）</li>
<li><a href="https://docs.llamaindex.ai/" class="external">LlamaIndex 官方文档<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a>（比 LangChain 更聚焦 RAG 场景）</li>
<li>Pinecone 的 <a href="https://www.pinecone.io/learn/" class="external">Learning Center<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a>（向量数据库基础 + RAG 模式）</li>
</ul>
<p><strong>评估体系：</strong></p>
<ul>
<li><a href="https://docs.ragas.io/" class="external">Ragas 文档<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a>（最成熟的 RAG 评估框架）</li>
<li><a href="https://www.trulens.org/" class="external">TruLens<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a>（RAG 三元组评估：context relevance, groundedness, answer relevance）</li>
</ul>
<p><strong>Agentic RAG：</strong></p>
<ul>
<li>LangGraph 的 <a href="https://langchain-ai.github.io/langgraph/tutorials/rag/langgraph_agentic_rag/" class="external">Agentic RAG 示例<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a></li>
<li><a href="https://www.anthropic.com/research/building-effective-agents" class="external">Contextual Retrieval<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a>（Anthropic 的方案，contextual chunk 提升检索质量）</li>
</ul>
<p><strong>中文 RAG 实战：</strong></p>
<ul>
<li>BGE 系列模型（BAAI 出的中文 embedding，开源好用）</li>
<li><a href="https://www.trychroma.com/" class="external">Chroma<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> / <a href="https://milvus.io/" class="external">Milvus<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> 向量数据库选型</li>
</ul>
<h2 id="几个坑提前知道">几个坑提前知道<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#几个坑提前知道" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<ol>
<li><strong>Chunk size 不是调参游戏。</strong> 50 tokens 和 500 tokens 的差距是文档结构决定的。结构化文档按结构切，自由文本按语义切，别迷信固定窗口。</li>
<li><strong>Embedding 模型的选择对中文场景影响巨大。</strong> 用英文模型跑中文，检索质量直接拉胯。BGE-M3 或 GTE-Qwen2 是目前中文场景比较好的选择。</li>
<li><strong>评估应该在搭系统之前做。</strong> 先定义”好的回答长什么样”，再搭系统。不然搭完了没法判断改好了还是改差了。</li>
<li><strong>平台化是趋势但覆盖不了所有场景。</strong> OpenAI File Search 能搞定 80% 的情况，多租户权限、复杂 Agent 编排、评估体系这些，还得自己来。</li>
</ol>
<h2 id="我的策略">我的策略<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#我的策略" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>用 4-6 周把三个阶段跑完，基础不恋战，重点放在评估和 Agent 方向。Wiki 问答系统是最好的实战场地——做完直接能用到自己的知识管理流程里。</p>
<p>RAG 不会长期作为一个独立技术存在，它会变成 AI 工程的基础能力。但”懂 RAG”的含义在快速变化：两年前是”会搭 pipeline”，现在是”懂评估、能做 Agent 编排、理解数据治理”。再往后，可能所有 RAG 都是 Agentic 的，那时候比的就不是”会不会 RAG”，而是”能不能设计出让 Agent 在正确时机获取正确信息的系统”。</p> ]]></description>
    <pubDate>Wed, 06 May 2026 16:00:00 GMT</pubDate>
  </item><item>
    <title>腾讯控股深度价值分析：470港元是否击球区</title>
    <link>https://jiachen.lol/%E6%8A%95%E8%B5%84/34ad1567</link>
    <guid>https://jiachen.lol/%E6%8A%95%E8%B5%84/34ad1567</guid>
    <description><![CDATA[ <h1 id="腾讯控股深度价值分析">腾讯控股深度价值分析<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#腾讯控股深度价值分析" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h1>
<blockquote>
<p>腾讯从52周高点683港元跌到470，回撤31%。这篇文章不是要告诉你”买入”或”卖出”，而是把几种估值方法算清楚，你自己判断。</p>
</blockquote>
<h2 id="一核心财务数据2025全年">一、核心财务数据（2025全年）<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#一核心财务数据2025全年" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>

































































<table><thead><tr><th>指标</th><th>2025</th><th>2024</th><th>同比</th></tr></thead><tbody><tr><td>总营收</td><td>7,518亿</td><td>6,602亿</td><td>+14%</td></tr><tr><td>IFRS归母净利润</td><td>2,248亿</td><td>1,938亿</td><td>+16%</td></tr><tr><td>Non-IFRS归母净利润</td><td>2,596亿</td><td>2,220亿</td><td>+17%</td></tr><tr><td>毛利率</td><td>56%</td><td>53%</td><td>+3pct</td></tr><tr><td>经营现金流</td><td>3,031亿</td><td>—</td><td>—</td></tr><tr><td>自由现金流</td><td>1,826亿</td><td>1,548亿</td><td>+18%</td></tr><tr><td>Q4资本开支</td><td>224亿</td><td>—</td><td>主要投AI</td></tr><tr><td>现金净额</td><td>1,071亿</td><td>1,024亿</td><td>+47亿</td></tr><tr><td>总股本</td><td>~91.2亿股</td><td>~93.7亿股</td><td>回购注销1.53亿股</td></tr></tbody></table>
<h3 id="分部收入">分部收入<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#分部收入" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>









































<table><thead><tr><th>业务</th><th>2025收入</th><th>占比</th><th>同比</th></tr></thead><tbody><tr><td>本土游戏</td><td>1,642亿</td><td>22%</td><td>+18%</td></tr><tr><td>国际市场游戏</td><td>774亿</td><td>10%</td><td>+33%</td></tr><tr><td>社交网络</td><td>1,277亿</td><td>17%</td><td>+5%</td></tr><tr><td>营销服务（广告）</td><td>1,450亿</td><td>19%</td><td>+19%</td></tr><tr><td>金融科技+企业服务</td><td>2,294亿</td><td>31%</td><td>+8%</td></tr></tbody></table>
<p>几个值得注意的点：</p>
<ul>
<li><strong>游戏出海加速</strong>。国际市场游戏首次年入超100亿美元，增速33%远超本土18%。这不是偶然，Supercell、Riot持续产出，叠加新兴市场渗透。</li>
<li><strong>广告是增速最稳的板块之一</strong>，19%的增速主要来自视频号。视频号广告加载率还很低，天花板还在上面。</li>
<li><strong>金融科技增速放缓到8%</strong>，但腾讯云在这个板块里实现了规模化盈利，AI相关云服务需求上升是增量。</li>
</ul>
<h3 id="股东回报">股东回报<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#股东回报" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>2025年回购约800亿港元（1.534亿股注销），末期股息5.30港元/股（+18%）。2024-2025两年累计回购1,920亿港元，注销约4.6亿股。管理层表态2026年回购可能低于800亿，因为AI投入需要资本，同时提高现金分红。</p>
<h2 id="二投资组合关键项">二、投资组合（关键项）<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#二投资组合关键项" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>腾讯的估值绕不过投资组合。</p>

























<table><thead><tr><th>项目</th><th>金额</th></tr></thead><tbody><tr><td>上市投资公司权益公允价值</td><td>6,727亿</td></tr><tr><td>对联营公司投资（权益法账面值）</td><td>3,424亿</td></tr><tr><td>其中：联营公司上市部分公允价值</td><td>3,493亿</td></tr><tr><td>非上市投资公司权益账面价值</td><td>3,631亿</td></tr></tbody></table>
<p>一个有意思的变化：联营公司账面值（3,424亿）和公允价值（3,493亿）差距只有69亿（不到2%）。2021年峰值时这个差距非常大，因为京东等持仓的市值远超账面值。后来通过实物分派京东（~130亿美元）和美团（~200亿美元），加上市场估值收缩，差距基本消失了。</p>
<h2 id="三多方法估值分析">三、多方法估值分析<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#三多方法估值分析" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>当前股价470港元，总股本91.2亿股。港元兑人民币约0.93。</p>
<p><strong>总市值</strong> = 470 × 91.2亿 ÷ 0.93 ≈ <strong>46,097亿港元 ≈ 42,870亿人民币</strong></p>
<h3 id="31-pe估值">3.1 PE估值<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#31-pe估值" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p><strong>IFRS PE</strong> = 42,870 ÷ 2,248 = <strong>19.1x</strong></p>
<p><strong>Non-IFRS PE</strong> = 42,870 ÷ 2,596 = <strong>16.5x</strong></p>
<p><strong>Forward PE</strong>（2026E Non-IFRS净利 <del>2,850亿，增速</del>10%）= 42,870 ÷ 2,850 = <strong>15.0x</strong></p>

























<table><thead><tr><th>场景</th><th>PE倍数</th><th>对应股价</th></tr></thead><tbody><tr><td>悲观（PE 14x）</td><td>14x Non-IFRS</td><td>~399港元</td></tr><tr><td>中性（PE 18x）</td><td>18x Non-IFRS</td><td>~513港元</td></tr><tr><td>乐观（PE 22x）</td><td>22x Non-IFRS</td><td>~627港元</td></tr></tbody></table>
<p>历史分位：Non-IFRS PE 16.5x处于10年约<strong>17%分位</strong>。5年平均PE约21x，当前折价约21%。</p>
<h3 id="32-pb估值">3.2 PB估值<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#32-pb估值" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p><strong>PB</strong> = 42,870 ÷ 净资产（约12,800亿）= <strong>3.3x</strong></p>
<p>10年中位数PB约6.0x，当前低于中位数44%。但腾讯是轻资产公司，PB意义有限，主要看PE和现金流。</p>
<h3 id="33-sotp分部估值">3.3 SOTP分部估值<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#33-sotp分部估值" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>

































































<table><thead><tr><th>业务板块</th><th>2025收入</th><th>适用倍数</th><th>板块价值</th></tr></thead><tbody><tr><td>游戏（本土+海外）2,416亿</td><td>—</td><td>PS 5.5x</td><td>~13,288亿</td></tr><tr><td>社交网络 1,277亿</td><td>—</td><td>PS 4x</td><td>~5,108亿</td></tr><tr><td>营销服务 1,450亿</td><td>—</td><td>PS 6x</td><td>~8,700亿</td></tr><tr><td>金融科技+企业服务 2,294亿</td><td>—</td><td>PS 4.5x</td><td>~10,323亿</td></tr><tr><td>投资组合（上市打折）</td><td>—</td><td>0.8x</td><td>~5,382亿</td></tr><tr><td>投资组合（非上市打折）</td><td>—</td><td>0.6x</td><td>~2,179亿</td></tr><tr><td>现金净额</td><td>—</td><td>1x</td><td>~1,071亿</td></tr><tr><td><strong>合计</strong></td><td></td><td></td><td><strong>~46,051亿</strong></td></tr><tr><td><strong>每股价值</strong></td><td></td><td></td><td><strong>~505港元</strong></td></tr></tbody></table>
<p>中性SOTP估值约505港元，当前470有约7%的安全边际。</p>
<h3 id="34-投资组合扣除法">3.4 投资组合扣除法<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#34-投资组合扣除法" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>这个方法最能反映腾讯”主营业务”的真实估值。</p>
<pre><code>总市值：约 42,870 亿人民币
上市投资（打折后）：6,727 × 0.8 = 5,382 亿
非上市投资（打折后）：3,631 × 0.6 = 2,179 亿
投资组合合计（打折后）：7,561 亿
净现金：1,071 亿
主营市值 = 42,870 - 7,561 - 1,071 = 34,238 亿
主营 PE = 34,238 ÷ 2,596 = 13.2x
</code></pre>
<p><strong>主营PE 13.2倍</strong>。一个年增速17%、自由现金流1,826亿的公司，主营PE只有13倍。这个数字比表面看到的16.5倍便宜很多。</p>
<h3 id="35-dcf自由现金流折现">3.5 DCF自由现金流折现<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#35-dcf自由现金流折现" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<pre><code>Base Year FCF: 1,826 亿（2025年）
总股本: 91.2 亿股
净负债: -1,071 亿（现金净额为正）
</code></pre>
<p><strong>假设：</strong></p>
<ul>
<li>未来5年FCF增速：10%（保守，考虑AI投入期CapEx上升）</li>
<li>永续增长率：3%</li>
<li>WACC：10%</li>
</ul>













































































<table><thead><tr><th>年份</th><th>FCF</th><th>折现因子</th><th>现值</th></tr></thead><tbody><tr><td>2026</td><td>2,009</td><td>0.909</td><td>1,826</td></tr><tr><td>2027</td><td>2,210</td><td>0.826</td><td>1,826</td></tr><tr><td>2028</td><td>2,431</td><td>0.751</td><td>1,826</td></tr><tr><td>2029</td><td>2,674</td><td>0.683</td><td>1,826</td></tr><tr><td>2030</td><td>2,941</td><td>0.621</td><td>1,826</td></tr><tr><td>5年现值合计</td><td></td><td></td><td><strong>9,130</strong></td></tr><tr><td>终值（TV）</td><td></td><td></td><td>38,043 → 现值 23,621</td></tr><tr><td>企业价值</td><td></td><td></td><td><strong>32,751</strong></td></tr><tr><td>减净现金</td><td></td><td></td><td>-1,071</td></tr><tr><td>股权价值</td><td></td><td></td><td><strong>31,680</strong></td></tr><tr><td>每股价值</td><td></td><td></td><td><strong>347港元 ÷ 0.93 = ~373港元</strong></td></tr></tbody></table>
<p>WACC 10%偏保守。敏感性分析：</p>









































<table><thead><tr><th>WACC\永续</th><th>2%</th><th>3%</th><th>4%</th></tr></thead><tbody><tr><td>8%</td><td>536</td><td>598</td><td>682</td></tr><tr><td>9%</td><td>439</td><td>484</td><td>543</td></tr><tr><td>10%</td><td>366</td><td>399</td><td>441</td></tr><tr><td>11%</td><td>310</td><td>335</td><td>367</td></tr><tr><td>12%</td><td>267</td><td>287</td><td>311</td></tr></tbody></table>
<p>中性场景（WACC 9%、永续3%）对应 <strong>484港元</strong>。当前470略低于这个值。</p>
<h3 id="36-fcf-yield">3.6 FCF Yield<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#36-fcf-yield" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<pre><code>FCF Yield = 1,826 ÷ 42,870 = 4.3%
</code></pre>
<p>中国10年期国债收益率约1.7%。FCF Yield高出2.6个百分点。一般FCF Yield > 国债+3%（即4.7%）算有吸引力，4.3%<strong>接近但未到</strong>。</p>
<p>如果用投资组合扣除后的主营市值算：</p>
<pre><code>主营 FCF Yield = 1,826 ÷ 34,238 = 5.3%
</code></pre>
<p>5.3%超过国债+3%的门槛，<strong>有吸引力</strong>。</p>
<h3 id="37-peg">3.7 PEG<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#37-peg" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<pre><code>Forward PE ≈ 15.0x
预期3年增速 ≈ 10-12%
PEG = 15 / 11 ≈ 1.36
</code></pre>
<p>PEG略高于1，不便宜但不算贵。腾讯不是高速成长股了，PEG参考意义下降。</p>
<h3 id="38-估值汇总">3.8 估值汇总<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#38-估值汇总" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>















































<table><thead><tr><th>方法</th><th>悲观</th><th>中性</th><th>乐观</th></tr></thead><tbody><tr><td>PE估值</td><td>399</td><td>513</td><td>627</td></tr><tr><td>SOTP</td><td>435</td><td>505</td><td>575</td></tr><tr><td>投资组合扣除法（反推股价）</td><td>399</td><td>470</td><td>555</td></tr><tr><td>DCF</td><td>399</td><td>484</td><td>598</td></tr><tr><td>FCF Yield反推（yield 5%→4%）</td><td>402</td><td>470</td><td>565</td></tr><tr><td><strong>综合区间</strong></td><td><strong>~400</strong></td><td><strong>~490</strong></td><td><strong>~590</strong></td></tr></tbody></table>
<p>当前470港元大致在中性偏下的位置。</p>
<h2 id="四护城河">四、护城河<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#四护城河" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>腾讯的护城河不是一个点，是一套系统：</p>
<p>🧱 <strong>微信超级入口</strong>。13亿+月活，用户每天打开的次数最多的App。几乎所有新业态（支付、视频号、小程序）都可以在微信里长出来，收一道”过路费”。</p>
<p>🎮 <strong>游戏IP+发行能力</strong>。王者荣耀、和平精英是现金牛，Supercell和Riot提供海外管线。游戏的生命周期远超市场预期，头部游戏可以活5-10年。</p>
<p>📱 <strong>社交网络效应</strong>。用户在微信/QQ上的关系链是最大壁垒，迁移成本极高。</p>
<p>📊 <strong>数据+AI飞轮</strong>。广告精准投放、游戏内容生产、云服务，AI正在每个业务板块里提效。</p>
<p>💰 <strong>资本配置能力</strong>。两年1,920亿港元回购+实物分派京东美团，管理层用行动证明愿意把现金还给股东。</p>
<h3 id="同行对比">同行对比<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#同行对比" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>









































<table><thead><tr><th>公司</th><th>PE (TTM)</th><th>Forward PE</th><th>利润增速</th></tr></thead><tbody><tr><td>腾讯（Non-IFRS）</td><td>16.5x</td><td>15.0x</td><td>~17%</td></tr><tr><td>阿里巴巴</td><td>24-26x</td><td>~17.7x</td><td>受一次性影响</td></tr><tr><td>网易</td><td>16.1x</td><td>~14x</td><td>低双位数</td></tr><tr><td>Meta</td><td>21-22x</td><td>~18-22x</td><td>~20%+</td></tr><tr><td>谷歌</td><td>29x</td><td>~27.5x</td><td>~15-20%</td></tr></tbody></table>
<p>腾讯Non-IFRS PE在同行里几乎最低，但增速并不差。对标Meta和谷歌，腾讯有明显的估值折价。</p>
<h2 id="五风险与催化剂">五、风险与催化剂<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#五风险与催化剂" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="风险">风险<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#风险" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>



































<table><thead><tr><th>风险</th><th>严重程度</th><th>说明</th></tr></thead><tbody><tr><td>AI投入回报不及预期</td><td>⭐⭐⭐</td><td>2025Q4 CapEx 224亿，2026年还要加。如果AI变现路径不清晰，利润增速会被拖慢</td></tr><tr><td>游戏监管</td><td>⭐⭐</td><td>版号审批、未成年人防沉迷政策持续收紧</td></tr><tr><td>宏观消费疲软</td><td>⭐⭐⭐</td><td>广告和支付都跟消费景气度挂钩</td></tr><tr><td>地缘政治</td><td>⭐⭐</td><td>中美关系影响海外游戏和投资组合估值</td></tr><tr><td>竞争格局</td><td>⭐⭐</td><td>字节跳动在广告和游戏领域持续施压</td></tr></tbody></table>
<h3 id="催化剂">催化剂<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#催化剂" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>



































<table><thead><tr><th>催化剂</th><th>时间</th><th>影响</th></tr></thead><tbody><tr><td>2026Q1财报（5月13日）</td><td>近期</td><td>预期营收+11%，Non-IFRS净利+9%，如果超预期会修正估值</td></tr><tr><td>混元大模型3.0发布</td><td>2026H1</td><td>AI能力升级，可能带动云业务增速</td></tr><tr><td>视频号广告加载率提升</td><td>持续</td><td>当前加载率仍低，是广告板块主要增量</td></tr><tr><td>回购继续</td><td>全年</td><td>即便低于800亿，持续注销仍推高EPS</td></tr><tr><td>新游管线</td><td>2026</td><td>多款新游上线，海外市场增量</td></tr></tbody></table>
<h2 id="六击球区判断">六、击球区判断<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#六击球区判断" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="综合评估">综合评估<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#综合评估" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>





































<table><thead><tr><th>维度</th><th>评估</th></tr></thead><tbody><tr><td>估值分位</td><td>Non-IFRS PE 16.5x，10年17%分位，<strong>便宜</strong></td></tr><tr><td>主营PE</td><td>扣除投资组合后13.2x，<strong>很便宜</strong></td></tr><tr><td>股价位置</td><td>距52周高点-31%，接近52周低点</td></tr><tr><td>分析师共识</td><td>几乎100%看多，平均目标价716港元</td></tr><tr><td>FCF Yield</td><td>4.3%（总市值）/ 5.3%（主营市值），<strong>接近有吸引力</strong></td></tr><tr><td>增速</td><td>双位数稳定增长，利润增速>营收增速</td></tr><tr><td>管理层</td><td>回购+分红执行到位，资本配置框架清晰</td></tr></tbody></table>
<h3 id="结论">结论<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#结论" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>470港元<strong>在击球区边缘，偏下沿</strong>。</p>
<p>中性估值区间约490港元，当前价格有约4%的安全边际。如果市场继续恐慌（比如AI投入超预期拖利润、宏观进一步走弱），可能跌到400-420区间，那是更确定的击球区。</p>
<p>但话说回来，“等更低”是价值投资者最常见的心理陷阱。一家Non-IFRS PE 16.5倍（主营13.2倍）、年增速17%、FCF 1,826亿的公司，在470买入长期不会亏大钱。</p>
<h3 id="参考建仓方案">参考建仓方案<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#参考建仓方案" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>



































<table><thead><tr><th>阶段</th><th>价格区间</th><th>仓位</th><th>逻辑</th></tr></thead><tbody><tr><td>第一笔</td><td>460-480</td><td>1/3</td><td>当前位置，中性偏下</td></tr><tr><td>第二笔</td><td>420-440</td><td>1/3</td><td>如果回调到悲观区间</td></tr><tr><td>第三笔</td><td>380-400</td><td>1/3</td><td>极端低估，历史上罕见</td></tr><tr><td>止损参考</td><td>350以下</td><td>—</td><td>基本面恶化的信号</td></tr></tbody></table>
<p>注意：5月13日Q1财报是一个关键节点。如果数据超预期，第一笔可能就是最低点；如果不及预期，可能很快到第二笔的位置。</p>
<hr>
<p><em>数据来源：腾讯2025年年报、雪球、GuruFocus、Investing.com、财联社、证券时报。数据截止2026年5月7日。</em></p> ]]></description>
    <pubDate>Wed, 06 May 2026 16:00:00 GMT</pubDate>
  </item><item>
    <title>Hermes Agent vs OpenClaw 记忆模块深度对比</title>
    <link>https://jiachen.lol/%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%B4%A2/cc5794c2</link>
    <guid>https://jiachen.lol/%E6%8A%80%E6%9C%AF%E6%8E%A2%E7%B4%A2/cc5794c2</guid>
    <description><![CDATA[ <h1 id="hermes-agent-vs-openclaw-记忆模块深度对比">Hermes Agent vs OpenClaw 记忆模块深度对比<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#hermes-agent-vs-openclaw-记忆模块深度对比" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h1>
<blockquote>
<p>两个 Agent 都用纯文本文件做记忆，都不依赖向量数据库。但冻结注入 vs 实时注入、硬上限 vs 无上限、fork 子 Agent review vs 手动 skill，每个差异背后都是不同的工程取舍。</p>
</blockquote>
<hr>
<h2 id="一记忆系统的核心矛盾">一、记忆系统的核心矛盾<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#一记忆系统的核心矛盾" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>所有 LLM 都是无状态的。每次 API 调用，模型从空白开始，看到的只有你塞进去的 token。所谓的”记忆”——用户偏好、上下文、跨 session 知识——全靠 Agent 框架自己在调用之间拼装。</p>
<p>这就引出了三个要回答的问题：</p>
<ol>
<li><strong>存什么？</strong> 哪些东西值得记住，哪些该忘掉</li>
<li><strong>怎么存？</strong> 文件、数据库、向量，还是混合</li>
<li><strong>怎么喂？</strong> 什么时候注入 context、什么时候检索、什么时候压缩</li>
</ol>
<p>Hermes Agent 和 OpenClaw 对这三个问题的答案完全不同。</p>
<hr>
<h2 id="二概览">二、概览<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#二概览" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>

































































<table><thead><tr><th>维度</th><th>Hermes Agent</th><th>OpenClaw</th></tr></thead><tbody><tr><td>存储介质</td><td>纯文本文件（MEMORY.md + USER.md）+ SQLite + FTS5</td><td>纯文本文件（MEMORY.md）+ JSONL + SQLite</td></tr><tr><td>人格分层</td><td>SOUL.md 单层合并</td><td>SOUL.md → IDENTITY.md → USER.md 三层分离</td></tr><tr><td>注入方式</td><td>冻结注入 system prompt（整个 session 不变）</td><td>每轮重读重注入</td></tr><tr><td>Prefix Cache</td><td>✅ 全程命中</td><td>❌ 每轮破缓存</td></tr><tr><td>字符上限</td><td>硬上限 2200（MEMORY.md）+ 1375（USER.md）</td><td>无硬上限</td></tr><tr><td>mid-session 写入</td><td>延迟生效（下个 session）</td><td>即时生效（下一轮）</td></tr><tr><td>外部 Provider</td><td>插件架构（Honcho/Mem0/Holographic 等）</td><td>无官方插件机制</td></tr><tr><td>Skill 管理</td><td>fork 子 Agent 自动收集</td><td>手动 skill 目录</td></tr><tr><td>历史检索</td><td>session_search（FTS5 全文搜索）</td><td>无内置</td></tr><tr><td>压缩策略</td><td>五阶段渐进压缩，累积摘要</td><td>总结后删除原文</td></tr><tr><td>可调试性</td><td>文件直读，git 追踪</td><td>检索管线黑盒</td></tr></tbody></table>
<hr>
<h2 id="三核心差异逐层拆解">三、核心差异逐层拆解<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#三核心差异逐层拆解" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="31-冻结注入-vs-实时注入">3.1 冻结注入 vs 实时注入<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#31-冻结注入-vs-实时注入" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>这是两个框架最本质的差异。</p>
<p><strong>Hermes 的冻结注入：</strong></p>
<pre><code>Session 开始:
  → 读 MEMORY.md + USER.md 全文
  → 制作"快照"注入 system prompt
  → 首次 API 调用 → 建立 KV Cache（Prefix Cache）

对话进行中（system prompt 不变）:
  → 每次 API 调用命中 KV Cache ⚡

mid-session 写入:
  → 文件已更新
  → 但 system prompt 里的快照不变

下个 Session:
  → 重新读取（含新内容）
  → 制作新快照，重建 KV Cache
</code></pre>
<p>设计逻辑：<strong>性能优先，延迟生效</strong>。system prompt 不变才能保住 prefix cache，省下 80%+ 的输入 token 重计算成本。</p>
<p><strong>OpenClaw 的实时注入：</strong></p>
<pre><code>每轮对话:
  → 重读 MEMORY.md
  → 重注入 context

写入时:
  → 文件更新
  → 下一轮直接生效
</code></pre>
<p>设计逻辑：<strong>即时感知优先</strong>。写入即生效，但代价是每轮 system prompt 变化 → Prefix Cache 完全失效。</p>
<p><strong>实际影响：</strong></p>
<p>对于一个 24/7 运行的 Agent，每天几十到几百次 API 调用，每轮破 cache 的额外累积成本很大。Anthropic 的 Prefix Cache 定价是缓存命中输入 token 打 90% 折扣——这意味着 OpenClaw 每轮都在付全额。</p>
<p>但这个取舍不是单方面的好或坏。对于 Cursor 这种交互式 IDE 插件，用户期望写完就生效，延迟一轮会感觉很蠢。对于后台运行的 agent，延迟一轮可以接受，省钱更重要。</p>
<h3 id="32-记忆容量管理">3.2 记忆容量管理<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#32-记忆容量管理" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p><strong>Hermes 的硬上限：</strong></p>




















<table><thead><tr><th>文件</th><th>上限</th><th>用途</th></tr></thead><tbody><tr><td>MEMORY.md</td><td>2200 字符</td><td>Agent 的环境/项目事实笔记</td></tr><tr><td>USER.md</td><td>1375 字符</td><td>用户画像、偏好</td></tr></tbody></table>
<p>为什么要设上限？</p>
<p>正常情况下，2000 tokens 的记忆内容中，每条约占 0.26% 的注意力权重。膨胀到 5000 tokens 后，每条只剩 0.02%。上限就是一道硬约束，迫使 Agent 只保留最有价值的信息。超过上限时触发压缩，优先保留用户偏好和环境事实。</p>
<p>上限不是随便定的。2200 字符刚好能装 15-20 条记忆条目，每条约 100-150 字——够一个 session 用。1375 字符也是一个精炼的用户快照，快速加载。</p>
<p><strong>OpenClaw 的无上限：</strong></p>
<p>没有硬性容量限制。Agent 自己决定写什么、删什么。</p>
<p>理论上更灵活——你可以记住更多东西。但实践中暴露的问题：记忆膨胀到几千甚至上万字符后，注意力稀释严重。LLM 的压缩行为不可预测，你不知道它在写了很多行后，会去掉哪些。</p>
<p>Nishant Soni 那篇《I’ve Seen a Thousand OpenClaw Deploys》的 HN 文章里提到：OpenClaw 的 MEMORY.md 在 context 溢出时可能被压缩，而且 LLM 做压缩时可能会删除你认为重要的信息。你都不知道它丢了什么。</p>
<h3 id="33-memoryprovider-插件架构">3.3 MemoryProvider 插件架构<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#33-memoryprovider-插件架构" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p><strong>Hermes 的插件体系：</strong></p>
<pre><code>MemoryProvider（ABC）
├── initialize()        → 连接、创建资源
├── system_prompt_block() → 注入 system prompt 的静态文本
├── prefetch()          → 每轮对话前的 recall
├── sync_turn()         → 每轮对话后的写入
├── get_tool_schemas()  → 工具 schema
├── handle_tool_call()  → 工具调用分发
├── shutdown()          → 清理退出
└── 可选 hooks:
    ├── on_turn_start()
    ├── on_session_end()
    ├── on_pre_compress()
    ├── on_memory_write()
    └── on_delegation()
</code></pre>
<p>内置 BuiltinMemoryProvider 始终激活（MEMORY.md + USER.md）。可以挂载一个外部 provider——Honcho、Hindsight、Mem0、Holographic、Supermemory、RetainDB、OpenViking 均有官方插件。外部 provider 是<strong>增量</strong>的，不会取代内置的。</p>
<p>只允许一个外部 provider 的原因：避免 tool schema 膨胀和记忆后端冲突。</p>
<p><strong>OpenClaw：</strong> 无官方插件机制。社区有人用 Mem0 等外部工具补强，但需要自己写胶水代码。</p>
<h3 id="34-skill-自动收集">3.4 Skill 自动收集<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#34-skill-自动收集" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p><strong>Hermes 的闭环系统：</strong></p>
<pre><code>复杂任务完成（工具调用 ≥ 10 次）
  → 返回最终回答给用户
  → 后台 fork 子 Agent
  → 子 Agent 冷启动 Review：
      1. 有试错过程？
      2. 有思路转变？
      3. 用户有特别偏好？
      4. 下次还用得上？
  → 任一回答"是"且无现成 skill → skill_manage(action='create')
  → 有类似 skill 需补充 → skill_manage(action='patch')
  → 不值得 → 跳过
  → 通知用户
</code></pre>
<p>为什么 fork 子 Agent 而不是主 Agent 直接处理？</p>

























<table><thead><tr><th></th><th>主 Agent 直接处理</th><th>fork 子 Agent</th></tr></thead><tbody><tr><td>响应速度</td><td>❌ 用户要等</td><td>✅ 后台静默</td></tr><tr><td>上下文污染</td><td>❌ review 思考污染主对话</td><td>✅ 独立不污染</td></tr><tr><td>判断客观性</td><td>❌ 带任务惯性</td><td>✅ 冷启动旁观者</td></tr></tbody></table>
<p>SKILL.md 文件结构：</p>
<pre><code>~/.hermes/skills/
├── my-skill/
│   ├── SKILL.md          ← 核心文件（触发条件+步骤+避坑）
│   ├── references/       ← 参考资料
│   ├── templates/        ← 模板文件
│   └── scripts/          ← 辅助脚本
└── category-name/
    └── another-skill/
        └── SKILL.md
</code></pre>
<p>安全机制：命名校验（小写+连字符+最长64字符）、大小限制（SKILL.md 最大 100KB）、安全扫描（注入/外泄）、回滚机制、只读保护。</p>
<p><strong>OpenClaw：</strong> 有 skill 目录（<code>~/.openclaw/skills/</code>），但无自动发现机制。需要用户或 Agent 手动创建。没有 review 阶段，不会在任务完成后自动提炼可复用知识。</p>
<h3 id="35-记忆-vs-skill数据模型差异">3.5 记忆 vs Skill：数据模型差异<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#35-记忆-vs-skill数据模型差异" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>













































<table><thead><tr><th>维度</th><th>记忆（MEMORY.md）</th><th>Skill（SKILL.md）</th></tr></thead><tbody><tr><td>存储内容</td><td>事实性信息</td><td>过程性知识</td></tr><tr><td>回答的问题</td><td>”世界是什么样的？"</td><td>"下次怎么干？“</td></tr><tr><td>典型内容</td><td>用户偏好、环境配置、项目状态</td><td>操作步骤、避坑指南、最佳实践</td></tr><tr><td>触发写入</td><td>memory 工具 / 手动</td><td>skill_manage 工具 / nudge</td></tr><tr><td>生效时机</td><td>下个 session</td><td>下个 session（重建索引后）</td></tr><tr><td>更新方式</td><td>追加、替换、删除条目</td><td>create / edit / patch</td></tr><tr><td>组织形式</td><td>两段式（Agent 笔记 + 用户画像）</td><td>分类目录 + 独立 skill 包</td></tr></tbody></table>
<p>两个系统在 Hermes 里的定位：记忆是”事实”（用户喜欢 pnpm），skill 是”过程”（用 pnpm 搭建 monorepo 的步骤）。两者共享同一个 nudge 机制触发，但写入路径和处理逻辑完全分开。</p>
<h3 id="36-对话历史检索">3.6 对话历史检索<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#36-对话历史检索" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p><strong>Hermes：</strong> <code>session_search</code> 工具使用 SQLite FTS5 全文检索。Agent 可以主动搜索过去所有 session——“我们之前讨论过什么什么”——生成摘要后注入当前上下文。用的时候能回忆起来，不用的时候不占空间。</p>
<p>压缩后的子 session 通过 <code>parent_session_id</code> 链回原 session，跨 session 也能追溯到完整对话链。</p>
<p><strong>OpenClaw：</strong> 无内置跨 session 搜索。依赖 MEMORY.md 中的摘要记录。如果 Agent 当时没记，后面就找不到了。</p>
<hr>
<h2 id="四关键设计决策总结">四、关键设计决策总结<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#四关键设计决策总结" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>





















































<table><thead><tr><th>决策</th><th>Hermes 的选择</th><th>OpenClaw 的选择</th><th>本质取舍</th></tr></thead><tbody><tr><td>记忆注入时机</td><td>session 开始冻结</td><td>每轮刷新</td><td>性能 vs 即时性</td></tr><tr><td>记忆容量</td><td>硬上限 2200+1375</td><td>无上限</td><td>精炼 vs 完整</td></tr><tr><td>外部记忆后端</td><td>插件架构 + 单实例</td><td>无插件</td><td>扩展性 vs 简单</td></tr><tr><td>技能管理</td><td>子 Agent 自动收集</td><td>手动</td><td>自动化 vs 可控</td></tr><tr><td>对话历史</td><td>FTS5 持久化 + 搜索</td><td>无内置</td><td>历史可追溯 vs 无额外存储</td></tr><tr><td>人格体系</td><td>单层 SOUL.md</td><td>三层 SOUL/IDENTITY/USER</td><td>简单 vs 分层</td></tr><tr><td>上下文工程</td><td>保 Prefix Cache</td><td>保实时</td><td>成本 vs 响应</td></tr></tbody></table>
<hr>
<h2 id="五适用场景">五、适用场景<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#五适用场景" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p><strong>Hermes 更合适的场景：</strong></p>
<ul>
<li>24/7 后台运行，对成本敏感</li>
<li>需要可靠的跨 session 记忆</li>
<li>工作流固定，需要技能复利累积</li>
<li>用户习惯先思考再做，不要求即时感知</li>
</ul>
<p><strong>OpenClaw 更合适的场景：</strong></p>
<ul>
<li>交互式 IDE 使用，写完就想生效</li>
<li>需要精细的人格分层（多人格切换）</li>
<li>对实现简单性要求高，不关心插件扩展</li>
<li>单 session 为主，跨 session 需求少</li>
</ul>
<p>两个框架在记忆逻辑上的差异，说到底就是一句话：<strong>你是愿意多付一点钱换来即时生效，还是愿意等一轮换来稳定省心。</strong> 没有对错，取决于你的使用模式。</p>
<hr>
<h2 id="参考资料">参考资料<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#参考资料" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<ul>
<li><a href="https://hermes-agent.nousresearch.com/docs/developer-guide/architecture" class="external">Hermes Agent 官方架构文档<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a></li>
<li><a href="https://mranand.substack.com/p/inside-hermes-agent-how-a-self-improving" class="external">Inside Hermes Agent: How a Self-Improving AI Agent Actually Works<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a></li>
<li><a href="https://blog.nishantsoni.com/p/ive-seen-a-thousand-openclaw-deploys" class="external">OpenClaw’s memory is unreliable, and you don’t know when it will break<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a></li>
<li><a href="https://github.com/gluonfield/openclaw" class="external">OpenClaw GitHub<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a></li>
</ul> ]]></description>
    <pubDate>Mon, 27 Apr 2026 16:00:00 GMT</pubDate>
  </item><item>
    <title>中国海洋石油（0883.HK / 600938.SH）价值投资深度分析</title>
    <link>https://jiachen.lol/%E6%8A%95%E8%B5%84/5907af35</link>
    <guid>https://jiachen.lol/%E6%8A%95%E8%B5%84/5907af35</guid>
    <description><![CDATA[ <h1 id="中国海洋石油0883hk--600938sh价值投资深度分析">中国海洋石油（0883.HK / 600938.SH）价值投资深度分析<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#中国海洋石油0883hk--600938sh价值投资深度分析" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h1>
<blockquote>
<p>2026-04-08 | 布伦特约95-110美元/桶 | 港股0883 收盘26.10 HKD | A股600938 约37.57 CNY</p>
</blockquote>
<hr>
<h2 id="一当前宏观局势美伊冲突与石油供应">一、当前宏观局势：美伊冲突与石油供应<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#一当前宏观局势美伊冲突与石油供应" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="11-事件背景">1.1 事件背景<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#11-事件背景" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>2026年2月28日，美国与以色列联合对伊朗发动军事打击，轰炸伊朗军事设施并实施斩首行动。伊朗随后封锁霍尔木兹海峡作为反击。截至4月8日，冲突已持续约40天。</p>
<p>关键事实：</p>
<ul>
<li><strong>霍尔木兹海峡</strong>每天通过约2,000万桶石油，占全球原油贸易量的48%，全球日消费量的20%</li>
<li>伊朗控制海峡通航，对通过船只收取过境费（每艘最高200万美元），并选择性放行——中国、越南、马来西亚、菲律宾的船只优先，美欧关联船只被拦截</li>
<li>3月波斯湾船只通行量暴跌至2月的5%，约400艘大型油气轮滞留在海湾内</li>
<li>4月初通行量小幅回升（4月1日16艘），但仍远低于正常的135艘/天</li>
<li>冲突已外溢：伊朗轰炸沙特、阿联酋、卡塔尔能源设施，以色列突袭伊朗南帕尔斯气田</li>
<li>这四国（伊朗+沙特+阿联酋+卡塔尔）2025年日均产量约1,950万桶</li>
</ul>
<h3 id="12-油价走势">1.2 油价走势<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#12-油价走势" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>








































<table><thead><tr><th>时间</th><th>布伦特原油</th><th>事件</th></tr></thead><tbody><tr><td>2月28日前</td><td>~75美元</td><td>冲突前基线</td></tr><tr><td>3月初</td><td>冲高至100+</td><td>美以打击伊朗</td></tr><tr><td>3月9日</td><td>回落至~80</td><td>特朗普宣称军事行动将结束</td></tr><tr><td>3月18-21日</td><td>回升至100+</td><td>以色列打击伊朗气田，伊朗反击沙特等国</td></tr><tr><td>3月下旬-4月初</td><td>110-123</td><td>霍尔木兹海峡持续封锁，物理溢价</td></tr><tr><td>4月7-8日</td><td>回落至95</td><td>停火谈判信号，特朗普设4月8日最后通牒</td></tr></tbody></table>
<p>现货市场更极端：部分实物原油现货价超过140美元/桶。</p>
<h3 id="13-对中国海油的影响分析">1.3 对中国海油的影响分析<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#13-对中国海油的影响分析" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p><strong>直接影响：</strong></p>
<ul>
<li>中国海油是<strong>中国近海</strong>油气生产商，资产不在中东，不受直接军事打击</li>
<li>霍尔木兹海峡封锁不影响海油的<strong>生产端</strong>——它的油田在渤海、南海、东海</li>
<li>中国作为伊朗优先放行国家，进口原油受影响相对较小</li>
<li>但国际油价上涨直接推高海油实现油价，<strong>利好营收和利润</strong></li>
</ul>
<p><strong>间接影响：</strong></p>
<ul>
<li>如果全球因高油价陷入衰退，石油需求下降，中长期油价可能回落</li>
<li>但达拉斯联储模拟分析：封锁1个季度，全球GDP年率下降2.9%；封锁2个季度，油价升至115美元，全球GDP连续两季负增长</li>
<li>IEA成员国已释放4亿桶战略储备（约全球4天消费量），杯水车薪</li>
</ul>
<p><strong>核心判断：</strong> 短期（3-6个月）油价维持90-110美元高位概率较大。即使停火，能源设施修复需要数月，供应恢复缓慢。中长期（12-24个月）取决于冲突是否结束以及全球需求变化。上海社科院徐明棋的判断：即使停火，油价回到60美元的概率较小，90美元可能是新中枢。</p>
<hr>
<h2 id="二公司基本面5年财务数据">二、公司基本面：5年财务数据<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#二公司基本面5年财务数据" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<p>数据来源：S&#x26;P Global Market Intelligence，单位：亿人民币。</p>
<h3 id="21-利润表">2.1 利润表<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#21-利润表" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>





























































<table><thead><tr><th>指标</th><th>FY2025</th><th>FY2024</th><th>FY2023</th><th>FY2022</th><th>FY2021</th></tr></thead><tbody><tr><td>营业收入</td><td>3,982</td><td>4,205</td><td>4,166</td><td>4,222</td><td>2,461</td></tr><tr><td>营业成本</td><td>1,935</td><td>1,951</td><td>1,088</td><td>889</td><td>446</td></tr><tr><td>毛利润</td><td>2,047</td><td>2,254</td><td>3,079</td><td>3,333</td><td>2,015</td></tr><tr><td>净利润</td><td>1,221</td><td>1,379</td><td>1,238</td><td>1,417</td><td>703</td></tr><tr><td>EPS（元）</td><td>2.57</td><td>2.90</td><td>2.60</td><td>3.03</td><td>1.58</td></tr><tr><td>EBITDA</td><td>2,501</td><td>2,656</td><td>2,344</td><td>2,523</td><td>1,566</td></tr></tbody></table>
<h3 id="22-利润率">2.2 利润率<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#22-利润率" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>













































<table><thead><tr><th>指标</th><th>FY2025</th><th>FY2024</th><th>FY2023</th><th>FY2022</th><th>FY2021</th></tr></thead><tbody><tr><td>毛利率</td><td>51.4%</td><td>53.6%</td><td>73.9%</td><td>78.9%</td><td>81.9%</td></tr><tr><td>净利率</td><td>30.7%</td><td>32.8%</td><td>29.7%</td><td>33.6%</td><td>28.6%</td></tr><tr><td>EBITDA率</td><td>62.8%</td><td>63.2%</td><td>56.3%</td><td>59.8%</td><td>63.6%</td></tr><tr><td>经营利润率</td><td>43.2%</td><td>45.4%</td><td>39.6%</td><td>45.1%</td><td>37.9%</td></tr></tbody></table>
<p>说明：2023年起毛利率大幅下降，主因是石油特别收益金（暴利税）征收和成本上升。但EBITDA率5年稳定在56-63%区间，经营质量未恶化。</p>
<h3 id="23-资产负债表">2.3 资产负债表<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#23-资产负债表" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>





































































<table><thead><tr><th>指标</th><th>FY2025</th><th>FY2024</th><th>FY2023</th><th>FY2022</th><th>FY2021</th></tr></thead><tbody><tr><td>总资产</td><td>10,986</td><td>10,563</td><td>10,056</td><td>9,290</td><td>7,866</td></tr><tr><td>归母净资产</td><td>8,028</td><td>7,475</td><td>6,666</td><td>5,972</td><td>4,809</td></tr><tr><td>总负债</td><td>2,934</td><td>3,068</td><td>3,377</td><td>3,306</td><td>3,046</td></tr><tr><td>有息负债</td><td>698</td><td>919</td><td>1,202</td><td>1,344</td><td>1,351</td></tr><tr><td>现金+短投</td><td>2,407</td><td>2,000</td><td>1,949</td><td>2,096</td><td>1,622</td></tr><tr><td>净现金</td><td>1,709</td><td>1,081</td><td>747</td><td>752</td><td>270</td></tr><tr><td>每股净资产</td><td>16.89</td><td>15.73</td><td>14.01</td><td>12.55</td><td>10.77</td></tr></tbody></table>
<h3 id="24-现金流量表">2.4 现金流量表<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#24-现金流量表" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>





















































<table><thead><tr><th>指标</th><th>FY2025</th><th>FY2024</th><th>FY2023</th><th>FY2022</th><th>FY2021</th></tr></thead><tbody><tr><td>经营现金流</td><td>2,090</td><td>2,209</td><td>2,097</td><td>2,056</td><td>1,479</td></tr><tr><td>资本支出</td><td>-1,116</td><td>-1,234</td><td>-1,209</td><td>-948</td><td>-824</td></tr><tr><td>自由现金流</td><td>975</td><td>975</td><td>889</td><td>1,108</td><td>655</td></tr><tr><td>股息支付</td><td>-604</td><td>-609</td><td>-582</td><td>-774</td><td>-205</td></tr><tr><td>FCF/净利润</td><td>79.9%</td><td>70.7%</td><td>71.8%</td><td>78.2%</td><td>93.1%</td></tr></tbody></table>
<hr>
<h2 id="三核心财务指标计算">三、核心财务指标计算<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#三核心财务指标计算" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="31-roe净资产收益率">3.1 ROE（净资产收益率）<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#31-roe净资产收益率" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>ROE = 归母净利润 / 平均归母净资产</p>









































<table><thead><tr><th>年份</th><th>净利润(亿)</th><th>平均净资产(亿)</th><th>ROE</th></tr></thead><tbody><tr><td>2025</td><td>1,221</td><td>(8,028+7,475)/2 = 7,752</td><td><strong>15.7%</strong></td></tr><tr><td>2024</td><td>1,379</td><td>(7,475+6,666)/2 = 7,071</td><td><strong>19.5%</strong></td></tr><tr><td>2023</td><td>1,238</td><td>(6,666+5,972)/2 = 6,319</td><td><strong>19.6%</strong></td></tr><tr><td>2022</td><td>1,417</td><td>(5,972+4,809)/2 = 5,391</td><td><strong>26.3%</strong></td></tr><tr><td>2021</td><td>703</td><td>(4,809+4,146)/2 = 4,478*</td><td><strong>15.7%</strong></td></tr></tbody></table>
<p>*2021年初净资产取4,146亿（2020年末数据）</p>
<p><strong>5年平均ROE = 19.4%</strong></p>
<p>杜邦分解（2025年）：</p>
<ul>
<li>净利率：30.7%</li>
<li>资产周转率：3,982 / 10,273 = 38.7%</li>
<li>权益乘数：10,986 / 8,028 = 1.37</li>
</ul>
<p>ROE = 30.7% × 38.7% × 1.37 ≈ 16.3%（与实际15.7%差异来自少数股东权益）</p>
<p>结论：ROE主要由净利率驱动，而非杠杆。权益乘数仅1.37，这是低杠杆的高质量盈利。</p>
<h3 id="32-roa总资产收益率">3.2 ROA（总资产收益率）<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#32-roa总资产收益率" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>2025年：1,221 / 10,273 = <strong>11.9%</strong></p>
<h3 id="33-资产负债率">3.3 资产负债率<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#33-资产负债率" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>2025年：2,934 / 10,986 = <strong>26.7%</strong></p>
<p>5年趋势：38.7% → 35.6% → 33.6% → 29.0% → 26.7%，持续下降。</p>
<h3 id="34-净现金市值">3.4 净现金/市值<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#34-净现金市值" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>净现金1,709亿 / 港股市值约4,430亿 = <strong>38.6%</strong></p>
<p>意味着你买港股海油，有接近4成付的是现金。实际油气资产只花了2,721亿。</p>
<hr>
<h2 id="四dcf-估值">四、DCF 估值<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#四dcf-估值" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="41-基础参数">4.1 基础参数<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#41-基础参数" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>

























<table><thead><tr><th>参数</th><th>取值</th><th>说明</th></tr></thead><tbody><tr><td>基准年FCF</td><td>975亿</td><td>2025年自由现金流</td></tr><tr><td>WACC</td><td>9%</td><td>无风险利率3% + β×风险溢价(1.0×6%)</td></tr><tr><td>永续增长率</td><td>2%</td><td>接近长期通胀率</td></tr></tbody></table>
<h3 id="42-情景假设">4.2 情景假设<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#42-情景假设" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p><strong>情景A：基准（中性偏保守）</strong></p>
<ul>
<li>阶段1（2026-2030）：增长3%/年（产量增长7%对冲油价下行）</li>
<li>阶段2（2031-2035）：增长0%</li>
<li>永续增长：2%</li>
</ul>
<p><strong>情景B：悲观</strong></p>
<ul>
<li>阶段1（2026-2030）：增长0%（油价快速回落至60美元）</li>
<li>阶段2（2031-2035）：增长-2%</li>
<li>永续增长：1%</li>
<li>WACC提升至12%（高风险溢价）</li>
</ul>
<p><strong>情景C：乐观（油价高位持续）</strong></p>
<ul>
<li>阶段1（2026-2030）：增长8%/年（美伊冲突持续，油价维持90+）</li>
<li>阶段2（2031-2035）：增长3%</li>
<li>永续增长：2.5%</li>
</ul>
<h3 id="43-情景a-计算">4.3 情景A 计算<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#43-情景a-计算" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p><strong>阶段1现金流（2026-2030）：</strong></p>









































<table><thead><tr><th>年份</th><th>FCF(亿)</th><th>折现因子(1.09)^n</th><th>现值(亿)</th></tr></thead><tbody><tr><td>2026</td><td>975×1.03 = 1,004</td><td>0.9174</td><td>921</td></tr><tr><td>2027</td><td>1,004×1.03 = 1,034</td><td>0.8417</td><td>870</td></tr><tr><td>2028</td><td>1,034×1.03 = 1,065</td><td>0.7722</td><td>822</td></tr><tr><td>2029</td><td>1,065×1.03 = 1,097</td><td>0.7084</td><td>777</td></tr><tr><td>2030</td><td>1,097×1.03 = 1,130</td><td>0.6499</td><td>734</td></tr></tbody></table>
<p>阶段1现值合计：<strong>4,124亿</strong></p>
<p><strong>阶段2现金流（2031-2035）：零增长，每年1,130亿</strong></p>









































<table><thead><tr><th>年份</th><th>FCF(亿)</th><th>折现因子</th><th>现值(亿)</th></tr></thead><tbody><tr><td>2031</td><td>1,130</td><td>0.5963</td><td>674</td></tr><tr><td>2032</td><td>1,130</td><td>0.5470</td><td>618</td></tr><tr><td>2033</td><td>1,130</td><td>0.5019</td><td>567</td></tr><tr><td>2034</td><td>1,130</td><td>0.4604</td><td>520</td></tr><tr><td>2035</td><td>1,130</td><td>0.4224</td><td>477</td></tr></tbody></table>
<p>阶段2现值合计：<strong>2,856亿</strong></p>
<p><strong>永续价值：</strong></p>
<p>TV = 1,130 × (1.02) / (0.09 - 0.02) = 16,466亿</p>
<p>折现到今天：16,466 × 0.4224 = <strong>6,957亿</strong></p>
<p><strong>情景A DCF = 4,124 + 2,856 + 6,957 = 13,937亿</strong></p>
<h3 id="44-情景b-计算悲观">4.4 情景B 计算（悲观）<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#44-情景b-计算悲观" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>WACC=12%，阶段1零增长（每年975亿），阶段2每年-2%递减，永续1%。</p>
<p><strong>阶段1（2026-2030）：</strong></p>









































<table><thead><tr><th>年份</th><th>FCF(亿)</th><th>折现因子(1.12)^n</th><th>现值(亿)</th></tr></thead><tbody><tr><td>2026</td><td>975</td><td>0.8929</td><td>871</td></tr><tr><td>2027</td><td>975</td><td>0.7972</td><td>777</td></tr><tr><td>2028</td><td>975</td><td>0.7118</td><td>694</td></tr><tr><td>2029</td><td>975</td><td>0.6355</td><td>620</td></tr><tr><td>2030</td><td>975</td><td>0.5674</td><td>553</td></tr></tbody></table>
<p>阶段1现值：<strong>3,515亿</strong></p>
<p><strong>阶段2（2031-2035）：每年-2%递减</strong></p>









































<table><thead><tr><th>年份</th><th>FCF(亿)</th><th>折现因子</th><th>现值(亿)</th></tr></thead><tbody><tr><td>2031</td><td>975×0.98=955</td><td>0.5066</td><td>484</td></tr><tr><td>2032</td><td>955×0.98=936</td><td>0.4523</td><td>423</td></tr><tr><td>2033</td><td>936×0.98=918</td><td>0.4039</td><td>371</td></tr><tr><td>2034</td><td>918×0.98=899</td><td>0.3606</td><td>324</td></tr><tr><td>2035</td><td>899×0.98=881</td><td>0.3220</td><td>284</td></tr></tbody></table>
<p>阶段2现值：<strong>1,886亿</strong></p>
<p><strong>永续价值：</strong></p>
<p>TV = 881 × 1.01 / (0.12 - 0.01) = 8,091亿</p>
<p>折现：8,091 × 0.3220 = <strong>2,605亿</strong></p>
<p><strong>情景B DCF = 3,515 + 1,886 + 2,605 = 8,006亿</strong></p>
<h3 id="45-情景c-计算乐观">4.5 情景C 计算（乐观）<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#45-情景c-计算乐观" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>WACC=9%，阶段1增长8%，阶段2增长3%，永续2.5%。</p>
<p><strong>阶段1（2026-2030）：</strong></p>









































<table><thead><tr><th>年份</th><th>FCF(亿)</th><th>折现因子</th><th>现值(亿)</th></tr></thead><tbody><tr><td>2026</td><td>975×1.08=1,053</td><td>0.9174</td><td>966</td></tr><tr><td>2027</td><td>1,053×1.08=1,137</td><td>0.8417</td><td>957</td></tr><tr><td>2028</td><td>1,137×1.08=1,228</td><td>0.7722</td><td>948</td></tr><tr><td>2029</td><td>1,228×1.08=1,326</td><td>0.7084</td><td>940</td></tr><tr><td>2030</td><td>1,326×1.08=1,432</td><td>0.6499</td><td>931</td></tr></tbody></table>
<p>阶段1现值：<strong>4,742亿</strong></p>
<p><strong>阶段2（2031-2035）：增长3%</strong></p>









































<table><thead><tr><th>年份</th><th>FCF(亿)</th><th>折现因子</th><th>现值(亿)</th></tr></thead><tbody><tr><td>2031</td><td>1,432×1.03=1,475</td><td>0.5963</td><td>879</td></tr><tr><td>2032</td><td>1,475×1.03=1,519</td><td>0.5470</td><td>832</td></tr><tr><td>2033</td><td>1,519×1.03=1,565</td><td>0.5019</td><td>785</td></tr><tr><td>2034</td><td>1,565×1.03=1,612</td><td>0.4604</td><td>742</td></tr><tr><td>2035</td><td>1,612×1.03=1,660</td><td>0.4224</td><td>701</td></tr></tbody></table>
<p>阶段2现值：<strong>3,939亿</strong></p>
<p><strong>永续价值：</strong></p>
<p>TV = 1,660 × 1.025 / (0.09 - 0.025) = 26,177亿</p>
<p>折现：26,177 × 0.4224 = <strong>11,056亿</strong></p>
<p><strong>情景C DCF = 4,742 + 3,939 + 11,056 = 19,737亿</strong></p>
<h3 id="46-dcf-估值汇总">4.6 DCF 估值汇总<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#46-dcf-估值汇总" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>





























<table><thead><tr><th>情景</th><th>内在价值(亿)</th><th>对应港股股价(HKD)</th><th>vs 当前26.10</th></tr></thead><tbody><tr><td>悲观（油价崩至60）</td><td>8,006</td><td>47.1</td><td>+80%</td></tr><tr><td>基准</td><td>13,937</td><td>82.0</td><td>+214%</td></tr><tr><td>乐观（油价维持90+）</td><td>19,737</td><td>116.1</td><td>+345%</td></tr></tbody></table>
<p>即使最悲观的情景（WACC 12%、油价持续低迷、负增长），DCF估值仍比当前港股市值高出80%。</p>
<p><strong>注：</strong> 以上计算不含净现金1,709亿（已体现在资产负债表中但未单独加回）。如单独考虑净现金，悲观情景下的下行保护更强。</p>
<hr>
<h2 id="五交叉验证">五、交叉验证<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#五交叉验证" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="51-pe">5.1 PE<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#51-pe" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>

































<table><thead><tr><th>市场</th><th>股价</th><th>2025净利润(亿)</th><th>市值(亿)</th><th>PE</th></tr></thead><tbody><tr><td>港股</td><td>26.10 HKD</td><td>1,221</td><td>~4,430（RMB）</td><td>3.6x（需考虑港币）</td></tr><tr><td>港股（RMB口径）</td><td>—</td><td>1,221</td><td>~4,430</td><td><strong>7.2x</strong></td></tr><tr><td>A股</td><td>37.57 CNY</td><td>1,221</td><td>~17,860</td><td><strong>14.6x</strong></td></tr></tbody></table>
<p>港股PE 7.2x。国际同行Exxon 12-14x，Shell 10-12x。</p>
<h3 id="52-pb">5.2 PB<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#52-pb" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>港股：4,430 / 8,028 = <strong>0.55x</strong> —— 花5毛5买1块钱净资产。</p>
<h3 id="53-fcf-yield">5.3 FCF Yield<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#53-fcf-yield" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>975 / 4,430 = <strong>22.0%</strong></p>
<p>每投入100元，公司当年产生22元自由现金流。</p>
<h3 id="54-股息率">5.4 股息率<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#54-股息率" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>全年股息1.28 HKD / 26.10 HKD = <strong>4.9%</strong></p>
<h3 id="55-evebitda">5.5 EV/EBITDA<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#55-evebitda" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>企业价值 = 市值4,430 - 净现金1,709 + 少数股东 = ~2,800亿</p>
<p>EV/EBITDA = 2,800 / 2,501 = <strong>1.12x</strong></p>
<p>这个数字低得离谱。Exxon的EV/EBITDA是6-7x。</p>
<hr>
<h2 id="六估值矩阵不同油价不同pe">六、估值矩阵：不同油价×不同PE<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#六估值矩阵不同油价不同pe" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>








































<table><thead><tr><th>布伦特油价</th><th>预估净利润(亿)</th><th>港股PE 7x</th><th>港股PE 10x</th><th>港股PE 12x</th></tr></thead><tbody><tr><td>60美元</td><td>~800</td><td>5,600</td><td>8,000</td><td>9,600</td></tr><tr><td>80美元</td><td>~1,100</td><td>7,700</td><td>11,000</td><td>13,200</td></tr><tr><td>95美元（当前）</td><td>~1,400</td><td>9,800</td><td>14,000</td><td>16,800</td></tr><tr><td>110美元</td><td>~1,600</td><td>11,200</td><td>16,000</td><td>19,200</td></tr></tbody></table>
<p>当前港股市值4,430亿。即使油价跌到60美元、只给7x PE，合理市值也有5,600亿，仍有26%上行空间。</p>
<hr>
<h2 id="七风险提示">七、风险提示<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#七风险提示" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<h3 id="71-油价崩跌">7.1 油价崩跌<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#71-油价崩跌" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>最大风险。如果美伊停火、霍尔木兹海峡完全恢复通航、OPEC+增产、全球经济衰退叠加，油价可能快速回落至60美元以下。按60美元测算，净利润降至800亿左右，港股PE升至约5.5x，仍然不贵，但股价可能短期承压。</p>
<h3 id="72-地缘冲突升级">7.2 地缘冲突升级<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#72-地缘冲突升级" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>如果伊朗 Saudi/UAE/Qatar 能源设施遭到更大规模破坏，全球石油供应可能减少1,950万桶/日（占全球20%），油价可能冲高至150-200美元。这短期内利好海油利润，但全球衰退风险急剧上升，需求端可能崩塌，最终反噬油价。</p>
<h3 id="73-能源转型">7.3 能源转型<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#73-能源转型" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>5-10年维度，新能源替代加速。但石油在化工、航空、航运领域的替代远比乘用车难。海油也在布局海上风电。</p>
<h3 id="74-a股估值偏高">7.4 A股估值偏高<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#74-a股估值偏高" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h3>
<p>A股PE 14.6x，理杏仁3年分位点96.97%。如看好海油，港股性价比远优于A股。</p>
<hr>
<h2 id="八结论">八、结论<a role="anchor" aria-hidden tabindex="-1" data-no-popover href="#八结论" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>













































<table><thead><tr><th>指标</th><th>港股0883</th><th>判断标准</th></tr></thead><tbody><tr><td>5年平均ROE</td><td>19.4%</td><td>>15% 优秀</td></tr><tr><td>FCF yield</td><td>22%</td><td>>10% 极低估</td></tr><tr><td>PB</td><td>0.55x</td><td>&#x3C;1.0 深度破净</td></tr><tr><td>PE(TTM)</td><td>7.2x</td><td>&#x3C;10x 低估</td></tr><tr><td>净现金/市值</td><td>38.6%</td><td>安全垫厚</td></tr><tr><td>股息率</td><td>4.9%</td><td>>4% 有吸引力</td></tr><tr><td>DCF悲观估值</td><td>8,006亿</td><td>比当前高80%</td></tr></tbody></table>
<p>数据来源：</p>
<ul>
<li>S&#x26;P Global Market Intelligence（利润表、资产负债表、现金流量表）</li>
<li>上海社科院徐明棋（美伊冲突宏观分析）</li>
<li>Fortune / Bloomberg / Guardian（霍尔木兹海峡通航数据）</li>
<li>Trading Economics（布伦特油价）</li>
<li>理杏仁（A股PE分位点）</li>
<li>华创证券（2026-2028盈利预测）</li>
</ul>
<hr>
<p><em>本文为个人投资分析记录，不构成投资建议。</em></p> ]]></description>
    <pubDate>Mon, 27 Apr 2026 13:23:45 GMT</pubDate>
  </item>
    </channel>
  </rss>