<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SWE-Agent on Time Friend</title><link>https://time-friend.com/zh/tags/swe-agent/</link><description>Recent content in SWE-Agent on Time Friend</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Wed, 02 Sep 2026 09:30:00 +0000</lastBuildDate><atom:link href="https://time-friend.com/zh/tags/swe-agent/index.xml" rel="self" type="application/rss+xml"/><item><title>大模型能写代码, 靠的是一个简单循环</title><link>https://time-friend.com/zh/archive/agent-loop-coding-agents/</link><pubDate>Wed, 02 Sep 2026 09:30:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/agent-loop-coding-agents/</guid><description>&lt;p&gt;我读 &lt;a href="https://github.com/google-gemini/gemini-cli"&gt;Gemini CLI&lt;/a&gt; 源码, 起因很具体: 去年我在公司内部做了一个 Code Agent 产品, 给它设计循环机制的时候, 我想知道一个已经跑在大量开发者终端上的开源实现是怎么做的, 于是把 Gemini CLI 的核心目录翻了一遍。&lt;/p&gt;
&lt;p&gt;翻完的结论出乎意料: 最核心的东西非常小——就是一个循环。模型说话, 发起工具调用, 拿到工具结果, 再说话。其余的一切, 审批、上下文压缩、循环检测、预算控制、模型降级, 全是围着这个循环做的外围工程。我后来自己搭产品, 也是先把这个循环立起来, 再逐个补护栏。连&amp;quot;下一句话该谁说&amp;quot;这种问题, 也只是循环里的一个判定点: 模型说完而没发起工具调用时, 一个轻量模型会被叫来判一次&amp;quot;该继续还是该交还用户&amp;quot;, 判&amp;quot;继续&amp;quot;就自动接一轮。&lt;/p&gt;
&lt;p&gt;这个结论在源码里有多简单, 可以用三个细节说明。Turn 类把一次模型调用包装成事件流, 事件类型在源码里就是一个枚举——从文本流、工具调用请求到循环检测、会话轮数到顶, 覆盖了循环可能遇到的每一类情形。client.ts 里写死一个 MAX_TURNS = 100, 给这个递归加硬上限。next-speaker-checker 的判定提示里只有三条规则: 上一条回复说了接下来要做什么, 模型接着说; 以向用户的提问结尾, 交还用户; 除此之外, 交还用户。一个让大模型自主干活的系统, 它的决策点就是这几行。&lt;/p&gt;


&lt;div class="mermaid-wrap"&gt;
&lt;pre class="mermaid" role="img" aria-label="Mermaid diagram"&gt;flowchart TB
 A[用户请求] --&amp;gt; B[模型说话&amp;lt;br/&amp;gt;可能发起工具调用]
 B --&amp;gt; C{发起了&amp;lt;br/&amp;gt;工具调用?}
 C --&amp;gt;|是| D[调度器执行工具&amp;lt;br/&amp;gt;结果写回历史]
 D --&amp;gt; B
 C --&amp;gt;|否| E[Next Speaker 判定&amp;lt;br/&amp;gt;轻量模型决策]
 E --&amp;gt;|模型继续| B
 E --&amp;gt;|交还用户| F[控制权回到输入框]&lt;/pre&gt;
&lt;/div&gt;


&lt;script type="module"&gt;
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
mermaid.initialize({
 startOnLoad: false,
 theme: 'base',
 themeVariables: {
 background: '#1d1f21',
 primaryColor: '#282c34',
 primaryBorderColor: '#3e4147',
 primaryTextColor: '#c9cacc',
 lineColor: '#5a5f66',
 edgeLabelBackground: '#1d1f21'
 }
});
mermaid.run({ querySelector: 'pre.mermaid' });
&lt;/script&gt;


&lt;p&gt;Anthropic 在&lt;a href="https://www.anthropic.com/engineering/building-effective-agents"&gt;《Building effective agents》&lt;/a&gt;里把这个事实写得很直白: agent 通常就是&amp;quot;大模型在循环里依据环境反馈使用工具&amp;quot;。那接下来的三个问题就值得认真回答了: 这套机制从哪来? 为什么它偏偏在写代码这件事上威力这么大? 现在的 coding agent 是不是都在这么跑?&lt;/p&gt;</description></item></channel></rss>