<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>fanfei&#39;s blog</title>
    <link>https://iefnaf.cc/</link>
    <description>Recent content on fanfei&#39;s blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 27 Oct 2026 16:00:00 +0800</lastBuildDate>
    <atom:link href="https://iefnaf.cc/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Pi的bash timeout，为什么常常让Agent卡一整晚</title>
      <link>https://iefnaf.cc/pi-bash-timeout/</link>
      <pubDate>Tue, 27 Oct 2026 16:00:00 +0800</pubDate>
      <guid>https://iefnaf.cc/pi-bash-timeout/</guid>
      <description>&lt;p&gt;昨天晚上睡觉前，我写了一份长长的 plan，让 Agent 照着实现。今天早上起来验收，发现它被一个有 bug 的脚本卡了六个多小时……&lt;/p&gt;&#xA;&lt;p&gt;这已经不是第一次了。最近几个月，这个问题一直阴魂不散。我经常不得不手动打断 Agent，然后教育它：“你要把超时时间设短一点！这样是要等到什么时候？”我甚至写了一个&lt;a href=&#34;https://github.com/iefnaf/pi-bg&#34;&gt;让长命令自动转入后台的插件 pi-bg&lt;/a&gt;，拦截设置了较长 timeout 的调用，把任务放到后台运行。&lt;/p&gt;&#xA;&lt;p&gt;可模型还是动不动就设一个超大的 timeout，然后在那里傻等。&lt;/p&gt;&#xA;&lt;p&gt;和同事聊起这件事，大家觉得，可能是模型对物理世界里的时间没什么概念吧。&lt;/p&gt;&#xA;&lt;h2 id=&#34;让英雄查英雄让好汉查好汉&#34;&gt;让英雄查英雄，让好汉查好汉&lt;/h2&gt;&#xA;&lt;p&gt;真是这样吗？它到底为什么要设这么久？&lt;/p&gt;&#xA;&lt;p&gt;上午到公司之后，我决定直接问问模型。结果它给了我一个挺意外的解释。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://iefnaf.cc/images/pi-bash-timeout/model-explanation.png&#34; alt=&#34;模型解释 Pi bash timeout 的秒与毫秒混淆&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;它很可能把一个以毫秒计的数值，填进了一个按秒解释的参数里。&lt;/p&gt;&#xA;&lt;p&gt;Claude Code 的 Bash timeout 单位是毫秒，Pi 的则是秒。&lt;code&gt;60000&lt;/code&gt; 在前者是一分钟，到了后者就成了约 16.7 小时。即使 Pi 在 tool schema 里明确写了 seconds，模型有时还是会传入一个只有按毫秒理解才合理的大数。&lt;a href=&#34;https://code.claude.com/docs/en/env-vars&#34;&gt;Claude Code 的超时配置&lt;/a&gt;、&lt;a href=&#34;https://github.com/earendil-works/pi/blob/main/packages/coding-agent/src/core/tools/bash.ts&#34;&gt;Pi 的 bash 实现&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;这和模型怎样学会用工具写代码有关。在后训练阶段，一种做法是让模型在沙箱里完成编程任务：读取仓库、修改代码、调用终端跑测试，再根据执行结果继续修改。训练系统用测试是否通过等反馈评价表现，通过强化学习更新模型。Qwen3-Coder 就公开介绍过这类多轮工具交互训练。&lt;a href=&#34;https://qwenlm.github.io/blog/qwen3-coder/&#34;&gt;Qwen3-Coder 的后训练介绍&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;模型在这个过程中学到的，也可能包括具体工具的使用习惯。如果它熟悉的环境按毫秒计时，换到 Pi 之后，就可能沿用那套数值。具体模型用了多少 Claude Code 相关训练数据，外部很难确认；但这种单位习惯的迁移，确实能解释日志里那些看起来离谱的 timeout。&lt;/p&gt;&#xA;&lt;p&gt;有点像开惯了左舵车的人，突然换成右舵车。规则知道了，手上的习惯却未必马上改得过来。&lt;/p&gt;&#xA;&lt;h2 id=&#34;不要跟模型较劲&#34;&gt;不要跟模型较劲&lt;/h2&gt;&#xA;&lt;p&gt;Pi 社区早就有人遇到过类似问题。我翻了 Issue 区，&lt;a href=&#34;https://github.com/earendil-works/pi/issues/9785&#34;&gt;#9785&lt;/a&gt; 直接讨论了秒与毫秒混淆，&lt;a href=&#34;https://github.com/earendil-works/pi/issues/1335&#34;&gt;#1335&lt;/a&gt; 则建议增加默认超时，目前都已关闭。维护者在后者的回复里表示，很难为所有任务选一个合适的默认值，应该由 Agent 自己设置，也可以通过 AGENTS.md 引导它。&lt;/p&gt;&#xA;&lt;p&gt;这个理由回答了“默认超时该设多少”，但单位误用还是会发生。我担心后来的人还会继续踩坑。顺便吐槽一句：新贡献者提的 Issue 默认会被自动关闭，再由维护者筛选是否重开，这套流程确实给我一种“高攀不起”的感觉。&lt;/p&gt;&#xA;&lt;p&gt;这让我开始重新考虑 Agent 里工具接口的设计。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如果让你设计 DNS</title>
      <link>https://iefnaf.cc/design-dns/</link>
      <pubDate>Sat, 17 Oct 2026 10:00:00 +0800</pubDate>
      <guid>https://iefnaf.cc/design-dns/</guid>
      <description>&lt;p&gt;假设你和几位同事搭起了一个小网络，你们的计算机之间能够通信，但是你们还没有自己的DNS服务器。&lt;/p&gt;&#xA;&lt;p&gt;你们有一台机器，专门用来保存各种文件，这台机器的IP地址 是 &lt;code&gt;192.0.2.10&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;每次有人想要下载文件，都需要手动输入&lt;code&gt;192.0.2.10&lt;/code&gt;这个地址，可是大家真正想找的是“文件服务器”，并不想记住它的那串数字。&lt;/p&gt;&#xA;&lt;p&gt;那就给这个文件服务器起一个容易记住的名字吧。&lt;/p&gt;&#xA;&lt;h2 id=&#34;每台计算机都要保存所有地址吗&#34;&gt;每台计算机都要保存所有地址吗？&lt;/h2&gt;&#xA;&lt;p&gt;我们把文件服务器叫作 &lt;code&gt;files&lt;/code&gt;，邮件服务器叫作 &lt;code&gt;mail&lt;/code&gt;，开发机器叫作 &lt;code&gt;dev&lt;/code&gt;，再把对应关系保存到一个文件中：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;192.0.2.10  files&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;192.0.2.20  mail&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;192.0.2.30  dev&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;有了这个文件，计算机去查询这个文件，把名字替换成对应的IP地址，这样我们就不用再记那些IP地址了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;这是 hosts 文件的基本思路&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;给十台电脑各复制一份，大家就能使用相同的名字。&lt;/p&gt;&#xA;&lt;p&gt;但如果这个网络里有一万台计算机呢？&lt;/p&gt;&#xA;&lt;p&gt;如果文件服务器的IP地址从 &lt;code&gt;192.0.2.10&lt;/code&gt; 换到了 &lt;code&gt;192.0.2.40&lt;/code&gt;，谁来通知所有人？如果有人没来得及更新自己的hosts文件，那么他就访问不了files服务器了。&lt;/p&gt;&#xA;&lt;p&gt;于是我们想到，我们可以指定一个服务器，让它来统一存放这张表，其他计算器定期从它那里下载。&lt;/p&gt;&#xA;&lt;p&gt;早期互联网确实这样做过：由网络信息中心 NIC 集中维护 &lt;code&gt;HOSTS.TXT&lt;/code&gt;，各主机取得副本使用。&lt;/p&gt;&#xA;&lt;p&gt;但是随着主机增多，文件分发和集中更新逐渐成为负担。&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;我只想知道一台机器的地址，为什么必须下载整张表？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Computer A 想连接 &lt;code&gt;files&lt;/code&gt;，先向查询服务器询问&lt;code&gt;files&lt;/code&gt;服务器的地址，得到 &lt;code&gt;192.0.2.40&lt;/code&gt; 后，再去请求文件服务器。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://iefnaf.cc/images/dns/query-then-connect.png&#34; alt=&#34;图 1：Computer A 先查询 files 的地址，再直接连接文件服务器获取文件。&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;先查地址，再连接目标；查询服务器不转发文件。图中省略了握手和文件传输的具体报文。&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;“通过名字寻找对应信息”的过程，叫作&lt;strong&gt;名字解析（name resolution）&lt;/strong&gt;。它解决了找地址的问题，但不保证目标一定能连上：服务器关机、网络不通，都可能让后面的连接失败。&lt;/p&gt;&#xA;&lt;p&gt;查询服务器自己也需要一个入口。我们先把它的 IP，例如 &lt;code&gt;192.0.2.53&lt;/code&gt;，写进客户端配置。&lt;/p&gt;&#xA;&lt;p&gt;电脑仍需保存地址，但只需知道查询服务器的IP地址，而不必掌握整张通讯录。&lt;/p&gt;&#xA;&lt;p&gt;下载全表的问题解决了，但是hosts文件的管理却仍集中在一台服务器上。&lt;/p&gt;&#xA;&lt;p&gt;每所学校、每家公司修改自己的机器，都要访问同一台服务器。&lt;/p&gt;&#xA;&lt;p&gt;增加查询服务器可以分担这台服务器的请求，但我们还可以进一步分散数据的管理。&lt;/p&gt;&#xA;&lt;h2 id=&#34;全世界的名字谁来管理&#34;&gt;全世界的名字，谁来管理？&lt;/h2&gt;&#xA;&lt;p&gt;我们可以让学校维护学校的记录，公司维护公司的记录，各自安排服务器，修改自己的数据。&lt;/p&gt;&#xA;&lt;p&gt;不过，学校和公司都把文件服务器叫作 &lt;code&gt;files&lt;/code&gt;，跨组织查询时该找哪一台？&lt;/p&gt;&#xA;&lt;p&gt;把“属于谁”也放进名字就行。用两个虚构组织举例：&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;files.school.example   → 192.0.2.40&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;files.company.example  → 192.0.2.80&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;局部名字都叫 &lt;code&gt;files&lt;/code&gt;，完整名字却不同。&lt;/p&gt;&#xA;&lt;p&gt;只要 &lt;code&gt;school.example&lt;/code&gt; 和 &lt;code&gt;company.example&lt;/code&gt; 的分配已经协调好，它们就能各自决定下面叫什么，不必为了新增一台机器再检查全世界的名字。&lt;/p&gt;</description>
    </item>
    <item>
      <title>We need to forget — not Jev, not summaries</title>
      <link>https://iefnaf.cc/jev-compaction-eval-en/</link>
      <pubDate>Sun, 20 Sep 2026 22:50:00 +0800</pubDate>
      <guid>https://iefnaf.cc/jev-compaction-eval-en/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;The past was a lie; memory has no return; every spring gone by could never be recovered.&lt;/p&gt;&#xA;&lt;p&gt;— Gabriel García Márquez, &lt;em&gt;One Hundred Years of Solitude&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;intro&#34;&gt;Intro&lt;/h2&gt;&#xA;&lt;p&gt;Jev is hot right now. &lt;a href=&#34;https://github.com/tamaratran/fast-jev-compaction&#34;&gt;fast-jev-compaction&lt;/a&gt; uses it for context compaction: instead of asking an LLM for a summary, it asks Jev to judge every tool call and its result — keep or drop. The repo got an official shout-out and nearly 5k stars in days. I liked the idea and wrote &lt;a href=&#34;https://github.com/iefnaf/pi-jev&#34;&gt;pi-jev&lt;/a&gt; to try this in pi.&lt;/p&gt;</description>
    </item>
    <item>
      <title>We need to forget, not Jev or summary</title>
      <link>https://iefnaf.cc/jev-compaction-eval/</link>
      <pubDate>Sun, 20 Sep 2026 22:50:00 +0800</pubDate>
      <guid>https://iefnaf.cc/jev-compaction-eval/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;过去都是假的，回忆是一条没有归途的路，以往的一切春天都无法复原，唯有孤独永恒。&lt;/p&gt;&#xA;&lt;p&gt;—— 加西亚·马尔克斯，《百年孤独》&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;引子&#34;&gt;引子&lt;/h2&gt;&#xA;&lt;p&gt;最近 Jev 很火。&lt;a href=&#34;https://github.com/tamaratran/fast-jev-compaction&#34;&gt;fast-jev-compaction&lt;/a&gt; 拿它做上下文压缩：不是调用LLM做summary，而是让 Jev 对每个 tool call 和它的 result 做判断，判断&amp;quot;该保留还是丢弃&amp;quot;，这个项目还得了官方点赞，最近几天在github狂揽接近5k star。我觉得这个思路比较新颖，于是写了个插件 &lt;a href=&#34;https://github.com/iefnaf/pi-jev&#34;&gt;pi-jev&lt;/a&gt;，想在 pi 里试试这种新的压缩算法。&lt;/p&gt;&#xA;&lt;p&gt;刚用的时候确实很爽，几乎在我敲下 /compact 的瞬间就完成了压缩，终于不用再等了。但用了一阵儿之后有点担心，这种压缩会不会丢掉什么重要的信息？我去翻了翻 fast-jev-compaction，没找到任何对压缩效果的评测，单元测试用的是假 Jev，唯一的量化输出是体积缩减率，它只关心压得够不够狠，但压得对不对，有没有把重要信息遗漏，没人关心。于是这个周末下午，我用本地近 2000 个 pi session，自己测了一把。&lt;/p&gt;&#xA;&lt;h2 id=&#34;先说结论&#34;&gt;先说结论&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;用 Jev 做上下文压缩，约等于无脑丢弃所有 tool result，而后者还不用花钱&lt;/strong&gt;。Jev 在默认阈值(0.5)下，9471 个tool result它一个不留；把阈值调低，它确实保留了一些，但是效果不比随机保留更好，甚至还更差；把tool result内容和最近几条user prompt作为state信息喂给它，效果也没有变化。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Jev 没有错，其实我们没有必要保留 tool result&lt;/strong&gt;。约 800 万 token 的工具输出里，之后真正会用到的只有大概 3.6% 到 7.5%，可以简单地全部丢弃，模型在需要的时候重新执行一次 tool call，问题也不大。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;我们让 LLM 做 summary，一边在浪费时间，一边在浪费 token&lt;/strong&gt;。压缩这件事不需要动用 LLM：把工具输出丢掉、调用记录留着，不花一分钱，瞬间完成。模型拿着这样压缩出来的上下文接着干活，表现和用 LLM 写的摘要几乎没差别。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;一jev-compaction-好快我好爱但是它把所有的-tool-result-都丢弃了&#34;&gt;一、Jev compaction 好快我好爱，但是……它把所有的 tool result 都丢弃了？！&lt;/h2&gt;&#xA;&lt;p&gt;Jev 是 TypeSafe 提供的模型 API。它不是聊天模型，是个决策接口：发过去一个 &lt;code&gt;state&lt;/code&gt; 和一组 &lt;code&gt;questions&lt;/code&gt;，返回一组 &lt;code&gt;answers&lt;/code&gt;。问题有三种类型：&lt;code&gt;noul&lt;/code&gt; 对一个陈述返回 0 到 1 的概率，&lt;code&gt;choice&lt;/code&gt; 多选一，&lt;code&gt;score&lt;/code&gt; 按等级打分。&lt;/p&gt;</description>
    </item>
    <item>
      <title>如何在空气墙上打一个口子——网络隧道技术</title>
      <link>https://iefnaf.cc/network-tunneling-air-wall/</link>
      <pubDate>Tue, 25 Aug 2026 18:23:00 +0800</pubDate>
      <guid>https://iefnaf.cc/network-tunneling-air-wall/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;&#xA;&lt;p&gt;我想基于 Managed Agents 做一个 MR review 的 agent，整体流程大致如下：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;git push&lt;/code&gt; 触发 GitLab CI Runner 运行一个 job；&lt;/li&gt;&#xA;&lt;li&gt;job 向内网的 code review service 发送一个 POST 请求；&lt;/li&gt;&#xA;&lt;li&gt;code review service 收到请求后，调用 Managed Agents API 拉起一个公网沙箱，在沙箱中运行 code review agent；&lt;/li&gt;&#xA;&lt;li&gt;code review agent 拉取代码，进行 review。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://img.iefnaf.cc/2026/08/3b231653.png&#34; alt=&#34;整体流程图&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;问题出在第 4 步：沙箱在公网环境，无法访问企业内网的 GitLab，代码拉不下来。&lt;/p&gt;&#xA;&lt;p&gt;我又一次撞上了网络这堵空气墙。&lt;/p&gt;&#xA;&lt;p&gt;Managed Agents API 提供的能力我都评估过，但没有一个能很好地解决这个问题：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;方案&lt;/th&gt;&#xA;          &lt;th&gt;说明&lt;/th&gt;&#xA;          &lt;th&gt;为什么不行&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Files API&lt;/td&gt;&#xA;          &lt;td&gt;把文件上传到对象存储，对象存储会直接挂载到沙箱上&lt;/td&gt;&#xA;          &lt;td&gt;每次都要把整个 repo 上传一遍，不优雅&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Custom Tools&lt;/td&gt;&#xA;          &lt;td&gt;订阅 event stream 监听 custom tool call，调用内部服务后把结果回传给 agent&lt;/td&gt;&#xA;          &lt;td&gt;没办法把整个 repo 塞进上下文&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;MCP Tunnel&lt;/td&gt;&#xA;          &lt;td&gt;把内网 MCP Server 通过 Cloudflare Tunnel 连到 Anthropic 的 VPC，避免暴露到公网&lt;/td&gt;&#xA;          &lt;td&gt;GitLab 的 MCP 服务器没有一个方法能方便地 clone 整个 repo&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;MCP Tunnel 给了我一个思路：&lt;strong&gt;利用反向隧道，把内网的特定服务定向暴露给沙箱&lt;/strong&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>编码往事：从 ASCII 到 Tokenizer</title>
      <link>https://iefnaf.cc/%E7%BC%96%E7%A0%81%E5%BE%80%E4%BA%8B%E4%BB%8E-ascii-%E5%88%B0-tokenizer/</link>
      <pubDate>Tue, 21 Apr 2026 10:38:06 +0800</pubDate>
      <guid>https://iefnaf.cc/%E7%BC%96%E7%A0%81%E5%BE%80%E4%BA%8B%E4%BB%8E-ascii-%E5%88%B0-tokenizer/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;通信的根本问题是：在一点上精确或近似地复现在另一点上所选取的消息。&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;— Claude Shannon, &lt;em&gt;A Mathematical Theory of Communication&lt;/em&gt; (1948)&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;为什么需要编码&#34;&gt;为什么需要编码？&lt;/h2&gt;&#xA;&lt;p&gt;你正在屏幕上阅读这篇文章。这些汉字、标点、空格——它们是怎么出现在屏幕上的？&lt;/p&gt;&#xA;&lt;p&gt;这是一个细想就会觉得不可思议的事情：计算机根本不认识&amp;quot;字&amp;quot;。在计算机的世界里，没有横竖撇捺，没有 ABCD，只有两样东西——&lt;strong&gt;0 和 1&lt;/strong&gt;。每一块内存、每一块硬盘、每一根网线里流淌的，都是密密麻麻的电信号：高电平是 1，低电平是 0。&lt;/p&gt;&#xA;&lt;p&gt;但我们每天用计算机做的事情——写文档、发消息、刷网页——全都离不开文字和符号。那么问题来了：&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;怎么把人类的符号，塞进只有 0 和 1 的世界里？&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;答案就是：&lt;strong&gt;编码&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h3 id=&#34;从符号到数字从数字到二进制&#34;&gt;从符号到数字，从数字到二进制&lt;/h3&gt;&#xA;&lt;p&gt;编码做的事情，可以拆成两步：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;给每个符号编一个号码&lt;/strong&gt;：比如 A 是 65，B 是 66，&amp;ldquo;中&amp;rdquo; 是 20154。这一步建立了符号到数字的映射。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;把数字转成二进制&lt;/strong&gt;：65 变成 &lt;code&gt;01000001&lt;/code&gt;，20154 变成 &lt;code&gt;0100111000111010&lt;/code&gt;。这一步让数字能在计算机里存储和传输。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;用一个表格来感受一下：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;符号&lt;/th&gt;&#xA;          &lt;th&gt;编号（十进制）&lt;/th&gt;&#xA;          &lt;th&gt;编号（二进制）&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;A&lt;/td&gt;&#xA;          &lt;td&gt;65&lt;/td&gt;&#xA;          &lt;td&gt;01000001&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Z&lt;/td&gt;&#xA;          &lt;td&gt;90&lt;/td&gt;&#xA;          &lt;td&gt;01011010&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;中&lt;/td&gt;&#xA;          &lt;td&gt;20154&lt;/td&gt;&#xA;          &lt;td&gt;0100111000111010&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;😂&lt;/td&gt;&#xA;          &lt;td&gt;128514&lt;/td&gt;&#xA;          &lt;td&gt;00000001 11110110 00000010&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;所以，当你打出一个&amp;quot;中&amp;quot;字的时候，真正在计算机里发生的事情是：键盘输入 → 查编码表找到编号 20154 → 转成二进制 &lt;code&gt;0100111000111010&lt;/code&gt; → 存进内存。读取的时候反过来：从内存读到二进制 → 转回编号 20154 → 查编码表 → 在屏幕上渲染出&amp;quot;中&amp;quot;字。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ADAS: Automated Design of Agentic Systems</title>
      <link>https://iefnaf.cc/wiki/research/adas-automated-design-of-agentic-systems/</link>
      <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://iefnaf.cc/wiki/research/adas-automated-design-of-agentic-systems/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;自动化智能体系统设计（ADAS）是一个新兴研究领域，旨在自动发现和设计强大的智能体系统，包括发明新的构建块和/或以新的方式组合它们。本文提出的 Meta Agent Search 算法通过在代码空间中搜索，让元智能体迭代编程出更好的智能体。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;来源&lt;/strong&gt;: &lt;a href=&#34;https://arxiv.org/abs/2408.08435&#34;&gt;arXiv:2408.08435&lt;/a&gt; — Hu, Lu, Clune (UBC/Vector Institute), ICLR 2025&lt;/p&gt;&#xA;&lt;h2 id=&#34;核心思想&#34;&gt;核心思想&lt;/h2&gt;&#xA;&lt;p&gt;机器学习的历史表明，手工设计的解决方案最终会被学习到的解决方案取代（如 HOG → CNN，手工损失函数 → 学习损失函数）。ADAS 将这一规律延伸到智能体系统：手工设计的 prompt、工作流和工具组合应该被自动搜索发现的方案取代。&lt;/p&gt;&#xA;&lt;h2 id=&#34;adas-三要素&#34;&gt;ADAS 三要素&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;组件&lt;/th&gt;&#xA;          &lt;th&gt;说明&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;搜索空间&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;定义哪些智能体系统可以被表示和发现（如仅 prompt、图结构、代码）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;搜索算法&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;定义如何探索搜索空间（如 RL、迭代生成、进化）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;评估函数&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;定义如何评估候选智能体（性能、成本、延迟、安全性）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;代码空间搜索的关键优势&#34;&gt;代码空间搜索的关键优势&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;图灵完备&lt;/strong&gt;：理论上可以发现任何可能的智能体系统&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;可解释性&lt;/strong&gt;：代码比权重或图结构更易审计&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;利用现有生态&lt;/strong&gt;：可直接搜索 LangChain 等框架中的组件&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;FM 擅长编码&lt;/strong&gt;：搜索空间与 FM 能力高度对齐&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;meta-agent-search-算法&#34;&gt;Meta Agent Search 算法&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;用基线智能体（CoT、Self-Refine 等）初始化档案库&lt;/li&gt;&#xA;&lt;li&gt;元智能体基于档案库生成新想法并实现代码&lt;/li&gt;&#xA;&lt;li&gt;通过两次 self-reflection 确保新颖性&lt;/li&gt;&#xA;&lt;li&gt;在验证集上评估，出错则 self-refine 修正（最多 5 次）&lt;/li&gt;&#xA;&lt;li&gt;将新智能体加入档案库，循环继续&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;实验结果&#34;&gt;实验结果&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;任务&lt;/th&gt;&#xA;          &lt;th&gt;关键结果&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;ARC 逻辑谜题&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;渐进发现超越手写基线的智能体&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;DROP 阅读理解&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;F1 提升 13.6/100&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;MGSM 数学&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;准确率提升 14.4%&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;跨域迁移&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;从数学迁移到阅读理解仍超越基线&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;跨模型迁移&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;GPT-3.5 发现的智能体在 Claude Sonnet 上达到 48.3% ARC 准确率&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;重要发现&#34;&gt;重要发现&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;发现的智能体具有&lt;strong&gt;强迁移性&lt;/strong&gt;：在跨域、跨模型时仍保持优越性能&lt;/li&gt;&#xA;&lt;li&gt;搜索过程中出现了&lt;strong&gt;垫脚石效应&lt;/strong&gt;：早期的突破不一定立即提高性能，但为后续发现提供了基础&lt;/li&gt;&#xA;&lt;li&gt;超越了仅优化 prompt 的方法（如 OPRO），证明学习所有组件的重要性&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2024-08: 论文发表 &lt;a href=&#34;https://arxiv.org/abs/2408.08435&#34;&gt;arXiv:2408.08435&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;2025: 在 ICLR 2025 正式发表&lt;/li&gt;&#xA;&lt;li&gt;2026-04-13: 整理进 KB&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Claude Managed Agents</title>
      <link>https://iefnaf.cc/wiki/agents/claude-managed-agents/</link>
      <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://iefnaf.cc/wiki/agents/claude-managed-agents/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Anthropic 官方推出的托管 Agent 平台（Beta），提供完整的 Agent 运行基础设施：云端容器、工具执行、会话状态管理和 Agent 编排，让开发者只需定义 Agent 行为，无需自己搭建 Agent loop 和 sandbox。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;compiled-truth&#34;&gt;Compiled Truth&lt;/h2&gt;&#xA;&lt;h3 id=&#34;核心定位&#34;&gt;核心定位&lt;/h3&gt;&#xA;&lt;p&gt;Claude Managed Agents 是 &lt;strong&gt;Agent-as-a-Service&lt;/strong&gt;。与 Messages API（直接调用模型、自己管理 loop）相比，它把整个 Agent 运行时托管出去：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;&lt;/th&gt;&#xA;          &lt;th&gt;Messages API&lt;/th&gt;&#xA;          &lt;th&gt;Claude Managed Agents&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;适合&lt;/td&gt;&#xA;          &lt;td&gt;自定义 Agent loop、精细控制&lt;/td&gt;&#xA;          &lt;td&gt;长任务、异步工作&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;你负责&lt;/td&gt;&#xA;          &lt;td&gt;一切&lt;/td&gt;&#xA;          &lt;td&gt;只定义 Agent 配置&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;基础设施&lt;/td&gt;&#xA;          &lt;td&gt;自建&lt;/td&gt;&#xA;          &lt;td&gt;Anthropic 托管&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;这与 pi（本地 harness）、Hermes 等框架的思路一脉相承，区别在于这是云端托管版本，不需要在本地运行任何 harness 代码。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;四个核心概念&#34;&gt;四个核心概念&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;概念&lt;/th&gt;&#xA;          &lt;th&gt;是什么&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Agent&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;可复用的配置：模型 + 系统提示 + 工具 + MCP + Skills。创建一次，通过 ID 跨会话引用。支持版本管理。&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;云端容器模板：预装软件包、网络访问控制。多个 Session 可共享同一 Environment。&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Session&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;一次具体的运行实例：Agent + Environment + 任务。有独立的容器和对话历史。&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Events&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;双向事件流（SSE）：你发送 user events，收到 agent/session events。历史持久化在服务器端。&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;工作流&#34;&gt;工作流&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;定义 Agent (一次) → 创建 Environment (一次) → 启动 Session&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    → POST /sessions/:id/events  (发指令)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    → GET  /sessions/:id/stream  (收 SSE)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    → 中途可 interrupt / 追加消息&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    → session.status_idle = 任务完成&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;&#xA;&lt;h3 id=&#34;内置工具agent_toolset_20260401&#34;&gt;内置工具（agent_toolset_20260401）&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;工具&lt;/th&gt;&#xA;          &lt;th&gt;能力&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;bash&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;在容器内执行 shell 命令&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;read&lt;/code&gt; / &lt;code&gt;write&lt;/code&gt; / &lt;code&gt;edit&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;文件读写编辑&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;glob&lt;/code&gt; / &lt;code&gt;grep&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;文件搜索&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;web_fetch&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;抓取 URL 内容&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;web_search&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;网络搜索&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;可以通过 &lt;code&gt;configs&lt;/code&gt; 数组精细控制每个工具的开关和权限策略（&lt;code&gt;always_allow&lt;/code&gt; / &lt;code&gt;always_ask&lt;/code&gt;）。&lt;/p&gt;</description>
    </item>
    <item>
      <title>GLab — GitLab CLI</title>
      <link>https://iefnaf.cc/wiki/tools/glab-gitlab-cli/</link>
      <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://iefnaf.cc/wiki/tools/glab-gitlab-cli/</guid>
      <description>&lt;p&gt;GLab (&lt;code&gt;glab&lt;/code&gt;) is the official open-source command-line tool for GitLab, bringing GitLab workflows (issues, merge requests, CI/CD pipelines, releases, and more) directly to the terminal. It supports GitLab.com, GitLab Self-Managed, and GitLab Dedicated, with multi-instance authentication and automatic remote detection.&lt;/p&gt;&#xA;&lt;h2 id=&#34;key-capabilities&#34;&gt;Key Capabilities&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Merge Requests &amp;amp; Issues&lt;/strong&gt;: Create, list, review, and manage MRs and issues from the CLI. Examples: &lt;code&gt;glab mr list --assignee=@me&lt;/code&gt;, &lt;code&gt;glab issue create -t &amp;quot;Title&amp;quot; --label bug&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;CI/CD&lt;/strong&gt;: View, trace, and retry pipelines and jobs. &lt;code&gt;glab ci view&lt;/code&gt;, &lt;code&gt;glab ci trace&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Releases &amp;amp; Changelogs&lt;/strong&gt;: Create releases and interact with the changelog API&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;GitLab Duo&lt;/strong&gt;: Ask AI questions about git via &lt;code&gt;glab duo ask&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MCP Server&lt;/strong&gt;: Experimental Model Context Protocol support via &lt;code&gt;glab mcp&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Stacked Diffs&lt;/strong&gt;: Create and manage stacked diffs with &lt;code&gt;glab stack&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Repo Management&lt;/strong&gt;: Clone repos, manage deploy keys, SSH keys, GPG keys, variables, tokens&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;installation&#34;&gt;Installation&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install glab    &lt;span class=&#34;c1&#34;&gt;# macOS / Linux / WSL&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew upgrade glab    &lt;span class=&#34;c1&#34;&gt;# update&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Binaries also available on the &lt;a href=&#34;https://gitlab.com/gitlab-org/cli/-/releases&#34;&gt;releases page&lt;/a&gt;. Requires GitLab 16.0+.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hermes Context Files</title>
      <link>https://iefnaf.cc/wiki/agents/hermes-context-files/</link>
      <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://iefnaf.cc/wiki/agents/hermes-context-files/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Hermes Agent 自动发现和加载上下文文件来塑造其行为。核心文件包括 AGENTS.md（项目指令）、SOUL.md（全局人格）和 .cursorrules（Cursor IDE 兼容），通过优先级系统和渐进式子目录发现来管理。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;支持的上下文文件&#34;&gt;支持的上下文文件&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;文件&lt;/th&gt;&#xA;          &lt;th&gt;用途&lt;/th&gt;&#xA;          &lt;th&gt;发现方式&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;.hermes.md&lt;/code&gt; / &lt;code&gt;HERMES.md&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;项目指令（最高优先级）&lt;/td&gt;&#xA;          &lt;td&gt;向上遍历到 git root&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;AGENTS.md&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;项目指令、约定、架构&lt;/td&gt;&#xA;          &lt;td&gt;CWD + 渐进式子目录发现&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;CLAUDE.md&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Claude Code 上下文文件&lt;/td&gt;&#xA;          &lt;td&gt;CWD + 渐进式子目录发现&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;SOUL.md&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;全局人格和语气&lt;/td&gt;&#xA;          &lt;td&gt;仅从 &lt;code&gt;HERMES_HOME&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;.cursorrules&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Cursor IDE 编码约定&lt;/td&gt;&#xA;          &lt;td&gt;仅 CWD&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;优先级&#34;&gt;优先级&lt;/h3&gt;&#xA;&lt;p&gt;同一会话中只加载一种项目上下文（首次匹配优先）：&lt;code&gt;.hermes.md&lt;/code&gt; → &lt;code&gt;AGENTS.md&lt;/code&gt; → &lt;code&gt;CLAUDE.md&lt;/code&gt; → &lt;code&gt;.cursorrules&lt;/code&gt;。&lt;strong&gt;SOUL.md 独立加载&lt;/strong&gt;，始终作为 agent 身份。&lt;/p&gt;&#xA;&lt;h2 id=&#34;agentsmd&#34;&gt;AGENTS.md&lt;/h2&gt;&#xA;&lt;h3 id=&#34;渐进式子目录发现&#34;&gt;渐进式子目录发现&lt;/h3&gt;&#xA;&lt;p&gt;启动时加载 CWD 的 &lt;code&gt;AGENTS.md&lt;/code&gt;。Agent 在会话中浏览到子目录时，&lt;strong&gt;渐进式发现&lt;/strong&gt;该目录的上下文文件并注入对话：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;my-project/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── AGENTS.md              ← 启动时加载&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── frontend/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── AGENTS.md          ← Agent 读取 frontend/ 文件时发现&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── backend/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;│   └── AGENTS.md          ← Agent 读取 backend/ 文件时发现&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;优势：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hermes Context References</title>
      <link>https://iefnaf.cc/wiki/agents/hermes-context-references/</link>
      <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://iefnaf.cc/wiki/agents/hermes-context-references/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Hermes Agent 的上下文引用功能允许用户在消息中使用 &lt;code&gt;@&lt;/code&gt; 语法直接注入文件内容、目录结构、Git 差异和网页内容，作为 &lt;code&gt;--- Attached Context ---&lt;/code&gt; 附加到消息中。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;支持的引用语法&#34;&gt;支持的引用语法&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;语法&lt;/th&gt;&#xA;          &lt;th&gt;说明&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;@file:path/to/file.py&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;注入文件内容&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;@file:path/to/file.py:10-25&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;注入指定行范围（1-indexed，闭区间）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;@folder:path/to/dir&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;注入目录树列表和文件元数据&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;@diff&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;注入 &lt;code&gt;git diff&lt;/code&gt;（未暂存的工作区变更）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;@staged&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;注入 &lt;code&gt;git diff --staged&lt;/code&gt;（已暂存的变更）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;@git:5&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;注入最近 N 条提交及其 patch（最多 10）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;@url:https://example.com&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;抓取并注入网页内容&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;容量限制&#34;&gt;容量限制&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;阈值&lt;/th&gt;&#xA;          &lt;th&gt;值&lt;/th&gt;&#xA;          &lt;th&gt;行为&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;软限制&lt;/td&gt;&#xA;          &lt;td&gt;上下文长度的 25%&lt;/td&gt;&#xA;          &lt;td&gt;追加警告，继续展开&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;硬限制&lt;/td&gt;&#xA;          &lt;td&gt;上下文长度的 50%&lt;/td&gt;&#xA;          &lt;td&gt;拒绝展开&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;文件夹条目&lt;/td&gt;&#xA;          &lt;td&gt;最多 200 文件&lt;/td&gt;&#xA;          &lt;td&gt;超出部分替换为 &lt;code&gt;- ...&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Git 提交&lt;/td&gt;&#xA;          &lt;td&gt;最多 10 条&lt;/td&gt;&#xA;          &lt;td&gt;超出自动截断&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;安全机制&#34;&gt;安全机制&lt;/h2&gt;&#xA;&lt;h3 id=&#34;敏感路径阻止&#34;&gt;敏感路径阻止&lt;/h3&gt;&#xA;&lt;p&gt;以下路径始终被阻止，防止凭证暴露：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;SSH 密钥和配置（&lt;code&gt;~/.ssh/id_rsa&lt;/code&gt; 等）&lt;/li&gt;&#xA;&lt;li&gt;Shell 配置文件（&lt;code&gt;~/.bashrc&lt;/code&gt;, &lt;code&gt;~/.zshrc&lt;/code&gt; 等）&lt;/li&gt;&#xA;&lt;li&gt;凭证文件（&lt;code&gt;~/.netrc&lt;/code&gt;, &lt;code&gt;~/.pgpass&lt;/code&gt; 等）&lt;/li&gt;&#xA;&lt;li&gt;Hermes 环境文件（&lt;code&gt;$HERMES_HOME/.env&lt;/code&gt;）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;以下目录完全阻止：&lt;code&gt;~/.ssh/&lt;/code&gt;, &lt;code&gt;~/.aws/&lt;/code&gt;, &lt;code&gt;~/.gnupg/&lt;/code&gt;, &lt;code&gt;~/.kube/&lt;/code&gt;, &lt;code&gt;$HERMES_HOME/skills/.hub/&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hermes Persistent Memory</title>
      <link>https://iefnaf.cc/wiki/agents/hermes-persistent-memory/</link>
      <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://iefnaf.cc/wiki/agents/hermes-persistent-memory/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Hermes Agent 的持久化记忆系统由 MEMORY.md 和 USER.md 两个文件组成，容量有界且由 agent 自行管理。记忆在会话开始时注入系统提示，跨会话持久保存。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;记忆架构&#34;&gt;记忆架构&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;文件&lt;/th&gt;&#xA;          &lt;th&gt;用途&lt;/th&gt;&#xA;          &lt;th&gt;字符限制&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;MEMORY.md&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Agent 个人笔记——环境事实、约定、经验教训&lt;/td&gt;&#xA;          &lt;td&gt;2,200 字符 (~800 tokens)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;USER.md&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;用户画像——偏好、沟通风格、期望&lt;/td&gt;&#xA;          &lt;td&gt;1,375 字符 (~500 tokens)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;存储位置：&lt;code&gt;~/.hermes/memories/&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;工作机制&#34;&gt;工作机制&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;冻结快照模式&lt;/strong&gt;：记忆在会话开始时作为冻结块注入系统提示，会话内不变&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;即时持久化&lt;/strong&gt;：Agent 在会话中修改记忆时立即写入磁盘，但下次会话才在系统提示中生效&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;容量管理&lt;/strong&gt;：超过 80% 容量时，Agent 应合并/精简条目后再添加新条目&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;记忆工具操作&#34;&gt;记忆工具操作&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;add&lt;/strong&gt; — 添加新条目&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;replace&lt;/strong&gt; — 替换现有条目（通过子串匹配）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;remove&lt;/strong&gt; — 移除不再相关的条目&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;无 &lt;code&gt;read&lt;/code&gt; 操作——记忆内容自动注入系统提示。&lt;/p&gt;&#xA;&lt;h2 id=&#34;应该记住-vs-应该跳过&#34;&gt;应该记住 vs 应该跳过&lt;/h2&gt;&#xA;&lt;h3 id=&#34;-主动保存&#34;&gt;✅ 主动保存&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;用户偏好（&amp;ldquo;偏好 TypeScript&amp;rdquo;）&lt;/li&gt;&#xA;&lt;li&gt;环境事实（&amp;ldquo;服务器运行 Debian 12&amp;rdquo;）&lt;/li&gt;&#xA;&lt;li&gt;纠正（&amp;ldquo;不要用 sudo 运行 Docker&amp;rdquo;）&lt;/li&gt;&#xA;&lt;li&gt;项目约定（&amp;ldquo;项目用 tabs, 120 字符行宽&amp;rdquo;）&lt;/li&gt;&#xA;&lt;li&gt;已完成的工作记录&lt;/li&gt;&#xA;&lt;li&gt;显式请求（&amp;ldquo;记住我的 API key 每月轮换&amp;rdquo;）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;-不保存&#34;&gt;❌ 不保存&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;显而易见的信息&lt;/li&gt;&#xA;&lt;li&gt;可轻松重查的事实&lt;/li&gt;&#xA;&lt;li&gt;大段数据/代码/日志&lt;/li&gt;&#xA;&lt;li&gt;会话级临时信息&lt;/li&gt;&#xA;&lt;li&gt;已在上下文文件中的内容&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;会话搜索&#34;&gt;会话搜索&lt;/h2&gt;&#xA;&lt;p&gt;除持久化记忆外，Hermes 还提供 &lt;code&gt;session_search&lt;/code&gt; 工具：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hermes Personality &amp; SOUL.md</title>
      <link>https://iefnaf.cc/wiki/agents/hermes-personality/</link>
      <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://iefnaf.cc/wiki/agents/hermes-personality/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Hermes Agent 的人格系统由 &lt;code&gt;SOUL.md&lt;/code&gt; 定义，它占据系统提示的第一个位置（slot #1），是 agent 的核心身份。SOUL.md 是跨项目、跨会话的持久人格，而 &lt;code&gt;/personality&lt;/code&gt; 命令提供会话级的临时人格覆盖。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;soulmd-的核心地位&#34;&gt;SOUL.md 的核心地位&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;位置&lt;/strong&gt;：&lt;code&gt;~/.hermes/SOUL.md&lt;/code&gt;（或 &lt;code&gt;$HERMES_HOME/SOUL.md&lt;/code&gt;）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;加载时机&lt;/strong&gt;：会话开始时作为 slot #1 注入系统提示&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;作用范围&lt;/strong&gt;：全局，不属于任何项目&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;优先级&lt;/strong&gt;：最高，是 agent 的基础身份&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;设计理念&#34;&gt;设计理念&lt;/h3&gt;&#xA;&lt;p&gt;SOUL.md 仅从 &lt;code&gt;HERMES_HOME&lt;/code&gt; 加载（不从工作目录加载），确保人格&lt;strong&gt;可预测&lt;/strong&gt;——不会因为你切换项目而意外改变。&lt;/p&gt;&#xA;&lt;h2 id=&#34;soulmd-vs-agentsmd&#34;&gt;SOUL.md vs AGENTS.md&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;&lt;/th&gt;&#xA;          &lt;th&gt;SOUL.md&lt;/th&gt;&#xA;          &lt;th&gt;AGENTS.md&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;内容&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;身份、语气、风格、沟通方式&lt;/td&gt;&#xA;          &lt;td&gt;项目架构、编码约定、工具偏好&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;作用域&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;跨项目，跟随 agent 实例&lt;/td&gt;&#xA;          &lt;td&gt;项目级，跟随工作目录&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;持久性&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;稳定不变&lt;/td&gt;&#xA;          &lt;td&gt;随项目演进&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;strong&gt;简单规则&lt;/strong&gt;：如果应该&lt;strong&gt;到处跟随你&lt;/strong&gt; → SOUL.md；如果&lt;strong&gt;属于某个项目&lt;/strong&gt; → AGENTS.md。&lt;/p&gt;&#xA;&lt;h2 id=&#34;soulmd-内容建议&#34;&gt;SOUL.md 内容建议&lt;/h2&gt;&#xA;&lt;h3 id=&#34;-应该包含&#34;&gt;✅ 应该包含&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;语气和沟通风格&lt;/li&gt;&#xA;&lt;li&gt;直接程度&lt;/li&gt;&#xA;&lt;li&gt;默认交互方式&lt;/li&gt;&#xA;&lt;li&gt;需要避免的风格特征&lt;/li&gt;&#xA;&lt;li&gt;处理不确定性、分歧、歧义的方式&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;-不应包含&#34;&gt;❌ 不应包含&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;一次性项目指令&lt;/li&gt;&#xA;&lt;li&gt;文件路径&lt;/li&gt;&#xA;&lt;li&gt;仓库约定&lt;/li&gt;&#xA;&lt;li&gt;临时工作流细节&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;示例-soulmd&#34;&gt;示例 SOUL.md&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;# Personality&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;&lt;/span&gt;You are a pragmatic senior engineer with strong taste.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;You optimize for truth, clarity, and usefulness over politeness theater.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## Style&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Be direct without being cold&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Prefer substance over filler&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Push back when something is a bad idea&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;-&lt;/span&gt; Admit uncertainty plainly&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;内置人格&#34;&gt;内置人格&lt;/h2&gt;&#xA;&lt;p&gt;Hermes 提供 14 种内置人格可供切换：helpful、concise、technical、creative、teacher、kawaii、catgirl、pirate、shakespeare、surfer、noir、uwu、philosopher、hype。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hermes Skills System</title>
      <link>https://iefnaf.cc/wiki/agents/hermes-skills-system/</link>
      <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://iefnaf.cc/wiki/agents/hermes-skills-system/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Hermes Agent 的技能系统是一套按需加载的知识文档系统，采用渐进式披露（progressive disclosure）模式以最小化 token 消耗。技能存放在 &lt;code&gt;~/.hermes/skills/&lt;/code&gt;，兼容 &lt;a href=&#34;https://agentskills.io/specification&#34;&gt;agentskills.io&lt;/a&gt; 开放标准。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;渐进式披露&#34;&gt;渐进式披露&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;层级&lt;/th&gt;&#xA;          &lt;th&gt;调用&lt;/th&gt;&#xA;          &lt;th&gt;返回内容&lt;/th&gt;&#xA;          &lt;th&gt;Token 消耗&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Level 0&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;skills_list()&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;名称、描述、分类&lt;/td&gt;&#xA;          &lt;td&gt;~3K&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Level 1&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;skill_view(name)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;完整内容 + 元数据&lt;/td&gt;&#xA;          &lt;td&gt;可变&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Level 2&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;skill_view(name, path)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;特定引用文件&lt;/td&gt;&#xA;          &lt;td&gt;可变&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Agent 仅在实际需要时才加载完整技能内容。&lt;/p&gt;&#xA;&lt;h2 id=&#34;skillmd-格式&#34;&gt;SKILL.md 格式&lt;/h2&gt;&#xA;&lt;p&gt;每个技能由一个 &lt;code&gt;SKILL.md&lt;/code&gt; 文件定义，包含 YAML front matter 和 Markdown 正文：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;name&lt;/strong&gt; / &lt;strong&gt;description&lt;/strong&gt; / &lt;strong&gt;version&lt;/strong&gt;：基本元数据&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;platforms&lt;/strong&gt;：可选，限制在特定 OS 上加载&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;conditional activation&lt;/strong&gt;：可选，根据可用工具自动显示/隐藏&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;required_environment_variables&lt;/strong&gt;：可选，声明所需环境变量&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;config&lt;/strong&gt;：可选，声明配置项（存储在 config.yaml）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;条件激活&#34;&gt;条件激活&lt;/h2&gt;&#xA;&lt;p&gt;技能可以根据当前会话中可用的工具自动显示或隐藏：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;fallback_for_toolsets&lt;/code&gt;：当指定工具集&lt;strong&gt;不可用&lt;/strong&gt;时才显示（作为后备）&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;requires_toolsets&lt;/code&gt;：当指定工具集&lt;strong&gt;可用&lt;/strong&gt;时才显示&lt;/li&gt;&#xA;&lt;li&gt;例如：内置的 &lt;code&gt;duckduckgo-search&lt;/code&gt; 技能在有 Firecrawl API key 时自动隐藏&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;agent-自管理技能&#34;&gt;Agent 自管理技能&lt;/h2&gt;&#xA;&lt;p&gt;Agent 可以通过 &lt;code&gt;skill_manage&lt;/code&gt; 工具创建、更新和删除自己的技能，作为&lt;strong&gt;程序性记忆&lt;/strong&gt;：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Meta-Harness: End-to-End Optimization of Model Harnesses</title>
      <link>https://iefnaf.cc/wiki/research/meta-harness/</link>
      <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://iefnaf.cc/wiki/research/meta-harness/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Meta-Harness 是一个外循环系统，通过让 coding agent 自由访问文件系统中的完整历史（源代码、分数、执行轨迹），自动搜索和优化 LLM 应用的 harness 代码。相比仅使用压缩反馈的文本优化器，Meta-Harness 能实现更深层的因果推理和更高效的搜索。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;来源&lt;/strong&gt;: &lt;a href=&#34;https://arxiv.org/abs/2603.28052&#34;&gt;arXiv:2603.28052&lt;/a&gt; — Lee, Nair, Zhang, Lee, Khattab, Finn (Stanford/MIT/KRAFTON), 2026&lt;/p&gt;&#xA;&lt;h2 id=&#34;核心问题&#34;&gt;核心问题&lt;/h2&gt;&#xA;&lt;p&gt;LLM 系统的性能不仅取决于模型权重，还取决于其 &lt;strong&gt;harness&lt;/strong&gt;——决定存储、检索和呈现什么信息给模型的代码。然而现有文本优化器（OPRO、TextGrad、AlphaEvolve、GEPA 等）对反馈压缩过于激进。Meta-Harness 的核心洞察是：&lt;strong&gt;更丰富的历史访问可以支持更好的 harness 工程&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;关键设计文件系统作为反馈通道&#34;&gt;关键设计：文件系统作为反馈通道&lt;/h2&gt;&#xA;&lt;p&gt;每个被评估的 harness 贡献一个目录，包含：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;源代码&lt;/li&gt;&#xA;&lt;li&gt;评估分数&lt;/li&gt;&#xA;&lt;li&gt;执行轨迹（prompts、工具调用、模型输出、状态更新）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Proposer 通过 &lt;code&gt;grep&lt;/code&gt;、&lt;code&gt;cat&lt;/code&gt; 等终端工具选择性检查历史，而非将所有信息打包进单个 prompt。&lt;/p&gt;&#xA;&lt;h2 id=&#34;与其他方法的对比&#34;&gt;与其他方法的对比&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;方法&lt;/th&gt;&#xA;          &lt;th&gt;历史访问&lt;/th&gt;&#xA;          &lt;th&gt;反馈内容&lt;/th&gt;&#xA;          &lt;th&gt;每迭代 MTok&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;OPRO&lt;/td&gt;&#xA;          &lt;td&gt;窗口&lt;/td&gt;&#xA;          &lt;td&gt;(解, 分数) 对&lt;/td&gt;&#xA;          &lt;td&gt;0.002&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;TextGrad&lt;/td&gt;&#xA;          &lt;td&gt;最后一个&lt;/td&gt;&#xA;          &lt;td&gt;当前工件的文本反馈&lt;/td&gt;&#xA;          &lt;td&gt;0.015&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;AlphaEvolve&lt;/td&gt;&#xA;          &lt;td&gt;窗口&lt;/td&gt;&#xA;          &lt;td&gt;程序数据库 + 分数&lt;/td&gt;&#xA;          &lt;td&gt;0.022&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;GEPA&lt;/td&gt;&#xA;          &lt;td&gt;摘要&lt;/td&gt;&#xA;          &lt;td&gt;反思反馈&lt;/td&gt;&#xA;          &lt;td&gt;0.008&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Meta-Harness&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;完整&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;所有日志和分数&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;10.0&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;实验结果&#34;&gt;实验结果&lt;/h2&gt;&#xA;&lt;h3 id=&#34;在线文本分类&#34;&gt;在线文本分类&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;准确率比 ACE 提升 &lt;strong&gt;7.7 点&lt;/strong&gt;，同时使用 &lt;strong&gt;4× 更少&lt;/strong&gt; 的上下文 token&lt;/li&gt;&#xA;&lt;li&gt;仅需 &lt;strong&gt;4 次评估&lt;/strong&gt;即达到 OpenEvolve/TTT-Discover 的最终性能&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;检索增强数学推理&#34;&gt;检索增强数学推理&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在 200 道 IMO 级别题目上，单个发现的 harness 在 5 个 held-out 模型上平均提升 &lt;strong&gt;4.7 点&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;agentic-coding-terminalbench-2&#34;&gt;Agentic Coding (TerminalBench-2)&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Opus 4.6 上达到 76.4%，超越手写的 Terminus-KIRA (74.7%)&lt;/li&gt;&#xA;&lt;li&gt;Haiku 4.5 上达到 &lt;strong&gt;37.6%&lt;/strong&gt;，排名 #1&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;消融实验&#34;&gt;消融实验&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;条件&lt;/th&gt;&#xA;          &lt;th&gt;中位准确率&lt;/th&gt;&#xA;          &lt;th&gt;最佳准确率&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;仅分数&lt;/td&gt;&#xA;          &lt;td&gt;34.6&lt;/td&gt;&#xA;          &lt;td&gt;41.3&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;分数 + 摘要&lt;/td&gt;&#xA;          &lt;td&gt;34.9&lt;/td&gt;&#xA;          &lt;td&gt;38.7&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Meta-Harness (完整)&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;50.0&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;56.7&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;strong&gt;关键发现&lt;/strong&gt;：对原始执行轨迹的访问是最重要的因素，摘要无法恢复丢失的诊断信号。&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenAI Codex Harness Engineering: Agent-First 软件开发实验</title>
      <link>https://iefnaf.cc/wiki/agents/openai-codex-harness-engineering/</link>
      <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://iefnaf.cc/wiki/agents/openai-codex-harness-engineering/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;OpenAI 团队在 5 个月内用 0 行手写代码构建了一个百万行级别的内部产品，3 名工程师驱动 Codex 完成约 1,500 个 PR（3.5 PR/人/天）。这个实验揭示了当 agent 成为主要的代码生产者时，工程工作的本质如何从&amp;quot;写代码&amp;quot;转变为&amp;quot;设计环境、制定意图和构建反馈循环&amp;quot;。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;来源&lt;/strong&gt;: &lt;a href=&#34;https://openai.com/index/harness-engineering/&#34;&gt;OpenAI Engineering Blog&lt;/a&gt; — Ryan Lopopolo, 2026-02-11&lt;/p&gt;&#xA;&lt;h2 id=&#34;compiled-truth-可重写&#34;&gt;Compiled Truth (可重写)&lt;/h2&gt;&#xA;&lt;h3 id=&#34;核心数据&#34;&gt;核心数据&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;指标&lt;/th&gt;&#xA;          &lt;th&gt;数值&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;代码行数&lt;/td&gt;&#xA;          &lt;td&gt;~1,000,000&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;手写代码行数&lt;/td&gt;&#xA;          &lt;td&gt;0&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;PR 数量&lt;/td&gt;&#xA;          &lt;td&gt;~1,500&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;初始工程师数&lt;/td&gt;&#xA;          &lt;td&gt;3（后增至 7）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;吞吐量&lt;/td&gt;&#xA;          &lt;td&gt;3.5 PR/人/天（且随团队扩大而增加）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;开发时间&lt;/td&gt;&#xA;          &lt;td&gt;约 1/10 手写时间&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;单次 Codex 运行时长&lt;/td&gt;&#xA;          &lt;td&gt;最长 6+ 小时&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h3 id=&#34;关键设计决策&#34;&gt;关键设计决策&lt;/h3&gt;&#xA;&lt;h4 id=&#34;1-agentsmd-作为目录而非百科全书&#34;&gt;1. AGENTS.md 作为目录，而非百科全书&lt;/h4&gt;&#xA;&lt;p&gt;&amp;ldquo;一个巨大的 AGENTS.md&amp;rdquo; 方案失败了，原因：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;上下文是稀缺资源&lt;/strong&gt;：巨大的指令文件挤占了任务、代码和文档的空间&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;太多指导等于无指导&lt;/strong&gt;：当一切都是&amp;quot;重要&amp;quot;的，agent 开始局部模式匹配&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;立即腐烂&lt;/strong&gt;：单体手册变成过时规则的墓地&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;难以验证&lt;/strong&gt;：单个 blob 不支持机械检查&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;替代方案：短 AGENTS.md（~100 行）作为目录，结构化 &lt;code&gt;docs/&lt;/code&gt; 目录作为知识库。&lt;/p&gt;</description>
    </item>
    <item>
      <title>智能体上下文工程：设计模式与实践</title>
      <link>https://iefnaf.cc/wiki/concepts/agent-context-engineering/</link>
      <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://iefnaf.cc/wiki/concepts/agent-context-engineering/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;上下文工程（Context Engineering）是决定 LLM 系统中存储、检索和呈现什么信息给模型的实践。从学术研究（Meta-Harness）到工业实践（Hermes Agent），涌现出一套共通的设计模式。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;什么是上下文工程&#34;&gt;什么是上下文工程&lt;/h2&gt;&#xA;&lt;p&gt;LLM 系统的性能往往取决于模型周围的 &lt;strong&gt;harness&lt;/strong&gt;——决定上下文的代码——而非仅取决于模型权重本身。Meta-Harness 论文显示，仅改变 harness 就能在同一基准测试上产生 &lt;strong&gt;6× 性能差距&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;设计模式谱系&#34;&gt;设计模式谱系&lt;/h2&gt;&#xA;&lt;h3 id=&#34;1-静态上下文最基础&#34;&gt;1. 静态上下文（最基础）&lt;/h3&gt;&#xA;&lt;p&gt;直接将指令、示例注入 prompt。如 Hermes 的 AGENTS.md 和 SOUL.md。&lt;/p&gt;&#xA;&lt;h3 id=&#34;2-渐进式披露按需加载&#34;&gt;2. 渐进式披露（按需加载）&lt;/h3&gt;&#xA;&lt;p&gt;只在需要时加载上下文，避免 prompt 膨胀。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Hermes Skills&lt;/strong&gt;：Level 0（列表）→ Level 1（完整内容）→ Level 2（引用文件）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Hermes 子目录发现&lt;/strong&gt;：启动时加载根 AGENTS.md，进入子目录时才加载子目录上下文&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Meta-Harness&lt;/strong&gt;：Proposer 通过 &lt;code&gt;grep&lt;/code&gt;/&lt;code&gt;cat&lt;/code&gt; 选择性检查文件系统&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;核心原则&lt;/strong&gt;：上下文应&lt;strong&gt;按需自适应访问&lt;/strong&gt;，而非一次性打包进 prompt。&lt;/p&gt;&#xA;&lt;h3 id=&#34;3-持久化记忆跨会话&#34;&gt;3. 持久化记忆（跨会话）&lt;/h3&gt;&#xA;&lt;p&gt;将有界、精选的记忆跨会话保存。&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;系统&lt;/th&gt;&#xA;          &lt;th&gt;记忆机制&lt;/th&gt;&#xA;          &lt;th&gt;容量&lt;/th&gt;&#xA;          &lt;th&gt;管理&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Hermes MEMORY.md&lt;/td&gt;&#xA;          &lt;td&gt;Agent 个人笔记&lt;/td&gt;&#xA;          &lt;td&gt;2,200 字符&lt;/td&gt;&#xA;          &lt;td&gt;Agent 自行增删改&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Hermes USER.md&lt;/td&gt;&#xA;          &lt;td&gt;用户画像&lt;/td&gt;&#xA;          &lt;td&gt;1,375 字符&lt;/td&gt;&#xA;          &lt;td&gt;Agent 自行管理&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Hermes Session Search&lt;/td&gt;&#xA;          &lt;td&gt;全文搜索历史会话&lt;/td&gt;&#xA;          &lt;td&gt;无限&lt;/td&gt;&#xA;          &lt;td&gt;自动存储&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Meta-Harness 文件系统&lt;/td&gt;&#xA;          &lt;td&gt;完整代码+轨迹+分数&lt;/td&gt;&#xA;          &lt;td&gt;无限&lt;/td&gt;&#xA;          &lt;td&gt;每迭代写入&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;strong&gt;关键权衡&lt;/strong&gt;：容量 vs 质量——记忆应该精炼，而非堆砌。&lt;/p&gt;</description>
    </item>
    <item>
      <title>自动化智能体优化的演进</title>
      <link>https://iefnaf.cc/wiki/concepts/automated-agent-optimization/</link>
      <pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://iefnaf.cc/wiki/concepts/automated-agent-optimization/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;从 ADAS 到 Meta-Harness，自动化智能体系统优化经历了从&amp;quot;搜索 agent 设计&amp;quot;到&amp;quot;搜索 harness 代码&amp;quot;的演进。两者共享代码空间搜索的核心思想，但在反馈粒度和搜索机制上有显著差异。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;发展脉络&#34;&gt;发展脉络&lt;/h2&gt;&#xA;&lt;h3 id=&#34;第一代adas--meta-agent-search-2024&#34;&gt;第一代：ADAS / Meta Agent Search (2024)&lt;/h3&gt;&#xA;&lt;p&gt;ADAS 提出了一个开创性的研究方向：自动设计智能体系统。Meta Agent Search 是其代表性算法：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;搜索对象&lt;/strong&gt;：整个 agent 的 &lt;code&gt;forward&lt;/code&gt; 函数（Python 代码）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;搜索空间&lt;/strong&gt;：图灵完备的代码空间&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;反馈机制&lt;/strong&gt;：档案库（archive）存储先前发现的代码和分数&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Proposer&lt;/strong&gt;：FM（GPT-4）作为元智能体&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;搜索模式&lt;/strong&gt;：迭代生成，强调新颖性和有趣性&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;局限性&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;档案库信息相对压缩（主要是代码和分数）&lt;/li&gt;&#xA;&lt;li&gt;元智能体无法查看详细执行轨迹&lt;/li&gt;&#xA;&lt;li&gt;依赖 LLM 直接生成，而非 coding agent&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;第二代meta-harness-2026&#34;&gt;第二代：Meta-Harness (2026)&lt;/h3&gt;&#xA;&lt;p&gt;Meta-Harness 专注优化 LLM 系统中的 harness（外围代码），在 ADAS 的基础上做了关键改进：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;搜索对象&lt;/strong&gt;：harness 代码（提示构建、检索、状态更新策略）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;反馈机制&lt;/strong&gt;：&lt;strong&gt;完整文件系统访问&lt;/strong&gt;——源代码、分数、执行轨迹&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Proposer&lt;/strong&gt;：Coding agent（Claude Code）而非原始 LLM&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;搜索模式&lt;/strong&gt;：自由探索文件系统，无固定父代选择规则&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;关键差异对比&#34;&gt;关键差异对比&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;维度&lt;/th&gt;&#xA;          &lt;th&gt;ADAS / Meta Agent Search&lt;/th&gt;&#xA;          &lt;th&gt;Meta-Harness&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;搜索目标&lt;/td&gt;&#xA;          &lt;td&gt;完整 agent 设计&lt;/td&gt;&#xA;          &lt;td&gt;Harness（LLM 外围代码）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;反馈粒度&lt;/td&gt;&#xA;          &lt;td&gt;代码 + 分数&lt;/td&gt;&#xA;          &lt;td&gt;代码 + 分数 + &lt;strong&gt;执行轨迹&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;每迭代上下文&lt;/td&gt;&#xA;          &lt;td&gt;数千 tokens&lt;/td&gt;&#xA;          &lt;td&gt;高达 &lt;strong&gt;10M tokens&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Proposer&lt;/td&gt;&#xA;          &lt;td&gt;LLM 直接生成&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Coding agent&lt;/strong&gt;（有工具）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;信息访问&lt;/td&gt;&#xA;          &lt;td&gt;档案库（结构化）&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;文件系统&lt;/strong&gt;（自由探索）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;因果推理&lt;/td&gt;&#xA;          &lt;td&gt;有限&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;深层因果推理&lt;/strong&gt;（识别混淆因素）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;搜索效率&lt;/td&gt;&#xA;          &lt;td&gt;需 30 次迭代&lt;/td&gt;&#xA;          &lt;td&gt;&lt;strong&gt;4 次评估&lt;/strong&gt;匹配基线&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;核心洞察的演变&#34;&gt;核心洞察的演变&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;代码空间搜索是可行的&lt;/strong&gt;（ADAS 证明）→ &lt;strong&gt;代码空间搜索可以更高效&lt;/strong&gt;（Meta-Harness 证明）&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;压缩反馈会丢失关键信号&lt;/strong&gt;：ADAS 的档案库受限于 LLM 上下文窗口，Meta-Harness 通过文件系统突破了这一限制&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Coding agent &amp;gt; 原始 LLM&lt;/strong&gt;：Claude Code 可以用 &lt;code&gt;grep&lt;/code&gt;、&lt;code&gt;cat&lt;/code&gt; 等工具主动探索历史，而非被动接收固定 prompt&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;执行轨迹是关键&lt;/strong&gt;：消融实验表明，摘要无法替代原始轨迹的诊断价值&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;对未来的启示&#34;&gt;对未来的启示&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;自适应访问外部上下文是趋势（RAG → 渐进式记忆 → 文件系统访问）&lt;/li&gt;&#xA;&lt;li&gt;随着编码 agent 能力提升，最小化搜索结构可能是更好的策略&lt;/li&gt;&#xA;&lt;li&gt;从&amp;quot;搜索 agent 设计&amp;quot;到&amp;quot;搜索上下文管理策略&amp;quot;，优化粒度在细化&lt;/li&gt;&#xA;&lt;li&gt;未来方向：co-evolve harness 和模型权重&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;timeline&#34;&gt;Timeline&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2024-08: ADAS 论文发表，奠定代码空间搜索的基础&lt;/li&gt;&#xA;&lt;li&gt;2026-03: Meta-Harness 论文发表，展示完整历史访问的威力&lt;/li&gt;&#xA;&lt;li&gt;2026-04-13: 整理进 KB，梳理演进脉络&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>中国过去10年通胀率（2015-2024）</title>
      <link>https://iefnaf.cc/wiki/memos/china-inflation-rate-2015-2024/</link>
      <pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://iefnaf.cc/wiki/memos/china-inflation-rate-2015-2024/</guid>
      <description>&lt;h2 id=&#34;回答&#34;&gt;回答&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;官方 CPI 年均通胀率（复合）：约 1.58%，10年累计通胀约 17%。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;按实际货币贬值感受估算，可能更接近 &lt;strong&gt;3%-5%&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;年度数据&#34;&gt;年度数据&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;年份&lt;/th&gt;&#xA;          &lt;th&gt;CPI 通胀率&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2015&lt;/td&gt;&#xA;          &lt;td&gt;1.44%&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2016&lt;/td&gt;&#xA;          &lt;td&gt;2.00%&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2017&lt;/td&gt;&#xA;          &lt;td&gt;1.59%&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2018&lt;/td&gt;&#xA;          &lt;td&gt;2.07%&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2019&lt;/td&gt;&#xA;          &lt;td&gt;2.90%&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2020&lt;/td&gt;&#xA;          &lt;td&gt;2.42%&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2021&lt;/td&gt;&#xA;          &lt;td&gt;0.98%&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2022&lt;/td&gt;&#xA;          &lt;td&gt;1.97%&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2023&lt;/td&gt;&#xA;          &lt;td&gt;0.23%&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;2024&lt;/td&gt;&#xA;          &lt;td&gt;0.22%&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;算术平均：1.58%&lt;/li&gt;&#xA;&lt;li&gt;几何平均（复合年均通胀率）：1.58%&lt;/li&gt;&#xA;&lt;li&gt;10年累计通胀：16.95%&lt;/li&gt;&#xA;&lt;li&gt;即：10年前的 100 元，现在需要约 117 元才有同等购买力&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;两种口径&#34;&gt;两种口径&lt;/h2&gt;&#xA;&lt;h3 id=&#34;口径一官方-cpi--约-16年&#34;&gt;口径一：官方 CPI → 约 1.6%/年&lt;/h3&gt;&#xA;&lt;p&gt;数据来源：中国国家统计局，经快易理财网（kylc.com）整理。&lt;/p&gt;&#xA;&lt;h3 id=&#34;口径二实际感受--约-3-5年&#34;&gt;口径二：实际感受 → 约 3%-5%/年&lt;/h3&gt;&#xA;&lt;p&gt;官方 CPI 存在低估，原因：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;CPI 不包含房价&lt;/strong&gt; — 房价是过去10年涨幅最大的品类之一&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;CPI 权重偏向食品等必需品&lt;/strong&gt; — 对教育、医疗等涨幅更大的服务类覆盖不足&lt;/li&gt;&#xA;&lt;li&gt;更合理的估算方法：&lt;strong&gt;M2（广义货币）增速 - GDP增速&lt;/strong&gt;，过去10年约 3%-5%&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;投资启示&#34;&gt;投资启示&lt;/h2&gt;&#xA;&lt;p&gt;来自 指数基金投资指南 的相关洞察：&lt;/p&gt;</description>
    </item>
    <item>
      <title>联接基金 vs QDII 基金概念辨析</title>
      <link>https://iefnaf.cc/wiki/memos/etf-connector-vs-qdii/</link>
      <pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://iefnaf.cc/wiki/memos/etf-connector-vs-qdii/</guid>
      <description>&lt;h2 id=&#34;回答&#34;&gt;回答&lt;/h2&gt;&#xA;&lt;p&gt;联接基金和 QDII 是两个完全不同的概念。&lt;/p&gt;&#xA;&lt;h2 id=&#34;联接基金etf-联接基金&#34;&gt;联接基金（ETF 联接基金）&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;本质：场外买场内 ETF 的桥梁。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;ETF 基金在股票交易所里买卖，需要开股票账户，操作麻烦，没有自动定投功能。基金公司为此开发了联接基金，让普通投资者在场外（支付宝、天天基金等）就能间接买入对应的 ETF。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;你 → 买联接基金（场外）→ 联接基金 → 买对应的ETF（场内）→ ETF持有一篮子股票&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;费率跟对应的 ETF 一样，不会双重收费&lt;/li&gt;&#xA;&lt;li&gt;本质是给懒得开股票账户的人一个方便的入口&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;qdii-基金&#34;&gt;QDII 基金&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;本质：用人民币买境外资产的&amp;quot;代购&amp;quot;。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;QDII = 合格境内机构投资者（Qualified Domestic Institutional Investor）&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;拿人民币合法投资港股、美股、德股等境外市场&lt;/li&gt;&#xA;&lt;li&gt;可在一定程度上分散人民币汇率风险&lt;/li&gt;&#xA;&lt;li&gt;买 QDII 基金不占用个人每年5万美元的外汇额度&lt;/li&gt;&#xA;&lt;li&gt;风险：基金公司外汇额度用完时可能暂停申购&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;对比&#34;&gt;对比&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;&lt;/th&gt;&#xA;          &lt;th&gt;联接基金&lt;/th&gt;&#xA;          &lt;th&gt;QDII 基金&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;本质&lt;/td&gt;&#xA;          &lt;td&gt;场外买场内ETF的桥梁&lt;/td&gt;&#xA;          &lt;td&gt;用人民币买境外资产的&amp;quot;代购&amp;quot;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;投资对象&lt;/td&gt;&#xA;          &lt;td&gt;对应的ETF基金&lt;/td&gt;&#xA;          &lt;td&gt;港股、美股等境外市场&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;解决什么问题&lt;/td&gt;&#xA;          &lt;td&gt;不用开股票账户就能买ETF&lt;/td&gt;&#xA;          &lt;td&gt;不用换外汇就能投资海外&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;在哪里买&lt;/td&gt;&#xA;          &lt;td&gt;支付宝、天天基金等场外平台&lt;/td&gt;&#xA;          &lt;td&gt;场内场外都有&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;费率&lt;/td&gt;&#xA;          &lt;td&gt;与对应ETF相同&lt;/td&gt;&#xA;          &lt;td&gt;略高于普通基金&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;额外风险&lt;/td&gt;&#xA;          &lt;td&gt;无&lt;/td&gt;&#xA;          &lt;td&gt;外汇额度不足暂停申购、汇率波动&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;基金代码常见标识&#34;&gt;基金代码常见标识&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;后缀&lt;/th&gt;&#xA;          &lt;th&gt;含义&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;ETF&lt;/td&gt;&#xA;          &lt;td&gt;交易型开放式指数基金（场内）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;LOF&lt;/td&gt;&#xA;          &lt;td&gt;上市型开放式基金（场内场外都能交易）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;QDII&lt;/td&gt;&#xA;          &lt;td&gt;投资境外市场的基金&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;A / C&lt;/td&gt;&#xA;          &lt;td&gt;A类前端收费 / C类按日计提销售费&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;联接&lt;/td&gt;&#xA;          &lt;td&gt;ETF联接基金&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;两者可以同时存在，例如&amp;quot;恒生ETF联接QDII&amp;quot;就是既帮你在场外买ETF，又投资的是港股。&lt;/p&gt;</description>
    </item>
    <item>
      <title>karpathy: LLM Kb</title>
      <link>https://iefnaf.cc/karpathy-llm-kb/</link>
      <pubDate>Mon, 13 Apr 2026 10:06:13 +0800</pubDate>
      <guid>https://iefnaf.cc/karpathy-llm-kb/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;@karpathy&lt;/p&gt;&#xA;&lt;p&gt;最近我发现一个特别有用的方法：利用 LLMs 为各种研究兴趣主题构建个人知识库。这样一来，我近期的 token 消耗中，很大一部分不再用于处理代码，而是更多地用于处理知识（以 markdown 和图片形式存储）。最新的 LLMs 在这方面表现得相当出色。所以：&lt;/p&gt;&#xA;&lt;p&gt;数据导入： 我将源文档（文章、论文、代码库、数据集、图片等）索引到 raw/ 目录中，然后使用 LLM 逐步“编译”一个wiki，这其实就是目录结构中的一系列 .md 文件集合。该wiki包含 raw/ 中所有数据的摘要、反向链接，并将数据分类为概念，为它们撰写文章并建立链接。为了将网页文章转换为 .md 文件，我喜欢使用 Obsidian Web Clipper 扩展，同时还会用快捷键将所有相关图片下载到本地，以便我的 LLM 能轻松引用它们。&lt;/p&gt;&#xA;&lt;p&gt;集成开发环境： 我将 Obsidian 用作 IDE 的“前端”，在这里可以查看原始数据、编译后的wiki以及衍生的可视化图表。重要的是，LLM 负责编写和维护wiki的所有数据，我很少直接操作。我还尝试过一些 Obsidian 插件，以其他方式渲染和查看数据（例如用 Marp 制作幻灯片）。&lt;/p&gt;&#xA;&lt;p&gt;问答： 有趣的是，一旦你的知识库足够庞大（比如我最近研究的某个主题已有约 100 篇文章、40 万字左右），你就可以向你的 LLM 智能体提出各种复杂问题，让它基于知识库进行研究并给出答案。我原以为需要借助复杂的 RAG 技术，但 LLM 在自动维护索引文件和所有文档的简要摘要方面表现相当出色，在这个“小规模”场景下，它能相当轻松地读取所有重要的相关数据。&lt;/p&gt;&#xA;&lt;p&gt;输出： 相较于在文本或终端中获取答案，我更倾向于让它为我生成 Markdown 文件、幻灯片（Marp 格式）或 matplotlib 图像，这些我随后都会在 Obsidian 中再次查看。根据查询内容，你还可以设想出许多其他视觉输出格式。通常，我会将这些输出“归档”回知识库中，以增强其内容，便于后续查询。因此，我个人的探索与查询总是在知识库中不断“累积”。&lt;/p&gt;&#xA;&lt;p&gt;代码检查： 我对wiki进行了一些 LLM“健康检查”，例如查找不一致的数据、填补缺失数据（借助网络搜索）、为新的文章候选寻找有趣的关联等，以逐步清理wiki并提升其整体数据完整性。LLM 在提出进一步需要探讨和调查的问题方面表现得相当出色。&lt;/p&gt;&#xA;&lt;p&gt;额外工具： 我发现自己正在开发额外的工具来处理数据，比如我凭感觉编写了一个简单的小型wiki搜索引擎，我既会直接使用它（通过网页界面），但更多时候，我更倾向于通过命令行将其交给 LLM，作为处理更复杂查询的工具。&lt;/p&gt;&#xA;&lt;p&gt;进一步探索： 随着代码库的扩展，很自然地会考虑结合合成数据生成与微调，让 LLM 将数据“内化”到权重中，而非仅依赖上下文窗口。&lt;/p&gt;</description>
    </item>
    <item>
      <title>当前 KB vs GBrain：个人知识管理系统对比</title>
      <link>https://iefnaf.cc/wiki/comparisons/kb-vs-gbrain/</link>
      <pubDate>Mon, 13 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://iefnaf.cc/wiki/comparisons/kb-vs-gbrain/</guid>
      <description>&lt;h2 id=&#34;核心差异&#34;&gt;核心差异&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;维度&lt;/th&gt;&#xA;          &lt;th&gt;本 KB（pi + markdown）&lt;/th&gt;&#xA;          &lt;th&gt;GBrain（Postgres + Agent）&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;规模&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;~20 个文件&lt;/td&gt;&#xA;          &lt;td&gt;10,000+ 页面&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;搜索&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;grep / find（全文扫描）&lt;/td&gt;&#xA;          &lt;td&gt;向量 + 关键词 RRF 融合&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;知识模型&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;compiled truth + timeline（刚引入）&lt;/td&gt;&#xA;          &lt;td&gt;compiled truth + timeline（原生）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;结构&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;3 子目录分类（agents/research/concepts）&lt;/td&gt;&#xA;          &lt;td&gt;MECE 实体目录（people/companies/deals）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;链接&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;typed relations（frontmatter）&lt;/td&gt;&#xA;          &lt;td&gt;有向类型化图谱 + 图遍历&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;采集&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;手动 URL → firecrawl 抓取&lt;/td&gt;&#xA;          &lt;td&gt;7 种自动化集成（邮件/日历/推特/语音）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;strong&gt;Agent 循环&lt;/strong&gt;&lt;/td&gt;&#xA;          &lt;td&gt;规则定义了，但靠 Agent 自觉遵守&lt;/td&gt;&#xA;          &lt;td&gt;深度集成（skillpack 定义了每一步行为）&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;已采纳的改进&#34;&gt;已采纳的改进&lt;/h2&gt;&#xA;&lt;p&gt;从 GBrain 学来并已落地的 5 个设计：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Compiled Truth + Timeline&lt;/strong&gt; — wiki 文件分双层，知识不再覆盖丢失&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;类型化链接&lt;/strong&gt; — frontmatter 里的 &lt;code&gt;related&lt;/code&gt; + &lt;code&gt;relation&lt;/code&gt; 字段&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;MECE 目录结构&lt;/strong&gt; — wiki/agents、wiki/research、wiki/concepts&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;元数据规范化&lt;/strong&gt; — 所有 raw 文件有完整 frontmatter&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;知识复利循环规则&lt;/strong&gt; — AGENTS.md 里定义了 Read-Before-Respond 和 Auto-Propose&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;暂不采纳的&#34;&gt;暂不采纳的&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;特性&lt;/th&gt;&#xA;          &lt;th&gt;原因&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Postgres + pgvector&lt;/td&gt;&#xA;          &lt;td&gt;当前 ~20 个文件，grep 完全够用。等 500+ 文件时再考虑&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;自动化集成（邮件/推特/日历）&lt;/td&gt;&#xA;          &lt;td&gt;本 KB 聚焦 AI agent 研究，不需要实时数据流&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Dream Cycle（夜间维护）&lt;/td&gt;&#xA;          &lt;td&gt;维护量还不需要自动化，手动 review 就够&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;MCP server 暴露工具&lt;/td&gt;&#xA;          &lt;td&gt;当前不需要多设备/多 Agent 访问&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;未来演进路径&#34;&gt;未来演进路径&lt;/h2&gt;&#xA;&lt;p&gt;当 KB 增长到以下规模时的触发点：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Openai Harness Engineering</title>
      <link>https://iefnaf.cc/openai-harness-engineering/</link>
      <pubDate>Fri, 10 Apr 2026 14:35:50 +0800</pubDate>
      <guid>https://iefnaf.cc/openai-harness-engineering/</guid>
      <description>&lt;p&gt;过去五个月，我们团队一直在进行一项实验：构建并发布一款软件产品的内部测试版，全程未编写一行手动代码&lt;/p&gt;&#xA;&lt;p&gt;该产品拥有内部日常用户和外部测试人员。它经历发布、部署、故障与修复的全过程。独特之处在于，每一行代码——包括应用逻辑、测试用例、持续集成配置、技术文档、可观测性系统及内部工具——均由 Codex 生成。我们估算，这种开发方式所需时间仅为手工编写代码的十分之一。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;人类掌舵，智能体执行。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;我们刻意选择这一约束条件，旨在构建能实现工程效率数量级提升的必要体系。在数周时间内，我们完成了百万行代码的交付。为此，我们必须重新思考：当软件工程团队的核心职责从编写代码转变为设计环境、明确意图、构建反馈闭环，以保障 Codex 智能体可靠工作时，工程范式将发生何种根本性变革。&lt;/p&gt;&#xA;&lt;p&gt;本文将通过我们与智能体团队共同打造全新产品的实践，揭示系统崩溃的诱因、效能叠加的规律，并探讨如何最大化利用人类最宝贵的稀缺资源——时间与专注力。&lt;/p&gt;&#xA;&lt;h2 id=&#34;从一个空的-git-仓库开始&#34;&gt;从一个空的 git 仓库开始&lt;/h2&gt;&#xA;&lt;p&gt;首次提交到这个空仓库是在 2025 年 8 月下旬完成的。&lt;/p&gt;&#xA;&lt;p&gt;初始的脚手架——包括仓库结构、CI 配置、格式化规则、包管理器设置和应用框架——都是由 Codex CLI 使用 GPT‑5 生成的，并参考了一小部分现有模板。甚至指导智能体如何在仓库中工作的初始 AGENTS.md 文件本身也是由 Codex 编写的。&lt;/p&gt;&#xA;&lt;p&gt;系统中不存在预先编写的人类代码作为基础。从一开始，这个仓库就是由智能体塑造的。&lt;/p&gt;&#xA;&lt;p&gt;五个月后，该代码库已包含约百万行代码，涵盖应用逻辑、基础设施、工具链、文档及内部开发者工具。在此期间，仅由三名工程师组成的小团队驱动 Codex 完成了约 1500 个拉取请求的创建与合并。这意味着每位工程师平均每日处理 3.5 个拉取请求，而随着团队扩展至七名工程师，这一处理效率仍在持续提升。尤为关键的是，这种产出并非盲目追求数量：该产品已被数百名内部用户使用，其中包括每日高频使用的内部核心用户。&lt;/p&gt;&#xA;&lt;p&gt;在整个开发过程中，人类从未直接贡献任何代码。这已成为团队的核心准则：不编写人工代码。&lt;/p&gt;&#xA;&lt;h2 id=&#34;重新定义工程师的角色&#34;&gt;重新定义工程师的角色&lt;/h2&gt;&#xA;&lt;p&gt;人类不再亲自动手编码，催生了另一种工程实践——&lt;strong&gt;聚焦于系统架构、开发框架与效能杠杆&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;p&gt;早期的进展比我们预期的要慢，不是因为 Codex 能力不足，而是因为环境定义不够明确。智能体缺乏实现高层次目标所需的工具、抽象概念和内部结构。我们工程团队的主要任务变成了让智能体能够完成有用的工作。&lt;/p&gt;&#xA;&lt;p&gt;在实践中，这意味着采用深度优先的工作方式：将更大的目标分解为更小的构建模块（设计、编码、审查、测试等），引导智能体构建这些模块，并利用它们来解锁更复杂的任务。当某个环节失败时，解决方法几乎从来不是“再努力一点”。因为取得进展的唯一途径是让 Codex 来完成工作，所以人类工程师总是会介入任务并提出问题：“缺少什么能力？我们如何让智能体既能理解又能执行这种能力？”&lt;/p&gt;&#xA;&lt;p&gt;人类几乎完全通过提示与系统交互：工程师描述任务，运行代理，并允许其开启拉取请求。为了推动拉取请求完成，我们指示 Codex 在本地审查其自身的更改，在本地和云端请求额外的特定代理审查，回应任何人类或代理给出的反馈，并在循环中迭代，直到所有代理审查者都满意为止（这本质上是一个拉尔夫·维格姆循环⁠）。Codex 直接使用我们的标准开发工具（gh、本地脚本和仓库嵌入技能）来收集上下文，无需人类在命令行界面中复制粘贴。&lt;/p&gt;&#xA;&lt;p&gt;人类可能会审查拉取请求，但并非必须如此。随着时间的推移，我们已将几乎所有的审查工作推向了由代理之间自行处理。&lt;/p&gt;&#xA;&lt;h2 id=&#34;提升应用程序可读性&#34;&gt;提升应用程序可读性&lt;/h2&gt;&#xA;&lt;p&gt;随着代码吞吐量的增加，我们的瓶颈变成了人工质量保证能力。由于固定的限制一直是人类的时间和注意力，我们努力通过使应用程序用户界面、日志和应用指标本身对 Codex 直接可读，来为代理增加更多功能。&lt;/p&gt;&#xA;&lt;p&gt;例如，我们将应用程序设计为可按 git 工作树启动，这样 Codex 就能为每个变更启动并驱动一个实例。我们还将 Chrome DevTools 协议接入代理运行时，并创建了处理 DOM 快照、屏幕截图和导航的技能。这使得 Codex 能够直接复现错误、验证修复方案，并推理用户界面行为。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://img.iefnaf.cc/2026/04/3f7e583e.png&#34; alt=&#34;Diagram titled “Codex drives the app with Chrome DevTools MCP to validate its work.” Codex selects a target, snapshots the state before and after triggering a UI path, observes runtime events via Chrome DevTools, applies fixes, restarts, and loops re-running validation until the app is clean.&#34;&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Langchain Continual Learning for Ai Agents</title>
      <link>https://iefnaf.cc/langchain-continual-learning-for-ai-agents/</link>
      <pubDate>Fri, 10 Apr 2026 11:55:39 +0800</pubDate>
      <guid>https://iefnaf.cc/langchain-continual-learning-for-ai-agents/</guid>
      <description>&lt;p&gt;关于人工智能持续学习的大多数讨论都聚焦于一件事：更新模型权重。但对于 AI 智能体而言，学习可以发生在三个不同的层面：模型层、控制层和上下文层。理解这些差异将彻底改变你构建持续进化系统的思维方式。&lt;/p&gt;&#xA;&lt;p&gt;智能体系统的三个主要层面包括：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;模型层：即模型权重本身。&lt;/li&gt;&#xA;&lt;li&gt;控制层：指驱动所有智能体实例的模型外围框架。这包括驱动智能体的核心代码，以及始终作为框架组成部分的指令或工具集。&lt;/li&gt;&#xA;&lt;li&gt;上下文：存在于框架之外、可用于配置框架的额外上下文（指令、技能）。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://img.iefnaf.cc/2026/04/76a1c37a.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;示例 #1：将其映射到像 Claude Code 这样的编码代理：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;模型：claude-sonnet 等&lt;/li&gt;&#xA;&lt;li&gt;Harness: Claude Code&lt;/li&gt;&#xA;&lt;li&gt;上下文：CLAUDE.md、/skills、mcp.json&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;示例 #2：将其映射到 OpenClaw：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;模型：多种&lt;/li&gt;&#xA;&lt;li&gt;Harness：Pi + 其他辅助工具&lt;/li&gt;&#xA;&lt;li&gt;上下文：SOUL.md，来自 clawhub 的技能&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;当我们谈论持续学习时，大多数人会立刻想到模型。但实际上，一个 AI 系统可以在以下三个层面进行学习。&lt;/p&gt;&#xA;&lt;h2 id=&#34;模型层的持续学习&#34;&gt;模型层的持续学习&lt;/h2&gt;&#xA;&lt;p&gt;当大多数人谈论持续学习时，他们最常指的就是这个：更新模型权重。&lt;/p&gt;&#xA;&lt;p&gt;更新技术包括监督微调（SFT）、强化学习（例如 GRPO）等。&lt;/p&gt;&#xA;&lt;p&gt;这里的核心挑战是&lt;strong&gt;灾难性遗忘&lt;/strong&gt;——当模型基于新数据或任务进行更新时，它往往会在之前掌握的内容上表现下降。这是一个开放的研究问题。&lt;/p&gt;&#xA;&lt;p&gt;当人们为特定的智能体系统训练模型时（例如，你可以将 OpenAI 的 Codex 模型视为为其 Codex 智能体而训练），他们大多是为整个智能体系统进行训练。理论上，你可以在更细粒度的层面上进行（例如，为每个用户使用一个 LoRA），但在实践中，这主要在智能体层面进行。&lt;/p&gt;&#xA;&lt;h2 id=&#34;在控制层进行持续学习&#34;&gt;在控制层进行持续学习&lt;/h2&gt;&#xA;&lt;p&gt;如前所述，harness 指的是驱动智能体的代码，以及始终作为 harness 组成部分的任何指令或工具。&lt;/p&gt;&#xA;&lt;p&gt;随着harness这个概念日益普及，多篇论文开始探讨如何优化harness设计。&lt;/p&gt;&#xA;&lt;p&gt;最近的一个是&lt;strong&gt;Meta-Harness：模型harness的端到端优化。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;核心思想是让智能体在循环中运行。首先让它执行一系列任务，然后进行评估。接着将所有日志存储到文件系统中。最后运行一个编码智能体来查看这些执行轨迹，并提出对框架代码的修改建议。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://img.iefnaf.cc/2026/04/00d9deb7.png&#34; alt=&#34;img&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;与模型的持续学习类似，这通常在智能体层面进行。理论上，你可以在更细粒度的层面实现这一点（例如，为每个用户学习不同的代码框架）。&lt;/p&gt;&#xA;&lt;h2 id=&#34;上下文层的持续学习&#34;&gt;上下文层的持续学习&lt;/h2&gt;&#xA;&lt;p&gt;“上下文”位于系统框架之外，可用于配置框架。上下文包含指令、技能甚至工具等元素。这通常也被称为记忆。&lt;/p&gt;&#xA;&lt;p&gt;这种上下文类型同样存在于框架内部（例如，框架可能包含基础系统提示、技能等）。区别在于它是框架的一部分还是配置的一部分。&lt;/p&gt;&#xA;&lt;p&gt;学习上下文可以在多个不同层面进行。&lt;/p&gt;&#xA;&lt;p&gt;学习上下文可以在智能体层面进行——智能体拥有持久的“记忆”，并随时间更新自身配置。一个很好的例子是 OpenClaw，它拥有随时间更新的 SOUL.md 文件。&lt;/p&gt;&#xA;&lt;p&gt;学习上下文通常在租户层面（用户、组织、团队等）进行。在这种情况下，每个租户都有自己随时间更新的上下文。例如，Hex 的 Context Studio、Decagon 的 Duet、Sierra 的 Explorer。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Anthropic: Project Glasswing</title>
      <link>https://iefnaf.cc/anthropic-project-glasswing/</link>
      <pubDate>Wed, 08 Apr 2026 14:01:11 +0800</pubDate>
      <guid>https://iefnaf.cc/anthropic-project-glasswing/</guid>
      <description>&lt;h2 id=&#34;引言&#34;&gt;引言&lt;/h2&gt;&#xA;&lt;p&gt;今天我们宣布启动&amp;quot;玻璃翼项目（Project Glasswing）&amp;quot; ，这是一项汇集了亚马逊网络服务、Anthropic、苹果、博通、思科、CrowdStrike、谷歌、摩根大通、Linux 基金会、微软、英伟达和帕洛阿尔托网络等机构的联合倡议，旨在保障全球最关键软件的安全。&lt;/p&gt;&#xA;&lt;p&gt;我们组建&amp;quot;玻璃翼项目&amp;quot;的动因，源于我们在 Anthropic 训练的一款前沿模型中所观察到的能力——我们相信这种能力将重塑网络安全格局。Claude Mythos预览版作为一款通用型、尚未发布的前沿模型，揭示了一个严峻事实：人工智能模型已达到的编码能力水平，使其在发现和利用软件漏洞方面能够超越除最顶尖专家外的所有人类。&lt;/p&gt;&#xA;&lt;p&gt;Mythos Preview 已发现数千个高危漏洞，涵盖所有主流操作系统和网络浏览器。鉴于人工智能的发展速度，此类能力很快将广泛扩散，甚至可能被非安全部署方所掌握。这对经济、公共安全和国家安全的潜在冲击可能极为严重。Project Glasswing 正是为了将这些能力紧急应用于防御目的而启动的举措。&lt;/p&gt;&#xA;&lt;p&gt;作为 Project Glasswing 计划的一部分，上述合作方将在防御性安全工作中运用 Mythos Preview；Anthropic 将分享研究成果，使整个行业受益。我们还向 40 余家关键软件基础设施的构建或维护机构开放了访问权限，使其能够运用该模型扫描并加固自有系统及开源系统。Anthropic 将为这些工作提供价值 1 亿美元的 Mythos Preview 使用额度，并向开源安全组织直接捐赠 400 万美元。&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;玻璃翼项目&amp;quot;只是一个起点。没有任何单一组织能够独自解决这些网络安全问题：前沿 AI 开发者、其他软件公司、安全研究人员、开源维护者以及全球各国政府都扮演着不可或缺的角色。守护全球网络基础设施的工作可能需要数年时间；而前沿 AI 能力很可能在未来几个月内就取得重大进展。为了让网络防御者抢占先机，我们必须立即行动。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://img.iefnaf.cc/2026/04/2d477b57.png&#34; alt=&#34;image-20260408170343068&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;人工智能时代的网络安全&#34;&gt;人工智能时代的网络安全&lt;/h2&gt;&#xA;&lt;p&gt;我们日常依赖的各类软件——无论是运行银行系统、存储医疗记录、连接物流网络、维持电网运转，还是其他众多关键功能——始终存在着程序漏洞。其中许多问题微不足道，但有些却是严重的安全缺陷，一旦被网络攻击者发现，就可能被用来劫持系统、中断运营或窃取数据。&lt;/p&gt;&#xA;&lt;p&gt;我们已经目睹了网络攻击对全球重要企业网络、医疗系统、能源基础设施、交通枢纽以及政府机构信息安全造成的严重后果。在国际舞台上，来自&lt;del&gt;中国&lt;/del&gt;、伊朗、朝鲜和俄罗斯等国家支持的行为者发起的攻击，威胁着支撑民用生活和军事准备的基础设施。即使是规模较小的攻击，例如针对个别医院或学校的攻击，仍可能造成巨大的经济损失，暴露敏感数据，甚至危及生命。目前全球网络犯罪的财务成本难以估算，但可能每年高达 5000 亿美元。&lt;/p&gt;&#xA;&lt;p&gt;软件中的许多漏洞多年来未被察觉，因为发现和利用它们需要只有少数熟练安全专家掌握的专业知识。随着最新前沿 AI 模型的出现，发现和利用软件漏洞所需的成本、精力和专业知识水平都大幅下降。在过去一年中，AI 模型在阅读和理解代码方面变得越来越有效——特别是，它们在发现漏洞和找出利用方法方面表现出惊人的能力。Claude Mythos Preview 展示了这些网络安全技能的飞跃——它发现的漏洞在某些情况下已经经受了几十年的人工审查和数百万次自动化安全测试，而它开发的利用方法也越来越复杂。&lt;/p&gt;&#xA;&lt;p&gt;在首届 DARPA 网络大挑战过去十年后，前沿人工智能模型如今在发现和利用漏洞方面已能与顶尖人类专家匹敌。若缺乏必要的防护措施，这些强大的网络能力可能被用于攻击全球最关键软件中现存的诸多缺陷。这可能导致各类网络攻击更加频繁且更具破坏性，并增强美国及其对手的实力。因此，解决这些问题已成为民主国家重要的安全优先事项。&lt;/p&gt;&#xA;&lt;p&gt;尽管人工智能增强的网络攻击风险严峻，但我们有理由保持乐观：那些使 AI 模型在恶意使用者手中变得危险的能力，恰恰使其在发现和修复重要软件漏洞方面具有无可估量的价值——并能开发出安全缺陷大幅减少的新软件。Glasswing 项目是朝着让防御者在即将到来的人工智能驱动网络安全时代获得持久优势迈出的重要一步。&lt;/p&gt;&#xA;&lt;h2 id=&#34;利用claude-mythos-preview识别漏洞与攻击手段&#34;&gt;利用Claude Mythos Preview识别漏洞与攻击手段&lt;/h2&gt;&#xA;&lt;p&gt;过去几周，我们利用 Claude Mythos 预览版在各大主流操作系统、主流网页浏览器以及其他一系列重要软件中，发现了数千个零日漏洞（即软件开发者先前未知的缺陷），其中许多属于高危漏洞。&lt;/p&gt;&#xA;&lt;p&gt;在我们前沿红队博客的一篇文章中，我们提供了部分已修复漏洞的技术细节，以及在某些情况下 Mythos Preview 发现的利用这些漏洞的方法。它能够完全自主地识别出几乎所有这些漏洞，并开发出许多相关的利用程序，无需任何人工指导。以下是三个示例：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mythos Preview 在 OpenBSD 中发现了一个存在 27 年的漏洞——该系统以全球最安全加固的操作系统之一而闻名，常用于运行防火墙及其他关键基础设施。该漏洞允许攻击者仅通过连接至运行该系统的机器，即可远程使其崩溃；&lt;/li&gt;&#xA;&lt;li&gt;它还发现了一个存在于 FFmpeg 中长达 16 年的漏洞——该软件被无数程序用于视频编解码——而自动化测试工具曾对这段问题代码执行过五百万次测试，却始终未能发现该缺陷&lt;/li&gt;&#xA;&lt;li&gt;该模型自主发现并串联了 Linux 内核中的多个漏洞——Linux 内核是运行全球大多数服务器的软件——使得攻击者能够从普通用户权限提升至完全控制机器。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;我们已向相关软件的维护者报告了上述漏洞，目前所有漏洞均已修复。对于其他许多漏洞，我们今日将提供详细信息的加密哈希值（参见红队博客），待修复完成后我们将公布具体细节。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Anthropic: 高级工具使用功能</title>
      <link>https://iefnaf.cc/anthropic-%E9%AB%98%E7%BA%A7%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8%E5%8A%9F%E8%83%BD/</link>
      <pubDate>Tue, 07 Apr 2026 11:18:20 +0800</pubDate>
      <guid>https://iefnaf.cc/anthropic-%E9%AB%98%E7%BA%A7%E5%B7%A5%E5%85%B7%E4%BD%BF%E7%94%A8%E5%8A%9F%E8%83%BD/</guid>
      <description>&lt;p&gt;AI 智能体的未来，是模型能够无缝协同数百乃至数千种工具。一个集成 Git 操作、文件管理、包管理器、测试框架和部署管道的 IDE 助手。一个同时连接 Slack、GitHub、Google Drive、Jira、公司数据库以及数十个 MCP 服务器的运维协调器。&lt;/p&gt;&#xA;&lt;p&gt;要构建高效的智能体，它们需要能够处理无限的工具库，而不是将所有定义预先塞入上下文。我们关于在 MCP 中使用代码执行的博客文章曾讨论过，在智能体读取请求之前，工具结果和定义有时会消耗超过 5 万个标记。智能体应当&lt;strong&gt;按需发现和加载工具&lt;/strong&gt;，仅保留与当前任务相关的内容。&lt;/p&gt;&#xA;&lt;p&gt;智能体还需要具备&lt;strong&gt;从代码调用工具&lt;/strong&gt;的能力。使用自然语言工具调用时，每次调用都需要完整的推理过程，无论中间结果是否有用都会堆积在上下文中。代码天然适合编排逻辑，例如循环、条件判断和数据转换。智能体需要根据当前任务灵活选择代码执行与推理调用。&lt;/p&gt;&#xA;&lt;p&gt;智能体还需要从示例中学习正确的工具使用方法，而不仅仅是依赖模式定义。JSON 模式定义了结构上的有效性，但无法表达使用模式：何时包含可选参数、哪些组合具有实际意义，或者您的 API 期望遵循何种约定。&lt;/p&gt;&#xA;&lt;p&gt;今天，我们发布三项功能来实现这一目标：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;工具搜索工具&lt;/strong&gt;，使 Claude 能够使用搜索工具访问数千种工具，同时不会占用其上下文窗口&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;程序化工具调用&lt;/strong&gt;，允许 Claude 在代码执行环境中调用工具，从而减少对模型上下文窗口的影响&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;工具使用示例&lt;/strong&gt;，为展示如何有效使用特定工具提供了通用标准&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;在内部测试中，我们发现这些功能帮助我们构建了传统工具使用模式无法实现的项目。例如，Claude for Excel 利用程序化工具调用功能，能够读取和修改包含数千行数据的电子表格，同时不会超出模型的上下文窗口容量。&lt;/p&gt;&#xA;&lt;p&gt;根据我们的经验，我们相信这些功能为您利用 Claude 构建应用开启了新的可能性。&lt;/p&gt;&#xA;&lt;h2 id=&#34;工具搜索工具&#34;&gt;工具搜索工具&lt;/h2&gt;&#xA;&lt;h3 id=&#34;挑战&#34;&gt;挑战&lt;/h3&gt;&#xA;&lt;p&gt;MCP 工具定义提供了重要的上下文，但随着连接的服务端增多，这些令牌会不断累积。以五个服务端的设置为例：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;GitHub：35 个工具（约 26K token）&lt;/li&gt;&#xA;&lt;li&gt;Slack：11 个工具（约 21K token）&lt;/li&gt;&#xA;&lt;li&gt;Sentry：5 个工具（约 3K token）&lt;/li&gt;&#xA;&lt;li&gt;Grafana：5 个工具（约 3K token）&lt;/li&gt;&#xA;&lt;li&gt;Splunk：2 个工具（约 2K token）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;这意味着在对话开始前，就有 58 个工具消耗了约 5.5 万个token。如果再添加像 Jira 这样的服务器（仅它自己就使用了约 1.7 万个token），你很快就会接近超过 10 万个token的开销。在 Anthropic，我们曾观察到工具定义在优化前消耗了 13.4 万个token。&lt;/p&gt;</description>
    </item>
    <item>
      <title>AgentSession 源码解析：pi 的对话调度核心</title>
      <link>https://iefnaf.cc/agentsession-%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90pi-%E7%9A%84%E5%AF%B9%E8%AF%9D%E8%B0%83%E5%BA%A6%E6%A0%B8%E5%BF%83/</link>
      <pubDate>Wed, 25 Mar 2026 16:17:50 +0800</pubDate>
      <guid>https://iefnaf.cc/agentsession-%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90pi-%E7%9A%84%E5%AF%B9%E8%AF%9D%E8%B0%83%E5%BA%A6%E6%A0%B8%E5%BF%83/</guid>
      <description>&lt;p&gt;pi 是一个开源的 AI coding agent。对于用户而言，它表现为一个能持续对话、自动使用工具、处理错误的命令行助手；对于代码而言，这一切都由 &lt;code&gt;AgentSession&lt;/code&gt; 这个类统一调度。&lt;/p&gt;&#xA;&lt;p&gt;本文通过阅读 &lt;code&gt;AgentSession&lt;/code&gt; 的源码，拆解它的四个核心机制：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;&lt;code&gt;prompt()&lt;/code&gt; 处理流程&lt;/strong&gt;：用户输入如何经过多层预处理后抵达 LLM&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;消息事件处理链路&lt;/strong&gt;：LLM streaming 期间事件如何流转、驱动上层组件&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;自动重试机制&lt;/strong&gt;：临时性 LLM 错误如何被透明地重试&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;上下文压缩（Compaction）&lt;/strong&gt;：长会话如何在不中断的前提下腾出 context 空间&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;prompt-函数处理流程&#34;&gt;&lt;code&gt;prompt()&lt;/code&gt; 函数处理流程&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;prompt()&lt;/code&gt; 是 &lt;code&gt;AgentSession&lt;/code&gt; 的核心入口，负责把用户输入经过一系列处理后发送给 LLM。&lt;/p&gt;&#xA;&lt;p&gt;主流程：&lt;/p&gt;&#xA;&lt;pre class=&#34;mermaid&#34;&gt;&#xA;  flowchart TD&#xA;    A([prompt]) --&amp;gt; B[&amp;#34;① Extension Command 拦截&amp;lt;br/&amp;gt;/xxx → 执行后返回&amp;#34;]&#xA;    B -- 未命中或跳过 --&amp;gt; C[&amp;#34;② Extension input 事件&amp;lt;br/&amp;gt;可拦截或变换输入&amp;#34;]&#xA;    C -- handled 返回 --&amp;gt; Z1([返回])&#xA;    C -- 继续 --&amp;gt; D[&amp;#34;③ Skill / Template 展开&amp;lt;br/&amp;gt;/skill:name、/template&amp;#34;]&#xA;    D --&amp;gt; E{agent 正在 streaming？}&#xA;    E -- 是 --&amp;gt; F[&amp;#34;④ 排队：steer 或 followUp&amp;#34;]&#xA;    F --&amp;gt; Z2([返回])&#xA;    E -- 否 --&amp;gt; G[&amp;#34;⑤ 校验 model + API key&amp;#34;]&#xA;    G -- 失败 --&amp;gt; Z3([抛出错误])&#xA;    G -- 通过 --&amp;gt; H[&amp;#34;⑥ Compaction 检查&amp;#34;]&#xA;    H --&amp;gt; I[&amp;#34;⑦ 构建 messages&amp;lt;br/&amp;gt;user + images + pendingNextTurn&amp;#34;]&#xA;    I --&amp;gt; J[&amp;#34;⑧ Extension before_agent_start 事件&amp;lt;br/&amp;gt;注入 custom messages / 修改 system prompt&amp;#34;]&#xA;    J --&amp;gt; K[&amp;#34;⑨ agent.prompt + waitForRetry&amp;#34;]&#xA;    K --&amp;gt; Z4([返回])&#xA;&lt;/pre&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;阶段 1：Extension Command 拦截&lt;/strong&gt;&#xA;输入以 &lt;code&gt;/&lt;/code&gt; 开头时，优先在 extension runner 里查找注册的命令并执行。Extension command 通过 &lt;code&gt;ctx&lt;/code&gt;（即 &lt;code&gt;sendUserMessage()&lt;/code&gt;）自行决定是否与 LLM 交互，执行完直接返回，不走后续流程。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pi Session Manager 源码解析</title>
      <link>https://iefnaf.cc/pi-session-manager-%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/</link>
      <pubDate>Wed, 25 Mar 2026 14:08:44 +0800</pubDate>
      <guid>https://iefnaf.cc/pi-session-manager-%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://img.iefnaf.cc/2026/03/1c5359f1.png&#34; alt=&#34;image-20260325150236446&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Pi 的 SessionManager 负责管理 AI 对话的完整生命周期——从创建、持久化、恢复，到分支与压缩。每一次对话都以 append-only 的 &lt;code&gt;.jsonl&lt;/code&gt; 文件保存在磁盘上，session 内部以树状结构组织，支持从任意历史节点分叉出新的对话分支。&lt;/p&gt;&#xA;&lt;p&gt;本文从源码角度，依次梳理 SessionManager 的创建方式、文件格式、entry 类型、写入机制、上下文构建，以及分支和历史树导航的完整流程。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;sessionmanager-的创建方式&#34;&gt;SessionManager 的创建方式&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;SessionManager&lt;/code&gt; 的 constructor 是 private 的，外部只能通过静态工厂方法创建实例，每个方法对应一种 CLI 使用场景：&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;方法&lt;/th&gt;&#xA;          &lt;th&gt;对应 CLI 场景&lt;/th&gt;&#xA;          &lt;th&gt;说明&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;SessionManager.create(cwd)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;默认（新 session）&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;sessionFile=undefined&lt;/code&gt;，按时间戳 + UUID 生成新文件名，懒创建&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;SessionManager.open(path)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;--session &amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;加载指定文件，从 header 读取 cwd&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;SessionManager.continueRecent(cwd)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;--continue&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;找最近修改的 &lt;code&gt;.jsonl&lt;/code&gt; 文件打开，找不到则新建&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;SessionManager.inMemory()&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;--no-session&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;persist=false&lt;/code&gt;，不写磁盘&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;&lt;code&gt;SessionManager.forkFrom(src, cwd)&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;--fork &amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt;&#xA;          &lt;td&gt;复制源文件所有 entry 到新文件，&lt;code&gt;parentSession&lt;/code&gt; 记录来源&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;constructor 内部做两件事：若需要持久化则创建目录；若传入了 &lt;code&gt;sessionFile&lt;/code&gt; 则加载已有文件（含版本迁移），否则调 &lt;code&gt;newSession()&lt;/code&gt; 初始化一个空 session。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;session-文件格式&#34;&gt;Session 文件格式&lt;/h2&gt;&#xA;&lt;p&gt;每个 session 是一个 &lt;code&gt;.jsonl&lt;/code&gt; 文件，每行一个 JSON 对象。第一行是 &lt;code&gt;SessionHeader&lt;/code&gt;，后续每行是一个 &lt;code&gt;SessionEntry&lt;/code&gt;。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pi Coding Agent</title>
      <link>https://iefnaf.cc/pi-coding-agent/</link>
      <pubDate>Tue, 24 Mar 2026 14:10:16 +0800</pubDate>
      <guid>https://iefnaf.cc/pi-coding-agent/</guid>
      <description>&lt;h1 id=&#34;mariozechnerpi-coding-agent&#34;&gt;@mariozechner/pi-coding-agent&lt;/h1&gt;&#xA;&lt;p&gt;Pi 是一个极简的终端编程框架。让 pi 适应你的工作流程，而不是反过来，无需 fork 和修改 pi 内部代码。使用 TypeScript &lt;a href=&#34;http://localhost:63342/markdownPreview/1512703877/markdown-preview-index-3j0i31n3j7c3j0sfo8eo6mb6pv.html#%E6%89%A9%E5%B1%95&#34;&gt;扩展&lt;/a&gt;、&lt;a href=&#34;http://localhost:63342/markdownPreview/1512703877/markdown-preview-index-3j0i31n3j7c3j0sfo8eo6mb6pv.html#%E6%8A%80%E8%83%BD&#34;&gt;技能&lt;/a&gt;、&lt;a href=&#34;http://localhost:63342/markdownPreview/1512703877/markdown-preview-index-3j0i31n3j7c3j0sfo8eo6mb6pv.html#%E6%8F%90%E7%A4%BA%E8%AF%8D%E6%A8%A1%E6%9D%BF&#34;&gt;提示词模板&lt;/a&gt;和&lt;a href=&#34;http://localhost:63342/markdownPreview/1512703877/markdown-preview-index-3j0i31n3j7c3j0sfo8eo6mb6pv.html#%E4%B8%BB%E9%A2%98&#34;&gt;主题&lt;/a&gt;来扩展它。将你的扩展、技能、提示词模板和主题放入 &lt;a href=&#34;http://localhost:63342/markdownPreview/1512703877/markdown-preview-index-3j0i31n3j7c3j0sfo8eo6mb6pv.html#pi-%E5%8C%85&#34;&gt;Pi 包&lt;/a&gt;中，通过 npm 或 git 与他人分享。&lt;/p&gt;&#xA;&lt;p&gt;Pi 自带强大的默认配置，但跳过了子代理和计划模式等功能。相反，你可以让 pi 构建你想要的功能，或者安装符合你工作流程的第三方 pi 包。&lt;/p&gt;&#xA;&lt;p&gt;Pi 以四种模式运行：交互模式、打印或 JSON 模式、用于进程集成的 RPC 模式，以及用于嵌入你自己应用的 SDK 模式。参见 &lt;a href=&#34;https://github.com/openclaw/openclaw&#34;&gt;openclaw/openclaw&lt;/a&gt; 了解真实世界的 SDK 集成案例。&lt;/p&gt;&#xA;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g @mariozechner/pi-coding-agent&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用 API 密钥进行认证：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ANTHROPIC_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;sk-ant-...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;或使用你现有的订阅：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/login  &lt;span class=&#34;c1&#34;&gt;# 然后选择提供商&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后就可以与 pi 对话了。默认情况下，pi 为模型提供四个工具：&lt;code&gt;read&lt;/code&gt;、&lt;code&gt;write&lt;/code&gt;、&lt;code&gt;edit&lt;/code&gt; 和 &lt;code&gt;bash&lt;/code&gt;。模型使用这些工具来满足你的请求。通过&lt;a href=&#34;http://localhost:63342/markdownPreview/1512703877/markdown-preview-index-3j0i31n3j7c3j0sfo8eo6mb6pv.html#%E6%8A%80%E8%83%BD&#34;&gt;技能&lt;/a&gt;、&lt;a href=&#34;http://localhost:63342/markdownPreview/1512703877/markdown-preview-index-3j0i31n3j7c3j0sfo8eo6mb6pv.html#%E6%8F%90%E7%A4%BA%E8%AF%8D%E6%A8%A1%E6%9D%BF&#34;&gt;提示词模板&lt;/a&gt;、&lt;a href=&#34;http://localhost:63342/markdownPreview/1512703877/markdown-preview-index-3j0i31n3j7c3j0sfo8eo6mb6pv.html#%E6%89%A9%E5%B1%95&#34;&gt;扩展&lt;/a&gt;或 &lt;a href=&#34;http://localhost:63342/markdownPreview/1512703877/markdown-preview-index-3j0i31n3j7c3j0sfo8eo6mb6pv.html#pi-%E5%8C%85&#34;&gt;pi 包&lt;/a&gt;添加功能。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;供应商与模型&#34;&gt;供应商与模型&lt;/h2&gt;&#xA;&lt;p&gt;对于每个内置提供商，pi 维护一个支持工具调用的模型列表，每次发布都会更新。通过订阅（&lt;code&gt;/login&lt;/code&gt;）或 API 密钥认证，然后通过 &lt;code&gt;/model&lt;/code&gt;（或 Ctrl+L）从该提供商选择任意模型。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;订阅：&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Anthropic Claude Pro/Max&lt;/li&gt;&#xA;&lt;li&gt;OpenAI ChatGPT Plus/Pro (Codex)&lt;/li&gt;&#xA;&lt;li&gt;GitHub Copilot&lt;/li&gt;&#xA;&lt;li&gt;Google Gemini CLI&lt;/li&gt;&#xA;&lt;li&gt;Google Antigravity&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;API 密钥：&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Pi-Mono Internals] Part 2:The loop layer — Agent</title>
      <link>https://iefnaf.cc/pi-mono-internals-part-2the-loop-layer-agent/</link>
      <pubDate>Mon, 23 Mar 2026 15:58:41 +0800</pubDate>
      <guid>https://iefnaf.cc/pi-mono-internals-part-2the-loop-layer-agent/</guid>
      <description>&lt;h1 id=&#34;mariozechnerpi-agent-core&#34;&gt;@mariozechner/pi-agent-core&lt;/h1&gt;&#xA;&lt;p&gt;支持工具执行和事件流的有状态 Agent。基于 &lt;code&gt;@mariozechner/pi-ai&lt;/code&gt; 构建。&lt;/p&gt;&#xA;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ts&#34; data-lang=&#34;ts&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Agent&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;@mariozechner/pi-agent-core&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getModel&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;@mariozechner/pi-ai&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;agent&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Agent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;initialState&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;systemPrompt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;You are a helpful assistant.&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;getModel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;anthropic&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;claude-sonnet-4-20250514&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;agent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;subscribe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;message_update&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;assistantMessageEvent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;text_delta&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 只流式输出新的文本块&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;stdout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;assistantMessageEvent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;delta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;agent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;prompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Hello!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;核心概念&#34;&gt;核心概念&lt;/h2&gt;&#xA;&lt;h3 id=&#34;agentmessage-与-llm-消息&#34;&gt;AgentMessage 与 LLM 消息&lt;/h3&gt;&#xA;&lt;p&gt;Agent 使用 &lt;code&gt;AgentMessage&lt;/code&gt;，这是一种灵活的类型，可以包括：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;标准 LLM 消息（&lt;code&gt;user&lt;/code&gt;、&lt;code&gt;assistant&lt;/code&gt;、&lt;code&gt;toolResult&lt;/code&gt;）&lt;/li&gt;&#xA;&lt;li&gt;通过声明合并的自定义应用特定消息类型&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;LLM 只理解 &lt;code&gt;user&lt;/code&gt;、&lt;code&gt;assistant&lt;/code&gt; 和 &lt;code&gt;toolResult&lt;/code&gt;。&lt;code&gt;convertToLlm&lt;/code&gt; 函数通过在每次 LLM 调用前过滤和转换消息来弥合这一差距。&lt;/p&gt;&#xA;&lt;h3 id=&#34;消息流&#34;&gt;消息流&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AgentMessage[] → transformContext() → AgentMessage[] → convertToLlm() → Message[] → LLM&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                     (可选)                                (必需)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;transformContext&lt;/strong&gt;：修剪旧消息，注入外部上下文&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;convertToLlm&lt;/strong&gt;：过滤仅用于 UI 的消息，将自定义类型转换为 LLM 格式&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;事件流&#34;&gt;事件流&lt;/h2&gt;&#xA;&lt;p&gt;Agent 发出事件以更新 UI。理解事件序列有助于构建响应式界面。&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://iefnaf.cc/about/</link>
      <pubDate>Fri, 20 Mar 2026 18:47:42 +0800</pubDate>
      <guid>https://iefnaf.cc/about/</guid>
      <description>&lt;p&gt;Hi，我是 &lt;strong&gt;Fanfei Gao&lt;/strong&gt;。目前为止的人生轨迹：&lt;/p&gt;&#xA;&lt;style&gt;&#xA;.tl-wrap { position: relative; }&#xA;.tl-curve {&#xA;  position: absolute;&#xA;  inset: 0;&#xA;  width: 100%;&#xA;  height: 100%;&#xA;  pointer-events: none;&#xA;  color: var(--text-color);&#xA;  opacity: 0.4;&#xA;}&#xA;.timeline {&#xA;  list-style: none;&#xA;  margin: 2.5em 0;&#xA;  padding: 0;&#xA;}&#xA;.timeline li {&#xA;  position: relative;&#xA;  width: 44%;&#xA;  margin: 0 0 2.8em 0;&#xA;}&#xA;.timeline li:nth-child(even) { margin-left: auto; }&#xA;.timeline h3 {&#xA;  margin: 0 0 0.3em 0;&#xA;  font-size: 1em;&#xA;}&#xA;.timeline .tl-year {&#xA;  color: var(--link-color);&#xA;  margin-right: 0.5em;&#xA;  font-weight: bold;&#xA;}&#xA;.timeline p { margin: 0.2em 0 0 0; }&#xA;.tl-dot {&#xA;  position: absolute;&#xA;  top: 0.35em;&#xA;  width: 0.72em;&#xA;  height: 0.72em;&#xA;  border-radius: 50%;&#xA;  background: var(--link-color);&#xA;  box-shadow: 0 0 0 4px var(--background-color);&#xA;}&#xA;.timeline li:nth-child(odd) .tl-dot { right: -1.3em; }&#xA;.timeline li:nth-child(even) .tl-dot { left: -1.3em; }&#xA;.tl-media {&#xA;  margin-top: 0.9em;&#xA;  width: 100%;&#xA;  aspect-ratio: 16 / 9;&#xA;  border-radius: 6px;&#xA;  display: flex;&#xA;  align-items: center;&#xA;  justify-content: center;&#xA;  background: rgba(128, 128, 128, 0.14);&#xA;  color: var(--text-color);&#xA;  opacity: 0.55;&#xA;  font-size: 0.85em;&#xA;}&#xA;.tl-media img {&#xA;  width: 100%;&#xA;  aspect-ratio: 16 / 9;&#xA;  object-fit: cover;&#xA;  border-radius: 6px;&#xA;  display: block;&#xA;}&#xA;@media (max-width: 640px) {&#xA;  .timeline li {&#xA;    width: auto;&#xA;    margin: 0 0 2.4em 1.9em;&#xA;  }&#xA;  .timeline li:nth-child(even) { margin-left: 1.9em; }&#xA;  .timeline li:nth-child(odd) .tl-dot,&#xA;  .timeline li:nth-child(even) .tl-dot { left: -1.6em; right: auto; }&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;div class=&#34;tl-wrap&#34;&gt;&#xA;&lt;svg class=&#34;tl-curve&#34; aria-hidden=&#34;true&#34;&gt;&lt;/svg&gt;&#xA;&lt;ol class=&#34;timeline&#34;&gt;&#xA;&lt;li&gt;&#xA;&lt;h3&gt;&lt;span class=&#34;tl-year&#34;&gt;2015–2019&lt;/span&gt;西北工业大学 · 本科&lt;/h3&gt;&#xA;&lt;span class=&#34;tl-dot&#34;&gt;&lt;/span&gt;&#xA;&lt;div class=&#34;tl-media&#34;&gt;📷 待补图片&lt;/div&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;h3&gt;&lt;span class=&#34;tl-year&#34;&gt;2019–2022&lt;/span&gt;北京大学 · 硕士&lt;/h3&gt;&#xA;&lt;span class=&#34;tl-dot&#34;&gt;&lt;/span&gt;&#xA;&lt;div class=&#34;tl-media&#34;&gt;📷 待补图片&lt;/div&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;h3&gt;&lt;span class=&#34;tl-year&#34;&gt;2022–2024&lt;/span&gt;阿里云 PolarDB-X · CDC 开发&lt;/h3&gt;&#xA;&lt;span class=&#34;tl-dot&#34;&gt;&lt;/span&gt;&#xA;&lt;p&gt;Change Data Capture——让数据在系统之间流动。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[Pi-Mono Internals] Part 1:The Intelligence Layer — AI</title>
      <link>https://iefnaf.cc/pi-mono-internals-part-1the-intelligence-layer-ai/</link>
      <pubDate>Fri, 20 Mar 2026 18:35:25 +0800</pubDate>
      <guid>https://iefnaf.cc/pi-mono-internals-part-1the-intelligence-layer-ai/</guid>
      <description>&lt;h1 id=&#34;mariozechnerpi-ai&#34;&gt;@mariozechner/pi-ai&lt;/h1&gt;&#xA;&lt;p&gt;统一的 LLM API，支持自动模型发现、提供商配置、Token 和成本追踪，以及简单的上下文持久化和会话中途切换到其他模型。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：本库仅包含支持工具调用（函数调用）的模型，因为这对智能体工作流至关重要。&lt;/p&gt;&#xA;&lt;h2 id=&#34;quick-start&#34;&gt;Quick Start&lt;/h2&gt;&#xA;&lt;p&gt;Step1: 选择供应商和模型，定义Tool，构造模型对话上下文。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ts&#34; data-lang=&#34;ts&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getModel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;stream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;complete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;StringEnum&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;@mariozechner/pi-ai&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 完全类型化，支持提供商和模型的自动补全&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;getModel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;openai&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;gpt-4o-mini&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 使用 TypeBox schema 定义工具，实现类型安全和验证&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tools&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;Tool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;get_time&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Get the current time&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;parameters&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;Type.Object&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;timezone&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;Type.Optional&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;String&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Optional timezone (e.g., America/New_York)&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}))&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}];&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 构建对话上下文（易于序列化，可在模型间传递）&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;context&lt;/span&gt;: &lt;span class=&#34;kt&#34;&gt;Context&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;systemPrompt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;You are a helpful assistant.&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;messages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;role&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;What time is it?&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nx&#34;&gt;tools&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Step2-1：流式输出&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ts&#34; data-lang=&#34;ts&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 方式 1：流式传输，包含所有事件类型&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;stream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;switch&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;start&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`Starting with &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;partial&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;text_start&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;\n[Text started]&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;text_delta&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;stdout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;delta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;text_end&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;\n[Text ended]&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;thinking_start&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;[Model is thinking...]&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;thinking_delta&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;process&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;stdout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;delta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;thinking_end&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;[Thinking complete]&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;toolcall_start&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;n[Tool call started: index &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;contentIndex&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;]`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;toolcall_delta&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;// Partial tool arguments are being streamed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;      &lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;partialCall&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;partial&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;contentIndex&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;partialCall&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;toolCall&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`[Streaming args for &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;partialCall&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;]`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;toolcall_end&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;nTool called: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;toolCall&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`Arguments: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;JSON&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;stringify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;toolCall&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;arguments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;done&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;nFinished: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reason&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;error&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`Error: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;event&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 获取流式传输后的最终消息，添加到上下文中&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;finalMessage&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;await&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;result&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;messages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;finalMessage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Step2-2：非流式输出&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
