我讓 Gemini 認蟲但不准它推薦商品:法規怎麼決定 AI 產品的架構,而不是技術
直接回答
讓 AI 產品不講出違法的話,最有效的做法不是把規則寫進 prompt,是把它沒有能力講的東西從它的職責裡拿掉。我的辨識工具裡模型只負責兩件事,判斷是哪一種蟲、寫一句好笑的話,商品名稱、許可證字號、處理建議全部由伺服器端的對照表決定,prompt 裡一個商品名都不出現。再加兩道保險:模型寫的每一句話送出前過禁用詞掃描,命中就整句換掉;辨識信心度低於 60 分完全不推薦任何商品。
做一個 AI 辨識工具,接上環境用藥類的商品建議。整件事裡最大的風險不是模型認不認得出蟲,是它會不會講出一句違法的話。
環境用藥管理法對逾越登記內容的罰則是 6 萬到 30 萬元,而且可以撤照、勒令停業。
—
先說清楚界線在哪,因為這決定了整個架構。
環境用藥廣告有一條官方函釋的界線:只列品名、圖案、價格、廠商資料,不涉及效能、使用方式、製法、安全性,可以不視為廣告。碰到任何一項,整套規定上身。
而我做的東西會說「你拍到的是這種蟲,這幾支商品登記可以用在牠身上」。那是效能宣稱,百分之百落在廣告的範圍裡。
所以問題不是做完之後加什麼免責聲明,是這個東西要怎麼蓋。
—
我第一個想到的做法是把規則寫進 prompt。這是錯的。
prompt 是機率不是保證。模型每次生成都會換一種說法,而你事前看不到它這次會寫什麼。環境用藥廣告的禁用詞分四款,其中誇張安全性包含環保配方、絕對安全、人畜無害、無毒性、安心使用,誇張效能包含立即見效、澈底殺滅、完全消滅、根除、保證。
模型只要寫出一句「這個噴下去一定死」,就構成誇張效能。而它有非常多種方式可以寫出那個意思。
讓 AI 不講違法的話,不是把規則寫進 prompt,是讓它沒有能力講。商品名稱與效能敘述不進 prompt,模型就不可能生成商品建議。這是結構問題不是提示問題。
—
最後的架構只有一句話:模型只負責認,不負責建議。
模型的職責被砍到只剩兩件事,判斷是哪一種蟲、寫一句好笑的判決。它的 prompt 裡一個商品名都沒有。
商品名稱、許可證字號、成分、急迫度、鑑別特徵、處理建議,全部放在伺服器端的兩個資料檔裡。前端顯示什麼商品,是伺服器拿辨識出來的類別去查表決定的。
這樣一來,模型再怎麼發揮都碰不到受管制的那一段。而那張表我只要人工檢查一次,之後就長期安全。
—
對照表本身有一條規矩:每一支商品都必須有「我實際看過許可證或商品標示」的來源,而且來源要寫在資料檔的欄位裡。
這條規矩擋掉了不少東西。有一支熱賣商品,官網不同素材上的字號寫法不一致,一邊寫某某防蟲字、一邊寫某某製字,查詢系統又查不到。那一支我整支排除在對照表外面,寧可少推一個商品。
另一個常見陷阱是商品頁寫得比許可證寬。許可證登記的防治性能只有蟑螂跟螞蟻,但商品頁的行銷文案會多寫幾種蟲。照抄商品頁就是逾越登記內容,要對的是許可證不是文案。
我抓商品圖的時候也踩到同一個坑。用「面積最大的圖」去挑,抓到的是商品描述的長圖,那張圖上印著一個誇張效能的百分比宣稱。改成只認商品相簿裡接近方形的那幾張才避開。
—
除了對照表,還有兩道保險。
第二道是禁用詞掃描。我把法規列舉的四款禁用詞抄成一個清單,模型寫的每一句話送給使用者之前掃一次。命中就整句換成安全的預設句,不做局部塗改,因為挖掉違規詞再重組容易留下語意殘骸。同時記錄這次是被哪個詞攔下來的,方便事後回頭調 prompt。
第三道是信心度門檻。辨識信心度低於 60 分,完全不推薦任何商品,只請使用者靠近一點重拍。理由很簡單:認錯物種又推錯處理方式,比誠實說認不出來嚴重得多。
三道保險:受管制內容寫死在伺服器端對照表,模型碰不到;模型輸出過禁用詞掃描,命中整句換掉;辨識信心度低於 60 分完全不推薦商品。
還有第四件事,它不是保險而是立場:辨識到益蟲的時候,工具會直接說這隻不用打,而且一支商品都不推。願意叫使用者不要買東西,比推銷更能取信於人,而且它讓公開頁少一段廣告,法規上更乾淨。
—
技術上有一個坑值得單獨講,因為它會讓整支 API 掛掉而且錯誤訊息完全誤導。
我用的是 Gemini 2.5 Flash,要求它回 JSON。第一版上線後每一次呼叫都回 502,訊息是 JSON 解析失敗。
原因是這個模型預設會先思考一輪。實測它會花 270 到 370 個 token 在思考上,而我把 maxOutputTokens 設成 400。思考加上輸出超過上限,回來的 JSON 被截斷,解析當然失敗。
把 thinkingConfig 的 thinkingBudget 設成 0 之後,同一組測試圖片的回應時間從 6.0 秒降到 2.2 秒,辨識正確率沒有任何變化。
Gemini 2.5 Flash 預設開啟思考,實測吃掉 270 到 370 個 token。maxOutputTokens 設太小會讓 JSON 被截斷而解析失敗。關掉思考後同組測試從 6.0 秒降到 2.2 秒,正確率不變。
—
還有一個坑是 prompt 改寫造成的,而且它藏了一整天。
我後來把辨識從「大類」升級成「物種」,重寫了 prompt。新的 prompt 裡有一欄叫 verdict 是判決句,另一欄叫 roast 是吐槽句,我寫著「roast 只有在不是蟲的時候才寫」。
模型就理解成 verdict 是給蟲用的。結果只要辨識出「不是蟲」,verdict 就永遠是空的,畫面上出現一個空的黃色方框。我連續呼叫 4 次確認,4 次都是空的。
修的方式是三層:prompt 明講這一欄不管是不是蟲都一定要寫、伺服器端加保底空的就用另一欄頂上、畫面上空的就不要畫那個框。
這個問題不是任何自動檢查抓到的,是我打開截圖用眼睛看到的。所以我後來把「有邊框或底色卻沒有內容的框」也加成一項自動檢查。
—
學到的是:AI 產品的合規設計,決定架構的是法規不是技術。
先問這個頁面在法規上算什麼,再決定模型可以碰哪些東西。把受管制的內容從模型職責裡整個拿掉,比在 prompt 裡寫十條規則可靠得多,因為前者是結構,後者是機率。