<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Agent on Time Friend</title><link>https://time-friend.com/zh/tags/agent/</link><description>Recent content in 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/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><item><title>把博客开放给 AI：Allow Policy, Readability, 还有 Agent Discovery</title><link>https://time-friend.com/zh/archive/blog-content-ai-friendly/</link><pubDate>Fri, 15 Aug 2025 10:00:00 +0000</pubDate><guid>https://time-friend.com/zh/archive/blog-content-ai-friendly/</guid><description>&lt;p&gt;前几天在 Cloudflare 面板看了眼流量, 发现 AI 爬虫的请求占比已经不小了. ChatGPT, Perplexity 这些工具都会派爬虫来抓站点, 把内容喂给自己的模型, 用来检索和引用.&lt;/p&gt;
&lt;p&gt;这让我认真想了想: 博客内容到底要不要对 AI 开放? 开放了之后, 能不能做点什么, 让它们更好地理解我写了什么?&lt;/p&gt;
&lt;p&gt;这篇不聊具体某个博客框架怎么配, 只聊几个通用的常识. 不管用的是 Hugo, 还是 WordPress, 还是自己搭的, 都用得上.&lt;/p&gt;
&lt;h1 id="想清楚要不要放行-ai"&gt;想清楚要不要放行 AI&lt;/h1&gt;
&lt;p&gt;很多站长第一反应是拒绝. 担心内容被&amp;quot;偷走&amp;quot;, 担心 AI 回答抢走自己的流量.&lt;/p&gt;
&lt;p&gt;但换个角度想: AI 引用我的内容, 本质上是一种曝光. 别人问一个问题, AI 回答说&amp;quot;可以看看这篇文章&amp;quot;, 就多了一个入口. 个人博客的访问量本来就不靠搜索引擎一家, 被 AI 引用是免费的引流.&lt;/p&gt;
&lt;p&gt;除非我的内容有付费墙, 或者我明确不想让内容出现在 AI 回答里, 否则放行是划算的. 这个问题值得想清楚, 因为 &lt;code&gt;robots.txt&lt;/code&gt; 的默认行为往往已经替我做了决定——大多数博客什么都没配, 等于全部放行.&lt;/p&gt;
&lt;p&gt;想清楚了, 后面的事情才有意义.&lt;/p&gt;
&lt;h1 id="内容本身要对-ai-友好"&gt;内容本身要对 AI 友好&lt;/h1&gt;
&lt;p&gt;AI 读我的博客, 和搜索引擎爬虫不一样. 搜索引擎看重关键词和链接, 而 AI 要的是&amp;quot;能不能读懂&amp;quot;.&lt;/p&gt;
&lt;p&gt;有几个朴素的原则, 和技术栈无关:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;开头说清楚这篇讲什么&lt;/strong&gt;. AI 经常只读开头几段来做摘要. 如果前几行是寒暄和废话, 它给出的内容总结就只能是废话.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用平实的语言, 少绕弯子&lt;/strong&gt;. 故弄玄虚的标题和含糊的表述, 人类能猜出来, AI 猜不准.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;标题要能概括内容&lt;/strong&gt;. 一个&amp;quot;XX 踩坑记&amp;quot;式的标题, 不如&amp;quot;怎么解决 XX 问题&amp;quot;来得明确.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些都不需要会写代码, 只需要有这个意识.&lt;/p&gt;</description></item></channel></rss>