<?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 on Yukari's Blog</title><link>https://murasaki010.github.io/tags/agent/</link><description>Recent content in Agent on Yukari's Blog</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Fri, 29 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://murasaki010.github.io/tags/agent/index.xml" rel="self" type="application/rss+xml"/><item><title>Pi Agent 包源码逐行解读 — agent-loop.ts &amp; agent.ts</title><link>https://murasaki010.github.io/posts/pi-architecture/agent-loop-code-walkthrough/</link><pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate><guid>https://murasaki010.github.io/posts/pi-architecture/agent-loop-code-walkthrough/</guid><description>&lt;h1 id="pi-agent-包源码逐行解读"&gt;Pi Agent 包源码逐行解读&lt;/h1&gt;
&lt;blockquote&gt;
&lt;p&gt;本文对 &lt;code&gt;packages/agent/src/&lt;/code&gt; 下的 &lt;code&gt;agent-loop.ts&lt;/code&gt;（~700 行）和 &lt;code&gt;agent.ts&lt;/code&gt;（~540 行）做&lt;strong&gt;逐行级&lt;/strong&gt;的代码解读，涵盖每个函数的设计意图、类型系统、控制流和错误处理策略。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="目录"&gt;目录&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="#%E6%96%87%E4%BB%B6%E6%A6%82%E8%A7%88"&gt;文件概览&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#agent-loopts-%E9%80%90%E8%A1%8C%E8%A7%A3%E8%AF%BB"&gt;agent-loop.ts 逐行解读&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E7%B1%BB%E5%9E%8B%E4%B8%8E%E5%AF%BC%E5%85%A5"&gt;类型与导入&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#agentloop--agentloopcontinue--%E5%85%AC%E5%BC%80%E5%85%A5%E5%8F%A3"&gt;agentLoop / agentLoopContinue — 公开入口&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#runagentloop--runagentloopcontinue--%E5%BC%82%E6%AD%A5%E5%BA%95%E5%B1%82"&gt;runAgentLoop / runAgentLoopContinue — 异步底层&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#runloop--%E6%A0%B8%E5%BF%83%E5%8F%8C%E5%B1%82%E5%BE%AA%E7%8E%AF"&gt;runLoop — 核心双层循环&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#streamassistantresponse--llm-%E6%B5%81%E5%BC%8F%E8%B0%83%E7%94%A8"&gt;streamAssistantResponse — LLM 流式调用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#executetoolcalls--%E5%B7%A5%E5%85%B7%E8%B0%83%E5%BA%A6"&gt;executeToolCalls — 工具调度&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#executetoolcallssequential--parallel--%E4%B8%B2%E8%A1%8C%E4%B8%8E%E5%B9%B6%E8%A1%8C"&gt;executeToolCallsSequential / Parallel — 串行与并行&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#preparetoolcall--%E5%89%8D%E7%BD%AE%E7%AE%A1%E9%81%93"&gt;prepareToolCall — 前置管道&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#executepreparedtoolcall--%E5%B7%A5%E5%85%B7%E6%89%A7%E8%A1%8C"&gt;executePreparedToolCall — 工具执行&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#finalizeexecutedtoolcall--%E5%90%8E%E5%A4%84%E7%90%86"&gt;finalizeExecutedToolCall — 后处理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%BE%85%E5%8A%A9%E5%87%BD%E6%95%B0"&gt;辅助函数&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#agentts-%E9%80%90%E8%A1%8C%E8%A7%A3%E8%AF%BB"&gt;agent.ts 逐行解读&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#%E7%B1%BB%E5%9E%8B%E4%B8%8E%E5%AF%BC%E5%85%A5-1"&gt;类型与导入&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#mutableagentstate-%E4%B8%8E-createmutableagentstate"&gt;MutableAgentState 与 createMutableAgentState&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#pendingmessagequeue"&gt;PendingMessageQueue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#agent-%E7%B1%BB--%E6%9E%84%E9%80%A0%E5%99%A8"&gt;Agent 类 — 构造器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#subscribe--%E4%BA%8B%E4%BB%B6%E8%AE%A2%E9%98%85"&gt;subscribe — 事件订阅&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#prompt--%E5%8F%91%E8%B5%B7%E5%AF%B9%E8%AF%9D"&gt;prompt — 发起对话&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#continue--%E7%BB%A7%E7%BB%AD%E5%AF%B9%E8%AF%9D"&gt;continue — 继续对话&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#steer--followup--%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97"&gt;steer / followUp — 消息队列&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#abort--waitforidle--reset--%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E6%8E%A7%E5%88%B6"&gt;abort / waitForIdle / reset — 生命周期控制&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E7%A7%81%E6%9C%89%E6%96%B9%E6%B3%95runpromptmessages--runcontinuation"&gt;私有方法：runPromptMessages / runContinuation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#runwithlifecycle--%E5%B9%B6%E5%8F%91%E6%8E%A7%E5%88%B6"&gt;runWithLifecycle — 并发控制&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#handlerunfailure--%E5%A4%B1%E8%B4%A5%E5%A4%84%E7%90%86"&gt;handleRunFailure — 失败处理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#finishrun--%E8%BF%90%E8%A1%8C%E7%BB%88%E7%BB%93"&gt;finishRun — 运行终结&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#processevents--%E4%BA%8B%E4%BB%B6%E5%BD%92%E7%BA%A6"&gt;processEvents — 事件归约&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#createcontextsnapshot--createloopconfig--%E9%80%82%E9%85%8D%E5%B1%82"&gt;createContextSnapshot / createLoopConfig — 适配层&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="#%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E6%80%BB%E7%BB%93"&gt;设计模式总结&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="文件概览"&gt;文件概览&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;packages/agent/src/
├── agent-loop.ts # 无状态循环引擎（~700 行，纯函数）
├── agent.ts # 有状态封装层（~540 行，Agent 类）
├── types.ts # 类型定义（~400 行）
├── proxy.ts # HTTP 代理（~320 行）
├── index.ts # 导出入口（~8 行）
├── agent-learn.ts # 学习相关
├── agent-loop-learn.ts
└── README.md
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;核心分界线：&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Pi-Architecture: Agent</title><link>https://murasaki010.github.io/posts/pi-architecture/agent-loop/</link><pubDate>Fri, 29 May 2026 00:00:00 +0000</pubDate><guid>https://murasaki010.github.io/posts/pi-architecture/agent-loop/</guid><description>&lt;h1 id="pi-agent-包架构"&gt;Pi Agent 包架构&lt;/h1&gt;
&lt;p&gt;&lt;code&gt;packages/agent/src/&lt;/code&gt; 实现了 Pi 框架中的 Agent 运行时，用于构建&lt;strong&gt;工具增强型 LLM 对话代理&lt;/strong&gt;（Tool-Augmented LLM Agent）。&lt;/p&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;&lt;code&gt;types.ts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;类型定义层&lt;/td&gt;
&lt;td&gt;~400&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;agent-loop.ts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;无状态循环引擎&lt;/td&gt;
&lt;td&gt;~700&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;agent.ts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;有状态封装层&lt;/td&gt;
&lt;td&gt;~540&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;proxy.ts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;代理流式函数&lt;/td&gt;
&lt;td&gt;~320&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;index.ts&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;导出入口&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id="架构总览"&gt;架构总览&lt;/h2&gt;
&lt;div class="mermaid"&gt;graph TD
App[外部应用]
subgraph "Agent 包"
Index[index.ts&lt;br/&gt;导出入口]
subgraph "类型系统"
Types[types.ts&lt;br/&gt;AgentMessage / AgentEvent&lt;br/&gt;AgentLoopConfig / AgentTool]
end
subgraph "管理层 agent.ts"
Agent[Agent 类&lt;br/&gt;状态管理 / 队列 / 并发 / 事件]
Queue[PendingMessageQueue&lt;br/&gt;steering / follow-up 队列]
State[MutableAgentState&lt;br/&gt;状态归约]
end
subgraph "引擎层 agent-loop.ts"
Engine[LoopEngine&lt;br/&gt;runAgentLoop / runLoop]
LLMCall[streamAssistantResponse&lt;br/&gt;LLM 调用]
ToolExec[executeToolCalls&lt;br/&gt;工具执行]
end
subgraph "HTTP 代理 proxy.ts"
Proxy[streamProxy&lt;br/&gt;代理流式函数]
end
end
subgraph "LLM 核心库 @earendil-works/pi-ai"
AI[streamSimple / Model&lt;br/&gt;Message / Tool]
end
App --&gt; Agent
Agent --&gt; Engine
Agent --&gt; Queue
Agent --&gt; State
Engine --&gt; LLMCall
Engine --&gt; ToolExec
LLMCall --&gt; AI
Proxy -- 替代 streamFn --&gt; Agent
Agent -.-&gt; Types
Engine -.-&gt; Types
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id="分层设计"&gt;分层设计&lt;/h2&gt;
&lt;h3 id="无状态引擎-vs-有状态封装"&gt;无状态引擎 vs 有状态封装&lt;/h3&gt;
&lt;p&gt;Agent 包的核心设计思想是将&lt;strong&gt;引擎逻辑&lt;/strong&gt;与&lt;strong&gt;状态管理&lt;/strong&gt;分离：&lt;/p&gt;</description></item></channel></rss>