70 lines
3.0 KiB
Plaintext
70 lines
3.0 KiB
Plaintext
---
|
||
title: "Agentic Loop:AI 自主循环的核心机制"
|
||
description: "深入解析 Claude Code 的 Agentic Loop 机制——AI 如何通过思考-行动-观察的循环,自主决策工具调用链,直到任务完成。包含源码级流程分析。"
|
||
keywords: ["Agentic Loop", "AI 循环", "工具调用", "自主决策", "ReAct 模式"]
|
||
---
|
||
|
||
{/* 本章目标:解释 Agentic Loop 这个核心机制 */}
|
||
|
||
## 什么是 Agentic Loop
|
||
|
||
传统聊天机器人:你问一句,它答一句。
|
||
Claude Code 不一样:你说一个需求,它可能连续执行十几步操作才给你最终结果。
|
||
|
||
这背后的机制叫做 **Agentic Loop**(智能体循环):
|
||
|
||
<Frame caption="Agentic Loop 循环示意">
|
||
<img src="/docs/images/agentic-loop.png" alt="Agentic Loop 循环图" />
|
||
</Frame>
|
||
|
||
<Steps>
|
||
<Step title="思考">
|
||
AI 分析当前上下文,决定下一步该做什么
|
||
</Step>
|
||
<Step title="行动">
|
||
AI 发出工具调用请求(比如"读取这个文件"、"执行这条命令")
|
||
</Step>
|
||
<Step title="观察">
|
||
工具执行完毕,结果回传给 AI
|
||
</Step>
|
||
<Step title="循环或结束">
|
||
AI 根据观察结果决定:继续下一步操作,还是任务已完成、直接回答用户
|
||
</Step>
|
||
</Steps>
|
||
|
||
## 一个真实的例子
|
||
|
||
> 用户:"帮我找到项目里所有未使用的导入语句,然后删掉它们"
|
||
|
||
AI 的内部过程:
|
||
|
||
1. **思考**:我需要先了解项目结构 → **行动**:调用 Glob 工具扫描所有源文件
|
||
2. **观察**:拿到文件列表 → **思考**:逐个检查 → **行动**:调用 Grep 搜索 import 语句
|
||
3. **观察**:发现 3 个文件有未使用导入 → **行动**:调用 FileEdit 逐个删除
|
||
4. **观察**:编辑成功 → **结束**:告诉用户"已清理 3 个文件中的 5 条未使用导入"
|
||
|
||
整个过程可能涉及 10+ 次工具调用,但用户只需要说一句话。
|
||
|
||
## 为什么不是"一次规划,批量执行"
|
||
|
||
<Note>
|
||
一个常见的替代方案是:AI 先生成一个完整的计划,然后一次性执行所有步骤。Claude Code 选择了逐步循环,原因是:
|
||
</Note>
|
||
|
||
- **每一步都能看到真实结果**:文件内容、命令输出、错误信息——这些只有执行后才知道
|
||
- **动态调整**:如果第 3 步发现了意外情况,AI 可以立刻改变策略
|
||
- **错误恢复**:某步失败了,AI 可以当场诊断和修复,不需要推倒重来
|
||
- **用户可控**:用户可以在任何一步中断,AI 的循环不会失控
|
||
|
||
## 循环的终止条件
|
||
|
||
Agentic Loop 不会无限运行,以下情况会让循环停止:
|
||
|
||
| 条件 | 说明 |
|
||
|------|------|
|
||
| AI 主动结束 | AI 判断任务完成,返回纯文本回答(不再调用工具) |
|
||
| 用户中断 | 用户按 Ctrl+C 或 ESC 打断当前操作 |
|
||
| Token 预算耗尽 | 单轮对话的 token 用量达到上限 |
|
||
| 输出过长自动续写 | AI 回复被截断时,系统自动发起续写请求(有次数上限) |
|
||
| 成本上限 | 累计 API 花费超过用户设定的预算 |
|