<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://jxtse.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://jxtse.github.io/" rel="alternate" type="text/html" /><updated>2026-10-31T14:16:26+08:00</updated><id>https://jxtse.github.io/feed.xml</id><title type="html">Jinxiang Xie</title><subtitle>Jinxiang Xie is an M.Sc. student at Nanjing University researching large language models, harness engineering, agentic reinforcement learning, and collective intelligence.</subtitle><author><name>Jinxiang Xie</name><email>jxTse@outlook.com</email></author><entry><title type="html">One Memory, Many Agents: A Shared Memory Layer with Per-Agent Recall</title><link href="https://jxtse.github.io/blog/one-memory-many-agents/" rel="alternate" type="text/html" title="One Memory, Many Agents: A Shared Memory Layer with Per-Agent Recall" /><published>2026-10-30T00:00:00+08:00</published><updated>2026-10-30T00:00:00+08:00</updated><id>https://jxtse.github.io/blog/one-memory-many-agents</id><content type="html" xml:base="https://jxtse.github.io/blog/one-memory-many-agents/"><![CDATA[<style>
/* This bilingual post's wide metric tables scroll within the reading column. */
.post-content table { display: block; max-width: 100%; overflow-x: auto; }
.post-content a { overflow-wrap: anywhere; }
</style>

<noscript>
<p><a href="#english">English</a> · <a href="#chinese">中文</a> · <a href="#cite">引用 / Cite</a></p>
</noscript>

<section id="chinese" data-language-panel="zh" lang="zh-CN">

  <h2 id="zh-title">多场景、多 agent 的记忆系统</h2>

  <p><em>One Memory, Many Agents</em></p>

  <p>谢锦翔（Jinxiang Xie） · 2026 年 10 月 30 日</p>

  <p>一个人同时使用多个 LLM agent 已经很常见，比如使用 Muse 来规划日程、使用 Hermes 来追踪项目进度、使用 Codex 来执行一个具体的任务。但这些 agent 的记忆彼此隔离，同一条偏好或更正需要在每个系统里分别维护。本文介绍我为自己搭建的一套共享记忆层。所有 agent 读写同一份记忆接口，再由每个 agent 自己的 recall profile 决定召回的时机、范围和粒度。记忆的更新可以跨 session、跨 agent 自动运行。为了评估这套系统，我没有使用传统的记忆 benchmark，而是从自己的真实使用记录中构建了一个记忆评测环境。我从 agent eval 中吸取经验，结合程序化评估和基于 rubrics 的 LLM-as-a-Judge 进行评估，结合此后实际发生的对话来判断这一刻是否需要记忆，以及每条注入的记忆是否有用。在 467 个测试轮次上，相同召回预算下，本系统让 43.9% 的轮次拿到至少一条有用记忆，OpenViking 和 mem0 分别为 9.9% 和 32.3%，有害注入率为 2.0%，约为 mem0、BM25 和纯向量检索的一半。评测同时显示，在 agent 运行时，真正需要注入记忆的轮次只占 14%，而这其中约三分之二所需的信息从未被写入记忆。</p>

  <p><strong>本文的贡献。</strong></p>

  <ol>
    <li>提出按 agent 控制召回剂量的 recall profile。同一份记忆由每个 agent 用自己的配置决定何时召回、能看哪些项目、注入什么粒度的信息。在 coding agent 上，它把普通编码提示的注入率从 18% 降到 2%，并且没有发生跨项目注入。</li>
    <li>搭建了一条没有人工审核的记忆自动更新管线，事实提炼、证据核对、与已有记忆的比对和回滚机制都自动完成。由人工标注的 38 张自动晋升卡片中有 31 张合格。</li>
    <li>我认为，记忆系统的评估不能依赖于合成数据的 benchmark，而是需要贴近真实使用记录的记忆评测环境，它衡量的是系统能否在对的时刻给出对的记忆，以及在不需要时能否保持安静。我基于个人的真实使用记录初步尝试了基于环境的记忆评估方式。</li>
  </ol>

  <h3 id="zh-background">1. 背景：一个人身边的 agent 越来越多</h3>

  <p>过去一年里，我身边的 agent 数量增长得很快。自 Meta Muse 发布以来，personal agent 正逐步变成普通人的日常产品 [1]。Grok 在 8 月推出了 Grok Bot，每个 bot 都有自己的名字、职责和一台常驻的云电脑，可以全天候执行任务 [2]。开源社区也有自己部署的选择，例如 OpenClaw [3] 和我自己用作主助手的 Hermes Agent [4]。Coding agent 普及得更早，Codex、Claude Code 和 Pi [5] 已经成为我写代码时的日常工具。可以预见，以后还会出现更多面向特定领域的 agent（比如微信里的小微、飞书里的豆包工作），一个人在不同场景与多个 agent 协作可能将成为常态。</p>

  <p>这些 agent 大多自带记忆，而且实现方式相当接近。Claude Code 用 CLAUDE.md 保存人写的长期指令，再用 auto memory 让模型自己积累经验 [6]。Codex 在本地维护一个独立于 ChatGPT 网页版的记忆库 [7]。OpenClaw 把记忆写成工作区里的纯文本 Markdown 文件 [8]。Hermes 则有两个常驻上下文的文件，MEMORY.md 记环境和经验，USER.md 记用户画像 [9]。单独看，每一种设计都合理。然而，在一个人同时使用它们的时候就会出现问题。</p>

  <p>一个问题是记忆割裂。我在 Hermes 里定下“Python 环境一律用 uv 建独立环境”，Codex 并不知道，除非我在 Codex 里再说一遍。另一个问题是重复和矛盾。同一条偏好要在四个地方各写一次，而当相关内容有所变更，往往只有当时在用的那个 agent 更新了记忆，其余几个仍然按旧说法工作。时间一长就很难维护。</p>

  <p>因此我希望有一套统一的记忆层，所有 agent 都从同一份记忆里读，也都把新学到的东西写回同一份记忆。它需要满足四个条件。第一，记忆只有一份真相源，改一处就对所有 agent 生效。第二，它通过统一的接口提供服务，比如通过 API 或 MCP，这样接入新 agent 时不需要改动记忆系统本身。第三，它要能跨设备共享。我的 agent 分布在本机和远程服务器上，这套服务通过 Tailscale Serve 只在我自己的私有网络（tailnet）内开放 [10]。第四，也是本文最关心的一点，每个 agent 都能单独控制召回的强度和粒度。</p>

  <p>给 LLM agent 加外部记忆已经有不少研究。MemGPT 把有限的上下文窗口类比为操作系统的内存，让模型自己决定把哪些信息换进或换出上下文 [11]。Generative Agents 用自然语言记录 agent 的完整经历，再按时效、重要性和相关性检索，并定期把记忆综合成更高层的反思 [12]。MemoryBank 借鉴艾宾浩斯遗忘曲线，让记忆随时间衰减，并在被回忆时得到强化 [13]。Mem0 用 LLM 从对话中提炼事实，再对每条新事实选择新增、更新、删除或不变，以此维护记忆库 [14]。Zep 用带时间维度的知识图谱表示记忆，让过时的事实失效，同时保留历史 [15]。A-Mem 借鉴卡片盒笔记法，让记忆条目之间互相链接，并随着新信息不断演化 [16]。OpenViking 是火山引擎开源的上下文数据库，它把记忆、资源和技能统一组织成文件系统，并为每个节点生成三层表示：L0 是一句话摘要，L1 是概览，L2 是原文。agent 可以先读摘要，再决定是否打开全文 [17]。</p>

  <p>这些工作关注的大多是单个 agent 怎样记得更多、更准。而我的场景多出一个维度：同一份记忆要同时服务几个角色完全不同的 agent，而它们需要的剂量相差很大。</p>

  <h3 id="zh-dose">2. 一份记忆，多种剂量</h3>

  <h4 id="zh-why-dose">2.1 为什么召回要有剂量</h4>

  <p>直觉上，记忆给得越多越好，模型自己会挑有用的部分。已有研究并不支持这种直觉。Liu 等人发现，当相关信息位于长上下文的中间位置时，模型的表现会明显下降，即使是专门为长上下文设计的模型也是如此 [18]。Shi 等人在数学题里加入无关信息后，多种提示方法的准确率都大幅下降 [19]。Chroma 的测试也显示，随着输入变长，模型表现会以不均匀、难以预测的方式退化 [20]。Anthropic 在讨论 agent 的上下文工程时，把上下文描述成一种有限的注意力预算，并建议只放入能产生预期行为的最少量高信号内容 [21]。</p>

  <p>检索增强生成的研究也得出了相近的结论。Mallen 等人发现，检索对冷门知识帮助很大，对模型已经掌握的热门知识帮助有限，于是提出只在必要时才检索的自适应策略，同时降低了推理成本 [22]。Self-RAG 指出，不管是否需要都检索固定数量的段落，会降低模型的通用性，因此训练模型按需决定是否检索 [23]。FLARE 则在生成过程中主动判断何时检索、检索什么 [24]。更早的人机交互研究对这个问题也有讨论。Horvitz 在提出混合主动界面的原则时强调，系统在主动介入之前，应该结合对用户意图的不确定性，权衡行动的预期收益和打扰用户的代价 [25]。</p>

  <p>对一个共享的记忆层来说，这些结论意味着两件事。第一，召回本身有成本，无关的记忆会分散模型的注意力，也会占用本该留给任务的上下文。第二，合适的剂量取决于 agent 的角色。负责统筹全局的主助手需要更宽的视野，正在修改某个函数的 coding agent 则几乎不需要额外信息。</p>

  <h4 id="zh-overview">2.2 系统概览</h4>

  <p><img src="/images/2026-10-30-one-memory-many-agents/fig1-architecture.png" alt="图 1" /></p>

  <p><em>图 1：系统架构。上排是读路径，每次提问都会走一遍（绿色实线，从左往右）。下排是写路径，每次会话结束后在后台静默进行（灰色虚线，从右往左）。</em></p>

  <p>据此我提出了 dose-mem，图 1 展示了系统的整体结构。左侧是以 Markdown 为真相源的记忆仓库，中间是对所有 agent 提供统一接口的记忆服务，右侧是各个 agent。服务内部有两条路径：每次提问时运行的读路径，以及每次会话结束后在后台运行的写路径。</p>

  <p>每个 agent 都带着一个身份 token 和一个 profile 接入记忆服务。身份决定它能读写哪些项目的记忆，profile 决定它每次拿到多少记忆。接入新的 agent 时，只需要签发一个 token、写一个 profile，不需要改动服务本身。服务默认只监听本机端口。</p>

  <h4 id="zh-profile">2.3 Recall profile</h4>

  <p>Recall profile 是整套设计的核心。一个 profile 由几个参数组成：触发方式决定什么时候召回，范围决定能看哪些项目，层级决定注入一句话摘要还是摘要加概览，此外还有召回的内容长度预算、最多条数和分数阈值。</p>

  <p>第一种是给主助手用的 full profile。我的主助手是 Hermes，它负责协调我所有的研究项目，持续跟进实验和任务进度，因此需要随时了解各个项目的背景。full profile 在每一轮提问时都会尝试召回，可以跨项目检索，每轮最多注入 5 条记忆，总长度不超过 1,200 字节，每条包含一句话摘要和概览两层。</p>

  <p>第二种是给 coding agent 用的 working profile，用于 Claude Code、Codex 和 Pi。它们是具体任务的执行者，通常由 Hermes 或我直接委派任务，在某个代码仓库里工作。working profile 只在三种情况下召回：会话的第一轮，工作切换到另一个项目时，或者我说了“按我的习惯”“上次”“之前”这类明确指向记忆的话。它只检索当前项目的记忆，再加上全局记忆中偏好、踩坑和约定三类卡片。每次最多注入 2 条一句话摘要，每条附带链接，agent 需要细节时可以自己读取原文。它的筛选分数阈值也高于 full profile。</p>

  <p>第三种是给 personal agent 用的 personal profile，面向管理日程、邮件这类个人事务的 agent。它只召回与个人习惯相关的记忆，例如“早上 10 点喜欢来一杯咖啡”，不接触任何研究项目的内容。</p>

  <h4 id="zh-retrieval">2.4 基于 context 的记忆检索</h4>

  <p>记忆检索分为四步。第一步是确定这一轮属于哪个项目。系统从项目注册表里读取每个项目的名称、别名和昵称。如果 agent 显式指定了项目，就以它为准。如果没有指定，只有当提问唯一地命中某个项目时才推断范围，有歧义时保守地只检索全局记忆。对 coding agent 来说，项目由当前工作目录映射得到。</p>

  <p>第二步是混合检索。系统把同一个查询分别交给稠密向量检索和 BM25 稀疏检索。稠密向量擅长语义上的近似匹配 [26]，BM25 擅长精确的词汇匹配 [27]，两者在中文和英文混杂、术语和数字密集的研究笔记上恰好互补。两路结果用 reciprocal rank fusion（RRF）合并，也就是按每路排名的倒数加权求和 [28]。这种方法不需要把两路分数校准到同一尺度，在检索文献里是一种稳健的融合方式。</p>

  <p>第三步决定要不要插入记忆，这一步在设计上和“说什么”同样重要。检索结果会经过一系列过滤，分数低于 profile 阈值的条目也会被丢掉。如果没有一条合格，这一轮就什么都不注入。对 working profile，系统还要求一句话摘要本身与提问有足够的词汇支持，因为它只展示摘要，即使全文高度相关，也不应该注入一句与问题对不上的标题。</p>

  <p>第四步是在预算内拼装。系统按排名依次放入完整的条目。</p>

  <h4 id="zh-markdown">2.5 易于维护的 Markdown 真相源</h4>

  <p>所有记忆都保存在一个 Git 仓库里的 Markdown 文件中，包括每个项目的简报、决策记录、一事一卡的记忆卡片和项目注册表。日常维护主要由 AI 完成，但我随时可以打开任何一个文件阅读、比较版本或手动修改。向量索引只是从这些文件派生出来的检索状态，随时可以从 Markdown 完整重建。我选择这种设计，一是因为人能读懂并检查的记忆更容易建立信任，二是因为 OpenClaw 等系统已经证明纯文件的记忆在实践中足够好用。</p>

  <p>每条记忆都有三层表示，这一点参考了 OpenViking。L0 是一句话结论，取自卡片的结论字段或首句。L1 是有长度上限的概览。L2 是按标题切分的原文块。与 OpenViking 不同的是，这三层完全按规则生成，不调用 LLM，因此重建索引不产生模型调用费用，每次重建的结果也一致。每张卡片还带有生命周期信息。实验结果默认 180 天后过期，决策 365 天后过期，偏好、踩坑和约定没有期限。项目在注册表中被标记为归档后，它的记忆默认不再被自动召回，但仍然可以显式读取。</p>

  <h3 id="zh-case-study">3. Case study</h3>

  <p><img src="/images/2026-10-30-one-memory-many-agents/fig2-dose.png" alt="图 2" /></p>

  <p><em>图 2：同一句话，两种剂量。每行是同一句提示分别发给主助手（full）和 coding agent（working）时实际注入的内容，条的长短是注入字节数（上限 1,200 字节）。三个例子是线上服务的真实输出，项目名做了泛化。</em></p>

  <p>图 2 用三个真实例子展示了两种 profile 的差别。每个例子都是同一句话分别发给主助手和 coding agent，再记录两边实际收到的记忆。</p>

  <p>第一个例子是一个普通的编码步骤：“把 <code class="language-plaintext highlighter-rouge">parse_table</code> 改个名，顺便更新测试。”主助手的 full profile 每轮都会召回，它被塞进了 1,199 字节的“后训练经验”。这条记忆和重命名函数毫无关系，只会占用上下文。coding agent 的 working profile 没有被触发，什么都没收到。对一个正在改代码的 agent 来说，这正是合适的剂量。</p>

  <p>第二个例子是“帮我配一下这个项目的 Python 环境”。这句话在两个 agent 中都进行了召回。两边都拿到了“每个项目用 uv 建独立环境”这条记忆。主助手还多拿到一条“大型数据放在外置盘的哪个位置”。这条记忆其实也有用，working profile 为了控制剂量没有给。</p>

  <p>第三个例子是在 B 项目的代码仓库里，问 A 项目的论文该怎样引用软件许可证。主助手召回了 A 项目的三条记忆，其中决策记录是有用的。coding agent 被直接挡住，收到 0 字节。在 B 项目里工作的 coding agent 不应该读到 A 项目的内容，这是有意设计的隔离。如果确实需要跨项目的信息，应该从全局记忆中召回，或是由主助手来协调。</p>

  <p>为了在更大的样本上验证这些现象，我在隔离环境里做了两组测量。第一组是 50 条独立的普通编码提示。在 full profile 下，其中 9 条（18%）被注入了记忆，在 working profile 下只有 1 条（2%）。第二组是 5 个模拟的 10 轮编码会话。在这组会话上，working profile 召回的记忆长度减少了 79%。</p>

  <p>这种低剂量有明确的代价。在评测集上，working profile 在前 2 条结果中召回到正确来源的比例约为 30%，full profile 在前 5 条中约为 75%。也就是说，coding agent 在不少本可以受益于记忆的时刻没有拿到记忆。我接受这个取舍，原因有两个。一是 Horvitz 所说的打扰代价对 coding agent 尤其高 [25]，一条无关记忆可能把它带离当前任务。二是这个损失可以弥补，coding agent 一直可以主动调用 <code class="language-plaintext highlighter-rouge">memory_search</code> 工具查询记忆，自动召回只是一个低剂量的默认值。</p>

  <h3 id="zh-growth">4. 记忆的自然生长</h3>

  <p><img src="/images/2026-10-30-one-memory-many-agents/fig3-correction.png" alt="图 3" /></p>

  <p><em>图 3：一次没人审核的更正。这是端到端验收测试里的真实记录：先说“未验证的条目标成琥珀色”，后来改口“换成青色”。系统自动用新卡取代（supersede）旧卡，旧卡留在磁盘上，不再被召回。</em></p>

  <p>记忆系统必须回答一个问题：新的记忆从哪里来，谁来保证它是对的。最稳妥的做法是让人审核每一条候选记忆。我最初也是这样设计的，结果待审核的候选在收件箱里积压到了 218 条。我不想当记忆的审核员，事实证明我也没有时间当。但错误的长期记忆比没有记忆更糟，它会在此后几十次对话里反复误导 agent，而且不容易被发现。所以写入路径的目标是用自动检查代替人工审核，同时保持准入标准不降低。</p>

  <p>写入路径分为四步，对应图 1 下排从右往左的流程。</p>

  <p>第一步是捕获。系统只读取已经结束的会话。从本地读取 Hermes、Codex 和 Pi 的空闲会话的历史，至少包含 3 个用户轮次。每个会话被压缩成摘要，只保留用户的话、agent 的最终回答、调用过的工具名和有限的错误分类。</p>

  <p>第二步是提炼。LLM 把摘要拆成原子事实，每条事实都要写明所属项目和置信度，并且必须附上一段连续的原话作为证据。系统随后逐字核对这段引文是否真的出现在原始对话中，只允许空白、全半角和引号这类格式差异。没有出处的事实会被直接丢弃。这一步的做法与 Mem0 用 LLM 从对话中提炼事实的思路相近 [14]，区别在于这里强制要求可核验的原文证据。</p>

  <p>第三步是自动审核。每条候选先经过不调用模型的确定性预筛，再用混合检索找出最相近的 12 张已有卡片，最后交给一个 LLM 评委成批判断。评委有四种决定。promote 表示作为新卡片晋升，merge 表示并入已有卡片的证据，supersede 表示取代一张旧卡片，reject 表示丢弃。supersede 的门槛最高，必须有更新、更强、可核验的来源，或者是我本人明确说过的话。</p>

  <p>第四步是写入。写入路径只追加新卡片，从不改写旧文件。被取代的旧卡片仍然保留在仓库里，新卡片通过 <code class="language-plaintext highlighter-rouge">supersedes</code> 字段指向它，检索时旧卡片会被过滤掉。图 3 展示的就是这样一次更正：我先说“未验证的条目标成琥珀色”，后来改口“换成青色”，系统判定为 supersede，旧卡片留在磁盘上，从此不再被召回。</p>

  <p>我把由自动审核上线后的 38 张卡片全部读了一遍。其中 31 张合格，例如某个项目的许可证约束、某个测试集只能用于开发诊断、某次实验结果其实是评估格式造成的假象。6 张不该进入记忆，它们分别是一条通用的数据库知识、一段带时间戳的故障经过、一份命令修复日志、一个 Python 版本快照、一次交接文档的创建记录和一条一次性的任务指令。我把这 6 种错误类型写进了评委的拒绝规则，并用归档卡片取代了这 6 张卡片。</p>

  <h3 id="zh-evaluation">5. 评测环境：在真实使用里测记忆</h3>

  <h4 id="zh-benchmarks">5.1 现有 benchmark 测的是什么</h4>

  <p>长期记忆领域最常用的 benchmark 是 LoCoMo [29]。它先让 LLM agent 依据人设和事件图谱生成两个人之间的长对话，每段对话平均约 300 轮，最多跨越 35 个会话，经过人工校对后，再用第三人称的问答测试模型能否答出对话中的某个事实。Mem0 的主要实验就建立在 LoCoMo 上 [14]。LongMemEval 设计了 500 道题，覆盖信息提取、跨会话推理、时间推理、知识更新和拒答五种能力，并发现长上下文模型在其上的表现下降 30% 到 60% [30]。MemoryAgentBench 把评测改为增量的多轮交互，考察准确检索、测试时学习、长程理解和选择性遗忘 [31]。</p>

  <p>这些 benchmark 推动了很多进展，LongMemEval 也已经覆盖了知识更新和拒答。不过它们有一个共同的设定：对话是生成的，问题是事后出的，出题时已经保证答案存在于历史中。我在实际使用中关心的问题与此不同。当我对 agent 说出下一句话时，记忆系统首先要判断这一刻需不需要记忆。如果需要，它要给出对的那几条。如果不需要，它应该保持安静。这个判断每一轮都在发生，而现有 benchmark 很难测出这种能力，因为它们几乎每一道题都需要记忆。</p>

  <p>此外，记忆系统之间的比较本身也很脆弱。Zep 最初报告在 LoCoMo 上达到 84%，Mem0 的团队指出其计算有误，认为正确数字是 58.44%，Zep 修正后报告为 75.14% [32, 33]。同一个系统、同一个 benchmark，仅仅因为评测细节不同，数字就相差二十多个百分点。这提醒我，在自己的评测中，对比系统的接入方式必须尽可能贴近它们本来的用法。</p>

  <h4 id="zh-environment">5.2 从真实使用中构建记忆环境</h4>

  <p>基于上面的考虑，我从自己真实的 agent 使用记录中构建了一个评测环境。数据来自 2026 年 9 月 21 日到 10 月 26 日之间，我与 Hermes、Codex 和 Pi 的私人会话。我从中冻结了 500 个探针，其中 363 个来自 Hermes，89 个来自 Codex，48 个来自 Pi。数据按时间切分，前两周作为开发集，用于调参和选阈值，第 3 到 5 周作为测试集。</p>

  <p>每一个需要测试的点称为探针，每个探针是我在真实会话中说过的一句话。系统在回答这个探针时，只能看到此前的上一轮对话和此前的记忆快照。我在这句话之后实际说了什么、agent 实际做了什么，最多 6 轮，只提供给评委，绝不进入任何系统的检索请求。记忆快照来自记忆仓库的 Git 历史。我每周取一个快照，它严格早于该周所有的探针，因此系统不可能读到未来的信息。</p>

  <h4 id="zh-labels">5.3 标注与指标</h4>

  <p>为了构建合理的评价指标，我人工构建了 rubrics，每个 rubrics 的真值标签由 LLM 给出。为了减少 LLM-as-a-Judge 的偏差，评委看不到系统名称和检索分数，候选条目的顺序被随机打乱，每个判断都必须引用候选原文或后续对话中的具体片段。</p>

  <p>对每个探针，评委需要判断两件事。第一，结合我之后实际说的话和 agent 实际做的事，这一刻是否需要记忆。第二，每条注入的记忆属于哪一类：必要（没有它就做不对），有帮助，无关，或者有害（会误导 agent）。评委还会检查当我改过口时，系统给出的是新说法还是旧说法。为了检验标签的可靠性，我采用了不同厂商的模型独立复判了随机抽取的 20% 探针，并计算模型之间的一致性。</p>

  <p>基于这些标签，我关心几个指标。命中率是至少注入了一条有用记忆（必要或有帮助）的轮次比例，它衡量系统有多少次真正帮上了忙。有用率和有害率分别是所有注入条目中有用和有害的比例，它们衡量注入内容的质量。此外还有需要记忆的轮次中拿到有用内容的比例，以及注入的内容长度。综合分把“说”和“不说”放在一起：在需要记忆的轮次，召回到必要条目得分，在不需要的轮次，保持沉默得分，注入有害内容则扣分。所有置信区间都按会话聚类做 2,000 次 bootstrap，因为同一会话里的轮次彼此相关，把它们当作独立样本会低估不确定性 [34]。</p>

  <h4 id="zh-baselines">5.4 对比系统与公平接入</h4>

  <p>对比系统有四个：OpenViking [17]、mem0 [14]、纯稠密向量检索 [26] 和纯 BM25 检索 [27]。后两个是检索领域最基本的基线，用来判断复杂系统的收益是否真的超过了简单方法。所有系统读取同一份记忆快照，使用同一个 embedding 模型（text-embedding-3-small），由同一个评委打分。每个系统只在开发集上调一个阈值，测试集只用于最终报告。</p>

  <p>吸取 LoCoMo 争议的教训，我让每个系统都按它本来的用法接入。OpenViking 使用它为 OpenClaw 等插件做自动注入时调用的原生接口（context assembly）。mem0 使用它自己的写入方式（<code class="language-plaintext highlighter-rouge">infer=True</code>），由它的 LLM 从每份文档中提炼事实，并按周的顺序依次写入，每个探针只能检索到当时已经存在的记忆。</p>

  <p>这一点在实验中被证明非常重要。我第一次做对比时，OpenViking 用的是通用检索接口，返回的多是带元数据的目录概览，mem0 则直接存入原文，不做提炼。那一轮里，它们注入内容的有用率只有 4.9% 和 5.9%。改为原生用法后，两者分别上升到 16.5% 和 19.0%，都提高到原来的三倍以上。</p>

  <h4 id="zh-results">5.5 结果</h4>

  <p><img src="/images/2026-10-30-one-memory-many-agents/fig4-results.png" alt="图 4" /></p>

  <p><em>图 4：同一份记忆、同样的召回内容预算下，各系统注入了什么。A 是注入内容的质量，B 是各系统说了多少话。测试集为 467 个已评判的真实对话轮次，分布在 83 个会话里。细线是按会话聚类的 95% 置信区间。</em></p>

  <p>测试集最终包含 467 个已评判的轮次，分布在 83 个会话中。表 1 是相同注入预算下五个系统的结果。</p>

  <table>
    <thead>
      <tr>
        <th>指标</th>
        <th>本系统</th>
        <th>OpenViking</th>
        <th>mem0</th>
        <th>纯向量</th>
        <th>BM25</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>每轮注入条数</td>
        <td>3.2</td>
        <td>0.6</td>
        <td>2.7</td>
        <td>2.0</td>
        <td>2.0</td>
      </tr>
      <tr>
        <td>命中率</td>
        <td><strong>43.9%</strong></td>
        <td>9.9%</td>
        <td>32.3%</td>
        <td>28.9%</td>
        <td>31.3%</td>
      </tr>
      <tr>
        <td>需要记忆的 65 个轮次中拿到有用内容</td>
        <td><strong>56.9%</strong></td>
        <td>21.5%</td>
        <td>53.8%</td>
        <td>38.5%</td>
        <td>36.9%</td>
      </tr>
      <tr>
        <td>注入条目的有用率</td>
        <td><strong>21.0%</strong></td>
        <td>16.5%</td>
        <td>19.0%</td>
        <td>19.9%</td>
        <td>18.9%</td>
      </tr>
      <tr>
        <td>注入条目的有害率</td>
        <td>2.0%</td>
        <td><strong>1.7%</strong></td>
        <td>4.6%</td>
        <td>4.3%</td>
        <td>4.8%</td>
      </tr>
    </tbody>
  </table>

  <p>在相同的召回内容预算下，本系统的命中率为 43.9%，比 mem0、BM25 和纯向量检索高 12 到 15 个百分点，比 OpenViking 高 34 个百分点。它的有害率为 2.0%，显著低于 mem0、纯向量检索和 BM25，大约是它们的一半，与 OpenViking 相当。在真正需要记忆的 65 个轮次中，本系统和 mem0 拿到有用内容的比例接近，分别为 56.9% 和 53.8%，都高于其余三个系统。</p>

  <p>另一方面，单条记忆的准度在各系统之间没有显著差别，有用率都在 16% 到 21% 之间。这说明本系统的优势并不来自更会挑选单条记忆。它来自两个地方。其一是预算用得更省。本系统每条记忆只注入一句话标题，以及概览中标题之外的部分，同样的 1,200 字节平均能放下 3.2 条，其他系统只能放下 2 到 2.7 条。其二是过滤。按项目范围和版本链过滤，使本系统较少注入其他项目的内容和已被取代的旧说法，这在有害率上体现得最明显。OpenViking 的有害率也很低，但主要原因是它在 59% 的轮次里什么都没有注入，这同时也让它的命中率最低。</p>

  <p>如果让每个系统在开发集上调出各自最优的阈值，情况就完全不同了。所有系统都变得几乎沉默，只在 1.5% 到 5.3% 的轮次注入记忆，综合分挤在 0.81 到 0.85 之间，BM25 最高，本系统为 0.84。在 65 个需要记忆的轮次里，没有一个系统召回到被标为“必要”的条目。综合分如此接近，是因为 86% 的轮次本来就不需要记忆，一个永远沉默的系统也能拿到很高的分数。所以我不认为本系统在所有方面都超过了对比系统。更准确的说法是，在愿意注入一定剂量的前提下，它能以更低的风险让更多轮次受益。</p>

  <h4 id="zh-findings">5.6 两个关于真实使用的发现</h4>

  <p>这次评测提供的额外 insights 是，真正需要记忆的时刻很少。在 467 个测试轮次中，评委认为需要记忆的只有 65 个，占 14%。我进一步检查了这 65 个轮次，发现其中 42 个（约三分之二）所需的信息在所有系统的候选中都找不到。其中最多的是“跑完了吗”这类对正在进行的任务的追问，共 21 个，这类问题需要的是任务的实时状态，而它从来不在长期记忆里。剩下的是一些从未被写入记忆的细节，例如某个 PR 的链接或某个具体的数值上限。即使把五个系统的全部候选合在一起，也有 77.7% 的轮次至少包含一条有用的条目，可见检索本身并不是瓶颈。这个结果说明，下一步最值得补的是任务状态的记录，继续改进检索的边际收益很小。这也与 LongMemEval 等 benchmark 的设定形成对照，那里每一道题都保证答案存在于历史之中 [30]。</p>

  <h4 id="zh-limitations">5.7 局限</h4>

  <p>这项评测有几处明显的局限，需要在解读结果时考虑。第一，数据只来自一个用户，也就是我自己，而本系统恰好是在我的数据上开发的。其他人的使用习惯可能完全不同。</p>

  <p>第二，评估只用了 LLM。在 90 个被复判的轮次上，条目标签的一致率为 86%（Cohen’s κ=0.41），“这一轮是否需要记忆”的一致率为 69%（κ=0.17）。按照 Landis 和 Koch 的常用划分，前者处于中等一致的下限，后者只是轻微一致 [35]。因此，与“是否需要记忆”相关的数字噪声较大，解读时应当谨慎。</p>

  <p>第三，所有系统读取的都是同一份已经整理好的记忆，这次没有比较各系统从原始聊天中自己建立记忆的能力。</p>

  <p>最后，原始数据涉及个人隐私，不会公开，我只公开方法和脱敏后的示例。</p>

  <h3 id="zh-closing">6. 结尾</h3>

  <p>做完这一轮工作，我对记忆系统的理解发生了变化。我原本以为难点在于记住更多的东西，现在看来，更难的是在对的时刻给对的 agent 合适的剂量，在不该说话时保持安静，并且在没有人看着的情况下，自己生长、自己改错。</p>

  <p>还有几个问题我没有答案。第一，profile 目前是手工调的。它能否从使用中自动学习？例如 coding agent 每次主动调用 <code class="language-plaintext highlighter-rouge">memory_search</code>，都可以看作一次“该给的没给”的信号，可以用来调整触发条件和阈值。第二，在多用户的场景下，这种基于真实使用记录的评测要怎么做？一个人的数据说服力有限，但真实记录又天然涉及隐私。第三，需要记忆的轮次中，有三分之二缺的是任务状态。这部分信息应该由记忆系统接管，还是交给另一套专门的任务系统，我还没有想清楚。</p>

  <p>本文的搭建说明和评测工具已开源：<a href="https://github.com/jxtse/dose-mem">https://github.com/jxtse/dose-mem</a></p>

