跳到主要內容
AI News HubLIVE
站內改寫3 分鐘閱讀

從區域性修補到可量化提升:利用 ai_extract 與 MLflow Prompt Registry 改進文件抽取準確率

文章摘要

Databricks 部落格分享了一個從合作方訂單文件中抽取約 40 個結構化欄位的專案經驗。團隊發現,針對單個欄位的區域性修補可能導致整體錯誤率上升 9%。他們透過將欄位級規則放入 schema、文件級邏輯放入全域性提示詞、利用 precision mode 處理複雜結構、藉助 citations 診斷錯誤,並使用 MLflow Prompt Registry 版本化提示詞和 schema,在人工稽核的基準資料上評估候選版本,從而建立了從改進提案到生產部署的可重複、可度量的工作流。Genie Code 可自動化這一流程的核心環節。

從區域性修補到可量化提升:利用 ai_extract 與 MLflow Prompt Registry 改進文件抽取準確率
回報錯誤

更正管道尚未開通,可先複製下方文章資訊留存。

查看更正說明
直接讀正文

在文件抽取專案中,團隊經常從一個看似簡單的迴圈開始:發現某個欄位抽取錯誤,調整提示詞或 schema,重新執行該文件,然後檢查結果。但隨著欄位數量和文件格式成倍增加,這種方法很快變得不可靠。一個改動可能修復了某個欄位,卻在其他地方引入迴歸;可能對一種版式有效,卻在另一種版式上失敗;甚至可能僅僅因為 LLM 執行的正常波動而顯得有所改善。

Databricks 部落格分享了一個近期專案的經驗。該專案需要從合作方提交的訂單文件中抽取大約 40 個結構化欄位,這些文件涵蓋數十種 PDF 版式。稽核人員會在抽取結果進入下游之前進行修正和批准,從而為評估提供了人工稽核的基準資料。團隊面臨的核心挑戰並非讓 ai_extract 返回欄位,而是在不降低系統整體效能的前提下持續改進抽取質量。例如,修訂號欄位有時會返回“ORIGINAL”等狀態詞,而不是修訂號或空值。一個小的 schema 改動將該欄位的錯誤減少了大約一半,但所有欄位的總抽取錯誤卻增加了 9%。這個教訓很明確:改善單個欄位並不一定改善整個抽取系統。

為了解決這個問題,團隊圍繞三個問題構建了工作流:應該改什麼?如何版本化?需要多少證據才能推廣?首先,要選對 ai_extract 的調節槓桿。ai_extract 接收三個輸入:解析後的文件、JSON schema 和可選的全域性指令。schema 定義輸出欄位和欄位級抽取規則,全域性指令則提供適用於整個文件的指導。團隊建議:如果規則定義的是單個欄位,就放入 schema;如果規則定義的是如何理解文件,就放入提示詞。例如,保留前導零、排除狀態詞、在第一個無效字元處停止識別符號、值不存在時返回 null,這些欄位級規則應放在 schema 描述中。而文件或領域上下文、來源優先順序(如頁首優先於頁尾)、跨欄位一致性規則、合併行的指令以及禁止使用的文件區域,則適合放在全域性提示詞中。

其次,並非所有轉換都需要 LLM。大小寫轉換、分隔符移除、補零以及類似將“TELEVISION”對映為“TV”的操作,應儘可能用 SQL 或其他確定性轉換處理。原則是:用模型解釋文件,用程式碼規範化輸出。當文件結構複雜時,比如大型 schema、重複行專案、複雜表格或多頁佈局,ai_extract 2.1 版本提供的 precision mode 可以發揮作用。在提示詞和 schema 保持不變的情況下,precision mode 通常對重複結構幫助最大,並能減少過度抽取,即模型在正確答案應為空時卻返回了值。診斷失敗原因很重要:如果模型誤解了欄位含義,應修改提示詞或 schema;如果模型理解欄位但難以處理資料結構,則應測試 precision mode。

