<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Collaboration on Tarragon</title><link>https://tarrragon.github.io/blog/tags/collaboration/</link><description>Recent content in Collaboration on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Thu, 14 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/collaboration/index.xml" rel="self" type="application/rss+xml"/><item><title>4.5 人機協作拓樸：何時人介入、怎麼介入</title><link>https://tarrragon.github.io/blog/llm/04-applications/human-ai-collaboration/</link><pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/llm/04-applications/human-ai-collaboration/</guid><description>&lt;p>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/human-in-the-loop/" data-link-title="Human-in-the-loop（HITL）" data-link-desc="人類介入 LLM 工作流的設計：三種觸發時機（pre-act / mid-stream / post-hoc）、避免橡皮圖章化的四條件">HITL（human-in-the-loop）&lt;/a> 設計的本質是&lt;strong>在「人類介入頻率」spectrum 上選位置&lt;/strong>——位置由 risk（副作用範圍 + 失敗代價）跟自動 validator 能力決定。risk 高 + validator 弱、人類介入頻率高；risk 低 + validator 強、人類介入頻率低。落點選錯就會出兩種事故：自動化過度跑 production migration 是 over-trust、每個 tool call 都要 approval 是 under-trust。&lt;/p>
&lt;p>本章寫人機協作的拓樸設計：兩種工作模式（centaur / cyborg）、能力邊界的不規則性（jagged frontier）、三種 HITL 觸發時機、跟 &lt;a href="https://tarrragon.github.io/blog/llm/04-applications/agent-architecture/" data-link-title="4.4 Agent 架構原理" data-link-desc="Agent loop 結構、失敗模式、什麼任務適合 vs 不適合、跟人類審查的協作模型">4.4 agent 自主度分層&lt;/a> 的對應。這層問題是跨產品 / 跨領域通用、跟具體 framework 無關。&lt;/p>
&lt;h2 id="本章目標">本章目標&lt;/h2>
&lt;p>讀完本章後你能：&lt;/p>
&lt;ol>
&lt;li>區分 centaur 跟 cyborg 兩種工作模式、判斷哪種適合哪種任務。&lt;/li>
&lt;li>描述 jagged frontier、解釋為什麼「全自動」是錯題。&lt;/li>
&lt;li>在 pre-act / mid-stream / post-hoc 三個時機點選對 HITL 設計。&lt;/li>
&lt;li>設計確認流程、避免人類變橡皮圖章。&lt;/li>
&lt;li>把這層設計對應回 &lt;a href="https://tarrragon.github.io/blog/llm/04-applications/agent-architecture/" data-link-title="4.4 Agent 架構原理" data-link-desc="Agent loop 結構、失敗模式、什麼任務適合 vs 不適合、跟人類審查的協作模型">4.4 agent 架構&lt;/a> 的自主度分層。&lt;/li>
&lt;/ol>
&lt;h2 id="兩種工作模式centaur-跟-cyborg">兩種工作模式：Centaur 跟 Cyborg&lt;/h2>
&lt;p>Centaur 跟 cyborg 是兩種人類跟 LLM 共事的姿態。概念起源於 Kasparov 2010 提的 advanced chess（人類 + AI 配合下棋）、HBS / UPenn / Wharton 對 BCG 顧問使用 AI 的研究把這對 framing 套到 knowledge work、觀察到兩種使用模式都存在且各有適用。&lt;/p>
&lt;h3 id="centaur-模式">Centaur 模式&lt;/h3>
&lt;p>人類把整段任務委派給 LLM、等結果回來再審。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>比喻&lt;/strong>：人馬獸——上半身人、下半身馬、清楚的職責分工。&lt;/li>
&lt;li>&lt;strong>典型場景&lt;/strong>：「寫一份這個主題的 PPT 大綱、含三個案例、按以下風格、做完給我」、LLM 跑幾分鐘、人類審結果。&lt;/li>
&lt;li>&lt;strong>適合&lt;/strong>：任務邊界清楚、人類能事先描述完整需求、結果可離線審。&lt;/li>
&lt;li>&lt;strong>失敗模式&lt;/strong>：任務描述漏細節、LLM 跑偏到沒注意、結果不能用。緩解：先給小範圍試跑、確認方向再放手。&lt;/li>
&lt;/ul>
&lt;h3 id="cyborg-模式">Cyborg 模式&lt;/h3>
&lt;p>人類跟 LLM 緊密協作、快速來回、人類隨時調整方向。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>比喻&lt;/strong>：半機械人——人類跟 LLM 融合、邊做邊改。&lt;/li>
&lt;li>&lt;strong>典型場景&lt;/strong>：寫 code 時 IDE 內 inline completion、寫文章時邊輸入邊看 LLM 建議、debug 時來回問。&lt;/li>
&lt;li>&lt;strong>適合&lt;/strong>：任務探索性、需求邊做邊浮現、無法事先完整描述。&lt;/li>
&lt;li>&lt;strong>失敗模式&lt;/strong>：頻繁打斷思路、context switch 成本高、最後產出反而比 centaur 慢。緩解：對熟悉的任務 cyborg、不熟的任務 centaur。&lt;/li>
&lt;/ul>
&lt;h3 id="該用哪種">該用哪種&lt;/h3>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>任務性質&lt;/th>
 &lt;th>預設模式&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>邊界清楚、需求可事先描述完整&lt;/td>
 &lt;td>Centaur&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>探索性、邊做邊定義&lt;/td>
 &lt;td>Cyborg&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>大量重複（如 100 篇文章）&lt;/td>
 &lt;td>Centaur&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>創意 / 設計、要看回饋微調&lt;/td>
 &lt;td>Cyborg&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>高代價、要 rollback 控制&lt;/td>
 &lt;td>Centaur + 強 review&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>學生 / 個人開發更常 cyborg 工作、企業自動化更常 centaur 工作。看到一個產品設計時、問「它鼓勵 user 走 centaur 還是 cyborg」、就能判讀它的設計取向。&lt;/p>
