用 Jev(System 1 model)替 agent harness 裡的分類型判斷換上更快更便宜的模型
文字解析 · 1 支影片 · 產生於 2026-10-01 00:54
章節(9)
1. Outline
- 起點 · Building a Harness with Jev
從 agent loop 的「強大但不可預測」出發,先回顧 tool calling / structured outputs 只解了型別沒解速度,再引入不生成文字的 Jev,用 demo、三種問題型別、程式碼與三個用例(routing、auto mode、judge)回答「怎麼建 harness」。
2. YouTuber 的思維推導
Building a Harness with Jev
LangChain · 9m14s · 字幕 en · vision=on (input 指定 vision=true;影片是投影片講解,多處說「you can see … here on the slide」,圖表與程式碼要看圖才懂。) · YouTube
預估 vs 實際耗時
| 階段 | 預估 | 實際 |
|---|---|---|
| fetch | 6s | 2s |
| segment | 48s | 4m00s |
| shot | 22s | 3s |
| analyze | 3m45s | 8m14s |
| render | 5s | – |
作者(LangChain 開源團隊 PM Sydney)的出發點不是 Jev,而是大家都熟的 agent loop:request → LLM → tools → result。她先指出這個 loop 的內在張力——LLM 很強,但文字進文字出、不可預測,而程式依賴型別——然後回顧業界對此的第一輪回應:tool calling 與 structured outputs 兩個 primitive。這裡她刻意用了「made it easier」而不是「解決了」,因為這兩個 primitive 只是替 LLM 的文字輸出加上約束,模型本身依舊慢而貴。
由此引入 Jev:TypeSafe AI 的 System 1 model,吃 state 與 questions、回 typed answers 與機率,根本不生成文字,所以在分類型任務上可以快 20–200 倍、便宜 40–400 倍;並用 Kahneman 的 System 1 / System 2 類比把它跟 LLM 定位成互補而非替代。接著她逐層具體化:先用 PII demo 讓速度差看得見(5 秒 vs 0.1 秒),再用一則 Stripe 客訴示範三種問題型別(choice / score / noul)與多題平行回答,然後給出 langchain-typesafe 的程式碼,並點出 Jev 可以掛在 node、tool 或 middleware 任何位置。最後用三個用例回答影片標題「怎麼建 harness」:model routing(loop 入口)、auto mode 攔截危險 tool call(action 邊)、以及她最期待的 Jev-as-a-judge(loop 之後的 online evals)。
貫穿全片的推論是:agent loop 裡藏著大量「每一輪都要做、答案在有限選項內」的判斷,這些判斷用 LLM 做不但貴、而且慢到會讓功能被關掉(她自己關掉 auto mode 的親身經歷就是證據);把它們交給一個原生輸出型別化決策的模型,harness 才能既安全又不拖慢。
推理鏈:每段留給下一段的線索
每一列是一段,箭頭後的字是這段留給下一段的線索。點段落標題跳到該段。
- 回顧大家熟悉的 agent loop → 作者留下的問題是:LLM 很強但文字進文字出、不可預測,而 code-driven 的應用依賴結構化型別——那麼 LLM 剛出來時,大家是用什麼方法「對它施加結構」的?
- tool calling 與 structured outputs → 型別問題有解了,但這兩個 primitive 都還是叫 LLM「用結構化的方式生成文字」,模型本身一樣慢、一樣貴。作者接下來要引入的 Jev 究竟是什麼、它跟這兩個 primitive 有什麼本質不同?
- Jev 是什麼:System 1 model → 作者給了定義、數字與命名來源,但都還是「說的」。20–200 倍到底在實際體感上是什麼樣子?她接下來要用同一個問題同時丟給 LLM 與 Jev,讓差距看得見。
- Demo:LLM vs Jev 回答 PII 問題 → demo 只問了一個是/否問題。Jev 究竟能回答哪幾種形狀的問題?除了「有沒有」,能不能問「哪一個」或「多嚴重」?作者接下來用一則 Stripe 客訴當 state,一次示範三種問題類型。
- Jev 回答的三種問題類型 → 三種問題型別與平行回答都是 Jev 的 API 能力。回到影片標題「建 harness」:在 LangChain 的程式裡實際要怎麼呼叫它?作者接下來給出剛推出的整合套件與程式碼。
- 在 LangChain 裡用 Jev → 工具就位、也知道可以掛在 node / tool / middleware 三個位置。那麼在真實的 agent 裡,哪些判斷值得從 LLM 手上接過來交給 Jev?作者接下來從 LangChain 自己的 coding agent 舉兩個用例。
- 用例:model routing 與 auto mode → routing 與 auto mode 都是「在 loop 進行中做決定」。還有一類判斷是在 agent 跑完之後才做的:它到底有沒有把事做好?作者說第三個用例是她最期待的——用 Jev 當 evals 的 judge。
- 用例:Jev 當 online evals 的 judge → 三個用例講完:routing、auto mode、judge,分別落在 loop 的入口、action 邊、以及 loop 之後。作者最後要收尾:想自己動手的人該從哪裡開始?
- 開始動手:安裝與資源
3. 逐段說明
Building a Harness with Jev
1. 回顧大家熟悉的 agent loop 0:00–1:02
LangChain 開源團隊 PM Sydney 開場,說今天要講怎麼用 TypeSafe AI 新推出的模型 Jev 建 harness。先回顧核心 agent loop:請求進來→交給 LLM→LLM 呼叫工具、拿結果、繼續循環或結束回傳。這個 loop 很強,但 LLM 是文字進文字出、不可預測,所以早期就需要辦法加上結構,讓它能在依賴型別的程式裡運作。

