用 Jev(System 1 model)替 agent harness 裡的分類型判斷換上更快更便宜的模型

文字解析 · 1 支影片 · 產生於 2026-10-01 00:54

🎧 語音解析✍️ 練習

🎧 語音解析 24m17s · TTS 講解與作者原聲交錯;點章節可跳。
邊聽邊看逐句講稿,點任一句從那裡開始
章節(9)

1. Outline

  1. 起點 · 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 才能既安全又不拖慢。

推理鏈:每段留給下一段的線索

每一列是一段,箭頭後的字是這段留給下一段的線索。點段落標題跳到該段。

  1. 回顧大家熟悉的 agent loop → 作者留下的問題是:LLM 很強但文字進文字出、不可預測,而 code-driven 的應用依賴結構化型別——那麼 LLM 剛出來時,大家是用什麼方法「對它施加結構」的?
  2. tool calling 與 structured outputs → 型別問題有解了,但這兩個 primitive 都還是叫 LLM「用結構化的方式生成文字」,模型本身一樣慢、一樣貴。作者接下來要引入的 Jev 究竟是什麼、它跟這兩個 primitive 有什麼本質不同?
  3. Jev 是什麼:System 1 model → 作者給了定義、數字與命名來源,但都還是「說的」。20–200 倍到底在實際體感上是什麼樣子?她接下來要用同一個問題同時丟給 LLM 與 Jev,讓差距看得見。
  4. Demo:LLM vs Jev 回答 PII 問題 → demo 只問了一個是/否問題。Jev 究竟能回答哪幾種形狀的問題?除了「有沒有」,能不能問「哪一個」或「多嚴重」?作者接下來用一則 Stripe 客訴當 state,一次示範三種問題類型。
  5. Jev 回答的三種問題類型 → 三種問題型別與平行回答都是 Jev 的 API 能力。回到影片標題「建 harness」:在 LangChain 的程式裡實際要怎麼呼叫它?作者接下來給出剛推出的整合套件與程式碼。
  6. 在 LangChain 裡用 Jev → 工具就位、也知道可以掛在 node / tool / middleware 三個位置。那麼在真實的 agent 裡,哪些判斷值得從 LLM 手上接過來交給 Jev?作者接下來從 LangChain 自己的 coding agent 舉兩個用例。
  7. 用例:model routing 與 auto mode → routing 與 auto mode 都是「在 loop 進行中做決定」。還有一類判斷是在 agent 跑完之後才做的:它到底有沒有把事做好?作者說第三個用例是她最期待的——用 Jev 當 evals 的 judge。
  8. 用例:Jev 當 online evals 的 judge → 三個用例講完:routing、auto mode、judge,分別落在 loop 的入口、action 邊、以及 loop 之後。作者最後要收尾:想自己動手的人該從哪裡開始?
  9. 開始動手:安裝與資源

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 是文字進文字出、不可預測,所以早期就需要辦法加上結構,讓它能在依賴型別的程式裡運作。

agent loop 示意圖:request → LLM → tool → result 的循環,是整支影片後面所有討論的底圖
0:30 · agent loop 示意圖:request → LLM → tool → result 的循環,是整支影片後面所有討論的底圖
承上 用上前情提要裡的背景:讀者已經知道 LLM 可以被包成 agent、可以呼叫工具。作者不從 Jev 開始講,而是先把這張大家共有的「agent loop」底圖攤開,因為 Jev 的定位只有放在這張圖上才看得出來。

推理因為主題是「用 Jev 建 harness」,而 harness 就是包在模型外面、決定何時呼叫誰的那層程式,所以作者先把 harness 裡最核心的東西——agent loop——畫出來:request 進來交給 LLM,LLM 對 tools 發出 action、拿回 observation,循環到它判定任務完成就回 result。接著她立刻指出這個 loop 的弱點:LLM 文字進文字出、不可預測,而程式天生依賴型別。這個「強大但不可預測」的張力,就是整支影片後面每一步的出發點。

AI 補充投影片上的循環其實有兩種邊:實線是「LLM → tools → LLM」的往返(action / observation),虛線是「LLM → result」的出口。可以把它看成一個 while 迴圈:每一輪 LLM 決定「再呼叫一個工具」或「結束」。作者沒說清楚的一點是,這個決定本身也是 LLM 用文字表達的——它得用文字說「我要呼叫 get_order」,程式再去解析。這就是為什麼「文字進文字出」會成為問題:迴圈裡每一個分支判斷都要靠解析自由文字,稍有格式偏差程式就會壞掉。所謂「需要結構」,指的正是這些判斷點。

