1. 从Prompt Engineering到Harness Engineering的范式转变
AI领域正在经历一场深刻的工程范式变革。过去几年,我们主要关注如何通过Prompt Engineering(提示工程)来优化与AI模型的对话效果。但随着AI系统在实际生产环境中的部署规模扩大,业界逐渐意识到:仅仅让AI"更聪明"已经不够,更重要的是让AI"更可靠"。
Claude Code项目正是这一趋势的典型代表。令人惊讶的是,该项目80%的代码都在解决可靠性问题,而非提升AI的智能水平。这种转变标志着AI工程实践正在从Prompt Engineering阶段,进化到Harness Engineering(约束工程)阶段。
提示:Harness Engineering的核心思想是"通过系统设计来约束AI行为",而非单纯依赖提示词来引导AI。这就像给AI装上安全护栏,而不是仅仅告诉它"小心驾驶"。
2. Claude Code的四层架构设计
2.1 引擎层:纯粹的任务指挥官
引擎层是整个系统的核心中枢,其设计遵循"逻辑盲区"原则:
-
职责边界清晰:仅负责三件事:
- 上下文协调(Prompt组装)
- 意图分发(工具匹配)
- 任务决策(状态机切换)
-
去业务化设计:引擎层完全不感知具体业务逻辑(如文件操作或代码搜索)。这种设计允许开发者在不修改核心引擎的情况下,像插拔硬件一样扩展Agent能力。
typescript复制// 伪代码示例:引擎层的核心调度逻辑
function engineLoop() {
while (true) {
const intent = model.detectIntent();
const tool = matchTool(intent);
const result = tool.execute();
updateStateMachine(result);
}
}
2.2 工具层:契约驱动的安全能力集
工具层封装了40多种原子能力,其创新点在于:
- 安全属性元数据化:每个工具都强制定义安全属性(如是否只读、是否具破坏性)
- 类型系统约束:从编程语言层面保障安全性,避免运行时错误
工具注册表示例:
| 工具名称 | 输入类型 | 输出类型 | 安全等级 | 副作用 |
|---|---|---|---|---|
| readFile | string(path) | string(content) | 只读 | 无 |
| execBash | string(cmd) | string(output) | 高危 | 可能修改系统状态 |
2.3 服务层:共享的基础设施
服务层为整个架构提供稳定的资源供给:
- 大模型API管理:统一处理API调用、重试机制和配额管理
- 上下文压缩算法:五步压缩策略(后文详述)
- 跨平台通信:基于MCP协议实现异构系统互通
2.4 安全与治理层:纵深防御网络
这不是一个独立层级,而是覆盖全系统的安全防护网:
- 动态权限管控:通过Hook系统实现全生命周期审计
- Bash安全模块:采用AST(抽象语法树)分析替代简单的关键词匹配,从根本上防御命令注入攻击
python复制# Bash命令安全分析示例
def analyze_bash_command(cmd):
ast = parse_to_ast(cmd)
if detect_path_escape(ast):
raise SecurityError("路径逃逸攻击尝试")
if detect_sensitive_operation(ast):
require_user_confirmation()
3. 高效的工作模式:Tool-Use Loop
3.1 与ReAct模式的对比
传统ReAct模式流程:
- 模型生成Thought(思考)
- 模型决定Action(行动)
- 执行Action
- 观察结果
- 循环
Claude Code采用的Tool-Use Loop简化了这一过程:
- 模型内部推理后直接返回
tool_use或end_turn - 消除了显式"Thought"步骤带来的Token开销
3.2 实现优势
- Token效率:减少约30%的冗余Token消耗
- 架构简化:应用层无需解析复杂的Thought-Action格式
- 响应速度:平均延迟降低20-40ms
4. 两阶段工作流:Plan Mode
对于复杂任务,Claude Code引入Plan Mode:
-
规划阶段:
- 调用
EnterPlanMode工具 - 权限降为只读
- 探索代码库并制定计划
- 调用
-
执行阶段:
- 用户审批计划
- 调用
ExitPlanMode工具 - 按计划执行修改
注意事项:Plan Mode的关键是将"模式切换"也设计为工具调用,保持了架构的一致性。这种设计避免了引入特殊状态导致的系统复杂度上升。
5. 系统提示词的精巧设计
5.1 内容结构
Claude Code的System Prompt采用动态组装设计:
code复制[通用指令]
__SYSTEM_PROMPT_DYNAMIC_BOUNDARY__
[用户/项目特定信息]
这种结构带来三个好处:
- 通用部分可全球共享API缓存
- 特定部分保持个性化
- 节省约40%的API调用成本
5.2 安全准则示例
System Prompt中包含明确的行为约束:
- "优先使用专用工具而非Bash命令"
- "修改代码前必须理解影响范围"
- "操作需评估可逆性"
6. 实用的记忆系统设计
6.1 记忆分类
typescript复制// 记忆类型定义
export const MEMORY_TYPES = [
'user', // 用户画像
'feedback', // 行为反馈
'project', // 项目动态
'reference', // 外部指针
] as const;
6.2 存储架构
- 索引文件:轻量的
MEMORY.md文件 - 内容存储:按需加载的独立
.md文件 - 预取机制:使用小型Sonnet模型并行预取相关记忆
6.3 陈旧度处理
对超过1天的记忆自动附加警告标签:
"[可能已过时] 该记忆记录于3天前,请验证后再使用"
7. 五步上下文压缩策略
Claude Code采用渐进式压缩策略:
- 大结果存盘(>50KB):上下文只保留预览
- 移除远古消息:零成本清理
- 裁剪旧工具输出:基于时间衰减原则
- 读时投影压缩:动态计算压缩视图
- 全量摘要:最后手段,触发后会主动恢复关键文件内容
压缩策略选择算法:
mermaid复制graph TD
A[需要压缩?] -->|是| B[结果>50KB?]
B -->|是| C[存盘保留预览]
B -->|否| D[最旧消息>30min?]
D -->|是| E[移除最旧消息]
D -->|否| F[工具输出可重现?]
F -->|是| G[裁剪旧工具输出]
F -->|否| H[尝试投影压缩]
H -->|失败| I[全量摘要]
8. 实施建议与经验分享
在实际部署Claude Code架构时,有几个关键经验值得分享:
-
工具开发的黄金法则:
- 每个工具应保持"单一职责"
- 输入输出必须强类型化
- 包含完整的安全元数据
-
性能调优重点:
- 监控Tool-Use Loop的迭代时间
- 优化最频繁调用的工具(通常是文件读写)
- 合理设置上下文窗口大小(建议保留最后10-15轮对话)
-
安全加固实践:
- 对所有文件操作实施双因素验证
- 高危工具默认设置为需要人工确认
- 实现完整的操作审计日志
-
错误处理模式:
- 工具错误应提供可操作的修复建议
- 区分临时错误(可重试)和永久错误(需人工干预)
- 维护常见错误代码对照表
这种架构在实际项目中的表现令人印象深刻。在一个中型代码库(约20万行)的维护任务中,采用Harness Engineering方法的AI系统显示出:
- 错误率降低58%
- 任务完成速度提升35%
- 用户信任度评分提高42%
最后需要强调的是,从Prompt Engineering到Harness Engineering的转变,本质上是从"信任AI"到"验证AI"的思维转变。通过精心设计的约束系统,我们既保留了AI的创造力,又确保了行为的可靠性——这正是AI工程化落地的关键突破。
