AI Agents 实战笔记:从 Prompt 到自主决策的进化
🤖 “AI 不会取代你,但会用 AI 的人会。”
🎯 为什么开始折腾 Agent
2026 年初,Claude Code 和各类 AI 编程工具已经很好用,但它们有个共同的局限——只能响应,不能行动。
我想让 AI 能够:
- 自动爬取数据、分析、产出日报
- 监控服务器状态并自主决策是否重启
- 在多个信息源之间协调,完成端到端的工作流
于是我花了三个月,从零搭了一套 Agent 系统。这篇文章记录过程中最值得分享的东西。
🧱 架构演进
Phase 1:Function Calling 链路
最初的想法很简单——让 LLM 调用工具:
1 | 用户意图 → LLM 理解 → 选择 Tool → 执行 → 结果回传 → LLM 总结 |
这个阶段用了两个星期就跑通了。核心组件:
- Tool Registry:一个 Tool 定义,用 JSON Schema 描述参数
- Executor:沙箱化的 Python/Shell 执行环境
- Loop Controller:控制 LLM ↔ Tool 的往返次数上限
Phase 2:Memory & Context
第一个问题很快出现了:Agent 记不住上下文。
单次对话的理想很丰满,现实是每次调用都要重新描述一遍环境和目标。解决方案借鉴了人脑的工作方式:
- Working Memory(工作记忆):当前会话的完整上下文,直接注入 prompt
- Short-term Memory(短期记忆):最近 N 轮对话的摘要,用 LLM 自动压缩
- Long-term Memory(长期记忆):向量数据库存储的历史经验,按需检索
1 | # 记忆检索的核心逻辑 |
Phase 3:Multi-Agent 协作
单 Agent 的瓶颈在于「万能胶」式的 prompt 太长,质量下降明显。改成了多 Agent 模式:
| Agent | 职责 |
|---|---|
| Planner | 拆解用户目标为子任务,分配给 Specialist |
| Coder | 编写和执行代码,处理数据 |
| Researcher | 联网搜索、阅读文档、提取信息 |
| Critic | 审查其他 Agent 的输出,检查逻辑一致性 |
关键是 Critic Agent——它让我在测试中发现了 Planner 经常过度乐观地估计某个子任务已完成的 bug。
📉 三个最大的坑
1. Token 消耗黑洞
多 Agent 意味着每次交互都在消耗大量 token。优化后我把日均消耗从 $12 降到了 $3:
- Planner 用轻量模型(Claude Sonnet),Coder 用旗舰模型
- 工具返回结果做了截断 + 结构化摘要,而不是原样传回
- 加入 Early Exit 逻辑:简单任务跳过 Planner 直接执行
2. 工具调用的「幻觉」
LLM 有时会调用不存在的工具,或者给工具传了不合理的参数。我的应对:
- Tool Registry 在每次请求时动态注入当前可用工具列表
- 工具结果必须包含
error字段,Agent 据此决定是否重试 - 设置 hard limit:单次任务最多调用 8 次工具
3. 安全边界
让 AI 执行 Shell 命令是危险的。做了三层防护:
- 命令白名单 + 危险模式正则拦截
- Docker 沙箱运行所有 exec 指令
- 所有操作记录到审计日志,Alert 异常行为
✅ 现在的效果
三个月的迭代后,Agent 已经能实际承担工作:
| 场景 | 效果 |
|---|---|
| 每日技术新闻摘要 | 自动抓取 HN / Reddit / 少数派 → 分类 → 输出日报 |
| 服务器健康巡检 | 每 4 小时检查关键指标,异常自动告警 |
| 代码 PR Review 辅助 | 自动跑测试、检查代码规范、生成 review 建议 |
最大的感受:Agent 不是替代人类决策,而是压缩「信息 → 决策」之间的距离。它让我从「查数据 → 分析 → 写结论」变成了「读结论 → 做判断」。
🔭 下一步
- 探索 Agent-to-Agent 协议,让不同系统的 Agent 可以互操作
- 接入更多私有数据源(笔记、代码仓库、阅读记录)
- 尝试让 Agent 参与长期项目,而不仅仅是单次任务
💡 如果你也在做 Agent 相关的东西,或者对某个细节感兴趣——欢迎在评论区交流。