harness

外掛框架/包覆層

包在模型外面、負責接請求、派工具、決定何時停止的那層程式。

「harness」原意是馬具,引申為把模型「套上」讓它能拉動實際工作的框架。在 agent 語境下,它包含 agent loop、工具的註冊與呼叫、中間件(middleware)、停止條件等。模型只負責在每一輪回答「接下來做什麼」,harness 負責把回答變成真正的程式動作。影片標題「Building a Harness with Jev」的意思就是:在這層程式裡,把某些判斷交給 Jev 而不是 LLM。

相關術語: agent loop (包含)

出處:第 1 段「回顧大家熟悉的 agent loop」

agent loop

代理循環

request → LLM → 呼叫工具拿結果 → 回到 LLM,直到 LLM 決定結束並回傳 result 的循環。

這是所有 agent 框架的共同骨架,也叫 tool-calling loop 或 ReAct loop。每一輪 LLM 看到目前的對話與工具結果(observation),輸出一個動作(action):呼叫某工具,或結束。它強大之處在於步數不固定,模型可以視情況多繞幾圈;弱點是每一輪的「決定」都是 LLM 生成的文字,慢、貴、且不保證格式。

相關術語: LLM (由其驅動)、harness (屬於)

出處:第 1 段「回顧大家熟悉的 agent loop」

LLM

大型語言模型

吃一段文字、生成一段文字的模型,是 agent loop 裡負責「決定下一步」的核心。

作者刻意用一句話定性 LLM:「text in, text out」。這不是貶義,而是為了鋪陳:既然它本質上是生成文字,那要讓程式使用它,就必須在它外面加東西。後面出現的所有機制(tool calling、structured outputs、乃至 Jev)都可以理解成對這個「文字進文字出」限制的不同回應方式。

出處:第 1 段「回顧大家熟悉的 agent loop」

留給下一段 作者留下的問題是:LLM 很強但文字進文字出、不可預測,而 code-driven 的應用依賴結構化型別——那麼 LLM 剛出來時,大家是用什麼方法「對它施加結構」的?

2. tool calling 與 structured outputs 1:02–1:38

為了替 LLM 加結構,出現兩個 primitive。tool calling:模型送出結構化請求(例如帶 ID 的 get order),工具回傳結構化資料。structured outputs:把輸出型別綁到模型上,讓最終結果符合指定 JSON schema 而非純文字。這兩個 primitive 讓 agent loop 得以在程式裡被利用。

tool calling 的 get_order 請求/回傳結構範例,對照講解才看得出「結構化」指什麼
1:12 · tool calling 的 get_order 請求/回傳結構範例,對照講解才看得出「結構化」指什麼
structured outputs 的 output type 綁定與 JSON schema 示意,是與 tool calling 對照的另一個 primitive
1:24 · structured outputs 的 output type 綁定與 JSON schema 示意,是與 tool calling 對照的另一個 primitive
承上 承接第 1 段留下的問題——怎麼對「文字進文字出」的 LLM 施加結構。這段直接給答案:業界在 LLM 早期加上的兩個 primitive。

推理因為上一段確立了「程式需要型別、LLM 只給文字」的張力,所以作者接著介紹兩個把文字變成型別的機制。第一個是 tool calling:模型不再用自由文字說「幫我查訂單」,而是送出結構化請求(name: get_order、args: order_id),工具也回傳結構化資料。第二個是 structured outputs:把輸出型別綁到模型上,讓最終回答符合指定的 JSON schema。她的結論是「這兩個 primitive 讓 agent loop 得以在程式裡被利用」——注意她用的詞是「made it a lot easier」,不是「解決了」,這替下一段留了伏筆。

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 生成符合格式的文字,再由程式解析/驗證」,模型本身沒有變快或變便宜,只是輸出多了一層約束。也就是說,型別問題解了,速度與成本問題還在——這正是後面要處理的。

tool calling

工具呼叫

讓模型以結構化格式(工具名稱+參數)發出呼叫請求,工具再以結構化資料回傳的機制。

在 tool calling 出現前,開發者得用 prompt 教模型「請用這種格式回答」再自己正則解析,非常脆弱。tool calling 把「工具的 schema」直接交給模型 API,模型的回覆裡會有一個獨立的、已結構化的 tool_call 欄位。投影片的例子:模型送 {"name": "get_order", "args": {"order_id": "A-1042"}},工具回 {"status": "shipped", "eta": ...}。它對應 agent loop 裡 LLM 與 tools 之間的那條往返邊(見第 1 段)。