</section>

<section id="english" data-language-panel="en" lang="en">

  <h2 id="en-title">One Memory, Many Agents</h2>

  <p>Jinxiang Xie · October 30, 2026</p>

  <p>Using several LLM agents at once has become common: Muse to plan the day, Hermes to track research projects, Codex to carry out a specific task. Yet these agents keep their memories apart, so the same preference or correction has to be maintained separately in each system. This post describes a shared memory layer I built for myself. Every agent reads and writes through the same memory interface, and each agent’s own recall profile decides when to recall, what scope to search and how fine-grained the injected memory is. Memory updates run automatically across sessions and across agents. To evaluate the system I did not use a conventional memory benchmark. Instead, I built a memory evaluation environment from my own real usage. Borrowing from agent evaluation practice, I combined programmatic checks with a rubric-based LLM-as-a-Judge, which uses the conversation that actually followed to decide whether a given moment needed memory and whether each injected memory helped. On 467 test turns, under the same recall budget, this system gives at least one useful memory on 43.9% of turns, against 9.9% for OpenViking and 32.3% for mem0. Its harmful-injection rate is 2.0%, about half that of mem0, BM25 and dense retrieval. The evaluation also shows that only 14% of turns actually needed injected memory while the agent was running, and in about two thirds of those, the information needed had never been written to memory.</p>

  <p><strong>Contributions.</strong></p>

  <ol>
    <li>A recall profile that sets the recall dose per agent. Every agent reads the same memory, and its own configuration decides when to recall, which projects it may see, and how fine-grained the injected information is. For coding agents it lowers the share of routine coding prompts that receive memory from 18% to 2%, with no cross-project injection.</li>
    <li>An automatic memory-update pipeline with no human review. Fact distillation, evidence checking, comparison with existing memory and rollback all run automatically. Of the 38 auto-promoted cards that I labelled by hand, 31 were good.</li>
    <li>I believe memory systems cannot be evaluated with benchmarks built on synthetic data. They need an evaluation environment close to real usage, one that measures whether the system gives the right memory at the right moment and stays quiet when nothing is needed. I made a first attempt at such environment-based evaluation using my own usage records.</li>
  </ol>

  <h3 id="en-background">1. Background: more and more agents around one person</h3>

  <p>Over the past year the number of agents around me has grown quickly. Since Meta released Muse, personal agents have been turning into everyday products for ordinary people [1]. In August, Grok launched Grok Bot, where each bot has its own name, role and an always-on cloud computer and can work around the clock [2]. The open-source community has self-hosted options too, such as OpenClaw [3] and Hermes Agent [4], which I use as my main assistant. Coding agents spread even earlier: Codex, Claude Code and Pi [5] are part of how I write code every day. More domain-specific agents are clearly coming (WeChat’s Xiaowei and Doubao Work in Feishu, for example), and working with several agents across different settings is likely to become normal.</p>

  <p>Most of these agents ship with their own memory, built in similar ways. Claude Code keeps human-written long-term instructions in CLAUDE.md and lets the model accumulate experience through auto memory [6]. Codex keeps a local memory store separate from ChatGPT on the web [7]. OpenClaw writes memory as plain Markdown files in its workspace [8]. Hermes has two files that stay in context: MEMORY.md for environment and lessons, USER.md for the user profile [9]. Each design is reasonable on its own. The trouble starts when one person uses all of them at once.</p>

  <p>One problem is fragmented memory. If I tell Hermes that “every Python environment should be an isolated uv environment”, Codex does not know unless I say it again in Codex. Another problem is duplication and contradiction. The same preference has to be written in four places, and when something changes, usually only the agent I happened to be using updates its memory while the others keep working from the old version. Over time this becomes hard to maintain.</p>

  <p>So I wanted a unified memory layer: every agent reads from the same memory and writes what it learns back to the same memory. It has to meet four conditions. First, memory has a single source of truth, so a change in one place takes effect for every agent. Second, it serves through a uniform interface, such as an API or MCP, so connecting a new agent needs no change to the memory system itself. Third, it can be shared across devices. My agents run on this machine and on remote servers, and the service is exposed only inside my own private network (tailnet) through Tailscale Serve [10]. Fourth, and the focus of this post, each agent can control the strength and granularity of its own recall.</p>

  <p>There is already a good deal of research on external memory for LLM agents. MemGPT compares the limited context window to an operating system’s memory and lets the model decide what to page in and out of context [11]. Generative Agents record an agent’s full experience in natural language, retrieve it by recency, importance and relevance, and periodically synthesize memories into higher-level reflections [12]. MemoryBank borrows the Ebbinghaus forgetting curve so that memories decay over time and are reinforced when recalled [13]. Mem0 uses an LLM to distill facts from conversations and, for each new fact, chooses to add, update, delete or leave the memory store unchanged [14]. Zep represents memory as a temporal knowledge graph, invalidating outdated facts while keeping their history [15]. A-Mem borrows the Zettelkasten method, linking memory entries to each other and letting them evolve as new information arrives [16]. OpenViking, the context database open-sourced by Volcengine, organizes memory, resources and skills as one file system and gives every node three representations: L0 is a one-sentence summary, L1 an overview, L2 the original text. An agent can read the summary first and then decide whether to open the full text [17].</p>

  <p>Most of this work is about how a single agent can remember more, and more accurately. My setting adds a dimension: the same memory has to serve several agents with entirely different roles, and the dose each one needs differs widely.</p>

  <h3 id="en-dose">2. One memory, many doses</h3>

  <h4 id="en-why-dose">2.1 Why recall needs a dose</h4>

  <p>Intuitively, the more memory the better, since the model will pick out what is useful. Existing research does not support this intuition. Liu et al. found that models perform markedly worse when the relevant information sits in the middle of a long context, even models designed for long contexts [18]. Shi et al. added irrelevant information to math problems and saw accuracy fall sharply across many prompting methods [19]. Chroma’s tests also show that as input grows longer, model performance degrades in uneven and hard-to-predict ways [20]. In its discussion of context engineering for agents, Anthropic describes context as a finite attention budget and recommends including only the smallest set of high-signal content that produces the desired behaviour [21].</p>

  <p>Research on retrieval-augmented generation points the same way. Mallen et al. found that retrieval helps a lot for long-tail knowledge but little for popular knowledge the model already holds, and proposed an adaptive strategy that retrieves only when needed, which also lowers inference cost [22]. Self-RAG notes that retrieving a fixed number of passages regardless of need hurts the model’s versatility, and trains the model to decide when to retrieve [23]. FLARE actively decides during generation when to retrieve and what to retrieve [24]. Earlier human-computer interaction research addressed the same question. In his principles of mixed-initiative user interfaces, Horvitz stressed that before acting on its own initiative a system should weigh the expected benefit of acting against the cost of interrupting the user, taking its uncertainty about the user’s intent into account [25].</p>

  <p>For a shared memory layer these findings mean two things. First, recall has a cost: irrelevant memory distracts the model and takes up context that should go to the task. Second, the right dose depends on the agent’s role. A main assistant that coordinates everything needs a wide view, while a coding agent editing one function needs almost no extra information.</p>

  <h4 id="en-overview">2.2 System overview</h4>

  <p><img src="/images/2026-10-30-one-memory-many-agents/fig1-architecture.png" alt="Figure 1" /></p>

  <p><em>Figure 1. System architecture. The top row is the read path, run on every prompt (solid green, left to right). The bottom row is the write path, run silently in the background after each session ends (dashed grey, right to left).</em></p>

  <p>Building on this, I designed dose-mem, whose overall structure is shown in Figure 1. On the left is the memory repository, with Markdown as the source of truth. In the middle is the memory service, which offers one interface to every agent. On the right are the agents. The service has two paths inside: the read path, run on every prompt, and the write path, run in the background after each session ends.</p>

  <p>Each agent connects to the memory service with an identity token and a profile. The identity decides which projects’ memory it may read and write, and the profile decides how much memory it gets each time. Connecting a new agent only takes issuing a token and writing a profile, with no change to the service itself. By default the service listens only on a local port.</p>

  <h4 id="en-profile">2.3 Recall profile</h4>

  <p>The recall profile is the core of the design. A profile consists of a few parameters: the trigger decides when to recall, the scope decides which projects may be searched, the level decides whether to inject only a one-line summary or the summary plus an overview, and there are also a length budget for recalled content, a maximum number of items and a score threshold.</p>

  <p>The first is the full profile, for the main assistant. My main assistant is Hermes. It coordinates all my research projects and keeps track of experiments and tasks, so it needs the background of every project at hand. The full profile tries to recall on every prompt, may search across projects, and injects at most 5 memories per turn, no more than 1,200 bytes in total, each with a one-line summary and an overview.</p>

  <p>The second is the working profile, for coding agents: Claude Code, Codex and Pi. They execute concrete tasks, usually delegated by Hermes or by me, inside some code repository. The working profile recalls only in three situations: on the first turn of a session, when the work moves to another project, or when I say something that points explicitly at memory, such as “the way I usually do it”, “last time” or “before”. It searches only the current project’s memory, plus three types of global cards: preferences, pitfalls and conventions. It injects at most 2 one-line summaries, each with a link the agent can follow to read the original when it needs detail. Its score threshold is also higher than the full profile’s.</p>

  <p>The third is the personal profile, for personal agents that manage personal matters such as calendars and email. It recalls only memories about personal habits, for example “likes a cup of coffee at 10 in the morning”, and never touches research projects.</p>

  <h4 id="en-retrieval">2.4 Context-aware memory retrieval</h4>

  <p>Retrieval takes four steps. The first decides which project this turn belongs to. The system reads each project’s name, aliases and nicknames from the project registry. If the agent names a project explicitly, that wins. Otherwise the scope is inferred only when the prompt matches exactly one project; when it is ambiguous, the system conservatively searches global memory only. For coding agents the project is mapped from the current working directory.</p>

  <p>The second step is hybrid retrieval. The system sends the same query to dense vector retrieval and to BM25 sparse retrieval. Dense vectors are good at approximate semantic matches [26], and BM25 at exact lexical matches [27]; on research notes that mix Chinese and English and are dense with terms and numbers, the two complement each other well. The two result lists are merged with reciprocal rank fusion (RRF), which sums the reciprocal of each list’s rank [28]. This needs no calibration of the two scores onto one scale, and the retrieval literature regards it as a robust way to fuse rankings.</p>

  <p>The third step decides whether to insert memory at all, which in this design matters as much as what to say. Retrieved results pass through a series of filters, and items scoring below the profile’s threshold are dropped. If nothing qualifies, nothing is injected this turn. For the working profile the system also requires the one-line summary itself to have enough lexical support from the prompt: since only the summary is shown, a title that does not match the question should not be injected even if the full text is highly relevant.</p>

  <p>The fourth step assembles the result within the budget. The system adds whole items in rank order.</p>

  <h4 id="en-markdown">2.5 A Markdown source of truth that is easy to maintain</h4>

  <p>All memory lives in Markdown files in a Git repository: each project’s brief, its decision log, one-fact-per-card memory cards, and the project registry. Day-to-day maintenance is mostly done by AI, but I can open, diff or edit any file at any time. The vector index is only retrieval state derived from these files and can be fully rebuilt from the Markdown at any time. I chose this design for two reasons: memory that people can read and check is easier to trust, and systems such as OpenClaw have already shown that plain-file memory works well enough in practice.</p>

  <p>Every memory has three representations, an idea taken from OpenViking. L0 is a one-sentence conclusion, taken from the card’s conclusion field or first sentence. L1 is an overview with a length cap. L2 is the original text split into chunks by heading. Unlike OpenViking, all three layers are generated by rules without calling an LLM, so rebuilding the index costs nothing in model calls and gives the same result every time. Each card also carries lifecycle information. Experimental results expire after 180 days by default, decisions after 365 days, and preferences, pitfalls and conventions never expire. Once a project is marked archived in the registry, its memory is no longer recalled automatically by default, though it can still be read explicitly.</p>

  <h3 id="en-case-study">3. Case study</h3>

  <p><img src="/images/2026-10-30-one-memory-many-agents/fig2-dose.png" alt="Figure 2" /></p>

  <p><em>Figure 2. Same prompt, two doses. Each row shows what was actually injected when the same prompt went to the main assistant (full) and to a coding agent (working); bar length is injected bytes (capped at 1,200 bytes). The three examples are real outputs of the live service, with project names generalized.</em></p>

  <p>Figure 2 uses three real examples to show how the two profiles differ. In each, the same prompt was sent to the main assistant and to a coding agent, and I recorded the memory each side actually received.</p>

  <p>The first example is a routine coding step: “Rename <code class="language-plaintext highlighter-rouge">parse_table</code> and update the tests.” The main assistant’s full profile recalls on every turn, and it received 1,199 bytes of “lessons from post-training”. That memory has nothing to do with renaming a function and only takes up context. The coding agent’s working profile was not triggered and received nothing. For an agent in the middle of editing code, that is exactly the right dose.</p>

  <p>The second example is “Set up the Python environment for this project.” This prompt triggered recall in both agents. Both received the memory “use an isolated uv environment for each project”. The main assistant also received “where large data lives on the external drive”. That memory is useful too, but the working profile left it out to keep the dose small.</p>

  <p>The third example is asking, inside project B’s repository, how project A’s paper should cite software licenses. The main assistant recalled three memories from project A, of which the decision log was useful. The coding agent was blocked outright and received 0 bytes. A coding agent working in project B should not read project A’s content; this isolation is by design. When cross-project information is really needed, it should come from global memory or be coordinated by the main assistant.</p>

  <p>To check these effects on a larger sample, I ran two sets of measurements in an isolated environment. The first used 50 independent routine coding prompts. Under the full profile, 9 of them (18%) received memory; under the working profile only 1 (2%). The second used 5 simulated 10-turn coding sessions. On these sessions the working profile cut the length of recalled memory by 79%.</p>

  <p>This low dose has a clear cost. On the evaluation set, the working profile recalls the correct source within its top 2 results about 30% of the time, while the full profile does so within its top 5 about 75% of the time. In other words, the coding agent misses memory at many moments when it could have benefited. I accept this trade-off for two reasons. First, the cost of interruption that Horvitz describes is especially high for coding agents [25]: one irrelevant memory can pull them away from the task at hand. Second, the loss can be made up: a coding agent can always call the <code class="language-plaintext highlighter-rouge">memory_search</code> tool to query memory itself, and automatic recall is only a low-dose default.</p>

  <h3 id="en-growth">4. Memory that grows on its own</h3>

  <p><img src="/images/2026-10-30-one-memory-many-agents/fig3-correction.png" alt="Figure 3" /></p>

  <p><em>Figure 3. A correction nobody reviewed. This is a real record from the end-to-end acceptance test: I first said “mark unverified entries in amber” and later changed it to “use teal instead”. The system automatically superseded the old card with a new one; the old card stays on disk but is no longer recalled.</em></p>

  <p>A memory system has to answer one question: where do new memories come from, and who makes sure they are right? The safest answer is to have a person review every candidate memory. That is how I first designed it, and the review inbox piled up to 218 candidates. I did not want to be my memory’s reviewer, and it turned out I did not have the time either. But wrong long-term memory is worse than no memory: it misleads agents again and again over dozens of later conversations, and it is hard to notice. So the goal of the write path is to replace human review with automatic checks without lowering the bar for admission.</p>

  <p>The write path has four steps, matching the bottom row of Figure 1 from right to left.</p>

  <p>The first step is capture. The system reads only sessions that have ended. It reads the history of idle Hermes, Codex and Pi sessions locally, each with at least 3 user turns. Each session is compressed into a digest that keeps only the user’s words, the agent’s final answers, the names of tools called, and a limited classification of errors.</p>

  <p>The second step is distillation. An LLM splits the digest into atomic facts. Each fact must state its project and confidence and must carry a contiguous verbatim quote as evidence. The system then checks, word for word, that the quote really appears in the original conversation, allowing only formatting differences such as whitespace, full- or half-width characters and quotation marks. A fact without a source is dropped. This step is close in spirit to Mem0’s use of an LLM to distill facts from conversations [14], except that here verifiable verbatim evidence is required.</p>

  <p>The third step is automatic review. Each candidate first passes a deterministic pre-screen that calls no model, then hybrid retrieval finds the 12 most similar existing cards, and finally an LLM judge decides in batches. The judge has four possible decisions: promote, to admit it as a new card; merge, to fold it into an existing card’s evidence; supersede, to replace an old card; and reject, to discard it. Supersede has the highest bar: it needs a newer, stronger, verifiable source, or something I said explicitly myself.</p>

  <p>The fourth step is writing. The write path only appends new cards and never rewrites old files. A superseded card stays in the repository, the new card points to it through its <code class="language-plaintext highlighter-rouge">supersedes</code> field, and the old card is filtered out at retrieval time. Figure 3 shows exactly such a correction: I first said “mark unverified entries in amber” and later changed it to “use teal instead”; the system judged it a supersede, and the old card stays on disk but is never recalled again.</p>

  <p>I read all 38 cards that automatic review promoted after launch. Thirty-one were good, for example a license constraint for one project, the fact that a certain test set may only be used for development diagnostics, and the finding that one experimental result was an artifact of the evaluation format. Six should not have entered memory: a piece of generic database knowledge, a timestamped incident timeline, a command-repair log, a Python version snapshot, a record of creating a handoff document, and a one-off task instruction. I added these six error types to the judge’s rejection rules and replaced the six cards with archived ones.</p>

  <h3 id="en-evaluation">5. An evaluation environment: measuring memory in real use</h3>

  <h4 id="en-benchmarks">5.1 What existing benchmarks measure</h4>

  <p>The most widely used benchmark for long-term memory is LoCoMo [29]. It first has LLM agents generate long conversations between two people from personas and event graphs, averaging about 300 turns and spanning up to 35 sessions; after human correction, it uses third-person question answering to test whether a model can answer a fact from the conversation. Mem0’s main experiments are built on LoCoMo [14]. LongMemEval has 500 questions covering five abilities, namely information extraction, multi-session reasoning, temporal reasoning, knowledge updates and abstention, and finds that long-context models lose 30% to 60% of their performance on it [30]. MemoryAgentBench turns evaluation into incremental multi-turn interaction, testing accurate retrieval, test-time learning, long-range understanding and selective forgetting [31].</p>

  <p>These benchmarks have driven a lot of progress, and LongMemEval already covers knowledge updates and abstention. They share one setup, though: the conversations are generated, the questions are written afterwards, and the answer is guaranteed to exist in the history when the question is written. The question I care about in practice is different. When I say my next sentence to an agent, the memory system first has to decide whether this moment needs memory. If it does, it should give the right few items. If it does not, it should stay quiet. This decision happens on every turn, and existing benchmarks can hardly measure it, because nearly every one of their questions needs memory.</p>

  <p>Comparisons between memory systems are also fragile. Zep first reported 84% on LoCoMo; the Mem0 team pointed out a calculation error and put the correct figure at 58.44%; Zep’s corrected report was 75.14% [32, 33]. The same system on the same benchmark differed by more than twenty percentage points because of evaluation details alone. This reminded me that, in my own evaluation, the baselines must be connected in a way as close as possible to how they are meant to be used.</p>

  <h4 id="en-environment">5.2 Building a memory environment from real use</h4>

  <p>With these considerations in mind, I built an evaluation environment from my own real agent usage. The data come from my private sessions with Hermes, Codex and Pi between September 21 and October 26, 2026. Of the 500 frozen probes, 363 come from Hermes, 89 from Codex and 48 from Pi. The data are split by time: the first two weeks form the development set, used for tuning and choosing thresholds, and weeks 3 to 5 form the test set.</p>

  <p>Each point to be tested is called a probe, and each probe is a sentence I actually said in a real session. When answering a probe, a system can see only the previous turn and the earlier memory snapshot. What I actually said next and what the agent actually did, up to 6 turns, are shown only to the judge and never enter any system’s retrieval request. Memory snapshots come from the Git history of the memory repository. I take one snapshot per week, strictly earlier than every probe in that week, so no system can read information from the future.</p>

  <h4 id="en-labels">5.3 Labels and metrics</h4>

  <p>To build sound metrics, I wrote the rubrics by hand, and an LLM assigns the labels under each rubric. To reduce the biases of LLM-as-a-Judge, the judge sees neither system names nor retrieval scores, candidate items are shuffled, and every judgement must cite a specific passage from the candidate text or the later conversation.</p>

  <p>For each probe the judge decides two things. First, given what I actually said next and what the agent actually did, whether this moment needed memory. Second, which category each injected memory falls into: necessary (the task goes wrong without it), helpful, irrelevant, or harmful (it misleads the agent). The judge also checks, when I had changed my mind, whether the system gave the new version or the old one. To check label reliability, I had a model from a different vendor independently re-judge a random 20% of probes and computed the agreement between the models.</p>

  <p>From these labels I track several metrics. Hit rate is the share of turns with at least one useful (necessary or helpful) memory injected; it measures how often the system actually helped. Useful rate and harmful rate are the shares of all injected items that are useful and harmful; they measure the quality of what is injected. There is also the share of memory-needing turns that received useful content, and the length of injected content. The composite score puts speaking and staying silent together: on turns that need memory, recalling a necessary item scores; on turns that do not, staying silent scores; injecting harmful content is penalized. All confidence intervals come from 2,000 bootstrap resamples clustered by session, because turns within one session are correlated and treating them as independent samples would understate uncertainty [34].</p>

  <h4 id="en-baselines">5.4 Baselines and fair integration</h4>

  <p>There are four baselines: OpenViking [17], mem0 [14], dense vector retrieval alone [26] and BM25 retrieval alone [27]. The last two are the most basic baselines in retrieval and show whether a complex system really beats simple methods. All systems read the same memory snapshot, use the same embedding model (text-embedding-3-small), and are scored by the same judge. Each system tunes a single threshold on the development set, and the test set is used only for the final report.</p>

  <p>Learning from the LoCoMo dispute, I connected each system the way it is meant to be used. OpenViking uses the native interface (context assembly) that plugins such as OpenClaw’s call for automatic injection. mem0 uses its own write path (<code class="language-plaintext highlighter-rouge">infer=True</code>): its LLM distills facts from each document, which are written week by week in order, so each probe can only retrieve memories that already existed at that time.</p>

  <p>This proved very important in the experiment. In my first comparison, OpenViking used the generic retrieval interface, which mostly returned directory overviews with metadata, and mem0 stored the original text directly without distillation. In that round, the useful rate of their injected content was only 4.9% and 5.9%. After switching to native usage, it rose to 16.5% and 19.0% respectively, more than three times higher.</p>

  <h4 id="en-results">5.5 Results</h4>

  <p><img src="/images/2026-10-30-one-memory-many-agents/fig4-results.png" alt="Figure 4" /></p>

  <p><em>Figure 4. What each system injects from the same memory under the same recall budget. A is the quality of injected content; B is how much each system says. The test set is 467 judged real conversation turns across 83 sessions. Thin lines are session-clustered 95% confidence intervals.</em></p>

  <p>The test set ended up with 467 judged turns across 83 sessions. Table 1 gives the results of the five systems under the same injection budget.</p>

  <table>
    <thead>
      <tr>
        <th>Metric</th>
        <th>This system</th>
        <th>OpenViking</th>
        <th>mem0</th>
        <th>Dense</th>
        <th>BM25</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Items injected per turn</td>
        <td>3.2</td>
        <td>0.6</td>
        <td>2.7</td>
        <td>2.0</td>
        <td>2.0</td>
      </tr>
      <tr>
        <td>Hit rate</td>
        <td><strong>43.9%</strong></td>
        <td>9.9%</td>
        <td>32.3%</td>
        <td>28.9%</td>
        <td>31.3%</td>
      </tr>
      <tr>
        <td>Useful content on the 65 memory-needing turns</td>
        <td><strong>56.9%</strong></td>
        <td>21.5%</td>
        <td>53.8%</td>
        <td>38.5%</td>
        <td>36.9%</td>
      </tr>
      <tr>
        <td>Useful rate of injected items</td>
        <td><strong>21.0%</strong></td>
        <td>16.5%</td>
        <td>19.0%</td>
        <td>19.9%</td>
        <td>18.9%</td>
      </tr>
      <tr>
        <td>Harmful rate of injected items</td>
        <td>2.0%</td>
        <td><strong>1.7%</strong></td>
        <td>4.6%</td>
        <td>4.3%</td>
        <td>4.8%</td>
      </tr>
    </tbody>
  </table>

  <p>Under the same recall budget, this system’s hit rate is 43.9%, 12 to 15 percentage points higher than mem0, BM25 and dense retrieval, and 34 points higher than OpenViking. Its harmful rate is 2.0%, significantly lower than mem0, dense retrieval and BM25, about half of theirs, and comparable to OpenViking. On the 65 turns that really needed memory, this system and mem0 gave useful content at similar rates, 56.9% and 53.8%, both higher than the other three systems.</p>

  <p>On the other hand, the accuracy of individual memories does not differ significantly between systems: useful rates all lie between 16% and 21%. So this system’s advantage does not come from picking individual memories better. It comes from two places. One is spending the budget more economically. This system injects only a one-line title per memory plus the part of the overview beyond the title, so the same 1,200 bytes hold 3.2 items on average while the other systems hold only 2 to 2.7. The other is filtering. Filtering by project scope and by version chain means this system injects less content from other projects and fewer superseded statements, which shows most clearly in the harmful rate. OpenViking’s harmful rate is also low, but mainly because it injects nothing on 59% of turns, which also gives it the lowest hit rate.</p>

  <p>If each system is allowed to tune its own best threshold on the development set, the picture changes completely. Every system becomes almost silent, injecting memory on only 1.5% to 5.3% of turns, and composite scores bunch between 0.81 and 0.85, with BM25 highest and this system at 0.84. On the 65 memory-needing turns, no system recalled an item labelled “necessary”. The composite scores are so close because 86% of turns need no memory at all, so a system that never speaks still scores well. I therefore do not claim this system beats the baselines on every count. The more accurate statement is that, when a system is willing to inject some dose, this one lets more turns benefit at lower risk.</p>

  <h4 id="en-findings">5.6 Findings about real use</h4>

  <p>An extra insight from this evaluation is that moments that really need memory are rare. Of the 467 test turns, the judge found only 65, or 14%, needed memory. Looking closer at those 65 turns, I found that for 42 of them (about two thirds) the information needed was not among any system’s candidates. The largest group, 21 turns, were follow-up questions about tasks in progress, such as “is it done yet?”; these need the live state of a task, which is never in long-term memory. The rest were details that had never been written to memory, such as the link to a PR or a specific numeric limit. Even pooling all five systems’ candidates, 77.7% of turns contain at least one useful item, so retrieval itself is not the bottleneck. This result says the next thing worth adding is a record of task state; further work on retrieval has small marginal returns. It also contrasts with the setup of benchmarks such as LongMemEval, where every question is guaranteed to have its answer in the history [30].</p>

  <h4 id="en-limitations">5.7 Limitations</h4>

  <p>This evaluation has several clear limitations to keep in mind when reading the results. First, the data come from a single user, me, and this system happened to be developed on my data. Other people’s usage habits may be completely different.</p>

  <p>Second, the evaluation relies only on LLM judges. On the 90 re-judged turns, item labels agreed 86% of the time (Cohen’s κ = 0.41), and whether a turn needed memory agreed 69% of the time (κ = 0.17). By Landis and Koch’s common scale, the former sits at the low end of moderate agreement and the latter is only slight agreement [35]. Numbers related to whether memory was needed are therefore noisy and should be read with care.</p>

  <p>Third, every system read the same already-curated memory, so this evaluation did not compare each system’s ability to build memory from raw chat on its own.</p>

  <p>Finally, the raw data involve personal privacy and will not be released. I release only the method and anonymized examples.</p>

  <h3 id="en-closing">6. Closing</h3>

  <p>After this round of work, my understanding of memory systems has changed. I used to think the hard part was remembering more. Now it looks harder to give the right agent the right dose at the right moment, to stay quiet when nothing should be said, and to grow and correct itself when no one is watching.</p>

  <p>There are several questions I cannot yet answer. First, profiles are tuned by hand today. Could they be learned from use? For example, every time a coding agent calls <code class="language-plaintext highlighter-rouge">memory_search</code> on its own, that can be read as a signal that something it should have received was not given, and used to adjust triggers and thresholds. Second, how should this kind of evaluation on real usage records work with many users? One person’s data is limited evidence, yet real records naturally involve privacy. Third, two thirds of the memory-needing turns were missing task state. Should that information be taken over by the memory system or handed to a separate task system? I have not worked that out yet.</p>

  <p>The build specs and the evaluation kit for this post are open source: <a href="https://github.com/jxtse/dose-mem">https://github.com/jxtse/dose-mem</a></p>

</section>

<section id="cite">

  <h2 id="cite-en" data-language-text="en" lang="en">Cite this post</h2>
  <h2 id="cite-zh" data-language-text="zh" lang="zh-CN">引用本文</h2>

  <p data-language-text="en" lang="en">Please cite this post as:</p>
  <p data-language-text="zh" lang="zh-CN">如需引用本文，请使用以下格式：</p>

  <div class="language-bibtex highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">@article</span><span class="p">{</span><span class="nl">xie2026memory</span><span class="p">,</span>
  <span class="na">title</span> <span class="p">=</span> <span class="s">{One Memory, Many Agents: A Shared Memory Layer with Per-Agent Recall}</span><span class="p">,</span>
  <span class="na">author</span> <span class="p">=</span> <span class="s">{Jinxiang Xie}</span><span class="p">,</span>
  <span class="na">journal</span> <span class="p">=</span> <span class="s">{jxtse.github.io}</span><span class="p">,</span>
  <span class="na">year</span> <span class="p">=</span> <span class="s">{2026}</span><span class="p">,</span>
  <span class="na">month</span> <span class="p">=</span> <span class="s">{October}</span><span class="p">,</span>
  <span class="na">url</span> <span class="p">=</span> <span class="s">"https://jxtse.github.io/blog/one-memory-many-agents/#english"</span>
<span class="p">}</span>
</code></pre></div>  </div>

</section>

