<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Harness on KnightLi的博客</title>
        <link>https://knightli.com/zh-tw/tags/harness/</link>
        <description>Recent content in Harness on KnightLi的博客</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-tw</language>
        <lastBuildDate>Mon, 27 Apr 2026 08:19:02 +0800</lastBuildDate><atom:link href="https://knightli.com/zh-tw/tags/harness/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Ralph 和多智能體協同：怎麼讓 AI 長時間穩定工作</title>
        <link>https://knightli.com/zh-tw/2026/04/27/ralph-multi-agent-long-running-ai-workflows/</link>
        <pubDate>Mon, 27 Apr 2026 08:19:02 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/2026/04/27/ralph-multi-agent-long-running-ai-workflows/</guid>
        <description>&lt;p&gt;如果你最近在折騰 coding agent，很快就會遇到一個現實問題：&lt;strong&gt;AI 當然能幹活，但怎麼讓它連續幹幾個小時，還不在中途跑偏、忘要求、返工一堆？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;圍繞 &lt;code&gt;Ralph&lt;/code&gt; 和多智能體協同的這類討論，真正值得看的也正是這個問題。它不是單純比較某個模型有多強，而是把重點放在一層更實際的東西上：&lt;strong&gt;怎麼設計工作流，才能讓 AI 在長任務裡保持穩定輸出。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;把這個問題拆開看，常見的路線主要有兩條：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ralph&lt;/code&gt; 方案：不斷啟動新會話，透過檔案系統銜接上下文&lt;/li&gt;
