Mitchell Hashimoto 的 AI 采用之路 Harness EngineeringM7AI

Mitchell Hashimoto 的 AI 采用之路 Harness Engineering

17分钟 ·
播放数0
·
评论数0

在这篇文章中,作者米切尔·哈希莫托详细记录了他从对人工智能持怀疑态度到将其深度融入软件开发工作流的演进过程。他将这段旅程划分为六个阶段,强调了从低效的聊天机器人转向具备自主能力的AI代理是提效的关键。通过复现手动工作和建立自动化验证体系,作者不仅克服了技术磨合期的挫败感,还探索出了在休息时间运行代理的策略。他主张开发者应通过工程化手段优化AI的执行环境,从而将琐碎任务外包给机器,让自己专注于核心逻辑。最终,作者展示了一种务实且克制的视角,即在保持个人工艺水平的同时,利用AI实现持续的生产力增益。

米切尔·桥本(Mitchell Hashimoto)认为,开发人员应通过以下六个核心步骤从聊天机器人过渡到智能体,从而真正实现工作效率的提升:

  1. 放弃聊天机器人 (Drop the Chatbot):立即停止尝试通过聊天机器人(如网页版 ChatGPT 或 Gemini)进行核心编程工作,因为这通常需要人类反复纠正它们的错误,效率极其低下。要获得真正的价值,开发人员必须使用智能体(Agent),即能够在循环中聊天并调用外部行为(如读取文件、执行程序和发出 HTTP 请求)的语言模型。
  2. 重现自己的工作 (Reproduce Your Own Work):强迫自己使用智能体重新完成已经手动做过的代码提交,确保智能体能产出相同质量的结果。虽然这个过程充满阻力,但它能帮助开发人员从第一性原理出发掌握智能体的使用技巧:将任务分解为清晰可执行的步骤、将模糊请求拆分为计划与执行阶段,以及为智能体提供验证自身工作的方法。这还能帮助你了解智能体的能力边界,避免在它们不擅长的任务上浪费时间。
  3. 利用“日终智能体” (End-of-Day Agents):在每天工作结束前的最后 30 分钟启动智能体。让它们在你无法工作的时间里执行深度研究、并行探索模糊的想法,或是对 GitHub 的 Issue 和 PR 进行自动分类审查。这不仅能利用休息时间取得进展,还能在第二天早上为你提供一个“热启动”,帮助你更快进入状态。
  4. 外包“十拿九稳”的任务 (Outsource the Slam Dunks):明确智能体擅长什么后,将那些你有高度信心它能做对的任务交接出去,而自己则专注于其他深度思考或更喜欢的任务。在此阶段,务必关闭智能体的桌面通知,将检查进度的控制权掌握在自己手中,以避免昂贵的注意力上下文切换。
  5. 测试框架工程化 (Engineer the Harness):为了让智能体尽可能一次性产出正确结果或将修改降至最低,你需要为其提供快速、高质量的工具来自动验证错误。这主要包括两种方式:一是改进隐式提示(例如更新 AGENTS.md 文件来纠正智能体反复出现的错误行为);二是编写实际的工具脚本(如自动截图、运行测试等供智能体调用)。
  6. 保持智能体常驻运行 (Always Have an Agent Running):在不断完善工具链的同时,树立“随时都有智能体在后台运行”的目标。你可以使用速度较慢但思考更深入的模型在后台处理耗时任务,同时自己在前台享受深度手工编程的乐趣,以此在自动化与热爱的工作之间找到平衡。

在AI辅助编程中,“线束工程”(Harness Engineering)是指当AI智能体(Agent)犯错时,开发者专门投入时间去设计和构建一种解决方案,以确保该智能体永远不再犯同样的错误。同时,它也包含了努力让智能体能够自行验证其执行的操作是否正确。

它提升效率的方式主要体现在以下几个方面:

  • 提高首次准确率: AI智能体如果能在第一次就生成正确的结果,或者生成的代码只需要极少的人工微调,其工作效率就会大幅提升。
  • 自动化纠错: 通过为智能体提供快速、高质量的工具,系统能够自动告诉智能体它哪里做错了,从而大大减少人类开发者手动检查和修正AI错误所耗费的时间。