推理因為主題是「用 Jev 建 harness」,而 harness 就是包在模型外面、決定何時呼叫誰的那層程式,所以作者先把 harness 裡最核心的東西——agent loop——畫出來:request 進來交給 LLM,LLM 對 tools 發出 action、拿回 observation,循環到它判定任務完成就回 result。接著她立刻指出這個 loop 的弱點:LLM 文字進文字出、不可預測,而程式天生依賴型別。這個「強大但不可預測」的張力,就是整支影片後面每一步的出發點。
- Cagent loop:request → LLM → tools → 回 LLM,直到它決定結束回 result→ 畫地圖
- Aagent loop 像一個 while 迴圈:每輪 LLM 決定「再叫工具」或「結束」→ 批判類比
AI 補充投影片上的循環其實有兩種邊:實線是「LLM → tools → LLM」的往返(action / observation),虛線是「LLM → result」的出口。可以把它看成一個 while 迴圈:每一輪 LLM 決定「再呼叫一個工具」或「結束」。作者沒說清楚的一點是,這個決定本身也是 LLM 用文字表達的——它得用文字說「我要呼叫 get_order」,程式再去解析。這就是為什麼「文字進文字出」會成為問題:迴圈裡每一個分支判斷都要靠解析自由文字,稍有格式偏差程式就會壞掉。所謂「需要結構」,指的正是這些判斷點。
2. tool calling 與 structured outputs 1:02–1:38
為了替 LLM 加結構,出現兩個 primitive。tool calling:模型送出結構化請求(例如帶 ID 的 get order),工具回傳結構化資料。structured outputs:把輸出型別綁到模型上,讓最終結果符合指定 JSON schema 而非純文字。這兩個 primitive 讓 agent loop 得以在程式裡被利用。


推理因為上一段確立了「程式需要型別、LLM 只給文字」的張力,所以作者接著介紹兩個把文字變成型別的機制。第一個是 tool calling:模型不再用自由文字說「幫我查訂單」,而是送出結構化請求(name: get_order、args: order_id),工具也回傳結構化資料。第二個是 structured outputs:把輸出型別綁到模型上,讓最終回答符合指定的 JSON schema。她的結論是「這兩個 primitive 讓 agent loop 得以在程式裡被利用」——注意她用的詞是「made it a lot easier」,不是「解決了」,這替下一段留了伏筆。
- Cstructured outputs:把輸出型別綁到 LLM,讓結果符合 JSON schema 而非純文字→ 畫地圖
- Rtool calling 與 structured outputs 各管 agent loop 的哪條邊→ 存+回想
AI 補充投影片把兩者分得很清楚:tool calling 管的是 loop 裡「LLM → tools」那條邊(請求與回傳都是 JSON),structured outputs 管的是「LLM → result」那條出口邊(回傳一個 Ticket 物件而不是一段話)。程式碼範例用 Pydantic 的 BaseModel 宣告 Ticket(team: str, urgent: bool),再 model.with_structured_output(Ticket) 綁上去,invoke 之後直接拿到 Ticket(team="billing", urgent=True)。要補一個作者沒明說的重點:這兩個機制都還是「請 LLM 生成符合格式的文字,再由程式解析/驗證」,模型本身沒有變快或變便宜,只是輸出多了一層約束。也就是說,型別問題解了,速度與成本問題還在——這正是後面要處理的。
3. Jev 是什麼:System 1 model 1:38–3:27
Jev 是 TypeSafe AI 推出的 System 1 model:專門做快速、結構化決策,讓軟體可以直接使用。它吃 state 與 questions,回傳 typed answers 與機率——不是文字進文字出。分類型任務上比 LLM 快 20–200 倍、便宜 40–400 倍,但不是 LLM 的替代品,只接手特定任務。System 1 一詞借自 Kahneman《快思慢想》:System 1 快而便宜的直覺 vs System 2 慢而昂貴的推理;LLM 更像 System 2。


