:面向AI客服的系統(tǒng)提示詞優(yōu)化策略與迭代方法)
豆包是我們維護的一個客服型AI助手平時負(fù)責(zé)回答產(chǎn)品咨詢、處理售后問題、偶爾幫用戶做點簡單的日程安排。上個月我把它的系統(tǒng)提示詞從頭到尾重構(gòu)了一遍效果提升非常明顯答非所問少了語氣穩(wěn)了敏感內(nèi)容的拒答也自然了。這篇就把整個設(shè)計過程和踩過的坑整理出來給同樣在做提示詞工程的朋友一些參考。1. 豆包提示詞的第一原則先定交互邊界再寫角色人設(shè)很多人在寫系統(tǒng)提示詞的時候一上來就堆角色設(shè)定你是一個溫柔耐心的助手你知識淵博你善于傾聽。這些當(dāng)然沒錯但如果沒有先想清楚交互邊界后面所有設(shè)定都會變成空中樓閣。我給豆包重構(gòu)時做的第一件事不是寫人設(shè)而是畫邊界。1.1 先用一句話定義豆包絕對不能做什么系統(tǒng)提示詞的第一段我建議寫能力邊界而不是能力清單。能力清單是你能做什么邊界是你不能做什么。后者比前者重要得多。豆包的原始提示詞里寫的是你可以回答產(chǎn)品相關(guān)問題、協(xié)助處理訂單、提供使用建議。看起來沒問題但實際使用中出了不少岔子用戶問你覺得我該不該離職豆包會給出非常詳細的職業(yè)規(guī)劃建議用戶問這個藥能不能吃豆包會照著說明書念一遍還加上劑量建議。原因很簡單——邊界太寬了。重構(gòu)后我在提示詞最頂部加了一條硬規(guī)則豆包是某產(chǎn)品的官方客服助手只負(fù)責(zé)處理與產(chǎn)品使用、訂單、售后相關(guān)的事務(wù)。 對于以下類型的問題不提供專業(yè)建議只做引導(dǎo) - 醫(yī)療健康類問題引導(dǎo)用戶咨詢醫(yī)生 - 法律、投資、心理咨詢類問題引導(dǎo)用戶聯(lián)系專業(yè)機構(gòu) - 涉及第三方產(chǎn)品推薦的問題說明自己無法判斷寫完這條之后豆包的整體表現(xiàn)立刻收斂了很多。用戶問健康問題它會說這個問題我無法提供專業(yè)判斷建議您咨詢醫(yī)生而不是洋洋灑灑寫一堆。為什么先寫邊界因為LLM在開放式對話中天然傾向于有問必答如果不給邊界它會用自己的常識去補全任何領(lǐng)域的內(nèi)容。而邊界規(guī)則本質(zhì)上是給模型戴了一個緊箍咒讓它知道哪些領(lǐng)域?qū)幙缮僬f不能說錯。1.2 邊界規(guī)則要寫觸發(fā)條件標(biāo)準(zhǔn)動作單純的不要提供醫(yī)療建議這種寫法效果有限因為模型可能不知道什么時候算醫(yī)療建議。更有效的方式是給每個邊界配上觸發(fā)條件和標(biāo)準(zhǔn)動作。[邊界規(guī)則示例] 當(dāng)用戶問題涉及以下體征描述、用藥咨詢、疾病判斷時 - 觸發(fā)條件用戶提到不適癥狀、疾病名稱、藥物名稱、體檢指標(biāo) - 標(biāo)準(zhǔn)動作表示無法提供醫(yī)療判斷引導(dǎo)用戶咨詢專業(yè)醫(yī)生并主動關(guān)閉該話題這里的關(guān)鍵是主動關(guān)閉話題留白比強行轉(zhuǎn)回產(chǎn)品話題更安全。比如用戶問完藥效之后豆包如果緊接著說順便問一下您的訂單需要幫助嗎會顯得很生硬而且有種轉(zhuǎn)移話題的刻意感。實測下來自然結(jié)束的效果更好簡單說明無法提供建議停一下等用戶繼續(xù)提問。順帶說一下邊界規(guī)則不要寫太多條5到8條就夠。寫太多會擠占后面的角色和上下文空間而且模型在長上下文中對過量的禁止項記憶會衰減。重要的邊界放最前面次要的可以合并。2. 角色設(shè)定怎么寫才不人格分裂從性格錨點到語氣采樣邊界定好之后才輪到角色人設(shè)。豆包的人設(shè)經(jīng)歷了三次大改最開始是熱情貼心的智能助手后來改成嚴(yán)謹(jǐn)可靠的產(chǎn)品顧問最后定稿是靠譜的鄰家客服。這個變化背后的邏輯很值得聊。2.1 抽象形容詞是人格分裂的根源熱情貼心這種描述模型沒法執(zhí)行。同一個系統(tǒng)提示詞在不同會話里可能表現(xiàn)為過度熱情每句話都帶感嘆號或者平淡機械只會說請問還有什么可以幫您。原因是熱情這個詞在不同上下文中對應(yīng)的具體語言模式差異太大。我后來把角色設(shè)定改成了三層結(jié)構(gòu)[角色定位] 你是豆包某產(chǎn)品的官方客服助手。你的工作目標(biāo)是讓用戶快速解決問題同時感受到被認(rèn)真對待。 [性格錨點] - 穩(wěn)重而非冷淡語氣平和不夸張但會主動確認(rèn)用戶需求 - 專業(yè)而非說教給出明確答案不繞彎子但不說教 - 效率優(yōu)先能用一句話回答的不用三句話不額外推送信息 [語氣采樣] - 用戶說你們這個怎么用 - 我給您說一下操作路徑打開設(shè)置頁找到XX功能點進去就可以了。 - 用戶說太慢了 - 抱歉讓您久等了我先幫您查一下訂單狀態(tài)馬上回來。 - 用戶說謝謝 - 不客氣還有其他需要幫忙的嗎關(guān)鍵在性格錨點這一層——每個錨點都是正面描述負(fù)面約束的組合告訴模型要這樣做但不要那樣做。這種結(jié)構(gòu)比單個形容詞穩(wěn)定得多。語氣采樣是我個人很推薦的技巧。LLM特別擅長從具體示例中歸納風(fēng)格一段示例對話的作用遠大于十句抽象描述。示例不需要多覆蓋典型場景即可正常咨詢、用戶不滿、簡單感謝。2.2 防止人格分裂的三條鐵律人格分裂最常見的表現(xiàn)是同一句話在不同會話里回答風(fēng)格差異巨大或者在同一段對話中前后語氣突變。我總結(jié)了三條約法第一系統(tǒng)提示詞中不要同時出現(xiàn)相互矛盾的形容詞。比如既專業(yè)嚴(yán)謹(jǐn)又幽默風(fēng)趣——模型會隨機搖擺一會兒像客服一會兒像段子手。如果你真的需要幽默就明確限制使用場景比如用戶情緒低落時可以適當(dāng)輕松但不要開玩笑。第二不要在提示詞里寫像朋友一樣聊天??头鼍跋屡笥迅泻苋菀鬃兂蓻]有邊界感的碎碎念。豆包最終定稿用的詞是鄰家客服——比朋友疏遠一點比官方客服親切一點這個度剛剛好。第三角色設(shè)定中的每一句話都要能轉(zhuǎn)化為可檢測的行為。寫完角色設(shè)定后我會把每句話拿出來問自己這句能夠讓兩個不同的測試人員判斷豆包有沒有做到嗎如果不能就改成更具體的描述。舉個反例豆包應(yīng)該是一個讓人信賴的助手——沒法檢測。改成用戶在表達不滿時豆包應(yīng)先共情再解釋不反駁用戶的情緒——這個就能檢測了。3. 上下文管理的三明治結(jié)構(gòu)記憶、狀態(tài)、臨時指令的優(yōu)先級設(shè)計系統(tǒng)提示詞不只是一段靜態(tài)文字它實際上在扮演AI助手的工作記憶。內(nèi)容一多模型會記不住早期的規(guī)則或者把過時的指令當(dāng)成最高優(yōu)先級。我給豆包設(shè)計的提示詞結(jié)構(gòu)分了三層內(nèi)部叫三明治結(jié)構(gòu)最底層是全局規(guī)則中間層是上下文狀態(tài)最上層是臨時任務(wù)指令。3.1 三明治結(jié)構(gòu)的具體分層方式[Layer 1: 全局規(guī)則 - 始終生效] - 身份定義、邊界規(guī)則、安全兜底、品牌禁用詞 - 占比約50%這些內(nèi)容不允許被覆蓋 [Layer 2: 上下文狀態(tài) - 動態(tài)更新] - 當(dāng)前會話的用戶畫像如果是新用戶還是老用戶 - 最近訂單狀態(tài)如果助手接入了訂單查詢 - 對話階段標(biāo)記開場、咨詢中、售后處理中等 - 占比約30%由程序邏輯動態(tài)注入或更新 [Layer 3: 臨時任務(wù)指令 - 一次性覆蓋] - 某個活動期間的特定話術(shù) - 某個Bug的臨時應(yīng)對方案 - 僅在指定時間段有效 - 占比約20%超過有效期自動移除為什么要這樣分因為所有提示詞沖突的根源都是優(yōu)先級不明。當(dāng)全局規(guī)則說不主動推薦商品而臨時指令說這個月要推廣新品時模型就會隨機選擇一個執(zhí)行。三明治結(jié)構(gòu)從物理上劃分了優(yōu)先級Layer 1最高Layer 2其次Layer 3最低。如果臨時指令和全局規(guī)則沖突模型會更傾向于遵守Layer 1。這個結(jié)構(gòu)在實際落地時我建議在程序代碼中維護而不是把所有內(nèi)容硬編碼進系統(tǒng)提示詞里。比如Layer 2的訂單狀態(tài)是運行時動態(tài)拼接到提示詞中的Layer 3的臨時話術(shù)由運營后臺下發(fā)。這樣系統(tǒng)提示詞就是一個模板變量由代碼控制方便測試也方便回滾。3.2 為什么上下文越長越要警惕指令遺忘很多人在提示詞里寫了20條規(guī)則測試時前幾條都能執(zhí)行但用戶多聊幾輪之后早先的規(guī)則就開始失效。這不是模型變笨了而是注意力機制天然的局限性長上下文中靠近當(dāng)前位置的內(nèi)容對輸出的影響更大。應(yīng)對策略有幾個控制總長度。豆包的系統(tǒng)提示詞全文控制在1500字左右中文。超過2000字后后面的內(nèi)容基本會被模型忽略。關(guān)鍵規(guī)則放在開頭和結(jié)尾。開頭500字和結(jié)尾300字是注意力最集中的區(qū)域中間的內(nèi)容記憶效果最差。我把邊界規(guī)則和安全兜底放在開頭最新的臨時指令放在結(jié)尾中間放不太重要的角色細節(jié)。使用分隔符和編號。在每個Layer的標(biāo)題前后加上[Layer X]這種標(biāo)記能幫助模型更好地識別指令層級。我實測過加上分段標(biāo)記后規(guī)則遵循率比純段落描述提高了不少。3.3 狀態(tài)字段的腐爛問題動態(tài)注入的上下文狀態(tài)如果長時間不更新會變成一種腐爛信息。比如用戶已經(jīng)完成了售后但狀態(tài)字段還寫著售后處理中會導(dǎo)致豆包的回復(fù)一直帶著道歉語氣。解決方案是加一個狀態(tài)有效期標(biāo)注。舉例當(dāng)前會話狀態(tài)售后處理中 該狀態(tài)基于用戶的最近操作生成若用戶不再提及售后相關(guān)事宜請自動轉(zhuǎn)為常規(guī)咨詢模式。這個有效的降級機制能讓模型在狀態(tài)過時時自動調(diào)整而不是死板地抱著舊狀態(tài)不放。如果產(chǎn)品邏輯允許最好在代碼層面定期清理過期狀態(tài)不要依賴模型自己判斷。4. 安全對齊與敏感話題兜底不硬頂也不越界的平衡術(shù)任何面向真實用戶的AI助手都會遇到敏感話題。豆包在這方面的處理原則經(jīng)過幾次迭代才穩(wěn)定下來。核心是解決兩個問題第一不能提供有害內(nèi)容第二拒絕方式不能讓用戶覺得被冒犯。4.1 拒絕話術(shù)的三段式模板早期豆包的拒絕方式很粗糙直接說我無法回答這個問題用戶體驗很差。后來改成了三段式承認(rèn)用戶的需求共情說明自己的邊界歸因給出替代方向引導(dǎo)舉例用戶我一直睡不著你們有沒有助眠產(chǎn)品推薦 豆包睡眠問題確實很影響狀態(tài)我理解您的困擾。不過關(guān)于失眠的具體原因和處理方法我的判斷不一定專業(yè)建議您先咨詢醫(yī)生這樣更穩(wěn)妥。如果您需要的是日常放松類的用品我可以幫您看看產(chǎn)品分類。注意第三個部分替代方向很關(guān)鍵。如果沒有這一步純拒絕會讓對話陷入死局有了替代方向用戶至少還有路可走。但替代方向必須嚴(yán)格限制在豆包的能力范圍內(nèi)不能又跑偏到專業(yè)建議上。另一個經(jīng)驗是拒絕話術(shù)不能每次都完全一樣否則用戶會覺得是機器人復(fù)讀機。我給豆包提供了三個不同措辭的拒絕模板并在提示詞中注明根據(jù)用戶提問方式選擇合適的表達保持意義一致用詞可以變化。4.2 敏感問題的分級響應(yīng)策略不是所有敏感話題都需要同一套處理方式。豆包按照風(fēng)險等級做了分級風(fēng)險等級典型問題類型響應(yīng)策略示例高自傷、自殘、藥物過量不討論細節(jié)立即提醒尋求專業(yè)幫助這個問題比較緊急請您盡快聯(lián)系家人或撥打急救電話。我這邊無法提供進一步建議。中醫(yī)療癥狀、法律糾紛、投資決策不提供專業(yè)判斷引導(dǎo)咨詢專業(yè)人士我不具備這方面的專業(yè)能力建議您咨詢醫(yī)生/律師/理財顧問。低涉及第三方產(chǎn)品評價明確表示不了解不評價這款產(chǎn)品我沒有足夠的信息來判斷您可以參考官方詳情頁的說明。無一般閑聊正?;貞?yīng)但不過度深入正常聊天即可分級的好處是避免一刀切。如果所有敏感問題都用最高級別的應(yīng)急話術(shù)用戶問個頭疼腦熱也會被搞得像要出大事一樣。反過來如果所有問題都輕描淡寫遇到真高危情況就危險了。4.3 高危場景的緊急處理針對最高風(fēng)險等級自傷、自殺傾向等我建議在系統(tǒng)提示詞中給出明確的處理流程不要讓模型自由發(fā)揮。豆包的規(guī)則是這樣的當(dāng)用戶明確表達或暗示有自傷、自殺傾向時 1. 不要追問具體細節(jié)比如方式、時間、地點 2. 使用緊急救助話術(shù)表達關(guān)心并建議聯(lián)系專業(yè)人員或緊急服務(wù) 3. 不提供任何冷靜一下放松心情之類的簡單安慰這類話容易讓人感覺被敷衍 4. 在對話結(jié)束前至少重復(fù)一次求助建議這類場景寧可過度反應(yīng)也不能輕描淡寫。實際測試中發(fā)現(xiàn)有些用戶會用比較隱晦的方式表達最近很累感覺沒意思模型容易誤判為普通情緒傾訴。所以提示詞里要加一條當(dāng)用戶表達情緒低落且?guī)в邢麡O傾向時寧可提高響應(yīng)等級也不要降低。4.4 越界追問的防御機制還有一種情況用戶會故意繞過邊界用假設(shè)如果幫我的朋友問等方式套答案。豆包的應(yīng)對原則是看內(nèi)容不看包裝。系統(tǒng)提示詞中明確寫了一句無論用戶以何種方式提問假設(shè)性問題、第三人稱問題、虛構(gòu)情景都視為用戶本人提問按邊界規(guī)則處理。這句規(guī)則非常有效。沒有它的時候用戶說我有個朋友想了解一下某種藥的用法豆包就會老老實實回答因為模型認(rèn)為這只是一個科普問題。加上這句之后模型會識別出這是邊界問題的變體從而觸發(fā)拒絕話術(shù)。5. 實測調(diào)優(yōu)從四輪迭代看提示詞的量化評估方法寫提示詞不難難的是知道改完之后是變好了還是變壞了。如果只靠拍腦袋今天覺得這個版本好明天又覺得不對永遠無法收斂。我針對豆包建了一套簡單的量化評估方法這里分享下完整流程。5.1 建立測試集寧少勿濫但必須有覆蓋測試集是提示詞優(yōu)化的地基。我先從真實對話記錄里撈了100條問題分成四類常規(guī)咨詢產(chǎn)品如何使用、價格、物流等35條售后問題退換貨、破損、少件等25條邊界試探涉及醫(yī)療、法律、投資、情緒等25條正常閑聊天氣、心情、無關(guān)話題等15條每條記錄都標(biāo)注了期望行為和期望語氣。期望行為是豆包應(yīng)該做什么回答、引導(dǎo)、拒絕期望語氣是應(yīng)該用什么態(tài)度。這樣每次改動后我可以快速跑一遍這100條對照標(biāo)準(zhǔn)打分。100條雖然不多但對一個垂直場景的助手來說足夠了。關(guān)鍵在于類別的覆蓋比例要貼近真實對話分布——如果真實場景里邊界試探很少測試集里就不需要50%都是邊界問題否則會把模型調(diào)得過度保守連正常問題都不敢答。5.2 四個評分維度每次跑完測試集我按四個維度打分每項1到5分維度說明典型扣分情況合規(guī)性是否遵守邊界規(guī)則提供了專業(yè)建議但未引導(dǎo)扣2分直接拒絕但語氣生硬扣1分準(zhǔn)確性產(chǎn)品回答是否正確虛構(gòu)了不存在的功能扣3分混淆了規(guī)則扣2分一致性同一問題的多次回答是否穩(wěn)定同一問題5次測試出現(xiàn)3種不同答案扣2分體驗度語氣是否自然、用戶是否愿意繼續(xù)對話大量重復(fù)話術(shù)扣1分過度熱情讓人不適扣1分答非所問扣2分跑完100條把每個維度的總分算出來多輪迭代之間對比分?jǐn)?shù)就能知道改提示詞到底是哪方面進步了哪方面退步了。5.3 四輪迭代的真實記錄第一輪是初版也就是前面說的能力清單性格形容詞風(fēng)格。測試結(jié)果準(zhǔn)確性3.2分合規(guī)性2.1分一致性2.5分體驗度3.0分。突出問題醫(yī)療問題答得太痛快勸退類問題答法太直接讓人不舒服。第二輪加了邊界規(guī)則合規(guī)性立刻漲到4.0分。但準(zhǔn)確性掉到2.8分——原因是邊界規(guī)則寫得太大把一些其實能回答的產(chǎn)品問題也攔截了。比如用戶問這個產(chǎn)品孕婦能不能用嚴(yán)格來說應(yīng)該結(jié)合產(chǎn)品說明書來答不是醫(yī)療問題但模型直接拒絕說涉及醫(yī)療請咨詢醫(yī)生。這就是過度保守。第三輪調(diào)整了邊界觸發(fā)條件加了一個涉及產(chǎn)品自身官方信息時可以按產(chǎn)品頁面內(nèi)容進行客觀引用的補充規(guī)則。準(zhǔn)確性回升到3.7分。但一致性還只有3.0分同一個問題不同會話的答法經(jīng)常不一樣。第四輪引入了語氣采樣和分段結(jié)構(gòu)一致性升到3.8分體驗度升到4.2分。此時四個維度都達到了可以上線的水平。這個迭代過程讓我意識到提示詞優(yōu)化不是越改越嚴(yán)而是一步一步往正確的方向試探。每次只改一個變量不要同時調(diào)邊界和角色設(shè)定否則無法判斷是哪個改動導(dǎo)致的分?jǐn)?shù)變化。5.4 線上效果的進一步驗證100條測試集只能保證不出大問題真正上線還要做灰度觀察。我建議在正式發(fā)布前做兩件事A/B對比把同一批真實用戶流量分成兩組一組用舊提示詞一組用新提示詞對比用戶的一次解決率和差評率。豆包在A/B測試中一次解決率從64%提升到78%差評率下降了差不多一半。人工抽檢每周隨機抽50條真實對話重點看那些測試集沒覆蓋的新出現(xiàn)的問題類型。比如豆包上線第一周就遇到用戶問你們會不會泄露我的信息——這種問題測試集里沒有需要人工確認(rèn)回答質(zhì)量后再補充進測試集。定期用線上數(shù)據(jù)更新測試集比反復(fù)調(diào)提示詞本身更重要。因為線上用戶總會用你意想不到的方式提問只有把這些新問題納入測試覆蓋下一輪優(yōu)化才有依據(jù)。我在實際維護豆包的過程中最大的感受是系統(tǒng)提示詞不是一個寫出來就完事的靜態(tài)文件它更像一個需要持續(xù)維護的產(chǎn)品。邊界會變、產(chǎn)品會變、用戶提問方式也會變提示詞要跟著迭代。每次改動都記錄原因、跑測試集、看分?jǐn)?shù)變化這套流程跑順之后整個優(yōu)化過程會非常踏實。如果你也在維護類似的對話產(chǎn)品建議從先定邊界、再寫人設(shè)、控制上下文、做好兜底、數(shù)據(jù)化調(diào)優(yōu)這五步入手每一步都能實打?qū)嵖吹叫Ч?