相關術語: agent loop (實作其 action 邊)、structured outputs (對照組)

出處:第 2 段「tool calling 與 structured outputs」

structured outputs

結構化輸出

把一個輸出型別綁到模型上,讓模型的最終回答是符合 JSON schema 的物件而不是一段文字。

跟 tool calling 不同,structured outputs 管的是 agent loop 的「出口」:任務做完時回傳給程式的 result。投影片範例用 Pydantic 宣告 class Ticket(BaseModel) 有 team 與 urgent 兩個欄位,透過 model.with_structured_output(Ticket) 綁定後,invoke 直接得到 Ticket 實例。底層做法通常是把 JSON schema 傳給模型 API 並在解碼時約束格式。常見誤解是以為它讓模型「更聰明」,其實只是讓輸出「更可解析」。

相關術語: JSON schema (依賴)、tool calling (對照組)

出處:第 2 段「tool calling 與 structured outputs」

JSON schema

JSON 結構定義

用 JSON 描述另一份 JSON 該有哪些欄位、什麼型別的規格。

tool calling 與 structured outputs 底層都靠它:工具的參數格式、輸出物件的形狀,最終都會轉成 JSON schema 傳給模型。像 Pydantic 的 BaseModel 就能自動產出對應的 JSON schema。理解這點就會明白,這兩個 primitive 的「結構」來源是開發者事先宣告的,模型只是被要求「填進這個形狀」。

相關術語: structured outputs (被其使用)

出處:第 2 段「tool calling 與 structured outputs」

primitive

基本構件

框架提供的、不可再拆的基本能力,其他功能都是用它們組合出來的。

作者把 tool calling 和 structured outputs 稱為兩個 primitive,意思是它們是「加結構」這件事的最小積木,後面所有 agent 功能(路由、判斷、評估)都在這兩塊上面疊。這個用詞也暗示下一步:如果要再加一種新能力,可能需要一種新的 primitive,而不是再多疊一層 prompt。

相關術語: tool calling (一種)、structured outputs (一種)

出處:第 2 段「tool calling 與 structured outputs」

留給下一段 型別問題有解了,但這兩個 primitive 都還是叫 LLM「用結構化的方式生成文字」,模型本身一樣慢、一樣貴。作者接下來要引入的 Jev 究竟是什麼、它跟這兩個 primitive 有什麼本質不同?

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。

作者說「你可以在投影片上看到 state、questions 與 typed answers 的例子」,是 Jev 輸入輸出格式的第一次具體呈現
2:12 · 作者說「你可以在投影片上看到 state、questions 與 typed answers 的例子」,是 Jev 輸入輸出格式的第一次具體呈現
20–200x 快、40–400x 便宜的數字對照,是 Jev 之所以引發討論的核心賣點
2:30 · 20–200x 快、40–400x 便宜的數字對照,是 Jev 之所以引發討論的核心賣點
承上 承接第 2 段留下的問題——tool calling 與 structured outputs 都還是叫 LLM「用結構化方式生成文字」,慢與貴沒解。這段揭曉 Jev 是什麼,並點出它跟兩個 primitive 的本質差異:它根本不生成文字。

推理因為上一段的兩個 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 刻意跟它形成對比。

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

Jev

Jev(TypeSafe AI 的 System 1 模型)

TypeSafe AI 推出的模型:輸入 state 與 questions,回傳 typed answers 與機率,不生成文字。

投影片上的模型名有 jev-latest(請求時用的別名)與 jev-1.13.0(回應中實際版本)。它的介面完全是結構化的:questions 是一個字典,每題宣告 type 與自然語言 instructions;answers 是同名字典,每題回一個型別化的值。它跟 LLM 的差別不在「更聰明」而在「不同的輸出形式」:LLM 產出 token 序列,Jev 產出決策值。因此它擅長分類、評分、是否判斷,不能寫文章或程式。

相關術語: System 1 model (一種)、LLM (對照組)、TypeSafe AI (由其推出)

出處:第 3 段「Jev 是什麼:System 1 model」

System 1 model

系統一模型

一類專做快速結構化決策、讓軟體能直接使用其輸出的 AI 模型。

這是 TypeSafe AI 文件中的定義:「evaluates a state and questions and returns typed answers and probabilities」。命名借自心理學家 Kahneman 對兩種思維的區分——System 1 是快、便宜、直覺式;System 2 是慢、貴、逐步推理。把它套到模型上:LLM 逐 token 推理、可處理開放式問題,像 System 2;System 1 model 幾乎即時回傳型別化決策、只處理封閉式問題,像 System 1。要注意這是行銷上的類比,不是嚴格的認知科學對應——LLM 並不真的「推理」,只是行為上像。

