一、LLM的能力与局限

当你第一次使用Claude或ChatGPT时,你可能会惊叹于它们的推理能力与质量。但很快你会发现一个致命缺陷: 它们无法接触现实世界 。

它们不能读取你的文件,不能运行你的测试,不能检查你的错误。每次你想让 AI 执行一个操作,都需要手动复制粘贴结果。想象一下,你被关在一个透明的玻璃房间里。你能看到外面的一切,能分析一切,但就是摸不到。这就是LLM的处境。

LLM的能力:
      理解代码逻辑
      生成代码片段
      分析问题原因

LLM的局限:
      不能读取文件系统
      不能执行测试用例
      不能检查运行时错误
      不能调用外部 API

二、解决方法

传统的解决方案是什么?Human-in-the-loop—— 人工充当循环:

用户:"帮我修改这个文件"
LLM:"好的,这是修改后的代码..."
用户:(复制代码) (粘贴到文件) (保存)
用户:"运行一下测试"
LLM:"测试命令是pytest..."
用户:(复制命令) (粘贴到终端) (查看结果)
用户:"测试失败了,错误是..."
LLM:"让我修复..."

看到了吗? 你在做搬运工的工作 ,你成了那个循环

解决方案:Agent Loop
核心思想极其简单:

def agent_loop(query):
    messages = [{"role": "user", "content": query}]
    
    while True:
        # 1. 发送给 LLM
        response = client.messages.create(
            model="claude-3-opus",
            system=SYSTEM_PROMPT,
            messages=messages,
            tools=TOOLS,
            max_tokens=8000,
        )
        
        # 2. 保存 AI 回复
        messages.append({"role": "assistant", "content": response.content})
        
        # 3. 检查是否还需要调用工具
        if response.stop_reason != "tool_use":
            return  # AI 说完了,退出循环
            
        # 4. 执行工具调用,结果反馈给 AI
        results = []
        for block in response.content:
            if block.type == "tool_use":
                output = run_bash(block.input["command"])
                results.append({
                    "type": "tool_result",
                    "tool_use_id": block.id,
                    "content": output,
                })
        messages.append({"role": "user", "content": results})
        # 循环回到步骤 1

这就是全部。 不到 30 行代码,一个完整的 Agent 就诞生了。

三、逐步拆解

第一步:用户输入成为对话起点

messages = [{"role": "user", "content": "创建一个 hello.py 文件"}]

这就像你第一次跟 AI 说话。

第二步:LLM 决定行动
LLM 收到消息后,会返回两种内容:

文本回复:"好的,我来创建文件"
工具调用:run_bash("touch hello.py")

第三步:检查停止条件

if response.stop_reason != "tool_use":
    return

这是 整个循环的灵魂 。当 AI 不再需要调用工具时(任务完成),循环自动退出。

第四步:执行并反馈
工具执行结果被包装成新的"用户消息"反馈给 AI:

messages.append({
    "role": "user", 
    "content": [{"type": "tool_result", "content": "文件已创建"}]
})

然后循环继续,AI 根据结果决定下一步行动。

四、关键设计决策

1. 为什么只有一个 Bash 工具?
简单就是力量。一个 Bash 工具可以做任何事情:

创建文件: echo "print('hello')" > hello.py
运行测试: pytest tests/
查看目录: ls -la
安装依赖: pip install requests

一个工具 = 无限可能

2. 为什么用 while True?
因为循环次数不可预测。有时 AI 一步就能完成,有时需要多次尝试:

用户:"修复这个 bug"
→ AI 读取文件
→ AI 分析问题  
→ AI 修改代码
→ AI 运行测试(失败)
→ AI 重新修改
→ AI 再次测试(成功)
→ AI 完成任务

3. 消息累积的意义
每次循环, messages 列表都在增长,这意味着:

AI记得 之前的操作
AI能从错误中学习
AI有完整的上下文

五、总结

AI Agent 的核心并不复杂。记住这个最简公式:

一个循环 + 一个工具 = 一个 Agent

上述30行循环是所有高级Agent的基础:

基础循环 (本文)
    ↓
+ 多工具支持 (文件读写、网络请求、数据库)
    ↓
+ 错误处理与重试机制
    ↓
+ 记忆系统 (长期记忆、向量检索)
    ↓
+ 多 Agent 协作
    ↓
+ 人类监督与干预

我们可以推广到更加复杂的Agent上,但核心循环永远不变。

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