?Auto-train Harness如何用外圍優(yōu)化全面提升Agent性能)
當(dāng)你的 Agent 在測試集上表現(xiàn)不穩(wěn)定時很多團(tuán)隊(duì)的第一反應(yīng)是換底座模型比如從開源 7B 換成更大的 70B或者從 GPT-4o 換成“當(dāng)前最強(qiáng)”的模型。結(jié)果常常是有提升但幅度不大而且換了供應(yīng)商之后原來的工具調(diào)用方式可能又要重寫一遍。另一個常見反應(yīng)是微調(diào)模型。但微調(diào)成本高、數(shù)據(jù)難準(zhǔn)備而且很多 Agent 場景里模型其實(shí)沒有“知識缺陷”真正的問題出在它不知道該在什么時機(jī)調(diào)用工具、工具參數(shù)怎么填、調(diào)用失敗后如何恢復(fù)、結(jié)果不滿 意時應(yīng)該繼續(xù)檢索還是直接作答。這些問題不發(fā)生在模型參數(shù)內(nèi)部而發(fā)生在模型和外部環(huán)境之間的那一層代碼與配置里。這一層現(xiàn)在被越來越多開發(fā)者稱為 LLM Harness。最近在 Hacker News 上出現(xiàn)了一個很能概括這個方向的標(biāo)題Auto-train the harness, not the LLM. cross-model, cross-benchmark gains。大意是自動優(yōu)化外層 Harness而不是訓(xùn)練 LLM 本身并且把這種優(yōu)化帶來的收益遷移到多個模型和多個評測基準(zhǔn)上。這個觀點(diǎn)聽起來有些反直覺但放在 Agent 應(yīng)用大量落地的背景下它比“繼續(xù)卷底座模型”更貼近工程現(xiàn)實(shí)。這篇文章不是為了介紹某個具體倉庫而是想把這個思路拆開什么是 Harness、為什么要自動訓(xùn)練 Harness、怎么用最小工程驗(yàn)證它是否真的有效。1. 為什么說 Agent 的瓶頸可能不在模型而在 Harness先看一個高頻場景。你給 LLM 接上了搜索工具和計(jì)算器業(yè)務(wù)流程大概是系統(tǒng)提示詞告訴模型“不確定就搜索”工具描述里寫清楚搜索接口能做什么模型返回一個結(jié)構(gòu)化工具調(diào)用你的代碼去執(zhí)行函數(shù)再把結(jié)果拼回上下文讓模型繼續(xù)推理。聽上去很順實(shí)際跑起來卻經(jīng)常出現(xiàn)三類問題第一模型該搜索的時候不搜索不該搜索的時候反而搜索。這不是模型“笨”而是提示詞里沒有定義清楚判斷條件工具描述也沒有告訴模型什么樣的問題屬于“需要實(shí)時信息”。第二工具結(jié)果回填格式混亂。模型可能返回一個很長的網(wǎng)頁摘要上下文被撐爆或者返回了 JSON 數(shù)組但你的解析器只處理了對象。這些格式問題本質(zhì)上由 Harness 環(huán)節(jié)的人為規(guī)定造成。第三Agent 陷入死循環(huán)。模型反復(fù)調(diào)用同一個工具拿到相似結(jié)果然后繼續(xù)調(diào)用。如果循環(huán)次數(shù)、停 止條件、結(jié)果去重沒有兜底再強(qiáng)的模型也會在真實(shí)環(huán)境里打轉(zhuǎn)。如果你把這些問題歸因于“模型能力不夠”就會走上換模型或微調(diào)的路。但稍微復(fù)盤一下就會承認(rèn)模型大多是按照它看到的那套系統(tǒng)提示、工具定義、消息歷史去決策的。模型像一個經(jīng)驗(yàn)豐富但完全聽信流程的員工真正決定工作質(zhì)量的是他手里的操作手冊和上級給的授權(quán)邊界。這個操作手冊和授權(quán)邊界就是 Harness。Harness 不是某個大模型廠商提出的專有概念。只要你在做 Agent、寫 RAG、做工具調(diào)用其實(shí)已經(jīng)不知不覺寫了大量 Harness 代碼。問題在于過去我們把這些代碼當(dāng)成“調(diào)用 API 的臨時膠水”沒有意識到它們是可以系統(tǒng)設(shè)計(jì)的、擁有獨(dú)立版本、需要評測和優(yōu)化的核心部件。從很多公開討論來看過去半年“Harness 工程”這個詞出現(xiàn)的頻率明顯升高。圍繞 DeepSeek、Codex 等模型的封裝工具也開始出現(xiàn)。大家開始默認(rèn)一個前提當(dāng)模型能力差距縮小到一定程度Agent 效果的上限不取決于你選哪個底座模型而取決于你在這層外圍工程上做得有多細(xì)。2. 什么是 LLM Harness模型、環(huán)境與任務(wù)之間的膠水層要理解 Auto-train Harness先得把 Harness 的邊界畫清楚。LLM Harness 可以理解為為了讓 LLM 完成真實(shí)任務(wù)而在模型之外增加的提示模板、工具定義、循環(huán)控制、上下文管理、結(jié)果校驗(yàn)與安全邊界的總稱。它至少包含四塊內(nèi)容。第一塊是認(rèn)知接口。也就是模型“看到”什么。系統(tǒng)提示詞、用戶問題的組織方式、工具名稱和描述、Few-shot 示例、輸出格式約束都屬于認(rèn)知接口。模型不會直接看到你的內(nèi)部工具它只能看到你給它描述過的工具。因此工具描述寫得好不好直接決定模型會不會調(diào)用正確的工具。很多團(tuán)隊(duì)只把工具描述當(dāng)作文檔隨手寫一句“查詢訂單狀態(tài) API”模型在復(fù)雜語境里自然容易誤用。第二塊是執(zhí)行循環(huán)。LLM 本身沒有手它不能真正執(zhí)行搜索、不能寫數(shù)據(jù)庫、不能發(fā)送 HTTP 請求。模型能做的只是輸出一個結(jié)構(gòu)化的工具調(diào)用請求。誰來執(zhí)行這個請求誰來把執(zhí)行結(jié)果放回消息歷史誰來決定是繼續(xù)讓模型推理還是終止這些是 Harness 的運(yùn)行時控制部分。ReAct 模式、Tool Calling 循環(huán)、LangChain Agent 里的執(zhí)行器、各類 Agent 框架中的 Loop本質(zhì)都屬于這一層。第三塊是穩(wěn)定性機(jī)制。真實(shí)環(huán)境是不穩(wěn)定的。工具可能超時第三方 API 可能返回臟數(shù)據(jù)模型可能連續(xù)多次輸出無效 JSON甚至可能在一次回復(fù)中同時給出最終答案和工具調(diào)用。Harness 需要處理這些異常重試、截?cái)唷㈠e誤提示、回退策略、最大輪次限制。沒有這層機(jī)制模型即使知道答案也可能會被一次工具異常帶偏。第四塊是安全和數(shù)據(jù)邊界。一個 Agent 能訪問哪些工具、每個工具允許哪些參數(shù)、調(diào)用前是否需要審批、日志里能不能出現(xiàn)敏感字段這些通常不會被模型自身感知而是由 Harness 在調(diào)用執(zhí)行前強(qiáng)制執(zhí)行。越是進(jìn)入生產(chǎn)環(huán)境這部分的分量越重。把模型和外層 Harness 分開看會發(fā)現(xiàn)它們想解決的問題不同。層面主要問題改進(jìn)方式成本類型LLM 參數(shù)知識、推理、指令遵循預(yù)訓(xùn)練、微調(diào)、RLHF算力和數(shù)據(jù)成本高Harness工具調(diào)用、流程控制、穩(wěn)定性提示詞優(yōu)化、循環(huán)策略、代碼邏輯開發(fā)和評測成本高評測體系改進(jìn)是否真實(shí)存在基準(zhǔn)集、交叉驗(yàn)證、回歸測試評測基建成本Harness 經(jīng)常被誤認(rèn)為只是“提示詞工程”其實(shí)提示詞只是認(rèn)知接口的一部分。更重要的是Harness 是可以寫代碼、做控制流、跑自動化評測的系統(tǒng)。正因?yàn)樗窍到y(tǒng)所以可以在不改變模型權(quán)重的情況下被優(yōu)化自動化的優(yōu)化就變得有可能性。這就是 Auto-train Harness 的核心前提。3. Auto-train Harness 的思路調(diào)的不是模型參數(shù)而是決策策略“Auto-train”這個詞聽起來很大它未必意味著你要做 PyTorch 訓(xùn)練。在 Agent 場景里它更接近一種搜索或自動調(diào)優(yōu)過程把 Harness 的關(guān)鍵變量從人工配置變成可枚舉、可變異的參數(shù)空間然后通過自動評測尋找更優(yōu)配置。傳統(tǒng)手工調(diào) Harness 是幾天前最常見的做法。一個人對著系統(tǒng)提示詞改三版把工具描述從“搜索網(wǎng)頁”改成“當(dāng)用戶詢問最新新聞時使用此工具獲取搜索結(jié)果”再跑一遍評測集看準(zhǔn)確率有沒有漲。這種方式的問題在于評測集的噪聲經(jīng)常比提示詞差異帶來的收益還大人工很難判斷一個改動是真正有效還是碰巧有效。自動優(yōu)化至少能保證候選配置都跑在同一個評測集上打分一致最后用規(guī)則選出表現(xiàn)最好的配置而不是靠感覺。如果要自動訓(xùn)練的變量只有提示詞那它其實(shí)還是提示詞搜索??梢园褍?yōu)化空間擴(kuò)大一些系統(tǒng)提示詞與工具描述換措辭、換結(jié)構(gòu)、增加邊界條件說明。工具順序與可見性模型不一定要看到全部工具按任務(wù)路由到不同工具子集可能更好。循環(huán)控制最大迭代次數(shù)、提前終止條件、連續(xù)相同工具結(jié)果時是否中斷。輸出解析與校驗(yàn)要求模型先輸出 JSON 再輸出解釋或者反過來。模型路由策略簡單任務(wù)用便宜小模型復(fù)雜任務(wù)才交給大模型。Few-shot 示例選擇從已完成任務(wù)中挑相似樣例放入上下文。這些變量共同決定了一個 Agent 的實(shí)際行為邊界。而且它們大多不綁定某個具體模型。換句話說一套合理的 Harness 配置在換一個底座模型之后大概率仍然有效。這正是“cross-model”收益能成立的根本原因如果你的優(yōu)化只針對某個模型的表達(dá)能力那它很難遷移如果你的優(yōu)化改善了工具描述結(jié)構(gòu)、循環(huán)控制這一層通用機(jī)制它就能在多個模型上同時帶來增益。Cross-benchmark 的道理同樣如此。不同基準(zhǔn)會考察不同能力比如有些考察多跳推理有些考察工具調(diào)用準(zhǔn)確性有些考察最終答案是否簡潔。如果一個 Harness 變體只在某個基準(zhǔn)上提升可能是過擬合到該基準(zhǔn)的數(shù)據(jù)風(fēng)格只有多個基準(zhǔn)同時提升才能說明它優(yōu)化的是比較通用的行為。3.1 Auto-train 與微調(diào)的區(qū)別很多人會問Auto-train Harness 是不是一種微調(diào)并不是。對比維度微調(diào) LLMAuto-train Harness對象模型權(quán)重配置、提示詞、循環(huán)策略成本GPU、訓(xùn)練框架、數(shù)據(jù)標(biāo)注評測任務(wù)、API 調(diào)用、搜索算法遷移性一般只對當(dāng)前模型有效跨模型遷移可能性更高迭代速度小時到天分鐘到小時風(fēng)險可能改變模型通用能力主要影響 Agent 行為邊界這兩者不互斥。如果場景高度垂直微調(diào)仍然有價值。但如果只是想讓 Agent 更會調(diào)用工具、更少陷入循環(huán)、更穩(wěn)定地輸出結(jié)果先花時間優(yōu)化 Harness 的性價比通常更高。Show HN 標(biāo)題里“not the LLM”的重點(diǎn)應(yīng)該理解為優(yōu)化重心轉(zhuǎn)移而不是否定所有的模型訓(xùn)練。4. Cross-Model、Cross-Benchmark 究竟該怎么驗(yàn)證很多團(tuán)隊(duì)做過類似的事給提示詞加一句“請一步步思考”然后在自己的評測集上看到分?jǐn)?shù)漲了就說 prompt engineering 有效。但如果把同一套提示詞換一個模型效果可能反而下降。這說明這個改進(jìn)只對單個模型有效屬于某種模型偏好耦合不是真正的 Harness 改進(jìn)。要驗(yàn)證一個 Auto-train Harness 方案是否真的帶來了跨模型、跨基準(zhǔn)增益需要一個相對嚴(yán)謹(jǐn)?shù)脑u估矩陣。至少應(yīng)該包含三個模型和兩個以上評測基準(zhǔn)。比如三個模型分別來自不同機(jī)構(gòu)評測基準(zhǔn)分別覆蓋工具調(diào)用、多輪對話、信息檢索或代碼生成。優(yōu)化的 Harness 在開發(fā)集上搜索時就應(yīng)當(dāng)在多個模型上同時評估選取平均表現(xiàn)更好的配置而不是只盯著主力模型。把數(shù)據(jù)分成開發(fā)集和測試集也很重要。開發(fā)集用來搜索和選擇 Harness 配置測試集在最終配置選定后只跑一次。如果開發(fā)集和測試集來自同一個基準(zhǔn)可能存在風(fēng)格相似導(dǎo)致的過擬合所以更穩(wěn) 妥的做法是額外準(zhǔn)備一個 Held-out Benchmark也就是模型和 Harness 都沒有見過的新評測基準(zhǔn)。只有最終配置在 Held-out Benchmark 上也保持優(yōu)勢時才有底氣說“提升是真的”。一句話跨模型驗(yàn)證是為了防止改進(jìn)只對自己用的模型有效跨基準(zhǔn)驗(yàn)證是為了防止改進(jìn)只對某一個評測集有效。Show HN 標(biāo)題中提到的“gains”如果缺少這種矩陣驗(yàn)證仍然只能視為一種初步觀察。5. 最小實(shí)現(xiàn)一個可落地的 Harness 自動優(yōu)化雛形下面用一個與具體廠商無關(guān)的 Python 示例來演示 Auto-train Harness 的完整鏈路。這里不依賴某一家模型 SDK而是把模型調(diào)用抽象成call_llm()。實(shí)際項(xiàng)目中根據(jù)你用的模型服務(wù)換成對應(yīng)客戶端即可。5.1 定義一份 Harness 配置先看 Harness 配置示例。它描述的是Agent 的系統(tǒng)提示詞、可選工具列表、循環(huán)控制參數(shù)。學(xué)習(xí)這類思路時盡量把配置與代碼分離因?yàn)?Harness 本身會被反復(fù)修改。{ harness_name: react_tool_agent_v1, system_prompt: You are a helpful research agent. If the question asks about real-time facts, call web_search before answering., tools: [ { name: web_search, description: Search the web for keywords and return relevant snippets., parameters: { type: object, properties: { keywords: { type: string, description: search keywords } }, required: [keywords] } }, { name: calculator, description: Evaluate a arithmetic expression., parameters: { type: object, properties: { expression: { type: string, description: A mathematical expression, for example 3 * (7 2) } }, required: [expression] } } ], loop: { max_rounds: 5, stop_when: no_tool_call } }這份配置的核心價值在于把 Harness 關(guān)心的東西集中到一個文件里。修改工具描述、調(diào)整系統(tǒng)提示詞、限制最大輪次都通過配置完成不需要改 Agent 主邏輯。5.2 寫一個最小評測循環(huán)下面代碼的目標(biāo)是給定一份 Harness 配置和一個模型在一個簡單評測集上返回準(zhǔn)確率和 token 成本。代碼演示的是核心思路并不負(fù)責(zé)處理所有真實(shí) SDK 差異。# harness/evaluator.py import json def to_openai_tool(tool_meta): return { type: function, function: { name: tool_meta[name], description: tool_meta[description], parameters: tool_meta.get( parameters, {type: object, properties: {}} ), }, } def execute_tool(name, args_json, example): 模擬執(zhí)行工具。實(shí)際項(xiàng)目需要替換為真實(shí)搜索或計(jì)算邏輯。 args json.loads(args_json) if name calculator: expression args.get(expression, ) try: result eval(expression, {__builtins__: {}}, {}) except Exception: result calculation_error return fresult{result} if name web_search: # 在演示里我們用 example 中預(yù)置的 context 代替真實(shí)網(wǎng)頁結(jié)果。 context example.get(context, ) return ffound:{context[:300]} return unknown_tool def judge_answer(answer, expected): 演示用判斷真實(shí)場景建議引入獨(dú)立的答案評估 prompt 或精確匹配。 return float(expected.strip().lower() in answer.lower()) def run_single(harness_cfg, model_name, example): messages [ {role: system, content: harness_cfg[system_prompt]}, {role: user, content: example[question]}, ] max_rounds harness_cfg[loop][max_rounds] tools [to_openai_tool(t) for t in harness_cfg[tools]] for _ in range(max_rounds): resp call_llm(model_namemodel_name, messagesmessages, toolstools) assistant resp.choices[0].message messages.append(assistant) tool_calls assistant.tool_calls or [] if not tool_calls: answer assistant.content or return judge_answer(answer, example[expected]), resp.usage.total_tokens for call in tool_calls: result execute_tool(call.function.name, call.function.arguments, example) messages.append( { role: tool, tool_call_id: call.id, content: result, } ) return 0.0, 0 def evaluate_candidate(harness_cfg, model_name, examples): total 0 correct 0 total_tokens 0 for example in examples: score, token_cost run_single(harness_cfg, model_name, example) correct score total_tokens token_cost total 1 return { accuracy: correct / max(total, 1), avg_cost: total_tokens / max(total, 1), }這里真正的核心不是代碼本身而是它建立了一個評測入口同一份 Harness 配置同一個模型同一批例子跑出的分?jǐn)?shù)才能互相比較。call_llm()在示例中沒有定義因?yàn)樗皇悄P凸?yīng)商 SDK 的一層薄封裝。真實(shí)開發(fā)時用 OpenAI、Anthropic、本地部署的 DeepSeek、Qwen 等任意服務(wù)替換均可。5.3 實(shí)現(xiàn)自動搜索隨機(jī)搜索已經(jīng)能證明問題自動優(yōu)化的算法可以從很簡單的隨機(jī)搜索開始。雖然聽起來不高級但它能幫助你快速驗(yàn)證流水線是否通暢也能作為后續(xù)貝葉斯優(yōu)化、進(jìn)化算法的基線。# harness/optimizer.py import copy import random def random_search(base_config, eval_models, dev_set, rounds10): prompt_pool [ You are a helpful agent. Only call tools when necessary., You are a research agent. If you are not fully certain, search first., You are an assistant. Answer directly if you know; otherwise call tools., ] max_rounds_pool [3, 5, 8] best_cfg None best_score -1.0 for i in range(rounds): candidate copy.deepcopy(base_config) candidate[system_prompt] random.choice(prompt_pool) candidate[loop][max_rounds] random.choice(max_rounds_pool) # 調(diào)整工具展示順序。順序本身會影響模型先嘗試哪個工具。 random.shuffle(candidate[tools]) # 在多個模型上同時評估避免只對單個模型有效。 acc_list [] for model_name in eval_models: metric evaluate_candidate(candidate, model_name, dev_set) acc_list.append(metric[accuracy]) avg_acc sum(acc_list) / len(acc_list) print(f[round {i}] avg_acc{avg_acc:.3f} acc_list{acc_list}) if avg_acc best_score: best_score avg_acc best_cfg candidate return best_cfg, best_score5.4 最終配置的跨基準(zhǔn)驗(yàn)證選出最優(yōu)配置后不能立刻上線還需要在 Held-out Benchmark 上驗(yàn)證。這段代碼會把最終配置在先前沒有優(yōu)化過的評測集上運(yùn)行一遍觀察它是否還保持優(yōu)勢。def validate_on_heldout(final_cfg, eval_models, heldout_examples): print(--- held-out validation ---) for model_name in eval_models: metric evaluate_candidate(final_cfg, model_name, heldout_examples) print( f{model_name}: faccuracy{metric[accuracy]:.3f}, favg_cost{metric[avg_cost]:.2f} )到這里我們已經(jīng)有了一條完整的 Auto-train Harness 雛形鏈路配置化 Harness、可重復(fù)評測、多模型打分、自動搜索、最后跨基準(zhǔn)驗(yàn)證。算法可以從隨機(jī)搜索變成更復(fù)雜的方法但這條鏈路本身不會變。6. 運(yùn)行思路與效果驗(yàn)證怎樣算一次優(yōu)化真正成功運(yùn)行上述腳本時你不需要一開始就用大規(guī)模評測集。可以先準(zhǔn)備 50 到 100 條代表性樣例再選擇兩到三個模型跑 10 到 20 輪搜索。重點(diǎn)不是跑出多高的分?jǐn)?shù)而是確認(rèn)優(yōu)化鏈路能穩(wěn)定運(yùn)行。預(yù)期你會看到類似下面的輸出示意。這里的數(shù)字只是為了展示格式不是真實(shí)評測結(jié)果。[round 0] avg_acc0.451 acc_list[0.47, 0.44, 0.45] [round 1] avg_acc0.438 acc_list[0.45, 0.43, 0.44] [round 2] avg_acc0.472 acc_list[0.50, 0.46, 0.46] [round 3] avg_acc0.466 acc_list[0.51, 0.43, 0.46] ... best_score0.491 acc_list[0.52, 0.48, 0.48]判斷成功的標(biāo)準(zhǔn)不是只挑 acc_list 中某個模型最高的那輪而是看平均分是否穩(wěn)定高于基線。如果候選配置在模型 A 上大幅提升在模型 B 上明顯下降那這種方案很可能是在迎合模型 A 的表達(dá)偏好并不算跨模型收益。當(dāng)最終配置進(jìn)入 Held-out Benchmark 時你還需要關(guān)注當(dāng)時在開發(fā)集上的優(yōu)勢是否還在。如果開發(fā)集提升明顯Held-out 卻完全無效說明優(yōu)化過程過擬合了開發(fā)集的題目風(fēng)格。運(yùn)行失敗時第一步不要急著看模型 API 報錯先檢查評測輸入流水線樣例有沒有正常加載、工具執(zhí)行函數(shù)是否可用、call_llm()返回格式是不是符合預(yù)期。很多“模型表現(xiàn)差”的結(jié)論最后都來自評測腳本 bug而不是模型問題。建立一條干凈可復(fù)現(xiàn)的評測基線比任何優(yōu)化算法都重要。7. Harness 自動優(yōu)化的常見問題與排查思路問題現(xiàn)象可能原因排查方式解決方案每次搜索分?jǐn)?shù)波動很大評測樣例太少模型采樣有隨機(jī)性增加樣例量或同題多次采樣取平均固定溫度或用多次運(yùn)行中位數(shù)代替單次分?jǐn)?shù)模型 A 提升但模型 B 下降優(yōu)化到了模型 A 的特殊表達(dá)偏好查看候選配置在模型 A/B 上的詳細(xì) log將優(yōu)化目標(biāo)改成多模型平均分或加入約束懲罰最大下降幅度開發(fā)集漲了Held-out Benchmark 不漲Harness 過擬合了開發(fā)集風(fēng)格檢查兩項(xiàng)評測集分布差異增加不同任務(wù)類型的評測集減少開發(fā)集與測試集重疊Token 成本明顯上升循環(huán)次數(shù)變多上下文里重復(fù)內(nèi)容增加打印每輪消息數(shù)量和 token 用量增加提前終止條件對相似工具結(jié)果做去重Harness 優(yōu)化后輸出不如手寫版本自動搜索沒有覆蓋關(guān)鍵變量檢查候選配置的差異程度擴(kuò)大參數(shù)空間允許對工具描述做改寫上線后效果與評測不一致線上環(huán)境分布和評測集不同記錄線上輸入與工具調(diào)用日志持續(xù)回流線上樣本定期增量評測自動搜索最大的坑并不是算法選得不好而是評測集與真實(shí)任務(wù)不匹配。如果你拿一組答案很簡短的單輪問答去做 Harness 搜索選出來的配置可能特別喜歡“直接回答”而不是“調(diào)用工具”。一旦上線面對需要多輪工具調(diào)用的真實(shí)問題效果自然下降。因此開發(fā)集需要覆蓋足夠多的真實(shí)形態(tài)至少包含需要調(diào)用工具、不需要調(diào)用工具、工具調(diào)用失敗后重試等典型分支。常見問題里還有一個隱蔽點(diǎn)模型服務(wù)版本的波動。同一個模型名稱背后供應(yīng)商可能悄然更新版本。今天跑出 0.50 分明天同樣是 0.46不一定是你的 Harness 變差而是模型行為漂移。團(tuán)隊(duì)內(nèi)部要把模型版本固定為可見字段才能區(qū)分變化來自模型還是來自 Harness。8. 工程化落地建議把 Harness 當(dāng)成獨(dú)立項(xiàng)目來管理Harness 工程化可以在團(tuán)隊(duì)里落地為幾個清晰動作。第一個動作是配置與代碼分離。不要把系統(tǒng)提示詞硬編碼在 agent 源碼里尤其是不要散落在多個 service 文件中。統(tǒng)一維護(hù)一份 Harness 配置包含提示詞、工具描述、路由規(guī)則和循環(huán)參數(shù)。這樣后續(xù)優(yōu)化可以在配置層面做實(shí)驗(yàn)而不用頻繁提交業(yè)務(wù)代碼。第二個動作是建立評估矩陣。至少要有一個腳本可以輸入候選配置、指定模型列表和評測集名稱輸出性能與成本表格。沒有這個矩陣任何關(guān)于“Harness 是否改進(jìn)”的討論都容易淪為空談。矩陣?yán)锝ㄗh同時記錄模型名稱與版本、評測集版本、Harness 配置 hash、運(yùn)行時間和總 token 成本。第三個動作是搜索與人工 review 結(jié)合。自動優(yōu)化可以發(fā)現(xiàn)人想不到的提示詞寫法但它發(fā)現(xiàn)問題的方式是分?jǐn)?shù)驅(qū)動。分?jǐn)?shù)高不代表安全不代表符合產(chǎn)品規(guī)則。上線前必須人工 review 自動選出的配置確認(rèn)工具權(quán)限邊界沒有被擴(kuò)大確認(rèn)模型在敏感問題上仍能正確拒絕。第四個動作是嚴(yán)格控制工具權(quán)限。無論 Auto-train Harness 實(shí)驗(yàn)結(jié)果多好生產(chǎn)環(huán)境的工具調(diào)用都必須遵守最小權(quán)限原則。搜索工具只能訪問白名單地址數(shù)據(jù)庫工具只能執(zhí)行只讀查詢或經(jīng)過審批的寫操作涉及用戶隱私的字段在日志中脫敏。Harness 優(yōu)化能做的是讓模型更準(zhǔn)確地調(diào)用工具但無法替代權(quán)限系統(tǒng)本身。第五個動作是回歸測試。當(dāng)你的核心模型從 GPT 換成 DeepSeek、Qwen 或其它模型時所有經(jīng)過優(yōu)化的 Harness 配置都要重新跑一遍小規(guī)模回歸測試。跨模型遷移是一種期望但每種模型對提示詞的敏感點(diǎn)不同不能默認(rèn)遷移一定成立。9. 結(jié)語先把評估矩陣搭起來再談是否 Auto-trainAuto-train the harness, not the LLM真正想表達(dá)的是Harness 不再應(yīng)該被當(dāng)作模型調(diào)用之外的附屬品而應(yīng)該被當(dāng)作一個可以被設(shè)計(jì)、評測與搜索優(yōu)化的系統(tǒng)。模型負(fù)責(zé)輸出智能Harness 負(fù)責(zé)把智能安全穩(wěn)定地轉(zhuǎn)化為行動。如果你現(xiàn)在正在做 Agent 開發(fā)可以暫時不引入復(fù)雜的自動優(yōu)化算法先做三件事把 Harness 配置化建立一份包含多個模型的小評測集跑出一個穩(wěn)定的 baseline。當(dāng)你發(fā)現(xiàn)手工調(diào)整提示詞已經(jīng)難以穩(wěn)定提升時再把隨機(jī)搜索或更高級的優(yōu)化算法接到這條鏈路上。到那時你會更理解“Auto-train Harness”的價值它不承諾某個魔法提示詞它只提供一種系統(tǒng)化的方式讓你在模型不變的前提下找到更好的外圍策略。建議先收藏這篇文章并在下一次 Agent 調(diào)試時嘗試把問題歸因從“模型不行”改寫成“Harness 哪里還不夠穩(wěn)”你會發(fā)現(xiàn)調(diào)試思路開闊很多。