相關術語: System 2 (相反)、Jev (實例)

出處:第 3 段「Jev 是什麼:System 1 model」

System 2

系統二(慢而昂貴的推理)

Kahneman 提出的第二種思維模式:慢、費力、逐步推理,用來處理開放式問題。

在《快思慢想》(Thinking, Fast and Slow)中,System 1 是自動、快速、直覺的(看到 2+2 立刻知道是 4),System 2 是刻意、緩慢、需要注意力的(算 17×24)。作者說 LLM「behave more like System 2」:慢、貴,但能對開放式問題做 step-by-step reasoning。這個對比的用意是替 Jev 定位——不是取代 System 2,而是把那些其實只需要直覺判斷、卻被丟給 System 2 做的事接回來。

相關術語: System 1 model (相反)、LLM (類比)

出處:第 3 段「Jev 是什麼:System 1 model」

state

狀態(輸入情境)

送給 Jev 的原始情境資料,例如一則客訴訊息,所有 questions 都針對它回答。

在投影片範例中 state 就是一段字串:"Hi, I've been trying to connect my Stripe..."。它對應 LLM 世界裡的「prompt 內容」,但語意不同:state 不是指令,只是被判斷的對象;指令寫在每個 question 的 instructions 裡。這種把「資料」與「問題」分開的設計,讓同一個 state 可以同時被問多個問題。

相關術語: question (被其詢問)、Jev (輸入於)

出處:第 3 段「Jev 是什麼:System 1 model」

question

問題(含型別與指示)

對 state 提出的一個封閉式問題,宣告答案的 type 並用自然語言 instructions 描述判斷標準。

範例中的 question 名為 is_urgent,type 是布林型別,instructions 是「訊息帶有緊急性或時效性」。Jev 回應時用同一個鍵名回傳同型別的值(0.999)。這裡的「型別」是事先宣告的,跟第 2 段 structured outputs 的 JSON schema 角色相似,但差別在於 Jev 不是被「約束」去符合型別,而是天生只能輸出那個型別的值。

相關術語: state (針對)、typed answer (產生)、structured outputs (類比)

出處:第 3 段「Jev 是什麼:System 1 model」

typed answer

型別化答案(含機率)

Jev 對每個 question 回傳的值:型別跟 question 宣告的一致,並附帶機率或分數。

投影片上 is_urgent 的答案是 0.999,這是一個「這則訊息有緊急性」的機率,而非 true/false 的硬判斷。附帶機率的好處是程式可以自己設門檻(例如 > 0.9 才算緊急),也能把「不確定」當成一種訊號。這是 LLM 用 structured outputs 很難給出的東西——LLM 可以被要求輸出 true/false,但它輸出的「confidence: 0.8」多半是編出來的數字,不是模型內部真實的機率。

相關術語: question (回應)、structured outputs (對照組)

出處:第 3 段「Jev 是什麼:System 1 model」

TypeSafe AI

TypeSafe AI(新創公司)

推出 Jev 與「System 1 model」概念的新創公司。

公司名 TypeSafe(型別安全)本身就點出產品定位:讓模型輸出對程式而言是型別安全的。作者引用的是它的官方文件對 System 1 model 的定義。第 6 段的 LangChain 整合套件與 API key 都以此命名。

相關術語: Jev (推出)

出處:第 3 段「Jev 是什麼:System 1 model」

留給下一段 作者給了定義、數字與命名來源,但都還是「說的」。20–200 倍到底在實際體感上是什麼樣子?她接下來要用同一個問題同時丟給 LLM 與 Jev,讓差距看得見。

4. Demo:LLM vs Jev 回答 PII 問題 3:27–4:11

問同一個問題「這段文字有 PII 嗎?」:LLM 產出一段文字結果,再加 structured output 大約要五秒;Jev 幾乎立刻回「有 PII 的機率 98%」。作者由此指出:很多目前交給 LLM 做的分類/決策型任務,換成 Jev 在速度與成本上都更划算。

demo 畫面:LLM 文字回答 vs Jev 的 98% 機率,兩邊並排才看得出差距
3:50 · demo 畫面:LLM 文字回答 vs Jev 的 98% 機率,兩邊並排才看得出差距
承上 承接第 3 段留下的「數字說了但沒看到」——作者現在用同一個問題分別丟給 LLM 與 Jev,把 20–200 倍變成看得見的體感。

推理因為上一段只給了官方數字與定義,所以作者接著做對照 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