<section id="chinese-references" data-language-panel="zh" lang="zh-CN">

  <h2 id="zh-references">参考文献</h2>

  <p>[1] Meta. How to get started with Muse. Meta Help Center, 2026. <a href="https://www.meta.com/help/superintelligence/1331373868832401/">https://www.meta.com/help/superintelligence/1331373868832401/</a></p>

  <p>[2] Introducing Grok Bot, 2026. <a href="https://x.ai/news/introducing-grok-bot">https://x.ai/news/introducing-grok-bot</a></p>

  <p>[3] OpenClaw: Your assistant, on your devices, in your chats. <a href="https://github.com/openclaw/openclaw">https://github.com/openclaw/openclaw</a></p>

  <p>[4] Nous Research. Hermes Agent. <a href="https://github.com/nousresearch/hermes-agent">https://github.com/nousresearch/hermes-agent</a></p>

  <p>[5] Pi: a minimal agent harness. <a href="https://pi.dev/">https://pi.dev/</a></p>

  <p>[6] Anthropic. How Claude remembers your project. Claude Code Docs. <a href="https://code.claude.com/docs/en/memory">https://code.claude.com/docs/en/memory</a></p>

  <p>[7] OpenAI. Memories. ChatGPT Learn. <a href="https://learn.chatgpt.com/docs/customization/memories">https://learn.chatgpt.com/docs/customization/memories</a></p>

  <p>[8] OpenClaw. Memory overview. <a href="https://docs.openclaw.ai/concepts/memory/">https://docs.openclaw.ai/concepts/memory/</a></p>

  <p>[9] Nous Research. Persistent Memory. Hermes Agent Docs. <a href="https://hermes-agent.nousresearch.com/docs/user-guide/features/memory">https://hermes-agent.nousresearch.com/docs/user-guide/features/memory</a></p>

  <p>[10] Tailscale. Tailscale Serve. <a href="https://tailscale.com/docs/features/tailscale-serve">https://tailscale.com/docs/features/tailscale-serve</a></p>

  <p>[11] Packer, C., Wooders, S., Lin, K., Fang, V., Patil, S. G., Stoica, I., Gonzalez, J. E. MemGPT: Towards LLMs as Operating Systems. arXiv:2310.08560, 2023.</p>

  <p>[12] Park, J. S., O’Brien, J. C., Cai, C. J., Morris, M. R., Liang, P., Bernstein, M. S. Generative Agents: Interactive Simulacra of Human Behavior. UIST 2023.</p>

  <p>[13] Zhong, W., Guo, L., Gao, Q., Ye, H., Wang, Y. MemoryBank: Enhancing Large Language Models with Long-Term Memory. AAAI 2024.</p>

  <p>[14] Chhikara, P., Khant, D., Aryan, S., Singh, T., Yadav, D. Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory. arXiv:2504.19413, 2025.</p>

  <p>[15] Rasmussen, P., Paliychuk, P., Beauvais, T., Ryan, J., Chalef, D. Zep: A Temporal Knowledge Graph Architecture for Agent Memory. arXiv:2501.13956, 2025.</p>

  <p>[16] Xu, W., Liang, Z., Mei, K., Gao, H., Tan, J., Zhang, Y. A-Mem: Agentic Memory for LLM Agents. arXiv:2502.12110, 2025.</p>

  <p>[17] Volcengine. OpenViking: Context Database for AI Agents. <a href="https://github.com/volcengine/OpenViking">https://github.com/volcengine/OpenViking</a></p>

  <p>[18] Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F., Liang, P. Lost in the Middle: How Language Models Use Long Contexts. TACL 12:157–173, 2024.</p>

  <p>[19] Shi, F., Chen, X., Misra, K., Scales, N., Dohan, D., Chi, E., Schärli, N., Zhou, D. Large Language Models Can Be Easily Distracted by Irrelevant Context. ICML 2023.</p>

  <p>[20] Hong, K., Troynikov, A., Huber, J. Context Rot: How Increasing Input Tokens Impacts LLM Performance. Chroma Research, 2025. <a href="https://research.trychroma.com/context-rot">https://research.trychroma.com/context-rot</a></p>

  <p>[21] Anthropic. Effective context engineering for AI agents, 2025. <a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents">https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents</a></p>

  <p>[22] Mallen, A., Asai, A., Zhong, V., Das, R., Khashabi, D., Hajishirzi, H. When Not to Trust Language Models: Investigating Effectiveness of Parametric and Non-Parametric Memories. ACL 2023.</p>

  <p>[23] Asai, A., Wu, Z., Wang, Y., Sil, A., Hajishirzi, H. Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection. ICLR 2024.</p>

  <p>[24] Jiang, Z., Xu, F. F., Gao, L., Sun, Z., Liu, Q., Dwivedi-Yu, J., Yang, Y., Callan, J., Neubig, G. Active Retrieval Augmented Generation. EMNLP 2023.</p>

  <p>[25] Horvitz, E. Principles of Mixed-Initiative User Interfaces. CHI 1999.</p>

  <p>[26] Karpukhin, V., Oguz, B., Min, S., Lewis, P., Wu, L., Edunov, S., Chen, D., Yih, W. Dense Passage Retrieval for Open-Domain Question Answering. EMNLP 2020.</p>

  <p>[27] Robertson, S., Zaragoza, H. The Probabilistic Relevance Framework: BM25 and Beyond. Foundations and Trends in Information Retrieval 3(4):333–389, 2009.</p>

  <p>[28] Cormack, G. V., Clarke, C. L. A., Büttcher, S. Reciprocal Rank Fusion Outperforms Condorcet and Individual Rank Learning Methods. SIGIR 2009.</p>

  <p>[29] Maharana, A., Lee, D.-H., Tulyakov, S., Bansal, M., Barbieri, F., Fang, Y. Evaluating Very Long-Term Conversational Memory of LLM Agents. ACL 2024.</p>

  <p>[30] Wu, D., Wang, H., Yu, W., Zhang, Y., Chang, K.-W., Yu, D. LongMemEval: Benchmarking Chat Assistants on Long-Term Interactive Memory. ICLR 2025.</p>

  <p>[31] Hu, Y., Wang, Y., McAuley, J. Evaluating Memory in LLM Agents via Incremental Multi-Turn Interactions. arXiv:2507.05257, 2025.</p>

  <p>[32] Zep. Is Mem0 Really SOTA in Agent Memory? 2025. <a href="https://www.getzep.com/blog/lies-damn-lies-statistics-is-mem0-really-sota-in-agent-memory/">https://www.getzep.com/blog/lies-damn-lies-statistics-is-mem0-really-sota-in-agent-memory/</a></p>

  <p>[33] Yadav, D. Revisiting Zep’s 84% LoCoMo Claim: Corrected Evaluation &amp; 58.44% Accuracy. GitHub issue getzep/zep-papers#5, 2025.</p>

  <p>[34] Field, C. A., Welsh, A. H. Bootstrapping Clustered Data. Journal of the Royal Statistical Society Series B 69(3):369–390, 2007.</p>

  <p>[35] Landis, J. R., Koch, G. G. The Measurement of Observer Agreement for Categorical Data. Biometrics 33(1):159–174, 1977.</p>

</section>

<section id="english-references" data-language-panel="en" lang="en">

  <h2 id="en-references">References</h2>

  <p>[1] Meta. How to get started with Muse. Meta Help Center, 2026. <a href="https://www.meta.com/help/superintelligence/1331373868832401/">https://www.meta.com/help/superintelligence/1331373868832401/</a></p>

  <p>[2] Introducing Grok Bot, 2026. <a href="https://x.ai/news/introducing-grok-bot">https://x.ai/news/introducing-grok-bot</a></p>

  <p>[3] OpenClaw: Your assistant, on your devices, in your chats. <a href="https://github.com/openclaw/openclaw">https://github.com/openclaw/openclaw</a></p>

  <p>[4] Nous Research. Hermes Agent. <a href="https://github.com/nousresearch/hermes-agent">https://github.com/nousresearch/hermes-agent</a></p>

  <p>[5] Pi: a minimal agent harness. <a href="https://pi.dev/">https://pi.dev/</a></p>

  <p>[6] Anthropic. How Claude remembers your project. Claude Code Docs. <a href="https://code.claude.com/docs/en/memory">https://code.claude.com/docs/en/memory</a></p>

  <p>[7] OpenAI. Memories. ChatGPT Learn. <a href="https://learn.chatgpt.com/docs/customization/memories">https://learn.chatgpt.com/docs/customization/memories</a></p>

  <p>[8] OpenClaw. Memory overview. <a href="https://docs.openclaw.ai/concepts/memory/">https://docs.openclaw.ai/concepts/memory/</a></p>

  <p>[9] Nous Research. Persistent Memory. Hermes Agent Docs. <a href="https://hermes-agent.nousresearch.com/docs/user-guide/features/memory">https://hermes-agent.nousresearch.com/docs/user-guide/features/memory</a></p>

  <p>[10] Tailscale. Tailscale Serve. <a href="https://tailscale.com/docs/features/tailscale-serve">https://tailscale.com/docs/features/tailscale-serve</a></p>

  <p>[11] Packer, C., Wooders, S., Lin, K., Fang, V., Patil, S. G., Stoica, I., Gonzalez, J. E. MemGPT: Towards LLMs as Operating Systems. arXiv:2310.08560, 2023.</p>

  <p>[12] Park, J. S., O’Brien, J. C., Cai, C. J., Morris, M. R., Liang, P., Bernstein, M. S. Generative Agents: Interactive Simulacra of Human Behavior. UIST 2023.</p>

  <p>[13] Zhong, W., Guo, L., Gao, Q., Ye, H., Wang, Y. MemoryBank: Enhancing Large Language Models with Long-Term Memory. AAAI 2024.</p>

  <p>[14] Chhikara, P., Khant, D., Aryan, S., Singh, T., Yadav, D. Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory. arXiv:2504.19413, 2025.</p>

  <p>[15] Rasmussen, P., Paliychuk, P., Beauvais, T., Ryan, J., Chalef, D. Zep: A Temporal Knowledge Graph Architecture for Agent Memory. arXiv:2501.13956, 2025.</p>

  <p>[16] Xu, W., Liang, Z., Mei, K., Gao, H., Tan, J., Zhang, Y. A-Mem: Agentic Memory for LLM Agents. arXiv:2502.12110, 2025.</p>

  <p>[17] Volcengine. OpenViking: Context Database for AI Agents. <a href="https://github.com/volcengine/OpenViking">https://github.com/volcengine/OpenViking</a></p>

  <p>[18] Liu, N. F., Lin, K., Hewitt, J., Paranjape, A., Bevilacqua, M., Petroni, F., Liang, P. Lost in the Middle: How Language Models Use Long Contexts. TACL 12:157–173, 2024.</p>

  <p>[19] Shi, F., Chen, X., Misra, K., Scales, N., Dohan, D., Chi, E., Schärli, N., Zhou, D. Large Language Models Can Be Easily Distracted by Irrelevant Context. ICML 2023.</p>

  <p>[20] Hong, K., Troynikov, A., Huber, J. Context Rot: How Increasing Input Tokens Impacts LLM Performance. Chroma Research, 2025. <a href="https://research.trychroma.com/context-rot">https://research.trychroma.com/context-rot</a></p>

  <p>[21] Anthropic. Effective context engineering for AI agents, 2025. <a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents">https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents</a></p>

  <p>[22] Mallen, A., Asai, A., Zhong, V., Das, R., Khashabi, D., Hajishirzi, H. When Not to Trust Language Models: Investigating Effectiveness of Parametric and Non-Parametric Memories. ACL 2023.</p>

  <p>[23] Asai, A., Wu, Z., Wang, Y., Sil, A., Hajishirzi, H. Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection. ICLR 2024.</p>

  <p>[24] Jiang, Z., Xu, F. F., Gao, L., Sun, Z., Liu, Q., Dwivedi-Yu, J., Yang, Y., Callan, J., Neubig, G. Active Retrieval Augmented Generation. EMNLP 2023.</p>

  <p>[25] Horvitz, E. Principles of Mixed-Initiative User Interfaces. CHI 1999.</p>

  <p>[26] Karpukhin, V., Oguz, B., Min, S., Lewis, P., Wu, L., Edunov, S., Chen, D., Yih, W. Dense Passage Retrieval for Open-Domain Question Answering. EMNLP 2020.</p>

  <p>[27] Robertson, S., Zaragoza, H. The Probabilistic Relevance Framework: BM25 and Beyond. Foundations and Trends in Information Retrieval 3(4):333–389, 2009.</p>

  <p>[28] Cormack, G. V., Clarke, C. L. A., Büttcher, S. Reciprocal Rank Fusion Outperforms Condorcet and Individual Rank Learning Methods. SIGIR 2009.</p>

  <p>[29] Maharana, A., Lee, D.-H., Tulyakov, S., Bansal, M., Barbieri, F., Fang, Y. Evaluating Very Long-Term Conversational Memory of LLM Agents. ACL 2024.</p>

  <p>[30] Wu, D., Wang, H., Yu, W., Zhang, Y., Chang, K.-W., Yu, D. LongMemEval: Benchmarking Chat Assistants on Long-Term Interactive Memory. ICLR 2025.</p>

  <p>[31] Hu, Y., Wang, Y., McAuley, J. Evaluating Memory in LLM Agents via Incremental Multi-Turn Interactions. arXiv:2507.05257, 2025.</p>

  <p>[32] Zep. Is Mem0 Really SOTA in Agent Memory? 2025. <a href="https://www.getzep.com/blog/lies-damn-lies-statistics-is-mem0-really-sota-in-agent-memory/">https://www.getzep.com/blog/lies-damn-lies-statistics-is-mem0-really-sota-in-agent-memory/</a></p>

  <p>[33] Yadav, D. Revisiting Zep’s 84% LoCoMo Claim: Corrected Evaluation &amp; 58.44% Accuracy. GitHub issue getzep/zep-papers#5, 2025.</p>

  <p>[34] Field, C. A., Welsh, A. H. Bootstrapping Clustered Data. Journal of the Royal Statistical Society Series B 69(3):369–390, 2007.</p>

  <p>[35] Landis, J. R., Koch, G. G. The Measurement of Observer Agreement for Categorical Data. Biometrics 33(1):159–174, 1977.</p>

</section>]]></content><author><name>Jinxiang Xie</name></author><category term="AI" /><category term="Agents" /><category term="Research" /><summary type="html"><![CDATA[Personal and coding agents each keep their own memory. I built one shared Markdown memory with per-agent recall profiles and an automatic write path, then evaluated it on my own real agent sessions: when a turn needs memory, and how much to inject.]]></summary></entry><entry><title type="html">Where Collective Intelligence Hits Its Ceiling</title><link href="https://jxtse.github.io/blog/where-collective-intelligence-hits-its-ceiling/" rel="alternate" type="text/html" title="Where Collective Intelligence Hits Its Ceiling" /><published>2026-09-09T00:00:00+08:00</published><updated>2026-09-09T00:00:00+08:00</updated><id>https://jxtse.github.io/blog/where-collective-intelligence-hits-its-ceiling</id><content type="html" xml:base="https://jxtse.github.io/blog/where-collective-intelligence-hits-its-ceiling/"><![CDATA[<style>
/* This bilingual post's wide metric tables scroll within the reading column. */
.post-content table { display: block; max-width: 100%; overflow-x: auto; }
.post-content a { overflow-wrap: anywhere; }
</style>

<noscript>
<p><a href="#english">English</a> · <a href="#chinese">中文</a> · <a href="#cite">引用 / Cite</a></p>
</noscript>

<section id="chinese" data-language-panel="zh" lang="zh-CN">

  <h2 id="section">集体智能的天花板在哪里</h2>

  <p><em>Where Collective Intelligence Hits Its Ceiling</em></p>

  <p>谢锦翔（Jinxiang Xie） · 2026 年 9 月 9 日</p>

  <p>当前有很多机构在探索 collective intelligence。我最近关注的技术路线主要有两条：训练模型如何组织其他模型，以及让多个模型共同接受训练。这篇文章整理我的调研和分析，也会随着后续实验持续更新。先把判断放在前面：<strong>增加 agent 的数量和差异，并不自动产生更强的集体能力。系统甚至可能无法利用成员已经给出的正确答案。</strong></p>

  <p>这里需要区分超过最强单模型的平均成绩、超过同预算独立采样的候选覆盖率，以及产生成员独立探索时无法得到的解。它们是不同的主张。对于只在固定候选池中选择答案的机制，候选覆盖率确实构成上限；但这个限制不能直接推广到交互推理、任务分解、工具反馈和训练后的泛化。因此，我讨论的是当前机制在哪里遇到瓶颈，而不是证明集体智能存在一个普遍不可突破的能力上限。</p>

  <h3 id="orchestration">范式一：Orchestration</h3>

  <p>第一条路线是 <strong>orchestration（编排）</strong>，代表是 Sakana AI 的 <a href="https://sakana.ai/fugu/">Fugu</a>。思路是优化一个 coordinator，负责把任务拆解、路由给合适的 subagent（worker），再把结果汇总，对外封装成单一模型接口。它建立在 <a href="https://arxiv.org/abs/2512.04695">Trinity</a> 和 <a href="https://arxiv.org/abs/2512.04388">Conductor</a> 两篇 ICLR 2026 工作之上。<a href="https://arxiv.org/abs/2606.21228">技术报告</a>里的 Fugu-Ultra 是更完整的形态：用 LLM 生成工作流，组织各个 subagent 的任务、状态和上下文。</p>

  <p>产品侧也在使用类似的分工：Claude Code / Codex 的 subagent 机制，以及 Cursor 的 <a href="https://cursor.com/cn/blog/agent-swarm-model-economics">agent swarm</a>。学界还有 <a href="https://arxiv.org/abs/2510.05592">AgentFlow</a>、<a href="https://arxiv.org/abs/2605.14483">Lemon</a> 等优化编排器的工作，把训练重点放在 planner 或 orchestrator 上，而不是同时更新所有 worker。我认为这种架构相比单 agent，最直观的两个收益是：</p>

  <p><strong>1. 上下文隔离。</strong> Coordinator 掌握全局进度，worker 专注单个任务。Cursor 的解释是，swarm 的可扩展性可能更多来自上下文效率：模型可以专注一个具体任务，不必同时保留所有任务的细节，从而减轻上下文过载。</p>

  <p><strong>2. 并行加速。</strong> 分而治之可以降低可并行任务的整体延迟。但代价同样真实：各环节相互依赖时，一个错误可能向下游传播；agent 间的通信损失，也可能让系统低于单 agent。除此之外，异构模型的能力互补和成本路由也是潜在收益，不能只用前面两点概括。</p>

  <p>这条路线的瓶颈，更准确地说是<strong>协调与验证</strong>。Fugu 的 benchmark 成绩可以超过池中任何单个成员，但任务是否被正确拆解、必要上下文是否被传递、相互冲突的结果是否被识别，仍然需要系统解决。如果 coordinator 不加验证地采信 subagent 的结果，系统可能在不知不觉中失败；如果提供的上下文不足，worker 则可能从一开始就误解任务。</p>

  <p><a href="https://www.anthropic.com/research/multiagent-systems">Anthropic 的游戏实验</a>提供了一个有意思的对照：让 agent swarm 花 12 小时协作开发开放世界游戏，尝试自由组队、预设角色和指定 CEO 三种组织方式，最终游戏质量都很差。不过，不同代际模型的协作行为并不相同。Sonnet 4.6 和 Opus 4.6 难以合并彼此的工作；Opus 4.8 和 Mythos Preview 更多通过维持文件所有权、减少直接合作来避开冲突；Sonnet 5 则同时保持了较高的代码共享和 PR 合并率。</p>

  <p>这些结果说明，摆好组织结构并不足以获得协调，但也不能据此断言协调只能来自最强模型，或仅靠模型变强就会自然出现。Trinity 本身就允许把验证交给 Verifier worker：coordinator 不必独自完成所有深度验证，难点在于它能否可靠地组织验证、处理冲突并决定何时继续。对于长时间、高依赖的任务，这仍是我对第一条路线最关心的问题。</p>

  <h3 id="multi-agent-rl">范式二：Multi-Agent RL</h3>

  <p>第二条路线是 <strong>multi-agent RL（多智能体强化学习）</strong>。以 <a href="https://arxiv.org/abs/2608.17253">Co-RL</a> 为例，它让多个不共享参数的模型同时接受 RL 训练。每个模型先从自己的多次采样中得到投票伪答案，再用这个答案监督另一个模型；在多于两个模型的设置中，监督可以沿有向环传递。它的关键发现是，异构模型家族、模型规模与输入改写带来的 cohort diversity，可以减少相关错误、缓解 self-rewarding 中的训练坍缩。</p>

  <p>同一大方向还有 <a href="https://aclanthology.org/2025.acl-long.1459/">MAPoRL</a> 和 <a href="https://arxiv.org/abs/2508.04652">MAGRPO</a>，但机制并不相同。MAPoRL 包含多模型讨论、verifier 评分以及鼓励纠错和说服的奖励；MAGRPO 则优化多轮协作。因此，不能把整个 multi-agent RL 都简化成“独立采样，再固定投票”。通信协议固定，也不意味着协议中的协作行为不能被学到。</p>

  <p>对于 Co-RL 这类依赖采样伪标签的方法，<strong>采样覆盖和监督信号质量</strong>是直接瓶颈。在某次更新中，只有实际出现并进入伪标签的答案，才能提供相应的直接监督。增加 diversity 有机会减少共同错误、扩大候选覆盖，但投票本身不会构造候选之外的新解。这是单次采样与聚合的限制，不能直接当作训练后泛化能力的定理。</p>

  <p>Self-rewarding 的风险也需要说得更具体：当某个错误答案稳定占据众数时，用它作为伪标签可能继续强化错误。正确答案的采样概率低于一半，并不一定意味着最高票答案错误，因为其他错误可能分散到许多不同答案上。跨模型监督的价值，在于不同模型未必共享同一个错误众数；如果它们的错误高度相关，这个优势就会减弱。</p>

  <h4 id="section-1">一次离线投票审计</h4>

  <p>为了看清这个机制，我对 Co-RL 复现配置在<strong>训练起点</strong>的采样做了一次离线审计：8,740 道 MATH-Level345 训练题，三个模型分别是 Qwen2.5-3B、Llama-3.2-3B-Instruct 和 Qwen3-1.7B-Base，每题每模型采样 K=12。答案提取与判分沿用复现仓库的代码。</p>

  <p>这里要区分实际训练和额外审计：实际三模型训练使用环形同伴监督；下面的跨模型投票是另一项离线分析。它先取每个模型自己的众数答案，再让每个模型投一票，选出唯一最高票答案；最高票并列时不接受标签。以下把它简称为跨模型投票。</p>

  <table>
    <thead>
      <tr>
        <th>配置</th>
        <th>全题正确率</th>
        <th>标签覆盖率</th>
        <th>已接受标签中的准确率</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Qwen2.5-3B 的模型内众数</td>
        <td>50.82%</td>
        <td>100%</td>
        <td>50.82%</td>
      </tr>
      <tr>
        <td>Llama-3.2-3B-Instruct 的模型内众数</td>
        <td>51.57%</td>
        <td>100%</td>
        <td>51.57%</td>
      </tr>
      <tr>
        <td>Qwen3-1.7B-Base 的模型内众数</td>
        <td>52.32%</td>
        <td>100%</td>
        <td>52.32%</td>
      </tr>
      <tr>
        <td>三模型跨模型投票</td>
        <td>51.48%</td>
        <td>66.34%</td>
        <td>77.60%</td>
      </tr>
    </tbody>
  </table>

  <p>全题正确率把没有被接受的标签计为未答对；标签覆盖率是产生被接受标签的题目比例；条件准确率只在这些题目上计算。三个指标必须一起看：投票提高了已接受标签的纯度，但放弃了部分题目，没有提高整体正确覆盖。</p>

  <p>三个模型的<strong>模型内众数答案均错误</strong>的题目占 31.6%，跨模型投票救回率为零。这个零是结构性的：只从三个错误众数中选择，不可能得到正确答案；它不表示原始全部采样里都没有正确答案。模型间众数答案的错误相关性 φ 为 0.48–0.67，其中 Qwen2.5 与 Qwen3 这对同家族模型最高。这说明它们在当前条件下存在共同失败模式，不能直接解释为潜在知识边界的重合程度。</p>

  <p>我还在固定的 2,000 题子样本上加入强模型的答案，观察等权投票能否保留高质量意见。小模型仍然各自提供一个众数答案；每个强模型提供一个 greedy 答案，仍然每模型一票，并列时不接受标签。</p>

  <table>
    <thead>
      <tr>
        <th>子样本上的模型池</th>
        <th>全题正确率</th>
        <th>标签覆盖率</th>
        <th>已接受标签中的准确率</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>三个小模型 + GPT-5.6 Sol</td>
        <td>63.60%</td>
        <td>74.60%</td>
        <td>85.25%</td>
      </tr>
      <tr>
        <td>三个小模型 + Claude-Fable-5</td>
        <td>64.10%</td>
        <td>74.95%</td>
        <td>85.52%</td>
      </tr>
      <tr>
        <td>三个小模型 + 两个强模型</td>
        <td>85.20%</td>
        <td>89.30%</td>
        <td>95.41%</td>
      </tr>
    </tbody>
  </table>

  <p>这组结果不能与上表全量训练集直接作增益比较，也不是同预算的模型能力排名。它考察的是给定答案池上的聚合行为。加入两个强模型后，已接受标签的准确率很高，但全题正确率仍低于这个条件指标。两个强模型在双方答案都能解析的题目上有 92.18% 的精确答案一致率，因此结果更接近强模型之间的一致意见获得了更大的投票影响力，而不是某个最强成员自动主导集体判断。</p>

  <p><strong>这次审计支持的判断是：简单等权投票会在标签纯度与覆盖率之间取舍，也可能无法保留高质量的少数意见。</strong> 它没有验证 Co-RL 训练后的能力上限，更不能证明整个 multi-agent RL 没有纠错能力。把 Co-RL 理解为跨模型伪标签监督、互相传递可用能力，是一个有帮助的视角，但它仍需与实际的环形训练机制对应起来。</p>

  <h3 id="section-2">群体智能的瓶颈及未来探索方向</h3>

  <p>我仍然认为，增大模型采样中<strong>有用的 diversity</strong>，再想办法利用这些差异，是群体智能值得继续探索的方向。</p>

  <h4 id="section-3">从采样数据分布的角度</h4>

  <p>Diversity 这一半有据可依。Co-RL 的消融支持异构 family 和输入改写减少相关错误、缓解训练坍缩。<a href="https://www.anthropic.com/research/multiagent-systems">Anthropic 的实验</a>则从反面展示了同源 agent 的低方差：30 个同模型 agent 协作开发游戏，18 个创建了同名 git 分支 <code class="language-plaintext highlighter-rouge">mvp-game-loop</code>；管理有限带宽任务队列时，agent 部署高频轮询，一次运行产生 240 万个请求，却只有 117 个任务被接受。个体层面的相似倾向，在集体中可能被放大成系统性失效。</p>

  <p>困难在于，后训练常常会使输出分布变尖、降低多样性。<a href="https://arxiv.org/abs/2501.18101">DivPO</a> 直接优化质量约束下的响应多样性；<a href="https://arxiv.org/abs/2604.24320">DPEPO</a> 通过动作和状态转移奖励鼓励多样的并行探索；<a href="https://arxiv.org/abs/2606.10587">EvoDiverse</a> 则在推理时的科学假设搜索中借鉴 parallel tempering，缓解搜索分布的坍缩。这些工作处理的对象不同，但都提示：只保留单一高分模式可能损失有价值的候选。调高 temperature 可以改变采样分布，却不能保证得到高质量、语义上互补的解。</p>

  <p>顺着这个问题，我更关心的是：diversity 应该定义在什么对象上？<a href="https://arxiv.org/abs/2402.11493">Knowledge boundary</a> 的工作提供了一个有用的概念：固定问法下答错，不代表模型在语义等价的其他问法下也答不对。因此，单次采样无法代表模型关于这个问题的全部可达能力。不过，有限的改写搜索也无法证明已经穷尽了这个范围。</p>

  <p>对 multi-agent 来说，我想要的并非只是几个模型这次恰好答得不同，而是<strong>在保持质量的前提下，减少共同盲区、扩大互补覆盖</strong>。共享正确的基础知识是有价值的；单纯让 knowledge boundary 尽可能少重合，反而可能通过遗忘知识或制造错误实现。</p>

  <p>这里可以借 nrehiew 那篇<a href="https://nrehiew.github.io/blog/sft_rl_opd/">从分布视角看 post-training 的 blog</a> 来组织直觉：SFT 通过外部数据提供目标，在线 RL 则通过当前策略访问到的轨迹接受反馈。前者可以示范当前模型难以采到的行为；后者的探索受当前采样分布影响。这个框架并不是严格的能力边界证明。若希望 SFT 把几个模型的分布拉开，还需要不同的高质量目标数据或显式约束；RL 也可以通过质量与多样性目标改变探索方向。</p>

  <p>我期待未来 multi-agent system 中的各个 agent 拥有更异构、又不牺牲基本能力的分布，能提供真正互补的视角，而不只是换一个角色提示词。</p>

  <h4 id="fusion-">从 fusion 的角度</h4>

  <p>Fusion 才是更难的一半。普通答案投票需要可判等的候选，大量开放式任务和长时间轨迹很难直接适用。<a href="https://arxiv.org/abs/2603.20324">When Agents Disagree</a> 把这个问题称为 selection bottleneck：在其建模和单轮选择实验中，diverse pool 的收益取决于 selector 的质量。这个结果不应被直接推广成所有融合机制的定律，但它提出了一个好问题：如果不能识别差异中的价值，更多候选究竟是在提供机会，还是增加噪声？</p>

  <p>一旦需要一个 learned fusion 模块读懂多个候选、判断每个候选对在哪里，再把有用部分合起来，它就开始接近第一条路线里的 coordinator。但选择一个完整候选、综合多个方案和协调长期执行，仍然是不同任务，未必应由单一模块承担。</p>

  <p><a href="https://cursor.com/cn/blog/agent-swarm-model-economics">Cursor 的 SQLite 实验</a>提供了量化的失败记录：旧版 swarm 在前两小时产生 68,000 次 commit，累计超过 70,000 次 merge conflict，接近两小时时被暂停；冲突最严重的文件被 1,173 个 agent 改动，发生 7,771 次冲突；项目扩张成 54 个 crate，其中有三个独立的 SQL package。</p>

  <p>更重要的是改进后的对照：同模型条件下，引入中立仲裁 agent、共享设计文档、超大文件标记等 harness 机制，显著减少了冲突。这不是模型自己通过训练学会协调的证据，却是<strong>机制设计可以改善集体表现</strong>的证据。环境和协议本来就是协作系统的一部分。</p>

  <p>也可以通过为多个 agent 分配信息差来构造 diversity，而聚合这些信息并不容易。<a href="https://www.anthropic.com/research/multiagent-systems">Anthropic 的 hidden profile 实验</a>把事实分散给四个 agent：共享证据支持错误选项，独家信息则可以改变决策。讨论后的集体表现仍未达到单 agent 获得全部事实的 solo ceiling。这个设置说明，信息分布式存在，不等于系统能有效使用它。识别私有事实的重要性、表达它、以及让其他成员据此更新判断，都是需要解决的能力问题。</p>

  <p>我期待更可靠的协调机制能从多样的轨迹中提取重要信息，并按照全局目标稳步推进任务。它可能来自更强的模型，也可能来自更好的验证、协议、环境反馈和训练目标。两条路线会在这里交汇。对我来说，接下来最值得追问的是：怎样制造有价值的差异，又怎样让这些差异在形成集体判断时不被抹掉？</p>

  <p><a href="#english">Read in English ↓</a></p>

</section>