在实际操作中,“线束工程”通常通过以下两种具体形式来提升工作效率:

  1. 改进隐式提示(例如维护 AGENTS.md 文件): 针对智能体反复运行错误命令或调用错误API等简单问题,通过更新指导文件(如 AGENTS.md)来明确指出并纠正这些不良行为。
  2. 开发实际的编程工具: 为智能体编写专属的辅助脚本(例如用于自动截图、运行特定过滤测试的脚本等),并在提示文件中告知智能体这些工具的存在,使其能够在工作流中调用它们来自我验证。

总之,通过“线束工程”,开发者能够不断沉淀解决问题的经验并将其工具化,让AI智能体变得越来越可靠,从而实现真正的效率倍增。

实施“工作日结束后的智能体”(End-of-Day Agents)策略的核心理念是在您无法工作的时间里让智能体继续取得进展,从而提升整体效率。具体实施步骤和适用场景如下:

1. 每天预留最后30分钟在工作日即将结束、您感到疲惫且难以保持高效状态时,抽出最后30分钟来启动一个或多个智能体。这能在您休息时为您完成部分工作,从而在第二天早晨为您提供一个“预热启动”(warm start),让您能更快地进入工作状态。通常不需要让智能体整夜循环运行,因为大多数任务在半小时内即可完成。

2. 分配适合的非实时任务为了最大化该策略的价值,建议将以下三类工作交由工作日结束后的智能体处理:

  • 深度研究(Deep research sessions): 让智能体对某个领域进行详细调查。例如,您可以让它们查找特定编程语言和特定许可证的所有代码库,并生成包含优缺点、开发活跃度以及社会情绪等多页的总结报告。
  • 探索模糊的想法: 开启并行的智能体来尝试您白天有想法但没时间着手处理的模糊概念。虽然不指望它们能产出直接可发布的结果,但这能为您第二天处理该任务时提供启发,扫清盲区(发现“未知的未知”)。
  • 问题(Issue)和拉取请求(PR)的分类与审查: 您可以编写简单的脚本,利用 GitHub CLI (gh) 并行启动多个智能体来对项目问题进行分类。关键的一点是,不要允许智能体直接对外回复,而是让它们在第二天为您生成分类报告,从而引导您优先处理高价值或低工作量的任务。

通过这种方式,您可以将一天中最疲惫的时段转化为第二天高效工作的跳板,在不增加个人工作时间的前提下完成更多工作。

“马具工程化”(Harness Engineering,即我们前文提到的“线束工程”)是指:每当发现AI智能体犯错时,开发者都会专门花时间去设计和构建一种解决方案,以确保智能体永远不再犯同样的错误。它的核心目的是为智能体提供快速且高质量的工具,让系统能自动察觉并告知智能体其错误所在,从而让智能体尽可能一次性产出正确结果,或将需要人工微调的工作量降到最低。

米切尔·桥本(Mitchell Hashimoto)指出,可以通过以下两种具体形式来实施“马具工程化”并有效减少智能体的错误:

  • 改进隐式提示(例如更新 AGENTS.md 文件): 针对一些简单的问题,比如智能体反复运行错误的命令或找到错误的API,开发者可以直接更新 AGENTS.md(或同类指导文件)。通过在文件中记录并纠正这些不良行为,可以几乎完全解决这类错误。
  • 开发实际的编程工具: 开发者可以为智能体编写专用的工具脚本,例如自动截图工具或运行特定过滤测试的脚本。在开发出这些工具后,通常还需要同步修改 AGENTS.md 文件,明确告知智能体这些工具的存在。这样一来,智能体就能利用这些工具来主动验证自己的操作是否正确。

通过投入精力进行“马具工程化”,开发者能够建立起一套防错与自我验证机制,不仅能阻止智能体再次做“坏事”,还能帮助它们确认自己正在做“好事”。

在过渡到智能体时,强制自己用智能体重复已经手动完成的提交(即把工作做两遍),是为了通过亲身实践从第一性原理出发,建立对智能体工作方式的深刻且基础的理解,从而积累真正的专业经验