推理因為上一段的兩個 primitive 只是替 LLM 的文字輸出加約束,所以作者接著引入一種不同類型的模型:Jev,TypeSafe AI 推出的 System 1 model。她先引官方文件定義——「為了做出軟體能直接使用的快速結構化決策而打造的模型類別」:吃一個 state 與一組 questions,回傳 typed answers 與機率。然後點出關鍵:Jev 不是文字進文字出,因此在分類型任務上可以比 LLM 快 20–200 倍、便宜 40–400 倍。她也立刻設下邊界:Jev 不是 LLM 的 drop-in 替代品,只接手特定任務。最後解釋命名來源——Kahneman《快思慢想》的 System 1(快而便宜的直覺)與 System 2(慢而昂貴的推理),LLM 更像 System 2,Jev 刻意跟它形成對比。
- CSystem 1 model:專做快速結構化決策、讓軟體直接使用輸出的模型類別→ 畫地圖
- CJev:吃 state + questions,回 typed answers 與機率,根本不生成文字→ 畫地圖
- AJev vs LLM 像 Kahneman 的 System 1 直覺 vs System 2 推理→ 批判類比
- EJev 在分類型任務上比 LLM 快 20–200 倍、便宜 40–400 倍→ 存+演練
- RSystem 1 命名來源→ 存+回想
AI 補充投影片上的請求與回應值得逐欄看。請求:state 是一段原始文字(一則 Stripe 客訴開頭),model 指定 jev-latest,questions 是一個字典,每題有 type 與 instructions(「這則訊息是否帶有緊急性」)。回應:每題回一個 type 相同的答案,is_urgent 給 0.999——一個機率,不是一段話。這裡要補一個作者沒明說的推論:為什麼「不生成文字」就能快幾十到幾百倍?LLM 的成本主要在逐 token 生成——每多一個字就多一次前向傳播;而 Jev 這類模型只需要對 state 做一次編碼、對每個 question 輸出一個數值或一個選項,沒有自迴歸生成的迴圈,延遲與成本自然低一到兩個數量級。反過來說,這也決定了它的邊界:需要「寫出東西」的任務(回信、產生程式碼、開放式解釋)它做不到,所以作者說「不是 drop-in 替代」。跟第 2 段連起來看:structured outputs 是讓 LLM 的出口變成型別;Jev 則是從頭就是型別進、型別出,型別不是後加的約束而是模型的原生介面。
術語:typed answer
4. Demo:LLM vs Jev 回答 PII 問題 3:27–4:11
問同一個問題「這段文字有 PII 嗎?」:LLM 產出一段文字結果,再加 structured output 大約要五秒;Jev 幾乎立刻回「有 PII 的機率 98%」。作者由此指出:很多目前交給 LLM 做的分類/決策型任務,換成 Jev 在速度與成本上都更划算。

