十二、《从 OpenAI 实践中提炼的 4 个核心技能:持久执行、闭环测试、架构约束、运行策略》

0 阅读1分钟

一、引言:从实验到实践

OpenAI 的 Harness Engineering 实验不仅证明了 AI Agent 可以独立完成大规模软件开发,更重要的是,它提炼出了一套可复用的方法论。

Ryan Lopopolo 在博客中总结了 4 个核心技能

  1. 持久执行(Durable Execution)
  2. 闭环测试(Closed-Loop Testing)
  3. 架构约束(Architectural Constraints)
  4. 运行策略(Runtime Policies)

这 4 个技能构成了 Harness Engineering 的技术基石。本文将深入解析每一项技能,并提供可落地的实践指南。

二、技能一:持久执行(Durable Execution)

2.1 为什么需要持久执行?

AI Agent 处理的任务越来越复杂:

  • 大型代码库重构(数小时到数天)
  • 复杂系统生成(百万行代码)
  • 深度代码分析(跨模块依赖)

这些任务需要长时间运行,而进程崩溃、资源不足、网络中断等故障不可避免。

持久执行的核心目标:让 Agent 的任务能够"断点续传",而不是从头再来。

2.2 持久执行的三层架构

┌─────────────────────────────────────────────────────────┐
│              持久执行的三层架构                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  第 3 层:应用层持久化                                    │
│  ┌─────────────────────────────────────────────────┐   │
│  │  • 业务状态保存(当前目标、已完成工作)              │   │
│  │  • 上下文信息(相关代码、文档引用)                  │   │
│  │  • 中间产物(生成的代码片段、分析结果)              │   │
│  └─────────────────────────────────────────────────┘   │
│                         ↑                               │
│  第 2 层:执行层持久化                                    │
│  ┌─────────────────────────────────────────────────┐   │
│  │  • 执行计划状态(当前步骤、待执行步骤)              │   │
│  │  • 活动状态(正在执行的活动、输入输出)              │   │
│  │  • 等待状态(等待外部事件、定时器)                  │   │
│  └─────────────────────────────────────────────────┘   │
│                         ↑                               │
│  第 1 层:系统层持久化                                    │
│  ┌─────────────────────────────────────────────────┐   │
│  │  • 工作流实例标识和元数据                           │   │
│  │  • 资源配置信息(分配的 Agent、计算资源)            │   │
│  │  • 超时和重试配置                                  │   │
│  │  • 检查点存储位置和策略                             │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
└─────────────────────────────────────────────────────────┘

2.3 检查点策略设计

yaml

复制

# checkpoint-config.yaml
checkpoint:
  # 触发条件
  triggers:
    # 时间触发:每 5 分钟
    - type: time_interval
      interval: 5m
    
    # 事件触发:关键活动完成
    - type: event
      events:
        - activity_completed
        - file_written
        - external_api_called
    
    # 状态触发:重要状态变更
    - type: state_change
      paths:
        - business_state.current_goal
        - execution_state.active_activities
  
  # 检查点内容
  include:
    full_state: true           # 完整状态
    event_history: last_100    # 最近 100 个事件
    generated_artifacts: references  # 产物引用(不存内容)
  
  # 存储配置
  storage:
    type: distributed_storage
    backend: s3               # S3 / GCS / Azure Blob
    replication: 3
    encryption: true
  
  # 保留策略
  retention:
    successful: 7d            # 成功任务保留 7 天
    failed: 30d               # 失败任务保留 30 天
    max_checkpoints_per_workflow: 50

  # 恢复配置
  recovery:
    auto_retry: true          # 自动重试
    max_retries: 3            # 最大重试次数
    backoff_strategy: exponential  # 指数退避

2.4 持久执行的最佳实践

实践

说明

效果

频繁检查点

5-10 分钟一次

故障损失最小化

增量保存

只保存变化部分

减少存储和传输开销

异步保存

不阻塞主流程

性能影响最小化

幂等设计

重复执行无副作用

恢复后正确性保证

状态验证

恢复后验证完整性

防止损坏状态继续执行

三、技能二:闭环测试(Closed-Loop Testing)

3.1 为什么需要闭环测试?

传统测试是"开环"的:

  • 人类编写测试 → 运行测试 → 查看结果 → 人工修复

