<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://www.anwsome.com//index.php?action=history&amp;feed=atom&amp;title=30%E8%A1%8C%E4%BB%A3%E7%A0%81%E6%9E%84%E5%BB%BA%E4%BD%A0%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AAAI_Agent</id>
	<title>30行代码构建你的第一个AI Agent - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://www.anwsome.com//index.php?action=history&amp;feed=atom&amp;title=30%E8%A1%8C%E4%BB%A3%E7%A0%81%E6%9E%84%E5%BB%BA%E4%BD%A0%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AAAI_Agent"/>
	<link rel="alternate" type="text/html" href="http://www.anwsome.com//index.php?title=30%E8%A1%8C%E4%BB%A3%E7%A0%81%E6%9E%84%E5%BB%BA%E4%BD%A0%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AAAI_Agent&amp;action=history"/>
	<updated>2026-04-15T01:35:48Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>http://www.anwsome.com//index.php?title=30%E8%A1%8C%E4%BB%A3%E7%A0%81%E6%9E%84%E5%BB%BA%E4%BD%A0%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AAAI_Agent&amp;diff=110&amp;oldid=prev</id>
		<title>Admin：​创建页面，内容为“&lt;blockquote&gt;&quot;One loop &amp; Bash is all you need&quot; —— 一个工具 + 一个循环 = 一个智能体。&lt;/blockquote&gt;在前一篇文章中，我们理解了 Agent 的本质：&#039;&#039;&#039;Agent 是模型，Harness 是框架&#039;&#039;&#039;。今天，让我们动手构建最简单的 Agent Harness。  只需要 30 行 Python 代码，你就能拥有一个真正能与现实世界交互的 AI Agent。  == 一、问题：模型被困在象牙塔里 == 大语言模型能推理代码，但…”</title>
		<link rel="alternate" type="text/html" href="http://www.anwsome.com//index.php?title=30%E8%A1%8C%E4%BB%A3%E7%A0%81%E6%9E%84%E5%BB%BA%E4%BD%A0%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AAAI_Agent&amp;diff=110&amp;oldid=prev"/>
		<updated>2026-03-23T04:56:27Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“&amp;lt;blockquote&amp;gt;&amp;quot;One loop &amp;amp; Bash is all you need&amp;quot; —— 一个工具 + 一个循环 = 一个智能体。&amp;lt;/blockquote&amp;gt;在前一篇文章中，我们理解了 Agent 的本质：&amp;#039;&amp;#039;&amp;#039;Agent 是模型，Harness 是框架&amp;#039;&amp;#039;&amp;#039;。今天，让我们动手构建最简单的 Agent Harness。  只需要 30 行 Python 代码，你就能拥有一个真正能与现实世界交互的 AI Agent。  == 一、问题：模型被困在象牙塔里 == 大语言模型能推理代码，但…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;&amp;quot;One loop &amp;amp; Bash is all you need&amp;quot; —— 一个工具 + 一个循环 = 一个智能体。&amp;lt;/blockquote&amp;gt;在前一篇文章中，我们理解了 Agent 的本质：&amp;#039;&amp;#039;&amp;#039;Agent 是模型，Harness 是框架&amp;#039;&amp;#039;&amp;#039;。今天，让我们动手构建最简单的 Agent Harness。&lt;br /&gt;
&lt;br /&gt;
只需要 30 行 Python 代码，你就能拥有一个真正能与现实世界交互的 AI Agent。&lt;br /&gt;
&lt;br /&gt;
== 一、问题：模型被困在象牙塔里 ==&lt;br /&gt;
大语言模型能推理代码，但碰不到真实世界——不能读文件、跑测试、看报错。&lt;br /&gt;
&lt;br /&gt;
没有循环，每次工具调用你都得手动把结果粘回去。&amp;#039;&amp;#039;&amp;#039;你自己就是那个循环。&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
这既不优雅，也不可扩展。我们需要让模型能够自主地与工具交互，形成一个闭环。&lt;br /&gt;
&lt;br /&gt;
== 二、解决方案：Agent 循环 ==&lt;br /&gt;
核心思想很简单：&lt;br /&gt;
 &amp;lt;code&amp;gt;+--------+      +-------+      +---------+&lt;br /&gt;
 |  User  | ---&amp;gt; |  LLM  | ---&amp;gt; |  Tool   |&lt;br /&gt;
 | prompt |      |       |      | execute |&lt;br /&gt;
 +--------+      +---+---+      +----+----+&lt;br /&gt;
                     ^                |&lt;br /&gt;
                     |   tool_result  |&lt;br /&gt;
                     +----------------+&lt;br /&gt;
               (loop until stop_reason != &amp;quot;tool_use&amp;quot;)&amp;lt;/code&amp;gt;&lt;br /&gt;