推理因為上一段只給了官方數字與定義,所以作者接著做對照 demo:問題是「這段文字裡有 PII 嗎?」。LLM 這邊先產出一段文字回答,再加 structured output 讓它變成型別,整體約五秒;Jev 那邊幾乎立刻回「有 PII 的機率 98%」。她從這個對照推出一個一般化的結論:「有很多目前我們用 LLM 讓 agent 做的分類或決策型任務,在速度與成本上其實有更好的做法」。也就是說,demo 的目的不是證明 Jev 比較準,而是把第 3 段的「特定任務」具體化為「分類/決策型任務」。
AI 補充投影片上 Jev 這邊的畫面很簡潔:左邊「Your app」送出問題與一段含 email、電話的訂單訊息;右邊 Jev 回一個名為 has_pii 的答案 0.98,附一條進度條,下方標「0.1s for a probability」。跟 LLM 的五秒相比是 50 倍,落在第 3 段講的 20–200 倍區間內。要補一個作者沒點破的細節:LLM 那邊的五秒是「先生成文字、再做 structured output」兩步的總和——這正是第 2 段講的 primitive 在實際使用上的代價:每加一層約束就多一次呼叫或多一段生成。而 Jev 因為原生就輸出機率,一步到位。另一個值得注意的地方是 0.98 是機率而非 yes/no:這則訊息確實含 email 與電話,所以接近 1 是合理的;程式端可以自己決定門檻,例如 > 0.9 就遮蔽。作者說的「more optimal in terms of speed and cost」刻意沒提準確度,這個保留是誠實的——demo 只展示了速度。
術語:classification tasklatency
5. Jev 回答的三種問題類型 4:11–5:35
以 Stripe 客訴訊息為 state,Jev 能回三種問題:choice(多選一,哪個團隊處理?→ billing 分數 0.84、confidence 0.596)、score(量尺,客戶多生氣?→ 1.035,frustrated 但不到 very angry)、boolean(是否,訊息有緊急性?→ 0.999)。而且一個 state 可以帶多個 question,Jev 平行回答——對比 LLM 的順序推理。


推理因為上一段的 demo 只示範了一個是/否問題,所以作者接著系統化地介紹 Jev 的三種問題類型,且刻意用同一個 state 貫穿:「我已經試著連 Stripe 帳號三天了,一直失敗,我在流失銷售,請盡快幫忙。」第一種 choice(多選一):哪個團隊該處理?→ billing 0.84,confidence 0.596。第二種 score(量尺上定位):客戶看起來多沮喪?→ 1.035,落在 frustrated 但不到 very angry。第三種 boolean(是否):訊息有緊急性嗎?→ 0.999。最後補一個性質:一個 state 可以帶很多 questions,Jev 平行回答——再一次跟 LLM 的順序推理形成對比。這段的邏輯是先把「問題的形狀」窮舉完,讀者才有辨識用例的工具。
- RJev 的三種 question 型別→ 存+回想
- Cconfidence 是「這題判得準不準」的自我評估,跟各選項機率是兩回事→ 畫地圖
- EStripe 客訴:billing 0.84 / technical 0.159 / sales 0.001,但 confidence 只有 0.596→ 存+演練
- C一個 state 可帶多題,Jev 平行回答;LLM 則要順序寫出→ 畫地圖
- R是否型別在 Jev 裡的正式名稱→ 存+回想
AI 補充投影片有幾個作者口頭略過、但看圖才懂的細節。第一,choice 型別回的不只是「billing」,而是每個選項一個分數:billing 0.84、technical 0.159、sales 0.001,三者加起來約等於 1,是一個機率分佈;下方另有一個獨立的 confidence 0.596。這兩個數字不一樣:0.84 是「答案是 billing 的機率」,0.596 是模型對「這整題我判得準不準」的自我評估——分佈很集中但 confidence 只有中等,暗示這則訊息同時像 billing 又像 technical,模型知道自己有點拿不準。第二,score 型別的量尺標了 Calm、Frustrated、Very angry 三個刻度,1.035 落在 Frustrated 附近,所以它其實是「連續值」而非三選一;也附 confidence 0.842。第三,投影片上第三種型別的名字是 Noul(「Is this true?」),作者口頭叫它 boolean——這是 Jev 自己給是否型別取的名字,第 3、4 段投影片上出現的 type: noul 就是它。把三種型別對回第 2 段:structured outputs 要開發者用 JSON schema 宣告任意形狀,Jev 則把形狀限縮成三種,換來的是每種都附機率與 confidence。至於「平行回答」:因為每個 question 都是對同一個 state 編碼後的獨立判斷頭,彼此不依賴,所以可以同時算;LLM 若要回答五個問題則要在同一段文字裡依序寫出來,第五題得等前四題生成完。
術語:parallel questions
6. 在 LangChain 裡用 Jev 5:35–6:04
LangChain 剛推出 langchain-typesafe 整合:從套件 import TypeSafe classifier,先拿 TypeSafe API key,然後帶 state 與 questions 呼叫 Jev,回應裡有每個 question 的答案。

