如果前面六篇比較像是在拆概念、補判準、清理地雷,那這篇就比較像把那些東西真正放回一條工作流裡,看它們到底是怎麼咬在一起的。
這篇不打算教你把一個 job agent 從零複製出來。
它比較像是一篇 case study,回答這種問題:
- 為什麼我最後把 JD、CV、rubric 分成不同角色?
- 為什麼 CV 要切細,rubric 不要切太碎?
- 為什麼
source_type、memory_set這些欄位不能只是順手塞進 payload? - 為什麼 evidence pack 要刻意控瘦?
- 為什麼系統有時候看起來是模型亂講,實際上其實是 retrieval 在偷出事?
如果你前面幾篇都有看,這篇應該會有一種「原來那些規則不是在講道理,是在收拾真實問題」的感覺。fileciteturn15file0turn15file3turn15file4
先講核心主張
如果要先講一句結論,我會寫成這樣:
讓這套 job agent 穩起來的,從來不是某個神奇模型或單一工具,而是你怎麼把 JD、CV、rubric 變成一條可檢索、可引用、可控成本的 evidence pipeline。
這句話裡,最重要的不是「agent」,而是 evidence pipeline。
因為你真的把系統跑起來之後,很快就會發現:
多數錯誤不是因為模型突然笨了,而是因為 evidence 的形狀不對、進來的順序不對、角色混在一起,或者整包 evidence 太胖,模型最後只能一邊喘一邊亂抓重點。fileciteturn15file0turn15file4
一開始如果只把它當「把 CV 跟 JD 丟給模型」的問題,很快就會撞牆
這是很多人第一版最容易採用的直覺做法:
- 把 JD 全文丟進去
- 把 CV 全文丟進去
- 再補一段 rubric 或 scoring prompt
- 叫模型評分、寫 relevant reason、寫 cover letter
這種做法不是完全不能用。
在文件量小、任務簡單、沒有多輪 evidence 組裝時,它甚至可能一開始看起來還不錯。
但只要你真的把它用在一個比較穩定的工作流裡,問題就會慢慢浮出來:
- CV 太長,模型開始抓錯重點
- rubric 某條 hard gate 沒被讀到
- 同一份 JD 今天打這個分,明天又漂掉
- relevant reason 開始摻進不在 JD 的敘事
- evidence pack 越來越胖,最後撞到 token 或 MAX_TOKENS 的天花板fileciteturn15file0turn15file4
我後來比較確定,這不是 prompt 再修兩輪就會自然變好的問題。
它其實是在跟你說:這條工作流的證據單位、資料角色、檢索邊界,還沒有被設計好。
這個系統裡,JD、CV、rubric 不是同類資料
一開始很容易把它們想成「反正都是文字,統一向量化、統一檢索就好」。但真的跑久了就會發現,這三種資料在系統裡的責任完全不同。
JD:事實來源與工作要求
JD 的角色比較像任務上下文。
它定義的是:
- 這份工作在找什麼
- 有哪些 deliverables
- 哪些 requirements 是明講的
- 哪些限制是 non-negotiable
在很多流程裡,JD 甚至不一定要先切 chunk。第一版直接帶全文,常常比較穩。因為模型需要的是整體工作輪廓,而不是只看其中一段條列。fileciteturn15file4
CV:證據池
CV 不是規則,也不是主問題。
它比較像一個 evidence pool,你要從裡面抓出最能映射到 JD 的那幾段經歷。
所以 CV 最怕太肥。
如果一段 chunk 裡混了太多訊號,只因為命中一個 AI prototype 或 growth keyword 就整塊撈回來,後面模型很容易把別的無關成分也一起講進 relevant reason 裡。fileciteturn15file0
rubric:規則與框架
rubric 更像規則本身。
它不是讓模型去找靈感的,它是用來限制格式、定義 criteria、補 hard gate、控制輸出 shape 的。
所以 rubric 不能像 CV 那樣切得太散。
你希望每一塊規則群是自足的,不然 top1 / top2 只撈到半套,整個評分就可能漂掉。fileciteturn15file0
chunking 真正改變的,不只是 retrieval,而是整個下游輸出穩定度
為什麼 CV 要切細
因為這裡要解的不是「總結一份履歷」,而是:
- 哪一段最對這份 JD
- 哪些 bullet 最值得拿來 support 某個判斷
- 這份履歷有哪些 evidence 能映射到某條 requirement
這是一種 evidence mapping 問題,不是全文摘要問題。
所以 CV 更適合按主題或可映射證據點切。fileciteturn15file0turn15file4
為什麼 rubric 不能太碎
rubric 太碎時,模型很容易只撈到 criteria,卻漏掉 gate 或 output constraints。結果不是系統壞掉,而是它開始偷偷變得不穩。
這種不穩最麻煩,因為它不像 crash 那樣明顯。
它只是讓今天跟明天的 scoring 漂一點、理由多一點、格式歪一點,然後整套東西慢慢失去可信度。fileciteturn15file0
evidence pack 要刻意控瘦,不然你只是在做一包很貴的噪音
很多人看到輸出不穩,第一反應會是:
- 多帶幾塊 evidence
- 把 topK 拉高
- 多加一點 profile / background
- 再塞一點 rules
但 evidence pack 不是越大越好。
如果你讓模型一次吞太多半相關內容,它不一定變得更 grounded,反而更容易抓錯支點。更別說 token 成本跟輸出穩定度都會開始變差。fileciteturn15file0turn15file4
在這個求職 scoring 流程裡,一個比較務實的配方反而是:
- rubric:topK = 2
- profile:topK = 1
- CV:topK = 2 到 3
- JD:先直接提供全文,等流程穩再考慮 JD chunk retrieval
這個配方好用,不是因為它是什麼黃金數字,而是因為它強迫你承認:
evidence pack 也是設計出來的,不是撈越多越厲害。fileciteturn15file0turn15file4
為什麼 source_type、memory_set 這些欄位不能只是順手放進 payload
當這套系統開始把不同類型的資料都放進同一個 collection 裡時,metadata 就不再只是裝飾。
像這些欄位:
source_typememory_setrubric_idprofile_idjob_id
看起來很 boring,但它們其實在定義檢索邊界。
你如果沒有把這些欄位正式拉進 query plan,retrieval 就很容易變成「好像相關,但角色混在一起」的狀態。fileciteturn15file1turn15file2
這也是為什麼我後來會把 payload index 想成 schema migration。
不是因為 Qdrant 有奇怪規定,而是因為你真的在做一套混合了:
- 向量相似
- 結構化 filter
- 多資料角色
- evidence lanes
的 retrieval system。
這時候 schema 就不是可有可無的小細節了。fileciteturn15file1
很多看起來像模型亂講的問題,最後都回到 retrieval 邊界沒切乾淨
這個案例另一個很有感的地方,是它會逼你學會分辨:
- 到底是 R 壞了
- 還是 G 壞了
因為表面上看,一個 relevant reason 寫歪了,大家都會先怪模型。
但你去看 evidence pack 後,常常發現:
- 該抓的 CV chunk 沒進來
- 抓進來的是太肥的 chunk
- rubric 只撈到半套規則
source_type沒切乾淨,profile 或別的東西混進來- topK 太大,噪音蓋過真正該講的 evidencefileciteturn15file0turn15file4
這時候問題其實不是模型亂講,而是你餵給它的證據邊界本來就不乾淨。
它只是很流暢地把不乾淨的 context 講順而已。
這套系統為什麼最後比較穩,不是因為它更複雜,而是因為邊界更清楚
真正讓系統穩下來的,大概是這幾件事:
- JD、CV、rubric 角色切清楚
- CV 與 rubric 用不同 chunking 策略
- evidence pack 刻意控瘦
- retrieval 用
source_type、memory_set等欄位做正式邊界 - 開始用「先看 evidence,再怪模型」的 debug 習慣
- 把輸出的穩定性,當成 retrieval 設計的一部分,而不是 prompt 附帶效果
什麼時候這個案例的判準不成立
不是每個 RAG 系統都像 job matching 這麼適合細粒度 evidence mapping。
這套判準成立,是因為你的問題本質上很像:
- requirement matching
- evidence-backed scoring
- constrained writing
如果今天你做的是:
- FAQ assistant
- 長文摘要
- 合約問答
- 程式碼檢索
- 多模態文件
那 chunking、retrieval、filter schema 的最佳形狀很可能都不一樣。
所以這篇比較適合把它看成一個 case study,不是萬用模板。
我現在從這個案例裡最相信的幾條規則
- 先分清資料角色,再談 retrieval
- CV 像證據池,rubric 像規則本
- evidence pack 要刻意控瘦
- metadata 欄位不是裝飾,它們在定義檢索邊界
- 很多模型問題,其實是 evidence 邊界問題
- production RAG 會不會穩,常常不是看模型有多強,而是看 evidence pipeline 有沒有被設計好
這整套系列最後想留下什麼
我最想留下的,可能不是某個單一工具結論,而是這個感覺:
RAG 真正難的地方,常常不是 embedding、不是模型、也不是向量資料庫本身,而是你有沒有把 evidence 的角色、邊界、顆粒度與流向想清楚。
當這些東西清楚了,系統會突然從「很像魔法」變成「可以 debug 的工程」。