<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/blog/pretty-feed-v3.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Peter 的技术笔记</title><description>个人技术笔记（Java / 后端 / Agent）</description><link>https://tangwin.github.io/blog</link><language>zh-CN</language><item><title>AGENTS.md 怎么写：Matt Pocock 指南要点</title><link>https://tangwin.github.io/blog/blog/agents-md-guide/</link><guid isPermaLink="true">https://tangwin.github.io/blog/blog/agents-md-guide/</guid><description>AGENTS.md 每次请求都会加载，所以要尽量小：只放一句话项目描述、包管理器和非标准构建命令，其余用渐进披露放进链接文档。整理自 Matt Pocock 的 A Complete Guide To AGENTS.md。</description><pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;来源：Matt Pocock，&lt;a href=&quot;https://www.aihero.dev/a-complete-guide-to-agents-md&quot;&gt;A Complete Guide To AGENTS.md&lt;/a&gt;；以及他的 &lt;a href=&quot;https://github.com/mattpocock/dictionary-of-ai-coding/blob/main/dictionary/AGENTS.md.md&quot;&gt;Dictionary of AI Coding · AGENTS.md 词条&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;AGENTS.md 是什么&lt;/h2&gt;
&lt;p&gt;一个提交进 Git 的 Markdown 文件，用来定制 AI 编码 agent 在仓库里的行为。它被放在对话历史的最前面、紧挨着 system prompt。Claude Code 读的是 &lt;code&gt;CLAUDE.md&lt;/code&gt;，可以用软链让各工具共用一份：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;ln&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-s&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;AGENTS.md&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;CLAUDE.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;h2&gt;核心问题：它每次请求都会加载&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;每个 token 在每次请求里都要付费&lt;/strong&gt;，不管和当前任务有没有关系。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;指令预算有限&lt;/strong&gt;：前沿推理模型大约只能稳定遵循 150–200 条指令，小模型更少。指令越多，任何一条被遵守的概率越低。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;过时文档会“毒化”上下文&lt;/strong&gt;：人看到旧文档会怀疑，agent 会照着错路径自信地去找。尤其别写具体文件路径，改写“能力和项目形状”；领域概念比路径稳定，但也要轻写。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;文件变大的典型循环：agent 做了你不喜欢的事 → 加一条规则 → 重复几个月 → 变成一团“泥球”。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;不要用初始化脚本自动生成 AGENTS.md&lt;/strong&gt;——生成的内容追求面面俱到，而这些本该渐进披露。&lt;/p&gt;
&lt;h2&gt;根目录只放最少的东西&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;一句话项目描述&lt;/strong&gt;（相当于角色提示），例如：&lt;code&gt;This is a React component library for accessible data visualization.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;包管理器&lt;/strong&gt;（如果不是 npm），例如：&lt;code&gt;This project uses pnpm workspaces.&lt;/code&gt;（也可以用 &lt;code&gt;corepack&lt;/code&gt; 让系统自己报警，省预算）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;非标准的构建 / 类型检查命令&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;就这些，其余都放到别处。&lt;/p&gt;
&lt;h2&gt;渐进披露（Progressive Disclosure）&lt;/h2&gt;
&lt;p&gt;把语言规范、测试约定等拆成单独文件，根文件里只轻轻引用一句：&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;For TypeScript conventions, see docs/TYPESCRIPT.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;不用 “ALWAYS”、不用全大写强调。好处：只有写 TypeScript 时才加载这些规则，其他任务不浪费 token。文档之间还可以继续嵌套引用（&lt;code&gt;TYPESCRIPT.md&lt;/code&gt; → &lt;code&gt;TESTING.md&lt;/code&gt; → 具体测试工具），也可以链到外部官方文档。Agent Skills 是另一种渐进披露形式（参见 &lt;a href=&quot;../hermes-agent-skills/&quot;&gt;Hermes × Agent Skills 笔记&lt;/a&gt;）。&lt;/p&gt;
&lt;h2&gt;Monorepo：嵌套 AGENTS.md&lt;/h2&gt;
&lt;p&gt;子目录里的 AGENTS.md 会和根目录合并：&lt;/p&gt;

















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;层级&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;根目录&lt;/td&gt;&lt;td&gt;monorepo 的用途、如何在包之间导航、共享工具（如 pnpm workspaces）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;包目录&lt;/td&gt;&lt;td&gt;该包的用途、技术栈、包内约定&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;每一层都别塞满——agent 会同时看到所有合并后的文件。&lt;/p&gt;
&lt;h2&gt;一键瘦身 Prompt（意译）&lt;/h2&gt;
&lt;p&gt;让 agent 按渐进披露重构现有 AGENTS.md：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;找矛盾&lt;/strong&gt;：列出互相冲突的指令，逐条问我保留哪个；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;提取必要项&lt;/strong&gt;：一句话描述、包管理器、非标准构建命令、真正每个任务都相关的内容；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分组其余内容&lt;/strong&gt;：按 TypeScript 约定、测试、API 设计、Git 流程等分类，各建一个文件；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;输出结构&lt;/strong&gt;：最小化的根 AGENTS.md（带链接）+ 各分文件 + 建议的 &lt;code&gt;docs/&lt;/code&gt; 目录；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;标记删除&lt;/strong&gt;：冗余的（agent 本来就知道）、太模糊无法执行的、过于显然的（如“写干净的代码”）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;原文英文 prompt 见&lt;a href=&quot;https://www.aihero.dev/a-complete-guide-to-agents-md&quot;&gt;原文末尾&lt;/a&gt;。&lt;/p&gt;
&lt;h2&gt;词条补充：什么时候该加一行&lt;/h2&gt;
&lt;p&gt;Matt 的 AI Coding 词典对 AGENTS.md 的定义：harness 在会话开始时载入上下文窗口的文件，是项目给 agent 的“常驻简报”。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;模型是无状态的，上一个会话里的纠正下一个会话就没了。&lt;strong&gt;同一件事纠正过 agent 两次，它就是 AGENTS.md 的候选行。&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;适合写的是 &lt;strong&gt;agent 从代码里推不出来的东西&lt;/strong&gt;：构建/测试命令、代码里看不出的约定、硬约束（如“永远不要改生成的 client”）。简短、陈述式——它是简报，不是文档。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;避免&lt;/strong&gt;：把本该渐进披露的内容（如整份风格指南）塞进来；那应该放到 skill 或上下文指针后面。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;放在哪：决策表&lt;/h2&gt;





















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;位置&lt;/th&gt;&lt;th&gt;什么时候用&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;根 AGENTS.md&lt;/td&gt;&lt;td&gt;和仓库里每一个任务都相关&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;单独文件&lt;/td&gt;&lt;td&gt;只和某个领域相关（TypeScript、测试等）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;嵌套文档树&lt;/td&gt;&lt;td&gt;可以分层组织的内容&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;理想的 AGENTS.md：小、聚焦、指向别处。&lt;/p&gt;</content:encoded></item><item><title>让 LLM 把东西讲明白：Karpathy 的输出格式阶梯与 LLM 使用技巧</title><link>https://tangwin.github.io/blog/blog/karpathy-llm-explain/</link><guid isPermaLink="true">https://tangwin.github.io/blog/blog/karpathy-llm-explain/</guid><description>Karpathy 提出理解 LLM 输出的“阶梯”：受控英语 ASD-STE100 → 图表 → HTML 网页 → 定制讲解视频。本文逐级拆解原理、ASD-STE100 的真实规则与改写示例、可直接复制的中英文 Prompt、注意事项，以及他在 How I use LLMs 里的日常工作流。</description><pubDate>Fri, 16 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;来源：Andrej Karpathy 2026-10-02 的 &lt;a href=&quot;https://x.com/karpathy/status/2105819303471976479&quot;&gt;X 帖子&lt;/a&gt;（全文整理见 &lt;a href=&quot;https://wayintoai.com/ref/karpathy-efficient-ways-to-get-llms-to-explain&quot;&gt;Way Into AI&lt;/a&gt;）；ASD-STE100 规则引自官方 &lt;a href=&quot;https://www.asd-ste100.org/assets/files/ASD-STE100_ISSUE9.pdf&quot;&gt;ASD-STE100 Issue 9&lt;/a&gt;；日常技巧来自他 2025-02-27 发布的视频 &lt;a href=&quot;https://www.youtube.com/watch?v=EWvNQjAaOHw&quot;&gt;How I use LLMs&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;说明：标注“【个人补充】”的内容是我的理解与实践建议，不是 Karpathy 原话。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;为什么要关心“怎么让 LLM 讲明白”&lt;/h2&gt;
&lt;p&gt;Karpathy 帖子的出发点是：&lt;strong&gt;我们会花越来越多的时间去理解语言模型的输出。&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;模型在做越来越多的“体力活”&lt;/strong&gt;。写代码、查资料、跑分析，越来越多由 agent 自主完成；人的工作会“沿着抽象层往上走”，变成 &lt;strong&gt;监督（oversight）与理解（understanding）&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;瓶颈从“产出”变成“读懂”&lt;/strong&gt;。Agent 一晚上能产出几千行 diff、几十页报告，人能不能快速、准确地看懂，决定了监督是否有效。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;好在 LLM 本身也能帮忙&lt;/strong&gt;。智能和代码越来越廉价，你可以要“&lt;strong&gt;大型、定制、用完即弃&lt;/strong&gt;”的软件制品——一个只为解释这一次改动的交互网页、一段只给你自己看的讲解视频。以前这种东西做起来太贵，根本不值得；现在值得了。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;他给出的办法是一个逐级升级的输出格式阶梯，每一级都“But even better”：&lt;/p&gt;
&lt;div&gt;
&lt;span&gt;图 1 · 输出格式阶梯（每升一级都 “But even better”）&lt;/span&gt;
&lt;div&gt;&lt;span&gt;① 写作&lt;small&gt;ASD-STE100 受控英语&lt;/small&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;② 图表 / 图片&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;③ HTML 交互网页&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;④ 定制讲解视频&lt;small&gt;3b1b 风格 + 配音&lt;/small&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;← 成本最低、最易审阅&lt;/span&gt;&lt;span&gt;表达力最强、制作成本最高 →&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;阶梯一：写作 → 用 ASD-STE100&lt;/h2&gt;
&lt;h3&gt;原文要点&lt;/h3&gt;
&lt;p&gt;让 LLM 用 &lt;strong&gt;ASD-STE100&lt;/strong&gt; 解释东西。它是一套受控语言规范，最初为航空维修文档开发。Karpathy 说 LLM 很熟悉这套规范，而它对“干净的写作风格”有很重的约束，读起来往往更易懂。规范太严时可以放松：要求 &lt;strong&gt;“80% of the way to ASD-STE100”&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;ASD-STE100 到底约束了什么&lt;/h3&gt;
&lt;p&gt;ASD-STE100（Simplified Technical English，简化技术英语）由 ASD（欧洲航空航天与防务工业协会）维护，当前为 Issue 9。以下规则摘自官方规范原文：&lt;/p&gt;

































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;类别&lt;/th&gt;&lt;th&gt;规则（官方条款）&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;词汇&lt;/td&gt;&lt;td&gt;只用&lt;strong&gt;词典批准的词&lt;/strong&gt;（Rule 1.1）；一般来说&lt;strong&gt;每个词只有一个含义、一个词性&lt;/strong&gt;——例如 &lt;em&gt;fall&lt;/em&gt; 只表示“受重力向下移动”，不表示“下降/减少”；同义词只保留一个，如只用 &lt;em&gt;start&lt;/em&gt;，不用 &lt;em&gt;begin / commence / initiate&lt;/em&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;语态&lt;/td&gt;&lt;td&gt;&lt;strong&gt;使用主动语态&lt;/strong&gt;；描述性文字中只有在不知道动作发出者时才可用被动（Rule 3.6）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;过程性句子（操作步骤）&lt;/td&gt;&lt;td&gt;&lt;strong&gt;每句最多 20 词&lt;/strong&gt;（Rule 5.1）；&lt;strong&gt;每句只写一条指令&lt;/strong&gt;，除非多个动作同时发生（Rule 5.2）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;描述性句子&lt;/td&gt;&lt;td&gt;&lt;strong&gt;每句最多 25 词&lt;/strong&gt;（Rule 6.3）；&lt;strong&gt;逐步给出信息&lt;/strong&gt;（Rule 6.1）；用关键词组织逻辑结构（Rule 6.2）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;段落&lt;/td&gt;&lt;td&gt;&lt;strong&gt;每段只讲一个主题&lt;/strong&gt;（Rule 6.5）；&lt;strong&gt;每段不超过六句&lt;/strong&gt;（Rule 6.6）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;衔接&lt;/td&gt;&lt;td&gt;用连接词把相关主题的句子连起来（Rule 4.4）&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;注：常见的“一句一个主题”说法，在官方规范里对应的是“过程性句子一句一条指令”和“段落一个主题”；严格说并没有单独的“一句一个主题”条款。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;为什么它对“读懂 LLM 输出”有效&lt;/strong&gt;【个人补充】：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;短句 = 低工作记忆负担&lt;/strong&gt;。20/25 词上限迫使模型把长难句拆开，每句只承载一个信息点。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;一词一义 = 消除歧义&lt;/strong&gt;。LLM 平时爱用同义词换着说，读者会怀疑“这两个词是不是两回事”；受控词汇把这种噪音砍掉。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主动语态 = 谁做了什么一目了然&lt;/strong&gt;。“配置被加载”变成“服务加载配置”，责任主体清楚。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;逐步给信息 = 天然的结构&lt;/strong&gt;。先结论、再细节，正好适合审阅。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;难以藏住“空话”&lt;/strong&gt;。在严格的格式下，含糊、绕弯的表述很难伪装成内容。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;改写示例（Before / After）&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Before（典型的 LLM 风格）：&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The caching layer, which was introduced in order to mitigate the latency issues that were being experienced by users during peak traffic periods, leverages a write-through strategy that ensures data consistency is maintained between the cache and the underlying database, although it should be noted that cache invalidation may occasionally be delayed under certain conditions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;一句 60 多个词，三处被动，&lt;em&gt;leverage / mitigate&lt;/em&gt; 这类非批准词，还把“为什么引入、怎么工作、有什么问题”塞进同一句。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;After（接近 ASD-STE100）：&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The cache decreases latency during peak traffic. It uses a write-through strategy. Each write goes to the cache and to the database at the same time. Thus, the data in the cache and the data in the database stay the same. Sometimes the system removes old cache data late. This can occur when the load is high.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;每句一个信息点、主动语态、都在 25 词以内。【个人补充】最后一句的“when the load is high”是改写时补上的具体条件——原文只写了 “under certain conditions”。&lt;strong&gt;这正是风险点&lt;/strong&gt;：改写会让模型倾向于把模糊表述“具体化”，你必须核对它补的条件是否真实（见下文“注意事项”）。&lt;/p&gt;
&lt;h3&gt;Prompt 模板&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;English：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Explain the following in ASD-STE100 Simplified Technical English&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(about 80% of the way to strict STE: keep technical terms, allow common words if needed).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Rules: active voice; max 20 words per instruction, max 25 words per descriptive sentence;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;one instruction per sentence; one topic per paragraph, max 6 sentences;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;use one word for one meaning and keep it consistent.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Do not add facts, numbers, or conditions that are not in the source.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Keep all technical terms, identifiers, and code unchanged.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;content&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;中文（适合中文读者的“受控中文”变体）【个人补充】：&lt;/strong&gt;&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;请用接近 ASD-STE100 的风格解释下面的内容，输出中文：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- 用主动语态，明确“谁做了什么”；&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- 操作步骤一步一句、每句只有一个动作；说明性句子尽量短（约 40 字以内）；&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- 每段只讲一个主题，不超过 6 句；&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- 同一个概念始终用同一个词，不要换同义词；&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- 技术术语、标识符、代码、数字和条件原样保留，不要补充原文没有的事实。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;内容&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;阶梯二：图表 / 图片&lt;/h2&gt;
&lt;h3&gt;原文要点&lt;/h3&gt;
&lt;p&gt;别要文字，让 LLM &lt;strong&gt;画图&lt;/strong&gt;。图更容易处理、解析和理解。&lt;/p&gt;
&lt;h3&gt;为什么有效【个人补充】&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;结构外显&lt;/strong&gt;：依赖关系、时序、状态转换这类信息，本来就是“图形状”的；用文字表达等于让读者在脑子里重建图。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;一眼发现异常&lt;/strong&gt;：环形依赖、孤立节点、缺失的分支，在图上非常显眼，在文字里很容易被略过。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可审阅、可 diff&lt;/strong&gt;：让模型输出 &lt;strong&gt;Mermaid / Graphviz / PlantUML&lt;/strong&gt; 这类“图即代码”，既能渲染，又能放进 Git 跟踪变化；也可以直接让它输出纯 HTML/CSS 或 SVG 图（本文的图就是纯 HTML/CSS，不依赖 JS）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Prompt 模板&lt;/h3&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Draw a diagram that explains &amp;lt;topic&amp;gt;. Output Mermaid code only.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Pick the best diagram type (flowchart / sequenceDiagram / stateDiagram / classDiagram).&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Max 15 nodes. Label every edge with the action or data that flows.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Mark anything you are unsure about with &quot;?&quot; in the label.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;用一张图解释 &amp;lt;主题&amp;gt;，只输出 Mermaid 代码。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;自行选择最合适的类型（流程图 / 时序图 / 状态图 / 类图）；&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;节点不超过 15 个；每条边标注发生的动作或流动的数据；&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;不确定的地方在标签里加“?”。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;阶梯三：HTML 网页&lt;/h2&gt;
&lt;h3&gt;原文要点&lt;/h3&gt;
&lt;p&gt;要求输出 &lt;strong&gt;“in HTML”&lt;/strong&gt;，得到漂亮、可交互的网页。LLM 的前端能力越来越强，能做出漂亮的体验和动画。&lt;/p&gt;
&lt;h3&gt;为什么有效【个人补充】&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;交互 = 让读者自己探索&lt;/strong&gt;：滑块调参数、折叠细节、悬停看定义，读者按自己的节奏理解，而不是被动读一长段。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;单文件、零依赖、可丢弃&lt;/strong&gt;：一个 HTML 文件双击就能打开；看完就扔，不需要“维护”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;多种表达组合&lt;/strong&gt;：一页里可以同时有文字摘要、图、表格、可运行的小例子。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Prompt 模板&lt;/h3&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Create a single self-contained HTML file (inline CSS/JS, no external requests)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;that explains &amp;lt;topic&amp;gt; interactively.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Include: a 3-sentence summary at the top, one interactive element&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;(slider / toggle / step-through) that shows how &amp;lt;key variable&amp;gt; changes the result,&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;and a &quot;Sources &amp;amp; assumptions&quot; section listing what is from the input vs. what you assumed.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;做一个单文件 HTML（CSS/JS 内联，不请求任何外部资源），交互式讲解 &amp;lt;主题&amp;gt;：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- 顶部 3 句话摘要；&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- 至少一个交互元素（滑块 / 开关 / 分步播放），展示 &amp;lt;关键变量&amp;gt; 如何影响结果；&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;- 底部“来源与假设”区，区分哪些来自输入、哪些是你的假设。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;安全提示【个人补充】：打开前先看一眼代码，确认没有外部请求或可疑脚本；要求“no external requests”也能顺便保护隐私。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;阶梯四：定制讲解视频&lt;/h2&gt;
&lt;h3&gt;原文要点&lt;/h3&gt;
&lt;p&gt;Karpathy 最看好的输出形式：&lt;strong&gt;针对任意主题完全定制的讲解视频&lt;/strong&gt;。可以试：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Create a 3b1b style video explainer on X. Use my ElevenLabs API key for audio narration.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;配音需要 API Key；也可以让 LLM 帮你找能用本地算力的免费替代方案。他说这“真的开始能用了”。&lt;/p&gt;
&lt;h3&gt;为什么有效【个人补充】&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;时间维度&lt;/strong&gt;：动画能一步步展示过程（算法的每一步、数据怎么流动），这是静态图做不到的。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;双通道&lt;/strong&gt;：画面 + 旁白同时进入，适合抽象、数学化的概念（3Blue1Brown 风格正是以此著称）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;门槛在快速下降&lt;/strong&gt;：模型能写动画代码（例如 3b1b 开源的 Manim 库），再调用 TTS 合成配音、拼成视频。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Prompt 模板&lt;/h3&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;Create a 3Blue1Brown-style explainer video on &amp;lt;topic&amp;gt;, about 2–3 minutes.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;1. Write a narration script first (short sentences) and show it to me for approval.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;2. Then write Manim (Python) code for the animation, one scene per script section.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;3. For narration, use &amp;lt;ElevenLabs with my API key | a free local TTS model you recommend&amp;gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;4. Combine audio and video with ffmpeg. Give me the exact commands to run.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;为 &amp;lt;主题&amp;gt; 做一个 3Blue1Brown 风格的讲解视频，约 2–3 分钟：&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;1. 先写旁白脚本（短句），给我确认；&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;2. 再用 Manim（Python）写动画，每段脚本对应一个场景；&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;3. 配音使用 &amp;lt;我的 ElevenLabs API Key | 你推荐的本地免费 TTS&amp;gt;；&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;4. 用 ffmpeg 合成音视频，并给出可直接运行的命令。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;怎么选：按内容类型挑输出格式【个人补充】&lt;/h2&gt;
&lt;p&gt;阶梯是“越往上越好”，但不是每次都要爬到顶。成本、审阅速度和内容形状都要考虑：&lt;/p&gt;
&lt;div&gt;
&lt;span&gt;图 2 · 按内容类型选择输出格式&lt;/span&gt;
&lt;div&gt;&lt;span&gt;要理解的内容&lt;/span&gt;&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;是操作步骤 / 结论 / 规格？&lt;/span&gt;&lt;span&gt;&lt;span&gt;是&lt;/span&gt;&lt;/span&gt;&lt;span&gt;① ASD-STE100 风格文字&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;否&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;核心是结构 / 依赖 / 时序？&lt;/span&gt;&lt;span&gt;&lt;span&gt;是&lt;/span&gt;&lt;/span&gt;&lt;span&gt;② Mermaid / 图&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;否&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;需要调参数、对比或探索？&lt;/span&gt;&lt;span&gt;&lt;span&gt;是&lt;/span&gt;&lt;/span&gt;&lt;span&gt;③ 单文件 HTML&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;否&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;是抽象过程，且值得反复看或分享？&lt;/span&gt;&lt;span&gt;&lt;span&gt;是&lt;/span&gt;&lt;/span&gt;&lt;span&gt;④ 讲解视频&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;否&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;都不是&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;① 文字即可&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;无论选哪种：保留原文对照，核对关键结论&lt;/div&gt;
&lt;/div&gt;
&lt;hr /&gt;
&lt;h2&gt;注意事项【个人补充】&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;保留原文对照&lt;/strong&gt;。改写、画图、做网页都是“有损翻译”；把原始输出（日志、diff、原文）放在旁边，遇到疑问回到原文。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;术语和条件不能丢&lt;/strong&gt;。简化最容易误伤的是限定条件（“仅在……时”“除非……”）和专有术语；在 prompt 里明确要求原样保留。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;承重结论必须核实&lt;/strong&gt;。任何你要据此做决定的数字、因果、结论，回到源头验证；模型会为了“讲清楚”而补全它并不知道的细节（见上面的 Before/After 例子）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;隐私与托管 TTS&lt;/strong&gt;。把内部代码、文档的讲解稿发给 ElevenLabs 这类托管服务，等于把内容交给第三方；敏感材料用本地 TTS，API Key 不要写进脚本或提交进仓库。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用完即弃，别维护&lt;/strong&gt;。这些制品的价值在“这一次理解”；需要长期留存的，再整理成正式文档。&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2&gt;背后的“为什么”：监督循环&lt;/h2&gt;
&lt;p&gt;把上面串起来，就是 Karpathy 所说的“人的工作上移到监督与理解”的一个具体闭环：&lt;/p&gt;
&lt;div&gt;
&lt;span&gt;图 3 · 监督循环&lt;/span&gt;
&lt;div&gt;&lt;span&gt;Agent 完成工作&lt;small&gt;代码、分析、报告&lt;/small&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;人请求可读制品&lt;small&gt;摘要、图、网页、视频&lt;/small&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;人审阅&lt;small&gt;对照原文、核对结论&lt;/small&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;符合预期？&lt;/span&gt;&lt;span&gt;&lt;span&gt;是&lt;/span&gt;&lt;/span&gt;&lt;span&gt;接受 / 合并&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;否&lt;/span&gt; → 人给出具体纠正 → 回到「Agent 完成工作」&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;关键在 B：&lt;strong&gt;不是去读 agent 的原始产出，而是让它为你生成一个“专门用来理解”的制品&lt;/strong&gt;——而这种制品现在已经便宜到可以每次都做一个。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;How I use LLMs：Karpathy 的日常工作流&lt;/h2&gt;
&lt;p&gt;视频 &lt;a href=&quot;https://www.youtube.com/watch?v=EWvNQjAaOHw&quot;&gt;How I use LLMs&lt;/a&gt;（2025-02-27）是一份面向大众的实用指南。以下要点均能在视频中找到对应内容：&lt;/p&gt;
&lt;div&gt;
&lt;span&gt;图 4 · Karpathy 的日常 LLM 工作流&lt;/span&gt;
&lt;div&gt;&lt;span&gt;新话题 / 新问题&lt;/span&gt;&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span&gt;开一个新对话&lt;small&gt;清空上下文&lt;/small&gt;&lt;/span&gt;&lt;div&gt;&lt;span&gt;按任务难度选模型&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;快速模型&lt;small&gt;简单问答、写作&lt;/small&gt;&lt;/span&gt;&lt;span&gt;Thinking 推理模型&lt;small&gt;数学、代码、复杂推理&lt;/small&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;需要外部信息或计算？&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;联网搜索 / Deep Research&lt;small&gt;最新信息&lt;/small&gt;&lt;/span&gt;&lt;span&gt;代码解释器（Python）&lt;small&gt;计算、数据分析&lt;/small&gt;&lt;/span&gt;&lt;span&gt;上传原文&lt;small&gt;文档、论文、书&lt;/small&gt;&lt;/span&gt;&lt;span&gt;直接回答&lt;small&gt;不需要工具&lt;/small&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span&gt;核对&lt;small&gt;读代码、看来源、查关键数字&lt;/small&gt;&lt;/span&gt;&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;是重要决定吗？&lt;/span&gt;&lt;span&gt;&lt;span&gt;是&lt;/span&gt;&lt;/span&gt;&lt;span&gt;LLM Council：问多个模型对照&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;否&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span&gt;完成&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;1. 一个话题开一个新对话&lt;/h3&gt;
&lt;p&gt;上下文窗口是模型的“工作记忆”。换话题时开新对话，把 token 清零。原因有二：大量无关 token 会&lt;strong&gt;分散模型注意力&lt;/strong&gt;、降低准确度；token 越多，生成也&lt;strong&gt;越慢、越贵&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;实践【个人补充】：长任务做到一半感觉模型“变笨”，先让它总结当前进度，再把总结贴进新对话继续。&lt;/p&gt;
&lt;h3&gt;2. 按任务选模型，并知道自己在用哪个&lt;/h3&gt;
&lt;p&gt;不同档位、不同厂商的模型能力差别很大（他特别提醒免费档往往是更小的模型）。&lt;strong&gt;简单问题用普通模型&lt;/strong&gt;，&lt;strong&gt;数学、代码、复杂推理用 thinking 模型&lt;/strong&gt;——它们会“想”更久，难题上更准；简单问题则没必要。&lt;/p&gt;
&lt;h3&gt;3. 用工具，而不是让模型“心算”&lt;/h3&gt;
&lt;p&gt;模型本身只是“一个 zip 文件”，没有计算器、没有浏览器。所以：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;需要&lt;strong&gt;最新信息&lt;/strong&gt;时，用带搜索的模型或 Deep Research，并去看引用来源；&lt;/li&gt;
&lt;li&gt;需要&lt;strong&gt;计算 / 数据分析&lt;/strong&gt;时，让它写代码并在解释器里运行。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;视频里有个例子：他让 ChatGPT 拟合估值趋势外推到 2030 年，模型嘴上说约 1.7 万亿，但代码里实际算出来的变量约 20 万亿——两者不一致。他的结论是：&lt;strong&gt;一定要读它写的代码、核对结果&lt;/strong&gt;。&lt;/p&gt;
&lt;h3&gt;4. 把上下文直接给它&lt;/h3&gt;
&lt;p&gt;读论文、读书时，&lt;strong&gt;把原文上传进上下文&lt;/strong&gt;，再一起读、让它解释、回答问题，而不是指望模型凭训练记忆回答。&lt;/p&gt;
&lt;h3&gt;5. 记忆与自定义指令&lt;/h3&gt;
&lt;p&gt;ChatGPT 等产品可以在对话间记住关于你的信息（memory），也可以在设置里写 &lt;strong&gt;custom instructions&lt;/strong&gt;（例如希望的语气、你的背景），对所有对话全局生效，省去每次重复说明。&lt;/p&gt;
&lt;h3&gt;6. LLM Council：多个模型一起问&lt;/h3&gt;
&lt;p&gt;他会订阅多家模型，把&lt;strong&gt;同一个问题问所有模型&lt;/strong&gt;，称之为自己的“&lt;strong&gt;LLM Council&lt;/strong&gt;”（例如决定去哪度假时）。后来他把这个思路做成了开源项目 &lt;a href=&quot;https://github.com/karpathy/llm-council&quot;&gt;llm-council&lt;/a&gt;：多个模型分别作答、互相评审，再由一个“主席”模型汇总。&lt;/p&gt;
&lt;h3&gt;7. 其他他提到的用法（简列）&lt;/h3&gt;
&lt;p&gt;语音输入与原生语音对话（Advanced Voice Mode）、NotebookLM 把资料生成播客、在 Cursor 这类编辑器里写代码、用 Claude Artifacts 生成小应用（如抽认卡）。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;小结&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;问题&lt;/strong&gt;：agent 产出越来越多，人的瓶颈变成“读懂与监督”。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;方法&lt;/strong&gt;：让 LLM 用更易懂的形式输出——受控英语 → 图 → 网页 → 视频，按内容挑选。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;底线&lt;/strong&gt;：保留原文、保住术语和条件、核实承重结论、注意隐私。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;日常&lt;/strong&gt;：新话题新对话、按任务选模型、用工具不心算、给足上下文、善用记忆、重要问题开“议会”。&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>AI 中转站到底在干什么？我读了 Sub2API、AIClient2API、OneAPI 和 NewAPI 的源码</title><link>https://tangwin.github.io/blog/blog/ai-relay-architecture/</link><guid isPermaLink="true">https://tangwin.github.io/blog/blog/ai-relay-architecture/</guid><description>四个开源中转项目对外都是同一套 OpenAI 兼容接口，背后拿去调上游的东西却分成三种，厂商 API Key、订阅账号的登录态、模拟官方客户端。我把它们的源码对着读了一遍，讲清楚请求怎么走、风险落在哪，以及想自建一个信得过的中转该抄哪部分。</description><pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;
这几个中转站对外长得一模一样，都是 OpenAI 兼容接口。差别在上游。OneAPI 和 NewAPI 拿的是厂商发的 API Key，Sub2API 拿的是订阅账号的登录态，AIClient2API 干脆把请求伪装成官方客户端发出去。风险几乎都出在凭据放在哪、出站请求由谁发、有没有闭源插件和指纹伪装。我要是自建，骨架照 OneAPI 来，另外两个项目当调度和协议转换的参考书读。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;中转站这东西，用大模型的人多半碰过。对方给你一个 &lt;code&gt;sk-xxx&lt;/code&gt; 和一个 Base URL，接口跟 OpenAI 一样，价格便宜一截，Claude 和 Gemini 也能调。&lt;/p&gt;
&lt;p&gt;我一直不太放心。prompt 和代码都要从它那里过，钱也押在它那里。它的上游能力从哪来，凭据怎么存，哪天出了问题会不会悄悄换一个别人的号给我用，这些我都不知道。&lt;/p&gt;
&lt;p&gt;想自己搭一个之前，我先把几个主流开源实现读了一遍。主角是 &lt;a href=&quot;https://github.com/Wei-Shaw/sub2api&quot;&gt;Sub2API&lt;/a&gt; 和 &lt;a href=&quot;https://github.com/justlovemaki/AIClient2API&quot;&gt;AIClient2API&lt;/a&gt;（下文简称 A2），对照组是老牌的 &lt;a href=&quot;https://github.com/songquanpeng/one-api&quot;&gt;OneAPI&lt;/a&gt; 和它的增强分支 &lt;a href=&quot;https://github.com/QuantumNous/new-api&quot;&gt;NewAPI&lt;/a&gt;。这篇只聊架构和风险，盗号、绕过订阅条款、倒卖额度这些不碰。&lt;/p&gt;
&lt;p&gt;先交代两个词。中转站就是一个 HTTP 服务，对下游露出跟 OpenAI 一样的接口，比如 &lt;code&gt;/v1/chat/completions&lt;/code&gt;，再把请求转给真正提供模型的那一方，也就是上游。上游凭据是中转站拿去调上游用的东西，可能是厂商发的 API Key，也可能是某个账号的登录 token 或 cookie。几个项目性质上的差别，基本都落在这一项上。&lt;/p&gt;
&lt;h2&gt;一个中转站大致分六层&lt;/h2&gt;
&lt;p&gt;四个项目拆开来，层次差不多。&lt;/p&gt;
&lt;div&gt;
&lt;span&gt;图 1 · 中转站的六层，从下游请求进来到上游返回&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;&lt;b&gt;接入面&lt;/b&gt;&lt;span&gt;露出 /v1/chat/completions 这类兼容接口，支持 SSE 流式返回&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;下游鉴权&lt;/b&gt;&lt;span&gt;校验用户带来的 API Key 或 Bearer token&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;调度&lt;/b&gt;&lt;span&gt;这次请求用上游哪个 Key、哪个账号，涉及粘性、权重、健康检查和失败切换&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;协议适配&lt;/b&gt;&lt;span&gt;在 OpenAI、Claude、Gemini 和厂商私有协议之间互转&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;计量&lt;/b&gt;&lt;span&gt;统计 token，先预扣再实扣，按倍率计费&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;管理面&lt;/b&gt;&lt;span&gt;后台里的账号、分组、用户、支付和看板&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;上面两层和下面两层，各家写法大同小异。决定一个项目是什么性质的，是调度那一层手里攥着什么，也就是上游凭据的来路。&lt;/p&gt;
&lt;h2&gt;同样的外壳，三种上游&lt;/h2&gt;
&lt;p&gt;读完代码，我觉得全文最要紧的就是下面这张图。&lt;/p&gt;
&lt;div&gt;
&lt;span&gt;图 2 · 同一个 OpenAI 兼容外壳，三种上游&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;① Key 转发&lt;/span&gt;&lt;b&gt;OneAPI 和 NewAPI&lt;/b&gt;&lt;span&gt;上游拿的是厂商或代理商发的 &lt;b&gt;API Key&lt;/b&gt;&lt;/span&gt;&lt;span&gt;改一改 URL、请求头和请求体，调用公开的 HTTP API&lt;/span&gt;&lt;span&gt;风险最低，走的都是官方写进文档的接口&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;② 订阅账号池&lt;/span&gt;&lt;b&gt;Sub2API&lt;/b&gt;&lt;span&gt;上游拿的是订阅账号的 &lt;b&gt;OAuth 登录态&lt;/b&gt;&lt;/span&gt;&lt;span&gt;在一池账号里挑一个，用它的身份去打上游&lt;/span&gt;&lt;span&gt;可能违反上游服务条款，手里攥的凭据也多&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;③ 客户端模拟&lt;/span&gt;&lt;b&gt;AIClient2API&lt;/b&gt;&lt;span&gt;上游拿的是 &lt;b&gt;CLI、IDE 或浏览器&lt;/b&gt;里的登录态&lt;/span&gt;&lt;span&gt;把请求拼得像官方客户端，连 TLS 指纹都仿&lt;/span&gt;&lt;span&gt;风险最高，项目本来就是冲着模拟去的&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;网上聊中转站，常把这几个项目放在一起比。它们要解决的事各不相同，风险也差着量级。自建的话，我会先定用哪种模式，再去挑模块抄，三种混成一个模板只会越改越乱。&lt;/p&gt;
&lt;h2&gt;Sub2API，一套完整的订阅账号池网关&lt;/h2&gt;
&lt;p&gt;Sub2API 的定位写得很明白。平台给用户发 Key，自己拿一池订阅账号去调上游。它的 README 也自己承认了，这么做可能违反上游的服务条款，仅供学习。&lt;/p&gt;
&lt;p&gt;技术栈是写后端的人很熟的那一套。Go 和 Gin 处理 HTTP，Ent 做 ORM，Wire 做依赖注入，PostgreSQL 存数据，Redis 记会话粘性，前端用 Vue 3。支付是内置的，易支付、支付宝、微信、Stripe 都接了。插件系统基于 HashiCorp 的 go-plugin。&lt;/p&gt;
&lt;h3&gt;一次请求怎么走&lt;/h3&gt;
&lt;p&gt;拿 &lt;code&gt;POST /v1/chat/completions&lt;/code&gt; 举例。网关路由先看这把 API Key 属于哪个分组，再按分组的平台分流。走 OpenAI 兼容这条路时，顺序是这样的。&lt;/p&gt;
&lt;div&gt;
&lt;span&gt;图 3 · Sub2API 处理一次 chat/completions 请求&lt;/span&gt;
&lt;div&gt;&lt;span&gt;客户端&lt;/span&gt;&lt;span&gt;API Key 鉴权&lt;/span&gt;&lt;span&gt;Handler&lt;/span&gt;&lt;span&gt;Service&lt;/span&gt;&lt;span&gt;Redis&lt;/span&gt;&lt;span&gt;上游账号&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;客户端 → 鉴权&lt;/span&gt;&lt;span&gt;带着 Bearer sk-xxx 请求 chat/completions&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;鉴权&lt;/span&gt;&lt;span&gt;加载 Key、用户和分组，检查余额够不够&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;鉴权 → Handler&lt;/span&gt;&lt;span&gt;检查模型白名单，组合分组按模型路由到具体平台&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Handler → Service&lt;/span&gt;&lt;span&gt;算出会话 hash，后面靠它做粘性&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Service → Redis&lt;/span&gt;&lt;span&gt;同一个会话尽量落到同一个账号上&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Service&lt;/span&gt;&lt;span&gt;按优先级、RPM、时间窗口和利润控制挑账号&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Service → 上游账号&lt;/span&gt;&lt;span&gt;用账号身份转发，流式返回&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;上游 → 客户端&lt;/span&gt;&lt;span&gt;SSE 数据块原样流回去&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Service&lt;/span&gt;&lt;span&gt;异步记用量，扣配额&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;调度写得很扎实。粘性会话、分组白名单、按模型解析的组合分组、流式过程里的失败切换，结构都清楚，我会拿来学。&lt;/p&gt;
&lt;h3&gt;读完不放心的几处&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;上游凭据是明文 JSON。&lt;/strong&gt; 账号表里有一个 PostgreSQL 的 &lt;code&gt;jsonb&lt;/code&gt; 字段叫 credentials，API Key、OAuth token、cookie 都塞在里面。接口返回时会脱敏，可我在表结构和存储层都没找到落盘加密。数据库备份一旦泄露，所有上游账号会一起泄露。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;插件可以是闭源二进制。&lt;/strong&gt; 插件走 go-plugin 加 gRPC，打包格式允许夹带编译好的程序。主进程手里有真实的上游 Authorization，插件也没有关进操作系统级的沙箱。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;支付是内置的&lt;/strong&gt;，资金和更多密钥也跟着进了攻击面。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;代码里有一个专门的 TLS 指纹库&lt;/strong&gt;，用途是让出站流量更像官方客户端，合规和封号的风险都在这里。&lt;/li&gt;
&lt;li&gt;它的部署文档专门提醒过，信任转发 IP 的那个开关配错了，IP 白名单可以被伪造。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这些问题都是订阅账号池这个产品目标带出来的，我不觉得代码写得差。它是一个功能很全的商业中转样本，同时也是信任面最大的那一个。&lt;/p&gt;
&lt;h2&gt;AIClient2API，把只能在官方客户端里用的通道搬到本地&lt;/h2&gt;
&lt;p&gt;A2 走的是另一条路。有些模型能力只能在官方 CLI、IDE 插件或网页里用，A2 把这些客户端的请求方式模拟出来，在本机露出 OpenAI、Claude、Gemini 兼容的接口。&lt;/p&gt;
&lt;p&gt;它用纯 Node.js 写，没上 Express，直接 &lt;code&gt;http.createServer&lt;/code&gt;。架构里有几块值得单独说说。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Adapter&lt;/strong&gt;。每个上游一个适配器，生成内容、流式输出、列模型、刷新 token 这些动作都统一起来。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strategy 和 Converter&lt;/strong&gt;。先按下游协议取出模型名、判断是不是流式，再在 OpenAI、Claude、Gemini 三种格式之间转换请求、响应和流式数据块。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;凭据池&lt;/strong&gt;。给每个节点打分，看健康程度、最近有没有用过、当前并发多少，出错就换一个。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TLS sidecar&lt;/strong&gt;。一个 Go 写的小服务，用 utls 库把 TLS 握手伪装成 Chrome，默认监听 9090 端口。&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span&gt;图 4 · AIClient2API 怎样把一次请求变成像官方客户端的流量&lt;/span&gt;
&lt;div&gt;&lt;span&gt;OpenAI 格式请求&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;按路径首段选上游&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;校验入站 Key&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;凭据池打分选节点&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;协议转换&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;拼客户端请求头和 OAuth&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;经 TLS sidecar 发出&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;转回 OpenAI 的 SSE&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;出错时把节点标成不健康，换一个凭据重试。认证错误默认最多换 5 次，累计 10 次错误就标记为不健康&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;协议转换和凭据池是我觉得 A2 最值得读的两块。分层干净，接一个新上游只需要补一个 Adapter 和对应的实现。&lt;/p&gt;
&lt;h3&gt;弱点和风险&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;登录态直接落盘&lt;/strong&gt;，OAuth token 和 cookie 存在配置目录和用户家目录里。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;源码里写死了公开的 OAuth client 身份。&lt;/strong&gt; 已安装的客户端应用这么干很常见，但它终归是一个写死的固定身份。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;它的设计目标就是模拟客户端&lt;/strong&gt;，调用的也不是写进文档的公开 API。服务条款和封号风险跟着设计来，配置改不掉。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;默认管理密码是 &lt;code&gt;admin123&lt;/code&gt;。&lt;/strong&gt; 部署时不改，等于没设。&lt;/li&gt;
&lt;li&gt;TLS sidecar 对 Node 主进程来说，是一条看不太清的出站通道。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;四个项目放一起比&lt;/h2&gt;
&lt;div&gt;
&lt;span&gt;表 · 四个开源中转项目对比，窄屏可以左右滑动&lt;/span&gt;
&lt;div&gt;
&lt;table&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;OneAPI&lt;/th&gt;&lt;th&gt;NewAPI&lt;/th&gt;&lt;th&gt;Sub2API&lt;/th&gt;&lt;th&gt;AIClient2API&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;定位&lt;/th&gt;&lt;td&gt;API Key 聚合转发&lt;/td&gt;&lt;td&gt;OneAPI 增强版，网关加资产管理&lt;/td&gt;&lt;td&gt;订阅账号配额分发&lt;/td&gt;&lt;td&gt;把客户端通道变成本地兼容 API&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;许可证&lt;/th&gt;&lt;td&gt;MIT&lt;/td&gt;&lt;td&gt;AGPL-3.0&lt;/td&gt;&lt;td&gt;LGPL-3.0&lt;/td&gt;&lt;td&gt;GPL-3.0&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;技术栈&lt;/th&gt;&lt;td&gt;Go 和 Gin&lt;/td&gt;&lt;td&gt;Go 和 Gin&lt;/td&gt;&lt;td&gt;Go、Gin、Ent、Vue&lt;/td&gt;&lt;td&gt;Node.js 原生 http&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;上游凭据&lt;/th&gt;&lt;td&gt;厂商 API Key&lt;/td&gt;&lt;td&gt;API Key，部分渠道支持 OAuth&lt;/td&gt;&lt;td&gt;订阅账号 OAuth&lt;/td&gt;&lt;td&gt;CLI、IDE、浏览器登录态&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;适配方式&lt;/th&gt;&lt;td&gt;统一的 Adaptor 接口&lt;/td&gt;&lt;td&gt;渠道加跨协议转换&lt;/td&gt;&lt;td&gt;账号调度加协议转换&lt;/td&gt;&lt;td&gt;Adapter、Strategy、Converter&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;计费&lt;/th&gt;&lt;td&gt;额度乘倍率&lt;/td&gt;&lt;td&gt;钱包、套餐、阶梯、缓存计费&lt;/td&gt;&lt;td&gt;账号配额切分，用户余额和支付&lt;/td&gt;&lt;td&gt;偏个人用，多租户弱&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;怎么选上游&lt;/th&gt;&lt;td&gt;分组、模型、渠道三者匹配&lt;/td&gt;&lt;td&gt;更复杂的亲和与插件过滤&lt;/td&gt;&lt;td&gt;粘性、负载、RPM、利润&lt;/td&gt;&lt;td&gt;凭据池打分加失败切换&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;OneAPI 的核心是一个 Adaptor 接口，里面就是拼请求地址、设请求头、转换请求体、发请求、解析响应这几个方法，每个厂商一个目录去实现。这是我读到的最老实的设计，上游是谁、请求怎么改，打开就能看懂。&lt;/p&gt;
&lt;p&gt;还有两个地方容易搞混。NewAPI 里说的订阅计费，指的是用户买套餐，跟 Sub2API 那种上游订阅账号池没关系。NewAPI 甚至专门做了一个 Sub2API 渠道，可以把 Sub2API 当成一种上游接进来。Key 网关和订阅池能一层套一层，你调用的中转背后，可能还是一个中转。&lt;/p&gt;
&lt;h2&gt;要是我自己搭&lt;/h2&gt;
&lt;p&gt;我要的是自己信得过、能审计的东西，所以内核刻意做小。&lt;/p&gt;
&lt;div&gt;
&lt;span&gt;图 5 · 自建可信中转，做哪些，不做哪些&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;要做&lt;/span&gt;&lt;span&gt;只用 ① Key 转发模式&lt;/span&gt;&lt;span&gt;OpenAI 兼容接口加流式，行为能测&lt;/span&gt;&lt;span&gt;下游 Key 自己签，不留弱默认值，支持 IP 白名单&lt;/span&gt;&lt;span&gt;上游 Key 落盘加密，或者交给系统密钥链&lt;/span&gt;&lt;span&gt;每个厂商一个 Adaptor 文件，不动态加载闭源代码&lt;/span&gt;&lt;span&gt;日志结构化并脱敏，每个请求带 trace id，用量落库&lt;/span&gt;&lt;span&gt;超时写死，重试有上限，&lt;b&gt;绝不悄悄换到别人的账号&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;先不做&lt;/span&gt;&lt;span&gt;订阅 OAuth 池、cookie 池、TLS 指纹伪装&lt;/span&gt;&lt;span&gt;多租户充值、支付、拼车分账&lt;/span&gt;&lt;span&gt;让插件执行用户代码&lt;/span&gt;&lt;span&gt;自动模拟最新版官方客户端&lt;/span&gt;&lt;span&gt;开放注册&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;从这几个项目里挑东西，我的取舍是这样的。&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;项目&lt;/th&gt;&lt;th&gt;学什么&lt;/th&gt;&lt;th&gt;别照搬什么&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;OneAPI 和 NewAPI&lt;/td&gt;&lt;td&gt;Adaptor 接口、选渠道、先预扣再结算的计费&lt;/td&gt;&lt;td&gt;把整站直接拿去当商用中转运营&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Sub2API&lt;/td&gt;&lt;td&gt;粘性会话、分组白名单、组合分组路由、流式失败切换&lt;/td&gt;&lt;td&gt;明文凭据、闭源插件、内置支付、客户端指纹&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AIClient2API&lt;/td&gt;&lt;td&gt;Strategy 和 Converter 的分层、凭据池打分与切换&lt;/td&gt;&lt;td&gt;TLS 伪装、写死的客户端身份、默认弱口令&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;接下来我打算先画一页 Key 转发最小内核的架构图，只接一个合规上游，把流式跑通。协议转换和多 Key 负载均衡留到第二步。&lt;/p&gt;
&lt;h2&gt;还没弄清楚的&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Sub2API 有没有我没搜到的字段级加密或 KMS 方案。&lt;/li&gt;
&lt;li&gt;Sub2API 官方的 Docker 镜像里，会不会默认带着没开源的插件。&lt;/li&gt;
&lt;li&gt;我读的那一版 A2 里，Gemini CLI 适配器的注册被注释掉了，原因我没查到。README 里写的支持情况，用之前最好自己试一下。&lt;/li&gt;
&lt;li&gt;NewAPI 的插件执行那部分，我没有按安全审计的标准去读。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;最后几句&lt;/h2&gt;
&lt;p&gt;只是&lt;strong&gt;用&lt;/strong&gt;中转站的话，先问清楚它属于哪种模式。Key 转发之外的两种，意味着你的请求跑在别人的账号上，稳定性和合规都没人担保。&lt;/p&gt;
&lt;p&gt;想&lt;strong&gt;自建&lt;/strong&gt;的话，从 OneAPI 的 Adaptor 骨架起步，只接官方 Key，先把凭据存储和日志脱敏做对。Sub2API 和 A2 很值得读，拿它们学调度和协议转换就好，原样上线我不建议。&lt;/p&gt;</content:encoded></item><item><title>核心很小，能力挂在边上。我读 Hermes Agent 和 Agent Skills 规范的笔记</title><link>https://tangwin.github.io/blog/blog/hermes-agent-skills/</link><guid isPermaLink="true">https://tangwin.github.io/blog/blog/hermes-agent-skills/</guid><description>Hermes Agent 让命令行、终端界面、消息机器人和定时任务共用一个对话循环，能力都挂在边上。Agent Skills 是 Claude Code、Cursor、Hermes 都认的技能文件夹规范。我把两边的代码和规范读了一遍，记下它们怎么工作、哪里设计得好，以及哪些东西别当成安全边界。</description><pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;
Hermes Agent 的核心就一个对话循环，命令行、终端界面、聊天机器人网关和定时任务都调它。新能力尽量做成技能、插件或 MCP 挂在外面，核心不动。Agent Skills 这个开放规范简单得有点意外，一个文件夹加一个 &lt;code&gt;SKILL.md&lt;/code&gt;，启动时只加载名字和描述，用到了才读全文。Hermes 在上面多做了一层，让 Agent 自己写技能，后台再自动整理。这个想法我觉得很有意思，用的话要打开审批。另外，它的终端隔离和审批都算不上安全边界。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;为什么要读这个&lt;/h2&gt;
&lt;p&gt;我在自己的环境里跑 Hermes Agent，把它接进了元宝群当机器人。接入时踩过一个坑，机器人能被 @ 到，就是不回话。最后查下来是群访问策略和多 profile 下的密钥作用域问题。&lt;/p&gt;
&lt;p&gt;修好之后，我还有两件事想弄明白。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;一条群消息从进来到交给模型，中间到底过了哪些环节？&lt;/li&gt;
&lt;li&gt;Hermes 说自己支持 Agent Skills，还能自己写技能。这里的技能是什么东西，跟 Claude Code、Cursor 里的 skills 是一回事吗？&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;于是我把 &lt;a href=&quot;https://github.com/NousResearch/hermes-agent&quot;&gt;Hermes Agent&lt;/a&gt; 的源码和 &lt;a href=&quot;https://agentskills.io&quot;&gt;Agent Skills&lt;/a&gt; 的规范对着读了一遍。&lt;/p&gt;
&lt;p&gt;先说清楚几个词。Agent 指能多轮调用工具来完成任务的大模型程序，工具包括读文件、跑命令、搜索这些。对话循环是 Agent 的主流程，先调模型，模型要用工具就去执行，把结果塞回对话再调模型，一直转到模型给出最终回答。Skill 也叫技能，是一份写给 Agent 看的操作说明，告诉它某类任务怎么做，可以附带脚本。&lt;/p&gt;
&lt;h2&gt;一、Hermes 长什么样&lt;/h2&gt;
&lt;p&gt;Hermes 仓库根目录有一份给开发者看的设计说明，里面有两条原则。整个项目为什么长成现在这样，从这两条差不多都能推出来。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;按会话的 prompt cache 不能乱动。&lt;/strong&gt; 长对话会复用缓存，中途重建 system prompt 会让缓存失效，成本成倍往上涨。技能、工具、记忆这些会改 system prompt 的东西，都得照顾缓存。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;核心做成窄腰，能力放在边上。&lt;/strong&gt; 新渠道、新模型、新能力，优先做成边缘扩展，尽量不往核心循环里塞。&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;span&gt;图 1 · Hermes 的窄腰，入口很多，核心一个，能力在边上&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;命令行 CLI&lt;/span&gt;&lt;span&gt;终端界面 TUI&lt;/span&gt;&lt;span&gt;消息网关&lt;/span&gt;&lt;span&gt;定时任务&lt;/span&gt;&lt;span&gt;桌面端&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;都调用同一个&lt;/span&gt;&lt;/div&gt;
&lt;span&gt;AIAgent 对话循环&lt;/span&gt;
&lt;div&gt;&lt;span&gt;按需调用&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Skills 技能&lt;/span&gt;&lt;span&gt;工具注册表&lt;/span&gt;&lt;span&gt;插件和 MCP&lt;/span&gt;&lt;span&gt;记忆&lt;/span&gt;&lt;span&gt;终端后端&lt;small&gt;7 种&lt;/small&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这个形状我很认同。反面的例子大家都见过，每接一个新渠道就在核心里加一堆 if，最后谁都不敢碰。Hermes 把入口和能力都推到了边上，中间只留一个循环。&lt;/p&gt;
&lt;p&gt;技术栈方面，Python 支持 3.11 到 3.13，依赖用 &lt;code&gt;uv&lt;/code&gt; 管。终端界面是 React 加 Ink 写的，配置用 YAML，密钥放在 &lt;code&gt;.env&lt;/code&gt;。&lt;/p&gt;
&lt;h2&gt;二、在命令行里问一句话，后面发生了什么&lt;/h2&gt;
&lt;div&gt;
&lt;span&gt;图 2 · 命令行里一轮对话的完整路径&lt;/span&gt;
&lt;div&gt;&lt;span&gt;用户&lt;/span&gt;&lt;span&gt;HermesCLI&lt;/span&gt;&lt;span&gt;AIAgent&lt;/span&gt;&lt;span&gt;对话循环&lt;/span&gt;&lt;span&gt;工具执行&lt;/span&gt;&lt;span&gt;模型&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;用户 → CLI&lt;/span&gt;&lt;span&gt;输入一句话或斜杠命令&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;CLI → AIAgent&lt;/span&gt;&lt;span&gt;把这句话交给 AIAgent 开始一轮对话&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;AIAgent → 循环&lt;/span&gt;&lt;span&gt;先拿到本轮的执行租约 turn lease&lt;/span&gt;&lt;/div&gt;
&lt;span&gt;↻ 在预算内反复&lt;/span&gt;
&lt;div&gt;&lt;span&gt;循环 → 模型&lt;/span&gt;&lt;span&gt;发送对话历史&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;循环 → 工具&lt;/span&gt;&lt;span&gt;模型要用工具，就去执行对应的工具调用&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;工具 → 循环&lt;/span&gt;&lt;span&gt;工具结果追加进对话，再问模型&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;循环 → CLI&lt;/span&gt;&lt;span&gt;模型不再调工具，返回最终回答，可以流式输出&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;终端界面走的也是这条路。前端通过 JSON-RPC 连到后端，后端还是同一个 AIAgent，消息网关和定时任务同样如此。窄腰落到代码里就是这个样子，不管从哪个入口进来，最后都进这一个循环。&lt;/p&gt;
&lt;h2&gt;三、一条群消息怎么走到模型&lt;/h2&gt;
&lt;p&gt;这部分我最关心。通用的消息平台，比如 Telegram，是以插件形式接进来的，收到消息后交给网关统一处理，依次过前置钩子、鉴权、配对和媒体处理，再进对话循环。&lt;/p&gt;
&lt;p&gt;元宝是内置平台里中间件最完整的一个。一条消息要按顺序过下面这些中间件。&lt;/p&gt;
&lt;div&gt;
&lt;span&gt;图 3 · 元宝入站中间件管线，标红的两步决定机器人回不回话&lt;/span&gt;
&lt;div&gt;&lt;span&gt;解码&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;提取字段&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;撤回检查&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;去重&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;跳过自己&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;会话路由&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;访问控制 AccessGuard&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;提取内容&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;主人命令&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;构建来源&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;群 @ 检查 GroupAtGuard&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;发言人标注&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;媒体解析&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;分发给 Agent&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;标红的两步，我当时查问题时盯得最久。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;访问控制。&lt;/strong&gt; 私聊和群聊各有一套策略，可选白名单、配对、开放或禁用。想设成开放，还得额外配一个环境变量，比如 &lt;code&gt;YUANBAO_ALLOW_ALL_USERS&lt;/code&gt;。条件不满足，消息会被&lt;strong&gt;静默丢弃&lt;/strong&gt;，不报任何错。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;群 @ 检查。&lt;/strong&gt; 群里没有 @ 机器人的消息只会被观察，记进上下文，不会触发回复。日志里能看到 &lt;code&gt;Group message observed (no @bot)&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这套管线我很喜欢。每一步只做一件事，每一步都能打日志。机器人不回话的时候，看日志停在哪一步，基本就知道问题在哪。&lt;/p&gt;
&lt;h2&gt;四、一个进程里跑多个机器人&lt;/h2&gt;
&lt;p&gt;Hermes 有 &lt;strong&gt;profile&lt;/strong&gt; 的概念。每个 profile 是一个独立目录，默认放在 &lt;code&gt;~/.hermes/profiles/&amp;lt;name&amp;gt;/&lt;/code&gt; 下面，有自己的配置、&lt;code&gt;.env&lt;/code&gt;、技能和会话数据库，彼此不继承。&lt;/p&gt;
&lt;p&gt;网关打开 &lt;code&gt;multiplex_profiles&lt;/code&gt; 之后，&lt;strong&gt;一个进程可以同时服务多个 profile&lt;/strong&gt;，比如在一个群里挂好几个不同人设的机器人。&lt;/p&gt;
&lt;p&gt;这里有个坑。多路复用时，进程的环境变量通常属于默认 profile，副 profile 的白名单、允许所有人这类配置，要靠专门的密钥作用域模块按 profile 去读。这个模块是 &lt;strong&gt;fail-closed&lt;/strong&gt; 的，读不到就直接失败，不会退回去借默认 profile 的配置。&lt;/p&gt;
&lt;p&gt;这个选择我觉得对。宁可不回话，也不能把 A 机器人的权限借给 B。代价是配置一旦写错，表现就是静默不工作，只能翻日志排查。&lt;/p&gt;
&lt;h2&gt;五、终端隔离别当成安全边界&lt;/h2&gt;
&lt;p&gt;Hermes 支持 7 种终端后端，分别是 &lt;code&gt;local&lt;/code&gt;、&lt;code&gt;docker&lt;/code&gt;、&lt;code&gt;singularity&lt;/code&gt;、&lt;code&gt;modal&lt;/code&gt;、&lt;code&gt;daytona&lt;/code&gt;、&lt;code&gt;vercel_sandbox&lt;/code&gt; 和 &lt;code&gt;ssh&lt;/code&gt;。默认的 &lt;code&gt;local&lt;/code&gt; 直接在本机执行，&lt;strong&gt;没有任何操作系统级的边界&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;项目的安全说明写得很坦白。终端后端只管得住 shell 和文件类工具，进程内的代码执行、MCP 子进程、插件、技能里的 import 都不归它管。审批门控也只是启发式判断，算不上安全边界。要隔离，得把整个 Hermes 进程放进容器。&lt;/p&gt;
&lt;p&gt;Hermes 一旦接进群聊这种别人也能发消息的地方，这一条就得认真对待。&lt;/p&gt;
&lt;h2&gt;六、Agent Skills，一个简单得有点意外的规范&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://agentskills.io&quot;&gt;Agent Skills&lt;/a&gt; 是一个开放规范，Claude Code、Cursor、Hermes 都兼容。一个技能由这几样东西组成。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一个文件夹&lt;/li&gt;
&lt;li&gt;文件夹里必须有一个 &lt;code&gt;SKILL.md&lt;/code&gt;，开头是 YAML 头部，后面是 Markdown 正文&lt;/li&gt;
&lt;li&gt;可选的 &lt;code&gt;scripts/&lt;/code&gt;、&lt;code&gt;references/&lt;/code&gt;、&lt;code&gt;assets/&lt;/code&gt; 目录&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;头部只有两个必填字段。&lt;/p&gt;

