推理因為前面幾段已經把 Jev 的介面(state、questions、三種型別)講完,所以作者接著把它落到程式:LangChain 剛發布 langchain-typesafe 整合,從套件 import TypeSafeClassifier,先拿一個 TypeSafe API key,然後帶 state 與 questions 呼叫,回應裡就有每個 question 的答案。她講得很快,因為程式碼的形狀跟第 3 段的 JSON 請求幾乎一對一,讀者已經有所有概念。講完立刻轉場:「來看幾個 Jev 很適合的用例」——也就是說,這段是工具就位,接下來要回答「放在 harness 的哪裡」。
AI 補充投影片上的程式碼比口頭多了幾個資訊。安裝:uv pip install langchain-typesafe。import 的是兩個東西:Noul 與 TypeSafeClassifier——Noul 就是第 5 段那個是否型別,在 Python 裡是一個類別,用 Noul(instructions="...") 宣告一題;可以推想 choice 與 score 也有對應類別。呼叫:classifier.invoke({"state": ..., "questions": {"is_urgent": Noul(...)}}),跟第 3 段的原始 JSON 結構相同,只是 type 欄位換成了 Python 類別。取值:response.nouls["is_urgent"].noul 得到 0.999——回應依型別分組(nouls),再依題名取值。右側三張卡片是重點:TYPESAFE_API_KEY 用環境變數設定;「Call it anywhere:a node, a tool, or a middleware hook」——這一行其實回答了影片標題:Jev 可以放進 LangGraph 的節點、包成 agent 的工具、或掛在 middleware 上,正好對應第 1 段 agent loop 的三種位置(流程節點、tools 邊、以及包在 LLM 呼叫前後的攔截點)。作者沒有口頭解釋這張卡,但下一段的用例正是沿著這三個位置展開。
7. 用例:model routing 與 auto mode 6:04–7:29
用例一 model routing:agent 兼做簡單與複雜工作時不該全用最強模型;LangChain 內部 coding agent 想依任務複雜度在快便宜/強昂貴模型間切換,Jev 幾乎瞬間判斷該走哪條。用例二 auto mode:LangChain 已有 auto mode middleware,讓 Jev 判斷 tool call 是否有風險並在 runtime 擋掉(例如刪資料庫、刪重要檔案)。作者先前因為分類太慢把 auto mode 關掉,Jev 快到讓她重新開啟。
推理因為上一段已經說 Jev 可以掛在 node / tool / middleware 任何位置,所以作者接著用兩個真實用例示範。第一個是 model routing:一個 agent 同時做簡單與複雜的事,不該每件事都用最強的模型;LangChain 想讓內部 coding agent 依任務複雜度在「快便宜」與「強昂貴」模型之間切換,而 Jev 可以拿 prompt 對照給定標準、幾乎瞬間判斷該走哪條——這是一個 choice 問題。第二個是 auto mode:LangChain 已有一個現成的 auto mode middleware,讓 Jev 判斷某個 tool call 是否有風險並在 runtime 擋掉——這是一個 noul 問題。她補上一段親身經歷:先前因為「判斷 tool call 危不危險」這步太慢,害 coding agent 用起來不順,所以把 auto mode 關了;現在 Jev 夠快,又開回來。最後舉例:刪資料庫、刪重要檔案的 tool call 一定會被分類為 risky 並被擋下。
- Cmodel routing:依請求複雜度先決定送快便宜或強昂貴模型→ 畫地圖
- Cauto mode:middleware 讓 Jev 判斷每個 tool call 是否 risky,有就在 runtime 擋掉→ 畫地圖
- E作者因分類太慢關掉 auto mode,Jev 夠快後才開回來→ 存+演練
- AJev 的判斷標準寫在 instructions 裡,像改設定檔;傳統分類器像重訓模型→ 批判類比
AI 補充這兩個用例的共同點值得點出:它們都是「判斷本身不產生價值、只是決定接下來走哪條路」的步驤——分派給哪個模型、放不放行這個工具。這種判斷放在 loop 裡每一輪都要做,所以第 4 段講的 latency 累加在這裡變成生死線:作者的親身經歷正是實證——一個安全機制如果太慢,使用者會直接關掉它,那它就等於不存在。速度不是體驗問題,而是「功能存不存在」的問題。第二點:model routing 在 agent loop 圖上是 request 進到 LLM 之前的一個 node(先決定用哪個 LLM);auto mode 則是掛在「LLM → tools」那條 action 邊上的 middleware(tool call 發出、執行前攔一下)。這正好是第 6 段投影片上「node」與「middleware hook」兩個位置的實例。第三點作者沒說但值得補:routing 用的判斷標準(criteria)與 auto mode 的「什麼算 risky」都寫在 question 的 instructions 裡,是自然語言,所以規則可以隨時改、不必重新訓練——這是 Jev 跟傳統小型分類器的差別,傳統分類器改一條規則要重新標資料重訓。
8. 用例:Jev 當 online evals 的 judge 7:29–8:47
作者最期待的用例:用 Jev 判斷 agent 是否把任務做好。大規模跑 evals 時不可能每條 trace 都人工看,但又需要比 code 式 evaluator 更多的判斷。給 Jev eval 的 input(問題、agent 回答)加上 rubric(正確?符合參考?有依據?有引用來源?),Jev 就沿各項 rubric 打分。這是 LLM-as-a-judge 的演進——後者有用但昂貴;LangChain 部落格顯示 Jev 更便宜、更快,而且跨 evals 更可靠一致。

