覆盤:做這個 AI 測試用例設計助手,我踩過的坑和 8 個關鍵決策

作者:測試的雞腿
日期:2026年3月20日 上午11:00
來源:WeChat 原文

整理版優先睇

速讀 5 個重點 高亮

工程設計比模型強弱更重要:AI測試用例助手嘅8個關鍵決策與6個坑

整理版摘要

呢篇文章係作者做完一套AI測試用例設計助手之後嘅工程覆盤。作者用LangGraph StateGraph嚟做多步驟工作流,目標係解決LLM項目常見問題:格式唔穩定、速度慢、質量不可控、成本失控、難迭代。佢最大感受係模型能力只係上限,工程設計先決定下限。

文章詳細講咗8個關鍵決策,包括揀StateGraph而唔係純Agent、用Send API做動態並行、雙層狀態設計、自定義reducer處理並行追加同清空重試衝突、用硬編碼閾值迴流做質量控制、重試時注入改進建議同降低temperature、按節點分配模型以平衡成本同效果、全鏈路用Pydantic結構化輸出兼做容錯兜底。每個決策都有明確取捨同實戰理由。

另外佢列出6個踩過嘅坑:當生成係終點、當並行係純性能優化、Prompt越長越好、強制每次RAG檢索、只睇單次效果唔睇分佈、導出放到最後先考慮。最後佢建議由0開始嘅路線:先做最小閉環,再補並行、質量、穩定,最後先上增強功能。

  • 模型能力只係上限,工程設計決定下限;LLM項目失敗通常唔係生成唔到,而係格式、速度、質量、成本、可迭代性出事。
  • LangGraph StateGraph而唔係Agent,因為需要顯式可控嘅節點+狀態+路由,質量閉環嘅閾值迴流必須硬控制。
  • Send API做動態並行,實測3-5x提速,但要處理狀態合併複雜度,自定義reducer解決並行追加同清空重試衝突。
  • 質量控制靠硬編碼閾值迴流(0.85),唔信模型自評;重試時注入改進建議、降低temperature,避免盲目重跑。
  • 全鏈路用Pydantic結構化輸出,每個節點似後端接口,可測試可觀測;導出格式越早確定越好,推動數據結構穩定。
整理重點

工程覆盤:點解模型強弱唔係最關鍵

作者做完呢套AI測試用例設計助手之後,最深刻體會係:模型能力只係上限,工程設計決定下限。LLM工作流項目常見失敗方式唔係「生成唔到」,而係格式唔穩、速度太慢、質量不可控、成本失控、難迭代。

整理重點

8個關鍵決策:取捨與實戰心得

第一個決策係揀LangGraph StateGraph而唔係純Agent。原因係流程多步驟、強依賴狀態、帶條件分支,仲要支持並行。StateGraph前期代碼量更大,但穩定性同可維護性明顯更強。第二個決策係用Send API做動態並行而唔係固定併發,實測提速3-5倍,但帶嚟狀態合併複雜度。

第三個決策係雙層狀態設計:全局狀態加Worker獨立上下文,避免並行互相污染。第四個決策係自定義reducer(add_or_reset_cases),解決並行追加同清空重試嘅衝突。作者踩過坑:以為設空List就係清空,但reducer合併語義下舊數據仲喺度。

第五個決策係質量控制用硬編碼閾值迴流(0.85),唔靠模型自評。第六個決策係重試時注入改善建議、降低temperature,令輸出更收斂。第七個決策係按節點分配模型</highlight>:強模型做方向性節點,性價比模型做批量生成,輕模型做去重。第八個決策係全鏈路用Pydantic結構化輸出,兼做容錯兜底。

  1. 1 LangGraph StateGraph,放棄自由度換取可控性
  2. 2 Send API動態並行,顯著提速但需處理狀態合併
  3. 3 雙層狀態隔離Worker上下文,全局狀態共享
  4. 4 自定義reducer解決並行追加與清空重試衝突
  5. 5 硬編碼閾值迴流,質量控制工程化
  6. 6 重試時帶改進建議同温度衰減,避免盲目重跑
  7. 7 按節點分配模型,平衡效果與成本
  8. 8 全鏈路Pydantic結構化輸出,方便測試與導出
整理重點

6個踩過嘅坑:直接收藏慳時間