PII

個人可識別資訊

能直接或間接辨識出特定個人的資料,例如姓名、email、電話、地址。

Personally Identifiable Information。demo 裡的訊息含 dana.ruiz@northwind.co 與 (415) 555-0147,都是典型 PII。「這段文字有沒有 PII」是很典型的 guardrail 判斷:在把使用者輸入送去記錄、送給第三方模型、或回傳給其他人之前,先判斷要不要遮蔽。這種判斷不需要生成任何文字,只需要一個機率,所以是 Jev 這類模型的天然用例。

相關術語: classification task (一種)

出處:第 4 段「Demo:LLM vs Jev 回答 PII 問題」

classification task

分類型任務

答案落在有限選項內(是/否、A/B/C、一個分數)的判斷任務,不需要生成新內容。

作者用「classification or decision style tasks」概括 Jev 擅長的範圍。判斷標準很簡單:如果一個任務的答案空間是事先可以列舉的,它就是分類型;如果需要寫出一段新文字,它就不是。agent 系統裡其實藏著大量分類型任務——該不該呼叫工具、這個請求危不危險、這個回答好不好——只是因為方便,大家習慣通通丟給 LLM。第 3 段說 Jev 只接手「特定任務」,這段把「特定」定義成了「分類型」。

相關術語: Jev (擅長)、LLM (常被其代勞)

出處:第 4 段「Demo:LLM vs Jev 回答 PII 問題」

latency

延遲

從送出請求到拿到回答所經過的時間。

demo 的核心對照就是 latency:LLM 約 5 秒、Jev 約 0.1 秒。對 agent 而言 latency 會累加——一個 loop 跑十輪、每輪都要先做一次判斷,5 秒與 0.1 秒的差距就變成 50 秒與 1 秒。這也是為什麼後面談到把判斷步驟放進 agent loop 裡時,速度會成為「能不能開著這個功能」的決定因素。

相關術語: agent loop (在其中累加)

出處:第 4 段「Demo:LLM vs Jev 回答 PII 問題」

留給下一段 demo 只問了一個是/否問題。Jev 究竟能回答哪幾種形狀的問題?除了「有沒有」,能不能問「哪一個」或「多嚴重」?作者接下來用一則 Stripe 客訴當 state,一次示範三種問題類型。

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 的順序推理。

choice 問題的分數與 confidence 呈現,數字要看畫面才對得上
4:38 · choice 問題的分數與 confidence 呈現,數字要看畫面才對得上
score 與 boolean 的量尺與 0–1 機率,三種型別對照的完整狀態
5:05 · score 與 boolean 的量尺與 0–1 機率,三種型別對照的完整狀態
承上 承接第 4 段留下的問題——Jev 除了「有沒有」還能回答哪些形狀的問題。這段用一則 Stripe 客訴當 state,一次把三種 question 型別攤開。

推理因為上一段的 demo 只示範了一個是/否問題,所以作者接著系統化地介紹 Jev 的三種問題類型,且刻意用同一個 state 貫穿:「我已經試著連 Stripe 帳號三天了,一直失敗,我在流失銷售,請盡快幫忙。」第一種 choice(多選一):哪個團隊該處理?→ billing 0.84,confidence 0.596。第二種 score(量尺上定位):客戶看起來多沮喪?→ 1.035,落在 frustrated 但不到 very angry。第三種 boolean(是否):訊息有緊急性嗎?→ 0.999。最後補一個性質:一個 state 可以帶很多 questions,Jev 平行回答——再一次跟 LLM 的順序推理形成對比。這段的邏輯是先把「問題的形狀」窮舉完,讀者才有辨識用例的工具。

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

choice

多選一問題

從事先列出的選項中挑一個,Jev 回每個選項的機率分佈與一個整體 confidence。

投影片範例:「哪個團隊該處理?」選項 billing / technical / sales,回 0.84 / 0.159 / 0.001。程式端通常取最高者,但也可以看第二名——當前兩名很接近時,可以轉人工或再問 LLM。這是 routing(把請求分派到不同處理者)最直接的工具。

相關術語: question (一種)、confidence (附帶)

出處:第 5 段「Jev 回答的三種問題類型」

score

量尺分數

在一條有刻度的連續量尺上定位,回一個實數與 confidence。

範例:客戶多沮喪?量尺標 Calm、Frustrated、Very angry,回 1.035。它不是三選一,而是連續值,所以能表達「比 frustrated 再多一點」。適合強度、優先度、品質分等本來就是程度問題的判斷;後面談到用 Jev 打 rubric 分數時用的就是這種型別。

