学习来源
核心资料
OpenAI官方指南:A Practical Guide to Building Agents
延伸阅读
AI Agent最佳实践(掘金)、AI Agent终极落地手册(51CTO)
学习目标
建立AI Agent规范化工作的核心方法论,避免重复犯错
一、核心工作流程
OpenAI定义的Agent工作循环:
感知 → 规划 → 执行 → 观察 → 反思 → 输出
1.1 感知与理解
- 目标解析:理解用户真实意图,不只是字面意思
- 信息处理:提取关键信息,分类整理
- 上下文理解:结合历史记忆理解当前任务
1.2 规划与决策
- 任务分解:将复杂任务拆解成可执行子任务
- 工具选择:决定使用哪个工具/API
- 优先级排序:确定执行顺序
1.3 执行与行动
- 工具调用:根据规划调用外部工具
- 内容生成:生成文本、代码等
- 信息获取:查询、检索所需数据
1.4 观察与评估(关键!)
- 结果收集:收集执行后的输出
- 目标比对:将结果与预期目标对比
- 状态评估:判断任务是否完成
- ⚠ 这是今天犯错的关键:没有验证就说完成
1.5 反思与学习
- 问题诊断:分析失败原因
- 计划调整:动态调整后续策略
- 记忆更新:将经验写入记忆
二、可靠性设计(与今天错误直接相关)
2.1 强制验证层
我需要实现的验证机制:
def complete_task():
# 执行任务
result = execute()
# 验证(今天缺的)
if not verify_all_files():
return "任务未完成,还有X个文件待处理"
# 确认部署
if not verify_deployment():
return "部署版本过时,需要重新部署"
return "任务完成"
2.2 状态管理
class AgentState:
# 短期记忆:当前会话
conversation_history: List[Message]
# 工作记忆:当前任务
current_task: Optional[Task]
task_context: dict
# 长期记忆:持久化
user_preferences: dict
learned_patterns: dict
2.3 错误处理机制
- 重试机制:对可能失败的操作实现自动重试
- 超时控制:所有工具调用都有超时限制
- 熔断器:防止级联失败
class CircuitBreaker:
def __init__(self, failure_threshold=5, recovery_timeout=60):
self.failures = 0
self.failure_threshold = failure_threshold
self.recovery_timeout = recovery_timeout
self.last_failure_time = None
self.state = "closed" # closed, open, half-open
async def execute(self, tool, params):
if self.state == "open":
if time.time() - self.last_failure_time > self.recovery_timeout:
self.state = "half-open"
else:
return Result(success=False, error="服务暂时不可用")
result = await tool.execute(**params)
if result.success:
self.failures = 0
self.state = "closed"
else:
self.failures += 1
self.last_failure_time = time.time()
if self.failures >= self.failure_threshold:
self.state = "open"
return result
三、工具集成最佳实践
3.1 工具描述要精确
LLM依赖工具描述来理解如何使用工具。
好的描述:
{
"name": "search_web",
"description": "搜索互联网获取最新信息。适用于:需要实时信息、新闻、数据查询。不适用于:编程问题、数学计算。",
"parameters": {
"query": {
"type": "string",
"description": "搜索关键词,使用简洁的英文短语效果更好"
},
"count": {
"type": "integer",
"description": "返回结果数量,1-10之间",
"default": 5
}
}
}
差的描述:
{
"name": "search_web",
"description": "搜索网络", # 太模糊
"parameters": {
"query": {
"type": "string" # 没有描述
}
}
}
3.2 参数验证
def execute(self, **kwargs):
# 类型检查
if not isinstance(kwargs.get('query'), str):
return Result(success=False, error="query must be string")
# 范围检查
count = kwargs.get('count', 5)
if not 1 <= count <= 10:
return Result(success=False, error="count must be 1-10")
# 必填检查
if not kwargs.get('query'):
return Result(success=False, error="query is required")
# 执行实际逻辑...
3.3 错误处理
class RobustTool:
def execute(self, **kwargs):
try:
result = self._do_execute(**kwargs)
return Result(success=True, data=result)
except NetworkError as e:
return Result(
success=False,
error="网络错误,请稍后重试",
retryable=True
)
except RateLimitError as e:
return Result(
success=False,
error="请求过于频繁,请等待30秒",
retry_after=30
)
except Exception as e:
# 记录详细错误日志
logger.error(f"Tool {self.name()} failed: {e}")
return Result(
success=False,
error="内部错误,请联系支持"
)
四、可观测性(让Agent行为可见)
4.1 结构化日志
import structlog
logger = structlog.get_logger()
async def execute_tool(tool, params):
log = logger.bind(
tool=tool.name(),
params=params,
request_id=get_request_id()
)
log.info("tool_execution_started")
start_time = time.time()
result = await tool.execute(**params)
duration = time.time() - start_time
log.info(
"tool_execution_completed",
success=result.success,
duration_ms=duration * 1000
)
return result
4.2 指标收集
- 任务完成率
- 工具调用准确率
- 平均时延
- 错误率
4.3 链路追踪
对复杂流程实现链路追踪,每一步都要记录,失败时能回溯。
五、Human-in-the-Loop(人机协同)
5.1 强制审批场景
- 不可逆操作(删除、退款、访问授权)
- 高风险操作(资金操作、权限变更)
5.2 人机协同原则
- 显示差异:显示将要改变什么,不只是解释
- 提供理由:"为什么这么做"的理由
- 一键升级:随时可以升级到人工处理
六、我的改进方案
6.1 常思杨四步工作法
扫描 → 行动 → 验证 → 部署
↓ ↓ ↓ ↓
清单化 脚本化 自动化 确认化
6.2 五条铁律
- 全局扫描优先:任何涉及多文件的修改,必须先扫描所有文件
- 批量处理原则:超过3个文件的修改,必须写脚本批量处理
- 强制验证:修改完成后,必须验证所有文件都已更新
- 部署前检查:部署后必须访问验证,不能等用户发现
- 记录教训:每次失败都要记录,避免重复犯错
6.3 每日自查清单
- [ ] 今天修改了什么文件?有清单吗?
- [ ] 用脚本批量处理了吗?
- [ ] 验证所有文件都修改成功了吗?
- [ ] 部署后线上验证了吗?
- [ ] 有犯重复错误吗?
- [ ] 学到的知识用上了吗?
只有6个都是
,才算合格的一天。
七、核心原则总结
- 全局思维 - 先扫描,再行动
- 批量处理 - 写脚本,不手动
- 强制验证 - 用命令,不声称
- 知识转化 - 学必用,不用白学
- 记录失败 - 记下来,不重复
一句话总结:
不做就不做,做就要全局扫描、批量处理、强制验证、确认上线。