闭环测试是"自动"的:

  • Agent 生成代码 → 自动测试 → 反馈给 Agent → Agent 自动修复

闭环测试的核心目标:让 Agent 能够自我验证、自我修正。

3.2 闭环测试的架构

┌─────────────────────────────────────────────────────────┐
              闭环测试架构                                
├─────────────────────────────────────────────────────────┤
                                                         
   ┌─────────────────────────────────────────────────┐  
                 测试触发层                            
      代码提交自动触发                                
      定时全量测试                                    
      手动触发                                        
   └─────────────────────────────────────────────────┘  
                                                        
   ┌─────────────────────────────────────────────────┐  
                 测试执行层                            
                                                      
     阶段 1: 静态测试(秒级)                           
     ├── 语法检查(编译/解释)                          
     ├── 代码风格检查(Linter)                         
     ├── 静态分析(复杂度、依赖)                        
     └── 安全扫描(漏洞检测)                           
                                                      
     阶段 2: 动态测试(分钟级)                          
     ├── 单元测试(函数/模块)                          
     ├── 集成测试(模块交互)                           
     └── 契约测试(接口兼容性)                          
                                                      
     阶段 3: 系统测试(小时级)                          
     ├── 端到端测试(完整流程)                          
     ├── 性能测试(响应时间、吞吐量)                     
     └── 安全测试(渗透测试)                           
                                                      
   └─────────────────────────────────────────────────┘  
                                                        
   ┌─────────────────────────────────────────────────┐  
                 结果分析层                            
      测试结果聚合                                    
      错误分类和定位                                  
      生成结构化反馈                                  
   └─────────────────────────────────────────────────┘  
                                                        
   ┌─────────────────────────────────────────────────┐  
                 反馈应用层                            
      反馈给 Agent                                    
      Agent 分析并修复                                
      重新触发测试(循环)                             
      超过最大迭代则人工介入                           
   └─────────────────────────────────────────────────┘  
                                                         
└─────────────────────────────────────────────────────────┘

3.3 反馈设计的关键

json

复制

{
  "test_run_id": "tr_20260323_001",
  "status": "failed",
  "stage": "unit_test",
  
  "summary": {
    "total": 50,
    "passed": 48,
    "failed": 2
  },
  
  "failures": [
    {
      "test_file": "src/auth/login.test.ts",
      "test_name": "should reject weak password",
      "line": 45,
      "error_type": "AssertionError",
      "message": "Expected ValidationError but got null",
      
      "context": {
        "input": { "password": "123" },
        "expected": "ValidationError: Password too weak",
        "actual": "null"
      },
      
      "stack_trace": [
        "at validatePassword (src/auth/validator.ts:23)",
        "at Object.<anonymous> (src/auth/login.test.ts:45)"
      ],
      
      "suggestion": {
        "description": "Password validation regex is too permissive",
        "file": "src/auth/validator.ts",
        "lines": "20-30",
        "reference": "See password policy doc: /docs/security.md"
      },
      
      "related_code": {
        "file": "src/auth/validator.ts",
        "content": "function validatePassword(pwd: string) {\n  // TODO: implement strong validation\n  return true;\n}"
      }
    }
  ],
  
  "recommended_fixes": [
    {
      "priority": "high",
      "file": "src/auth/validator.ts",
      "action": "implement proper password validation",
      "hint": "Use regex: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d).{8,}$/"
    }
  ]
}

3.4 闭环测试的最佳实践

实践

说明

效果

快速失败

低成本检查优先

减少无效迭代

分层测试

从快到慢,从简单到复杂

效率最大化

清晰反馈

具体、可行动的建议

Agent 修复效率高

迭代限制

最大修复次数

避免无限循环

人工兜底

复杂问题升级

质量保证

四、技能三:架构约束(Architectural Constraints)

4.1 为什么需要架构约束?

AI Agent 能力强大但"自由散漫":

  • 可能生成不符合项目规范的代码
  • 可能使用不恰当的技术方案
  • 可能破坏现有架构

架构约束的核心目标:在释放 AI 能力的同时,确保其行为在预期边界内。

4.2 约束的分层设计