推理因為前面的用例都在「決定下一步」,所以作者接著轉到「評價結果」。她先鋪陳需求的兩面:大規模跑 evals 時不可能每條 trace 都有人看,但只用 code 式的 evaluator(字串比對、格式檢查)又不夠判斷 agent 有沒有把事做好——需要「某種模型」介於兩者之間。接著描述 Jev 怎麼做:輸入是該筆 eval 的 input(原始問題)與 agent 的回答,再加一份 rubric(評分標準:正確嗎?符合參考答案嗎?有依據嗎?有引用來源嗎?),Jev 沿著每項 rubric 給分。她把這定位為 LLM-as-a-judge 的演進:後者確實有用但很貴。最後引 LangChain 剛寫的部落格:Jev 不意外地更便宜更快,但更有趣的是,跨 evals 更可靠、更一致。
- Conline evals:對真實流量每條 trace 打分;Jev 沿 rubric 每項給分,取代昂貴的 LLM-as-a-judge→ 畫地圖
- E退款範例:correct 0.98、grounded 0.92、complete 0.11,總分 0.67→ 存+演練
- ELangChain 部落格:Jev 當 judge 不只便宜快,跨 evals 更可靠一致→ 存+演練
- P用 Jev 建一個 rubric judge→ 練習
AI 補充投影片上的範例把抽象的 rubric 講具體了:問題「我們的退款期限是多久?」、agent 回答「任何商品 30 天內可退」;rubric 三條——Correct(符合參考答案)、Grounded(有引用來源)、Complete(列出所有條件)。Jev 回三個分數:correct 0.98、grounded 0.92、complete 0.11,總分 0.67。看得出總分就是三項的平均,而 complete 只有 0.11 是因為回答漏了條件(例如「需附發票」、「未拆封」之類)——這正是 code 式 evaluator 抓不到、但又不值得動用 LLM 的那種判斷。每一條 rubric 就是第 5 段的一個 score 或 noul 問題,state 是「問題+回答+(可能的)參考答案」,一次送多題平行回答,所以一筆 eval 只花一次 0.1 秒級的呼叫。要補一個作者沒展開的推論:為什麼 Jev 會「更一致」?LLM-as-a-judge 是用生成的方式打分——同一份回答問兩次可能給 7 分與 8 分,因為取樣有隨機性、而且分數是「寫出來的數字」;Jev 的分數是模型的直接輸出而非生成的 token,同樣輸入給同樣輸出,跨 evals 自然穩定。這是第 5 段 confidence 那一點的延伸:LLM 填的數字是編的,Jev 給的數字是量的。當然,「更可靠」在部落格裡的比較基準是什麼(哪個 LLM、哪些 rubric、跟人工標註的一致率)影片沒說,這點要去讀原文。
術語:online evalscode-style evaluator
9. 開始動手:安裝與資源 8:47–9:14
收尾:`uv pip install langchain-typesafe`,讀配套部落格文章,到 typesafe.ai 拿 API key,做了東西在 X 上 tag @LangChainAI。

