<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[我的新书《代码精进之路：从码农到工匠》]]></title><description><![CDATA[微信公众号搜索“从码农到工匠”关注我最新的文章。]]></description><link>https://blog.youkuaiyun.com/significantfrank</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; significantfrank]]></copyright><item><title><![CDATA[从零构建Agent(十三)：快速搭建Agent应用的SDK]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/170147331</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/170147331</guid><author>significantfrank</author><pubDate>Thu, 05 Nov 2026 19:17:24 +0800</pubDate><description><![CDATA[Model 管理：如何连接和使用不同的模型。Tool：如何让 Agent 调用外部工具。Agent Loop：如何驱动模型和工具循环执行。SubAgent：如何将任务委派给其他 Agent。Extension：如何扩展 Agent 的生命周期。Memory：如何实现跨 Session 的长期记忆。这些能力构成了 Agent 的运行时核心。但对于应用开发者来说，每次构建一个 Agent，都需要理解并组装这些组件，仍然有不少工作。instructions: '你是一个天气助手。',]]></description><category></category></item><item><title><![CDATA[从零构建Agent(十二)：长期Memory管理]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/169943105</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/169943105</guid><author>significantfrank</author><pubDate>Tue, 03 Nov 2026 14:47:25 +0800</pubDate><description><![CDATA[本文介绍了 Agent 长期 Memory 的价值，并参考 Hermes 的记忆机制，为 ZeroAgent 实现了一个通用的 Memory Provider。通过 Extension，ZeroAgent 可以在请求开始前 Recall 相关记忆，并在对话结束后 Retain 新的信息。借助 Hindsight，我们进一步实现了跨 Session 的长期记忆。Memory 让 Agent 不再局限于当前 Session，而是能够从过去的交互中提取、保存并重新利用信息。读者可以在。]]></description><category></category></item><item><title><![CDATA[从零构建Agent(十一)：Extension扩展]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/169650280</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/169650280</guid><author>significantfrank</author><pubDate>Sat, 31 Oct 2026 17:29:40 +0800</pubDate><description><![CDATA[模型解耦和事件分层。需要扩展点：为了让 Agent 支持运行时可插拔的能力，需要允许外部代码观察和塑造 Agent 的行为。梳理 Agent 生命周期：Extension 必须依附于 Agent 的生命周期。我们梳理了一次 Agent 执行的完整流程，从到，再到 ReAct 循环，最后以agent_end结束。建立事件分层：不同阶段需要不同粒度的事件，因此设计了AiEventAgentEvent和三层事件体系。实现模型解耦：为了避免第一层事件依赖具体 Provider，我们抽象出AiClient。]]></description><category></category></item><item><title><![CDATA[从零构建Agent(十)：Model管理]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/169261446</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/169261446</guid><author>significantfrank</author><pubDate>Tue, 27 Oct 2026 15:10:56 +0800</pubDate><description><![CDATA[Model 管理，简单来说，就是让 Agent 能够统一配置、查询、选择和切换不同的模型，并处理不同模型供应商之间的差异。首先，我们需要区分两个概念：Provider 和 Model。Provider：模型供应商，例如 DeepSeek、智谱。Model：供应商提供的具体模型，例如 DeepSeek 的和。一个 Provider 可以提供多个 Model，二者通常是一对多的关系。通常我们在开通一个MaaS服务的时候，都能从供应商那里获取的API Key来作为访问凭据。]]></description><category></category></item><item><title><![CDATA[从零构建Agent(九)：SubAgent]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/169147086</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/169147086</guid><author>significantfrank</author><pubDate>Mon, 26 Oct 2026 10:49:49 +0800</pubDate><description><![CDATA[SubAgent 的核心思想是任务委派。就像一个团队负责人（父 Agent）把一项具体工作交给一位专业工程师（子 Agent），工程师独立完成后把结果汇报回来，负责人再综合结果做决策。Claude Code 的SubAgents是这一模式的典型实现。每个 SubAgent 是一个 Markdown 定义文件，包含专属的 System Prompt、可选的模型覆盖和工具白名单。------实际上SubAgent也是Agent，其结构和功能都和已有的Agent有同构性，那为什么我们还要重新定义个新类型呢。]]></description><category></category></item><item><title><![CDATA[从零构建Agent(八)：Commands]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/168536773</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/168536773</guid><author>significantfrank</author><pubDate>Tue, 20 Oct 2026 10:26:59 +0800</pubDate><description><![CDATA[经常使用Agent的同学，对于这个功能应该不陌生。下图是Hermes Agent的斜杠命令列表，我们可以用这些命令对Agent进行Session管理，上下文压缩等操作。以下是PI Agent的斜杠命令列表，除了系统自定义的命令之外，opsx 开头的命令，是我们使用创建的SDD命令，属于是用户自定义命令，在PI Agent中也叫Slash Commands 作为用户自定义的 Prompt 模板使用时。]]></description><category></category></item><item><title><![CDATA[从零构建Agent(七)：Session管理]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/168140597</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/168140597</guid><author>significantfrank</author><pubDate>Fri, 16 Oct 2026 17:10:08 +0800</pubDate><description><![CDATA[在/** sessions 表的行结构 */id: string;/** messages 表的行结构 */id: string;/** 带消息数的 Session 元信息（list/get 操作使用） */SessionRow字段用途idUUID v4，主键title会话标题，由第一条用户消息自动生成（截取前 50 字符）model创建会话时使用的模型名称workspace工作目录路径，用于按项目隔离会话父会话 ID（自关联），为未来"会话分支"功能预留。]]></description><category></category></item><item><title><![CDATA[从零构建Agent(六)：Skills]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/168024989</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/168024989</guid><author>significantfrank</author><pubDate>Thu, 15 Oct 2026 16:10:24 +0800</pubDate><description><![CDATA[和 MCP 一样，Skills 也是 Anthropic 制定的一个规范，它并不意味着一定要和 Claude Code 绑定。只要遵从Skills 规范my-skill/其中最重要的是SKILL.md，其中name和description是必选项，是为了把Skill能力暴露给大模型。------完整内容请查阅官方网站，你会发现 Skills 规范的内容非常简洁，关键是定义 Skills 的文件结构和发现机制。我们创建一个新的skills。]]></description><category></category></item><item><title><![CDATA[从零构建Agent(五)：MCP]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/167808395</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/167808395</guid><author>significantfrank</author><pubDate>Tue, 13 Oct 2026 16:10:18 +0800</pubDate><description><![CDATA[我在《程序员的底层思维》一书中说过：“计算机科学中的所有问题都可以通过增加一个间接层来解决。”  这也是解耦的精髓，比如依赖倒置解耦，就是加入了新的抽象层。我当时还举了一个”我“作为中间层，解耦婆媳关系的例子：）MCP也是中间层解耦。不要让 Agent 直接持有工具的实现，而是在 Agent 和工具之间插入一个中间层——Agent 只负责“描述我需要什么能力”，中间层负责“找到并提供这些能力”。]]></description><category></category></item><item><title><![CDATA[从零构建Agent(四)：Function Calling]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/167695776</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/167695776</guid><author>significantfrank</author><pubDate>Mon, 12 Oct 2026 15:39:42 +0800</pubDate><description><![CDATA[我之前写过一篇一文搞懂MCP、Function Calling和A2A的文章，里面有详细介绍Function Calling的内容。这里我们简单回顾一下，大模型是"大脑"，但它没有手脚。读取你磁盘上的文件执行一条 shell 命令搜索代码库中的某个函数模型的输出只有文本。Function Calling 是一座桥梁：模型按照预定义的 JSON Schema 输出工具调用意图，Agent 在本地执行真正的操作，再把结果作为"观察"喂回模型。]]></description><category></category></item><item><title><![CDATA[从零构建Agent(三)：Agent Loop]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/167493160</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/167493160</guid><author>significantfrank</author><pubDate>Sat, 10 Oct 2026 16:33:48 +0800</pubDate><description><![CDATA[实际上Agent Loop没有什么神秘，本质就是一个while循环，准确的说是ReAct循环，ReAct理论来自于这篇论文。简单说，我们人类做事时都有一个"内心小剧场"。比如你要喝可乐，心里会想："我要买可乐，然后拉易拉罐……"大模型也是类似。加上 Thinking 步骤后，它做事的准确率会提高很多。本文我们介绍了 Agent 的核心——Agent Loop，并说明了它本质上是一个 ReAct 循环。ReAct 将 Agent 与模型的交互划分为感知、思考、行动、观察四个阶段，构成一个闭环。]]></description><category></category></item><item><title><![CDATA[从零构建Agent(二)：大模型交互]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/165476265</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/165476265</guid><author>significantfrank</author><pubDate>Tue, 15 Sep 2026 15:02:44 +0800</pubDate><description><![CDATA[使用服务端 Store 或客户端历史消息管理多轮上下文。使用 SSE 流式接收 reasoning、回答文本和完成状态。使用取消长时间运行的请求。使用 JSON Schema 约束模型输出，得到可直接解析的结构化数据。使用 Function Calling 让模型请求工具，由客户端执行工具并把结果反馈给模型。利用这些能力组合，我们就可以构建一个完整的 Agent 流程：客户端保存或引用上下文，流式接收模型决策，调用工具，取消请求，最终使用结构化输出或普通文本返回结果。]]></description><category></category></item><item><title><![CDATA[从零构建Agent(一)：技术选型]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/165319261</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/165319261</guid><author>significantfrank</author><pubDate>Mon, 14 Sep 2026 15:27:04 +0800</pubDate><description><![CDATA[本文是“从零构建 Agent”系列的第一篇，围绕技术选型这一主题，记录了作者在项目启动阶段的路线规划与踩坑经验。技术选型上，TypeScript 是 Agent 前后端的必选项；工程实践上，可测试性与可观测性要在一开始就埋进去。选对栈、打好底，后续的 Agent Loop、SubAgent、Memory、自进化等能力才有稳固的落脚点。]]></description><category></category></item><item><title><![CDATA[深入DeepSeek Harness系列(五）：Cordis源码解读]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/164475218</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/164475218</guid><author>significantfrank</author><pubDate>Mon, 07 Sep 2026 17:10:45 +0800</pubDate><description><![CDATA[当greeter首先被加载的时候，我们会得到一个PENDING状态的greeter，因为此时logger还没有被加载const impl = this.ctx._getImpl(name) // 查 'logger'if (!break } // logger 还没注册 → impl 为 undefined → ready=falseif (ready) this._start() // ready=false → 不启动_getImpl。]]></description><category></category></item><item><title><![CDATA[深入DeepSeek Harness系列(四）：Cordis工作原理解析]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/164398148</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/164398148</guid><author>significantfrank</author><pubDate>Sat, 05 Sep 2026 11:26:10 +0800</pubDate><description><![CDATA[Cordis 的。]]></description><category></category></item><item><title><![CDATA[深入DeepSeek Harness系列(三）：时空可组合性论文解读]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/164371094</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/164371094</guid><author>significantfrank</author><pubDate>Fri, 04 Sep 2026 16:19:08 +0800</pubDate><description><![CDATA[是和DeepSeek Harness一起发布的78页的学术论文。论文给出了""的范式，Cordis是论文的参考实现，dsh 是基于Cordis 之上构建的一个"可被动态拆装、可热替换、可自我演化"的 AI Agent harness 产品。简单来说，你可以认为，dsh是时空可组合性论文的工程实践，论文是dsh的理论升华。]]></description><category></category></item><item><title><![CDATA[深入DeepSeek Harness系列(二）：一切皆插件背后的概念模型]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/164325262</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/164325262</guid><author>significantfrank</author><pubDate>Thu, 03 Sep 2026 10:45:13 +0800</pubDate><description><![CDATA[文章从 Profile、Bundle、Patch、Plugin 四个核心概念入手，通过运行 dsh、安装自定义插件等实操步骤，逐步揭示 dsh 如何以“空根 + 补丁叠加”的方式动态组装 Agent，帮助读者理解一切皆插件背后的实现原理。]]></description><category></category></item><item><title><![CDATA[深入DeepSeek Harness系列(一）：Plugin架构模式]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/164324036</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/164324036</guid><author>significantfrank</author><pubDate>Thu, 03 Sep 2026 09:28:52 +0800</pubDate><description><![CDATA[本文从软件架构角度解读 Plugin 插件机制。聚焦两种核心实现范式——接口驱动（拉模式）与 事件驱动（推模式），为后续解读dsh的“Everything is Plugin”设计做铺垫。]]></description><category></category></item><item><title><![CDATA[Harness Engineering实践，如何驾驭AI这匹野马]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/159999770</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/159999770</guid><author>significantfrank</author><pubDate>Thu, 09 Apr 2026 12:22:11 +0800</pubDate><description><![CDATA[想象一下，你面对的是一匹拥有无穷爆发力的烈马，如果没有缰绳、马鞍和踏板，它只会在旷野中横冲直撞，甚至把你掀翻在地。这是一个让我欣慰的问题，经过这么多年对COLA的持续经营，COLA已经变成大模型的背景知识，关于Layer-first和Feature-first之间的权衡的确是个关键问题。在工程语境下，Harness 是你为 AI 搭建的整套数字化结界：它是那份规定“非请勿入”的架构约束，是那组时刻盯着逻辑漏洞的自动化校验脚本，是动态扩容的上下文管理器，也是出故障时能实现自愈的隔离沙箱。]]></description><category></category></item><item><title><![CDATA[一文搞懂Claude Skills和SubAgents及背后本质]]></title><link>https://blog.youkuaiyun.com/significantfrank/article/details/156317224</link><guid>https://blog.youkuaiyun.com/significantfrank/article/details/156317224</guid><author>significantfrank</author><pubDate>Fri, 26 Dec 2025 11:59:06 +0800</pubDate><description><![CDATA[这意味着，技能中可以绑定的上下文量实际上是无限的。需要注意的是，当Skills调用结束，要及时的清理Context，比如pdf表单填写任务完成之后，）实现的，我们可以用下面的方式，把internet搜索包装成一个SubAgent，因为互联网搜索的数据很庞杂，我们不希望这些raw data污染我们的Main Agent。有介绍如何打印日志），可以佐证本Agent的确是如我们期望的那样在运作，下面是本次任务执行中，某一次Agent与模型交互日志的Response内容，清晰的描述了，在执行。]]></description><category></category></item></channel></rss>