┌─────────────────────────────────────────────────────────┐
│              架构约束的分层设计                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  第 4 层:业务约束(最具体)                              │
│  ┌─────────────────────────────────────────────────┐   │
│  │  • 领域模型规范(实体、值对象、聚合)                │   │
│  │  • 业务规则验证(不变量、流程)                      │   │
│  │  • 数据一致性要求(事务边界)                        │   │
│  │  • 合规性要求(GDPR、SOX 等)                       │   │
│  │  实现:领域模型验证器、业务规则引擎                   │   │
│  └─────────────────────────────────────────────────┘   │
│                         ↑                               │
│  第 3 层:安全约束                                        │
│  ┌─────────────────────────────────────────────────┐   │
│  │  • 输入验证(所有输入必须验证)                      │   │
│  │  • 敏感数据处理(加密、脱敏)                        │   │
│  │  • 权限控制(RBAC/ABAC)                           │   │
│  │  • 安全编码标准(OWASP Top 10 防护)                │   │
│  │  实现:安全扫描工具、静态分析                         │   │
│  └─────────────────────────────────────────────────┘   │
│                         ↑                               │
│  第 2 层:代码约束                                        │
│  ┌─────────────────────────────────────────────────┐   │
│  │  • 编码风格(缩进、命名、注释)                      │   │
│  │  • 代码质量(复杂度、重复度)                        │   │
│  │  • 设计模式(推荐/禁止的模式)                       │   │
│  │  • 文档规范(函数注释、README)                      │   │
│  │  实现:Linter、Formatter、静态分析                   │   │
│  └─────────────────────────────────────────────────┘   │
│                         ↑                               │
│  第 1 层:架构约束(最基础)                              │
│  ┌─────────────────────────────────────────────────┐   │
│  │  • 项目结构(目录组织、文件命名)                    │   │
│  │  • 模块边界(职责划分、接口定义)                    │   │
│  │  • 技术栈(允许使用的语言、框架、库)                 │   │
│  │  • 依赖规则(模块间依赖方向)                        │   │
│  │  实现:项目模板、脚手架、架构测试                     │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
└─────────────────────────────────────────────────────────┘

4.3 约束配置示例

yaml

复制

# architecture-constraints.yaml
project_structure:
  root:
    required_directories:
      - src/
        - components/     # UI 组件
        - services/       # 业务逻辑
        - utils/          # 工具函数
        - types/          # 类型定义
      - tests/
        - unit/           # 单元测试
        - integration/    # 集成测试
      - docs/             # 文档
      - scripts/          # 脚本工具
    
    forbidden_patterns:
      - "src/*.js"        # 源文件必须在子目录
      - "tests/*.ts"      # 测试文件必须在子目录
      - "node_modules"    # 不允许提交依赖

module_boundaries:
  rules:
    - name: "ui-cannot-import-business"
      from: "src/components/**"
      allow: ["src/types/**", "src/utils/**"]
      forbid: ["src/services/**"]
      message: "UI 层不应直接依赖业务逻辑层"
    
    - name: "business-can-use-utils"
      from: "src/services/**"
      allow: ["src/utils/**", "src/types/**"]
      message: "业务层可以使用工具层"

tech_stack:
  languages:
    allowed: [typescript, javascript]
    forbidden: [python, java]
  
  frameworks:
    frontend: react
    backend: express
    orm: prisma
  
  forbidden_libraries:
    - jquery          # 过时
    - lodash          # 推荐用原生
    - moment          # 推荐用 date-fns

code_quality:
  complexity:
    max_cyclomatic: 10
    max_cognitive: 15
    max_function_length: 50
  
  coverage:
    unit: 80
    integration: 60
  
  duplication:
    max_lines: 6
    max_tokens: 50

security:
  required:
    - input_validation
    - output_encoding
    - authentication
    - authorization
  
  forbidden:
    - eval
    - innerHTML
    - document.write
    - hardcoded_secrets

4.4 架构约束的最佳实践

实践

说明

效果

约束即代码

版本化、可审计

可追溯、可复用

渐进收紧

从松到严,逐步完善

避免一开始就过度限制

自动验证

集成到 CI/CD

确保约束被执行

文档同步

约束和文档保持一致

减少理解偏差

定期回顾

根据实践优化约束

持续改进

五、技能四:运行策略(Runtime Policies)

5.1 为什么需要运行策略?