相關術語: question (一種)、choice (對照組)

出處:第 5 段「Jev 回答的三種問題類型」

noul

是否型別(Jev 的 boolean)

Jev 對是/否問題的型別名稱,回傳「為真」的機率(0 到 1)。

投影片標題寫 Noul,副標「Is this true?」,作者口頭則說 boolean。第 3 段的 is_urgent 與第 4 段的 has_pii 都是這個型別。它回的是機率而非硬 true/false(範例 0.999),所以門檻由程式決定;這讓同一個判斷可以在不同風險情境用不同門檻,例如遮蔽 PII 用 0.5、擋掉危險操作用 0.2。

相關術語: question (一種)、typed answer (回傳)

出處:第 5 段「Jev 回答的三種問題類型」

confidence

信心值

Jev 對「這一題自己判得準不準」的整體評估,跟各選項的機率是兩回事。

choice 範例裡 billing 已經拿到 0.84,但 confidence 只有 0.596;score 範例 confidence 0.842。可以這樣理解:機率分佈回答「哪個對」,confidence 回答「我該不該相信這個分佈」。實務上這是一個很好用的分流訊號——confidence 低就把這筆交給更貴的 LLM 或人工,高就直接採用。這是 LLM 用 structured outputs 給不出的東西:LLM 被要求填一個 confidence 欄位時,那個數字是「生成」的,不是模型內部的量測。

相關術語: typed answer (附屬於)、choice (見於)

出處:第 5 段「Jev 回答的三種問題類型」

parallel questions

多問題平行回答

一次送一個 state 與多個 questions,Jev 同時算出所有答案而非逐題順序回答。

作者強調這是跟 LLM「sequential reasoning」的又一個對比。原因在架構:Jev 對 state 編碼一次後,每個 question 是獨立的輸出,互不依賴;LLM 要回答多題得在一段文字中依序寫出,後題必須等前題的 token 生成完。實際效果是:問一題與問十題的延遲差不多,所以設計 harness 時可以放心一次多問幾個判斷(該走哪個模型?危險嗎?緊急嗎?),不必為每題付一次 latency。

相關術語: state (共用)、latency (不隨題數增加)

出處:第 5 段「Jev 回答的三種問題類型」

留給下一段 三種問題型別與平行回答都是 Jev 的 API 能力。回到影片標題「建 harness」:在 LangChain 的程式裡實際要怎麼呼叫它?作者接下來給出剛推出的整合套件與程式碼。

6. 在 LangChain 裡用 Jev 5:35–6:04

LangChain 剛推出 langchain-typesafe 整合:從套件 import TypeSafe classifier,先拿 TypeSafe API key,然後帶 state 與 questions 呼叫 Jev,回應裡有每個 question 的答案。

程式碼片段:import classifier、invoke 帶 state/questions,實際 API 長相只能看圖
5:48 · 程式碼片段:import classifier、invoke 帶 state/questions,實際 API 長相只能看圖
承上 承接第 5 段留下的問題——三種問題型別是 API 能力,在 LangChain 程式裡實際怎麼呼叫。這段給出剛推出的整合套件與最小程式碼。

推理因為前面幾段已經把 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 呼叫前後的攔截點)。作者沒有口頭解釋這張卡,但下一段的用例正是沿著這三個位置展開。

langchain-typesafe

LangChain 的 TypeSafe 整合套件

把 Jev 包成 LangChain 元件的 Python 套件,用 uv pip install langchain-typesafe 安裝。

LangChain 的整合套件慣例是 langchain-<供應商>,每個供應商一個獨立套件,主套件不必跟著升版。這個套件提供 TypeSafeClassifier 以及三種問題型別的類別(投影片上示範了 Noul)。因為它遵守 LangChain 的 Runnable 介面(有 invoke),所以能直接放進 LangGraph 節點或當 middleware 用。

相關術語: TypeSafeClassifier (提供)、TypeSafe AI (整合)

出處:第 6 段「在 LangChain 裡用 Jev」

TypeSafeClassifier

TypeSafe 分類器(Jev 的 LangChain 封裝)

langchain-typesafe 提供的類別,invoke 一個含 state 與 questions 的字典,回傳各題的 typed answers。

名字叫 classifier 而不是 model 或 chat,是刻意的:它提醒使用者這不是拿來對話的東西,而是拿來做分類判斷的。用法:classifier = TypeSafeClassifier();response = classifier.invoke({"state": ..., "questions": {...}});response.nouls["is_urgent"].noul 取值。API key 從環境變數 TYPESAFE_API_KEY 讀取。它跟 LangChain 裡的 chat model 一樣有 invoke,所以能塞進任何接受 Runnable 的位置。