作者分享咗6個實戰坑,值得做類似項目嘅朋友注意。第一個坑係將「生成」當成終點,無評審同迴流,輸出一定唔穩定。第二個坑係將「並行」當成純性能優化,唔處理reducer遲早出事。

  • 生成唔係終點,要加評審同迴流先穩定
  • 並行會改變狀態合併語義,一定要處理reducer
  • Prompt越長越易漂,能結構化就結構化
  • RAG唔好強制每次檢索,按需檢索兼摘要注入
  • 唔好只睇單次效果,要睇質量分數分佈、重試率、平均耗時
  • 導出格式越早做越好,會推動數據結構穩定
整理重點

由0開始嘅建議路線:先可用,再好用,最後更強

作者建議如果由0開始,應該先做最小閉環:parse_requirement → generate_cases → export_json。然後補並行:split_features + Send API。再補質量:quality_review + 迴流。再補穩定:Pydantic結構化加容錯。最後先上增強:RAG、多模態、XMind、Excel。順序好重要:先可用,再好用,最後先係更強。

  1. 1 先做最小閉環:解析需求→生成用例→導出JSON
  2. 2 再補並行:拆分功能點加Send API
  3. 3 再補質量:質量評審加迴流機制
  4. 4 再補穩定Pydantic結構化與容錯
  5. 5 最後上增強RAG、多模態、多種導出格式
圖片

🔖「AI 測試用例設計助手|LangGraph 實戰系列」第 6 篇(完結篇)
前 5 篇我哋將核心模組逐個拆開講咗:架構、並行、品質閉環、多模型、RAG+多模態。
呢一篇我想做一次「工程復盤」:邊啲決策最關鍵、踩過啲咩坑、如果重新做一次我會點樣做。


呢篇比較偏經驗總結,適合你喺團隊入面重複用,亦適合準備做 LLM 工作流項目嘅同學參考。


═════════

一、先講結論:LLM 項目能唔能夠落地,決定因素通常唔係「模型勁唔勁」

我做完成套系統最大嘅感受係:
模型能力只係上限,工程設計決定下限。


LLM 工作流項目常見嘅失敗方式唔係「生成唔到」,而係:


  • 格式唔穩定:匯出/儲存全部係補丁
  • 速度太慢:用戶等唔切
  • 品質唔受控:一係全靠運氣,一係無止境重試
  • 成本失控:用量一多就爆
  • 無法迭代:每次改一個位就要改一大堆 prompt/代碼

下面呢 8 個決策就係我為咗解決呢啲問題而做出嘅取捨。


═════════

二、關鍵決策 1:揀 LangGraph StateGraph,唔係純 Agent

圖片

我選擇:LangGraph StateGraph


原因:

  • 流程係多步驟、強依賴狀態、有條件分支、仲要支援並行
  • 我需要顯式可控嘅「節點 + 狀態 + 路由」,而唔係畀 Agent 自由發揮
  • 品質閉環入面嘅「閾值迴流」必須硬控制,唔可以畀模型繞過

Trade-off:


  • StateGraph 前期碼量較大(你要將每個節點工程化)
  • 但係一旦搞掂,穩定性同可維護性會明顯更強

一句講曬:Agent 似「一個人自由發揮」,StateGraph 似「生產線工廠」。


═════════

三、關鍵決策 2:用 Send API 做動態並行,而唔係固定併發

我選擇:Send API 動態 Worker


原因:

  • 功能點數量係執行時先確定,無得預先寫死 N 個節點
  • 並行係提速最有效嘅方法之一:功能點越多,提速越明顯

Trade-off:

  • 並行帶嚟狀態合併複雜度(下面嘅 reducer 坑就係咁嚟)
  • 但收益巨大:實測 3-5x 提速,用戶體驗明顯提升

═════════

四、關鍵決策 3:雙層狀態設計(Global State + Worker State)

我選擇:全局狀態 + Worker 獨立上下文


原因:

  • Worker 並行時必須隔離上下文,否則容易互相污染
  • 全局狀態用嚟承載「跨節點共享嘅數據」,Worker 狀態只關心「單功能點任務」

Trade-off:

  • 狀態模型定義更加複雜,要諗清楚每個欄位屬於邊一層
  • 但換嚟嘅係並行可控、邏輯清晰、容易除錯同擴展

═════════

五、關鍵決策 4:自定義 reducer,解決「並行追加 + 清空重試」嘅衝突

我選擇:自定義 reducer(add_or_reset_cases)


原因:

  • 默認列表合併(operator.add)只會追加,無法表達「清空」
  • 品質迴流重試時需要先清空 raw_cases,再接收新一輪輸出