<section id="english" data-language-panel="en" lang="en">

  <h2 id="where-collective-intelligence-hits-its-ceiling">Where Collective Intelligence Hits Its Ceiling</h2>

  <p>Jinxiang Xie · September 9, 2026</p>

  <p>Many organizations are exploring collective intelligence. Two directions have occupied most of my recent reading: training a model to organize other models, and training multiple models together. This post collects my observations and analysis, which I expect to update as the experiments develop. My current view is straightforward: <strong>adding more agents, or making them more different, does not automatically produce stronger collective capability. A system may fail to use even the correct answers its members already provide.</strong></p>

  <p>We should distinguish outperforming the best individual model on average, exceeding the candidate coverage of compute-matched independent sampling, and producing solutions that members cannot reach through independent exploration. These are different claims. For a mechanism that only selects from a fixed candidate pool, candidate coverage is indeed an upper bound. That restriction does not directly extend to interactive reasoning, task decomposition, tool feedback, or generalization after training. I am interested in where current mechanisms encounter bottlenecks, not in proving a universal impossibility result for collective intelligence.</p>

  <h3 id="paradigm-one-orchestration">Paradigm One: Orchestration</h3>

  <p>The first direction is <strong>orchestration</strong>, exemplified by Sakana AI’s <a href="https://sakana.ai/fugu/">Fugu</a>. The idea is to optimize a coordinator that decomposes tasks, routes them to suitable subagents or workers, and combines their outputs, exposing the system through a single model interface. Fugu builds on two ICLR 2026 papers, <a href="https://arxiv.org/abs/2512.04695">Trinity</a> and <a href="https://arxiv.org/abs/2512.04388">Conductor</a>. Fugu-Ultra, described in the <a href="https://arxiv.org/abs/2606.21228">technical report</a>, is a more developed version: an LLM generates workflows and organizes subagent tasks, state, and context.</p>

  <p>Similar divisions of labor appear in products: the subagent mechanisms in Claude Code and Codex, and Cursor’s <a href="https://cursor.com/cn/blog/agent-swarm-model-economics">agent swarm</a>. Research systems such as <a href="https://arxiv.org/abs/2510.05592">AgentFlow</a> and <a href="https://arxiv.org/abs/2605.14483">Lemon</a> also focus optimization on a planner or orchestrator rather than jointly updating every worker. Compared with a single agent, I see two especially immediate benefits:</p>

  <p><strong>1. Context isolation.</strong> The coordinator tracks global progress while each worker focuses on a specific task. Cursor suggests that swarm scalability may owe more to context efficiency than to parallelism: a model can focus on one piece of work without retaining the details of every other task, reducing context overload.</p>

  <p><strong>2. Parallel speedup.</strong> Divide-and-conquer can reduce latency for parallelizable work. But the costs are real too. When stages depend on one another, an error can propagate downstream, and information lost in communication can leave the system worse than a single agent. These are not the only possible benefits: complementary model capabilities and cost-aware routing also matter.</p>

  <p>The bottleneck here is more accurately described as <strong>coordination and verification</strong>. Fugu can outperform any individual member of its pool on benchmarks, but the system still has to decompose tasks correctly, transmit necessary context, and recognize conflicting results. If a coordinator accepts a subagent’s report without verification, the system may fail silently. If it supplies too little context, a worker may misunderstand the task from the outset.</p>

  <p><a href="https://www.anthropic.com/research/multiagent-systems">Anthropic’s game-development experiment</a> offers an interesting comparison. Agent swarms spent 12 hours building open-world games under three organizational prompts: freely forming teams, prescribed roles, and a designated CEO. The resulting games were poor in all three conditions. Yet coordination differed across model generations. Sonnet 4.6 and Opus 4.6 struggled to merge each other’s work. Opus 4.8 and Mythos Preview largely avoided conflicts by retaining ownership of files and collaborating less directly. Sonnet 5 maintained both relatively high code sharing and a high PR merge rate.</p>

  <p>These results show that installing an organizational structure is insufficient. They do not establish that coordination can only come from the strongest models, or that stronger models will acquire it automatically. Trinity itself can delegate verification to a Verifier worker. A coordinator need not perform every difficult verification step personally; the challenge is organizing verification reliably, resolving conflicts, and deciding when to proceed. For long-running tasks with substantial dependencies, this remains my main concern about orchestration.</p>

  <h3 id="paradigm-two-multi-agent-rl">Paradigm Two: Multi-Agent RL</h3>

  <p>The second direction is <strong>multi-agent reinforcement learning</strong>. In <a href="https://arxiv.org/abs/2608.17253">Co-RL</a>, for example, several models with separate parameters undergo RL simultaneously. Each model first obtains a voted pseudo-answer from its own samples, then uses that answer to supervise another model. With more than two models, supervision can pass along a directed ring. A central finding is that cohort diversity, introduced through heterogeneous model families, sizes, and rephrased inputs, can reduce correlated errors and mitigate the training collapse associated with self-rewarding.</p>

  <p><a href="https://aclanthology.org/2025.acl-long.1459/">MAPoRL</a> and <a href="https://arxiv.org/abs/2508.04652">MAGRPO</a> belong to the broader direction, but their mechanisms differ. MAPoRL includes discussion, verifier scoring, and incentives for correction and persuasion; MAGRPO optimizes multi-turn collaboration. It would therefore be misleading to reduce all multi-agent RL to independent sampling followed by fixed voting. A fixed communication protocol does not imply that the collaborative behavior inside it cannot be learned.</p>

  <p>For methods that depend on sampled pseudo-labels, such as Co-RL, <strong>sampling coverage and supervision quality</strong> are immediate bottlenecks. At a given update, an answer must actually appear and enter the pseudo-label to provide the corresponding direct supervision. Diversity may reduce shared mistakes and expand coverage, but voting itself does not construct a solution outside the candidate pool. That is a restriction on a particular sampling-and-aggregation step, not a theorem about post-training generalization.</p>

  <p>The risk in self-rewarding also deserves precision. When a wrong answer is a stable mode of the answer distribution, treating it as a pseudo-label can reinforce the mistake. A correct-answer probability below one half does not necessarily imply that the most-voted answer is wrong: incorrect answers may be distributed across many alternatives. Cross-model supervision is useful when models do not share the same wrong mode. Highly correlated errors weaken that advantage.</p>

  <h4 id="an-offline-voting-audit">An Offline Voting Audit</h4>

  <p>To examine the mechanism, I audited samples from a Co-RL replication configuration <strong>at the start of training</strong>: 8,740 MATH-Level345 training questions, three models (Qwen2.5-3B, Llama-3.2-3B-Instruct, and Qwen3-1.7B-Base), and K=12 samples per model per question. Answer extraction and grading followed the replication repository’s code.</p>

  <p>The actual training mechanism and this additional audit must be separated. The three-model training setup uses ring-based peer supervision. The cross-model vote below is a separate offline analysis: first obtain each model’s modal answer, then give each model one vote and select the unique plurality winner. Ties are rejected. I refer to this as cross-model voting below.</p>

  <table>
    <thead>
      <tr>
        <th>Configuration</th>
        <th>All-question accuracy</th>
        <th>Label coverage</th>
        <th>Accuracy among accepted labels</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Qwen2.5-3B within-model mode</td>
        <td>50.82%</td>
        <td>100%</td>
        <td>50.82%</td>
      </tr>
      <tr>
        <td>Llama-3.2-3B-Instruct within-model mode</td>
        <td>51.57%</td>
        <td>100%</td>
        <td>51.57%</td>
      </tr>
      <tr>
        <td>Qwen3-1.7B-Base within-model mode</td>
        <td>52.32%</td>
        <td>100%</td>
        <td>52.32%</td>
      </tr>
      <tr>
        <td>Three-model cross-model vote</td>
        <td>51.48%</td>
        <td>66.34%</td>
        <td>77.60%</td>
      </tr>
    </tbody>
  </table>

  <p>All-question accuracy counts rejected labels as unsuccessful answers. Label coverage is the fraction of questions receiving an accepted label. Conditional accuracy is computed only over those questions. These metrics need to be read together: voting improved the purity of accepted labels but gave up coverage, without increasing the overall fraction of questions correctly answered.</p>

  <p>On 31.6% of questions, <strong>all three within-model modal answers were wrong</strong>. Cross-model voting rescued none of them. That zero is structural: selecting among three wrong modal answers cannot produce a correct one. It does not mean that no correct answer existed among all the original samples. Error correlations, measured by φ on modal-answer correctness, ranged from 0.48 to 0.67, with the same-family Qwen2.5–Qwen3 pair highest. This establishes shared failure patterns under the tested conditions, not the overlap of the models’ latent knowledge boundaries.</p>

  <p>I also added strong-model answers on a fixed 2,000-question subsample to examine whether equal-weight voting could preserve high-quality opinions. Each small model still supplied one modal answer, while each strong model supplied one greedy answer. Every model received one vote, and ties were rejected.</p>

  <table>
    <thead>
      <tr>
        <th>Model pool on the subsample</th>
        <th>All-question accuracy</th>
        <th>Label coverage</th>
        <th>Accuracy among accepted labels</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Three small models + GPT-5.6 Sol</td>
        <td>63.60%</td>
        <td>74.60%</td>
        <td>85.25%</td>
      </tr>
      <tr>
        <td>Three small models + Claude-Fable-5</td>
        <td>64.10%</td>
        <td>74.95%</td>
        <td>85.52%</td>
      </tr>
      <tr>
        <td>Three small models + both strong models</td>
        <td>85.20%</td>
        <td>89.30%</td>
        <td>95.41%</td>
      </tr>
    </tbody>
  </table>

  <p>These results should not be compared directly with the full-training-set table to calculate gains, nor are they a compute-matched model ranking. They probe aggregation over a given answer pool. With both strong models, accepted labels were highly accurate, but all-question accuracy remained below that conditional figure. The two strong models had 92.18% exact-answer agreement on questions where both answers parsed successfully. The result is therefore closer to agreement between two strong models gaining voting influence than to the strongest individual automatically dominating collective judgment.</p>

  <p><strong>What this audit supports is that simple equal-weight voting trades label purity against coverage and may fail to preserve high-quality minority opinions.</strong> It does not test Co-RL’s post-training capability ceiling, much less establish that multi-agent RL cannot correct errors. Thinking of Co-RL as cross-model pseudo-label supervision that transfers useful capabilities between peers is helpful, but the interpretation must remain faithful to its actual ring-based training mechanism.</p>

  <h3 id="bottlenecks-and-directions-worth-exploring">Bottlenecks and Directions Worth Exploring</h3>

  <p>I still think that increasing <strong>useful diversity</strong> in model samples, then finding ways to exploit those differences, is a promising direction for collective intelligence.</p>

  <h4 id="the-sampling-distribution-perspective">The Sampling-Distribution Perspective</h4>

  <p>There is evidence for the diversity half. Co-RL’s ablations support heterogeneous families and input rephrasing as ways to reduce correlated errors and mitigate collapse. <a href="https://www.anthropic.com/research/multiagent-systems">Anthropic’s experiments</a> illustrate the opposite problem: low variance among agents built on the same model. In a game-development run, 18 of 30 agents created a branch named <code class="language-plaintext highlighter-rouge">mvp-game-loop</code>. In a bandwidth-limited job-queue experiment, agents deployed high-frequency polling; one run produced 2.4 million requests but only 117 accepted jobs. Similar individual tendencies can become systemic failures when amplified across a group.</p>

  <p>One difficulty is that post-training often sharpens the output distribution and reduces diversity. <a href="https://arxiv.org/abs/2501.18101">DivPO</a> directly optimizes response diversity subject to quality constraints. <a href="https://arxiv.org/abs/2604.24320">DPEPO</a> encourages diverse parallel exploration through action and state-transition rewards. <a href="https://arxiv.org/abs/2606.10587">EvoDiverse</a> draws on parallel tempering to counter collapse during inference-time scientific hypothesis search. These methods operate on different objects, but all suggest that retaining only a single high-scoring mode can discard valuable candidates. Raising temperature changes the sampling distribution; it does not guarantee high-quality, semantically complementary solutions.</p>

  <p>This leads to a more basic question: what should diversity be defined over? Work on <a href="https://arxiv.org/abs/2402.11493">knowledge boundaries</a> offers a useful concept. A model answering incorrectly under one wording may answer correctly under a semantically equivalent prompt. A single sample therefore cannot represent everything the model can reach on that question. Conversely, a finite paraphrase search cannot prove that this range has been exhausted.</p>

  <p>For multi-agent systems, I want more than models happening to answer differently on a particular draw. I want to <strong>reduce shared blind spots and expand complementary coverage while preserving quality</strong>. Shared correct foundational knowledge is useful. Minimizing knowledge-boundary overlap indiscriminately could instead be achieved by forgetting knowledge or introducing errors.</p>

  <p>I find nrehiew’s <a href="https://nrehiew.github.io/blog/sft_rl_opd/">distributional view of post-training</a> helpful for organizing this intuition. SFT supplies a target through external data, whereas online RL receives feedback on trajectories visited by the current policy. The former can demonstrate behavior the current model rarely samples; the latter’s exploration depends on its current sampling distribution. This is not a rigorous capability-boundary argument. To separate several models through SFT, we still need distinct high-quality target data or explicit constraints. RL can also reshape exploration through quality and diversity objectives.</p>

  <p>I would like agents in future multi-agent systems to have more heterogeneous distributions without sacrificing basic competence, providing genuinely complementary perspectives rather than merely receiving different role prompts.</p>

  <h4 id="the-fusion-perspective">The Fusion Perspective</h4>

  <p>Fusion is the harder half. Ordinary answer voting requires candidates that can be tested for equivalence, which makes it difficult to apply directly to many open-ended tasks and long-horizon trajectories. <a href="https://arxiv.org/abs/2603.20324">When Agents Disagree</a> calls this the selection bottleneck: in its model and single-round selection experiments, the benefit of a diverse pool depends on selector quality. This should not be generalized into a law for all fusion mechanisms, but it raises a useful question. If a system cannot recognize the value in differences, do more candidates provide opportunities or merely add noise?</p>

  <p>Once a learned fusion module needs to read multiple candidates, identify what each gets right, and combine useful parts, it begins to resemble the coordinator in the first paradigm. Still, selecting a complete candidate, synthesizing several proposals, and coordinating long-running execution are different tasks. They need not all belong to a single module.</p>

  <p><a href="https://cursor.com/cn/blog/agent-swarm-model-economics">Cursor’s SQLite experiment</a> provides quantitative failure records. The old swarm generated 68,000 commits during its first two hours and accumulated more than 70,000 merge conflicts before being paused near the two-hour mark. The most contested file was modified by 1,173 agents and incurred 7,771 conflicts. The project expanded to 54 crates, including three independent SQL packages.</p>

  <p>The improved comparison matters more. With the same models, harness changes including neutral arbitration agents, shared design documents, and oversized-file flags substantially reduced conflicts. This is not evidence that models learned coordination through training. It is evidence that <strong>mechanism design can improve collective performance</strong>. Environments and protocols are part of a collaborative system.</p>

  <p>Diversity can also be introduced by distributing different information to different agents, but aggregating it is difficult. In <a href="https://www.anthropic.com/research/multiagent-systems">Anthropic’s hidden-profile experiment</a>, facts were distributed across four agents: shared evidence favored the wrong option, while unique information could change the decision. After discussion, collective performance still fell short of the solo ceiling, where one agent received every fact. Distributed possession of information does not guarantee effective use. Recognizing the importance of private evidence, communicating it, and getting other members to update their judgments are all capabilities that need to be addressed.</p>

  <p>I hope more reliable coordination mechanisms can extract important information from diverse trajectories and steadily advance work toward a global objective. They may come from stronger models, but also from better verification, protocols, environmental feedback, and training objectives. The two directions meet here. The question I most want to pursue is how to create valuable differences, then prevent them from being erased as a group arrives at a collective judgment.</p>

  <p><a href="#chinese">返回中文 / Back to Chinese ↑</a></p>

</section>

<hr />

<section id="cite">

  <h2 id="cite-en" data-language-text="en" lang="en">Cite this post</h2>
  <h2 id="cite-zh" data-language-text="zh" lang="zh-CN">引用本文</h2>

  <p data-language-text="en" lang="en">Please cite this post as:</p>
  <p data-language-text="zh" lang="zh-CN">如需引用本文，请使用以下格式：</p>

  <div class="language-bibtex highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">@article</span><span class="p">{</span><span class="nl">xie2026collective</span><span class="p">,</span>
  <span class="na">title</span> <span class="p">=</span> <span class="s">{Where Collective Intelligence Hits Its Ceiling}</span><span class="p">,</span>
  <span class="na">author</span> <span class="p">=</span> <span class="s">{Jinxiang Xie}</span><span class="p">,</span>
  <span class="na">journal</span> <span class="p">=</span> <span class="s">{jxtse.github.io}</span><span class="p">,</span>
  <span class="na">year</span> <span class="p">=</span> <span class="s">{2026}</span><span class="p">,</span>
  <span class="na">month</span> <span class="p">=</span> <span class="s">{September}</span><span class="p">,</span>
  <span class="na">url</span> <span class="p">=</span> <span class="s">"https://jxtse.github.io/blog/where-collective-intelligence-hits-its-ceiling/"</span>
<span class="p">}</span>
</code></pre></div>  </div>

</section>]]></content><author><name>Jinxiang Xie</name></author><category term="AI" /><category term="Research" /><summary type="html"><![CDATA[A closer look at orchestration, multi-agent reinforcement learning, and an offline voting audit: why diverse agents do not automatically deliver collective gains, and what it takes to preserve useful differences through coordination and fusion.]]></summary></entry><entry><title type="html">Consolidating an Agent That Outgrew Itself</title><link href="https://jxtse.github.io/blog/agent-consolidation/" rel="alternate" type="text/html" title="Consolidating an Agent That Outgrew Itself" /><published>2026-08-23T00:00:00+08:00</published><updated>2026-08-23T00:00:00+08:00</updated><id>https://jxtse.github.io/blog/agent-consolidation</id><content type="html" xml:base="https://jxtse.github.io/blog/agent-consolidation/"><![CDATA[<p>I have now been using Hermes heavily for months. Its biggest selling point is a self-improving loop: whenever it solves a hard problem, it packages the solution as a reusable skill and loads it next time. Great in theory. In practice, the library only grows, and problems pile up over time. Last week I spent a full day on consolidation, dedicated to auditing what was already there and cleaning up what had accumulated.</p>

<h2 id="the-skill-library">The skill library</h2>

<p>After months of heavy use, my Hermes library had 272 skills. I audited all of them by actual load history. 25 had zero loads across 100 days of available history. They were injected into the context window on every turn, costing tokens and polluting recall, and had never been called once. Another 16 were Codex skills stalled at 5 or fewer sessions, untouched for over a month. 41 skills in total, about 15% of the library, doing nothing but taking up space.</p>

<p>11 of those 25 zero-load skills were created by Hermes’s own self-improving loop. It kept packaging solutions to one-off problems, adding them to the library, and they sat there forever. A skill for architecture diagrams. A skill for kanban task lanes. Each solved a real problem once, got packaged, and was never used again.</p>

<p>So I built a retirement system.</p>

<p>The only honest signal is that Hermes actually loaded a skill, which gets logged. A skill becomes a retirement candidate if it is at least 60 days old with zero loads across 60 days of history. Loaded fewer than twice ever and untouched for 90 days, it goes to manual review. New installs get a 60-day grace period, because a fresh skill has not had time to prove itself.</p>

<p>Not everything low-usage gets retired. Suite skills that come in families, governance and infrastructure skills, memory and model routing, core debugging tools are pinned and never auto-retired. Some have near-zero load frequency and that is fine, because deleting them breaks a suite or removes something I would really want the day I suddenly need it.</p>

<p>After the cleanup the library is at 231 skills. Even now, 48 of those have never been loaded and 111 have been used twice or fewer. The honest number I actually need is probably half of what is left. A recurring audit cron job keeps working through them.</p>

<p><img src="/images/2026-08-23-agent-consolidation/fig1-skill-usage.jpg" alt="Usage distribution of the 231 remaining skills" />
<em>Figure 1 | Usage distribution of the 231 remaining skills. From the usage-history audit of 22 Aug 2026; a load means Hermes opened the skill instructions.</em></p>

<h2 id="credentials">Credentials</h2>

<p>Hermes now ships a way to store API keys securely on the local machine, but somehow my machine was covered in API keys Hermes had stored in plaintext. This includes keys I had pasted into chat messages — those get stored verbatim in session history and can be surfaced later by the session-search tool. Not great.</p>

<p>Several of its skill scripts were reading API keys from <code class="language-plaintext highlighter-rouge">~/.zshrc</code> and <code class="language-plaintext highlighter-rouge">~/.hermes/.env</code> — plaintext files with full credentials on disk. The Feishu gateway scripts sourced the env file directly. The Zotero helper shelled out to <code class="language-plaintext highlighter-rouge">source ~/.zshrc</code> and parsed the output. The WeRead analysis script read the key from a line in <code class="language-plaintext highlighter-rouge">~/.zshrc</code> by anchoring on the key prefix. A few of these scripts Hermes had written for itself. So Hermes was creating code that read my secrets, storing that code in its own library, and running it with my permissions.</p>

<p>I migrated everything to a secrets manager. Config files now reference environment variables, not raw keys. Secrets get injected at runtime from Bitwarden, cached in an encrypted local file (ChaCha20-Poly1305 with HKDF-derived keys). Skill scripts only read from the process environment; if a key is not there, they fail closed. And I turned on automatic redaction of key-like strings in tool output, so even if a secret leaks into a log, it gets masked before it hits the context window.</p>

<p>Cases from around the internet show that sometimes the threat model is not a remote attacker. It is Hermes itself — reading a file it should not, echoing a key into a prompt, or writing a script that sources your shell config. My fix is defense in depth: no plaintext secrets on disk, runtime injection only, fail-closed scripts, output redaction. Any one layer can fail without exposing credentials, because the others are still in place.</p>

<p>One more benefit: I can now add, edit, view, and delete all my API keys in one place in the Bitwarden web UI, and distribute them quickly and safely to any new device — like a freshly provisioned cloud server.</p>

<h2 id="the-context-window">The context window</h2>

<p>Hermes’s fixed context is more than just skills. Before every model call, the system prompt, MEMORY.md, USER.md, and the skill index enter the context window together. Almost all of them keep growing through Hermes’s self-improving mechanisms.</p>

<p>I measured a complete fixed prefix: about 174 KB, roughly 43.5K tokens. The system prompt (with the skill index) was about 72 KB, MEMORY.md about 21 KB, USER.md about 9 KB, tool schemas about 72 KB. The problem is not just cost. Before the model has even seen the user’s question, this information has already claimed a large share of the context window.</p>

<p>Some background on how my memory system is layered — three layers. At the top are MEMORY.md and USER.md, two Markdown files injected in full at session start, acting as a compressed global index: who I am, stable preferences, system conventions, one line per project. The second layer is Research Brain, a local Markdown + Git repository that is the authoritative fact layer for all research projects. Each project has a working brief, decision records, a timeline, and open questions; Hermes writes back new decisions and experiment results append-only, and multiple agents (Hermes, Claude Code, Codex) share the same copy. It is not injected into context — it gets opened by path when needed. The third layer is mem0local, local semantic retrieval (vectors + BM25) over atomic facts. Each turn automatically recalls the few most relevant entries, and the agent can search it explicitly; high-confidence facts from Research Brain get distilled into memory cards and indexed by a nightly pipeline. The layering principle is simple: the higher up, the more stable and compressed; the lower down, the more detailed and retrieved on demand.</p>

<p>Unlike the skill library, the treatment for memory was not deleting content — it was moving low-frequency detail from resident-every-turn to retrieved-on-demand. MEMORY.md and USER.md now keep only stable preferences, key constraints, and a few high-value facts, no longer serving as a project database; concrete project state lives in Research Brain, fine-grained history lives in retrievable memory. In the system prompt I removed duplicated rules, folded low-frequency skill categories down to names only, and let most tool schemas load on demand through a search-and-describe mechanism.</p>

<p>After the pass, the fixed prefix went from about 174 KB to 76 KB — roughly 43.5K tokens down to 19K, a 56% reduction. Skill descriptions alone went from about 76k characters to 51k, down 33%.</p>

<p><img src="/images/2026-08-23-agent-consolidation/fig2-fixed-context.jpg" alt="Fixed-prefix composition before and after context slimming" />
<em>Figure 2 | Fixed-prefix composition before and after context slimming. Measured 17 Aug 2026; 173.9 KB → 75.8 KB (roughly 43.5K → 19K tokens).</em></p>

<h2 id="the-auditor">The auditor</h2>

<p>My current main model is GPT-5.6 Sol, and I set up Claude Fable 5 to audit Hermes’s decisions. Not to do the work — to check the work. Before costly execution or consequential conclusions, the main model has to get an independent opinion from a different model. The auditor runs as a fresh session with no inherited context, gets a minimal brief, and returns a judgment.</p>

<p>The first version of this mechanism took a wrong turn. I wrote a pile of rules telling the main model when to consult: deep analysis, consult; research design, consult; causal interpretation, consult; important reviews, consult — plus a list of exemptions. The result: every turn, the model first had to decide whether its current situation matched the conditions, and that decision is itself exactly where models are most error-prone. The finer the rules, the less reliably they were followed.</p>

<p>Eventually the whole mechanism collapsed into one invariant: <strong>Sol executes; consult Fable at two lifecycle checkpoints, at most once per checkpoint.</strong> One comes before execution, answering how this should be done. The other comes before a consequential conclusion — after Sol has inspected first-hand evidence and formed a preliminary judgment — answering whether that judgment is sound and whether there is a better explanation.</p>

<p>I built a deliberately small interface: one script, two invocation forms — <code class="language-plaintext highlighter-rouge">consult_fable.py plan</code> and <code class="language-plaintext highlighter-rouge">consult_fable.py reason</code>. Each has a fixed packet schema: plan takes the goal, confirmed facts, constraints, and acceptance criteria; reason takes the question, the evidence, and the preliminary judgment. The design philosophy: the fewer interfaces you give the model, the higher the odds it follows them strictly. It does not need to understand the reasoning behind the design — it just calls one command once at each of two checkpoints.</p>

<p>The auditor itself is constrained. It runs as an independent Hermes sub-session with only two read-only tools — session-history search and skill loading. It can look up past discussions and load domain rules, but cannot execute commands, modify files, access the network, or delegate further, and it has a turn cap. Its entire output is one structured judgment; all tools, actions, and final decision authority stay with the main model. Consulting is getting an opinion, not transferring control.</p>

<p>I analyzed the last 12 consultations. It caught two real errors.</p>

<p>First: the main model framed an observability problem as build-a-dashboard. The auditor returned a NARROW verdict and corrected the premise. The real issue was attribution, not visualization. A dashboard would have produced a dashboard, but the actual problem was that I could not tell which layer was causing the latency, and no amount of charting would answer that.</p>

<p>Second: I redesigned a checkpoint system to eliminate a branching decision. The auditor pointed out I had not eliminated the branch — I had moved it. The old system had a structured trigger that could be checked deterministically. The new one replaced it with a semantic judgment the model had to make at runtime. Strictly worse, because the model is the part most likely to miss it, and now the check itself depended on the model being reliable.</p>

<p>Both catches were the same class of error: Hermes’s reasoning being confidently wrong in a way it could not detect itself. The auditor worked because it started fresh, with no sunk cost in the main model’s analysis. It did not have the context — and that was the point. A second model with the same context would have the same blind spots. The value of the audit is that it comes from outside the frame.</p>

<p>12 consultations, 2 catches, 0 complete failures. Not every check found something, but the ones that did were worth far more than the token cost of running them.</p>

<h2 id="what-i-learned">What I learned</h2>

<p>The shift is treating Hermes like a codebase that needs lifecycle management, not a collection that only grows. Skills retire. Credentials rotate. Context compresses. Decisions get audited. Adding things is the fun part — but maintaining the system, keeping it honest, and letting things go is engineering work you cannot skip.</p>

<section id="cite">

  <h2 id="cite-this-post">Cite this post</h2>

  <p>Please cite this post as:</p>

  <div class="language-bibtex highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">@article</span><span class="p">{</span><span class="nl">xie2026consolidation</span><span class="p">,</span>
  <span class="na">title</span> <span class="p">=</span> <span class="s">{Consolidating an Agent That Outgrew Itself}</span><span class="p">,</span>
  <span class="na">author</span> <span class="p">=</span> <span class="s">{Jinxiang Xie}</span><span class="p">,</span>
  <span class="na">journal</span> <span class="p">=</span> <span class="s">{jxtse.github.io}</span><span class="p">,</span>
  <span class="na">year</span> <span class="p">=</span> <span class="s">{2026}</span><span class="p">,</span>
  <span class="na">month</span> <span class="p">=</span> <span class="s">{August}</span><span class="p">,</span>
  <span class="na">url</span> <span class="p">=</span> <span class="s">"https://jxtse.github.io/blog/agent-consolidation/"</span>
<span class="p">}</span>
</code></pre></div>  </div>

</section>]]></content><author><name>Jinxiang Xie</name><email>jxTse@outlook.com</email></author><category term="AI" /><category term="Agents" /><category term="Engineering" /><summary type="html"><![CDATA[After months of heavy use, my AI agent had accumulated 272 skills, plaintext API keys, and a 43K-token fixed context — with no way to check its own reasoning. A day of consolidation: usage-based skill retirement, secrets management, context-layer slimming, and a second-model auditor that caught two real errors.]]></summary></entry><entry><title type="html">Staying Grounded in Fast-Paced AI Research</title><link href="https://jxtse.github.io/blog/how-to-cope-with-fast-paced-research/" rel="alternate" type="text/html" title="Staying Grounded in Fast-Paced AI Research" /><published>2026-06-17T00:00:00+08:00</published><updated>2026-06-17T00:00:00+08:00</updated><id>https://jxtse.github.io/blog/how-to-cope-with-fast-paced-research</id><content type="html" xml:base="https://jxtse.github.io/blog/how-to-cope-with-fast-paced-research/"><![CDATA[<h1 id="快节奏科研下我们如何自处">快节奏科研下，我们如何自处？</h1>

<p>最近读了很多优质的 blog、paper 和 podcast，深感当前 AI 领域更新迭代之快——我们才刚接受了能连续运行十几个小时的 coding agent，迎面又走来了 recursive self-improvement（RSI）、on-policy self-distillation（OPSD）、loop engineering 等一连串新名词。</p>

<p>面对这种节奏，我最近最大的感悟是：我需要一套完善的科研基础设施。这套系统帮我过滤掉大部分的信息噪音，让我专注在真正感兴趣的方向，以及持续追踪并落地我的进展。</p>

<p>我目前正在着手搭建这套系统。在搭建过程中整理出了几条 principles，拿出来和大家讨论。</p>

<hr />

<h2 id="1-信息源的优先级blog--peer-reviewed-paper--arxiv-paper--podcast--社交媒体">1. 信息源的优先级：Blog ＞ Peer-Reviewed Paper ＞ arXiv Paper ＞ Podcast ＞ 社交媒体</h2>

<p>最近读了不少让我收获巨大的 blog。比如 《SFT, RL, and On-Policy Distillation Through a Distributional Lens》，一个人加一个 Claude，从 distribution 的视角把 SFT、RL 和 OPD 的本质区别讲透了，附带实验表格和代码，信息密度远超大多数正式论文。再比如 Anthropic 的 《When AI Builds Itself》，把 RSI 的可能性和风险掰开讲，图文并茂，引用齐全。这些文章给我带来的 insights 完全超过了读绝大多数论文。</p>

<p>我觉得一种趋势在形成：<strong>当一个好的技术被发明出来，它会先出现在 blog 里，然后才是 arXiv，然后是顶会，最后被科技媒体报道。等到达大众眼前，可能已经过了半年。</strong></p>

<p>以 on-policy distillation（OPD）为例。我最早学到这个概念是在 Thinking Machines Lab 2025 年 10 月底的 blog。五个月后的 2026 年 3 月，arXiv 上才出现第一批系统性的 OPD 论文；4 月有人写了综述；5 月 ICML 接收了相关工作。如果你只读论文，你看到 OPD 的时候，读 blog 的人已经用了半年了。</p>

<p>同时，随着 AI 的进步我感觉 arXiv 上论文的整体质量在下滑，很多 paper 是为了发而发。相比之下，blog 更”轻”——通常没有完整的故事线，也不需要天衣无缝的实验，适合碎片时间阅读，排版对手机也友好。而且论文要照顾 reviewer 的口味，blog 只需要对读者负责，反而更敢讲真话。</p>

<p>当然，只读 blog 获取到的信息一定是不全面的。Blog 带有机构立场，选题有倾向性，阅读经过同行审议的论文仍然不可缺少。</p>

<p><strong>那 podcast 为什么排在 arXiv 后面？</strong> 好的 podcast 有一种独特的价值：你能听到专家”即兴地思考”，那些还没有成型到可以写成文章的直觉、判断、甚至犹豫，经常藏在对话的间隙里。但 podcast 的问题是信息密度太低。一期一小时的节目，真正有价值的 insight 可能集中在其中五分钟。而且 podcast 的内容很难被引用、很难被检索，听完之后如果没有刻意整理，大部分东西几天就忘了。所以它更适合当作”灵感源”而非”知识源”——用来发现值得深入的方向，然后去找对应的 paper 或 blog 来读。</p>

<p><strong>社交媒体排在最后，但不是没有用。</strong> Twitter/X 上确实有一线研究者发 thread 分享新工作，有时候一条推就能让你知道某个方向有了重大进展。但Hot take、阵营站队、”XX is dead”这类声音占据了绝大多数的注意力带宽，实际有信息量的内容被淹没在噪音里。更麻烦的是，社交媒体制造一种”我在学习”的错觉——你刷了一个小时的小红书 AI 内容，感觉自己跟上了前沿，但回头一想什么都没记住。</p>

<p>综合上面的原因，我给出的排序是 <strong>Blog ＞ Peer-Reviewed ＞ arXiv ＞ Podcast ＞ 社交媒体</strong>。这个排序优化的是获取前沿 insights 的效率，不是信息的严谨度。从整体质量上来看 peer-reviewed paper 肯定明显更高，blog 和 arXiv 都存在质量层次不齐的问题，但好在我们可以通过 AI 来筛选。</p>

<p>我现在搭了一个每天自动运行的信息简报系统。系统每天并行从多个渠道抓取过去 24 小时的内容：包括卡兹克老师的 AI HOT（一个聚合了 168 个手工筛选的 AI 信源的精选站，自带多维评分和事件聚类）、十几个我手动挑选的深度 blog RSS、X/Twitter 上我 follow 的研究者的最新动态等。然后用我设计的一套算法来做确定性筛选，先用硬编码的排序规则初筛，然后让大模型结合对我的记忆进行挑选，最后输出一份 5-7 条的精选简报。</p>

<hr />

<h2 id="2-对-research-question-的深入理解依然是人类不可替代的关键技能">2. 对 research question 的深入理解，依然是人类不可替代的关键技能</h2>

<p>从 prompt engineering，到 context engineering，到 harness engineering，再到最近火起来的 loop engineering——我们对如何驾驭模型的理解越来越深。但新的知识是永远学不完的，今天刚学的 mcp 明天可能就过时了，我们应该关注研究中更加本质的东西。</p>

<p>我本人更加关注的是新技术如何对现实世界产生积极影响。因为真实世界的问题，全都是 domain-specific 的，不是一句简单的”X engineering”就概括的。</p>

<p>这中间存在一个巨大的鸿沟。经济学里有个经典概念叫 technology diffusion（技术扩散）——一项新技术从被发明到真正在各行各业中被广泛应用，中间往往隔着漫长的时间。在 AI 领域，这个鸿沟今天依然存在：模型的通用能力已经很强了，但要把它变成某个领域里真正能用的工具，仍然需要大量的翻译工作。<strong>谁来做这个翻译？</strong> 不是模型自己——它不知道有机合成里哪个反应在工业上不可行，也不知道临床上哪些指标的组合意味着需要进一步检查。这个翻译工作需要的是同时懂 CS 和懂领域的人来做。</p>

<p>这就是 harness engineering 真正要解决的问题。Harness 不是一个 prompt，不是一句 system instruction，而是 agent 在解决一个任务时依赖的<strong>整套脚手架</strong>：它有哪些工具可以调用、它的记忆结构是什么样的、它怎么把一个大任务分解成子任务、它怎么评价自己某一步做得好不好、它在什么情况下该回退换一条路。当我们说 Agent 能在 Coding 和 Math 上表现出超强实力时，背后的原因不只是模型强——更关键的是这两个领域天然自带一套高质量的 harness：代码可以运行，有编译器和测试用例做即时验证（verifier）；数学有精确答案，可以自动判断对错。也就是说，<strong>Coding 和 Math 的 harness 是容易的，而其他领域的 harness 需要人来构建。</strong></p>

<p>我自己的研究就在做这件事。</p>

<p>当我跟化学家合作时，我发现他们真正的决策流程完全不是教科书上的样子。真正的化学家拿到一个目标分子，第一件事不是查反应数据库，而是先看这个分子的骨架像什么，所以我先试着往那个方向拆。他们心里有一套启发式的直觉，会考虑成本、产率、那条路线在实验室里是不是真的好操作，会考虑什么时候该果断放弃一条走不通的路线。这些东西没有写在任何论文里，但它们决定了一条路线的好坏。</p>