一个退出条件控制整个流程。循环持续运行，直到模型不再调用工具。&lt;br /&gt;
&lt;br /&gt;
== 三、工作原理 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. 用户 prompt 作为第一条消息 ===&lt;br /&gt;
 &amp;lt;code&amp;gt;messages.append({&amp;quot;role&amp;quot;: &amp;quot;user&amp;quot;, &amp;quot;content&amp;quot;: query})&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. 将消息和工具定义一起发给 LLM ===&lt;br /&gt;
 &amp;lt;code&amp;gt;response = client.messages.create(&lt;br /&gt;
     model=MODEL, system=SYSTEM, messages=messages,&lt;br /&gt;
     tools=TOOLS, max_tokens=8000,&lt;br /&gt;
 )&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. 追加助手响应，检查 stop_reason ===&lt;br /&gt;
 &amp;lt;code&amp;gt;messages.append({&amp;quot;role&amp;quot;: &amp;quot;assistant&amp;quot;, &amp;quot;content&amp;quot;: response.content})&lt;br /&gt;
 if response.stop_reason != &amp;quot;tool_use&amp;quot;:&lt;br /&gt;
     return&amp;lt;/code&amp;gt;&lt;br /&gt;
如果模型没有调用工具，任务完成。&lt;br /&gt;
&lt;br /&gt;
=== 4. 执行每个工具调用，收集结果，作为 user 消息追加，回到第 2 步 ===&lt;br /&gt;
 &amp;lt;code&amp;gt;results = []&lt;br /&gt;
 for block in response.content:&lt;br /&gt;
     if block.type == &amp;quot;tool_use&amp;quot;:&lt;br /&gt;
         output = run_bash(block.input[&amp;quot;command&amp;quot;])&lt;br /&gt;
         results.append({&lt;br /&gt;
             &amp;quot;type&amp;quot;: &amp;quot;tool_result&amp;quot;,&lt;br /&gt;
             &amp;quot;tool_use_id&amp;quot;: block.id,&lt;br /&gt;
             &amp;quot;content&amp;quot;: output,&lt;br /&gt;
         })&lt;br /&gt;
 messages.append({&amp;quot;role&amp;quot;: &amp;quot;user&amp;quot;, &amp;quot;content&amp;quot;: results})&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 四、完整代码 ==&lt;br /&gt;
组装为一个完整函数：&lt;br /&gt;
 &amp;lt;code&amp;gt;def agent_loop(query):&lt;br /&gt;
     messages = [{&amp;quot;role&amp;quot;: &amp;quot;user&amp;quot;, &amp;quot;content&amp;quot;: query}]&lt;br /&gt;
     while True:&lt;br /&gt;
         response = client.messages.create(&lt;br /&gt;
             model=MODEL, system=SYSTEM, messages=messages,&lt;br /&gt;
             tools=TOOLS, max_tokens=8000,&lt;br /&gt;
         )&lt;br /&gt;
         messages.append({&amp;quot;role&amp;quot;: &amp;quot;assistant&amp;quot;, &amp;quot;content&amp;quot;: response.content})&lt;br /&gt;
 &lt;br /&gt;
         if response.stop_reason != &amp;quot;tool_use&amp;quot;:&lt;br /&gt;
             return&lt;br /&gt;
 &lt;br /&gt;
         results = []&lt;br /&gt;
         for block in response.content:&lt;br /&gt;
             if block.type == &amp;quot;tool_use&amp;quot;:&lt;br /&gt;
                 output = run_bash(block.input[&amp;quot;command&amp;quot;])&lt;br /&gt;
                 results.append({&lt;br /&gt;
                     &amp;quot;type&amp;quot;: &amp;quot;tool_result&amp;quot;,&lt;br /&gt;
                     &amp;quot;tool_use_id&amp;quot;: block.id,&lt;br /&gt;
                     &amp;quot;content&amp;quot;: output,&lt;br /&gt;
                 })&lt;br /&gt;
         messages.append({&amp;quot;role&amp;quot;: &amp;quot;user&amp;quot;, &amp;quot;content&amp;quot;: results})&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;不到 30 行，这就是整个智能体。&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