我踩過嘅坑:

  • 以為將 raw_cases 設為 [] 就係清空
  • 實際上喺 reducer 合併語義下,「空列表」可能只係「乜都唔加」,舊數據仲喺度

Trade-off:

  • 自定義 reducer 需要一啲實現成本
  • 但呢個係並行系統嘅地基,冇佢重試一定會出問題

═════════

六、關鍵決策 5:品質控制用「閾值 + 迴流」,而唔係畀模型自我判斷

我選擇:硬編碼閾值迴流(QUALITY_THRESHOLD=0.85


原因:

  • 「畀模型自評合唔合格」好唔可靠,亦好易畀 prompt 繞過
  • 品質閉環必須工程化成明確規則:score 唔夠就回流,而且最多重試 3 次

Trade-off:

  • 閾值要調校參數,唔同業務可能唔一樣
  • 但佢將品質控制由「玄學」變成「可調嘅工程參數」

═════════

七、關鍵決策 6:重試唔係重跑——改進建議注入 + 温度衰減

我選擇:帶回饋嘅迭代最佳化

  • 把 improvement_suggestions 注入重試上下文
  • 將上一輪用例 existing_cases 作為參考(強調唔好照抄)
  • 降低 temperature(0.5 → 0.3),令輸出更加收斂

原因:

  • 盲目重試只會增加成本,並唔保證會變好
  • 品質閉環嘅本質係「修訂」,而唔係「再創作」

Trade-off:

  • Prompt 設計更加複雜
  • 但重試次數更少、收斂更快、輸出更穩定

═════════

八、關鍵決策 7:多模型協同——將算力用喺最值錢嘅節點上

我選擇:按節點分配模型

  • 需求解析/拆分/評審:用強模型
  • 批量生成:用性價比模型
  • 去重:用輕模型

原因:

  • 成本主要來自「高頻調用節點」(generate_cases)
  • 效果上限主要來自「方向性節點」(parse/評審)

Trade-off:

  • 模型調度邏輯更加複雜
  • 但可以做到「效果同成本同時可控」,適合生產化長期運行

═════════

九、關鍵決策 8:全鏈路結構化輸出(Pydantic)+ 容錯兜底

我選擇:Pydantic + with_structured_output()


原因:

  • 只要產物要匯出 Excel/XMind、要做追溯矩陣,你就必須要有穩定結構
  • 結構化輸出令每個節點都好似一個「後端接口」,可測試、可觀測、可重用

我做嘅兜底:

  • 模型直接返回陣列時,自動包裝成 {cases: [...]}(model_validator)
  • 欄位類型漂移(str ↔ list)時,模型層允許、匯出層統一規範化

Trade-off:

  • 前期要花時間定義數據模型同校驗邏輯
  • 但後期你會省翻大量「解析補丁」嘅時間

═════════

十、我踩過嘅 6 個坑(如果你要做類似項目,建議直接收藏)

圖片


坑 1:將「生成」當成終點

冇評審同迴流,輸出就係唔穩定嘅。


坑 2:將「並行」當成純效能最佳化

並行會直接改變狀態合併語義,唔處理 reducer 遲早出事。


坑 3:Prompt 越長越好

上下文越長越容易漂。能夠結構化就結構化,能夠摘要就摘要。


坑 4:RAG 強制每次檢索

成本爆炸 + 噪音增多。正確做法係按需檢索、結果摘要後注入。


坑 5:淨係睇單次效果,唔睇分佈

你需要關注嘅係:品質 score 嘅分佈、重試率、平均需時、去重率。


坑 6:匯出放到最後先諗

匯出格式一旦確定,反過來會推動你將數據結構整穩定。越早做越好。


═════════

十一、如果叫我由 0 再做一次,我會點樣規劃(建議路線)

  1. 先做最小閉環:parse_requirement → generate_cases → export_json  
  2. 再補並行:split_features + Send API  
  3. 再補品質:quality_review + 迴流  
  4. 再補穩定:Pydantic 結構化 + 容錯  
  5. 最後先上加強:RAG / 多模態 / XMind / Excel

圖片

順序好重要:先可用,再好用,最後先係「更強」。


═════════

十二、系列收尾:呢套架構嘅核心價值係咩?

我對呢個項目嘅定位一直好明確:


將測試設計方法論工程化成可重現、可追溯嘅 AI 生產線。


佢唔係為咗「取代測試」,而係為咗:

  • 將經驗固化做流程
  • 將品質控制變成規則
  • 將交付效率變成可量度指標

如果你喺團隊入面推進 AI 測試落地,我建議你優先做兩件事:

  1. 將品質閉環做出嚟
  2. 將結構化輸出做紮實

剩低嘅(RAG、多模態、匯出格式)都係可以迭代加強嘅。


圖片

═════════

完結彩蛋:你可以點樣繼續擴展?

  • 加「測試策略庫」:按業務類型自動選擇覆蓋維度
  • 加「接口文檔解析」:自動生成接口測試用例 + 參數邊界
  • 加「自動化生成」:將可自動化用例直接輸出到 pytest/playwright 模板
  • 加「需求追溯矩陣」更細粒度:Feature → Rule → Case → Automation

═════════

如果你希望我將呢套架構代碼化成一套可運行嘅開源模板(包括 Graph、節點、模型、匯出器),都歡迎留言交流。

圖片

🔖「AI 測試用例設計助手|LangGraph 實戰系列」第 6 篇(完結篇)
前 5 篇我們把核心模塊都拆開講了一遍:架構、並行、質量閉環、多模型、RAG+多模態。
這一篇我想做一次“工程覆盤”:哪些決策最關鍵、踩過哪些坑、如果重做一次我會怎麼做。


這篇更偏經驗總結,適合你在團隊內部複用、也適合準備做 LLM 工作流項目的同學參考。


═════════

一、先給結論:LLM 項目能不能落地,決定因素通常不是“模型強不強”

我做完這套系統最大的感受是:
模型能力只是上限,工程設計決定下限。


LLM 工作流項目常見的失敗方式不是“生成不出來”,而是:


  • 格式不穩:導出/落庫全是補丁
  • 速度太慢:用戶等不下去
  • 質量不可控:要麼全靠運氣,要麼無休止重試
  • 成本失控:調用量一上來就炸
  • 無法迭代:每改一個點要改一堆 prompt/代碼

下面 8 個決策就是我為了解決這些問題做出來的取捨。


═════════

二、關鍵決策 1:選 LangGraph StateGraph,而不是純 Agent

圖片

我選擇:LangGraph StateGraph


原因:

  • 流程是多步驟、強依賴狀態、帶條件分支、還要支持並行
  • 我需要顯式可控的“節點 + 狀態 + 路由”,而不是讓 Agent 自由發散
  • 質量閉環裏的“閾值迴流”必須硬控制,不能被模型繞過

Trade-off:


  • StateGraph 前期代碼量更大(你要把每個節點工程化)
  • 但一旦搭好,穩定性與可維護性會明顯更強

一句話:Agent 更像“一個人自由發揮”,StateGraph 更像“流水線工廠”。


═════════

三、關鍵決策 2:用 Send API 做動態並行,而不是固定併發

我選擇:Send API 動態 Worker


原因:

  • 功能點數量是運行時才確定的,無法預先寫死 N 個節點
  • 並行是提速最有效的方式之一:功能點越多,提速越明顯

Trade-off:

  • 並行帶來狀態合併複雜度(下面的 reducer 坑就是這麼來的)
  • 但收益巨大:實測 3-5x 提速,用戶體驗提升明顯

═════════

四、關鍵決策 3:雙層狀態設計(Global State + Worker State)

我選擇:全局狀態 + Worker 獨立上下文


原因:

  • Worker 並行時必須隔離上下文,否則容易互相污染
  • 全局狀態用來承載“跨節點共享的數據”,Worker 狀態只關心“單功能點任務”

Trade-off:

  • 狀態模型定義更復雜,要想清楚每個字段屬於哪一層
  • 但換來的是並行可控、邏輯清晰、便於調試與擴展

═════════

五、關鍵決策 4:自定義 reducer,解決“並行追加 + 清空重試”的衝突

我選擇:自定義 reducer(add_or_reset_cases)


原因:

  • 默認列表合併(operator.add)只會追加,無法表達“清空”
  • 質量回流重試時需要先清空 raw_cases,再接收新一輪輸出

我踩過的坑:

  • 以為把 raw_cases 設為 [] 就是清空
  • 實際上在 reducer 合併語義下,“空列表”可能只是“什麼都不加”,舊數據還在

Trade-off:

  • 自定義 reducer 需要一些實現成本
  • 但這是並行系統的地基,沒它重試必出問題

═════════

六、關鍵決策 5:質量控制用“閾值 + 迴流”,而不是讓模型自我判斷

我選擇:硬編碼閾值迴流(QUALITY_THRESHOLD=0.85


原因:

  • “讓模型自評是否合格”非常不可靠,也很容易被 prompt 繞過
  • 質量閉環必須工程化成明確規則:score 不夠就回流,且最多重試 3 次

Trade-off:

  • 閾值需要調參,不同業務可能不一樣
  • 但它把質量控制從“玄學”變成“可調的工程參數”

═════════

七、關鍵決策 6:重試不是重跑——改進建議注入 + 温度衰減

我選擇:帶反饋的迭代優化

  • 把 improvement_suggestions 注入重試上下文
  • 把上一輪用例 existing_cases 作為參考(強調不要照抄)
  • 降低 temperature(0.5 → 0.3),讓輸出更收斂

原因:

  • 盲目重試只會增加成本,並不能保證變好
  • 質量閉環的本質是“修訂”,而不是“再創作”

Trade-off:

  • Prompt 設計更復雜
  • 但重試次數更少、收斂更快、輸出更穩定

═════════

八、關鍵決策 7:多模型協同——把算力用在最值錢的節點上

我選擇:按節點分配模型

  • 需求解析/拆分/評審:用強模型
  • 批量生成:用性價比模型
  • 去重:用輕模型

原因:

  • 成本主要來自“高頻調用節點”(generate_cases)
  • 效果上限主要來自“方向性節點”(parse/評審)

Trade-off:

  • 模型調度邏輯更復雜
  • 但可以做到“效果與成本同時可控”,適合生產化長期運行

═════════

九、關鍵決策 8:全鏈路結構化輸出(Pydantic)+ 容錯兜底

我選擇:Pydantic + with_structured_output()


原因:

  • 只要產物要導出 Excel/XMind、要做追溯矩陣,你就必須要穩定結構
  • 結構化輸出讓每個節點都像一個“後端接口”,可測試、可觀測、可複用

我做的兜底:

  • 模型直接返回數組時,自動包裝成 {cases: [...]}(model_validator)
  • 字段類型漂移(str ↔ list)時,模型層允許、導出層統一規範化

Trade-off:

  • 前期要花時間定義數據模型與校驗邏輯
  • 但後期你會省下大量“解析補丁”的時間

═════════

十、我踩過的 6 個坑(如果你要做類似項目,建議直接收藏)

圖片


坑 1:把“生成”當成終點

沒有評審與迴流,輸出就是不穩定的。


坑 2:把“並行”當成純性能優化

並行會直接改變狀態合併語義,不處理 reducer 遲早出事。


坑 3:Prompt 越長越好

上下文越長越容易漂。能結構化就結構化,能摘要就摘要。


坑 4:RAG 強制每次檢索

成本爆炸 + 噪聲增多。正確姿勢是按需檢索、結果摘要後注入。


坑 5:只看單次效果,不看分佈

你需要關注的是:質量 score 的分佈、重試率、平均耗時、去重率。


坑 6:導出放到最後才考慮

導出格式一旦確定,反過來會推動你把數據結構做穩定。越早做越好。


═════════

十一、如果讓我從 0 再做一次,我會怎麼規劃(建議路線)

  1. 先做最小閉環:parse_requirement → generate_cases → export_json  
  2. 再補並行:split_features + Send API  
  3. 再補質量:quality_review + 迴流  
  4. 再補穩定:Pydantic 結構化 + 容錯  
  5. 最後再上增強:RAG / 多模態 / XMind / Excel

圖片

順序很重要:先可用,再好用,最後才是“更強”。


═════════

十二、系列收尾:這套架構的核心價值是什麼?

我對這個項目的定位一直很明確:


把測試設計方法論工程化成可復現、可追溯的 AI 流水線。


它不是為了“替代測試”,而是為了:

  • 把經驗固化成流程
  • 把質量控制變成規則
  • 把交付效率變成可度量指標

如果你在團隊裏推進 AI 測試落地,我建議你優先做兩件事:

  1. 把質量閉環做出來
  2. 把結構化輸出做紮實

剩下的(RAG、多模態、導出格式)都是可迭代增強。


圖片

═════════

完結綵蛋:你可以怎麼繼續擴展?

  • 加“測試策略庫”:按業務類型自動選擇覆蓋維度
  • 加“接口文檔解析”:自動生成接口測試用例 + 參數邊界
  • 加“自動化生成”:把可自動化用例直接輸出到 pytest/playwright 模板
  • 加“需求追溯矩陣”更細粒度:Feature → Rule → Case → Automation

═════════

如果你希望我把這套架構代碼化成一套可運行的開源模板(含 Graph、節點、模型、導出器),也歡迎留言交流。