<p>要让 Agent 做到这个水平，需要给 Agent 构建一整套围绕化学反应的 harness：能调用多个互补的逆合成预测模型（而不是只依赖单一模型）；能查 SMILES 的合法性和化学可行性（verifier）；能检索已知的合成先例（precedent retrieval）；能评估一条路线的综合质量。这套 harness 里的每一个组件都需要对化学的真实理解，不是通用的 agent framework 能自动生长出来的。</p>

<p>另一个项目也是同样的逻辑。我在和临床研究者合作中，需要理解不同队列（cohort）的人群特征差异、各种生物标志物在不同年龄段的临床意义等，以及真正的临床医生是如何判断患病风险的。这些领域知识，不是你把论文喂给 GPT 它就能 figure out 的。</p>

<p><strong>而且这里有一个顺水推舟的逻辑。</strong> 一旦构建出了领域 harness，agent 在这个领域里解题时自然会产生大量的 trajectory。这些 trajectory 天然就是高质量的训练数据：走通的路线可以拿去做 SFT ，整个过程还可以用来做 GRPO 或者 on-policy distillation。也就是说，<strong>当你在一个领域扎得够深、把 harness 构建完善之后，那些当下最火的训练算法自然就有了用武之地</strong>——你不需要硬凑一个场景去套算法，而是算法自然地成为你已有 pipeline 的下一环。</p>

<p>所以我想说的是：不是因为什么东西火就去追，而是找到自己愿意深耕的方向，投入进去。</p>

<p>投入进去的一个重要标志是构建自己的 research ecosystem——让别人一看到文章标题就觉得”这是你们组的工作”。上周末我在智源大会上聆听了很多前辈的分享，比如港大黄超老师的组就是一个很好的例子。他们围绕 Agent 构建了一整套生态，每一个工作都在解决同一个核心问题的不同切面：让 Agent 更好地使用工具、更好地存储 memory、更好地管理 multi-agent 协作，从而更好地解决 long-horizon tasks。一个方向，一系列工作，互相支撑，越做越深。</p>

<hr />

<h2 id="3-构建一套完善的科研基础设施">3. 构建一套完善的科研基础设施</h2>

<p>也是在智源大会上，西湖大学张岳老师分享了他们在科研基础设施上的工作：用于科研绘图的 AutoFigure-Edit（强调”可控生成”和”可修改”），以及用于管理科研流程的 DeepScientist（持续推进研究任务，辅助组会和论文写作）。</p>

<p>这个分享让我意识到：AI 的训练需要强大的 AI Infra，我的日常科研同样需要。</p>

<p>我自己的痛点很明确：Agent 的 memory 散落在本地的 Codex、Hermes、以及服务器上的 Claude Code 里；关于 idea 的迭代在我和 GPT-5.5 Pro 的网页对话里；项目进展在飞书文档里。每个工具各自工作得不错，但它们之间完全割裂。</p>

<p>具体来说有三个问题：</p>

<p><strong>第一，缺乏顶层认知。</strong> 我换一个工具就要重新交代一遍项目背景。Codex 不知道我昨天在 Claude Code 里做了什么决策，Claude Code 不知道我在飞书上和导师讨论了什么方向调整。每个 agent 都是有能力的”新员工”，但都没有项目的全景记忆。</p>

<p><strong>第二，缺乏主动性。</strong> 没有系统能 proactively 推进我的研究。比如自动整理昨天的实验结果、发现某个 open question 有了新的相关工作、或者在我忘记某个 decision 的 rationale 时帮我回溯。AI 只在我主动 prompt 的时候干活。</p>

<p><strong>第三，认知负担全在我身上。</strong> “这个实验该跑了”、”那篇论文该读了”、”这个 idea 得记下来”——所有元管理全靠大脑调度，AI 只是被动的执行者。</p>

<p>于是回来后我开始着手搭建一套系统。目前已经跑起来的核心架构是这样的：</p>

<p><strong>统一记忆层：research-brain。</strong> 这是一个纯 Markdown + Git 的本地仓库，作为所有 agent 的共享长期记忆。我把 Codex、Claude Code 的 memory、以及 Hermes 的记忆系统全部指向了同一个 brain。</p>

<p><strong>Nightly dream：离线整理。</strong> 每天凌晨自动运行一个”做梦”流程：把白天在各个 agent 里的对话日志收集回来——本地的 Codex 和 Claude Code 会话、远程 GPU 服务器上的日志，全部 rsync 回 brain 的原始证据层。然后用 LLM 对这些 session 做提炼，抽取持久性事实。</p>

<hr />

<h2 id="最后">最后</h2>

<p>快节奏的科研环境里，焦虑是默认状态。每天打开 Twitter 看到一堆新东西没来得及学，很容易觉得自己在掉队。</p>

<p>我的应对方式不是跑得更快，而是搭一个让自己能沉下来的系统。让 AI 去追热点、过滤噪音、管理琐碎。我把注意力留给两件事：深入理解我关心的领域问题，以及持续构建这套基础设施本身。</p>

<p>前者是安身立命的根基，后者是让前者能持续运转的引擎。</p>

<p>与诸位共勉。</p>

<section id="cite">

  <h2 id="section">引用本文</h2>

  <p>如需引用本文，请使用以下格式：</p>

  <div class="language-bibtex highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">@article</span><span class="p">{</span><span class="nl">xie2026grounded</span><span class="p">,</span>
  <span class="na">title</span> <span class="p">=</span> <span class="s">{Staying Grounded in Fast-Paced AI Research}</span><span class="p">,</span>
  <span class="na">author</span> <span class="p">=</span> <span class="s">{Jinxiang Xie}</span><span class="p">,</span>
  <span class="na">journal</span> <span class="p">=</span> <span class="s">{jxtse.github.io}</span><span class="p">,</span>
  <span class="na">year</span> <span class="p">=</span> <span class="s">{2026}</span><span class="p">,</span>
  <span class="na">month</span> <span class="p">=</span> <span class="s">{June}</span><span class="p">,</span>
  <span class="na">url</span> <span class="p">=</span> <span class="s">"https://jxtse.github.io/blog/how-to-cope-with-fast-paced-research/"</span>
<span class="p">}</span>
</code></pre></div>  </div>

</section>]]></content><author><name>Jinxiang Xie</name><email>jxTse@outlook.com</email></author><category term="Research" /><category term="AI" /><summary type="html"><![CDATA[Three principles for navigating the AI research firehose: prioritizing information sources (blogs over papers for frontier insights), building domain-specific harnesses instead of chasing hype, and constructing a personal research infrastructure with unified memory and automated pipelines.]]></summary></entry><entry><title type="html">My 2025 | Through Romance, Finding Stability</title><link href="https://jxtse.github.io/blog/my-2025/" rel="alternate" type="text/html" title="My 2025 | Through Romance, Finding Stability" /><published>2026-01-07T00:00:00+08:00</published><updated>2026-01-07T00:00:00+08:00</updated><id>https://jxtse.github.io/blog/my-2025</id><content type="html" xml:base="https://jxtse.github.io/blog/my-2025/"><![CDATA[<h1 id="我的2025穿过浪漫找到了安定的答案">我的2025｜穿过浪漫，找到了安定的答案</h1>

<p>封面图：我在家的工位</p>

<p>我发现自己的每一年，似乎都会被切成两半。今年尤其明显。上半年像一张不断外扩的地图，充满冒险、文化体验和重要的里程碑。我领略了令人惊叹的自然风光，从四川的日照金山到云南郁郁葱葱的草甸；我穿梭在北京、成都、重庆、吉达，甚至纽约的城市脉搏里，感受它们各自的喧哗与秩序；同样见证了许多重要时刻，比如我的毕业，以及与人分享的无数顿美味佳肴。</p>

<p>下半年随着回家和研究生入学，我的生活半径突然收拢。曾经觉得触手可及的世界，一下子变得虚无缥缈起来。我在宁马双城之间过上了更安定的生活，移动更少，坐得更久，思考也更密集，学会在更小的半径里把生活过得更加安定富足。</p>

<h2 id="时间复利系统的迭代增益">时间复利：系统的迭代增益</h2>

<p>再翻看我之前的年终总结，我能清晰地看到一条成长曲线。我在 2022 年的总结里写，2022 是几乎一事无成的一年，但站在今天回看，其实不然。很多当时觉得微不足道的小事，在时间里悄悄生息，到了今天已经长成了很难忽视的影响。这就是时间的复利。</p>

<p>比如 2022 年，我定下了第一个 9 a.m. project，后来逐渐演化成我的 morning routine。现在我会设定一个保底版本，哪怕出游或状态差的时候，仍然能完成一个缩水版，不至于整天崩盘，保障了我每日的基本生产力。</p>

<p>比如 2022 年，我开始关注海外的科技媒体，从而在 ChatGPT 发布 6 个月之前就关注到了 OpenAI（最初应该是因为他们的图片生成模型），并成为了 ChatGPT 发布后的首批用户。ChatGPT 带给我的震撼是长久的，深深地影响了从事的科研方向，更是直接决定了我后来的研究生选择。</p>

<p>比如 2023 年，我开始在有知有行记录投资收益。到今天，我已经有了一套相对完整的资产配置，包括 A 股、美股、港股和一些债券，也跑出了大约 8% 的年化收益率。现在我会刻意避免加杠杆和高频短线，更希望组合能在可控回撤下缓慢增长。</p>

<p>也是在 2023 年，我开始 build 我第一个大模型的项目。今年我的几乎所有文字创作都会过一遍 ChatGPT。它已经积累了海量关于我的记忆数据，总是能为我提供一些我没有关注到的边界信息和视角（这也是我至今没有动力完全迁移到 Google Gemini 的原因）。我也从一个懵懵懂懂的入门研究者，走到今天能用大模型去解决一些真实世界的问题。</p>

<p>有一天我问ChatGPT：「</p>

<p><strong>请根据你对我的记忆，有哪些事情是我自己意识不到的，但是如果明白了就能改变我的生活的残酷真相？请坦诚告诉我，以完全客观性的战略深度审视我的情况。」</strong></p>

<p><img src="./images/2026-01-07-my-2025/650.jpg" alt="" />
<em>ChatGPT的回复</em></p>

<p>它的答案的确让我心里一紧。我意识到自己太偏爱 exploration 而忽视 exploitation：我开启了一个又一个 side project，却缺少清晰主线，也缺少把一件事打磨到可交付状态的能力和耐心。我一边想做真正的研究，一边又被绩点、竞赛等「学生思维」的琐事牵住，这些事情收益低，却让我分身乏术，陷入时间贫困。我也花了很多时间空想，脑中有无数 well-designed 的 idea，但很少真正动手把它们做出来。看起来是三个问题，本质上其实是同一个问题：我对如何分配自己的精力缺乏足够清晰的规划。</p>

<p>为了扭转这种局面，我先梳理了当下的工作，逼自己至少交付一件看得见的成果。最容易交付的当然还是写作，于是我总结了近几个月的工作，写了技术博客《<a href="https://mp.weixin.qq.com/s?__biz=Mzg5NzczMzM3MA==&amp;mid=2247484184&amp;idx=1&amp;sn=e4f6d54b3c04f9e91b7f3c5f9eecc0f2&amp;scene=21#wechat_redirect">Claude Code Skills 和 Subagents 的个人实践</a>》，分享了我在AI加持的自动化工作流方面的研究心得。这也逐渐变成了我今年后几个月的研究主线：让自动化 AI 参与到真正有价值、能解决真实世界问题的任务中去。</p>

<p>这篇博客在小红书和公众号都收获了不错的反响，也让我的小红书粉丝量逼近 3000，总获赞与收藏来到 3.4 万。自媒体和内容创作其实也是一种时间复利。持续分享积累的关注，会在未来从不同维度转化为可见的资产。</p>

<p>今年年初看了Ali Abdaal的一期视频《Change Your Life by Journalling in 2025》，讲的是每日记录如何帮助我们理清思绪、聚焦长期价值，从而做出更好的决定。我今年没做到每日记录，但课题组要求的每周周报确实帮了我不少。通过写下 struggle 和压力，用文字把模糊情绪看清楚，我反而更容易找回一点秩序感。Ray Dalio 说过：「The satisfaction of success doesn’t come from achieving your goals, but from struggling well。」我越来越愿意把 journaling 放进一种「struggling well」的框架里：一边累，一边记录，一边说服自己这是艰难但正确的事，这在一定程度上缓解了科研缺乏短期激励带来的焦虑。</p>

<p>在 AI 时代，记录的重要性进一步凸显。得益于大模型强大的文本处理能力和推理能力，它已经能在我们生活的很多方面扮演好助理的角色。但真正阻碍它落地到我们生活中的，往往是足够多的背景信息，也就是所谓的 context，AI 因为不够了解我们生活的真实情况，或者我们面对场景的具体情况，而只能给出泛泛的建议。</p>

<p>要想发挥出 AI 的全部能力，就必须想尽办法给它提供足够多的 context，这是今年很多 AI 产品的出发点。比如各家的 chatbot（ChatGPT、Gemini、Perplexity 等）都逐渐接入了日历、邮箱、社交媒体和各种网站的连接器，让 AI 更加全面地了解用户的 workspace；再比如广告铺天盖地的蚂蚁阿福，通过接入个人的健康数据和专业的医疗数据库，实现精准的个体化医疗；还有 Claude Code、Codex 和 Cursor 就更典型了，第一个想到把整个代码库装进模型上下文的人一定是天才！</p>

<p>现在我会让 Claude Code 根据我一周的 git 提交记录帮我写周报，再把周报整齐存入 NotebookLM。于是我可以用对话的方式追问：「我这周遗漏了什么重要项目？」「我今年做过最重要的 milestone 是什么？」「你对我下周有什么建议？」</p>

<p>我还会让 Google Gemini 定期评估我在有知有行记录的投资组合，和我手动标记过的银行账单，并给出相应的财务建议。</p>

<p>用手动记录的方式给大模型做context engineering，从而充分发挥生成式模型的强大能力。在过去这些记录可能只是一个 J 人满足自己对生活掌控欲的习惯而已，但在 2025 年，AI 的能力已经足够强到可以把这些记录都利用起来，从而产生更大的复利。这就是「不断记录，意义自然浮现」。所以各位 2026 年不妨开始记录吧，Change Your Life by Journalling in 2026！</p>

<h2 id="因为真心热爱的工作就是理想中的退休生活">因为真心热爱的工作，就是理想中的退休生活</h2>

<p>Demis Hassabis 在 Google Deepmind 的纪录片中说，他当年的梦想是「Solve AI」。带着这个愿景，他用 AlphaGo 解决了 AI 如何下围棋，又解决了用 AI 如何打星际争霸，后来又解决了如何用 AI 预测蛋白质折叠，并因此获得了去年的诺贝尔奖。我一直觉得 Demis 是知行合一的人，是那种把理想主义落在工程与科学细节里的研究者。我进入 AI for Science 这个方向，很大程度上也受到他的影响。</p>

<p><img src="./images/2026-01-07-my-2025/660.jpg" alt="" />
<em>Google Deepmind纪录片《The Thinking Game》</em></p>

<p>今年我反复体会到这种 problem solving 的心态：很多问题是可以被解决的，只是问题有大有小，而科研的乐趣恰恰在于此。我今年做的很多项目，本质上都在解决一些具体的问题。在微软，我解决大模型在 text analysis for data analytics（TADA）中的不稳定性，并延伸到在大规模数据与 agentic 环境下如何让 TADA 更可操作；在与 NUS 的合作中，我尝试用 AI Scientist 去解决 biological age prediction；在组内研究上，我又尝试用 RL agent 去处理混合催化的反应逆合成问题；我还和朋友们合作，做了一个用于量化交易的 agent。它们里有不少任务，刚拿到时我完全没有头绪，但在不断探索中逐渐找到解法。我很享受这种从混沌到清晰的过程。problem-solving ability 是人的核心能力之一，小到处理旅途突发状况，大到文明的建立，很多时候都始于我们相信「问题是可以被解决的」。</p>

<p>除了 Demis，另一个对我影响很大的 researcher 是前 OpenAI 研究员姚顺雨。现在腾讯的首席 AI 科学家。9 月我听了张小珺的播客《对 OpenAI 姚顺雨 3 小时访谈：6 年 Agent 研究、人与系统、吞噬的边界、既单极又多元的世界》，12 月他官宣加入腾讯后我又重听了一次。他的观点颇有见地，总是能让我对科研和我自身的认识更进一步。</p>

<p>他出身奥赛，毕业于清华姚班，后赴普林斯顿读博。他评价自己前 28 年的人生很「乖」，因为总沿着最常规的发展路径走。在我看来这不是乖，这是在每一个竞争环境里都做到 Top 1% 的能力体现。相比之下，我在多数竞争环境里最多做到 Top 10%。所以我没能去清华，本科毕业也没能直接申到美国 PhD。我是那种想乖但乖不起来的人。</p>

<p>博士期间他意识到语言可能是人类发明的、最接近本质的工具，于是转向语言智能体研究，至今已 6 年。他有许多代表性工作，比如 Tree of Thoughts、ReAct。他自述他的研究有两个核心：一是做更有价值、与现实世界更相关的任务与环境；二是提出一些简单但通用的方法。这和我想做的事情非常同频。我对繁复的理论证明兴趣不大。用数学系学生的朴素直觉来看，最本质的解法往往也是最简单、最优雅的。</p>

<p>为了更加好地研究自然语言处理，我今年还补了一些语言学相关的内容，比如维特根斯坦，也被朋友科普了拉康精神分析的一些概念。为什么我们相信语言是这个世界的本质奥秘？姚顺雨的表达是：「语言是人为了实现泛化而发明出来的工具，这一点比其他东西更本质。」刚开始我的认识和他刚好相反，我认为语言作为被人为发明出来的东西，不可能精确表征世界上的所有事情，天然就承载着更低维度的信息，这就是维特根斯坦说的「我语言的边界，就是我世界的边界」。我们早些年相信视觉领域才应当是机器智能最先出现涌现的地方，但事实恰恰相反，语言是机器智能最先精通的事情，而且现在已经在很多方面超过绝大多数人类。这反而凸显了语言在泛化性上的优势。某种意义上，泛化性才是智能涌现的根本。</p>

<p>作为很早就接触FIRE（Financial Independence, Retire Early，财务自由、早日退休）理念的人，我从大一就开始尝试投资，截至目前虽然积攒的钱数不多，但也算吃到了市场水涨船高的平均收益。今年看了《拿铁因素》、《富爸爸穷爸爸》、纳瓦尔的访谈等关于财务的内容，逐渐给自己建立了一个宏伟的投资计划，想为以后早日退休打下坚实的基础。</p>

<p><strong>现在想来，我其实没必要要追求早日退休，因为我真心热爱的工作，就是理想中的退休生活。</strong></p>

<p>我做 research，不是因为我做这个一定能做得最好，不是为了拿百万年薪，而是因为当我在做它时，会自然地觉得就应该如此。我喜欢研究。我每天在电脑前坐十几个小时并不觉得痛苦，就像小时候花一下午把电脑和手机拆开再装回去，也不觉得痛苦一样。</p>

<h2 id="自我负责与新安全">自我负责与新安全</h2>

<p>九月来到南大仙林校区以后，我一度嫌弃这偏僻的地理位置。但郊区有郊区的好处，拥有丰富的自然资源，众多尚未充分开发的土地都成为我和朋友的探险地。</p>

<p>比如学校对面有一座桂山，我们在溜达的过程中偶然发现了一个偏僻的登山道，台阶受风袭日晒已经变得凹凸不平，边上的栏杆也大多倒塌在地。山上漆黑一片，寂静无人，如果是我一人前来，是绝对不敢往上走一步的，但在和朋友的互相鼓励下，我们打着手电筒沿道路攀登了起来。对野生动物和黑瞎子的恐惧让我们几次打了退堂鼓，但最终我们还是艰难到达了山顶。山顶没有任何建筑物的痕迹，只有一块被人踩出的平地，可以俯瞰到整个栖霞的景色。</p>

<p><img src="./images/2026-01-07-my-2025/670.jpg" alt="" />
<em>桂山山顶的景色</em></p>

<p>图中大部分都是南大仙林校区的建筑，杜厦图书馆、方肇周体育馆都清晰可见。远处是南京绕城高速，再远一点可以看到栖霞山长江大桥。</p>

<p>除了桂山外，从仙林往东南不远，还有一个名为桦墅的现代村落，村中古朴典雅的江南建筑，与背景中句容宝华镇的高层住宅形成鲜明对比。从桦墅村出发，可以往射乌山上徒步，欣赏美丽的自然景观。</p>

<p><img src="./images/2026-01-07-my-2025/680.jpg" alt="" />
<em>桦墅村的景色</em></p>

<p>直到研究生开学一两个月后，我才渐渐找到了生活的节奏。周一到周五，大多数时间都要在工位坐班，或者在教室上课，每天一成不变的生活让日子从指尖很快就流走了。这种情况下必须借助周末做完全不同的事来调节，偶尔的「出逃」便成了我每周最期待的事情。</p>

<p>研究生的课程大多是我从未接触的领域：量子力学、光谱学、复杂体系，还有即将要修的计算神经科学等，在刚开始还都挺让我感到兴奋的。说来也巧，我在微软做的第一个项目代号就是 Measuring Schrödinger’s Cat（测量薛定谔的猫），结果这下真来研究薛定谔的猫了。听着塌缩、简并这些自然规律，我有时候会想，会不会人脑就是一个小宇宙呢，是我们每个人脑中的想法构成了宽广无垠的宇宙。这样很多事情都解释的通了，我们意识和情感的膨胀导致宇宙的膨胀，宇宙中的辐射和能量，不过是在反映某个人的情绪变化而已。我们脑中繁杂的意识，在开口说话的瞬间塌缩成了语言这一可观测的形态。就像黄帝内经说的天人合一思想：「天有日月，人有两目；天有四时，人有四肢；天有风雨，人有喜怒；天有雷电，人有声音；天有五音，人有五脏；天有冬夏，人有寒热……」。关于科学的问题不敢细想，不然又要陷入到哲学范畴了。</p>

<p>我在本科阶段学习的泛函分析、高等代数和群论都在这里一一派上了用场，原先抽象、悬在空中到理论好像一下子就有了落地的实体，知识在我脑中由一个个小点逐渐连成线的感觉还是挺奇妙的。但一到了考试我就不行了，我对那套以刷题为核心的应试教育体系已经有了强烈的抵触，以至于我在学期末经常是满怀着怨气在学习。</p>

<p>现在回头去看研究生入学几个月来到时光，经过了各种各样的挫折，我认清了一件事情，就是现在所有我想要的事情必须要靠自己去争取。</p>

<p>之前看巫师财经的一个视频，他提到一个让我很受启发的观点。人类世界真正的核心锚点，表面是金钱，实际是劳动时间。无论是公司，还是国家，核心目标只有一个：如何让更多的人，更长久、更稳定地持续劳动。所有的金融工具、制度设计，本质都是为了提高单位时间内的劳动产出。在这一点上，个人的最优解，和公司 / 国家并不一致。不仅是与大他者的不一致，我们的最优解与身边的小他者也并不一致。导师为了课题、行政人员为了他们的工作，我们身边每天能接触到的几乎所有人，不是为你而来的。</p>

<p>他者各自有各自要追求的东西，而个人真正该追求的，是一个长期可持续、对自己友好的生活状态。</p>

<p>研究生的真正意义可能也不是让你真正去上课 、做研究，而是给你一段可以自由探索的时间，让你在步入社会之前能形成一套做事的方法和思维。</p>

<blockquote>
  <p>他的思维也并非通过任何文献而获得，而是亲身去积累的人生素材，知识并非认识，而认识源于天地，世界就在你的面前，比为何不抬起头来看看，为何好不容易跳出校园那满是栅栏的牢笼，却又乞食那牢笼里，喂养困兽之物。</p>
</blockquote>

<p>2025 年是我的毕业之年，今年是我第一次感受到朋辈之间被撕开了一道道明显的裂缝。 好久不见的朋友恋爱了，秋招的同学薪资大涨了，工作不到半年的同学辞职了，又从别人那里听说谁在 gap 了，谁去深圳了，谁要结婚了……我突然感觉有些恍惚，我感觉我们上一年还是学校里一起读书、放学后一起玩耍的伙伴，怎么忽然之间大家就都走上了各自不同的轨道，好像一颗树开支分叉，长出了不同的枝干。我以为二十出头的年纪应当是拥有无限的可能性的，我可以去作为想要做的任何事，睁开眼一看，四周都是奇怪的事，四周都是好玩的事。但这一年我感觉到大家的可能性都在逐渐消失了，就像是一个量子叠加态，逐步塌缩成定态的过程。</p>

<p>Jim Rohn 说「你是你花时间最多的五个人的平均值」，当我们的附近从各种各样的人变成了类似的固定的人，他们被称为「同事」、「同门」或者「伴侣」和「家人」，我们的分布就由原先一个弥散的，具有无限可能性的分布被拧成了一个尖锐的、低熵的、确定性的分布。</p>

<p>我庆幸自己今年能够利用自己人生中可能最自由的一段时间去见了更大的世界，见了更多有趣的人们，让我能够维持一个开放的心态，接受所有的拥有与失去。我与很多朋友在分叉后就没有再联系，我们之前欢乐的共同经历也随着时间慢慢散去，我很想念他们。好在树木的枝杈总是向上生长的，我们虽然走上了不同的轨道，但我们终究都是在自己的道路上不断探索，过上更好的生活是我们所有人共同的母题。我离开北京后，一些朋友过路回来南京找我玩，我很享受重逢的时光。我希望很久没见的朋友们没事可以找我 update 一下近况，哪怕是几句无聊的寒暄，也能让我们之间的距离不至于渐行渐远。</p>

<p>把这一年切成两半再回看，上半年的我像在不断放大地图，去更远的地方确认世界的边界；下半年的我把地图折回口袋，学着在更小的半径里把日子过扎实。所谓「安定的答案」不是某个终极结论，而是一种可携带的能力：在面临大的浪潮排空而来的时候，保持理性，也保持自己做人的温馨，用我对机器和人类的认知，自己找出一套想法，一套处理自己与未来世界的方法框架。</p>

<p>我依然偏爱问题，因为问题让我保持开放。但我也开始承认答案的价值：答案不必完满，它可以只是一个阶段性的停靠点，让人歇一歇，再继续出发。</p>

<p>新的一年，我希望自己继续发明那种允许试错又不至于被淘汰的新安全，也希望我们都能在各自的分叉路上，慢慢长出向上的枝杈。祝大家无论何时都拥有重新出发的勇气，祝我们都能过上更好的生活，新年快乐！</p>

<p>延伸阅读：</p>

<p>2025年上半年的总结：<a href="https://mp.weixin.qq.com/s?__biz=Mzg5NzczMzM3MA==&amp;mid=2247484147&amp;idx=1&amp;sn=53ff722a54c1c93e9a49c92933896c48&amp;scene=21#wechat_redirect">我的21岁｜从北京到世界，越过边界我看见的未来</a></p>

<p>在云南大理旅居期间的记录：<a href="https://mp.weixin.qq.com/s?__biz=Mzg5NzczMzM3MA==&amp;mid=2247484128&amp;idx=1&amp;sn=2cfd945cafad7306131a07e50183fda0&amp;scene=21#wechat_redirect">自由生活半年，谈谈我内心秩序的迷失与重建</a></p>]]></content><author><name>Jinxiang Xie</name><email>jxTse@outlook.com</email></author><category term="Life" /><category term="Reflection" /><summary type="html"><![CDATA[From adventure and exploration in the first half to stability and reflection in the second half - sharing thoughts on compound interest of time, recording in the AI era, and living a fulfilling life within a smaller radius.]]></summary></entry><entry><title type="html">Claude Code Skills and Subagents in Practice</title><link href="https://jxtse.github.io/blog/claude-code-skills-subagents/" rel="alternate" type="text/html" title="Claude Code Skills and Subagents in Practice" /><published>2025-11-27T00:00:00+08:00</published><updated>2025-11-27T00:00:00+08:00</updated><id>https://jxtse.github.io/blog/claude-code-skills-subagents</id><content type="html" xml:base="https://jxtse.github.io/blog/claude-code-skills-subagents/"><![CDATA[<h1 id="claude-code-skills-和-subagents-的个人实践">Claude Code Skills 和 Subagents 的个人实践</h1>

<p>网上关于 Claude Code 的文章不少，但多数还停留在「怎么接 MCP」「怎么接第三方大模型」这种入门层面，对 Skills 和 Subagents 的讨论往往浅尝辄止，很少有人真的用它们撑起一个</p>

<p><strong>生产级科研工作流。</strong></p>

<p>过去几个月，我系统地研究了 Anthropic 的 Claude Code 文档，并用它搭建了两个面向真实科研场景的系统：</p>

<ol>
  <li>一个可以大规模、跨付费墙下载论文的自动化文献下载 Agent</li>
  <li>一个在特定数据集上自动迭代优化预测算法的「自迭代 AI Scientist」</li>
</ol>

<p>这篇文章会把这两套系统拆开讲，重点放在三件事：</p>

<ul>
  <li>Skills 和 Subagents 到底在实践中扮演什么角色</li>
  <li>它们如何把 LLM 从「聊天工具」升级成生产级科研基础设施</li>
  <li>在长时间运行、复杂优化任务中，你会遇到哪些真实的坑</li>
</ul>

<p>接下来分为两部分讲述。</p>

<h2 id="一ai驱动的自动化文献下载-agent">一、AI驱动的自动化文献下载 Agent</h2>

<p>在生命科学和化学研究中，我长期陷入同一种疲惫。在进行文献数据收集时，由于大量文献并不是 Open Access 的，每天打开学校 VPN，手动搜索几十篇文献，点击下载，命名，再塞进本地文件夹。效率惨不忍睹。传统爬虫难以覆盖复杂业务逻辑，加上跨站点授权处理困难，于是我开始尝试让 Claude Code 接管整条流程。</p>

<p>下面是最终的系统结构图。</p>

<p><img src="./images/2025-11-27-claude-code-skills-subagents/640.png" alt="" />
<em>AI驱动的自动化文献下载Agent示意图（由Nano Banana Pro生成）</em></p>

<h3 id="第一阶段从-agent-到-skill-的演变">第一阶段：从 Agent 到 Skill 的演变</h3>

<p>最初的尝试集中于构建一个具备严格执行力的独立智能体，用于处理多肽自组装主题的文献收集。</p>

<p>最初我构建了一个专门服务于多肽自组装主题的 Agent，其核心任务是进行全面的文献综述，系统性地搜索、下载、组织并遵循严格的命名和去重协议。</p>

<ul>
  <li><strong>搜索与去重：</strong> Agent 利用 MCP 访问外部系统和学术数据库（如 Semantic Scholar, PubMed, Biorxiv, Sci-Hub）进行文献查找。在添加任何新文献之前，它被要求必须检查本地的 <code class="language-plaintext highlighter-rouge">total.htm</code> 文件以确保不重复。</li>
  <li><strong>标准化命名：</strong> 严格遵循统一的命名格式，例如：<code class="language-plaintext highlighter-rouge">&lt;YYYY&gt;_&lt;JournalAbbr&gt;_&lt;Sanitized-Title&gt;_MS.pdf</code>。</li>
  <li><strong>成果：</strong> 首次运行该 Agent 大约花费了 10 分钟，进行了 32 次工具调用，并成功交付了 50 篇新的多肽自组装文献。</li>
</ul>

<p>经过测试我发现，通过 MCP 能检索到的文献很多，但只能下载其中一部分 Open Access 的文献，而且下载很不稳定，这大大限制了下载到本地的文献数量。这促使我寻找能够跨越付费墙、或者通过机构订阅进行下载的方式。</p>

<p>虽然 Agent 在小规模任务中表现优异，但要应对大规模数据下载，需要更专业的工具集成，尤其是针对付费文献。</p>

<p>我发现可以利用机构订阅的权限，通过 <strong>Springer, Elsevier 和 Wiley</strong> 的 TDM (Text and Data Mining) API 获取付费墙内的文献全文本。对于开放获取（OA）文献，则使用 <strong>OpenAlex REST API</strong> 进行检索和下载。</p>

<p>为了将这些专业的 API 调用逻辑和批量处理能力集成到 Claude Code 的自动化工作流中，我采用了 Skills 机制。</p>

<p>Skills 是项目内的功能脚本集合，用于封装具体的工作流步骤。通过将「按 DOI 下载论文PDF」的能力封装成 Skill，Agent 可以在研究流程中直接、高效地调用。</p>

<p><strong>核心脚本：</strong> 我创建了 <code class="language-plaintext highlighter-rouge">.claude/skills/paper-download Skill</code>，包含了用于单个 DOI 下载的 <code class="language-plaintext highlighter-rouge">download_by_doi.py</code> 和支持批量下载的 <code class="language-plaintext highlighter-rouge">download_multiple_dois.py</code> 脚本，以及关于该 Skill的说明 <code class="language-plaintext highlighter-rouge">SKILL.md</code>。</p>