后面所有复杂的机制（规划、子 Agent、任务系统、团队协作）都是在这个循环上叠加的——&amp;#039;&amp;#039;&amp;#039;循环本身始终不变&amp;#039;&amp;#039;&amp;#039;。&lt;br /&gt;
&lt;br /&gt;
== 五、核心组件 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!组件&lt;br /&gt;
!作用&lt;br /&gt;
|-&lt;br /&gt;
|Agent loop&lt;br /&gt;
|&amp;lt;code&amp;gt;while True&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;stop_reason&amp;lt;/code&amp;gt; 检查&lt;br /&gt;
|-&lt;br /&gt;
|Tools&lt;br /&gt;
|从 &amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt; 开始，单一工具足矣&lt;br /&gt;
|-&lt;br /&gt;
|Messages&lt;br /&gt;
|累积式消息列表，记录完整对话历史&lt;br /&gt;
|-&lt;br /&gt;
|Control flow&lt;br /&gt;
|&amp;lt;code&amp;gt;stop_reason != &amp;quot;tool_use&amp;quot;&amp;lt;/code&amp;gt; 决定退出&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 六、试一试 ==&lt;br /&gt;
 &amp;lt;code&amp;gt;git clone &amp;lt;nowiki&amp;gt;https://github.com/shareAI-lab/learn-claude-code&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 cd learn-claude-code&lt;br /&gt;
 python agents/s01_agent_loop.py&amp;lt;/code&amp;gt;&lt;br /&gt;
试试这些 prompt：&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Create a file called hello.py that prints &amp;quot;Hello, World!&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;List all Python files in this directory&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;What is the current git branch?&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Create a directory called test_output and write 3 files in it&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
你会看到 Agent 自主地调用 Bash 工具，执行命令，读取结果，然后决定下一步做什么，直到任务完成。&lt;br /&gt;
&lt;br /&gt;
== 七、关键洞察 ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;模型决定什么时候调用工具，什么时候停止。&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
代码只是执行模型要求做的事。这个循环属于 Agent，机制属于 Harness。&lt;br /&gt;
&lt;br /&gt;
这个看似简单的循环是所有现代 AI Agent（包括 Claude Code、Devin、OpenCode）的基础。无论 Agent 多复杂，核心都是这个循环：&lt;br /&gt;
 &amp;lt;code&amp;gt;messages[] --&amp;gt; LLM --&amp;gt; response&lt;br /&gt;
                |&lt;br /&gt;
       stop_reason == &amp;quot;tool_use&amp;quot;?&lt;br /&gt;
          /         \&lt;br /&gt;
       yes            no&lt;br /&gt;
        |              |&lt;br /&gt;
   执行工具       返回文本&lt;br /&gt;
   追加结果&lt;br /&gt;
   循环回去 ----------&amp;gt; messages[]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 八、下一步 ==&lt;br /&gt;
这只是一个开始。在这个基础上，我们将逐步添加：&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;工具扩展&amp;#039;&amp;#039;&amp;#039;：不只 Bash，还有文件读写、代码编辑、搜索&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;规划能力&amp;#039;&amp;#039;&amp;#039;：让 Agent 列步骤再执行&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;子 Agent&amp;#039;&amp;#039;&amp;#039;：大任务拆小，上下文隔离&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;知识加载&amp;#039;&amp;#039;&amp;#039;：按需注入领域知识&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;上下文压缩&amp;#039;&amp;#039;&amp;#039;：处理长对话&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;任务系统&amp;#039;&amp;#039;&amp;#039;：持久化的目标管理&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;团队协作&amp;#039;&amp;#039;&amp;#039;：多 Agent 并行工作&lt;br /&gt;
&lt;br /&gt;
但在那之前，&amp;#039;&amp;#039;&amp;#039;先掌握这个循环&amp;#039;&amp;#039;&amp;#039;。理解它，你就理解了 Agent 的本质。&lt;br /&gt;
----&amp;#039;&amp;#039;Bash 就够了。真正的 Agent 是宇宙所需要的全部。&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;延伸阅读&amp;#039;&amp;#039;&amp;#039;：learn-claude-code 开源项目，12 个渐进式教程，从简单循环到隔离式自主执行。&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>