Skip to content
White's Tech Notes
Go back

要 LLM 比對兩件事,得先讓它分別寫下來

AI AgentsEdit page

問題

給一個 AI 角色做的即時照片產線,加了一道「送出前打開圖看一眼,跟情境對不對得上」的驗收。判準寫得很清楚:

判準只有一條:這張照片會不會讓看的人得出錯誤的結論。
地點不是該在的地點、身上穿的跟該穿的差很多、畫面裡的事跟她說在做的事對不上
——這幾種要退。

回這幾個欄位:
  seen: 用中文寫你在這張照片裡實際看到什麼
  ok: true 表示可以送出去,false 表示要重拍
  reason: ok 為 false 時寫哪裡對不上

拿一張已知拍錯的照片去測——角色設定上她在辦公室上班,圖畫成了她家臥室——驗收回 ok: true。

而它寫的 seen 是對的:

室內書桌前自拍,窗邊有多肉植物盆栽,桌上有筆電、一杯珍珠奶茶、
化妝用的眼影盤和刷具。她頭髮隨意綁成丸子頭……

盆栽、化妝盤、飲料,全部看到了。它就是沒說這裡是誰家。

原因

情境那段寫的是「上班,整理明天要交的簡報」。模型讀到「整理簡報」,看到畫面裡有筆電和簡報,判定「她正在整理簡報」——這個判斷完全正確,而且完全沒有幫助。

沒有人問它她人在哪。

證據在同一次實測的對照組:把情境改成「19:30 在家」,同一張圖它退件了,理由是「窗外是明亮日光,但情境是晚上 19:30,時間對不上」。

它對時間敏感得不得了,對地點視而不見。差別不在能力——地點的線索(居家窗簾、化妝品收納盒)它明明都寫進 seen 了。差別在於時間是它被要求交出的東西,地點不是。ok 這個欄位讓它可以挑一個最好回答的維度來回答,然後就收工。

解法

把要比對的兩端各自變成一個非答不可的欄位,而且排在結論前面:

先回答她人在哪,再回答對不對。
活動本身就決定了地點:上班在辦公室不在家、通勤在路上或車廂裡、
午休在店裡、健身在健身房、下班回家之後才在家。

回這幾個欄位(照順序想):
  seen: 你在這張照片裡實際看到什麼
  place_seen: 這張照片看起來在哪裡拍的。
              看家具、牆面、地板、窗外,不要看她在做什麼。
  place_expected: 照那段情境,她這一刻應該在哪裡。
  ok: 這兩個地方是不是同一個地方,其餘該對的也都對得上。
  reason: ok 為 false 時寫哪裡對不上

同一張圖,同一個模型:

ok     False
seen   她自己的房間/套房書桌:……窗台有幾盆小盆栽,背景是居家臥室風格的牆面和窗簾
reason 場景是家裡書桌(窗台盆栽、居家窗簾、化妝盤),不是辦公室,
       跟「上班整理簡報」對不上

情境換成「晚上在家」則照樣放行——不是變成一個永遠說不的東西。

place_seen 那句「看家具、牆面、地板、窗外,不要看她在做什麼」是關鍵的一半。少了它,模型會從「她在打簡報」推回「所以在辦公室」,兩個欄位就變成同一個答案的兩次複述,比對永遠成立。

關鍵洞察

「A 跟 B 對不對得上」是一個讓模型可以合法閃避的問題。 它會挑 A 跟 B 之間最容易連起來的那條線回答你,而那條線通常不是你在擔心的那條。

要它比對兩件事,就讓它先分別寫下這兩件事,再下結論——欄位順序就是思考順序,結論欄放最後。先下結論再找理由,跟先寫下事實再比對,是兩種準確度。

同一個形狀的兩個推論:

  • 每一個判準都要有自己的欄位。 判準只活在 system prompt 的散文裡、輸出只有一個 ok,等於讓模型自己決定這次要驗哪一條。它會選最好答的那條。
  • 要模型觀察的東西,要指定它看什麼、不看什麼。 「這是在哪裡拍的」會被它用劇情回答;「看家具、牆面、窗外,不要看她在做什麼」才會被它用畫面回答。

還有一條跟工具權限有關的:驗收要真的打開檔案時,沒給讀檔權限的失敗是靜默的。模型打不開圖,就照著你給的期待複述一遍然後回 ok——那比沒有這道驗收更糟,因為它看起來像驗過了。這種呼叫一定要在程式碼裡斷言權限有傳(我補了一條測試專門釘 allow_read is True)。



Previous Post
ffmpeg -loop 1 的預設輸入幀率是 25,zoompan 的 fps 救不回來
Next Post
ffmpeg -shortest 會把輸出截到「較短」那條軌,不是「對齊」