&lt;li&gt;多智能體方案：主 Agent 做協調，子 Agent 分工執行&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果把它壓成一句更好理解的話，這裡討論的其實不是「哪個模型更厲害」，而是「怎麼把 AI 組織起來，讓它更像一個能持續交付的小團隊」。&lt;/p&gt;
&lt;h2 id=&#34;01-為什麼長時任務容易失控&#34;&gt;01 為什麼長時任務容易失控
&lt;/h2&gt;&lt;p&gt;短任務裡，很多問題不明顯。你給一句指令，模型讀幾份檔案，改幾行程式碼，事情也就結束了。&lt;/p&gt;
&lt;p&gt;但任務一旦拉長，問題會集中冒出來：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;會話越來越長，上下文開始膨脹&lt;/li&gt;
&lt;li&gt;早先的要求被新資訊擠掉&lt;/li&gt;
&lt;li&gt;一個 Agent 既要想方案，又要寫程式碼，還要自己測，容易顧不過來&lt;/li&gt;
&lt;li&gt;沒有明確驗收環節時，看起來「做完了」，其實只是「說自己做完了」&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以長時間運行 AI，真正考驗的往往不是模型單次輸出能力，而是 &lt;strong&gt;任務拆分、狀態銜接、角色分工和回饋回路&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;02-ralph-方案把長任務拆成很多短回合&#34;&gt;02 Ralph 方案：把長任務拆成很多短回合
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Ralph&lt;/code&gt; 的思路很適合先解決「上下文越跑越髒」這個問題。&lt;/p&gt;
&lt;p&gt;它的核心做法是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用循環不斷啟動新的 agent 會話&lt;/li&gt;
&lt;li&gt;每輪只處理一個足夠小的任務&lt;/li&gt;
&lt;li&gt;把跨輪狀態放到檔案裡，而不是全壓在同一個對話上下文裡&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這樣做的好處很直接：每次都是 fresh context，單輪會更聚焦，也更不容易被歷史訊息拖慢。&lt;/p&gt;
&lt;p&gt;如果你已經看過 &lt;code&gt;Ralph&lt;/code&gt; 相關專案，會發現這套方法背後的邏輯很一致：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;當前任務寫在結構化檔案裡&lt;/li&gt;
&lt;li&gt;中間經驗寫到進度檔案裡&lt;/li&gt;
&lt;li&gt;程式碼變化留在 git 歷史裡&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;換句話說，&lt;code&gt;Ralph&lt;/code&gt; 不是試圖讓一個 Agent「永遠記住所有事」，而是主動把記憶外置，讓會話本身保持輕一點。&lt;/p&gt;
&lt;p&gt;這類方案特別適合下面幾種情況：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;任務已經能拆成一組小 story&lt;/li&gt;
&lt;li&gt;每個 story 都能在單個上下文視窗裡完成&lt;/li&gt;
&lt;li&gt;專案裡已經有測試、typecheck 或其他檢查機制&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它解決的是「如何讓 AI 一輪一輪穩定推進」。&lt;/p&gt;
&lt;h2 id=&#34;03-多智能體方案把一個人做不完的事分出去&#34;&gt;03 多智能體方案：把一個人做不完的事分出去
&lt;/h2&gt;&lt;p&gt;另一條路線是多智能體協同。&lt;/p&gt;
&lt;p&gt;從這類工作流設計思路來看，更值得推薦的通常是這種方式：主 Agent 不直接埋頭幹活，而是負責協調；子 Agent 各自處理開發、測試、檢查、驗收等不同任務。&lt;/p&gt;
&lt;p&gt;這和 &lt;code&gt;Ralph&lt;/code&gt; 的區別在於：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ralph&lt;/code&gt; 更像串行迭代&lt;/li&gt;
&lt;li&gt;多智能體更像並行分工&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果任務裡天然有不同角色，多智能體會更順手。比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一個 Agent 負責拆任務和寫執行計畫&lt;/li&gt;
&lt;li&gt;一個 Agent 負責具體實作&lt;/li&gt;
&lt;li&gt;一個 Agent 負責測試和驗證&lt;/li&gt;
&lt;li&gt;一個 Agent 負責回看結果是不是符合最初需求&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這樣做的價值不是「多開幾個視窗顯得很高級」，而是讓不同工作職責分離開。原來塞在一個 Agent 身上的幾件事，現在可以拆成幾個更明確的環節。&lt;/p&gt;
&lt;p&gt;一旦角色邊界清楚，很多問題都會變輕：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;寫的人不必同時當審的人&lt;/li&gt;
&lt;li&gt;跑測試的人不必重新推導整套需求&lt;/li&gt;
&lt;li&gt;主 Agent 不會被實作細節淹沒&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它解決的是「如何讓 AI 像一個小團隊那樣配合」。&lt;/p&gt;
&lt;h2 id=&#34;04-真正關鍵的不是多開而是怎麼拆&#34;&gt;04 真正關鍵的，不是多開，而是怎麼拆
&lt;/h2&gt;&lt;p&gt;無論是 &lt;code&gt;Ralph&lt;/code&gt; 還是多智能體，最容易被忽略的一點都是：&lt;strong&gt;流程設計比多開幾個 Agent 更重要。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果任務拆分不對，就算開再多 Agent，也只是把混亂並行化。&lt;/p&gt;
&lt;p&gt;比較穩的拆法通常有幾個特點：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一個任務只對應一個明確目標&lt;/li&gt;
&lt;li&gt;一個角色只負責一類輸出&lt;/li&gt;
&lt;li&gt;每輪都有清楚的完成標準&lt;/li&gt;
&lt;li&gt;上一輪的結果能被下一輪直接消費&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;比如比起給 AI 一個「把整個功能做完」的大指令，更穩的方式往往是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;先拆出需求和邊界&lt;/li&gt;
&lt;li&gt;再拆實作&lt;/li&gt;
&lt;li&gt;再拆測試&lt;/li&gt;
&lt;li&gt;最後單獨做驗收&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這類拆法的好處是，問題一旦出現，更容易知道是出在理解、實作、測試，還是交付標準上。&lt;/p&gt;
&lt;h2 id=&#34;05-為什麼驗收環節特別重要&#34;&gt;05 為什麼驗收環節特別重要
&lt;/h2&gt;&lt;p&gt;很多 AI 工作流失敗，不是因為前面完全沒做事，而是因為最後缺了一個真正獨立的確認動作。&lt;/p&gt;
&lt;p&gt;在長任務裡，「已經生成結果」和「結果真的可用」之間，經常隔著一整層差距。&lt;/p&gt;
&lt;p&gt;這裡有個很值得重視的方向，就是把開發和驗收拆開看。哪怕不做到特別複雜，至少也應該把這些問題單獨問一遍：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;它真的完成了最初那條任務嗎&lt;/li&gt;
&lt;li&gt;有沒有只改表面、沒解決根因&lt;/li&gt;
&lt;li&gt;測試是不是只驗證了最順利的路徑&lt;/li&gt;
&lt;li&gt;有沒有把上游要求悄悄改掉&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;只要這層檢查缺位，AI 很容易在長流程裡不斷「自我宣布成功」。&lt;/p&gt;
&lt;h2 id=&#34;06-兩條路線怎麼選&#34;&gt;06 兩條路線怎麼選
&lt;/h2&gt;&lt;p&gt;如果只是想快速判斷，可以先這麼理解：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你最痛的是上下文膨脹和長會話失焦，先看 &lt;code&gt;Ralph&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;你最痛的是一個 Agent 身兼多職、任務之間互相打架，先看多智能體&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;再具體一點：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ralph&lt;/code&gt; 更適合流程清楚、任務細碎、可以按回合推進的工作&lt;/li&gt;
&lt;li&gt;多智能體更適合角色明顯、需要並行和交叉驗證的工作&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;很多時候，這兩條路也不是非此即彼。比較成熟的做法，反而可能是把它們組合起來：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;外層用 &lt;code&gt;Ralph&lt;/code&gt; 這種迭代循環推進大任務&lt;/li&gt;
&lt;li&gt;內層在單輪裡再用多智能體處理研究、實作、測試和驗收&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這樣既能控制長上下文，又能提高單輪內部的協作效率。&lt;/p&gt;
&lt;h2 id=&#34;07-一句話總結&#34;&gt;07 一句話總結
&lt;/h2&gt;&lt;p&gt;這類方法最值得看的地方，不是單獨推薦了 &lt;code&gt;Ralph&lt;/code&gt; 或多智能體，而是把一個很現實的問題講清楚了：&lt;strong&gt;讓 AI 長時間穩定工作，關鍵從來不只是模型本身，而是你有沒有把上下文、任務、角色和驗收設計好。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;如果你已經開始讓 &lt;code&gt;Claude Code&lt;/code&gt;、&lt;code&gt;Codex&lt;/code&gt; 或其他 coding agent 處理更長的真實任務，這類工作流思路會比「再換一個更強模型」更值得優先補課。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Anthropic 的 Harness 方向：Agent 基礎設施正走向 Agent OS</title>
        <link>https://knightli.com/zh-tw/2026/04/10/anthropic-harness-agent-os/</link>
        <pubDate>Fri, 10 Apr 2026 09:22:56 +0800</pubDate>
        
        <guid>https://knightli.com/zh-tw/2026/04/10/anthropic-harness-agent-os/</guid>
        <description>&lt;p&gt;Anthropic 最近發佈了一篇關於 Harness 的工程實踐文章。表面上是在講產品實作，本質上回答的是一個更長期的問題：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;當模型能力持續變化時，Agent 系統哪些層要穩定，哪些層應該允許快速替換？&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&#34;核心判斷&#34;&gt;核心判斷