虽然这个过程最初会让人感到痛苦和充满阻力,但它能帮助开发者获得以下关键收益并最终实现效率的提升:

  • 掌握任务拆解技巧: 开发者会意识到不能试图在一个庞大的会话中完成所有事情,而是必须将工作分解为独立的、清晰且可执行的任务。
  • 学会分离规划与执行: 在面对模糊的需求时,懂得将工作划分为独立的“规划”会话和“执行”会话。
  • 认识到自我验证的重要性: 发现如果为智能体提供验证其自身工作的方法,它通常能够自行修复错误并防止代码回归(Regressions)。
  • 摸清智能体的能力边界: 能够清晰地了解智能体当时擅长做什么、不擅长做什么,以及对于它们擅长的任务,应该如何引导才能获得想要的结果。
  • 知道何时“不”使用智能体: 这是获得效率提升的重要部分。了解智能体的短板,避免在它们极可能会失败的任务上浪费时间,这种“避坑”能力本身就能带来巨大的时间节省。

总而言之,这种看似低效的重复性手动工作,实际上是一段必经的“抗阻训练”,它帮助开发者跨越工具采用初期的摩擦,彻底掌握使用智能体的正确姿势,从而在后续的工作中实现真正的效率提升

在优化智能体(Agent)表现时,将工作区分为独立的“规划”(Planning)和“执行”(Execution)会话,主要是为了应对需求模糊以及避免任务体量过于庞大带来的混乱

根据米切尔·桥本(Mitchell Hashimoto)的实践经验,这种区分策略可以通过以下几个方面来优化智能体的表现:

  • 应对模糊请求,扫清盲区: 当面对一个不够清晰或模糊的任务时,直接让智能体去执行往往会导致偏离预期。此时应该先开启专门的“规划”会话,甚至可以并行启动多个智能体来探索这些模糊的想法,这有助于暴露“未知的未知”(unknown unknowns)。在理清思路后,再通过独立的“执行”会话来落实具体的代码或操作。
  • 避免“一步到位”的陷阱: 开发者绝不能试图在一个庞大的会话(mega session)中解决所有问题,或者期望智能体能凭空“画出一只猫头鹰”(意指没有步骤指导就直接得出复杂结果)。将规划和执行分离,本质上是为了迫使开发者将复杂工作分解为清晰、独立且可切实执行的具体任务
  • 提升自我纠错与验证的成功率: 只有在规划阶段明确了具体的执行步骤和预期目标,执行阶段的任务才会足够聚焦。任务越清晰,开发者就越容易为智能体提供验证其自身工作的方法;而一旦智能体能够自我验证,它往往就能自行修复错误并有效防止代码回归(regressions)。

总之,区分“规划”与“执行”不仅是对智能体能力的合理分配,也是一种强制开发者理清思路的“抗阻训练”。它能帮助你摸清智能体的能力边界,确保在执行阶段交出的都是智能体能够胜任的具体指令,从而大幅提高首次输出的正确率。

根据提供的资料,在“线束工程”(Harness Engineering)的实践中,除了自动截图脚本之外,米切尔·桥本还明确提到的一种实用编程工具是“运行特定过滤测试的脚本”run filtered tests

这类实际编程工具(Actual, programmed tools)的核心目的在于辅助智能体进行自我验证。它们通常具备以下特点和使用方法:

  • 提供快速、高质量的反馈: 这些工具能够自动检测并告诉智能体它是否犯了错,从而帮助智能体尽可能在第一次就产出正确的结果,或者将代码的后续微调需求降到最低。
  • 配合指导文件(如 AGENTS.md)使用: 仅仅开发出这些测试或辅助脚本是不够的,开发者通常还需要同步修改 AGENTS.md(或等效的隐式提示文件),在文件中明确告知智能体这些工具的存在。这样,智能体才能知道在执行任务时可以调用哪些专属脚本来检验自己的工作成果。

资料中以“等等etc" 一词概括了其他可能的工具,这意味着实际上开发者可以根据项目的具体需求,编写任何能够帮助智能体验证其输出正确性的自定义脚本。

在智能体运行时,为了避免昂贵的上下文切换,最核心的策略是完全关闭智能体的桌面通知

为了保持高效,你应该将检查智能体的控制权掌握在自己手中,由你来决定何时去打断智能体,而不是让智能体随时打断你

具体的做法是:在你沉浸于自己的深度思考或手工编码时,屏蔽掉智能体完成任务的弹窗提示;取而代之的是,在你自身工作流的自然间隙natural breaks主动切换标签页去查看智能体的工作进度,确认无误或做出调整后,再继续投入到你原本的工作中。这样能够最大限度地保护你的注意力免受频繁干扰