<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tool-Calling on CAO ZUOHUA</title><link>https://caozuohua.github.io/tags/tool-calling/</link><description>Recent content in Tool-Calling on CAO ZUOHUA</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Thu, 17 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://caozuohua.github.io/tags/tool-calling/index.xml" rel="self" type="application/rss+xml"/><item><title>Agent 开发实践：基于 simple-agent 的循环构建与工具调用</title><link>https://caozuohua.github.io/posts/2026-09-17-simple-agent-loop/</link><pubDate>Thu, 17 Sep 2026 00:00:00 +0000</pubDate><guid>https://caozuohua.github.io/posts/2026-09-17-simple-agent-loop/</guid><description>&lt;p&gt;在 AI Agent 的开发中，一个健壮的 Loop 循环（Agent Loop）是其处理复杂任务的核心。&lt;code&gt;simple-agent&lt;/code&gt; 作为一款轻量级框架，通过其简洁的接口将 LLM、工具（Tools）和状态（Context）有机结合。&lt;/p&gt;&#10;&lt;p&gt;本文将调研 &lt;code&gt;simple-agent&lt;/code&gt; 的核心接口，构建一套完备的 Agent Loop 示例，并解析其背后的设计逻辑。&lt;/p&gt;&#10;&lt;h2 id="核心接口分析"&gt;核心接口分析&lt;/h2&gt;&#10;&lt;p&gt;&lt;code&gt;simple-agent&lt;/code&gt; 的设计哲学是“去重型化”，其核心接口围绕着 &lt;code&gt;Agent&lt;/code&gt; 类展开：&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;Agent()&lt;/code&gt; 初始化&lt;/strong&gt;：支持自定义 LLM 配置（通过 LiteLLM 支持 100+ 模型）、System Prompt 以及工具目录。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;run(task)&lt;/code&gt;&lt;/strong&gt;：单轮任务执行，适合一次性的问答或任务。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;code&gt;chat(message)&lt;/code&gt;&lt;/strong&gt;：多轮会话管理，自动维护 Context 状态，这是实现“Agent 记忆”的关键。&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Skills System&lt;/strong&gt;：支持 Tier 1（元数据）到 Tier 2（指令）的渐进式加载，有效减少 token 消耗。&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h2 id="完备的-agent-loop-示例"&gt;完备的 Agent Loop 示例&lt;/h2&gt;&#10;&lt;p&gt;以下代码展示了一个具备工具调用与上下文感知的 Agent 运行逻辑：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;from&lt;/span&gt; simple_agent &lt;span style="color:#f92672"&gt;import&lt;/span&gt; SimpleAgent&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 1. 初始化：设置模型与行为约束&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;agent &lt;span style="color:#f92672"&gt;=&lt;/span&gt; SimpleAgent(&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; model&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;openrouter/anthropic/claude-3.5-sonnet&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; system_prompt&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;你是一个能够执行网络诊断的专业 AI 助理。&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; enable_skills&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 2. 模拟真实 Agent Loop&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;run_agent_loop&lt;/span&gt;(task: str):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;--- 任务开始: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;task&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt; ---&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 获取初始结果&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; response &lt;span style="color:#f92672"&gt;=&lt;/span&gt; agent&lt;span style="color:#f92672"&gt;.&lt;/span&gt;run(task)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# 3. 循环判断与迭代（模拟生产逻辑）&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; iterations &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; &lt;span style="color:#f92672"&gt;not&lt;/span&gt; response[&lt;span style="color:#e6db74"&gt;&amp;#39;success&amp;#39;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;and&lt;/span&gt; iterations &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;:&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;迭代 &lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;iterations&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;: 尝试自我修正...&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; response &lt;span style="color:#f92672"&gt;=&lt;/span&gt; agent&lt;span style="color:#f92672"&gt;.&lt;/span&gt;chat(&lt;span style="color:#e6db74"&gt;&amp;#34;请根据之前的错误重新规划你的工具调用。&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; iterations &lt;span style="color:#f92672"&gt;+=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; response[&lt;span style="color:#e6db74"&gt;&amp;#39;result&amp;#39;&lt;/span&gt;]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 执行&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;result &lt;span style="color:#f92672"&gt;=&lt;/span&gt; run_agent_loop(&lt;span style="color:#e6db74"&gt;&amp;#34;检查 google.com 的连接性，并根据结果提供建议&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(&lt;span style="color:#e6db74"&gt;f&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;最终结果: &lt;/span&gt;&lt;span style="color:#e6db74"&gt;{&lt;/span&gt;result&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="关键技术解读"&gt;关键技术解读&lt;/h2&gt;&#10;&lt;h3 id="1-状态维持与内存"&gt;1. 状态维持与“内存”&lt;/h3&gt;&#10;&lt;p&gt;LLM 本身是无状态的，Agent 的“记忆”完全依赖于 &lt;code&gt;SimpleAgent&lt;/code&gt; 类内部的对话历史管理。在 &lt;code&gt;chat()&lt;/code&gt; 接口调用时，框架会自动把最新的交互追加到历史列表中，并重新作为整个上下文发送给 LLM。这种实现方式确保了 Agent 的一致性。&lt;/p&gt;</description></item></channel></rss>