---
title: "約束工程"
date: "2026-04"
category: "ai運用"
tags: ["ai運用"]
description: "約束（Harness，或者說韁繩、馬鞍，限制馬的工具）工程，是個很有意思的概念，看上去更像是上下文工程的延申——核心的關鍵是把對agent的上下文約束，進展到整個環境約束..."
source: "https://enriquemark.com/zh-hant/posts/%E7%BA%A6%E6%9D%9F%E5%B7%A5%E7%A8%8B"
---

約束（Harness，或者說韁繩、馬鞍，限制馬的工具）工程，是個很有意思的概念，看上去更像是上下文工程的延申——核心的關鍵是把對agent的上下文約束，進展到整個環境約束。給agent提供一套受控的、完善的開發環境，裡面同時包含著所需的預設工具、知識（待注入的上下文）、預定義的指定、安全沙箱、hook等完善的配置。總之其核心目的，就是讓agent在一個遠超單純上下文的環境中工作。

一個比較關鍵的核心是：讓agent自主利用已有的一切，去讓自身保持最佳狀態。而這個最佳狀態是我（約束）設計者，預先定義好的。比如讓agent在合適的時候[自主](https://blog.langchain.com/autonomous-context-compression/)觸發上下文壓縮的hook，亦或者在執行bash命令時強制請求同意，亦或者時從最初就遵循漸進披露的原則，等等。

甚至更進一步的，當今agent時代的程式碼開發瓶頸已經從實現變成了審查，那我就可以在約束內部自定義一個檢查機制（比如TDD導向的開發模式），讓agent在最初就保證程式碼質量。抑或是直接在平臺內部開一個agent，不斷地跟進程式碼質量並**即時**基於開發agent程式碼質量的反饋。

>具體來說，約束包括以下內容：
	系統提示
	工具、技能、MCP + 及其描述
	捆綁基礎設施（檔案系統、沙盒、瀏覽器）
	編排邏輯（子代理生成、切換、模型路由）
	用於確定性執行的鉤子/中介軟體（壓縮、延續、lint 檢查）
>[The Anatomy of an Agent Harness](https://blog.langchain.com/the-anatomy-of-an-agent-harness/)

可以分為兩個大塊，對狀態的管理，和對邊界的管理。agent的執行在預設狀況下是無狀態的，那麼當我需要讓它開發一個新的專案時，就會變得非常有問題。因此我就需要從外部給它注入狀態，上下文工程就是幹這個的。但隨著專案開發本身開始複雜，那我需要的就不只是讓它知道幹什麼、怎麼做、用什麼做——我還需要規定它的邊界。因此「約束」不只是對上下文的約束，同樣還是對執行和開發的約束。

而這玩意兒做到極致就是全自動的agent，只需要「許願」，就能帶出全部想要的結果。所以想是[oh-my-claudecode](https://github.com/Yeachan-Heo/oh-my-claudecode/blob/main/README.zh.md)這樣的工具，其最核心的目的就是給agent提供**持久自主執行**下的約束。核心模型負責提供大腦，而 Harness 則提供讓其能最大化按照我想要的效果去發揮和生長的基礎平臺。就像一匹馬，讓框架帶著著韁繩，讓它走向我希望它去的方向。

---

現在比較正式的翻譯叫做「駕馭工程」，這個我確實也更貼切，用合適的Harness讓agent能更好的工作。我之前比較強調「自動運作」，但「人機互動」同樣需要更好的韁繩。一個好的Harness確實對工作非常重要。比如我比較習慣cc，codex和gemini或者opencode也不是不能用，但就總感覺少了點什麼。因為cc的Harness就目前來看，的確是使用者體驗比較好的一批，ide支援也齊全，最大的缺點就是閉源（當然也有開源平替，這還得感謝A\自己的誤操作）。我個人也不是很喜歡廠商鎖定，因此多嘗試其他Harness也是有益的。如果實在不爽，直接換成開源版cc倒也可以。