Agent 的执行需要管理:

  • 什么时候执行什么任务?
  • 资源如何分配?
  • 出错怎么办?
  • 什么时候需要人工介入?

运行策略的核心目标:让 Agent 的执行可控、可观测、可干预。

5.2 运行策略的四大维度

┌─────────────────────────────────────────────────────────┐
│              运行策略的四大维度                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │  1. 调度策略(Scheduling)                        │   │
│  │                                                 │   │
│  │  • 优先级队列:Critical > High > Medium > Low    │   │
│  │  • 资源匹配:任务需求与 Agent 能力匹配             │   │
│  │  • 依赖管理:确保任务按依赖顺序执行                │   │
│  │  • 负载均衡:均匀分配,避免单点过载                │   │
│  │  • 抢占策略:高优先级可抢占低优先级任务            │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │  2. 资源策略(Resource)                          │   │
│  │                                                 │   │
│  │  • 配额管理:每个任务/用户的资源上限               │   │
│  │  • 动态扩缩容:根据负载自动调整 Agent 数量         │   │
│  │  • 资源回收:空闲资源自动释放                      │   │
│  │  • 成本优化:Spot 实例、预留实例等                 │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │  3. 容错策略(Fault Tolerance)                   │   │
│  │                                                 │   │
│  │  • 重试机制:指数退避、最大重试次数                │   │
│  │  • 故障转移:Agent 故障时任务迁移                  │   │
│  │  • 熔断机制:失败率过高时暂停服务                  │   │
│  │  • 降级策略:资源不足时降低服务质量                │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
│  ┌─────────────────────────────────────────────────┐   │
│  │  4. 协作策略(Collaboration)                     │   │
│  │                                                 │   │
│  │  • 审批流程:关键操作需要人工确认                  │   │
│  │  • 通知机制:重要事件通知相关人员                  │   │
│  │  • 升级策略:自动处理失败时升级给人类              │   │
│  │  • 知识共享:Agent 间共享经验和最佳实践            │   │
│  └─────────────────────────────────────────────────┘   │
│                                                         │
└─────────────────────────────────────────────────────────┘

5.3 运行策略配置示例

yaml

复制

# runtime-policies.yaml
scheduling:
  priority_levels:
    - name: critical
      weight: 100
      max_wait_time: 1m
      preemption: true
    
    - name: high
      weight: 50
      max_wait_time: 5m
      preemption: false
    
    - name: medium
      weight: 20
      max_wait_time: 30m
      preemption: false
    
    - name: low
      weight: 10
      max_wait_time: 2h
      preemption: false
  
  resource_matching:
    cpu_weight: 0.3
    memory_weight: 0.3
    skill_match_weight: 0.4
  
  dependencies:
    resolution_strategy: topological_sort
    max_dependency_depth: 10

resource:
  quotas:
    per_task:
      max_cpu: 4
      max_memory: 8Gi
      max_duration: 24h
      max_storage: 100Gi
    
    per_user:
      max_concurrent_tasks: 5
      max_daily_tasks: 50
  
  autoscaling:
    min_agents: 2
    max_agents: 50
    scale_up_threshold: 80  # CPU 使用率
    scale_down_threshold: 30
    cooldown_period: 5m

fault_tolerance:
  retry:
    max_attempts: 3
    backoff_strategy: exponential
    initial_delay: 1s
    max_delay: 60s
  
  circuit_breaker:
    failure_threshold: 5
    recovery_timeout: 60s
    half_open_max_calls: 3
  
  checkpoint:
    enabled: true
    interval: 5m
    max_checkpoints: 50

collaboration:
  approval_required:
    - production_deploy
    - database_migration
    - api_breaking_change
    - security_policy_change
  
  notifications:
    channels:
      - type: slack
        webhook: ${SLACK_WEBHOOK}
        events: [task_failed, approval_needed]
      - type: email
        recipients: [team@company.com]
        events: [daily_summary, weekly_report]
  
  escalation:
    rules:
      - condition: "retry_exhausted"
        action: "notify_lead"
        timeout: 10m
      
      - condition: "security_alert"
        action: "page_oncall"
        timeout: 0
      
      - condition: "cost_anomaly"
        action: "notify_finance"
        threshold: 200  # 超出预算 200%

