<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Agent/AI on WY 的技术博客</title><link>https://zhouwy.top/categories/agent/ai/</link><description>Recent content in Agent/AI on WY 的技术博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sun, 26 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://zhouwy.top/categories/agent/ai/index.xml" rel="self" type="application/rss+xml"/><item><title>构建生产级 Agent Memory 系统架构</title><link>https://zhouwy.top/posts/%E6%9E%84%E5%BB%BA%E7%94%9F%E4%BA%A7%E7%BA%A7-agent-memory-%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><guid>https://zhouwy.top/posts/%E6%9E%84%E5%BB%BA%E7%94%9F%E4%BA%A7%E7%BA%A7-agent-memory-%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/</guid><description>&lt;h1 id="构建生产级-agent-memory-系统架构"&gt;构建生产级 Agent Memory 系统架构&lt;/h1&gt;
&lt;p&gt;很多人在做 Agent 时，第一版 Memory 的实现大概长这样：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;memory &lt;span style="color:#f92672"&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;memory&lt;span style="color:#f92672"&gt;.&lt;/span&gt;append({&lt;span style="color:#e6db74"&gt;&amp;#34;role&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;user&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;你好&amp;#34;&lt;/span&gt;})
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;memory&lt;span style="color:#f92672"&gt;.&lt;/span&gt;append({&lt;span style="color:#e6db74"&gt;&amp;#34;role&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;assistant&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;你好！有什么可以帮你的？&amp;#34;&lt;/span&gt;})
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;import&lt;/span&gt; java.util.*;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;List&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;Map&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;String, String&lt;span style="color:#f92672"&gt;&amp;gt;&amp;gt;&lt;/span&gt; memory &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; ArrayList&lt;span style="color:#f92672"&gt;&amp;lt;&amp;gt;&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;memory.&lt;span style="color:#a6e22e"&gt;add&lt;/span&gt;(Map.&lt;span style="color:#a6e22e"&gt;of&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;role&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;user&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;你好&amp;#34;&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;memory.&lt;span style="color:#a6e22e"&gt;add&lt;/span&gt;(Map.&lt;span style="color:#a6e22e"&gt;of&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;role&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;assistant&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;content&amp;#34;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#34;你好！有什么可以帮你的？&amp;#34;&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;跑几天后发现问题了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对话一长，Token 消耗爆炸&lt;/li&gt;
&lt;li&gt;用户上次说过的偏好，下次完全不记得&lt;/li&gt;
&lt;li&gt;多个 Session 之间的信息没法共享&lt;/li&gt;
&lt;li&gt;想查某个历史事实，得翻完整条对话&lt;/li&gt;
&lt;li&gt;模型在长上下文里注意力稀释，反而答得更差&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;于是开始往里面塞向量数据库、塞总结、塞 Graph，结果又发现：&lt;strong&gt;Memory 系统不是越复杂越好，而是越适合你 Agent 的行为模式越好。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这篇文章不讲泛泛的概念，而是从工程角度拆解：一个生产级的 Agent Memory 系统到底该考虑哪些维度，每种方案解决什么问题、带来什么新问题，以及如何组合它们。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="目录"&gt;目录&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E4%B8%80agent-memory-%E5%88%B0%E5%BA%95%E6%98%AF%E4%BB%80%E4%B9%88"&gt;一、Agent Memory 到底是什么&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E4%BA%8C%E6%95%B4%E4%BD%93%E6%9E%B6%E6%9E%84%E4%B8%89%E5%B1%82%E5%88%86%E7%A6%BB"&gt;二、整体架构：三层分离&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E4%B8%89episodic-memory%E6%83%85%E8%8A%82%E8%AE%B0%E5%BF%86%E6%9C%80%E5%9F%BA%E7%A1%80%E4%B9%9F%E6%9C%80%E5%AE%B9%E6%98%93%E6%90%9E%E7%A0%B8%E7%9A%84%E9%83%A8%E5%88%86"&gt;三、Episodic Memory（情节记忆）：最基础也最容易搞砸的部分&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E9%97%AE%E9%A2%98%E6%9C%AC%E8%B4%A8"&gt;问题本质&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%B8%B8%E8%A7%81%E5%AE%9E%E7%8E%B0%E6%96%B9%E5%BC%8F%E5%AF%B9%E6%AF%94"&gt;常见实现方式对比&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%8E%A8%E8%8D%90%E6%96%B9%E6%A1%88%E5%88%86%E5%B1%82%E7%AE%A1%E7%90%86"&gt;推荐方案：分层管理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%B7%A5%E7%A8%8B%E5%AE%9E%E7%8E%B0%E8%A6%81%E7%82%B9"&gt;工程实现要点&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%9B%9Bsemantic-memory%E8%AF%AD%E4%B9%89%E8%AE%B0%E5%BF%86%E4%BB%8E%E7%BB%8F%E5%8E%86%E4%B8%AD%E6%8F%90%E7%82%BC%E4%BA%8B%E5%AE%9E"&gt;四、Semantic Memory（语义记忆）：从经历中提炼事实&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E6%A0%B8%E5%BF%83%E6%80%9D%E8%B7%AF"&gt;核心思路&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%8F%90%E5%8F%96%E4%BB%80%E4%B9%88"&gt;提取什么&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%AD%98%E5%82%A8%E9%80%89%E5%9E%8B"&gt;存储选型&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%8F%90%E5%8F%96%E7%AD%96%E7%95%A5%E8%A2%AB%E5%8A%A8-vs-%E4%B8%BB%E5%8A%A8"&gt;提取策略：被动 vs 主动&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%85%B3%E9%94%AE%E9%9A%BE%E7%82%B9%E4%BA%8B%E5%AE%9E%E7%9A%84%E6%9B%B4%E6%96%B0%E4%B8%8E%E5%86%B2%E7%AA%81"&gt;关键难点：事实的更新与冲突&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E4%BA%94procedural-memory%E7%A8%8B%E5%BA%8F%E8%AE%B0%E5%BF%86agent-%E6%80%8E%E4%B9%88%E5%AD%A6%E4%BC%9A%E5%81%9A%E4%BA%8B%E6%83%85%E7%9A%84%E6%96%B9%E5%BC%8F"&gt;五、Procedural Memory（程序记忆）：Agent 怎么学会&amp;quot;做事情的方式&amp;quot;&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E5%AE%9E%E7%8E%B0%E6%96%B9%E5%BC%8F"&gt;实现方式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E4%BD%95%E6%97%B6%E5%86%99%E5%85%A5"&gt;何时写入&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%85%ADcontext-builder%E5%86%B3%E5%AE%9A%E5%BE%80-prompt-%E9%87%8C%E5%A1%9E%E4%BB%80%E4%B9%88"&gt;六、Context Builder：决定往 Prompt 里塞什么&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E7%BB%84%E8%A3%85%E7%AD%96%E7%95%A5"&gt;组装策略&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#token-%E9%A2%84%E7%AE%97%E5%88%86%E9%85%8D"&gt;Token 预算分配&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%A3%80%E7%B4%A2%E8%A7%A6%E5%8F%91%E7%AD%96%E7%95%A5"&gt;检索触发策略&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E4%B8%83%E6%95%B0%E6%8D%AE%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E4%B8%8E%E7%BB%B4%E6%8A%A4"&gt;七、数据生命周期与维护&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#ttl-%E4%B8%8E%E8%BF%87%E6%9C%9F"&gt;TTL 与过期&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#consolidation%E5%90%88%E5%B9%B6"&gt;Consolidation（合并）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#importance-scoring%E9%87%8D%E8%A6%81%E6%80%A7%E8%AF%84%E5%88%86"&gt;Importance Scoring（重要性评分）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%85%AB%E4%BB%8E-claude-code-%E4%B8%AD%E7%9C%8B%E5%88%B0%E7%9A%84%E4%BC%98%E7%A7%80%E8%AE%BE%E8%AE%A1"&gt;八、从 Claude Code 中看到的优秀设计&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E6%96%87%E4%BB%B6%E5%8D%B3%E6%95%B0%E6%8D%AE%E5%BA%93"&gt;文件即数据库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E7%B1%BB%E5%9E%8B%E5%8C%96%E8%AE%B0%E5%BF%86"&gt;类型化记忆&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%A3%80%E7%B4%A2%E6%97%B6%E7%9A%84%E9%AA%8C%E8%AF%81%E6%9C%BA%E5%88%B6"&gt;检索时的验证机制&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E4%B8%8D%E6%B7%B7%E6%B7%86%E8%AE%B0%E5%BF%86%E5%92%8C%E4%BB%BB%E5%8A%A1%E7%8A%B6%E6%80%81"&gt;不混淆&amp;quot;记忆&amp;quot;和&amp;quot;任务状态&amp;quot;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E4%B9%9D%E4%B8%BB%E6%B5%81%E6%A1%86%E6%9E%B6%E7%9A%84-memory-%E5%AE%9E%E7%8E%B0%E6%A1%88%E4%BE%8B"&gt;九、主流框架的 Memory 实现案例&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#1-langchain%E6%A8%A1%E5%9D%97%E5%8C%96-memory-%E4%BD%93%E7%B3%BB"&gt;LangChain：模块化 Memory 体系&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#2-crewai%E5%9F%BA%E4%BA%8E%E8%A7%92%E8%89%B2%E7%9A%84%E8%AE%B0%E5%BF%86%E5%88%86%E5%B7%A5"&gt;CrewAI：基于角色的记忆分工&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#3-mem0%E4%B8%93%E6%B3%A8%E8%AE%B0%E5%BF%86%E5%B1%82%E7%9A%84%E7%8B%AC%E7%AB%8B%E6%A1%86%E6%9E%B6"&gt;Mem0：专注&amp;quot;记忆层&amp;quot;的独立框架&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#4-spring-aijava-%E7%94%9F%E6%80%81%E7%9A%84-memory-%E5%AE%9E%E7%8E%B0"&gt;Spring AI：Java 生态的 Memory 实现&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#5-agentscope4jobservecall-%E5%88%86%E7%A6%BB%E4%B8%8E-msghub-%E8%AE%B0%E5%BF%86%E5%85%B1%E4%BA%AB"&gt;AgentScope4J：observe/call 分离与 MsgHub 记忆共享&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#6-hermes-agentnous-research%E5%9B%9B%E5%B1%82%E8%AE%B0%E5%BF%86%E4%B8%8E%E5%8F%AF%E6%8F%92%E6%8B%94-provider"&gt;Hermes Agent：四层记忆与可插拔 Provider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#7-openclaw%E6%96%87%E4%BB%B6%E5%8D%B3%E8%AE%B0%E5%BF%86%E7%9A%84%E6%A2%A6%E5%A2%83%E7%B3%BB%E7%BB%9F"&gt;OpenClaw：文件即记忆的&amp;quot;梦境&amp;quot;系统&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#8-autogenmicrosoft%E5%AF%B9%E8%AF%9D%E9%A9%B1%E5%8A%A8%E7%9A%84%E8%AE%B0%E5%BF%86%E5%85%B1%E4%BA%AB"&gt;AutoGen：对话驱动的记忆共享&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E6%A1%86%E6%9E%B6%E5%AF%B9%E6%AF%94%E5%B0%8F%E7%BB%93hermes-vs-openclaw"&gt;框架对比小结：Hermes vs OpenClaw&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%8D%81%E7%94%9F%E4%BA%A7%E7%BA%A7-checklist"&gt;十、生产级 Checklist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E5%8D%81%E4%B8%80%E6%80%BB%E7%BB%93"&gt;十一、总结&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="一agent-memory-到底是什么"&gt;一、Agent Memory 到底是什么&lt;/h2&gt;
&lt;p&gt;很多人把 Memory 等同于&amp;quot;聊天记录&amp;quot;，这是第一个坑。&lt;/p&gt;</description></item><item><title>AgentScope4J 实战：MCP、Function Calling、Hermes、Skills 全链路落地</title><link>https://zhouwy.top/posts/agentscope4j-%E5%AE%9E%E6%88%98mcpfunction-callinghermesskills-%E5%85%A8%E9%93%BE%E8%B7%AF%E8%90%BD%E5%9C%B0/</link><pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate><guid>https://zhouwy.top/posts/agentscope4j-%E5%AE%9E%E6%88%98mcpfunction-callinghermesskills-%E5%85%A8%E9%93%BE%E8%B7%AF%E8%90%BD%E5%9C%B0/</guid><description>&lt;h1 id="agentscope4j-实战mcpfunction-callinghermesskills-全链路落地"&gt;AgentScope4J 实战：MCP、Function Calling、Hermes、Skills 全链路落地&lt;/h1&gt;
&lt;p&gt;很多团队在做 AI Agent 时，会把 &lt;code&gt;MCP&lt;/code&gt;、&lt;code&gt;Function Calling&lt;/code&gt;、&lt;code&gt;Workflow&lt;/code&gt;、&lt;code&gt;Skills&lt;/code&gt; 混在一起，最后导致系统边界不清晰：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;模型在“决策层”做了太多“执行层”的事&lt;/li&gt;
&lt;li&gt;工具能力散落在不同模块，难治理、难审计&lt;/li&gt;
&lt;li&gt;Demo 阶段能跑，线上阶段一旦扩展就失控&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这篇文章给出一个工程化拆解：基于 &lt;code&gt;agentscope4j&lt;/code&gt; 搭建一套清晰的分层，把这四个关键能力拼成一条可扩展、可观测、可治理的链路。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="一先把概念边界讲清楚"&gt;一、先把概念边界讲清楚&lt;/h2&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;th&gt;不负责的事情&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Function Calling&lt;/td&gt;
&lt;td&gt;让模型按 JSON Schema 选择并调用本地函数&lt;/td&gt;
&lt;td&gt;结构化参数、减少自由文本歧义&lt;/td&gt;
&lt;td&gt;跨进程发现工具、权限治理&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MCP&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;td&gt;Hermes（编排层）&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;td&gt;Skills&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;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;一句话总结：&lt;br&gt;
&lt;code&gt;Function Calling&lt;/code&gt; 是“调用形态”，&lt;code&gt;MCP&lt;/code&gt; 是“工具接入协议”，&lt;code&gt;Hermes&lt;/code&gt; 是“执行与治理中枢”，&lt;code&gt;Skills&lt;/code&gt; 是“业务能力封装”。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="二目标架构四层分离"&gt;二、目标架构：四层分离&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code class="language-mermaid" data-lang="mermaid"&gt;flowchart TD
U[&amp;#34;User Request&amp;#34;] --&amp;gt; A[&amp;#34;AgentScope4J Agent (Planner)&amp;#34;]
A --&amp;gt; H[&amp;#34;Hermes Orchestrator&amp;#34;]
H --&amp;gt; S1[&amp;#34;Skill: Research&amp;#34;]
H --&amp;gt; S2[&amp;#34;Skill: Report&amp;#34;]
S1 --&amp;gt; FC[&amp;#34;Function Calling Adapter&amp;#34;]
S1 --&amp;gt; MCP[&amp;#34;MCP Client Adapter&amp;#34;]
FC --&amp;gt; T1[&amp;#34;Local Tool: SqlTool/FileTool&amp;#34;]
MCP --&amp;gt; T2[&amp;#34;Remote MCP Tools&amp;#34;]
S2 --&amp;gt; T3[&amp;#34;Formatter/Exporter&amp;#34;]
T1 --&amp;gt; O[&amp;#34;Observability: Trace/Log/Metrics&amp;#34;]
T2 --&amp;gt; O
T3 --&amp;gt; O
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;设计原则：&lt;/p&gt;</description></item><item><title>AgentScope MsgHub 多智能体通信机制详解</title><link>https://zhouwy.top/posts/agentscope-msghub-%E5%A4%9A%E6%99%BA%E8%83%BD%E4%BD%93%E9%80%9A%E4%BF%A1%E6%9C%BA%E5%88%B6%E8%AF%A6%E8%A7%A3/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://zhouwy.top/posts/agentscope-msghub-%E5%A4%9A%E6%99%BA%E8%83%BD%E4%BD%93%E9%80%9A%E4%BF%A1%E6%9C%BA%E5%88%B6%E8%AF%A6%E8%A7%A3/</guid><description>&lt;p&gt;多智能体系统里，Agent 之间的通信是个容易被低估的难题。本文以 AgentScope-Java 的 &lt;code&gt;MsgHub&lt;/code&gt; 为例，聊聊我们在实践中踩过的坑，以及订阅-广播机制的设计思路。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;一、为什么要专门做个通信层&lt;/p&gt;
&lt;p&gt;1.1 常见但别扭的做法&lt;/p&gt;
&lt;p&gt;三个狼人 Agent 讨论今晚刀谁，你会怎么写？&lt;/p&gt;
&lt;p&gt;手动透传消息&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 没有 MsgHub 的情况&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Msg aResponse &lt;span style="color:#f92672"&gt;=&lt;/span&gt; wolfA.&lt;span style="color:#a6e22e"&gt;call&lt;/span&gt;().&lt;span style="color:#a6e22e"&gt;block&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wolfB.&lt;span style="color:#a6e22e"&gt;observe&lt;/span&gt;(aResponse).&lt;span style="color:#a6e22e"&gt;block&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wolfC.&lt;span style="color:#a6e22e"&gt;observe&lt;/span&gt;(aResponse).&lt;span style="color:#a6e22e"&gt;block&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Msg bResponse &lt;span style="color:#f92672"&gt;=&lt;/span&gt; wolfB.&lt;span style="color:#a6e22e"&gt;call&lt;/span&gt;().&lt;span style="color:#a6e22e"&gt;block&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wolfA.&lt;span style="color:#a6e22e"&gt;observe&lt;/span&gt;(bResponse).&lt;span style="color:#a6e22e"&gt;block&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wolfC.&lt;span style="color:#a6e22e"&gt;observe&lt;/span&gt;(bResponse).&lt;span style="color:#a6e22e"&gt;block&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 代码重复，维护噩梦&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;并发调用&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 同时调用所有 Agent&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;var&lt;/span&gt; responses &lt;span style="color:#f92672"&gt;=&lt;/span&gt; Flux.&lt;span style="color:#a6e22e"&gt;just&lt;/span&gt;(wolfA, wolfB, wolfC)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;flatMap&lt;/span&gt;(agent &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; agent.&lt;span style="color:#a6e22e"&gt;call&lt;/span&gt;())
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;collectList&lt;/span&gt;()
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; .&lt;span style="color:#a6e22e"&gt;block&lt;/span&gt;();
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 问题：每个 Agent 基于相同的初始上下文，无法互相影响&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;同步阻塞（死锁风险）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 如果每个 Agent 都在等其他人先发言&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Msg aResponse &lt;span style="color:#f92672"&gt;=&lt;/span&gt; wolfA.&lt;span style="color:#a6e22e"&gt;call&lt;/span&gt;().&lt;span style="color:#a6e22e"&gt;block&lt;/span&gt;(); &lt;span style="color:#75715e"&gt;// A 等 B&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Msg bResponse &lt;span style="color:#f92672"&gt;=&lt;/span&gt; wolfB.&lt;span style="color:#a6e22e"&gt;call&lt;/span&gt;().&lt;span style="color:#a6e22e"&gt;block&lt;/span&gt;(); &lt;span style="color:#75715e"&gt;// B 等 C&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Msg cResponse &lt;span style="color:#f92672"&gt;=&lt;/span&gt; wolfC.&lt;span style="color:#a6e22e"&gt;call&lt;/span&gt;().&lt;span style="color:#a6e22e"&gt;block&lt;/span&gt;(); &lt;span style="color:#75715e"&gt;// C 等 A&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;// 死锁&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这些方案要么啰嗦，要么有隐患。我们需要一种让 Agent 既能&amp;quot;听到&amp;quot;彼此，又不会互相卡住的机制。&lt;/p&gt;</description></item><item><title>Claude Code源代码</title><link>https://zhouwy.top/posts/claude-code%E6%BA%90%E4%BB%A3%E7%A0%81/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://zhouwy.top/posts/claude-code%E6%BA%90%E4%BB%A3%E7%A0%81/</guid><description>&lt;h1 id="claude-code源代码"&gt;Claude Code源代码&lt;/h1&gt;
&lt;p&gt;参考URL:&lt;/p&gt;
&lt;p&gt;如何评价Claude Code源代码泄漏？ - 卜寒兮的回答 - 知乎
&lt;a href="https://www.zhihu.com/question/2022392127145911515/answer/2022520709964931142"&gt;https://www.zhihu.com/question/2022392127145911515/answer/2022520709964931142&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="总结值得借鉴的设计模式"&gt;总结：值得借鉴的设计模式&lt;/h3&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;可借鉴的场景&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AsyncGenerator 作为流式原语&lt;/td&gt;
&lt;td&gt;query() 的整体结构&lt;/td&gt;
&lt;td&gt;任何需要流式输出 + 可中断的 agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;分层错误恢复&lt;/td&gt;
&lt;td&gt;五层上下文压缩策略&lt;/td&gt;
&lt;td&gt;资源受限下的 long-running task&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;流式并发工具执行&lt;/td&gt;
&lt;td&gt;StreamingToolExecutor&lt;/td&gt;
&lt;td&gt;多工具并行调用的 agent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;投机性预计算&lt;/td&gt;
&lt;td&gt;startSpeculativeClassifierCheck&lt;/td&gt;
&lt;td&gt;任何有必然后续操作的流程&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;工具自声明并发安全性&lt;/td&gt;
&lt;td&gt;isConcurrencySafe() 接口&lt;/td&gt;
&lt;td&gt;混合读写操作的任务编排&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Forked Agent 共享缓存&lt;/td&gt;
&lt;td&gt;CacheSafeParams + compact agent&lt;/td&gt;
&lt;td&gt;需要 fork 子任务但不想丢失 prompt cache&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hook 与主循环解耦&lt;/td&gt;
&lt;td&gt;Post-sampling / stop hooks&lt;/td&gt;
&lt;td&gt;任何需要插入评估逻辑的 agent 系统&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;回到上面那句话：&lt;strong&gt;harness 编码了对”模型不能独立完成什么”的假设（&lt;/strong&gt;&lt;em&gt;“the harness itself encodes assumptions about what models cannot do independently”&lt;/em&gt;。）&lt;/p&gt;</description></item></channel></rss>