&lt;h2 id="jagged-frontierai-能力的不規則邊界">Jagged Frontier：AI 能力的不規則邊界&lt;/h2>
&lt;p>&lt;a href="https://tarrragon.github.io/blog/llm/knowledge-cards/jagged-frontier/" data-link-title="Jagged frontier" data-link-desc="AI 能力分佈不規則的 framing：某些看似簡單的任務 AI 容易壞、某些看似複雜的任務 AI 反而做得好">Jagged frontier&lt;/a> 是觀察 AI 能力分佈的 framing。直覺上「AI 能做的任務」應該是一個 smooth 的連續區、簡單的能做、難的不能。實際上不是——AI 能做的任務分佈是&lt;strong>鋸齒狀（jagged）&lt;/strong>：某些看起來難的任務 AI 做得很好、某些看起來簡單的任務 AI 反而做不好。&lt;/p></description><content:encoded><![CDATA[<p><a href="/blog/llm/knowledge-cards/human-in-the-loop/" data-link-title="Human-in-the-loop（HITL）" data-link-desc="人類介入 LLM 工作流的設計：三種觸發時機（pre-act / mid-stream / post-hoc）、避免橡皮圖章化的四條件">HITL（human-in-the-loop）</a> 設計的本質是<strong>在「人類介入頻率」spectrum 上選位置</strong>——位置由 risk（副作用範圍 + 失敗代價）跟自動 validator 能力決定。risk 高 + validator 弱、人類介入頻率高；risk 低 + validator 強、人類介入頻率低。落點選錯就會出兩種事故：自動化過度跑 production migration 是 over-trust、每個 tool call 都要 approval 是 under-trust。</p>
<p>本章寫人機協作的拓樸設計：兩種工作模式（centaur / cyborg）、能力邊界的不規則性（jagged frontier）、三種 HITL 觸發時機、跟 <a href="/blog/llm/04-applications/agent-architecture/" data-link-title="4.4 Agent 架構原理" data-link-desc="Agent loop 結構、失敗模式、什麼任務適合 vs 不適合、跟人類審查的協作模型">4.4 agent 自主度分層</a> 的對應。這層問題是跨產品 / 跨領域通用、跟具體 framework 無關。</p>
<h2 id="本章目標">本章目標</h2>
<p>讀完本章後你能：</p>
<ol>
<li>區分 centaur 跟 cyborg 兩種工作模式、判斷哪種適合哪種任務。</li>
<li>描述 jagged frontier、解釋為什麼「全自動」是錯題。</li>
<li>在 pre-act / mid-stream / post-hoc 三個時機點選對 HITL 設計。</li>
<li>設計確認流程、避免人類變橡皮圖章。</li>
<li>把這層設計對應回 <a href="/blog/llm/04-applications/agent-architecture/" data-link-title="4.4 Agent 架構原理" data-link-desc="Agent loop 結構、失敗模式、什麼任務適合 vs 不適合、跟人類審查的協作模型">4.4 agent 架構</a> 的自主度分層。</li>
</ol>
<h2 id="兩種工作模式centaur-跟-cyborg">兩種工作模式：Centaur 跟 Cyborg</h2>
<p>Centaur 跟 cyborg 是兩種人類跟 LLM 共事的姿態。概念起源於 Kasparov 2010 提的 advanced chess（人類 + AI 配合下棋）、HBS / UPenn / Wharton 對 BCG 顧問使用 AI 的研究把這對 framing 套到 knowledge work、觀察到兩種使用模式都存在且各有適用。</p>
<h3 id="centaur-模式">Centaur 模式</h3>
<p>人類把整段任務委派給 LLM、等結果回來再審。</p>
<ul>
<li><strong>比喻</strong>：人馬獸——上半身人、下半身馬、清楚的職責分工。</li>
<li><strong>典型場景</strong>：「寫一份這個主題的 PPT 大綱、含三個案例、按以下風格、做完給我」、LLM 跑幾分鐘、人類審結果。</li>
<li><strong>適合</strong>：任務邊界清楚、人類能事先描述完整需求、結果可離線審。</li>
<li><strong>失敗模式</strong>：任務描述漏細節、LLM 跑偏到沒注意、結果不能用。緩解：先給小範圍試跑、確認方向再放手。</li>
</ul>
<h3 id="cyborg-模式">Cyborg 模式</h3>
<p>人類跟 LLM 緊密協作、快速來回、人類隨時調整方向。</p>
<ul>
<li><strong>比喻</strong>：半機械人——人類跟 LLM 融合、邊做邊改。</li>
<li><strong>典型場景</strong>：寫 code 時 IDE 內 inline completion、寫文章時邊輸入邊看 LLM 建議、debug 時來回問。</li>
<li><strong>適合</strong>：任務探索性、需求邊做邊浮現、無法事先完整描述。</li>
<li><strong>失敗模式</strong>：頻繁打斷思路、context switch 成本高、最後產出反而比 centaur 慢。緩解：對熟悉的任務 cyborg、不熟的任務 centaur。</li>
</ul>
<h3 id="該用哪種">該用哪種</h3>
<table>
  <thead>
      <tr>
          <th>任務性質</th>
          <th>預設模式</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>邊界清楚、需求可事先描述完整</td>
          <td>Centaur</td>
      </tr>
      <tr>
          <td>探索性、邊做邊定義</td>
          <td>Cyborg</td>
      </tr>
      <tr>
          <td>大量重複（如 100 篇文章）</td>
          <td>Centaur</td>
      </tr>
      <tr>
          <td>創意 / 設計、要看回饋微調</td>
          <td>Cyborg</td>
      </tr>
      <tr>
          <td>高代價、要 rollback 控制</td>
          <td>Centaur + 強 review</td>
      </tr>
  </tbody>
</table>
<p>學生 / 個人開發更常 cyborg 工作、企業自動化更常 centaur 工作。看到一個產品設計時、問「它鼓勵 user 走 centaur 還是 cyborg」、就能判讀它的設計取向。</p>
<h2 id="jagged-frontierai-能力的不規則邊界">Jagged Frontier：AI 能力的不規則邊界</h2>
<p><a href="/blog/llm/knowledge-cards/jagged-frontier/" data-link-title="Jagged frontier" data-link-desc="AI 能力分佈不規則的 framing：某些看似簡單的任務 AI 容易壞、某些看似複雜的任務 AI 反而做得好">Jagged frontier</a> 是觀察 AI 能力分佈的 framing。直覺上「AI 能做的任務」應該是一個 smooth 的連續區、簡單的能做、難的不能。實際上不是——AI 能做的任務分佈是<strong>鋸齒狀（jagged）</strong>：某些看起來難的任務 AI 做得很好、某些看起來簡單的任務 AI 反而做不好。</p>
<table>
  <thead>
      <tr>
          <th>看起來簡單但 AI 容易壞</th>
          <th>看起來複雜但 AI 做得好</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>精確算術</td>
          <td>寫一段風格指定的程式碼</td>
      </tr>
      <tr>
          <td>計數（這段有幾個字）</td>
          <td>翻譯複雜技術文章</td>
      </tr>
      <tr>
          <td>嚴格遵守冷僻格式</td>
          <td>從一段文字抽取關鍵 entity</td>
      </tr>
      <tr>
          <td>引用真實的 URL</td>
          <td>解釋複雜概念</td>
      </tr>
  </tbody>
</table>
<p>這張表是 2024-2025 的觀察、<strong>frontier 會隨模型升級漂移</strong>——reasoning model + tool use 普及後、算術跟計數已經部分往「能做」那邊移、URL 也可以靠 web search tool 補救。表的價值在於 framing「能力分佈不規則」、不是把具體 4 個 case 當定論。</p>
<p>每個例子背後的失敗機制各不相同：</p>
<ul>
<li><strong>精確算術</strong>：靠符號操作、訓練資料中算術佔比小、tokenizer 把數字切成多 token 也加難度。Tool use（呼叫 calculator）能補救。</li>
<li><strong>計數</strong>：要對 input 做精確 traversal、跟 LLM 的並行 <a href="/blog/llm/knowledge-cards/attention/" data-link-title="Attention" data-link-desc="Transformer 內部讓每個 token 對其他 token 加權平均的核心機制、形成 KV cache 跟 context window 的計算基礎">attention</a> 機制不對盤、容易少算多算。對 needle in long context 的失敗模式類比見 <a href="/blog/llm/knowledge-cards/needle-in-haystack/" data-link-title="Needle in a Haystack" data-link-desc="把一個事實藏在 long context 不同位置、測試 LLM 能否抓出來的 benchmark 方法">needle in haystack</a> 卡。</li>
<li><strong>嚴格遵守冷僻格式</strong>：format 沒在訓練分佈中見過、模型回退到「我熟悉的格式」。Constrained decoding（見 <a href="/blog/llm/03-theoretical-foundations/constrained-decoding-internals/" data-link-title="3.10 Constrained decoding 內部：grammar mask 跟性能取捨" data-link-desc="Constrained decoding 的內部運作：token mask 計算、JSON schema / regex / CFG 三種 grammar、XGrammar pre-compile 機制、性能反而加速">3.10</a>）能補救。</li>
<li><strong>引用真實 URL</strong>：模型沒辦法區分「真實存在」跟「看起來合理」、<a href="/blog/llm/knowledge-cards/hallucination/" data-link-title="Hallucination" data-link-desc="LLM 生成內容看起來合理但事實錯誤、引用不存在的來源、虛構不存在的 entity 的現象">hallucinate</a> 出格式對但內容假的 URL。靠 tool（web search、URL validator）才能驗證。</li>
</ul>
<p>整體看：能力分佈跟訓練資料分佈、tokenizer 行為、推論機制相關、跟人類直覺的「難易」沒對齊。這給三個實務啟示：</p>
<ul>
<li><strong>不要用「人類直覺難易」推測 AI 能力</strong>。試跑、看結果、不要預判。</li>
<li><strong>「全自動」是 over-trust 假設</strong>：frontier 鋸齒、總有些子任務落在 frontier 外、需要人介入或 tool 補。設計時要假設「有部分子任務 AI 會失敗」、而不是「都會成功」。</li>
<li><strong>失敗在 frontier 外的任務、再加 prompt iteration 通常無效</strong>：那是模型能力邊界問題、不是 prompt 問題。對應 <a href="/blog/llm/04-applications/prompt-techniques-landscape/" data-link-title="4.0 Prompt 技術光譜：手法分類、取捨、組合模式" data-link-desc="Zero-shot / few-shot、chain-of-thought、role / template、reflection 等 prompt 技術的分類與取捨、何時 stack 何時不要 stack、跟 fine-tune / RAG / chaining 的邊界">4.0 prompt 技術光譜</a> 的 systematic vs random error 診斷。</li>
</ul>
<h3 id="falling-asleep-at-the-wheelfrontier-外的隱性風險">Falling asleep at the wheel：frontier 外的隱性風險</h3>
<p>研究發現一個跟 jagged frontier 互動的人類行為模式：<strong>人類傾向不分辨任務是否在 frontier 內、對 AI 結果一律低度審查</strong>。結果 frontier 內的任務 AI 做得好、人類審不審差別不大；frontier 外的任務 AI 做得差、但人類也沒審出來、產出帶錯送出。</p>
<p>緩解：</p>
<ul>
<li><strong>明確標 frontier</strong>：對團隊 / 產品 user 標出「AI 在這類任務可靠 / 不可靠」、不要假設 user 會自己分辨。</li>
<li><strong>frontier 外的任務強制人類審查</strong>：把「該審 vs 不該審」做成 deterministic 規則、不交給 user 自由心證。</li>
<li><strong>抽樣審查</strong>：即使 frontier 內任務、隨機抽樣審查、偵測 frontier 漂移（模型升級或 prompt 變動後 frontier 可能移動）。</li>
</ul>
<h2 id="hitl-三種觸發時機">HITL 三種觸發時機</h2>
<p>人類介入的時機決定 HITL 的型態。三個時機點各有適用場景：</p>
<h3 id="pre-act動作執行前確認">Pre-act：動作執行前確認</h3>
<p>LLM 決定要做某個 action、但 action 真的執行前停下來、給人類審 + approve。</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">LLM decides: 「我要刪除 user_id=123 的 record」
</span></span><span class="line"><span class="ln">2</span><span class="cl">   ↓
</span></span><span class="line"><span class="ln">3</span><span class="cl">[HUMAN APPROVE?]
</span></span><span class="line"><span class="ln">4</span><span class="cl">   ↓ (approved)
</span></span><span class="line"><span class="ln">5</span><span class="cl">Execute deletion</span></span></code></pre></div><ul>
<li><strong>適用</strong>：不可逆 / 高代價的 action。對應 <a href="/blog/llm/04-applications/agent-architecture/" data-link-title="4.4 Agent 架構原理" data-link-desc="Agent loop 結構、失敗模式、什麼任務適合 vs 不適合、跟人類審查的協作模型">4.4 agent</a> 的「step-by-step approval」協作模型。</li>
<li><strong>失敗模式</strong>：approval 流程太頻繁、人類疲勞、最後變橡皮圖章。緩解見後面「避免橡皮圖章化」段。</li>
</ul>
<h3 id="mid-stream執行過程中介入">Mid-stream：執行過程中介入</h3>
<p>Agent loop 跑到一半、發現自己不確定、主動停下來問人類。</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">Agent: 「我有兩個方案、不確定哪個、請選 A 還是 B？」
</span></span><span class="line"><span class="ln">2</span><span class="cl">   ↓
</span></span><span class="line"><span class="ln">3</span><span class="cl">[HUMAN PICKS]
</span></span><span class="line"><span class="ln">4</span><span class="cl">   ↓
</span></span><span class="line"><span class="ln">5</span><span class="cl">Agent continues with chosen path</span></span></code></pre></div><ul>
<li><strong>適用</strong>：任務有多個合理路徑、選擇影響後續策略、不該由 agent 自決。</li>
<li><strong>跟 pre-act 的差異</strong>：pre-act 是「我準備做 X、你 approve 嗎」（agent 已決定方向）、mid-stream 是「我不確定該做什麼、你決定」（決策權交給人類）。</li>
<li><strong>失敗模式</strong>：agent 不知道自己該不知道（unknown unknowns）、該問沒問、自己亂走。緩解：在 prompt 內 enumerate 常見的「該問人類」情境、降低 agent 自決的範圍。</li>
</ul>
<h3 id="post-hoc事後申訴--校正">Post-hoc：事後申訴 / 校正</h3>
<p>Agent 已執行、結果交付、user 看完後可以申訴 / 校正。</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="ln">1</span><span class="cl">Agent produces result → User sees result
</span></span><span class="line"><span class="ln">2</span><span class="cl">                              ↓
</span></span><span class="line"><span class="ln">3</span><span class="cl">                       [USER APPEALS?]
</span></span><span class="line"><span class="ln">4</span><span class="cl">                              ↓ (yes)
</span></span><span class="line"><span class="ln">5</span><span class="cl">                       Human reviews + adjusts
</span></span><span class="line"><span class="ln">6</span><span class="cl">                              ↓
</span></span><span class="line"><span class="ln">7</span><span class="cl">                       Feedback loop → 改 prompt / fine-tune</span></span></code></pre></div><ul>
<li><strong>適用</strong>：行為層次的細節調整、評分類任務（如自動打分後 user 申訴）、預先審不可行的場景。</li>
<li><strong>跟 pre/mid 的差異</strong>：post-hoc 不擋執行流、執行完才介入；前兩者擋在執行前 / 執行中。</li>
<li><strong>典型例子</strong>：自動評分系統的 appeal 流程——LLM 打分完、user 對分數有異議時、走人類審查、結果不只改這次分數、還回饋進系統改善後續評分。</li>
<li><strong>失敗模式</strong>：appeal rate 過高（系統信任度差）、或 appeal rate 過低（user 不知道可以申訴 / 申訴成本高）、回饋訊號失真。</li>
</ul>
<h3 id="三個時機的選擇">三個時機的選擇</h3>
<table>
  <thead>
      <tr>
          <th>時機</th>
          <th>適合任務</th>
          <th>不適合</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Pre-act</td>
          <td>高代價、不可逆、副作用範圍大</td>
          <td>高頻率動作（會把人類淹死）</td>
      </tr>
      <tr>
          <td>Mid-stream</td>
          <td>路徑分歧、需要 domain judgment</td>
          <td>路徑可由 agent 自決的低代價任務</td>
      </tr>
      <tr>
          <td>Post-hoc</td>
          <td>評分 / 評估、低代價、user 數量大</td>
          <td>不可逆動作（事後 appeal 來不及）</td>
      </tr>
  </tbody>
</table>
<p>實務多重組合：pre-act 擋高代價、mid-stream 處理 agent 的不確定性、post-hoc 收 user 回饋改善系統。<strong>三者各自處理不同 risk class、不互斥</strong>。</p>
<h2 id="有效-hitl-的四個設計條件">有效 HITL 的四個設計條件</h2>
<p>HITL 要真的擋住失敗、不退化成 rubber-stamp approval、設計上要滿足四個條件。每個條件對應一個常見退化模式、可以同時當 checklist 用。</p>
<h3 id="條件一分級不同-risk-走不同-gate">條件一：分級、不同 risk 走不同 gate</h3>
<p>高 risk 動作（push、deploy、production change）強制 step-by-step approval；中等 risk（檔案寫入、本機 commit）每 N 步 checkpoint；低 risk（read-only、本機 sandbox）full auto。對應 <a href="/blog/llm/04-applications/tool-use-principles/" data-link-title="4.3 Tool use 原理：LLM 跟外部世界互動" data-link-desc="Structured output 是 LLM 跨入工程系統的橋、function calling 取捨、為什麼本地小模型 tool use 表現崩潰">4.3 tool use 副作用範圍</a> 的等級分類。</p>
<p>對應反例：每個 tool call 都要 approve、不分高低代價、user 每天按 100 次 approve、按到下意識、根本沒看內容。</p>
<h3 id="條件二approval-ui-強制-show-diff">條件二：approval UI 強制 show diff</h3>
<p>審查的具體內容（準備寫的檔案內容、準備執行的 SQL、準備發的 email 草稿）必須在 approval UI 上呈現、user 看得到才能做出有意義的判斷。</p>
<p>對應反例：「approve this action?」按鈕、但 user 看不到 action 的具體內容、只能盲簽。沒有 diff 就沒有審查、不要假裝有審查。</p>
<h3 id="條件三reject-有明確-fallback-路徑">條件三：reject 有明確 fallback 路徑</h3>
<p>User reject 後 agent 該怎麼處理（換方案、停下來、escalate）要在設計時確定、不能讓「reject 等同流程斷」。</p>
<p>對應反例：只能 approve、reject 的話 agent 不知道怎麼辦、user 怕 reject 後續流程斷、就一律按 approve、HITL 失去意義。</p>
<h3 id="條件四approval-訊號要回饋進系統">條件四：approval 訊號要回饋進系統</h3>
<p>User 的 approve / reject pattern 進 trace、定期 analyze、把「總是 approve 的動作」自動降級、「總是 reject 的動作」進 prompt 改變 agent 預設行為。</p>
<p>對應反例：User 一直 approve / reject、但訊號沒回饋、agent 下次還是問一樣的問題、user 疲勞累積。</p>
<h2 id="跟-agent-自主度分層的對應">跟 Agent 自主度分層的對應</h2>
<p><a href="/blog/llm/04-applications/agent-architecture/" data-link-title="4.4 Agent 架構原理" data-link-desc="Agent loop 結構、失敗模式、什麼任務適合 vs 不適合、跟人類審查的協作模型">4.4 agent 架構</a> 列了五種人類審查協作模型：full auto、checkpoint、step-by-step approval、plan first then auto、human-in-the-loop。本章三種 HITL 時機跟這五種協作模型的對應：</p>
<table>
  <thead>
      <tr>
          <th>Agent 自主度分層</th>
          <th>主要 HITL 時機</th>
          <th>設計重點</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Full auto</td>
          <td>Post-hoc</td>
          <td>Appeal 流程、抽樣審查、distribution monitoring</td>
      </tr>
      <tr>
          <td>Checkpoint</td>
          <td>Pre-act（每 N 步）</td>
          <td>分級 approval、diff 必須 show</td>
      </tr>
      <tr>
          <td>Step-by-step approval</td>
          <td>Pre-act（每步）</td>
          <td>UI 簡潔、reject 路徑清楚、避免疲勞</td>
      </tr>
      <tr>
          <td>Plan first, then auto</td>
          <td>Pre-act（plan 階段）+ Post-hoc</td>
          <td>Plan diff + 執行後審查</td>
      </tr>
      <tr>
          <td>Human-in-the-loop（mid-stream）</td>
          <td>Mid-stream</td>
          <td>Agent 知道自己該問人類、不該問的事不問</td>
      </tr>
  </tbody>
</table>
<p>選哪一層、看 <a href="/blog/llm/04-applications/tool-use-principles/" data-link-title="4.3 Tool use 原理：LLM 跟外部世界互動" data-link-desc="Structured output 是 LLM 跨入工程系統的橋、function calling 取捨、為什麼本地小模型 tool use 表現崩潰">4.3 工具副作用範圍</a> 等級：等級 1-2 用 full auto + post-hoc、等級 3 用 checkpoint、等級 4-5 強制 step-by-step。</p>
<h2 id="跟-fuzzy-engineering-典範的關係">跟 Fuzzy Engineering 典範的關係</h2>
<p><a href="/blog/llm/00-foundations/deterministic-vs-fuzzy-engineering/" data-link-title="0.8 Deterministic vs Fuzzy Engineering：軟體設計典範的位移" data-link-desc="傳統 deterministic 軟體跟 fuzzy LLM 軟體在資料、邏輯、分解、實驗成本四個維度的根本差異、以及哪段該 deterministic、哪段該 fuzzy 的決策框架">0.8 Deterministic vs Fuzzy Engineering</a> 講 fuzzy 邊界要包 deterministic guardrail。HITL 是 guardrail 的一個 case——把人類判斷當成 deterministic check 來包 fuzzy LLM 行為。</p>
<p>判讀 HITL 該存在的訊號：</p>
<ul>
<li>任務的 fuzzy 行為輸出進入不可逆 deterministic 系統（DB write、API call、實體 action）。</li>
<li>LLM 在這類 boundary 上的失敗代價遠高於 HITL 的人類 cost。</li>
<li>沒有可靠的自動 validator（用 LLM judge 風險也太高）。</li>
</ul>
<p>三者俱備時、HITL 是必要的 guardrail。任一不滿足、可能用 schema validation / output validator / distribution monitoring 替代、不需要人類在 loop 內。</p>
<h2 id="何時過時--何時不過時">何時過時 / 何時不過時</h2>
<p><strong>不會過時的部分</strong>：</p>
<ul>
<li>Centaur vs cyborg 兩種工作模式的分類。</li>
<li>Jagged frontier 概念、「全自動」是錯題的論證。</li>
<li>三種 HITL 觸發時機（pre-act / mid-stream / post-hoc）的分類。</li>
<li>橡皮圖章化的四個反模式跟緩解。</li>
<li>跟 agent 自主度分層、fuzzy engineering 典範的對應結構。</li>
</ul>
<p><strong>會變的部分</strong>：</p>
<ul>
<li>Jagged frontier 的具體位置（哪些任務在 frontier 內、隨模型能力進步會移動）。</li>
<li>HITL 的 UI / UX 工具（隨產品 framework 演化）。</li>
<li>Approval 自動化的程度（更強的 distribution monitoring 可能讓部分 HITL 變得不必要）。</li>
</ul>
<h2 id="下一章">下一章</h2>
<p>下一章：<a href="/blog/llm/04-applications/application-protocols/" data-link-title="4.6 應用層協議：function calling / structured output / MCP" data-link-desc="三個常被混為一談的概念：模型能力、sampling 約束、server 協議，三者的層級差異與組合方式">4.6 應用層協議</a>、把 function calling / structured output / MCP 三個概念放回正確層級、銜接 agent 跟外部系統的協議設計。Agent 自主度分層完整討論見 <a href="/blog/llm/04-applications/agent-architecture/" data-link-title="4.4 Agent 架構原理" data-link-desc="Agent loop 結構、失敗模式、什麼任務適合 vs 不適合、跟人類審查的協作模型">4.4</a>、工具副作用範圍見 <a href="/blog/llm/04-applications/tool-use-principles/" data-link-title="4.3 Tool use 原理：LLM 跟外部世界互動" data-link-desc="Structured output 是 LLM 跨入工程系統的橋、function calling 取捨、為什麼本地小模型 tool use 表現崩潰">4.3</a>、HITL 在 fuzzy engineering 中的定位見 <a href="/blog/llm/00-foundations/deterministic-vs-fuzzy-engineering/" data-link-title="0.8 Deterministic vs Fuzzy Engineering：軟體設計典範的位移" data-link-desc="傳統 deterministic 軟體跟 fuzzy LLM 軟體在資料、邏輯、分解、實驗成本四個維度的根本差異、以及哪段該 deterministic、哪段該 fuzzy 的決策框架">0.8</a>。</p>
]]></content:encoded></item></channel></rss>