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天,一次不偏。这不是魔法,是工程。


🔗 相关阅读