推理因為概念(System 1 model)、介面(三種問題)、程式碼(TypeSafeClassifier)、用例(routing / auto mode / judge)都已經給齊,所以作者最後只留行動清單:uv pip install langchain-typesafe 安裝套件;讀配套部落格文章(langchain.com/blog/building-a-harness-with-jev);到 console.typesafe.ai 拿 API key;做了東西在 X 上 tag @LangChainAI。這段沒有新推論,是把第 6 段的安裝指令與 API key、第 8 段提到的部落格,集中成一張可以照做的清單。
AI 補充投影片上的網址比口頭完整:部落格是 langchain.com/blog/building-a-harness-with-jev,跟影片同名,第 8 段說的「Jev 當 judge 的結果」應該就在這篇或它連出去的文章裡;API key 的入口是 console.typesafe.ai(口頭只說 typesafe.ai)。動手前值得先想清楚的一件事,是把影片的三個用例對回自己的 agent:loop 裡有哪些「每一輪都要做、答案在有限選項內」的判斷?那些就是候選。順序上建議先從第 7 段的 auto mode 開始——LangChain 已有現成 middleware,只要換掉分類器;其次是 routing;judge 需要先有 evals 資料集,門檻最高。
4. 總結
作者先攤開 agent loop(request → LLM → tools → result),指出 LLM 文字進文字出、程式卻依賴型別的張力;tool calling 與 structured outputs 兩個 primitive 替輸出加了型別,但模型本身仍慢而貴。Jev 是 TypeSafe AI 的 System 1 model:吃 state 與 questions、回 typed answers 與機率、根本不生成文字,所以分類型任務快 20–200 倍、便宜 40–400 倍,與 LLM(System 2)互補而非替代。PII demo 把 5 秒對 0.1 秒看得見;Stripe 客訴示範 choice / score / noul 三種問題型別、機率與 confidence 的差別、以及多題平行回答。langchain-typesafe 的 TypeSafeClassifier 讓 Jev 可掛在 node / tool / middleware 三個位置,對應三個用例:model routing(loop 入口)、auto mode 攔危險 tool call(action 邊,作者親身因太慢關掉、因 Jev 開回來)、Jev-as-a-judge 沿 rubric 替 online evals 打分(loop 之後,比 LLM-as-a-judge 便宜快且更一致)。貫穿的推論:loop 裡「每輪都要做、答案在有限選項內」的判斷交給原生輸出型別的模型,harness 才能既安全又不拖慢。
5. 推薦三個下一步
1. 往下挖深:System 1 model 怎麼做到不生成文字就給機率
影片只給了數字與類比,沒解釋模型結構;要知道它為何一致、邊界在哪,得看分類頭與校準的原理。
YouTube 搜尋:TypeSafe AI Jev architecture encoder classification head calibrated probability Jev as a judge LangChain blog
2. 往旁邊對照:LLM-as-a-judge 的可靠性問題與其他小模型評分法
作者說 Jev 比 LLM judge 更一致,但比較基準沒說;對照 LLM judge 的已知偏誤與其他 reward model / classifier 評分法才知道優勢多大。
YouTube 搜尋:LLM as a judge bias consistency reward model vs LLM judge small classifier for guardrails latency
3. 往上應用:把 auto mode / routing 接進自己的 coding agent
影片給了三個位置與程式碼,但沒示範完整 middleware 接法;實作一次才知道門檻與 instructions 怎麼寫。
YouTube 搜尋:LangChain middleware tool call guardrail LLM model routing classifier cheap fast langchain-typesafe auto mode example
- 接著看 ←An ex-OpenAI researcher just deleted language from the LLM... · 那站解釋 Jev 為何不生成文字、noul/choice/score;這站把它掛進 agent loop 的 routing、auto mode、judge
- 相關 —Jev + Treg is a crazy combo for automation... · 同用 Jev 的 state + 三種 question:一站接進 agent harness,一站蓋商業自動化管線與分層門檻
- 接著看 ←Lauren Tan grokbot workshop 中文字幕 · grokbot 說護欄要硬、驗證要自動;這站給 0.1 秒的分類器做 auto mode 攔截與 online evals 打分
- 相關 —How a Cloudflare Engineer Ships Production Code He Didn't Write | Dillon Mulroy · 共用 harness:Dillon 說多 agent loop 貴且 harness 飄移;這站用便宜的 Jev 接住 loop 裡每輪的判斷