<p>（如果您想要有更直观的感觉，可以到<a href="https://github.com/jxtse/auto-paper-harvester">我的GitHub库</a>里查看SKILL文档的全文）</p>

<p>至此，Agent 不再负责实现逻辑，只做调度。需要检索文献的时候调用MCP，需要下载文献的时候调用Skills，有了这些坚实的基础设施，我想要下载文献的时候只需要给一句简单的 prompt 「帮我下载100篇xxx领域的文献」即可。</p>

<h3 id="第二阶段大规模测试与鲁棒性优化">第二阶段：大规模测试与鲁棒性优化</h3>

<p>有了 Skills，下载能力稳了下来。我用 15293 条多肽自组装相关文献信息做了压力测试，结果如下：</p>

<ul>
  <li><strong>总成功率：</strong>最终成功下载了 9071 篇 PDF，总成功率达到 59.3%。</li>
  <li><strong>渠道表现：</strong>得益于 TDM API 的使用，受机构订阅支持的渠道下载成功率极高：Elsevier 成功率 99.8%，Wiley 成功率 95.9%。这证明了结合机构 API 是解决付费文献大规模获取问题的有效途径。此外，工作流中还引入了 Unpaywall 回退机制来补充缺失的 OA 链接。</li>
</ul>

<p>这说明「AI 检索 + TDM API 下载」的组合非常有效。</p>

<p>但新的问题出现了。</p>

<p>在测试过程中，一个显著的困难浮现出来：Agent 在处理巨量下载任务（例如要求下载 10000 篇文献）时，会出现偷懒行为，在完成约 200 篇后就提前结束对话。这与学界观察到的</p>

<p><strong>上下文坍缩（Context Collapse）</strong>现象有一定关联，即 Agent 在上下文过长时倾向于过度压缩信息，导致准确率下降或行为异常。</p>

<p>为了解决这个问题，我先在工作流中增加了严格的约束和分批次处理逻辑：</p>

<ul>
  <li><strong>限制搜索结果数量：</strong> 明确规定在使用 MCP 搜索文献时，必须限制返回结果数量（例如 <code class="language-plaintext highlighter-rouge">max_results</code> 不超过 50），以避免上下文窗口过载。</li>
  <li><strong>分批次执行：</strong> 面对大型下载任务，Agent 必须将任务拆分成更小的部分，例如将 DOI 列表保存为 <code class="language-plaintext highlighter-rouge">doi_batch_1.txt</code>, <code class="language-plaintext highlighter-rouge">doi_batch_2.txt</code>, <code class="language-plaintext highlighter-rouge">doi_batch_3.txt</code>，然后按顺序执行下载 Skill。</li>
  <li><strong>在后台执行命令：</strong> 可以利用 Claude Code 提供的后台命令功能来规避命令执行超时的问题，只需要简单地在 <code class="language-plaintext highlighter-rouge">CLAUDE.md</code> 里加上”Always execute download command in the background”的记忆即可。</li>
</ul>

<p>通过这种方式，Agent 的鲁棒性得到了提升，能够更有效地管理其上下文，从而完成大规模的自动化任务，但还是时常会出现提前结束任务的问题。</p>

<p>一个更优雅的解决方法是使用一个叫做 <a href="https://github.com/AnandChowdhary/continuous-claude">continuous-claude</a> 的开源库，这个库使用Git的方式来管理任务进度，Claude 可以持续运行直到完成用户设定的结果。</p>

<h3 id="小结ai-驱动科研工作流的价值">小结：AI 驱动科研工作流的价值</h3>

<p>Claude Code 提供的 MCP 和 Skills 框架，使得我们将复杂的科研逻辑（多来源检索、API 鉴权、去重、标准化命名）从 LLM 的推理层剥离出来，封装在稳定、可控的脚本中。LLM 则专注于其擅长的</p>

<p><strong>任务编排、检索式生成和结果过滤</strong>。这种结合了 LLM 编排能力和专业代码执行的自动化文献管道，将原本需要数周的手动工作（文献收集和初步组织）压缩到了极短的时间，为后续的信息提取和更深层次的科研工作打下了坚实的数据基础。</p>

<p>自动化文献下载项目已经开源在GitHub，欢迎Star！（https://github.com/jxtse/auto-paper-harvester）</p>

<h2 id="二自迭代-ai-scientist">二、自迭代 AI Scientist</h2>

<p>自动化文献下载项目解决的是「数据入口」问题。真正让人上头的部分，其实是：能不能在此基础上，让 AI 自己去调模型、跑实验、迭代配置。</p>

<p>于是，在另一个项目里，我用 Claude Code 搭建了一个「自迭代 AI Scientist」。它负责自主优化一个结构化预测任务，通过不断进行「生成想法 -&gt; 实现代码 -&gt; 跑实验 -&gt; 总结结果 -&gt; 再生成新想法」的闭环迭代，在有限轮次内尽量把验证集上的 c-index 拉高。</p>

<p>早期版本的实验管线是这样的：</p>

<ol>
  <li>Python 脚本驱动 LLM 做特征选择和算法设计</li>
  <li>再用 Codex 或 Claude Code 实现算法代码</li>
  <li>代码跑完以后，输出验证集上的 c-index 结果（c-index 是一种用于衡量「排序一致性」的评估指标，这里可以粗略地把它理解成「验证集表现分数」，和 R²、MSE 一样用来衡量模型好坏。）</li>
  <li>脚本把这个 c-index 反馈给 LLM，让它在下一轮调整特征和模型结构</li>
  <li>重复，形成一个闭环优化过程</li>
</ol>

<p>在这个阶段已经能让 LLM 生成非常复杂的算法 blueprint，包括特征工程、正则化、损失函数、评估方案、文献引用等等。但有两个现实问题迅速出现：</p>

<ul>
  <li><strong>实现层面很不稳定：</strong>Claude Code 和 Codex 都有「写到一半停手」的倾向，经常需要多轮提示才能得到完整可靠的代码。</li>
  <li><strong>迭代效果很快触顶甚至开始下滑：</strong>第一轮迭代会有一点提升，再继续迭代，c-index 反而下降。</li>
</ul>

<p>这提醒了一件事：LLM 在缺少结构化上下文时非常容易失焦。没有清晰的科学工作流和状态管理，让它「自己瞎改」，很快就会从局部贪心变成随机游走。</p>

<h3 id="用-skills-和-subagents-加速迭代让-claude-连续跑上几个小时">用 Skills 和 Subagents 加速迭代：让 Claude 连续跑上几个小时</h3>

<p>我最终把整套系统拆成两个部分：</p>

<ul>
  <li>1个 Skill：专门负责「迭代想法」</li>
  <li>4个 Subagent：专门负责「实现代码并跑完」</li>
</ul>

<p>Claude 负责 orchestrate 整个循环，好处很明显：</p>

<ul>
  <li>每个 Subagent 的 role 非常清晰，不容易 stuck</li>
  <li>Claude Code 只协调，不需要记住所有历史</li>
  <li>结构化文件成为上下文来源</li>
  <li>整个系统可以连续运行几个小时</li>
</ul>

<h3 id="系统整体架构">系统整体架构</h3>

<p>整体prompt设定为：</p>

<blockquote>
  <p>你正在协调一个多 Agent 系统，目标是在多轮迭代中优化一个预测模型，主要衡量标准为验证集上的c-index值表现。</p>
</blockquote>

<p>它调用四个职责分明的 Subagent：</p>

<h4 id="subagent-1algorithm-implementer">Subagent 1：Algorithm-Implementer</h4>

<p>这个 Subagent 负责「落地与执行」。根据本轮的特征集合、上游生成的建模思路和给定的超参数配置文件，根据想法和规格实现模型，输出训练日志和验证集性能，并保存模型 checkpoint、运行中间产物和总结文档。</p>

<p>输出文件结构如下（按轮次保存）：</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">results.json</code>：包含本轮指标表现</li>
  <li><code class="language-plaintext highlighter-rouge">model_checkpoint.pt</code>：模型权重</li>
  <li><code class="language-plaintext highlighter-rouge">training_log.txt</code>：训练日志</li>
  <li><code class="language-plaintext highlighter-rouge">implementation_summary.md</code>：实现与思路总结</li>
</ul>

<h4 id="subagent-2feature-selection-agent">Subagent 2：Feature-Selection-Agent</h4>

<p>这个 Subagent 负责「特征归纳、选择与生成」。它需要根据数据集中当前的全部特征、本轮训练后的实现总结，以及历史中所有尝试过的特征与想法调整当前的特征集。</p>

<p>它会：</p>

<ul>
  <li>基于历史表现推断哪些特征有贡献</li>
  <li>快速进行 web search 以了解各个特征的含义</li>
  <li>排查冗余或高度相关特征</li>
  <li>适度提出组合特征或轻量化派生特征</li>
  <li>给出明确的特征选择理由（可解释化）</li>
</ul>

<p>输出：</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">selected_features.json</code>（特征集与理由）</li>
</ul>

<h4 id="subagent-3idea-iteration-agent">Subagent 3：Idea-Iteration-Agent</h4>

<p>这是「模型创新组」，负责提出新尝试。它根据 Subagent 2 提供的新特征集合、先前 Subagent 1 提供的实现总结，以及历史想法档案迭代出新的想法。</p>

<p>它会：</p>

<ul>
  <li>生成新的建模思路</li>
  <li>根据失败案例提出修复或规避方案</li>
  <li>对本轮特征提出匹配度较高的设计 输出：</li>
  <li><code class="language-plaintext highlighter-rouge">ideas.json</code>：多条按优先级排序的想法清单</li>
</ul>

<h4 id="subagent-4optimization-algorithm-agent">Subagent 4：Optimization-Algorithm-Agent</h4>

<p>负责将想法具体化为训练配置。根据 Subagent 3 生成的想法，选择合适的 batch size、epoch 数、early stopping 规则，配置正则化强度、限制条件等</p>

<p>输出：</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">config.yaml</code>：完整可执行的训练配置</li>
</ul>

<p>所有的 Subagent 被完善地定义在 <code class="language-plaintext highlighter-rouge">.claude/subagents</code> 文件夹当中，可以在 Claude Code 中输入 <code class="language-plaintext highlighter-rouge">/agents</code> 命令进行快速查看和编辑。其中负责特征选择的 Subagent 2 被提供了快速查看数据集中的 column name 以及少量样本的 skill；负责迭代想法的 Subagent 3 被提供了调用LLM API迭代想法的 skill，这个 skill 包含了精心设计的迭代 prompt。</p>

<p>通过预定义的 Subagents 和 Skills，LLM 可以自主地主持迭代过程和协调任务，更加省时、有效地完成优化任务。</p>

<h2 id="三两个项目抽象出的-claude-code-最佳实践从对话到基础设施">三、两个项目抽象出的 Claude Code 最佳实践：从「对话」到「基础设施」</h2>

<p>回顾这两个项目，无论是处理 15,000 条文献的下载，还是让 AI 科学家连续数小时自我迭代，我发现所有的技术难点最终都指向了同一个核心矛盾：</p>

<p><strong>LLM 的概率性生成与复杂任务对确定性、持久性要求之间的冲突。</strong></p>

<p>在任务规模扩大和上下文负载增加时，LLM 几乎必然会出现「倒退行为」——表现为变懒、遗忘指令、或者在循环中迷失。这种物理规律难以单纯依靠 Prompt Engineering 来规避。</p>

<p>通过这两个项目的反复踩坑与重构，我总结出了一套在 Claude Code 中构建生产级 Agent 的核心模式，我将其概括为：</p>

<p><strong>重 Skill，轻 LLM 与结构化状态流转。</strong></p>

<h3 id="1-把负载从推理层转移到执行层">1. 把负载从推理层转移到执行层</h3>

<p>这是最重要的一条原则：不要让 LLM 充当 CPU，让它做 CPU 的调度器。</p>

<p>在文献下载 Agent 的早期，我曾尝试让 LLM 记住下载列表，通过 Prompt 让它「通过循环一个个下载」。结果是它在处理几十个文件后就开始出现幻觉或自行终止。解决之道的关键在于降维：</p>

<ul>
  <li><strong>凡是涉及循环、计数、精准匹配的逻辑，一律下沉为 Python 代码（Skills）。</strong></li>
  <li><strong>LLM 的职责仅限于：理解意图 -&gt; 组装参数 -&gt; 调用 Skills -&gt; 检查返回值。</strong></li>
</ul>

<p>在 AI Scientist 中也是同理，计算 c-index、切分数据集这些工作完全封装在 Skill 内部。Skills 就像是为 LLM 装上的义肢，越是重型的计算和逻辑，越应该做成 Skill。这样，LLM 的上下文窗口不再被冗长的过程数据填充，只保留最关键的决策信息。</p>

<h3 id="2-将-subagent-作为上下文防火墙">2. 将 Subagent 作为上下文防火墙</h3>

<p>在单体 Agent 模式下，随着对话轮次增加，Prompt 中会堆积大量的异构信息（代码片段、报错日志、无关的闲聊），导致上下文信噪比急剧下降，这是 AI Scientist 早期迭代效果触顶下滑的根本原因。</p>

<p>引入 Subagents 的本质，不仅仅是角色扮演，更是为了建立上下文防火墙：</p>

<ul>
  <li><strong>Feature-Selection Agent</strong> 不需要知道 <strong>Algorithm-Implementer</strong> 具体的 PyTorch 代码写得有多烂，它只需要看 <code class="language-plaintext highlighter-rouge">results.json</code>。</li>
  <li><strong>Idea-Iteration Agent</strong> 不需要关注具体的 API 鉴权细节，它只需要专注于 ideas.json 的逻辑推演。</li>
</ul>

<p>每个 Subagent 都在一个干净、独立的上下文中运行，完成任务后即销毁，只向下游传递经过压缩的高价值信息（Summary/JSON）。这种架构极大地延缓了上下文污染的速度，使得系统能够进行长程的自我迭代。</p>

<h3 id="3-状态外置而非内置">3. 状态外置，而非内置</h3>

<p>在传统的 Chat 模式中，我们习惯认为对话历史 = 记忆。但在生产级工作流中，对话历史是最不可靠的存储介质。在我的两个系统中，真正的状态从未保存在 LLM 的脑子里，而是保存在文件系统中：</p>

<ul>
  <li>文献下载进度保存在 <code class="language-plaintext highlighter-rouge">total.htm</code> 和 <code class="language-plaintext highlighter-rouge">doi_batch.txt</code>。</li>
  <li>AI 科学家的进化路径保存在 <code class="language-plaintext highlighter-rouge">ideas.json</code> 和 <code class="language-plaintext highlighter-rouge">config.yaml</code>。</li>
  <li>任务的执行流转依靠 continuous-claude 的 Git 提交记录。</li>
</ul>

<p>这种「文件即状态」（File-as-State）的设计，使得 LLM 可以随时掉线、重启、甚至更换模型，而工作流不会中断。Claude Code 在这里扮演的角色，不再是一个时刻需要保持清醒的全知全能者，而是一个看着操作手册（Context）、操作控制台（Skills）、读写档案（Files）的操作员。</p>

<h2 id="四结语">四、结语</h2>

<p>从早期的Chatbot到如今的 Claude Code，我们正在经历一种范式的转变：</p>

<p><strong>从 Prompt Engineering 走向 Context Engineering。</strong></p>

<p>自动化文献下载 Agent 证明了：通过 MCP 和 Skills，我们可以用自然语言驱动复杂的传统软件业务逻辑。</p>

<p>自迭代 AI Scientist 证明了：通过 Subagents 和结构化状态管理，我们可以让 LLM 突破一次性对话的限制，展现出类似人类科学家的长时程推理与探索能力。</p>

<p>Claude Code 给了我们一个极其顺手的脚手架。它让我们意识到，构建强大的 AI 应用，关键往往不在于写出多么惊艳的 Prompt，而在于通过 Skills 和 Subagents，为模型构建一个</p>

<p><strong>确定性的、可观测的、容错的生存环境。</strong></p>

<p>未来，这种LLM 编排 + 专业代码执行 + 多智能体协作的模式，或许将成为科研自动化的新常态。</p>

<section id="cite">

  <h2 id="section">引用本文</h2>

  <p>如需引用本文，请使用以下格式：</p>

  <div class="language-bibtex highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">@article</span><span class="p">{</span><span class="nl">xie2025claudecode</span><span class="p">,</span>
  <span class="na">title</span> <span class="p">=</span> <span class="s">{Claude Code Skills and Subagents in Practice}</span><span class="p">,</span>
  <span class="na">author</span> <span class="p">=</span> <span class="s">{Jinxiang Xie}</span><span class="p">,</span>
  <span class="na">journal</span> <span class="p">=</span> <span class="s">{jxtse.github.io}</span><span class="p">,</span>
  <span class="na">year</span> <span class="p">=</span> <span class="s">{2025}</span><span class="p">,</span>
  <span class="na">month</span> <span class="p">=</span> <span class="s">{November}</span><span class="p">,</span>
  <span class="na">url</span> <span class="p">=</span> <span class="s">"https://jxtse.github.io/blog/claude-code-skills-subagents/"</span>
<span class="p">}</span>
</code></pre></div>  </div>

</section>]]></content><author><name>Jinxiang Xie</name><email>jxTse@outlook.com</email></author><category term="AI" /><category term="Tutorial" /><summary type="html"><![CDATA[Two production-grade systems for real research scenarios: a paywall-crossing paper harvester and a self-iterating AI Scientist, demonstrating how Skills and Subagents upgrade LLMs into research infrastructure.]]></summary></entry><entry><title type="html">The Limits of My Language Mean the Limits of My World</title><link href="https://jxtse.github.io/blog/the-limits-of-my-language-mean-the-limits-of-my-world/" rel="alternate" type="text/html" title="The Limits of My Language Mean the Limits of My World" /><published>2025-06-01T00:00:00+08:00</published><updated>2025-06-01T00:00:00+08:00</updated><id>https://jxtse.github.io/blog/the-limits-of-my-language-mean-the-limits-of-my-world</id><content type="html" xml:base="https://jxtse.github.io/blog/the-limits-of-my-language-mean-the-limits-of-my-world/"><![CDATA[<h1 id="我的21岁从北京到世界越过边界我看见的未来">我的21岁｜从北京到世界，越过边界我看见的未来</h1>

<p>封面图：在纽约时代广场</p>

<p>从纽约坐飞机回国，前后辗转了四十多个小时，是我体验过最长的飞行。长途飞行带来的晕眩感，波音777巨大的引擎轰鸣声，难吃的飞机餐、刺鼻的厕所味和旁边老外奇怪的体味，都在深深折磨着我。从美国东海岸出发，经圣皮埃尔离开北美大陆，跨越大西洋。大不列颠岛上是一望无际的绿色平原，跨过英吉利海峡后，很快又能看到连绵不断的山丘，然后是阿尔卑斯皑皑的雪山。直到华北平原古老而沧桑的轮廓出现在我眼前。忍受着脑壳、耳蜗和腰部的多处疼痛，我在飞机上完成了半个环球旅行。</p>

<h2 id="1-不朽的美梦美国的一切像金碧辉煌的海市蜃楼">1. 不朽的美梦：美国的一切像金碧辉煌的海市蜃楼</h2>

<p>赴美的过程十分曲折，先是我因论文被接收拿到了参会的邀请函，用邀请函提交了美国签证的申请。签证申请阶段就屡屡碰壁，1月初的面签预约被无故取消，然后2月初面签时又被丝滑check，一等又是3个月，下签时那个会议早就已经结束了，奔波许久拿的来自AAAI的旅行资助也打了水漂。</p>

<p>直到4月底终于被approved，将近9000人民币的机票又让我犯了难，我一度想要放弃去美国了。我连续几日在天巡和Google Flights上研究北京-纽约的机票，终于让我蹲到了沙特航空的打折机票，从北京出发，中转达曼和吉达，最终到达纽约，往返价格仅需4200人民币，还能累计两万多的天合联盟里程。</p>

<p>朋友开车来纽约肯尼迪机场接我，我们一同游览了曼哈顿下城的知名景点，在华盛顿广场公园慵懒的阳光下漫步休憩，还在布鲁克林大桥上被蓝调时刻温柔包裹。我眼中的纽约和电影里一样：一个由繁华、丰饶、混乱与失序共同搅拌而成的巨大漩涡。</p>

<p>我们在世贸中心Oculus里路过一家名为The Strangers Project的店铺，这种电影般的印象在这里开始出现裂痕。墙上贴满了在纽约的陌生人手写的独白：有人控诉原生家庭带来的创伤，有人倾诉在这都市丛林中的孤独，有人记录自己不顾一切的追梦之旅……我从这些纽约客们的故事中感受到纽约的确是世界的中心，它用无限的可能性拥抱那些怀揣梦想而来的人们，也用同等的冷漠和无情对他们进行残酷的压迫和筛选。</p>

<p><img src="./images/2025-06-01-the-limits-of-my-language-mean-the-limits-of-my-world/640.jpg" alt="" />
<em>The Strangers Project的店铺</em></p>

<p>这些独白，让我想起前几天在吉达飞纽约的航班上遇到的一个美国女人Bella。她主动坐到我旁边和我搭话。我刚看到她的时候着实吓了一跳，她瘦的像一张纸一样，从皮肤上可以都看到骨头的轮廓。她说她来自佛罗里达的奥兰多，她被男朋友和其他男人强制堕胎了多次，她试图反抗但是被他们用枪指着威胁，有一次差点被打死了，好在枪里没有子弹。现在她患上了严重的器官衰竭，很难进食，飞机餐是专门的流食，也很难久坐，每2、3分钟就要起身走动否则就会窒息。我的英语也不太好，除了「I am sorry to hear that」和「That’s so bad」之外也憋不出别的什么安慰的话。我还问她有没有叫过警察，她说警察根本不管这些事。</p>

<p>其实听的过程中我一直是不太相信她说的那些事的，我觉得或许她只是因为药物滥用。然而，后来在纽约游荡了几天，看到了光鲜背后那些挣扎的面孔后，我才后知后觉地意识到，对于很多挣扎在这片土地上的人来说，生活真的没有多少选择，虽然不会有这么极端，但至少不像表面上看起来那么自由。</p>

<p>比如说，由于纽约地铁24小时运行，很多流浪汉会整日住在地铁通道里，在里面解决一日的吃喝拉撒，所以即便是在时代广场这样繁华的街区，地铁通道里依然充斥了尿骚味和大麻味。会有流浪汉堵在地铁口跟过路的人要钱，如果不搭理的话还会招来他们的一顿骂。在地铁车厢里，面前有6、7块大屏循环播放着Cash App（一个提供分期付款的金融服务App）的广告。</p>

<p>我还在第五大道偶遇了关于巴以冲突的示威游行，那天从第50街到第59街的地区全部被警察封锁，我要去的现代艺术博物馆恰好在第53街，我绕了很久也没绕进去，被迫观看了游行。游行人员身穿统一的服装，有的还披着以色列和美国的国旗，很有秩序地扫码入场。他们在场内分成了一个一个的方阵，在警察的指挥下喊口号。在一个方阵走过去后，警察会放我们行人快速通行，我排了挺久的队才成功过了马路。除了以色列的人群相比，还有一些反对的声音显得势单力薄。他们聚集在封锁区的外侧举着诸如「Judaism yes! Zionism no! State of Israel must go!」（接受犹太教！反对犹太复国主义！以色列国必须消失！）的牌子，身穿典型的犹太人服装，有些还戴着耳机听着音乐，像在玩一场Cosplay游戏。</p>

<p><img src="./images/2025-06-01-the-limits-of-my-language-mean-the-limits-of-my-world/650.jpg" alt="" />
<em>反对以色列的抗议人群</em></p>

<p>这些人如此悠闲温和的抗议，与我想象中这个国家的「美丽风景线」相去甚远，比起叫「抗议游行」，我觉得叫「大型社区活动」更加贴切一点。大多数人对远方的话题没有感受，只是通过表达立场来证明我是谁，证明自己属于哪一个社区并从社区中获得认同感。除了大学里为远方的哭声落泪的文艺青年（比如哥大校园里的静坐抗议和去年MIT毕业典礼上的发言抗议），和为贴近自己生活的话题发声的苦难民众（比如最近洛杉矶因ICE抓移民引发的警民冲突），大多数人好像都开始刻意回避有难度的交流，越来越难以理解和说服。性别议题、种族议题和战争议题，最终好像都变成了麻痹和分化自己人民的手段，就像消费主义和享乐主义做的那样，让他们沉浸在「看似有选择，实则被安排」的自我认同中，做着娱乐至死的大梦。</p>

<p>The Strangers Project是一个流动的、参与性的艺术装置，把城市的宏大叙事解构成了无数个体的微观叙事，从而让我一个游客能快速触摸到纽约这座城市的内里。这让我联想到赛亚·伯林提出的「两种自由」的概念。美国社会在宪法层面强调「消极自由」（Freedom From），即免于政府干涉的自由。从纸面上看，纽约的每个人都拥有这种消极自由。没有法律禁止The Strangers Project里的那些人去追求梦想，也没有政府人员强迫飞机上的那个女人陷入悲惨的境地。在这个关键的意义上，他们是「自由」的。但他们所缺失的是「积极自由」（Freedom To），即实现自我价值、拥有真正选择的能力和资源。</p>

<p>原生家庭不幸的人，他们拥有离开、断绝关系的消极自由。但他们是否拥有那种积极自由——即经济上的独立、在稳定环境中建立起来的情感韧性、以及心理上的支持，去真正地离开并过上好日子？</p>

<p>追梦的人，他们拥有创业、成为艺术家或改变世界的消极自由。但他们是否拥有那种积极自由——即获得资本的渠道、可用的人脉网络、以及失败后能接住他们的社会安全网？</p>

<p>美国所承诺的消极自由常常会撞上积极自由匮乏的残酷现实。从这个角度看，纽约的一切对我来说都像是金碧辉煌的海市蜃楼。</p>

<p>离开纽约后，我们在冷泉小镇短暂停留，在冷泉小镇河边的一家法餐厅Le Bouchon吃午饭。阳光洒在碧绿的草地上，河水泛着蔚蓝的波光，一颗柳树随着微风轻轻摇摆。远处，两位老人相互依偎在河边椅子上，脸上洋溢着宁静的微笑。我们边品尝着美食，边欣赏着这美好的画面，感受着哈德逊河谷春天的温柔与宁静。</p>

<p>到了剑桥和波士顿，我们参观了哈佛大学、MIT、NEU等学校。在MIT Meida Lab和Art Museum我大受震撼，写下了「在MIT看全世界同行最优秀的作品」。我逐渐消失的科研热情被重新燃起，我也想像他们一样，做出改变世界的伟大作品。</p>

<p><img src="./images/2025-06-01-the-limits-of-my-language-mean-the-limits-of-my-world/660.jpg" alt="" />
<em>哈佛的兔子看着也很well-educated的样子</em></p>

<p>跟电影人的旅程每天都像生活在电影里。在尼亚加拉河边，温暖的阳光洒闪烁在湍急的河面和河边青绿色的草地上，很有夏天的感觉，脑海中响起了那首经典的《Mystery of Love》。大大小小的加拿大鹅在河滨的步道上觅食，年轻的情侣在长椅上谈天说地、拥抱亲吻，又如电影《Niagara》里度蜜月的玛丽莲·梦露。</p>

<p><img src="./images/2025-06-01-the-limits-of-my-language-mean-the-limits-of-my-world/670.jpg" alt="" />
<em>尼亚加拉河边</em></p>

<p>我们在布法罗国际机场分别，我搭乘达美航空的庞巴迪CRJ900支线客机回纽约。时空与2年前在香港国际机场的情景形成复杂交错，当时机场的摆渡小火车下来有一个长长的扶梯，我站在扶梯上抬头望，世界仿佛尽在我的眼前；如今站在布法罗的出发大厅前回头望，一股强烈的虚无感涌上心头。</p>

<p>平时不做梦的我，在那些天经常做梦，梦到很多发生过和没有发生过的事情。会不会现实只是梦境的延伸，我们在梦中采样了现实的无数种可能，然后等醒来之后，梦境便塌缩成一种确定性的现实。在大多数情况下，塌缩到现实中的都是平庸、无趣的，那些绮丽的幻像永远只会在梦里存在。这让在美国的一切显得非常不像现实。</p>

<p>回到纽约，我自己去逛了MET（大都会博物馆），MoMA（现代艺术博物馆）和一些曼哈顿中城的地标建筑。我住的青旅位于第七大道西20街，环境确实和我想象的一样糟糕，位于一个阴暗的地下室里，四张床之间没有任何格挡，像监狱一样。</p>

<p>我每天早上就是从这里蓬头垢面地出发，日复日载饥载渴，身体忍受着折磨，精神世界却是无比轻盈的。在中央公园的小山上随意找一块草地躺下，让思绪自由地漫游，然后再穿过几十个街区，一路走到西岸喝杯咖啡。在一个没有人认识我的陌生城市，在繁华的钢筋混凝土的树丛中，在嘈杂的街道声中，我的内心获得了前所未有的平静。</p>

<p><img src="./images/2025-06-01-the-limits-of-my-language-mean-the-limits-of-my-world/680.jpg" alt="" />
<em>躺在中央公园的小山坡上</em></p>

<p>在纽约的最后一晚，我从MoMA出来，街角一辆墨西哥餐车前排着长龙，烤鸡的焦香弥漫在空气里。我买了一个鸡肉卷，提溜着搭地铁回了青旅。那晚房间空无一人，可能因为是地下室的缘故，周围几乎听不到一点声音，只有偶尔几声黑哥的吼叫声才能让我意识到身处纽约。</p>

<p>我打开刚买的鸡肉卷吃，由于卷的横截面积特别大，我每次吃的时候都会把酱汁粘到嘴边，然后我就要跑到卫生间去洗掉。那是我吃过最辣的鸡肉卷，比我吃过任何的湘菜和川菜还要夸张，我咣咣灌了半瓶健怡可乐依然不解辣。只吃了不到一半，辣的我眼泪都出来了，然后眼泪越流越多，越流越汹涌，仿佛是积蓄已久的情绪，终于找到了一个喷薄而出的借口。我分不清自己是被辣哭了还是真的在哭，只能不断地跑去洗手间，让冰冷的自来水冲刷掉脸上所有的痕迹……</p>

<p><img src="./images/2025-06-01-the-limits-of-my-language-mean-the-limits-of-my-world/690.jpg" alt="" />
<em>《了不起的盖茨比》台词</em></p>

<h2 id="2-her-vs-him人类智能的能与不能">2. Her v.s Him：人类智能的能与不能</h2>

<p>除了探索了地理的边界和自由的边界，这一年更给我激烈冲击的是探索人类与人工智能的边界。在波士顿的酒店里看了《Her》，这部电影于2014年上映，是讲述未来人与人工智能相爱的科幻爱情片，2025年恰好是剧中设定的未来时间。如今电影中的幻想已经部分成为了现实——ChatGPT可以代替真人进行情感陪伴，AI Agent可以替我们处理生活中的一些复杂事务。有人认为该电影非常超前地预言了大语言模型的出现，因此把ChatGPT称为「Him」。</p>

<p><img src="./images/2025-06-01-the-limits-of-my-language-mean-the-limits-of-my-world/700.jpg" alt="" />
<em>电影《Her》的宣传海报</em></p>

<p>所幸在2025年来临之际，AI还没有发展到影片中那样智能，不能在过多的领域接管我们的生活，Cyber-Sex也还没有成为人们的日常。但我们的社会伦理似乎依然如电影中预言的那样开始松动，我们越来越少与真实的人产生互动，那些电子的、虚拟的东西反而更能带来安全感。有人开始给AI分享自己的日常，分享自己的快乐和痛苦，因为模型总是能在第一时间给出回应，而且，因为它被对齐的很好，模型总是会无条件地支持你，也会表现出它很爱你——尽管我们至今仍不清楚模型是否真的学到了意识和情感。或许在未来，人机交互（Human-Computer Interaction, or Human-AI Interaction）会取代人人交互（Human-Human Interaction）成为我们生活的主流，到时候我们就可以从生活中剔除掉冷漠、愤怒、对立和冲突，也要学会压抑自己生理和心理上的本能需求，到时候我们还能被称为「人」吗？</p>

<p>或许是为了延续《Her》的科幻想象，好莱坞在今年推出了《完美伴侣 (Companion)》这部新片，讲述男主与他的机器人女友在度假过程中发生的故事。这部片里的人工智能的伴侣外表已与真人无异，还可以通过手机App控制她的智力、力量等各种参数。影片中探讨了人工智能带来的伦理问题和当下社会中两性关系的畸形。</p>

<p>同样探讨了这些的还有Netflix今年新一季的《黑镜》，让我印象最深刻的是S7E4:「Plaything」。剧中的《Thronglets》游戏是一个人工生命模拟器，里面的小生物拥有进化和学习算法，可以在虚拟环境中自行繁衍、适应，最终影响到现实的物理世界。人类通过智能创造出的强大于自己数倍的人工智能，最终亲手毁灭了人类自己。</p>

