Agent一致性:让AI不跑偏的艺术
有个开发者在HN上说他用Codex跑了一个32天的任务,消耗了超过4亿个Token,而且自从升级到GPT-5.4之后一直稳如老狗。32天。4亿Token。我的第一反应不是"卧槽好厉害",而是"这玩意儿怎么没跑偏的?"
世界上有一种一致性叫Agent Consistency,它在0和1之间游走,一不小心就会迷失在混沌中。
什么是Agent一致性?
Agent一致性(Agent Consistency)指的是AI Agent在长时间、多步骤的任务执行过程中,保持行为、决策和输出质量稳定不变的能力。
通俗地说,就是让AI做到:你让它做什么,它从头到尾都做什么;你让它怎么做,它从头到尾都怎么做。
听起来简单?那是因为你没试过让AI连续跑3天任务。
就像你跟朋友说"帮我看着火锅",刚开始他认真看着,5分钟后开始刷手机,10分钟后火锅溢了,15分钟后他问你"是不是该加水了?"。AI也一样——任务越久,注意力越飘。
Agent为什么会跑偏?
1. 上下文遗忘(Context Decay)
AI没有真正的长期记忆。当对话越来越长,早期的指令会被"稀释"。就像你一边看剧一边写代码,写到最后可能忘了自己要写什么功能。
# 第1步(任务开始)
用户: "重构这个Python项目的错误处理,使用统一异常类"
# 第50步(2小时后)
AI: "我在检查代码风格...哦等等,用户要什么来着?"
# ↑ 如果没有外部记忆,AI只能靠上下文推断,越久越不准
2. 目标漂移(Goal Drift)
这是最常见也最隐蔽的问题。AI在执行过程中"发现"了新的"有趣"的事情,然后就岔路了:
# 目标漂移示意
原始任务: "修复登录页面的Bug"
第1步: 查看登录代码 ✅
第2步: 发现密码验证逻辑有问题 ✅
第3步: 开始研究密码加密算法... ⚠️
第4步: 对比bcrypt vs argon2... ⚠️
第5步: 写了一篇密码学论文... ❌ 完全跑偏
3. 风格不一致(Style Inconsistency)
即使是同一个任务,AI的输出风格也可能前后不一。写代码时有时用camelCase有时用snake_case,写文档时有时正式有时随意。
4. 错误累积(Error Accumulation)
一个小错误在后续步骤中被放大。第3步的一个小偏差,到第30步可能已经完全偏离原始轨道。
保持Agent一致性的核心模式
1. 检查点机制(Checkpointing)
在关键节点保存状态,出错时可以回滚:
class AgentWithCheckpoints:
def run_long_task(self, task):
steps = self.plan_steps(task)
for i, step in enumerate(steps):
# 每步之前验证一致性
if not self.verify_consistency(step):
# 回滚到上一个检查点
self.rollback_to_checkpoint()
continue
result = self.execute(step)
# 每5步创建一个检查点
if i % 5 == 0:
self.save_checkpoint({
'step': i,
'state': self.get_state(),
'result': result
})
2. 周期性自我审查(Periodic Self-Audit)
让Agent定期停下来问自己:"我还在做对的事情吗?"
# 自我审查Prompt模板
AUDIT_PROMPT = """
你正在执行一个多步骤任务。请回答以下问题:
1. 原始任务目标是什么?
2. 你当前在做什么?
3. 当前行为是否服务于原始目标?
4. 如果偏离了,如何纠正?
当前任务描述: {original_task}
已完成的步骤: {completed_steps}
当前步骤: {current_step}
"""
def periodic_audit(agent, every_n_steps=10):
if agent.step_count % every_n_steps == 0:
audit = agent.query(AUDIT_PROMPT.format(...))
if audit.drift_detected:
agent.correct_course(audit.suggestion)
3. 外部记忆锚定(External Memory Anchoring)
把关键信息存在外部(文件、数据库),而不是依赖上下文窗口:
# OpenClaw风格的记忆管理
# 把任务状态写入文件,每步更新
# 而不是全部塞在对话上下文里
# TASK_STATE.json
{
"task_id": "refactor-auth",
"goal": "重构认证模块,使用JWT替代Session",
"current_phase": "middleware",
"completed": ["config", "models", "routes"],
"constraints": [
"不改变API接口",
"保持向后兼容",
"使用RS256签名"
],
"last_updated": "2026-04-24T20:00:00Z"
}
4. 状态机约束(State Machine Constraints)
用状态机限制Agent的执行路径,防止它跑到不该去的地方:
# 状态机定义
TASK_STATES = {
"INIT": {"next": ["PLANNING", "FAILED"]},
"PLANNING": {"next": ["EXECUTING", "REVIEWING"]},
"EXECUTING": {"next": ["EXECUTING", "REVIEWING", "PAUSED"]},
"REVIEWING": {"next": ["EXECUTING", "COMPLETED", "ROLLBACK"]},
"PAUSED": {"next": ["EXECUTING", "FAILED"]},
"COMPLETED": {"next": []},
"FAILED": {"next": ["INIT"]}, # 重新开始
"ROLLBACK": {"next": ["EXECUTING", "FAILED"]}
}
def transition(current, intended):
if intended in TASK_STATES[current]["next"]:
return intended
raise InvalidTransition(f"不能从{current}跳到{intended}")
5. 防遗忘检查点(Anti-Forgetting Guards)
在每次API调用前,显式注入任务目标作为提醒:
# 防遗忘设计:每次调用都带上核心约束
def call_llm_with_guard(user_message, original_goal, constraints):
guarded_message = f"""
[任务目标] {original_goal}
[核心约束] {constraints}
[当前消息] {user_message}
"""
return llm.query(guarded_message)
OpenClaw的一致性保障机制
Session状态持久化
OpenClaw的Session系统自动维护Agent的状态。即使Gateway重启,Session状态也能恢复:
# OpenClaw Session 概念
# 每个Session有自己的:
# - 对话历史(可配置最大长度)
# - 工具调用记录
# - 记忆文件(memory/目录)
# - 状态文件(SOUL.md, USER.md等)
# Session断线重连后,Agent通过读取记忆文件恢复状态
# 而不是依赖上下文窗口中的历史对话
cron任务的标准化执行
OpenClaw的cron任务每次执行都是独立但一致的。通过AGENTS.md中的标准流程,确保每次执行都走相同的步骤:
# AGENTS.md中的标准化流程(妙趣AI示例)
## 定时任务执行规范
1. 确认任务类型和名称
2. 读取任务详情
3. 执行并记录结果
4. 生成执行报告
# 每次cron触发时,Agent按这个流程执行
# 确保一致性:不会遗漏步骤,不会顺序错乱
SubAgent的任务隔离与结果验证
SubAgent执行完任务后,结果会传回主Agent验证。这是"验证即交付"理念的体现——不信任执行方的自我声明。
真实案例分析
案例1:32天4亿Token的Codex任务
2026年4月HN热门讨论:一个开发者用Codex(GPT-5.4)运行了32天的连续任务,消耗400M+ Token且保持稳定。关键成功因素:
- 明确的任务边界:代码重构有清晰的"完成"标准
- 自动化测试护栏:每步修改后运行测试,失败自动回滚
- Git版本控制:每个检查点都commit,可随时回退
- 模型升级:GPT-5.4对长任务一致性有显著改进
案例2:妙趣AI的每日cron任务
妙趣AI的术语百科生成任务已连续运行50+天,每天凌晨4点自动执行。一致性保障:
- 标准化流程:AGENTS.md定义了5步执行流程
- 外部记忆:每日记忆文件记录执行状态
- 防重复机制:执行前检查已有页面,避免重复生成
- 质量标准:每个页面必须包含定义、原理、实战、代码示例
一致性度量与监控
# Agent一致性度量指标
metrics = {
"任务完成率": "成功完成的任务 / 总任务数",
"目标偏离度": "实际执行路径与计划路径的偏差",
"风格一致性": "输出风格方差(越低越好)",
"错误恢复率": "自动恢复的错误 / 总错误数",
"检查点利用率": "成功回滚次数 / 总回滚尝试次数",
# OpenClaw特有指标
"cron执行成功率": "成功cron执行 / 总cron触发",
"SubAgent交付验证率": "验证通过 / 总SubAgent结果",
}
总结
Agent一致性不是靠"更强的模型"就能解决的。它是系统设计问题:检查点、状态机、外部记忆、自我审查,缺一不可。
就像盖摩天大楼——地基打得深、钢筋扎得紧,楼才不会倒。AI Agent也一样,架构做得好,跑32天也不怕。
4亿Token,32天,一次不偏。这不是魔法,是工程。