&lt;/h2&gt;&lt;p&gt;我對這篇文章的核心理解是：Agent 基礎設施會越來越像一個輕量的 &lt;strong&gt;Agent OS&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;重點不在「把今天的最佳流程寫死」，而在「定義長期穩定的系統抽象」。&lt;/p&gt;
&lt;h2 id=&#34;為什麼這點重要&#34;&gt;為什麼這點重要
&lt;/h2&gt;&lt;p&gt;很多 Agent 框架常見的問題是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;把模型的臨時短板固化為永久架構&lt;/li&gt;
&lt;li&gt;把 prompt 工程誤當成系統邊界&lt;/li&gt;
&lt;li&gt;把一次有效的補丁寫成長期依賴&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;模型會變強，今天合理的補丁，明天可能就是技術債。&lt;/p&gt;
&lt;h2 id=&#34;anthropic-的解法從具體-harness-到-meta-harness&#34;&gt;Anthropic 的解法：從具體 Harness 到 Meta-Harness
&lt;/h2&gt;&lt;p&gt;這套思路不是承諾某一種固定編排方式，而是抽象出三層穩定介面：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;session&lt;/code&gt;：可恢復的事件與狀態歷史&lt;/li&gt;
&lt;li&gt;&lt;code&gt;harness&lt;/code&gt;：推理與調度循環（brain）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sandbox&lt;/code&gt;：執行環境與工具能力（hands）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;它們分離後，系統更容易替換、恢復和擴展。&lt;/p&gt;
&lt;h2 id=&#34;1-session-不是上下文視窗&#34;&gt;1) Session 不是上下文視窗
&lt;/h2&gt;&lt;p&gt;一個關鍵觀點是：&lt;strong&gt;Session 不等於模型上下文。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Session 應該是可查詢、可回放、可恢復的事件日誌，而不是直接塞給模型的歷史拼接。&lt;/p&gt;
&lt;p&gt;這樣做的價值：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;trimming 不等於歷史消失&lt;/li&gt;
&lt;li&gt;compaction 不等於事實丟失&lt;/li&gt;
&lt;li&gt;崩潰恢復可以回到事件層，而不是依賴摘要記憶&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2-harness-是可替換的編排層&#34;&gt;2) Harness 是可替換的編排層
&lt;/h2&gt;&lt;p&gt;Harness 應專注於調度，而不是持有業務狀態。&lt;/p&gt;
&lt;p&gt;理想介面更接近：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;execute(name, input) -&amp;gt; string&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;這代表模型只需要關心「我能調用哪些能力」，而不必強綁具體設備、容器或作業系統。&lt;/p&gt;
&lt;h2 id=&#34;3-sandbox-是手不是腦&#34;&gt;3) Sandbox 是「手」，不是「腦」
&lt;/h2&gt;&lt;p&gt;當 brain 和 hands 解耦後：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;工具環境可以獨立演進&lt;/li&gt;
&lt;li&gt;不同基礎設施可以並行接入&lt;/li&gt;
&lt;li&gt;不必每個會話都預熱完整執行環境&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這會直接帶來更好的啟動與擴展表現。&lt;/p&gt;
&lt;h2 id=&#34;效能與安全啟發&#34;&gt;效能與安全啟發
&lt;/h2&gt;&lt;p&gt;這種拆分通常會同時改善效能和安全。&lt;/p&gt;
&lt;p&gt;效能上：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;可以先啟動 brain，再按需拉起 hands&lt;/li&gt;
&lt;li&gt;降低首 token 延遲（TTFT）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;安全上：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;不把高敏憑證直接暴露給模型&lt;/li&gt;
&lt;li&gt;用受控 proxy / vault 做間接憑證訪問&lt;/li&gt;
&lt;li&gt;安全邊界建立在系統約束上，而不是「模型應該做不到」&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;相關連結&#34;&gt;相關連結
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://claude.com/blog/claude-managed-agents&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Usage patterns and customer examples&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.anthropic.com/engineering/managed-agents&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;The design of Claude Managed Agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://platform.claude.com/docs/en/managed-agents/quickstart&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Onboarding, quickstart, overview of the CLI and SKDs &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        
    </channel>
</rss>
