<?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>Source Code on Yukari's Blog</title><link>https://murasaki010.github.io/tags/source-code/</link><description>Recent content in Source Code 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/source-code/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></channel></rss>