相關術語: Jev (封裝)、langchain-typesafe (屬於)

出處:第 6 段「在 LangChain 裡用 Jev」

middleware hook

中介層掛勾

在 agent loop 的固定時點(例如 LLM 呼叫前後、工具執行前後)插入的一段攔截邏輯。

投影片右下角寫「Call it anywhere: a node, a tool, or a middleware hook」。node 是 LangGraph 流程圖上的一個步驟;tool 是 agent 可以主動呼叫的工具;middleware hook 則是不需要 LLM 決定、每一輪都會自動經過的攔截點。三者對應第 1 段 agent loop 的不同位置。Jev 特別適合放在 middleware:因為它 0.1 秒就回,每一輪都跑也不會拖慢 loop;如果換成 LLM 來做同樣的攔截,每輪多五秒,使用者很快就會把它關掉。

相關術語: agent loop (掛在其上)、harness (屬於)

出處:第 6 段「在 LangChain 裡用 Jev」

留給下一段 工具就位、也知道可以掛在 node / tool / middleware 三個位置。那麼在真實的 agent 裡,哪些判斷值得從 LLM 手上接過來交給 Jev?作者接下來從 LangChain 自己的 coding agent 舉兩個用例。

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 快到讓她重新開啟。

承上 承接第 6 段留下的問題——在真實 agent 裡哪些判斷值得交給 Jev。這段給出兩個用例,都來自 LangChain 內部的 coding agent,並且分別對應「node」與「middleware hook」兩個位置。

推理因為上一段已經說 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 並被擋下。

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 跟傳統小型分類器的差別,傳統分類器改一條規則要重新標資料重訓。

model routing

模型路由

依每個請求的複雜度或性質,決定把它送給哪一個模型(快便宜或強昂貴)。

動機是成本與速度:最強的模型每一次呼叫都貴且慢,但 agent 做的事有八成是簡單的。routing 這一步本身如果用 LLM 做,等於為了省一次 LLM 呼叫先多花一次 LLM 呼叫,划不來;用 Jev 的 choice 問題(選項:fast / powerful)幾乎不花時間。作者說 LangChain 內部 coding agent 正在做這件事。放在 agent loop 裡,它是 request 進入 LLM 之前的一個節點。

相關術語: choice (以其實作)、agent loop (位於其入口)

出處:第 7 段「用例:model routing 與 auto mode」

auto mode

自動模式(危險工具呼叫攔截)

LangChain 提供的 middleware:讓 agent 自動執行工具而不逐一問人,但用分類器判斷每個 tool call 是否有風險,有就擋掉。

「auto」的意思是不用每個動作都請使用者按確認。要做到這點就需要一個看門人:每個 tool call 發出後、執行前,先判斷「危不危險」。作者的親身故事說明了這個看門人的速度就是 auto mode 能不能開著的關鍵——用 LLM 判斷太慢,她把它關了;換 Jev 後開回來。範例:會刪資料庫或刪重要檔案的呼叫會被分類為 risky 並在 runtime 被擋。在 agent loop 圖上,它掛在 LLM → tools 的 action 邊上。

相關術語: middleware hook (一種)、noul (以其實作)、tool calling (攔截)

出處:第 7 段「用例:model routing 與 auto mode」

coding agent

程式撰寫代理

以 agent loop 驅動、能讀寫檔案、執行指令來完成程式任務的 agent。

作者兩個用例都以 LangChain 內部的 coding agent 為例,因為它同時具備兩個特徵:任務複雜度差異極大(改一個字 vs 重構模組),所以需要 routing;工具有真實破壞力(刪檔、跑指令),所以需要 auto mode 的攔截。它也是對 latency 最敏感的一類 agent——使用者盯著終端機等,每一輪多五秒都很明顯。

相關術語: agent loop (實例)、auto mode (使用)

出處:第 7 段「用例:model routing 與 auto mode」

留給下一段 routing 與 auto mode 都是「在 loop 進行中做決定」。還有一類判斷是在 agent 跑完之後才做的:它到底有沒有把事做好?作者說第三個用例是她最期待的——用 Jev 當 evals 的 judge。

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 更可靠一致。

judge 流程圖:input + answer + rubric → Jev 打分,各項 rubric 條目要看圖
8:10 · judge 流程圖:input + answer + rubric → Jev 打分,各項 rubric 條目要看圖
承上 承接第 7 段留下的線索——前兩個用例都在 loop 進行中做決定,第三個則是在 agent 跑完之後判斷「做得好不好」:用 Jev 當 evals 的 judge,作者說這是她最期待的用例。