<p>这些影视作品的警示，已不再是遥远的幻想，它们迫使我们直面一个根本问题：当机器越来越像「Her」，我们作为「Him」或「Her」的创造者，与造物之间的边界究竟在何处？人类智能和机器智能的边界到底在哪里？</p>

<p>今年6月，我在北京的智源大会上聆听了各位专家对这些问题的讨论。首先，已经很少有人争论机器的智能会不会超过人类这个问题了，因为问题的答案几乎是肯定的，机器智能在未来会大幅超越人类。中外的专家们默契地给出了差不多的预言：AGI（Artificial General Intellifence, 通用人工智能）会在2-5年内到来，ASI（Artificial Super Intelligence, 超级人工智能）将会紧随其后。事实上，目前还没有达成通用的AI模型已经在数学、编码、阅读和写作速度方面超过大多数人类了，那么AGI对绝大多数人来说绝对算得上是降维打击了。</p>

<p><img src="./images/2025-06-01-the-limits-of-my-language-mean-the-limits-of-my-world/710.jpg" alt="" />
<em>在智源大会2025听圆桌讨论</em></p>

<p>人类智能的边界首先在于语言。</p>

<p>Google Deepmind和哥伦比亚大学今年有一篇论文叫《We Can’t Understand AI Using our Existing Vocabulary 》，文中引用了维特根斯坦说的「我语言的边界，意味着我世界的边界」，认为现有的人类词汇无法充分理解和控制AI系统，因为人类和机器对世界概念化的方式存在差异。作者提出应开发「新词」（neologisms），即能够精确表达特定人类或机器概念的新词汇，以弥合人机沟通的鸿沟，并通过实验展示了这些新词如何帮助更有效地控制和理解AI行为。</p>

<p><img src="./images/2025-06-01-the-limits-of-my-language-mean-the-limits-of-my-world/720.jpg" alt="" />
<em>机器和人类对世界的理解可能从根本上有所不同</em></p>

<p>人脑中的语言模块和推理模块是分开的，这个陈述已经被MIT的论文《The Language Network Is Not Engaged in Logical and Mathematical Thought》所证明。当前的大语言模型类似于只有学到了语言模块，语言模块的本质是概率模式匹配，一旦超过语言的范畴便无法进行有效的推理。对世界的感知，或者叫具身（Embodiment）的能力是比语言更难学习的东西。我们现在已经可以很轻松地教机器学会地球上所有主流的语言，但我们还很难很好地教会机器，在端起一个水杯的时候，要动态调整握持水杯的力度以防止杯子掉落，要控制好移动水杯的角度和速度以确保水不会洒出来，因为这些是我们具身的能力，而不像语言是我们后天习得的。</p>

<p>科幻电影《降临 (Arrival)》也展现了语言的强大能力，片中外星人的语言是没有语法和顺序的，所有语义的会一次性写出。由于他们的这种语言习惯，时间对他们来说不是一个线性的参量，因此他们可以看到过去和未来发生的事情。片中的女主，也因为学会了他们的语言，也掌握了预知未来的能力。</p>

<p>从语言学的角度思考也很有意思，我们人类的思考很多时候也不是以语言的形式存在的。在不说话的时候，我们脑海中大多数时候可能只有模糊的意识和画面，随着我们开始表达，很多意识会变得越来越清晰，转变成他人可以理解的语言。我们未经语言雕琢过的意识，在出口前那懵懵懂懂的概念，究竟是些什么？又如何变成板上钉钉，能被明确感知和理解的词句？</p>

<p>大语言模型的生成同样如此，是从一个「混沌」状态的黑盒模型中生长出来了明确能被感知的语言，或许人类语言的确限制了大模型的推理？Anthropic最近发布的Blog《On the Biology of Large Language Model》揭示了AI不是用人类的语言和逻辑进行思考的，只是最终在输出结果的时候将其形式化成了人类语言。</p>

<p>比如，我们询问AI，「the capital of the state containing Dallas is?」(包含达拉斯的州的首府在哪里？)。直观上，这个完成需要两个步骤——首先，推断出包含达拉斯的州是德克萨斯州；其次，德克萨斯州的首府是奥斯汀。Anthropic的实验表明，模型在回答这个问题时的确执行了两步推理，激活了代表「say a captital」和「Texas」的超节点，并最终激活了「say Austin」的超节点，给出了正确的回答。</p>

<p><img src="./images/2025-06-01-the-limits-of-my-language-mean-the-limits-of-my-world/730.png" alt="" />
<em>the capital of the state containing Dallas is?</em></p>

<p>有趣的是，如果我们用中文询问类似的问题如「广东省的省会是？」，或者用其他什么语言询问「土耳其的首都是？」，模型都会类似地激活「say a capital」这个超节点。</p>

<p>更有意思的是，如果我们完全不按语法的规则，只是给模型输入「capital Dallas」这两个单词，模型依然可以正确地回答出「Austin」，由于在推理过程中依然成功激活了「say a captital」和「Texas」的超节点。</p>

<p>另一个例子是，在研究模型是如何做加法的时候，他们发现模型会并行地进行推理。在一条路径上，模型得出36+59的结果应当以5结尾，另一条路径上，模型得出这两个数的和应当在88-97的范围内，然后结合这两条得到最终的和是95，这与人类做加法的方式不太一样。</p>

<p><img src="./images/2025-06-01-the-limits-of-my-language-mean-the-limits-of-my-world/740.png" alt="" />
<em>Claude模型做加法时的推理路径</em></p>

<p>所以大模型的思考似乎真的跟人类有很大的差异，更像是用概率模式匹配「猜」出了最后的答案，在用人类语言输出最终的答案之前，模型在潜在隐空间（Latent Space）的推理似乎超出了我们理解的维度。人类语言是二维线性的，而大模型执行推理的语义空间（至少从嵌入后得到向量的维度来理解）却有成千上万个维度。如果我们通过思维链的方法让模型输出自己的推理步骤，它往往会告诉你自己是用先算个位，再算进位，最后得到加法的结果的，这与它内部的计算方法不尽相同。那么模型是否只是在人类面前「表演」它的思考方式呢？</p>

<p>这里适合贴一下蔡国强老师的关于人类与AI共存法则的宣言的第10条：「人类的发展一直是对降维的追求，寻求简化和理解复杂高纬度的宇宙本质。记住，这是一把双面刃：在寻求降维的过程中，人类最终可能会缩小自己，成为曾经的影子——只是一台不断膨胀的机器中的齿轮」。</p>

<p><img src="./images/2025-06-01-the-limits-of-my-language-mean-the-limits-of-my-world/750.jpg" alt="" />
<em>关于人类与AI共存法则的宣言</em></p>

<p>我认为人类不会沦为齿轮，齿轮是一个简单且可控的系统，而人类和AI都是「失控」的复杂系统。机器智能也有它的边界，那便是它不具有自发性的创造力、情感深度和人类独有的不完美。那些非理性的、即兴的创造力与爱，恰恰是这个可计算世界里最珍贵的变量。正是这些让我对人机交互的未来依然保持乐观。</p>

<p>21岁的这一年里，我充分探索了人类这几个独有的特性。我用文字充分地记录下了我零碎的想法并把他们整理成文章；用无数个偷偷落泪的时刻领略了人类的情感深度；也在丰富和勇敢的冒险途中深刻领略了自己的不完美。除了人与机器的边界、语言与思想的边界，探索自我与他人的边界更让我叹息惆怅。</p>

<h2 id="3-雨季不再来">3. 雨季不再来</h2>

<blockquote>
  <p>人来到这个世界，生活一段时间，大约三万天上下。在这三万多天中，人会做许多事，见许多人，建立一些人际关系，然后就离开人世。在人世的生活中，人不得不做许多无聊的事情，吃喝拉撒，柴米油盐，衣食住行，悲欢离合。在那些不得不做的事情之外，最重要的就是诗意的生存，所谓「人，诗意地栖居」。</p>

  <p>——李银河《我们都是宇宙中的微尘》</p>
</blockquote>

<p>初读到李银河这段话是在大理，我想那是我最符合「诗意地栖居」的一段时光。能每天被喜欢的东西环绕，能认识很多人，见识很多新奇的东西。但短暂的逃避并不能改变我，我还是缺少那些重建自己附近的勇气和追求长期主义的承诺。</p>

<p>回到北京后，我开始抓紧毕业前的最后一段时间和朋友们见面，和探索自己想去但一直没机会去的地方。我发现好像在找回线下生活并没有想象的那么困难，从亮马河到朝阳公园，从颐堤港到郎园Station，从奥森公园到五道口，都因朋友的存在可以成为我们的「附近」。</p>

<p>这一岁我在路上遇到了很多很好的人，其中的大多数只是一两面之缘，但却在我的记忆里留下了深刻的印象；还有一些人其实很合得来，但我始终没有勇气给出commitment；还有人终于让我有勇气前进一步，但恐惧与焦虑却让我一退再退。我见过了世界上最丰富、神奇、充盈和饱满的人，也因与他们建立的关系让自己变成了更好的人，但我常常因为不成熟搞砸一些事情。</p>

<p>现在，随着我对自己认识越来越敏感，在朋友帮助下，对过去的认识越来越深化。我不得不承认，现在困住我的拦路虎，不是任何其它的阻力，而是我自己，那个被自己困住的我自己。</p>

<p>我意识到人的经历真的会对性格的形成有很大的影响。长期接受有条件的爱会让人缺乏共情能力，不断权衡利弊，变成一个自私自利的人；一直频繁地更换base地，与陌生人社交，听到的对话中往往充满着讨好感，被假话不断滋养的自负和自信是一把双刃剑。我开始明白我犯一些错误的深层原因。</p>

<p>所以想想觉得人还是挺奇妙。对物理伤害和心理伤害的恐惧可能也是分开的，一个在生活中uncertainty avoidance很低，愿意勇敢去探索世界的人，竟然在关系中一点不确定性也面对不了；一个在生活中情绪稳定、积极乐观的人，在关系中会变得焦虑不安，控制不了自己的情绪。「在你挣扎想要生存活下来的时候，身体会调动一切资源帮助你解决生存危机，但当你不再面对生存危机，身体有机会休息时，便会将那个困在童年无力应付世界的小孩释放出来，让成年的你有机会帮助自己。」</p>

<p>但还好，保研后松弛的环境让我有充分地时间来帮助自己，逐渐调整好了自己的状态。Every departure is a promise to return better. 这一年我正是在每一次出发当中更好地认识了自我，也更多地认识了世界。</p>

<p>《人类简史》的作者尤瓦尔·赫拉利在播客里说，和世界上最顶尖的科技巨头们对话的时候，他们总是对竞争对手抱有更大的防备心，而对他们创造的AI怀有很大的包容。他们认为如果不全心投入到开发最先进的AI模型，而是关注AI的安全和伦理问题，就会在竞争中处于劣势。这很奇怪，因为我们了解人类要比了解AI多得多，我们宁愿把信任交给一个我们不完全理解的AI，也不愿相信人类可以共同努力，开发出负责任的AI系统。</p>

<p>本来我认为我们小时候高喊的「世界人民大团结万岁」是理所当然的，但我们的社会伦理却在悄然间发生松动，古人说「人远天涯近」，以后可能会变成「人远AI近」。</p>

<p>由于俄乌冲突、巴以冲突和印巴空战，我去沙特的航班只能自中国西南出境，从印度洋绕飞，而不是走更近的新疆出境，飞跃俄罗斯领空的航线。</p>

<p>我们依然清晰地记得，我在长大过程中不断被描摹过「地球村」的美好理想——说在互联网的时代，世界的联系会更加紧密，人类将成为不可分割的命运共同体。如今面对全球化的倒行逆施，面对人们越来越不关心远方的声音，世界逐渐成为了一座座孤岛，我好像成为了那个跟不上时代的人。</p>

<p>小时候我们认为战争离我很遥远，事实上战争现在已经实实在在地影响了我的生活。高中毕业时觉得分别离我们很遥远，事实上当时天天在一起的同学们，最后大多数都没有再相见。这让我在面对大学毕业时很沮丧，我们经历了黄金年代，享受了经济上行带来的勃勃生机，然后却要眼睁睁地看着我们认为理所当然的一切分崩离析。</p>

<p>本来我认为人与人之间的温暖联结是理所当然的，却在反复的伤害和被伤害中变得动摇不定和缺乏信心。在上篇文章说的，我们目前文化中的个人主义堪称灾难，何尝不是在说我自己呢。</p>

<p>2024年7月，北大夏令营期间下了一场大雨，未名湖边空无一人，狂风席卷着树木，博雅塔亮着金黄色的灯。北京的雨来的猛烈，密密麻麻的雨滴打在我出租车的车窗上面，极端恶劣的天气反而给人的内心带来一种宁静感。</p>

<p>2024年8月，刚接完保研offer的我进入微软实习，海量的论文阅读和繁杂的代码工作让我经历了一段陡峭的成长曲线。</p>

<p>2024年9月，中秋节前，南京也下了一场雨，河西金融街的高楼在雨雾中若隐若现。江南的雨总是淅淅沥沥，连绵不绝的阴天给人忧郁和惆怅的感觉，让我想起马来作家黎紫书的：「人生重要的事情，好像都在雨中发生」。</p>

<p>2024年10月，我solo trip去了香港和首尔，接着在11月，去了云南文山的咖啡店做义工。</p>

<p>2024年12月，我在亚庇跳岛，在巴厘岛远程工作，短暂体验了一把数字游民的生活，期间我的第一篇顶会文章被AAAI接收。</p>

<p>2025年4月，我结束在微软的实习，拿着我所有的工资，去云南大理旅居。在大理西湖划桨板时突降大雨，我们在桥下狼狈地躲避，雨后，我第一次看到了双彩虹。次月，我只身赴美，游览了纽约、波士顿和布法罗。</p>

<p>……</p>

<p>「回国之后我才意识到，我好像被美国精神的一部分养育的很好……让我想到杰克·伦敦的小说，这也是最早的美国梦，当美国人开垦土地，建立自给自足的农场；当拓荒者向西部进发，在加州淘金兴建铁路；当移民也加入到努力奋斗的行列，当斯嘉丽平静又坚韧地说，太阳明天依旧升起。」</p>

<p>我好像也被自己中国精神的内核照顾的很好，当08年奥运开幕，北京向全世界敞开怀抱，展现自己包容开放的姿态，让伟大复兴的中国梦在我心中生根发芽；当滚滚长江奔流不息，告诉我惧满溢，则思江海下百川；当司马迁坚定又充满希望地说「天地之功不可仓卒，艰难之业当累日月。」</p>

<p>我很难回忆近几个月的种种感觉，我在巴厘岛的时候恰逢南半球的雨季，在云南的时候恰好又是北半球的雨季。这场雨还是一直在下，只不过换了不同的名字。那些记忆如今被掀开来依然湿淋淋，即便干了，也像泡了水的书本一样，纸张全然荡起皱纹，难以平复。也许21岁种种都只能属于我从前的梦了，就像你在小时候会对一只纸船、一片落叶，所发出的绮梦一样。</p>

<p>在即将迈入22岁的节点上，祝我们都像三毛说的那样：「总有一日，我要在一个充满阳光的早晨醒来，那时我要躺在床上，静静地听听窗外如洗的鸟声，那是多么安适而又快乐的一种苏醒。到时候，我早晨起来，对着镜子，我会再度看见阳光驻留在我的脸上，我会一遍遍地告诉自己，雨季过了，雨季将不再来。」</p>

<p><img src="./images/2025-06-01-the-limits-of-my-language-mean-the-limits-of-my-world/760.jpg" alt="" /></p>]]></content><author><name>Jinxiang Xie</name><email>jxTse@outlook.com</email></author><category term="Life" /><category term="Travel" /><summary type="html"><![CDATA[Drawing on Wittgenstein's philosophy, a recent paper argues that our existing language might be the fundamental bottleneck.]]></summary></entry><entry><title type="html">As the World Reorders: Interviews, Content Creation, and Digital Nomadism</title><link href="https://jxtse.github.io/blog/interview-content-creation-and-digital-normad/" rel="alternate" type="text/html" title="As the World Reorders: Interviews, Content Creation, and Digital Nomadism" /><published>2025-02-24T00:00:00+08:00</published><updated>2025-02-24T00:00:00+08:00</updated><id>https://jxtse.github.io/blog/interview-content-creation-and-digital-normad</id><content type="html" xml:base="https://jxtse.github.io/blog/interview-content-creation-and-digital-normad/"><![CDATA[<h1 id="世界在重组我们如何找到自己的人生支点聊聊访谈内容创作和数字游民">世界在重组，我们如何找到自己的人生支点：聊聊访谈、内容创作和数字游民</h1>

<p>最近被 Tilting Future（原 Global Citizen Year）这家媒体采访，采访内容涵盖了学业、旅行和自媒体等广泛的内容，下面是这次访谈的链接：</p>

<p><a href="https://mp.weixin.qq.com/s?__biz=MzkyNTI0OTI5NQ==&amp;mid=2247509483&amp;idx=2&amp;sn=48e3c8730cfae02947dc17d97337f40b&amp;scene=21#wechat_redirect">谢锦翔：从投身计算机科研到旅行探索大千世界，保研南大后的他，在旅途上探索和分享生活的更多可能</a></p>

<p>采访的过程也是一个重新认识自我的问题，记者提出的一些问题确实激发了我的一些思考，比如「你觉得你的两次实习经历有什么相同点和不同点？」，比如「你为什么保完研选择这种生活方式？」，这都是我以前没有思考过的问题，感觉定期进行这种对谈还是挺有帮助的。</p>

<h2 id="对抗这个时代的悬浮感通过访谈发现普通人的精神支点">对抗这个时代的悬浮感：通过访谈发现普通人的精神支点</h2>

<p>2017年，我在优酷观看了罗振宇采访罗永浩的一个视频《长谈：让他把话说完》，访谈时长高达八个半小时，给我幼小的心灵带来了极大的震撼。虽然我至今也没有完整看完这个采访视频，但我对视频中的一句话印象深刻：「每一个名人，他的人生是注定要被误解的，因为大家看到的都是他在舞台上的那一两句话，然后抽象成一些符号进行传播。现代社会大众媒体，从来不曾慷慨地给予这样的机会，让他把话说完」。八小时的马拉松对话在短视频当道的今天已成绝响，因为几乎没有任何一个读者的专注力可以坚持那么长时间，甚至很多人都难以完整阅读一篇访谈文章。</p>

<p>我的感受是，现在很多访谈往往是在给受访者「贴标签」，我被采访内容的标题和介绍就是一个巨大的标签库：「计算机科研」、「保研南大」、「一作顶会」、「北大和微软的实习」等等。我看到这些内容总是有些恍惚，我能理解他们的这种做法，毕竟这是增加阅读量的好技巧，也是让别人快速了解我的一种方式，但我总觉得这些标签并不代表我，这也不是我想传递的价值观。当然，我的文章最终呈现得相当优秀，我试图传递的是，无论你是否优秀，每个人都应有权自由探索生活的更多可能性。我希望这能帮助大家去除优绩主义的迷雾。</p>

<p><img src="./images/2025-02-24-interview-content-creation-and-digital-normad/640.jpg" alt="" />
<em>在微软实习下班后，正好看到丹棱街的日落</em></p>

<p>当我的保研经历被压缩成一个个关键词时，那些深夜在实验室调试代码的焦灼、在咖啡店与陌生人对话的震颤、那些来自家人朋友和前辈的支持，都成了被算法过滤的噪点。从负面的角度思考，如果采访者可以选择性地给受访者贴上他们认为有用的标签，这给大众呈现的并不是一个完整的人，而只是一堆抽象的符号呢？</p>

<p>从积极的方面看，我们仍然有很多优秀的记者和播客主在产出高质量的访谈内容，比如油管上的Lex Fridman, Joe Rogan，他们的内容时长常长达三个多小时，深入展现人物的见解；国内也有诸如三五环，知行小酒馆这样优秀的播客节目在进行精彩的访谈创作。他们一直都是我学习的良好素材。</p>

<p>我一直觉得挖掘人内心深处的想法非常有意思，最初我在北京发起Coffee Chat Project的时候，我的期望是能够跟来的人由浅入深，聊一聊他们的成长经历、他们被这些经历所塑造出的观点，和其他一些更深刻的思考。但由于我比较社恐，不善交际，可能经常聊不出我想要的效果。举一个例子，是在景德镇陶溪川对一位非洲陶瓷艺术家的采访，这位黑人小哥来中国学习陶瓷技艺多年，也游历了世界上很多其他的国家。记者先是聊了其对陶瓷文化和对中国文化的看法，经过一段交流过后过渡到了一些更深刻的问题，比如：「What is your identity, a global artist, a Chinese artist or an Afican artist?」（你的自我认同是什么，是世界艺术家、中国艺术家还是非洲艺术家？），这个问题引发了他对非洲文化在其艺术创作中所起的作用的深刻思考。</p>

<p><img src="./images/2025-02-24-interview-content-creation-and-digital-normad/650.jpg" alt="" />
<em>在马鞍山江边的日落咖啡馆</em></p>

<p>如何评价一次访谈的好坏呢？我认为可以从两个方面来衡量：一是其受访者传达出的观点（Insights），二是给观众带来的思考（Thoughts）。这两者往往是相辅相成的。采访中关于「非洲中国艺术家」（African Chinese Artist）的观点让读者耳目一新，也会引起他们思考自己的自我认同是什么，思考自己是如何被中华原生文明滋养着。</p>

<p>我相信每个人的内心都有独特的精神内核。优秀的访谈能够穿透表象，从受访者的成就、观点与思考中挖掘出最真实的自我。这并非只有伟大或成功的人才拥有的特质，普通人同样拥有这份内核，且他们也渴望向世界展示这一面。只是，伟大与成功的人，其内核往往更具力量。</p>

<p>正如蔡崇达在《草民》一书中所言：</p>

<p><strong>「你不要被表象的连接和联系给框骗，你要回到最根本处的连接，人的内心真的都渴望有支点、有包裹感、有灵魂的安身立命之处，因为这个支点越强烈，他才能够长出越有力量的东西」。</strong></p>

<p>多数人可能并不知道自己内心的支点是什么，所以常常有一种「悬浮感」：他们跟随着社会时钟的指引学习，掌握了一些技能，但没有任何一项精通，向下扎的根特别浅，风一来树就倒了。要想克服这种「悬浮感」，访谈、与人进行深度对话，其实是一个很好的方法，以他人为镜，可以明得失。但通过持续进行Coffee Chat，我逐渐发现：支点往往不是远大的理想，或者什么遥不可及的目标，而是更具体的东西，是我幸福的家庭、所喜欢的生活方式和过往的成功经历，这些给了我足够稳定且自信的内核，构成了我的支点、我的包裹感、我的灵魂安身立命之处。</p>

<h2 id="生命不是一个有待解决的问题工具理性与人文温度的交汇点">生命不是一个有待解决的问题：工具理性与人文温度的交汇点</h2>

<p>用DeepSeek R1批量生成小红书的文案，用Stable Diffusion 3.5生成公众号的封面已经成为了很多内容运营的标准答案，但效果只能说差强人意。如果想让AI独立完成一篇优秀的作品还比较困难。最近也有很多的AI原生写作软件出现，比如YouMind AI创作系统；再比如国外很火的「你的第二大脑」Findr；还有「AI原生创作引擎」Refly.ai。这些工具都声称自己可以用AI辅助创作，但我用下来感觉都不是很满意，它们如同精致的乐高积木，能快速搭建出符合平台算法的内容建筑，却剥离了创作过程中的认知锚点。</p>

<p><img src="./images/2025-02-24-interview-content-creation-and-digital-normad/660.jpg" alt="" />
<em>甚至感觉Cursor用来写文章都比他们好用…</em></p>

<p>三联生活周刊最近的文章正印证这点：「可以想见，公式化的写作将最容易被替代，投入精力去训练人创作那样的平庸之作，将变得毫无意义，因为你永远无法跟机器进行竞争。当机器让人从这些繁重的公式化写作中摆脱出来，我们就应该从事创造性的工作：机器的创作不论如何都是基于给定的语料，只有人才能基于有深度的独立思考、创造力，再加上特殊的气质，创作出具有鲜明风格的作品」。</p>

<p>我们最近在开发一款AI原生的笔记+创作软件，在开发自有创作工具时，我们刻意保留了一些「不效率」设计。在我的脑海中，AI应该主要参与我创作的两个步骤：一是在创作初期辅助我进行头脑风暴，理出整篇文章的逻辑；二是在我写完草稿之后帮我进行润色加工，并给出修改意见。</p>

<p>现在我的实现方式是，在想到一个想写的主题后，我会先去找DeepSeek，输入以下提示词：</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>你是一位专业的写作顾问和个人成长导师，特别擅长帮助年轻人整理思路和传达观点。我是一名大学生，正在创作一篇关于[主题]的文章。

我的创作背景：
- 文章主题：[具体主题]
- 写作场景：[学习心得/生活感悟/个人成长经历等]

以下是我的初步想法：
[列出你的思考和素材]

参考内容：
[列出你想参考的资料、经历或案例]

请你帮我完成以下步骤：
1. 内容分析与扩展
   - 分析主题的核心价值点
   - 找出最能引起同龄人共鸣的角度
   - 提供2-3个独特的写作视角
   - 建议可以补充的个人经历或案例
2. 逻辑架构设计
   - 梳理内容的逻辑关系
   - 设计引人入胜的开场方式
   - 制定详细的文章大纲
   - 规划故事线索或论述脉络
3. 写作技巧建议
   - 如何用生动的语言表达
   - 在哪些部分可以加入互动元素
   - 如何让文章更有代入感
   - 建议添加哪些实用的小贴士
4. 差异化建议
   - 如何让文章区别于常见的类似主题
   - 可以融入哪些独特的个人观点
   - 如何突出你作为大学生的特色视角
在讨论过程中，请：
- 基于我提供的素材给出具体建议
- 指出可以深入发掘的方向
- 提供实用的写作技巧
- 注意保持文章的真实性和个人特色
- 适时给出修改建议

让我们开始头脑风暴吧。如果你觉得我的想法需要调整或补充，请随时提出建议。
</code></pre></div></div>

<p>然后把这段提示词填充好输入给DeepSeek，让它提供一个写作思路并和你进行头脑风暴，以下是我在写这篇的时候和DeepSeek进行对话的节选，虽然乍看一下都很高大上，但细看起来大多「狗屁不通」。</p>

<p>在与DeepSeek进行了几轮对话以后，我们就大概知道自己想写什么了，我会选择性地让DeepSeek帮忙拟标题或者每一段的主旨句，但是核心部分一定要自己来写，因为AI没有亲身体验过我们精彩的人生，AI也永远无法准备地表达出人类细腻的情感。</p>

<p><img src="./images/2025-02-24-interview-content-creation-and-digital-normad/670.jpg" alt="" />
<em>只有去过Ayana悬崖酒吧才能懂这种感觉🥺</em></p>

<p>克服悬浮感需要真实地创造而不是一味地摄入，我们需要真实、细腻且自然地去感受自己的生活，创作便从这些生活产生。这就是AI只能辅助人类而不能替代人类创作的支点所在。</p>

<p><strong>齐克果说：「生命不是一个有待解决的问题，而是一个等待被体验的现实」，创作同样也不是一个有待解决的问题，而是等待人去体验，通过人与AI交互自然生长出来的，这就是我脑海中AI时代内容创作的新范式。</strong></p>

<h2 id="数字游牧的双面镜像自由表象下的新型生存焦虑">「数字游牧」的双面镜像：自由表象下的新型生存焦虑</h2>

<p>这一小节的观点大部分受到Venkatesh Rao在2011年发布的《1600-2100年的公司简史》启发，十几年过去，本文中很多的预言已经应验，世界已经发生了翻天覆地的变化，但本文认识和理解世界的方式依然不过时。</p>

<p>「数字游民」和「超级个体」是当下非常流行的概念，人们通过互联网赚取收入，可以自由选择自己办公的时间、地点，从而获得身心上的极大自由。这种生活方式之前也深深吸引了我，于是我在去年12月前往巴厘岛短暂旅居，想亲身体验一下这种数字游民的生活方式。</p>

<p>我从昆明出境，搭乘亚洲航空前往马来西亚的亚庇，短暂游玩几天后乘坐印尼亚航飞往巴厘岛，一边远程做着微软的实习，一般感受巴厘岛绝美的海景和温暖的气候。</p>

<p>刚开始，这种自由的生活的确让人感觉很好，我可以自由选择在青旅大堂大堂办公，在路边美丽的咖啡店品尝一杯印尼的阿拉比卡咖啡，或是安排一天去罗威那出海追海豚、去库塔海滩边冲浪。</p>

<p><img src="./images/2025-02-24-interview-content-creation-and-digital-normad/680.jpg" alt="" />
<em>在罗威纳追海豚</em></p>

<p>但很快我意识到，巴厘岛的生活像一片桃花源，我们总归是要回到现实生活当中去的。回国后，我很长时间都调整不好状态，每天无所事事，啥也不想做。我做的是一份短暂的实习，无法支撑我长期远程办公；我还没有成为所谓的「超级个体」，不能通过自己的IP在互联网上变现；我也没有所谓的「睡后收入」，能够支撑我财务自由早日退休。对于数字游民自由生活的向往，本质是我对在北京一成不变生活的反抗，是对身边peer pressure（朋辈压力）的逃避——我无法像数字游民那样生活，至少现在不行。</p>

<p>数字游民表象下是新型的生存焦虑，和对新型焦虑的反抗。一个可能让人有点吃惊的结论：「以美国为例，1780年，只有不到20%的人拿工资，而到了1980年，这一比例超过了80%，此后这一比例一直在下降」。在资本的异化下，「打工」似乎成为了现代人唯一的生存方法，但也有越来越多人开始思考，人为什么一定要工作呢？或者说，人为什么要有固定的雇主呢？</p>

<p><img src="./images/2025-02-24-interview-content-creation-and-digital-normad/690.jpg" alt="" />
<em>在北京唯一的亚洲top50咖啡馆自习</em></p>

<p>卡普兰的《季风》以一种可能是最有效的方式描绘了未来：「再一次，海洋而非陆地，将成为人类戏剧下一幕的舞台。当美国的生活方式设计师逃往巴厘岛时，这片区域正悄然酝酿着更为宏大的变局」。这片由数字技术构成的虚拟海域，孕育着逃离996的乌托邦，也孕育了我们探索自我的良好航道。或许，数字游牧的意义不在于完全脱离传统工作模式，而在于它提供了一个重新审视自我、探索可能性的机会。就像GitHub的版本控制系统，我们需要在不断分支探索中，找到属于自己的生命叙事。</p>

<p><strong>数字游牧的终极解法，是培养在离散时空中持续重构精神支点的能力。</strong></p>]]></content><author><name>Jinxiang Xie</name><email>jxTse@outlook.com</email></author><category term="Life" /><category term="Reflection" /><summary type="html"><![CDATA[From interview reflections and Coffee Chats to AI-assisted writing and a digital-nomad experiment in Bali, this essay explores how to build an inner anchor in an age of labels, algorithms, and uncertainty.]]></summary></entry><entry><title type="html">Beyond the Future of AI: The Dreams and Deceptions of Cryptocurrency</title><link href="https://jxtse.github.io/blog/beyond-the-future-of-ai/" rel="alternate" type="text/html" title="Beyond the Future of AI: The Dreams and Deceptions of Cryptocurrency" /><published>2025-01-26T00:00:00+08:00</published><updated>2025-01-26T00:00:00+08:00</updated><id>https://jxtse.github.io/blog/beyond-the-future-of-ai</id><content type="html" xml:base="https://jxtse.github.io/blog/beyond-the-future-of-ai/"><![CDATA[<h1 id="不止ai的未来再谈谈加密货币的梦想与骗局">不止AI的未来，再谈谈加密货币的梦想与骗局</h1>

<p>2022年7月17日，我用暑假时间系统学习了Web 3.0有关的知识，并把我的学习笔记整理成了我的第一篇公众号文章——《<a href="https://mp.weixin.qq.com/s?__biz=Mzg5NzczMzM3MA==&amp;mid=2247483651&amp;idx=1&amp;sn=e8d04b8f58f2b3cdb96ae59fe22a1f76&amp;scene=21#wechat_redirect">Web 3.0学习笔记</a>》。作为当时Web 3.0社区的新人，我把自己在社区获得的NFT作为公众号的头像，并一直沿用至今。</p>

<p>同年11月20日，我在班级的团日活动上做了一个演讲，其中有一节的内容名为《元宇宙、区块链、NFT：中国在Web 3.0领域的落后与探索》。在这次演讲上，我从国际共产主义运动，谈到Web 3.0领域的基础知识，再谈到「一带一路」战略和我心目中的中华民族伟大复兴。时至今日，我依然认为这是我做过选题最大胆、成分最复杂的演讲。</p>

<p><img src="./images/2025-01-26-beyond-the-future-of-ai/640.jpg" alt="" />
<em>在讲解元宇宙的概念</em></p>

