一文讲清楚 Harness Engineering
AI 最大的问题从来不是“不会做”而是“每次都做得不一样”。如果你已经开始用 AI 写代码你大概率经历过这种状态有时候它非常惊艳。有时候它又让人抓狂。你让它写一个功能它完成了你让它改一下它开始偏离你再补充一些说明它看起来更努力但结果却更不稳定。于是一个几乎所有人都会问的问题出现了是不是我的 prompt 写得不够好你开始不断优化 prompt写得更详细加更多约束补更多上下文但慢慢你会发现一件有点反直觉的事情你写得越多它不一定做得越对。一、问题不在 Agent而在“你给它的世界”我们之所以会陷入“不断优化 prompt”的循环是因为我们默认了一件事AI 像一个工程师只要你讲清楚它就能做好但这其实是一个误解。人类工程师的工作方式是阅读 → 理解 → 设计 → 实现所以我们习惯写文档、写规范、写说明。但 Agent 不是这样工作的它更像是在一个环境中不断观察 → 尝试 → 调用工具 → 获得反馈 → 修正它不会线性读完你的说明。不会建立完整的全局理解。更不会长期记住规则。它只是在当前上下文里做一个“看起来合理的下一步”。这意味着一件关键的事情决定它行为的不是你写了什么而是它“身处什么环境”。这也是 Harness Engineering 想解决的核心问题二、与其教它怎么做不如设计一个让它自然做对的环境。从 “说什么” 到 “在什么环境里做事”当你的 AI Agent 开始失控问题不在模型而在Harness。2025 年我们见证了 AI Agent 的爆发2026 年我们发现一个残酷现实再强的 LLM没有 Harness 就是裸奔。OpenAI 最近披露他们用一个 3 人小团队在5 个月内生成了一百万行代码实现了 3.5 个 PR/人/天的吞吐量——关键不是用了 GPT-5而是他们实践了Harness Engineering想象一下这个场景你让 Agent 重构一个遗留模块它信心满满地开始工作中途因为上下文超限失忆了重启后它看着半成品代码一脸懵逼最后干脆宣布任务完成——实际上单元测试全挂。这不是模型不够聪明而是Agent 在裸奔。Mitchell HashimotoHashiCorp 创始人精准地描述了这个问题“每次 Agent 犯错你都应该设计一个系统让它永远不再犯同样的错误。”这就是 Harness Engineering 的核心理念。Agentic 技术的演进阶段关注点核心问题失效场景Prompt Engineering说什么单次对话的指令质量多轮后上下文混乱Context Engineering知道什么动态组装上下文Agent 行为不可控Harness Engineering在什么环境里做事系统级约束与状态管理长时任务、自主决策Harness Engineering 关注的是环境设计——给 Agent 一个操作系统让它能持久化状态、验证行为、优雅失败。Harness Engineering 的四大支柱如果把 LLM 比作 CPUHarness 就是操作系统上下文治理Context Curation不是塞满上下文而是智能裁剪和恢复工具编排Tool Orchestration验证参数、沙箱执行、防幻觉调用状态持久化State Persistence跨会话记忆崩溃后可恢复渐进式披露Progressive Disclosure按需加载技能和权限最小权限原则三、实战构建一个代码自治优化的Harness现在我们用一个真实可落地的示例展示如何用 Harness Engineering 让 Agent 自主优化遗留代码。场景设定你有一个屎山 Python 项目想让 Agent 自动完成以下任务识别代码坏味道长函数、魔法数字、缺少类型注解生成优化方案并实施重构运行测试验证不破坏功能生成代码审查报告环境相关设计根据 Harness 的渐进式披露原则我们设计一个完成任务相关的 Skill 目录.skills/ └── code-refactor-agent/ ├── SKILL.md # Skill 入口按需加载到上下文 ├── rules/ │ ├── python-style.md # Python 代码规范 │ └── refactor-patterns.md # 重构模式库 ├── tools/ │ ├── analyze_code.py # 代码分析工具 │ ├── run_tests.sh # 测试执行包装器 │ └── rollback.py # 安全回滚工具 └── templates/ └── refactor_plan.md # 重构计划模板SKILL.md 核心内容 也可以是agents.md)这是 Harness 的核心之一。不同于一次性 Prompt1000页的说明书它采用渐进式加载指引一张地图# Code Refactor Agent Skill ## 激活条件 当用户要求优化代码、重构遗留代码或改进代码质量时激活。 ## 系统原则 1. **最小破坏原则**每次只重构一个函数/类确保测试通过后再继续 2. **状态持久化**每次会话结束必须更新 progress.json记录已完成和待办 3. **失败熔断**如果测试连续失败 3 次立即停止并请求人工干预 ## 工具使用规范 - 代码分析优先使用 analyze_code.py而非让 LLM 直接读文件 - 测试验证必须通过 run_tests.sh 验证禁止假设应该没问题 - 版本控制每次成功重构后自动提交提交信息格式[Refactor] {变更描述} ## 渐进式知识库 - 需要 Python 规范时读取 rules/python-style.md - 需要重构模式时读取 rules/refactor-patterns.md - 生成分阶段计划时使用 templates/refactor_plan.md ## 安全边界Guardrails - 禁止修改 requirements.txt 和配置文件 - 禁止删除已有测试文件 - 遇到 FIXME 或 HACK 注释时必须标记为需要人工审查Harness Engineering 的另一个核心是工具化验证而非让 LLM目测关键工具实现analyze_code.pyclass CodeAnalyzer: def __init__(self, file_path: str): self.file_path Path(file_path) self.issues [] def analyze(self) - Dict: 执行静态分析返回结构化报告 source self.file_path.read_text(encodingutf-8) tree ast.parse(source) # 1. 检查函数长度圈复杂度代理指标 for node in ast.walk(tree): if isinstance(node, ast.FunctionDef): lines node.end_lineno - node.lineno if node.end_lineno else 50 if lines 30: self.issues.append({ type: long_function, line: node.lineno, name: node.name, lines: lines, severity: high, suggestion: f函数 {node.name} 过长({lines}行)建议拆分为多个小函数 }) # 2. 检查是否缺少类型注解 if not node.returns and not all( arg.annotation for arg in node.args.args ): self.issues.append({ type: missing_types, line: node.lineno, name: node.name, severity: medium, suggestion: f为 {node.name} 添加类型注解 }) # 3. 检查魔法数字 for node in ast.walk(tree): if isinstance(node, ast.Num if hasattr(ast, Num) else ast.Constant): if isinstance(node.n if hasattr(node, n) else node.value, (int, float)): if node.n if hasattr(node, n) else node.value not in [0, 1, -1]: self.issues.append({ type: magic_number, line: node.lineno, value: node.n if hasattr(node, n) else node.value, severity: low, suggestion: 将魔法数字提取为命名常量 }) return { file: str(self.file_path), total_issues: len(self.issues), issues: sorted(self.issues, keylambda x: x[severity], reverseTrue), suggested_order: self._prioritize_refactoring() } def _prioritize_refactoring(self) - List[str]: 生成重构优先级列表Agent 的执行计划依据 high [i for i in self.issues if i[severity] high] return [f修复 {i[name]} (第{i[line]}行): {i[suggestion]} for i in high[:3]] # 一次最多 3 个防止 Agent 贪多Harness 让 Agent 具备跨会话记忆状态管理progress.json{ session_id: refactor-legacy-001, target_file: legacy_module.py, completed: [ { function: process_data, commit: a1b2c3d, timestamp: 2026-03-20T10:00:00Z, tests_passed: true } ], pending: [ optimize_query_builder, extract_constants_from_config ], current_focus: optimize_query_builder, attempt_count: 0, last_error: null }Agent 的自治工作流当这个 Skill 被激活后Agent 会进入Initializer-Executor 模式初始化阶段仅执行一次读取SKILL.md和progress.json运行analyze_code.py生成问题清单写入progress.json制定分阶段计划执行阶段循环执行可跨会话加载progress.json恢复状态选取下一个pending任务实施重构 → 运行run_tests.sh验证如果测试通过git commit 更新progress.json如果测试失败查看错误输出 → 重试最多 3 次优雅退出保存状态供下次会话继续开发者转型从码农到AI 系统架构师Harness Engineering 正在重新定义开发者的角色不再写代码而是设计能写代码的系统。学AI大模型的正确顺序千万不要搞错了2026年AI风口已来各行各业的AI渗透肉眼可见超多公司要么转型做AI相关产品要么高薪挖AI技术人才机遇直接摆在眼前有往AI方向发展或者本身有后端编程基础的朋友直接冲AI大模型应用开发转岗超合适就算暂时不打算转岗了解大模型、RAG、Prompt、Agent这些热门概念能上手做简单项目也绝对是求职加分王给大家整理了超全最新的AI大模型应用开发学习清单和资料手把手帮你快速入门学习路线:✅大模型基础认知—大模型核心原理、发展历程、主流模型GPT、文心一言等特点解析✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑✅开发基础能力—Python进阶、API接口调用、大模型开发框架LangChain等实操✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经以上6大模块看似清晰好上手实则每个部分都有扎实的核心内容需要吃透我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】