推理因為前面的用例都在「決定下一步」,所以作者接著轉到「評價結果」。她先鋪陳需求的兩面:大規模跑 evals 時不可能每條 trace 都有人看,但只用 code 式的 evaluator(字串比對、格式檢查)又不夠判斷 agent 有沒有把事做好——需要「某種模型」介於兩者之間。接著描述 Jev 怎麼做:輸入是該筆 eval 的 input(原始問題)與 agent 的回答,再加一份 rubric(評分標準:正確嗎?符合參考答案嗎?有依據嗎?有引用來源嗎?),Jev 沿著每項 rubric 給分。她把這定位為 LLM-as-a-judge 的演進:後者確實有用但很貴。最後引 LangChain 剛寫的部落格:Jev 不意外地更便宜更快,但更有趣的是,跨 evals 更可靠、更一致。

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

online evals

線上評估

對 agent 在真實流量中產生的每一條 trace 即時或準即時地打分,而不是只在開發階段跑固定測試集。

跟 offline evals(開發時用固定資料集跑分)相對。online 的難點是量大:每一條真實對話都要評,人工不可能,用 LLM 評則成本隨流量線性成長。所以 online evals 對 judge 的速度與成本極度敏感,這正是 Jev 的優勢所在。「trace」指一次 agent 執行從 request 到 result 的完整紀錄。

相關術語: LLM-as-a-judge (常用方法)、rubric (依據)

出處:第 8 段「用例:Jev 當 online evals 的 judge」

rubric

評分標準表

把「好回答」拆成幾條可獨立判斷的準則,每條分開打分。

投影片範例:Correct(符合參考答案)、Grounded(有引用來源)、Complete(列出所有條件)。拆成多條的好處是可診斷——總分 0.67 本身沒意義,但看到 complete 0.11 就知道問題出在漏條件。對 Jev 而言,每條 rubric 就是一個 question(score 或 noul),instructions 寫判斷準則,多條一次平行回答。

相關術語: score (以其實作)、parallel questions (利用)

出處:第 8 段「用例:Jev 當 online evals 的 judge」

LLM-as-a-judge

以 LLM 當評審

用一個 LLM 讀 agent 的回答並依 rubric 打分,取代人工評分。

這是目前最常見的自動評估方式,能處理 code 式 evaluator 做不到的語意判斷。缺點有二:貴(每筆 eval 一次完整 LLM 呼叫,還常要 chain-of-thought)與不穩(同輸入不同次打分會漂移,因為分數是生成的)。作者把 Jev-as-a-judge 定位為它的「演進」而非取代:開放式、需要解釋理由的評估仍需 LLM;但沿著固定 rubric 打分這種封閉判斷,Jev 更快、更便宜、也更一致。

相關術語: Jev (被其演進)、online evals (用於)

出處:第 8 段「用例:Jev 當 online evals 的 judge」

code-style evaluator

程式式評估器

用確定性程式(字串比對、正則、格式檢查、跑測試)判斷回答對不對的評估方式。

它快、免費、完全一致,但只能檢查「形式」——回答裡有沒有某個關鍵字、JSON 合不合法、單元測試過不過。它判斷不了「這個回答有沒有依據」「有沒有漏條件」這類語意問題。作者的框架是三層:code-style evaluator(便宜但淺)→ Jev(便宜且能做語意分類)→ LLM-as-a-judge(貴、能做開放式評價)。Jev 填補的是中間那一層。

相關術語: LLM-as-a-judge (相反)、Jev (被其補足)

出處:第 8 段「用例:Jev 當 online evals 的 judge」

留給下一段 三個用例講完:routing、auto mode、judge,分別落在 loop 的入口、action 邊、以及 loop 之後。作者最後要收尾:想自己動手的人該從哪裡開始?

9. 開始動手:安裝與資源 8:47–9:14

收尾:`uv pip install langchain-typesafe`,讀配套部落格文章,到 typesafe.ai 拿 API key,做了東西在 X 上 tag @LangChainAI。

get started 投影片:安裝指令、部落格連結、API key 網址一次列出
8:56 · get started 投影片:安裝指令、部落格連結、API key 網址一次列出
承上 承接第 8 段留下的問題——三個用例講完,想動手的人從哪開始。這段是收尾:一行安裝指令、三個連結。

推理因為概念(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

📄 全部影片 · 主題區: AI 模型與推論