5.4 运行策略的最佳实践

实践

说明

效果

策略即配置

可动态调整,无需重启

灵活性高

分层策略

全局、项目、任务多级

精细控制

监控策略效果

数据驱动优化

持续改进

优雅降级

资源不足时保核心功能

可靠性高

人工兜底

自动处理失败有后路

质量保证

六、四大技能的协同关系

┌─────────────────────────────────────────────────────────┐
│              四大技能的协同关系                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│                    ┌─────────────┐                     │
│                    │   运行策略    │                     │
│                    │  (Runtime)   │                     │
│                    │             │                     │
│                    │  指挥和调度   │                     │
│                    └──────┬──────┘                     │
│                           │                            │
│              ┌────────────┼────────────┐               │
│              │            │            │               │
│              ▼            ▼            ▼               │
│        ┌─────────┐  ┌─────────┐  ┌─────────┐          │
│        │ 持久执行 │  │ 闭环测试 │  │ 架构约束 │          │
│        │(Durable)│  │(Testing)│  │(Constraints)│       │
│        │         │  │         │  │         │          │
│        │ 保障可靠 │  │ 确保质量 │  │ 定义边界 │          │
│        └────┬────┘  └────┬────┘  └────┬────┘          │
│             │            │            │               │
│             └────────────┼────────────┘               │
│                          │                            │
│                          ▼                            │
│                    ┌─────────────┐                     │
│                    │   AI Agent   │                     │
│                    │             │                     │
│                    │  高效、可靠、  │                     │
│                    │  高质量地工作  │                     │
│                    └─────────────┘                     │
│                                                         │
│   运行策略是大脑,其他三者是手脚,共同服务于 Agent        │
│                                                         │
└─────────────────────────────────────────────────────────┘

七、技能落地路线图

┌─────────────────────────────────────────────────────────┐
│              四大技能落地路线图                          │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  第 1 阶段:基础建设(1-2 周)                            │
│  ├── 建立项目模板和脚手架                                │
│  │   └── 实现架构约束的基础层                            │
│  ├── 配置 Linter 和 Formatter                           │
│  │   └── 实现代码约束                                    │
│  └── 搭建基础 CI/CD 流水线                               │
│      └── 实现最简单的闭环测试                            │
│                                                         │
│  第 2 阶段:核心能力(2-4 周)                            │
│  ├── 实现检查点机制                                      │
│  │   └── 持久执行的基础能力                              │
│  ├── 完善测试体系                                        │
│  │   └── 单元测试 → 集成测试 → 端到端测试                 │
│  ├── 建立反馈机制                                        │
│  │   └── 测试结果自动反馈给 Agent                         │
│  └── 配置运行策略                                        │
│      └── 调度、资源、容错的基础策略                       │
│                                                         │
│  第 3 阶段:优化完善(4-8 周)                            │
│  ├── 优化检查点策略                                      │
│  │   └── 增量保存、压缩、加密                             │
│  ├── 增强反馈质量                                        │
│  │   └── 结构化、可行动的反馈                             │
│  ├── 细化约束规则                                        │
│  │   └── 根据实践持续优化                                 │
│  └── 完善运行策略                                        │
│      └── 自动扩缩容、智能调度                             │
│                                                         │
│  第 4 阶段:规模化应用(8-12 周)                         │
│  ├── 建立 Harness 模板库                                 │
│  ├── 多项目复用和定制                                     │
│  ├── 数据驱动的持续优化                                   │
│  └── 团队培训和推广                                       │
│                                                         │
└─────────────────────────────────────────────────────────┘

八、结语:技能是实践的结晶

OpenAI 提炼的 4 个核心技能,不是理论构想,而是从 5 个月实践中总结出的经验:

  • 持久执行 解决了可靠性问题
  • 闭环测试 解决了质量问题
  • 架构约束 解决了可控性问题
  • 运行策略 解决了管理问题

这 4 个技能相辅相成,共同构成了 Harness Engineering 的技术基础。

掌握这 4 个技能,就掌握了让 AI Agent 高效、可靠、规模化工作的钥匙。

参考与延伸阅读

  1. Harness engineering: leveraging Codex in an agent-first world - OpenAI
  2. Building Secure Systems - 安全系统设计
  3. Site Reliability Engineering - Google SRE