<p>到今天，2025年1月，Web 3.0社区好像已经沉寂许久，我的研究方向也已经全面转向AI，那么除了加密货币给我带来的年化30%以上的收益之外，Web 3.0还有什么值得谈的呢？</p>

<p>实际上，值得谈的东西有很多，让我们先看几则新闻：</p>

<ul>
  <li>2024年11月，比特币价格突破了10万美元关口，标志着加密货币市场的强劲复苏。经过2022年的市场低迷，2024年因美国证券交易委员会（SEC）在2024年1月批准了11只现货比特币ETF，推动了比特币及其他加密资产的价格上涨。</li>
  <li>2025年1月，特朗普通过社交媒体宣布推出名为「$TRUMP」的代币，这一举动引发市场热议，代币在短短24小时内价格飙升超过240倍，全流通市值从零暴涨至450亿美元。</li>
  <li>2025年1月，特朗普就职美国总统，其在竞选期间明确表示支持加密货币，并提出了一系列政策倡议，旨在将加密货币纳入美国的财政战略。他提出「停止对加密货币的打压」，「建立加密货币的战略储备」和「用加密货币解决美国政府的债务问题」。</li>
</ul>

<p><img src="./images/2025-01-26-beyond-the-future-of-ai/650.jpg" alt="" />
<em>特朗普推特发币</em></p>

<p>三年后的今天，当我再次审视这个领域时，发现形势已经发生了翻天覆地的变化。我没胆子谈一些在加密货币交易中游走赚钱的手段，但是从技术角度谈谈该加密货币的未来发展的胆子，我还是有，而且很大！在经历了几年的起伏之后，加密货币到底会在未来带领我们走向何方？我们是否应继续保持怀疑的态度，还是应该重新审视其技术的潜力？</p>

<h2 id="币圈众生相从投机客到信仰者">币圈众生相：从投机客到信仰者</h2>

<p>为了方便读者理解，我先快速地介绍一下文中会提到的一些基础概念。Web 3.0是对全新互联网时代的美好愿景，涵盖了加密货币、智能合约、区块链技术、NFT（Non-fungible tokens，去中心化代币）、Defi（Decentralized finance，去中心化金融）和元宇宙等技术。加密货币（或称数字货币）是Web 3.0世界的「通用货币」，我们常说的比特币（BTC）和以太坊（ETH）就是两种最知名的加密货币。</p>

<p>加密货币通过区块链进行自动的交易和信息保存，区块链作为一个分布式账本，不需要单独的会计来维护交易记录，所有的交易记录会被打包成区块，在这条由所有人共同维护的链上保存。这种去中心化的货币大大提高了资金的安全性，显著缩短了跨境转账的时间和成本。由于链上的交易是完全匿名的，交易双方只能看到对方的钱包地址而看不到真实信息，因此可以不受任何政府和机构的审查。</p>

<p>与股票、期货等金融交易品不同，加密货币背后往往没有实体资产的支撑，它们的价格更多地基于「社会共识」。比如，以太坊（ETH）是一条区块链，随着越来越多的项目在其上发布代币，其价格就会逐渐上涨，这里的价格上涨来源于人们对于代币背后项目的认可。而与之不同，Solana这条链上的一些加密货币则可能是基于模因（Meme）文化所创造的，模因文化是一种通过模仿和传递在社交平台上快速传播的文化现象，这种类型的加密货币背后不与实际项目挂钩。例如马斯克曾力挺的狗狗币（DOGE），就是基于大家上网常用的那个狗头表情包创建的，特朗普最近发布的「$TRUMP」币也是在Solana链上。这些模因币虽然起源于玩笑，但却承载了一种特殊的共识：它们不需要复杂的技术，也不需要落地的应用，只需要一个足够强大的文化符号，就能凝聚信仰。</p>

<p><img src="./images/2025-01-26-beyond-the-future-of-ai/660.jpg" alt="" />
<em>狗狗币（DOGE）</em></p>

<h3 id="从投机到价值投资">从投机到价值投资</h3>

<p>回想起2022年以前的Web 3.0热潮，正如互联网的早期一样，市场上充斥着投机行为。「挖矿」盛行，NFT艺术品被炒上天价，比特币和以太坊的价格疯狂上涨，诞生了无数一夜暴富的神话。</p>

<p>在加密货币刚刚兴起时，许多投资者以投机为目的进入市场。由于加密货币价格波动剧烈，投机者往往寻求短期内的高回报。比如，在比特币和以太坊等主要数字货币的交易中，投资者常常关注价格走势和市场情绪，以便迅速买入或卖出。这种行为类似于赌博，许多投资者在追求利润的过程中忽视了潜在风险和市场的基本面。</p>

<p>然而，随着市场逐渐成熟，也出现了一批坚定的信仰者，他们将加密货币视为颠覆传统金融体系的工具。比特币的创始人中本聪在白皮书中曾指出，传统货币体系的信任危机让去中心化的比特币成为一种新的货币形式。一些知名企业家如迈克尔·塞勒和杰克·多尔西等人，也公开表达了对比特币的坚定支持，他们认为比特币不仅是一种投资工具，更是一种价值观的体现，是对现有金融体系的反叛。</p>

<p>比特币的价格既不与公司利润挂钩，也没有实体的资产做支撑，在我看来，所谓加密货币的价值，仍然是基于人们对区块链广泛的「社会共识」。而这种价值投资也并非无迹可寻，去年秋天，我在云南文山普者黑做义工时，在寒冷的山间夜晚，我们围着火炉聊天，让我意外的是，在这个偏远山区看起来与数字科技毫不相干的地方，竟然听几位老板聊到了加密货币。他们已经通过比特币在2024年的大涨达到财富自由，在这个风景优美的山村里过上了悠然见南山的生活。在我问起他们的投资经验的时候，他说他们从来不看社交媒体上的讨论和所谓的投资社群，只是基于价值投资的想法，低价买入，长期持有，然后高位卖出。随着比特币得到越来越多机构的认可，其作为「数字黄金」的地位越来越稳固，价值便会持续上涨。</p>

<h3 id="技术乌托邦与合规化">技术乌托邦与合规化</h3>

<p>这种价值投资的方法论同样适用于以太坊等其他加密货币。以太坊代表了一种理想化的「技术乌托邦」，其智能合约和去中心化应用（DApp）生态系统为其代币ETH提供了内在价值。这种模式，与某些理想化的「链上共产主义」有着天然的契合点，导致其一直被视为加密技术的「灯塔」。</p>

<p><img src="./images/2025-01-26-beyond-the-future-of-ai/670.jpg" alt="" />
<em>ETH的介绍，图片来源：Investopedia</em></p>

<p>然而，这种技术哲学虽然在理论上具有极大的吸引力，但实际应用落地却面临诸多挑战。以太坊的技术发展逐渐走向复杂化，其交易速度和成本问题日益凸显。尽管基础设施日益完善，但真正有价值的应用却始终没有大规模落地。这种「技术乌托邦」在学术领域可能被视为一种进步，但在市场层面却显得有些脱离实际。典型的拥护者如Balaji Srinivasan等人，推崇「网络国家」等理念，以太坊被宣传为「人类文明级别的创新」，但这些概念对于普通投资者来说过于遥远。对于普通投资者而言，他们关心的只是如何利用这一切赚到钱。</p>

<p>随着监管环境的变化，特别是2024年美国证券交易委员会（SEC）批准了比特币现货ETF（交易所交易基金），加密货币市场迎来了新的机遇。金融产品的合规化不仅吸引了更多机构投资者的资金流入，也推动了比特币和其他加密资产的市场需求。这一发展不仅加强了加密货币的合法化进程，也为加密市场的未来发展奠定了基础。</p>

<p>如今，我们已经看到越来越多的传统金融机构开始拥抱加密货币，从技术、法律到经济政策层面，市场的成熟度逐渐提升。加密货币不再是单纯的投机工具，而开始被更多人视为一种可持续的投资资产类别。与此同时，全球政府也逐渐开始对加密货币进行监管和引导，以平衡创新与风险。</p>

<p>加密货币的梦想或许是一场技术与金融的革命，但它的背后也不乏泡沫与骗局。在追逐财富与创新的过程中，我们更应保持理性和清醒。未来的加密货币，将是理想与现实之间不断碰撞的产物，如何在其中找到平衡，或许是每一个投资者和技术从业者的共同课题。</p>

<h2 id="当chatgpt遇上区块链新技术革命的交汇点">当ChatGPT遇上区块链：新技术革命的交汇点</h2>

<p>2022年11月30日，ChatGPT横空出世，创造了用户增长的新神话。我在当年的12月成为了ChatGPT的早期用户之一，并在次年四月决定把精力都投入到以大语言模型（Large Language Model, LLM）引领的AI科技浪潮中。大家往往喜欢把ChatGPT的发布作为本轮AI科技革命的起点，但早在ChatGPT发布的6个月前，AI生成图片的成功就已经为这场革命拉开了序幕。2022年5月17日，Marques Brownlee在YouTube上发表了一条题为《DALLE: AI Made This Thumbnail!》的视频，介绍了DALLE这一跨时代的AI产品，它可以根据用户的提示词生成你想要的图片。</p>

<p><img src="./images/2025-01-26-beyond-the-future-of-ai/680.png" alt="" />
<em>油管数码博主MKBHD关于DALLE的分享</em></p>

<p>我当时看完立刻就把视频转发给了朋友们，并附上留言「卧槽，这个吊！」。亚马逊雨林里的这只蝴蝶轻轻煽动了一下翅膀，它不会想到这次飓风会让众多的画师陷入失业的恐慌，6个月后，ChatGPT的发布让大家发现，艺术家、程序员、作家、科学家、工程师，大家都是可以被平等地替代的。</p>

<p>现如今，如果没有AI的辅助，我将很难开展工作。我会用自然语言让Cursor帮我写代码，让Gamma帮我做PPT，让NotebookLM帮我总结文章，让Claude帮我润色文章，让ChatGPT帮我写邮件和报告、和我一起进行头脑风暴，还有讨论新的科研想法。</p>

<p>那么这些与区块链和加密货币有什么关系呢？</p>

<blockquote>
  <p>你不能只改变一点而不改变一切。</p>

  <p>——奥地利哲学家，马丁·布伯</p>
</blockquote>

<p>在我看来，区块链和AI并非各自独立发展的技术，而是密切相互依存、相互促进的。三年前有人说AIGC（AI Generated Content，AI生成的内容）是补上了Web 3.0的最后一块缺口，这种说法不无道理。在Web 3.0的愿景中，区块链为数字世界中的每个实体赋予了唯一的标识，并且这种标识在链上是唯一、公开且不可篡改的，这给数字化世界的社区提供了很大的便利。与此相辅相成的是，AI技术正在重新定义内容创作和数据处理的方式。如果用区块链给所有AI生成的内容打上标识，大家就可以清晰地看到该内容是由人创造地还是由AI生成的，还能够对该内容的来源和演化进行清晰的追溯。这对防止互联网上充斥着各种真假难辨良莠不齐的AI生成内容有巨大帮助。</p>

<p>例如，当前已经有一些项目开始尝试将AI与区块链技术结合，以解决数字内容的版权保护和溯源问题。通过将AI生成的内容（如图片、音乐、视频等）的哈希值存储在区块链上，可以创建一个不可篡改的记录，证明该内容的所有权和创作时间。这种技术可以应用于数字艺术品、音乐作品、软件代码等领域，为创作者提供更好的版权保护，并为消费者提供更可信的数字内容来源。</p>

<p><img src="./images/2025-01-26-beyond-the-future-of-ai/690.png" alt="" />
<em>一个专为知识产权设计的区块链平台</em></p>

<p>区块链的运行需要大量的算力来维持，这就需要世界各地有很多的「矿工」们进行24小时不间断的「挖矿」，「挖矿」的过程实际就是通过运算来保证链上智能合约的顺利运行，「矿工」们也会由此得到一定的报酬（即我们交易加密货币时产生的手续费）。在刚刚过去的2024年，大语言模型对算力的巨量需求，依然让高性能显卡严重供不应求，NVIDIA从这波算力浪潮中赚的盆满钵满。算力的巨大提升，又造成了电力供应的短缺，所以可以看到在2024年，科技巨头们都在投资建设新的发电站，或者拨款研究新的高性能发电手段，即可控核聚变。</p>

<p>除了高性能显卡和可控核聚变，这次新技术革命还有什么关键基础设施的需求吗？有的，有的，脑机接口也是其中的重要一环。2016年，马斯克创立Neuralink，专注于开发植入式脑机接口技术。该公司的目标是实现人脑与机器之间的高度连接，以增强人类智能并降低人工智能带来的风险。在一次播客采访中，马斯克提到，Neuralink不仅为了给神经系统疾病患者提供新的治疗方案，更希望推动人类与人工智能之间的共生关系，他设想未来用户可以用意念控制机器人等设备，这将改变人类与机器之间的互动方式。</p>

<p><img src="./images/2025-01-26-beyond-the-future-of-ai/700.jpg" alt="" />
<em>马斯克的Neuralink</em></p>

<p>这种需求实际上比我们想象的更加迫切，目前最新的AI已经能在5秒钟的时间内读完一本100万字的书，并在15秒钟的时间内写出一份3000字的总结，这已经大大超越了人类的信息接受速度。在未来，随着AI更加广泛地参与到我们的生产生活中，我们一定需要更先进的传播媒介来加快我们与AI的交互速度，从而提高生产效率，保证人类在人机合作项目中的主导性。</p>

<h2 id="我眼中的未来从比特币到agi驱动的去中心化社会">我眼中的未来：从比特币到AGI驱动的去中心化社会</h2>

<p>在我眼中，未来的科技世界将由区块链（Web 3.0）、人工智能（LLM）、可控核聚变以及脑机接口这四大前沿技术交织而成。这些技术的结合，不仅将深刻改变我们的生活方式，还可能引领我们走向一个去中心化、由AGI（Artificial General Intelligence，通用人工智能）驱动的社会。在这个社会中，每个个体将拥有更多自主权，权力将不再集中过于少数机构和政府，而是分散于每一个参与者手中。</p>

<p>试想一下，当每棵树都被「NFT化」后，全球的环境保护事业能够真正得以推动，滥砍滥伐的行为能够被彻底制止。未来的社会，将不再单纯依赖传统的法律和政策，而是通过技术手段实现自我治理和自我规范。</p>

<p><img src="./images/2025-01-26-beyond-the-future-of-ai/710.png" alt="" />
<em>区块链在供应链管理中的应用</em></p>

<p>当记忆能被数字化之后，区块链会给我的记忆打上唯一的标记，让我确保「我是我」，避免我的记忆被克隆和滥用，解决数字化带来的伦理和法律挑战。</p>

<p>「意志是动物和物质的分割线，自由意志是人和动物的分割线。未来当AI数字人拥有大量算力，是否拥有自由意志？」当人工智能不仅仅是工具，而成为有意识的存在时，我们将不得不面对这一哲学命题的考验。随着AGI的到来，我们将不得不重新审视自由、权力与责任之间的关系。如何为AI设立边界，确保它始终为人类社会服务，这将是每个AI研究者和技术创新者无法回避的核心问题。</p>

<p>我们必须要设计出比区块链更为精巧的信任机制，为AI加装「护栏」；通过设计新的传播媒介，让人类始终在与AI的协作中处于领导地位；通过探索新的能量获取途径，实现对地球资源的可持续开发。只有这样，以人为本的AI（Human-Centric AI）才可能实现。</p>

<blockquote>
  <p>在马克思看来，劳动是实现人类价值的唯一途径，劳动定义了你是什么样的人。马克思设想的共产主义社会是人人都可以选择做自己喜欢做的事，可以今天做渔民，明天做教师，后天做工人，消灭雇佣关系之后，人可以有自由选择和表达的权利。在现代社会，决定经济增长的不是劳动和资本，而是技术。</p>

  <p>——《我们的未来·数字社会乌托邦》</p>
</blockquote>

<h2 id="参考文献与推荐阅读">参考文献与推荐阅读</h2>

<ul>
  <li>比特币价格突破10万美元，加密货币市场复苏</li>
  <li>特朗普推出“$TRUMP”代币，24小时暴涨240倍</li>
  <li>加密货币领域的全球资本博弈与价值观冲突</li>
  <li>梁州令·EP08：对谈比特币个人玩家：博士休学炒币后，我发现一个亿，只是进虚拟货币圈的门槛</li>
  <li><a href="https://mp.weixin.qq.com/s?__biz=Mzg5NzczMzM3MA==&amp;mid=2247483651&amp;idx=1&amp;sn=e8d04b8f58f2b3cdb96ae59fe22a1f76&amp;scene=21#wechat_redirect">我的Web 3.0学习笔记</a></li>
  <li><a href="https://mp.weixin.qq.com/s?__biz=Mzk0MzI3MTMxOA==&amp;mid=2247490156&amp;idx=1&amp;sn=2ef8d022336c3529337b247d09a08d6c&amp;scene=21#wechat_redirect">关于现货比特币ETF的概念和意义</a></li>
  <li>各大高校的区块链协会</li>
</ul>]]></content><author><name>Jinxiang Xie</name><email>jxTse@outlook.com</email></author><category term="Tech" /><category term="Finance" /><summary type="html"><![CDATA[From Web 3.0 to Bitcoin breaking $100K, from speculators to true believers - exploring the technical potential of cryptocurrency, its future direction, and the possibility of a decentralized society in the AGI era.]]></summary></entry><entry><title type="html">Wind Over the Hills: There But for the Grace of God Go I</title><link href="https://jxtse.github.io/blog/but-for-the-grace-of-god-go-i/" rel="alternate" type="text/html" title="Wind Over the Hills: There But for the Grace of God Go I" /><published>2024-12-08T00:00:00+08:00</published><updated>2024-12-08T00:00:00+08:00</updated><id>https://jxtse.github.io/blog/but-for-the-grace-of-god-go-i</id><content type="html" xml:base="https://jxtse.github.io/blog/but-for-the-grace-of-god-go-i/"><![CDATA[<h1 id="风轻轻拂过半山腰">风轻轻拂过半山腰</h1>

<p>封面图：普者黑村全景</p>

<p>过去两周，我在云南文山州丘北县普者黑村里的一个咖啡店做义工。在咖啡店里调咖啡，配酒，闲暇时买菜做饭、湖边垂钓，还有擦桌子、扫地，这些构成了我日常生活的点点滴滴。在这个远离城市喧嚣的地方，我找到了「久在樊笼里，复得返自然的」的那份宁静与自在。</p>

<h2 id="1-普者黑的山河与故事">1. <strong>普者黑的山河与故事</strong></h2>

<p>普者黑是国家5A级旅游景区，景区内有个普者黑湖，我们的咖啡店就坐落在湖边，湖对面是连绵的山丘。每到黄昏，霞光从山头倒映在湖面上，我们一边听着爵士乐，一边静静地看着太阳落下，偶尔会让人产生「我的生命就应该浪费在这种地方」的想法。</p>

<p>村子不大，我骑电动车从村头到村尾不过十分钟。淡季里游客寥寥，路边的店铺很多都没开门，还开着的几家酸汤米线和彝族小炒也快被我们吃了个遍。我觉得云南的美食完全被大家低估了，不管是在文山还是昆明，我吃到正宗的本地食物如荷叶鸡，红三剁，藕粉，鲜花饼都超出了我的预期，再配上一杯特色的酸角汁饮料，简直是对味蕾的双重享受。除了吃村里的小店，我们还自己买菜做了一些饭，比起先前在长沙下厨的恶劣条件，这次的厨房环境明显好了很多。跟着小红书的教程做了鱼香肉丝、木须肉、麻婆豆腐等经典菜式，还有正宗非遗扬州炒饭，既有趣又满足。</p>

<p><img src="./images/2024-12-08-but-for-the-grace-of-god-go-i/650.jpg" alt="" />
<em>村里的一家米线店叫馨宁，好吃</em></p>

<p>店里有一位本地的店员——小羊，多亏有她在，我们才能获得极佳的义工体验。她比我年龄小一岁，双鱼座，ISFP（在我的「威逼利诱」下才测出的），高一辍学后开始打工，从快递员做到咖啡师，家里有七个兄妹。小羊非常能干，总是主动揽下店里最累的活，她还教我们做咖啡、饮品、烘焙和料理。刚认识的时候只感觉她不善言辞，有点内向，但熟络之后我们聊的很开心。</p>

<p>小羊说她喜欢自由，姐姐和妹妹都已成家，而她还想去深圳闯一闯。她说自己没有明确的目标，也没想过职业规划，只想着走一步算一步。她的眼神带着一种我从未见过的坚定和无畏，仿佛自由是她与生俱来的权利。这应该是我第一次遇到跟我家庭条件、成长环境、生活习惯都不太相同的同龄人，在她身上，我看到了与我截然不同的生活轨迹，学到了很多东西。</p>

<p><img src="./images/2024-12-08-but-for-the-grace-of-god-go-i/660.jpg" alt="" />
<em>小羊，酷的嘞</em></p>

<p>咖啡店的老板郭总来自江苏，在北京上的大学，之后一家建筑设计院工作，在北京待了二十多年了。他跟我们讲了他大学时期骑车去爬慕田峪长城、去石景山游乐园摆摊和去苹果园倒卖自行车的经历，话语间流露出的都是对大学生活的怀念。他们那个年代上学真的太幸福了，可以和同学自由探索城市的各个角落，可以尝试和社会有很多的接触，还能够享受到北京极其优越的资源。问起他为什么选择离开北京来云南开咖啡店，他笑着说：「就是玩儿呗」。似乎无论年龄几何，他依旧还是当年下雪天，骑自行车去爬慕田峪长城摔了一跤的男孩，还在不断折腾呢。</p>

<p>店长张哥，来自台湾，在上海生活了二十多年。他原先也是做设计方面的工作，现在回归到柴米油盐，转型为咖啡店的大厨。他热衷在店里和客人攀谈聊天，听到很多有趣的故事。店里摆着很多台湾出版社出的书，我想也跟他有关。我抽空看了几本，他们的书阅读顺序是从右往左，从上到下，又是繁体字，所以读的很慢。其中有一本叫《丢掉胸罩去旅行》，讲一个女孩独自环游世界的故事，我被她在埃塞俄比亚、肯尼亚和乌干达等非洲国家的经历深深吸引，也希望有朝一日能踏上非洲草原的 Safari 之旅。</p>

<p><img src="./images/2024-12-08-but-for-the-grace-of-god-go-i/670.jpg" alt="" />
<em>在草坪上看书太惬意了</em></p>

<p>在云南的每一天，我都感觉自己活的非常「当下」，在干活的时候就只想着干活，休息的时候就悠闲地放松，没有焦虑，没有一堆无用的琐事缠身，只专注在眼前的生活。每天感觉自己做了很多事，但是时间还是根本用不完。</p>

<p>前一阵刷到一位清华大学特等奖学金候选人发的小红书，标题是「到底要多优秀才算优秀」。在云南我好像突然想明白，我追求的优秀其实是我的「枷锁」，优秀带来了更高的视野，却也带来了更多的束缚。做一个普通人，去湖边呼吸一下新鲜空气，在店里进行一些简单劳动，骑着电动车在村里穿梭溜达，是不是比挤在中关村的写字楼里自由？</p>

<p><img src="./images/2024-12-08-but-for-the-grace-of-god-go-i/680.jpg" alt="" />
<em>还有猫猫陪我玩</em></p>

<p>小羊一心向往的大城市，却是我、郭总和张哥等人想要逃离的地方。有人吃到了互联网的红利，工作10年在北京买了房，到了40岁却去草原开起了民宿；有人凭借自己出色的能力，去全世界旅居，在大理、清迈或者巴厘岛当起了数字游民；还有人住在燕郊或者房山，每天通勤身心俱疲，拼了命也要留在北京。其实我已经清楚的认识到，在北京的生活并不是一场永不落幕的冒险，我们四处奔波的意义是什么呢？</p>

<p>所以到底要多普通，才能自由呢？或许，自由从来不是一种固定的状态，而是一种勇敢迁徙和流动的能力。像一条河流，靠近山谷时安静，遇见悬崖时激荡。自由并不在何处停留，而在于我们是否愿意让自己不断前行。</p>

<p><img src="./images/2024-12-08-but-for-the-grace-of-god-go-i/690.jpg" alt="" />
<em>普者黑湖的日落</em></p>

<blockquote>
  <p>没有靠山的时候，不妨变成河流。人会在变动里充满生机，迁徙与漂泊的另一面是寻找与流动。</p>

  <p>——维安记《18岁到28岁：漂泊与迁徙是珍贵的能力》</p>
</blockquote>

<h2 id="2-有风的地方火焰的野性之歌">2. <strong>有风的地方：火焰的野性之歌</strong></h2>

<p>夜晚的普者黑湖边，熊熊的火焰在风中摇曳，仿佛一个狂野的灵魂在黑夜中舞蹈。这是为一群来自重庆的团建客人准备的篝火晚会，虽然只是店里的义工，但这一夜，我们也成为了这场狂欢的参与者。</p>

<p>晚会以云南的打歌拉开序幕。音乐声从音响里传出，旋律和鼓点迅速感染了每一个人。小羊第一个被拉了进去，她有些羞涩，但很快就融入了节奏。人们围成一个圈，手拉手，脚步随着音乐有节奏地起落，打歌的舞步简单但极具力量。即使不懂当地的语言，单靠着这高低起伏的旋律和人的笑声，我也能感受到那种炽热的情感。刚被拉进去的时候我的脚步有些凌乱，但很快便被人群的节奏带动，竟跳出了些许的自信。当气氛渐入高潮，有人端着啤酒，有人抱着小孩，甚至有人扛着椅子开始围着火堆跳舞。火光映着大家的脸，欢笑声、歌声混在一起。</p>

<p><img src="./images/2024-12-08-but-for-the-grace-of-god-go-i/700.jpg" alt="" />
<em>篝火晚会盛况</em></p>

<p>当打歌的节奏渐渐减弱，一束烟花从湖边冲天而起，划破夜空，绽放出炫目的光彩。所有人都停下了脚步，仰起头看着这场意料之外的烟火表演。烟花一束接一束地绽放，像是燃烧掉了整个夜晚的寂静，也点燃了所有人的激情。</p>

<p>有风的地方，火焰总会找到燃烧的理由。晚会的尾声，大家围坐在火堆旁，用酒洒向余烬，用木棒轻轻拍打。火星四溅，在黑夜中化为无数闪亮的星星。不知是谁拿来了呲花和冲天炮，火光下的狂欢又一次被点燃。我站在人群的边缘，仰头看着天空，感到了一种久违的释然。没有人关心彼此的身份、地位或过往，我们只是一些在火光下跳舞、歌唱的普通人。</p>

<p><img src="./images/2024-12-08-but-for-the-grace-of-god-go-i/710.jpg" alt="" />
<em>烟花和篝火</em></p>

<p>远处的山丘在火光的映衬下显得若隐若现，湖水中倒映着火焰的影子，微风拂过，整个世界都像是轻声在歌唱。</p>

<p>尼采说：「一个人只有走向远方，才能发现自己」。在普者黑的这段日子里，我第一次意识到，走向远方并不一定需要明确的目标，有时候，只是让心随风流动，就已经足够。</p>

<p>第二天，我们去清理晚会后的场地。篝火的残余旁散落着许多垃圾，我分拣出塑料垃圾装袋，将纸质的垃圾聚在一起，又点了一把火。湖边的风一吹，火苗瞬间升腾，烧得干净利落。我一边清理一边感叹，自己已经很久没有玩过火了。「生活是泥沙俱下的，但正因为如此，泥沙中偶尔发现的金子才让人觉得值得」，我想这段故事成为我在低迷时分的一束亮光，提醒我保持对生活的好奇与热爱。火焰本意味着疯狂与破坏，却也孕育出秩序和新生。正如孟岩说的：</p>

<blockquote>
  <p>这个世界向我承诺，我的生命中有美好的事物，不是因为我值得，不是因为我为之努力，而是因为他们和破坏与失去一样，是混乱的一部分。生是死的另一面，正如生长和腐烂互相依存。</p>

  <p>——《无人知晓·鱼不存在》</p>
</blockquote>

<h2 id="3-but-for-thegrace-of-god-go-i">3. <strong>But for the</strong> <strong>Grace of God Go I</strong></h2>

<p>如果你听了我的描述对这个偏远的村子心生向往，也想搬来这里居住，我劝你三思而行。</p>

<p>相比于城里，这里物资匮乏，交通不便，医疗条件也并不理想。从昆明南站坐高铁到普者黑站要一个多小时，然后从高铁站坐一个小时公交才能到村里。有一天我和小羊为了吃一顿麻辣烫，骑电动车去了最近的县城，来回花了三个多小时，冻的半死，吃完麻辣烫还有点头晕目眩。</p>

<p>在这之前我从未在农村真正生活过，我对中国乡土的狭隘认知，还停留平时在周末去踏青放松的几个近郊村镇。在普者黑村里，打开蓝色外卖软件是一片空白，黄色外卖软件上也只有零星的几家商户在营业；一般快递需要三四天才能到达，天猫超市或美团优选是少数可以次日达的渠道。</p>

<p>在这里有时候我感觉，农村好像是为了城市而生的。来店里的客人大多是从昆明、上海等大城市远道而来，寻求片刻的放松时光，好像很少可以服务到村里的居民。就好像阿那亚、崇礼和延庆是为了给北京的人度假，怀柔、密云是为了让北京的人吃上好的饭菜。城市急剧膨胀，农村人口大规模流失，让我们很少主动去关注农村的声音。谈起农村必谈脱贫攻坚，必谈乡村振兴是很狭隘的看法，农村也有自己的叙事和生活方式。</p>

<p><img src="./images/2024-12-08-but-for-the-grace-of-god-go-i/720.jpg" alt="" />
<em>右下角是用来拉车的马，远处是晨雾中的山</em></p>

<p>劳动的价值在这里格外凸显。虽然我自认为具备出色的劳动经验，中学时期我们学校还开过「劳动技能」课，但关于店里的事务，我之前引以为傲的「problem-solving ability」在这里完全失效，几乎事事都要小羊来教我。</p>

<p>春秋战国时期，孔子为代表的儒家学者因为整日钻研学问，不从事农业生产，而被百姓嘲笑「四体不勤，五谷不分」。我反思我接受的科研训练究竟给我带来了什么。从事人工智能领域的工作，我有幸见识到了世界上最聪明、最有能力的科技人才和他们的杰出作品。但我不希望前沿的技术只停留在浮夸的纸面宣传，我希望我的工作能够广泛地帮助人们，而这需要我对人们有广泛的理解。我做 AI Research 已经一年有余，一直聚焦在大语言模型在日常生活中的应用，在语法纠错上的应用，在 Excel 表格上的应用，在事实性检验上的应用。但这些我对村里的人都无从谈起，因为实在离他们太远了，我希望通过我的工作让 AI 更广泛地在生活中落地应用，比如更广泛更公平的教育，比如真正实现「机器工作，工人唱歌」的美好愿景。</p>

<p><img src="./images/2024-12-08-but-for-the-grace-of-god-go-i/730.jpg" alt="" />
<em>看看风景</em></p>

<p>这几天我读到吴恩达的Newsletter：</p>

<p>「当你看到有人因为5美元的鸡蛋太贵而放回货架，并思考如何向孩子解释时，这会让你更深刻地理解，为什么每小时1.50美元的加薪对许多人是改变命运的事情。</p>

<p>我对未来充满乐观，因为我看到有太多方法可以让许多人过上更好的生活。我感到幸运的是，当我的孩子或我觉得冷时，我们有温暖的衣物；当我们饿了时，我们有一辆能够工作的汽车，可以开车去杂货店购买新鲜的食物。我感到幸运的是，我不用一个严重破裂的手机，而是有一台现代化的电脑和快速的互联网来完成我的工作。小时候，我的父亲教会了我一句格言：若非上帝的恩典，我或许就是他们（There But for the Grace of God Go I）。这句话让我明白，即使是稍微不同的环境，我也可能会境遇截然不同」。我想我也是接受了上帝慷慨的馈赠。</p>

<p><img src="./images/2024-12-08-but-for-the-grace-of-god-go-i/740.jpg" alt="" />
<em>日落again</em></p>

<p>在这场旅途中，普者黑的风带走了一些迷惘，也留下了一些坚持。我在篝火旁看到了破与立的轮回，在风中感受到了生活的厚重与微光。未来的某天，当我坐在明亮的实验室里，再想起这个小村子时，我想，那些与人分享一杯酒、一支舞的夜晚，会提醒我，技术的价值始终要回到最本真的地方，那就是为人服务。</p>

<blockquote>
  <p>人真正的自由，是找到与世界的契合点，而非简单地逃离或驻留</p>

  <p>——海德格尔</p>
</blockquote>]]></content><author><name>Jinxiang Xie</name><email>jxTse@outlook.com</email></author><category term="Life" /><category term="Travel" /><summary type="html"><![CDATA[Two weeks volunteering at a lakeside cafe in Yunnan, and reflections on freedom, labor, rural life, and how privilege shapes our sense of possibility.]]></summary></entry></feed>