&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;字段&lt;/th&gt;&lt;th&gt;要求&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;name&lt;/code&gt;&lt;/td&gt;&lt;td&gt;最多 64 个字符，小写字母加连字符，最好和文件夹同名&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;&lt;td&gt;最多 1024 个字符，写清楚&lt;strong&gt;做什么、什么时候用&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;可选字段有 &lt;code&gt;license&lt;/code&gt;、&lt;code&gt;compatibility&lt;/code&gt;、&lt;code&gt;metadata&lt;/code&gt;，还有一个实验性的 &lt;code&gt;allowed-tools&lt;/code&gt;，用来预先批准技能可以用哪些工具。&lt;/p&gt;
&lt;p&gt;我觉得它设计得最巧的一点是&lt;strong&gt;渐进披露&lt;/strong&gt;，英文叫 progressive disclosure。&lt;/p&gt;
&lt;div&gt;
&lt;span&gt;图 4 · 渐进披露，需要时才把内容放进上下文&lt;/span&gt;
&lt;div&gt;&lt;span&gt;① 目录&lt;small&gt;启动时只加载 name 和 description，每个技能几十个 token&lt;/small&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;② 激活&lt;small&gt;任务匹配上了，才读完整的 SKILL.md&lt;/small&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;③ 资源&lt;small&gt;需要时再读脚本和参考文档&lt;/small&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;所以装几十个技能，平时也几乎不占上下文，跟前面那条别乱动 prompt cache 的原则也对得上。&lt;/p&gt;
&lt;p&gt;技能放在哪，规范没有硬性规定，由各个产品自己约定。想跨工具共用，项目级的放 &lt;code&gt;.agents/skills/&lt;/code&gt;，用户级的放 &lt;code&gt;~/.agents/skills/&lt;/code&gt;，同名时项目级优先。来自不信任仓库的技能，先审一遍再加载。&lt;/p&gt;
&lt;div&gt;
&lt;span&gt;表 · Claude Code、Cursor、Hermes 的技能实现，窄屏可以左右滑动&lt;/span&gt;
&lt;div&gt;
&lt;table&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Claude Code&lt;/th&gt;&lt;th&gt;Cursor&lt;/th&gt;&lt;th&gt;Hermes&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;技能目录&lt;/th&gt;&lt;td&gt;&lt;code&gt;~/.claude/skills/&lt;/code&gt;、&lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;.agents/&lt;/code&gt; 或 &lt;code&gt;.cursor/skills/&lt;/code&gt;，也会扫描 &lt;code&gt;.claude&lt;/code&gt;、&lt;code&gt;.codex&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;~/.hermes/skills/&lt;/code&gt;，项目目录要先信任，另有技能 Hub&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;扩展字段&lt;/th&gt;&lt;td&gt;&lt;code&gt;context: fork&lt;/code&gt;、&lt;code&gt;allowed-tools&lt;/code&gt;、动态命令等&lt;/td&gt;&lt;td&gt;&lt;code&gt;paths&lt;/code&gt; 等&lt;/td&gt;&lt;td&gt;&lt;code&gt;platforms&lt;/code&gt;、&lt;code&gt;metadata.hermes.*&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;特点&lt;/th&gt;&lt;td&gt;以人写为主，产品扩展多&lt;/td&gt;&lt;td&gt;monorepo 里可以按子目录生效&lt;/td&gt;&lt;td&gt;Agent 能自己写技能，后台自动整理&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;调用方式&lt;/th&gt;&lt;td&gt;Skill 工具或 &lt;code&gt;/技能名&lt;/code&gt;&lt;/td&gt;&lt;td&gt;自动匹配或 &lt;code&gt;/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;skills_list&lt;/code&gt; 再 &lt;code&gt;skill_view&lt;/code&gt;，或者斜杠命令&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;规范里的六个字段可以跨产品用。各家的私有字段，换个产品可能被忽略，也可能报错。想写一份到处都能用的技能，就只用规范字段，私有的放进 &lt;code&gt;metadata&lt;/code&gt; 下面自己的命名空间。&lt;/p&gt;
&lt;h2&gt;七、Hermes 的特别之处是 Agent 自己写技能&lt;/h2&gt;
&lt;p&gt;Hermes 跟另外两家最不一样的地方在这里。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;加载。&lt;/strong&gt; 技能靠 &lt;code&gt;skills_list&lt;/code&gt; 和 &lt;code&gt;skill_view&lt;/code&gt; 两个工具渐进加载。用斜杠命令调用技能时，技能内容作为一条&lt;strong&gt;用户消息&lt;/strong&gt;插进对话，system prompt 不动，还是为了保住缓存。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;自己写。&lt;/strong&gt; 做完一个复杂任务，Agent 可以用 &lt;code&gt;skill_manage&lt;/code&gt; 把这次的做法存成新技能。配置里有个 &lt;code&gt;skills.write_approval&lt;/code&gt;，打开后写技能之前要你点头。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Curator 整理器。&lt;/strong&gt; Agent 空闲时它会自动跑，按使用记录把技能在活跃、过期、归档三种状态之间挪，也可能合并或修补技能。它守几条硬规矩。只碰归它管的技能，内置技能默认也算在内，从 Hub 装的从不清理。它&lt;strong&gt;从不删除，只归档&lt;/strong&gt;，归档的还能恢复。被固定（pin）的技能它完全不碰。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;护栏。&lt;/strong&gt; 有一个 Skills Guard 做启发式检查，从 Hub 安装的技能会先进隔离区。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;让 Agent 自己写技能，好处坏处我都看得到。&lt;/p&gt;
&lt;div&gt;
&lt;span&gt;图 5 · 人写的技能和 Agent 自己写的技能&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;人写、可移植&lt;/span&gt;&lt;span&gt;能审计，能进 git，Cursor、Claude、Hermes 都能用&lt;/span&gt;&lt;span&gt;短处是更新慢，要有人维护&lt;/span&gt;&lt;span&gt;&lt;b&gt;适合&lt;/b&gt;核心操作流程，以及要发给别人用的技能&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Agent 自写&lt;/span&gt;&lt;span&gt;从真正做成过的事情里长出来，贴合个人习惯&lt;/span&gt;&lt;span&gt;短处是容易重复，半成品多。技能里既有指令又有脚本，等于多了一条供应链风险&lt;/span&gt;&lt;span&gt;&lt;b&gt;适合&lt;/b&gt;当个人的过程记忆用，记得打开 write_approval&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;还有一个伴生项目叫 &lt;a href=&quot;https://github.com/AMAP-ML/SkillClaw&quot;&gt;SkillClaw&lt;/a&gt;。任务进行中由 Hermes 写技能，任务结束后交给一个进化服务去重、提质，格式仍然是 &lt;code&gt;SKILL.md&lt;/code&gt;。它跟 Hermes 自带的 curator 同时开着时怎么分工，我还没实际验证过。&lt;/p&gt;
&lt;p&gt;装任何技能之前，我会按顺序过一遍。先看来源和 hash，再通读 &lt;code&gt;SKILL.md&lt;/code&gt;，检查 &lt;code&gt;scripts/&lt;/code&gt; 里有什么，看它要哪些权限、&lt;code&gt;allowed-tools&lt;/code&gt; 写了什么，确认项目已经被信任，最后先在沙箱里跑一次。这方面有一篇文章写得很好，&lt;a href=&quot;https://www.nyk.dev/blog/install-agent-skills-without-getting-owned&quot;&gt;Install agent skills without getting owned&lt;/a&gt;。&lt;/p&gt;
&lt;h2&gt;八、风险汇总&lt;/h2&gt;








































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;方面&lt;/th&gt;&lt;th&gt;风险&lt;/th&gt;&lt;th&gt;怎么控制&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;凭据&lt;/td&gt;&lt;td&gt;&lt;code&gt;.env&lt;/code&gt; 里的机器人 token 和模型 Key&lt;/td&gt;&lt;td&gt;&lt;code&gt;.env&lt;/code&gt; 只放密钥，多路复用时用密钥作用域，子进程清理环境变量&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;插件&lt;/td&gt;&lt;td&gt;和 Agent 进程权限相同&lt;/td&gt;&lt;td&gt;安装前人工审&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;网关&lt;/td&gt;&lt;td&gt;陌生人远程驱动你的 Agent&lt;/td&gt;&lt;td&gt;每个平台配白名单，缺白名单时默认拒绝&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;技能&lt;/td&gt;&lt;td&gt;import 和脚本可以执行任意代码&lt;/td&gt;&lt;td&gt;Skills Guard、隔离区、写入审批，curator 只归档不删&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;终端&lt;/td&gt;&lt;td&gt;&lt;code&gt;local&lt;/code&gt; 后端没有系统边界&lt;/td&gt;&lt;td&gt;换成 docker 等后端，要可靠隔离就把整个进程放进沙箱&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;审批&lt;/td&gt;&lt;td&gt;启发式判断&lt;/td&gt;&lt;td&gt;别当安全边界用&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;h2&gt;我还不确定的&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;curator 默认多久触发一次、阈值是多少，取决于配置，默认值我没逐项核对。&lt;/li&gt;
&lt;li&gt;其他消息平台插件的中间件是不是跟元宝同一套结构。Telegram 那条路明显薄很多。&lt;/li&gt;
&lt;li&gt;规范里实验性的 &lt;code&gt;allowed-tools&lt;/code&gt;，各家客户端支持得参差不齐。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;谁该关心，下一步做什么&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;自己在跑 Agent&lt;/strong&gt;，尤其是接进了群聊的，先确认终端后端不是裸的 &lt;code&gt;local&lt;/code&gt;，再确认每个平台都配了白名单。这两件事比任何提示词技巧都要紧。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;在写技能&lt;/strong&gt;的话，只用规范里的字段，放进 &lt;code&gt;.agents/skills/&lt;/code&gt;，Cursor、Claude Code、Hermes 都能用。描述字段里写清楚什么时候该用它，能不能被正确触发就看这一句。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;在设计自己的 Agent 系统&lt;/strong&gt;，Hermes 有几处做法值得照着学。一个核心循环挂多个入口。网关用中间件管线表达策略，每一层都能观测。多租户的密钥按作用域读，读不到就失败。&lt;/p&gt;
&lt;p&gt;我自己的下一步，是把手上的运维操作流程整理成几个人写的 &lt;code&gt;.agents/skills/&lt;/code&gt; 技能，让不同工具共用一份。&lt;/p&gt;</content:encoded></item><item><title>Java 后端复习：GitHub 高星中文资料精选</title><link>https://tangwin.github.io/blog/blog/java-backend-review-resources/</link><guid isPermaLink="true">https://tangwin.github.io/blog/blog/java-backend-review-resources/</guid><description>面向面试突击与中高级复习的 Java 后端资料清单：Java/JVM/并发、MySQL/Redis、Spring 源码、分布式/DDD，附学习顺序与两周冲刺计划。</description><pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;用途：面试突击 + 体系复习 + 中高级&lt;br /&gt;
主战场：Java/JVM/并发 · MySQL/Redis · Spring+源码 · 分布式/DDD&lt;br /&gt;
原则：中文仓为主；英文高星只附中文导读，不整仓翻译&lt;br /&gt;
整理日期：2026-09-08 · star 量为当时公开页量级，会变动&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr /&gt;
&lt;h2&gt;建议学习顺序&lt;/h2&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;① Java/JVM/并发（底座）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;→ ② MySQL + Redis（数据面）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;→ ③ Spring 全家桶 + 源码（框架面）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;            &lt;/span&gt;&lt;/span&gt;&lt;span&gt;→ ④ 分布式 / 系统设计 / DDD（架构面）&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;每天可用「八股过一遍 + 一章原理/源码」；场景题放到 ④ 与项目经历对齐。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;一、Java / JVM / 并发&lt;/h2&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;仓库&lt;/th&gt;&lt;th&gt;Star 量级&lt;/th&gt;&lt;th&gt;类型&lt;/th&gt;&lt;th&gt;怎么用&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/Snailclimb/JavaGuide&quot;&gt;Snailclimb/JavaGuide&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;~157k&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;合集型 · 持续维护&lt;/td&gt;&lt;td&gt;&lt;strong&gt;主阵地&lt;/strong&gt;。先啃 &lt;code&gt;docs/java/concurrent/*&lt;/code&gt;（并发上中下）+ &lt;code&gt;docs/java/jvm/*&lt;/code&gt;（内存区域、GC、类加载）。站点：&lt;a href=&quot;https://javaguide.cn&quot;&gt;https://javaguide.cn&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/CyC2018/CS-Notes&quot;&gt;CyC2018/CS-Notes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;~186k&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;合集型 · 偏笔记&lt;/td&gt;&lt;td&gt;用来&lt;strong&gt;对照查漏&lt;/strong&gt;：Java / 操作系统 / 网络。内容偏精炼，适合二轮速览，勿当唯一来源（部分章节偏旧，以 JavaGuide 为准核对）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/itwanger/toBeBetterJavaer&quot;&gt;itwanger/toBeBetterJavaer&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;~17k&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;体系教程型&lt;/td&gt;&lt;td&gt;并发 + JVM 讲得口语化，适合「听懂再背」。配合 JavaGuide 的面试题清单效果好&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/doocs/jvm&quot;&gt;doocs/jvm&lt;/a&gt;&lt;/td&gt;&lt;td&gt;专题型（doocs 系）&lt;/td&gt;&lt;td&gt;JVM 专题&lt;/td&gt;&lt;td&gt;若 JVM 要加深，专啃这一本式整理；与《深入理解 Java 虚拟机》对照&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;中高级重点（别只背题）：&lt;/strong&gt;&lt;br /&gt;
JMM / volatile / synchronized / AQS / 线程池参数与拒绝策略 / GC 选型与排查工具 / 类加载与双亲委派例外。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;二、MySQL + Redis&lt;/h2&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;仓库&lt;/th&gt;&lt;th&gt;Star 量级&lt;/th&gt;&lt;th&gt;类型&lt;/th&gt;&lt;th&gt;怎么用&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/Snailclimb/JavaGuide&quot;&gt;Snailclimb/JavaGuide&lt;/a&gt; 数据库/缓存章节&lt;/td&gt;&lt;td&gt;（同上仓）&lt;/td&gt;&lt;td&gt;合集内专题&lt;/td&gt;&lt;td&gt;&lt;strong&gt;MySQL + Redis 面试主线&lt;/strong&gt;：索引、事务隔离、锁、日志、主从；缓存穿透/击穿/雪崩、一致性。从站点目录进「数据库」「Redis」&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/doocs/advanced-java&quot;&gt;doocs/advanced-java&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;~79k&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;进阶扫盲 · 中高级向&lt;/td&gt;&lt;td&gt;&lt;strong&gt;强烈推荐「已熟练」后再拔高&lt;/strong&gt;：高并发下的缓存、分布式锁、秒杀、消息、ES 等场景串起来。站点：&lt;a href=&quot;https://java.doocs.org&quot;&gt;https://java.doocs.org&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;黑马点评 / 秒杀类实战仓（如社区常推的 hmdp 系、&lt;a href=&quot;https://github.com/java-up-up/damai&quot;&gt;java-up-up/damai&lt;/a&gt; ~1k+）&lt;/td&gt;&lt;td&gt;数百～1k+&lt;/td&gt;&lt;td&gt;实战型&lt;/td&gt;&lt;td&gt;用来&lt;strong&gt;把 Redis 从「会命令」变成「会方案」&lt;/strong&gt;：Lua 扣减、分布式锁、缓存一致性。挑 1 个跟完即可，不必多开&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;中高级重点：&lt;/strong&gt;&lt;br /&gt;
Explain / 覆盖索引 / 间隙锁；Buffer Pool；Redis 单线程与 IO 多路；持久化 RDB/AOF；集群与哨兵；与 DB 双写一致性策略。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;三、Spring 全家桶 + 源码&lt;/h2&gt;





























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;仓库&lt;/th&gt;&lt;th&gt;Star 量级&lt;/th&gt;&lt;th&gt;类型&lt;/th&gt;&lt;th&gt;怎么用&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/Snailclimb/JavaGuide&quot;&gt;Snailclimb/JavaGuide&lt;/a&gt; Spring 专题&lt;/td&gt;&lt;td&gt;（同上）&lt;/td&gt;&lt;td&gt;八股 + 原理&lt;/td&gt;&lt;td&gt;IoC/AOP、事务传播与失效、循环依赖三级缓存、Boot 自动装配。入口：&lt;a href=&quot;https://javaguide.cn/system-design/framework/spring/&quot;&gt;https://javaguide.cn/system-design/framework/spring/&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/YunaiV/SpringBoot-Labs&quot;&gt;yudaocode/SpringBoot-Labs&lt;/a&gt;（芋道）&lt;/td&gt;&lt;td&gt;&lt;strong&gt;~20k&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;源码/专栏实验型&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;源码主阵地&lt;/strong&gt;：按 lab 跑通 Boot 启动、自动配置、MVC；第二波再碰同仓里的 Cloud / 事务 / MQ 专栏&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/Snailclimb/JavaGuide-Interview&quot;&gt;Snailclimb/JavaGuide-Interview&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;~3k&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;突击压缩版&lt;/td&gt;&lt;td&gt;面试前 1–2 周&lt;strong&gt;速刷&lt;/strong&gt; Spring/Boot 问答，细节回主仓&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;中高级重点：&lt;/strong&gt;&lt;br /&gt;
Bean 生命周期、三级缓存解决循环依赖、&lt;code&gt;@Transactional&lt;/code&gt; 失效场景、Boot 2.x &lt;code&gt;spring.factories&lt;/code&gt; vs 3.x &lt;code&gt;AutoConfiguration.imports&lt;/code&gt;、Starter 条件装配。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;四、分布式 / 系统设计 / DDD&lt;/h2&gt;



































&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;仓库&lt;/th&gt;&lt;th&gt;Star 量级&lt;/th&gt;&lt;th&gt;类型&lt;/th&gt;&lt;th&gt;怎么用&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/doocs/advanced-java&quot;&gt;doocs/advanced-java&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;~79k&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;分布式进阶&lt;/td&gt;&lt;td&gt;&lt;strong&gt;主线&lt;/strong&gt;：分布式锁、事务、限流熔断、高可用、海量数据。适合「熟悉分布式开发」后查缺&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/nageoffer/congomall&quot;&gt;nageoffer/congomall&lt;/a&gt;&lt;/td&gt;&lt;td&gt;商城 DDD 实战（质量向）&lt;/td&gt;&lt;td&gt;&lt;strong&gt;DDD 落地型&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;对照订单/商品/优惠券边界，学「不是空谈分层」；配合自己项目的设计文档讲故事&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/Admol/SystemDesign&quot;&gt;Admol/SystemDesign&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;~3k&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;中文书译&lt;/td&gt;&lt;td&gt;Alex Xu《系统设计面试》中文：&lt;strong&gt;场景题骨架&lt;/strong&gt;（短链、限流、聊天、Feed…）&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://github.com/donnemartin/system-design-primer&quot;&gt;donnemartin/system-design-primer&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;英文高星&lt;/strong&gt;（全球头部）&lt;/td&gt;&lt;td&gt;系统设计&lt;/td&gt;&lt;td&gt;见下方「英文附录」——用简体中文 README 学，不必啃英文正文&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;中高级重点：&lt;/strong&gt;&lt;br /&gt;
CAP/BASE、幂等、分布式事务（本地消息表 / TCC / Seata 概念）、限流降级、一致性哈希；DDD 战略设计 vs 战术（聚合、领域事件）能结合项目说清楚即可。&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;英文高星附录（只给中文导读，不全文翻译）&lt;/h2&gt;
&lt;h3&gt;system-design-primer&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;仓：&lt;a href=&quot;https://github.com/donnemartin/system-design-primer&quot;&gt;https://github.com/donnemartin/system-design-primer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;直接看&lt;/strong&gt;：仓库内 &lt;code&gt;README-zh-Hans.md&lt;/code&gt;（已有简体中文）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;建议读的章节：&lt;/strong&gt;
&lt;ol&gt;
&lt;li&gt;如何答系统设计面试（框架）&lt;/li&gt;
&lt;li&gt;短网址 / ID 生成 / 限流 / Key-Value（分布式基础件）&lt;/li&gt;
&lt;li&gt;任选 1 个业务场景（聊天 or Feed）练口述&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不必&lt;/strong&gt;：把所有 solutions 英文代码逐文件翻译；对照 Admol 中译书 + 自己画图即可。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr /&gt;
&lt;h2&gt;待补方向（第二波预告）&lt;/h2&gt;
&lt;p&gt;第一波&lt;strong&gt;刻意没深挖&lt;/strong&gt;，需要时再说一声：&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;方向&lt;/th&gt;&lt;th&gt;说明&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Spring Cloud&lt;/td&gt;&lt;td&gt;可继续挖芋道 Labs 的 Cloud / Alibaba 专栏 + JavaGuide 微服务章节&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;RocketMQ / ES / Activiti&lt;/td&gt;&lt;td&gt;官方文档 + advanced-java 消息/搜索章节；Activiti 完整面试仓较少，偏官方 User Guide + 自己的项目&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;前端 Vue/React&lt;/td&gt;&lt;td&gt;维持「了解」即可，不必高星八股仓&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;AI / Agent / MCP&lt;/td&gt;&lt;td&gt;见 &lt;a href=&quot;../hermes-agent-skills/&quot;&gt;Hermes × Agent Skills 笔记&lt;/a&gt;；Java 侧可后续补 Spring AI 类中文项目&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;两周冲刺示例（可改）&lt;/h2&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;天数&lt;/th&gt;&lt;th&gt;内容&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;D1–3&lt;/td&gt;&lt;td&gt;JavaGuide 并发三篇 + JVM 内存/GC/类加载；用 jstack/jmap 口述一遍&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;D4–6&lt;/td&gt;&lt;td&gt;MySQL 索引事务锁 + Redis 五类问题；advanced-java 里缓存/锁 2–3 篇&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;D7–10&lt;/td&gt;&lt;td&gt;Spring 事务/循环依赖/自动装配；SpringBoot-Labs 跑 1–2 个启动/装配 lab&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;D11–14&lt;/td&gt;&lt;td&gt;advanced-java 分布式专题 + SystemDesign 2 个场景口述；congomall 看一个限界上下文&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;hr /&gt;
&lt;h2&gt;使用注意&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Star ≠ 全对&lt;/strong&gt;：以原理能否讲清为准；过旧章节用官网/新版源码核对。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;合集仓重复多&lt;/strong&gt;：JavaGuide 作主干，CS-Notes / 二哥作辅，避免三份同时精读。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;实战仓&lt;/strong&gt;：跟 1 个吃透，胜过 star 崇拜式收藏。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;第二波（Cloud / MQ / ES / Activiti）后续再补。&lt;/p&gt;</content:encoded></item></channel></rss>