嘿 n8n 社群,
文件提取管線能漂亮地處理發票和履歷表。但在一個遊戲之夜,我們給我們的 AI 提供了看起來很簡單的東西,但完全搞崩了它:一張手寫的 Kniffel(Yahtzee)記分卡。
網格陷阱
目標:拍一張照片,找到名字上方有手寫星號(*)的玩家,提取他們的分數,計算 35 點獎勵(如果 top $\ge$ 63),加總,然後推送到 Sheets 和 Telegram。
看一下附加的照片:
對人類來說很明顯。但 LLM 幻覺出名字(「Ivan」變成「ban」),合併了欄位,搞砸了數學。
以下是空間資料為何會破壞 AI,以及我們用來修復它的提示架構:
打破「從左到右」的偏見
LLM 像讀書一樣讀取(從左到右,逐列)。記分卡要求相反的方式。為了停止「行洩露」跨越欄位,我們強制了物件陣列輸出([{player_name, sum_top, sum_bottom}])。這強制 AI 在移動到下一列之前完成讀取一個垂直欄。
確定性數學,零 LLM 判斷
我們已經知道我們使用的提取器在分類文件和提取結構化資料方面的可靠性令人難以置信,所以我們決定推進它的極限,測試它是否也能處理計算。大錯誤。LLM 是文本預測引擎,不是計算機。修復方案: 我們指示它只提取原始數字,並在下游使用純 JavaScript Code 節點來處理數學和條件獎勵。
明確的空狀態停止幻覺
玩家用破折號(-)表示空框。因為 LLM 無法將字符串破折號放入 Number schema,它就慌張地輸出 -1,破壞了我們的 JavaScript。添加嚴格的約束—「關鍵:如果一個儲存格是破折號或空的,您必須輸出 0」,立即修復了管線。
用標籤錨定眼睛
為了防止 AI 在欄位之間漂移,我們給了它視覺座標。我們指示它查看最左邊的列印標籤(例如「Dreierpasch」),沿著一條隱形的水平線跟踪到帶星號的欄,並只提取該儲存格。
一個誠實的警告
將數學轉移到 JS 保證了完美的邏輯,但手寫識別仍然取決於照片質量。如果您需要從雜亂的筆跡中獲得完美的資料,人工參與驗證仍然是上限。
如何執行它
我使用了 easybits 提取器,因為它本身支援 JSON schema 強制,無需與 HTTP 節點提示搏鬥。雲端和自託管都符合免費層級。
-
n8n 雲端: 在節點面板中搜尋
easybits。 -
自託管: 從社群節點安裝
@easybits/n8n-nodes-extractor。
歡迎反饋
我附加了原始影像。我非常好奇:當您透過目前的 OCR 或 LLM 設定執行這個精確影像時會發生什麼?您找到了從密集水平網格中提取垂直欄的更乾淨的方法嗎?
最好的祝福,
Felix