第三,利用 citations 理解欄位為何出錯。citations 提供欄位級邊界框,可對映回源文件中的元素跨度,幫助區分兩類錯誤:抽取錯誤(模型選錯了區域、誤解了欄位或返回了源文件不支援的值)和標註分歧(模型從正確位置抽取,但預期答案遵循不同的稽核慣例)。這兩類問題需要不同的修復方式。抽取錯誤可能需要修改 schema 或提示詞,而標註分歧應透過明確定義稽核指南中的預期慣例來解決。置信度分數可以作為排序訊號,例如優先稽核低置信度欄位,但不應作為自動質量門檻,因為高置信度結果仍可能出錯。

接下來是版本化提示詞和 schema。將提示詞和 schema 硬編碼在筆記本中會帶來摩擦:小的措辭改動需要程式碼部署,歷史版本難以重建,也沒有證據表明新版本優於舊版本。MLflow Prompt Registry 允許將提示詞和 schema 作為獨立於流水線程式碼的可配置、可複用定義進行版本管理。重要的是要同時版本化提示詞和 schema,因為欄位描述對抽取的影響不亞於全域性指令。如果只版本化提示詞,那麼一半的抽取邏輯仍以未跟蹤的程式碼變更形式存在。

一個簡單的別名策略可以使用 @prod 表示當前批准的版本,@candidate 表示正在評估的版本,@scr_* 表示並行比較的實驗版本。流水線透過別名載入活動版本,解析後的提示詞和 schema 再傳遞給 ai_extract。當候選版本獲批時,可以透過 mlflow.genai.set_prompt_alias 將 @prod 移動到新版本,流水線在下一次執行時自動解析,無需修改程式碼。要回滾,只需將兩個別名恢復到之前記錄的版本,底層版本仍保留在登錄檔中。這樣就將抽取配置與執行它的程式碼分離開來。

最後,在推廣之前進行評估。團隊將稽核人員的批准結果組裝成可複用的評估資料集,並與源文件和預測結果配對,形成基準檢視。候選版本需要在固定的人工稽核基準上進行對比,同時追蹤準確率、覆蓋率和執行間波動。這確保了改進是系統性的,而不是區域性的。整個工作流形成了一條從抽取改進提案到生產部署的可重複路徑,並有證據表明改動改善了整個系統。

值得注意的是,團隊不必獨自實現所有這些步驟。Genie Code for document processing 可以構建 Lakeflow 作業(包括 ai_parse_document、ai_classify 以及帶 citations 和置信度分數的 ai_extract),並自動化這一工作流的核心:對照標註表逐欄位評分,提出修復建議(通常是更精確的欄位描述)作為可稽核的差異,並在每次接受更改後重新執行評估,展示前後對比結果。例如,可以要求 Genie Code:“對照我的標註表評估抽取結果,告訴我哪些欄位最弱”,然後要求:“修訂號欄位的準確率可以提高。迭代改進 schema 和指令,重新執行評估,並展示前後對比。”理解基本原理仍然很重要,它有助於判斷 Genie Code 提出的更改、決定何時結果足夠好可以推廣,以及將工作流擴充套件到生產環境,例如在 MLflow Prompt Registry 中版本化提示詞和 schema。

展開要點與分析

文章情報

投資人進階

要點

  • 欄位級規則應寫入 schema 描述,文件級邏輯應放入全域性提示詞,避免將例外規則堆積在提示詞中。
  • precision mode 適用於重複行專案、複雜表格等結構性問題,而 citations 可區分抽取錯誤與標註分歧。
  • 使用 MLflow Prompt Registry 同時版本化提示詞和 schema,透過別名(如 @prod、@candidate)實現無程式碼部署與回滾。
  • 在固定的人工稽核基準上評估候選版本,追蹤準確率、覆蓋率和執行間波動,確保改進不引入迴歸。

要點與分析由自動化流程生成,可能有誤,請結合原始來源核實。