你有沒有遇到過這種情況:讓同事幫你處理數據,你說"把這個欄位標準化一下",同事立刻就懂了,因為你們合作了三個項目,他早就知道你說的"標準化"永遠是指減去均值除以標準差,而不是壓縮到0到1之間。
但如果換成一個剛來的實習生,或者一個AI編程助手,這句話就變得模稜兩可了。它可能會選擇另一種同樣"技術上正確"但完全不是你想要的實現方式。
這不是一個假設的場景。事實上,這正是一群來自東南大學和香港科技大學的研究者盯上的問題:**當你已經和某個AI編程助手合作過很多次,它是否應該、以及能不能,從你之前的對話歷史裡學會你的"潛規則",從而在新一次對話里少問幾句廢話,直接給出你想要的代碼?**
這個問題聽起來簡單,但仔細想想會發現它藏著一個挺尷尬的現狀。
現狀:AI要麼裝懂,要麼問不停
現在主流的AI編程助手處理歧義請求的方式大概分兩種。
第一種是"揣測型",你說什麼它就按最常見的理解去實現,賭一把。賭對了皆大歡喜,賭錯了你就要重新解釋一遍,甚至要指出"不對不對,我要的不是這個"。
第二種是"追問型",遇到任何可能有歧義的地方就停下來反問你。這在單次交互里是個穩妥的策略,但問題是,如果你和這個AI已經合作了幾十次,每次遇到同一類問題它都要重新問一遍,那這個"追問"就從"負責任"變成了"記性差"。
> 大語言模型(LLM):本文中指GPT、Claude、DeepSeek
等能理解和生成自然語言及代碼的AI系統,是當前AI編程助手的技術底座。
這兩種策略有一個共同的盲點:它們都把每一次編程請求當成孤立事件來處理,完全沒有利用"這是同一個用戶"這個資訊。而這恰恰是問題所在。人類協作者之所以能減少溝通成本,靠的正是記住了對方過去的偏好和習慣。AI要想真正成為"長期搭檔"而不是"每次都要重新認識的陌生人",就必須學會做這件事。
於是這篇論文提出了一個新的研究任務,叫做**個性化歧義適應
**。簡單說,就是給AI助手看一個用戶過去幾次已經解決完的編程對話記錄,然後看它能不能從中總結出這個用戶特有的表達習慣和歧義模式,用在一次全新的對話里,儘量少問、快答對。
這事兒到底難在哪:先看看AI在"裸考"下的真實水平
在講研究者怎麼解決這個問題之前,得先弄明白這件事本身有多難。
研究團隊做了一個對照實驗,叫作"空白對照實驗"。他們拿HumanEval(一個經典的編程能力測試集,包含164道函數級編程題,題目描述是完整清晰的,沒有故意設計的歧義)直接測試模型,看它們在資訊完整、沒有任何模糊表達的情況下能做到什麼程度。
> HumanEval:由OpenAI發布的編程能力評測基準,包含164道函數實現題目,每道題都有完整的需求描述和可執行的測試用例,長期被用作衡量代碼生成模型基礎能力的標尺。
結果是,ChatGPT-5.5和DeepSeek V4 Pro在這個"裸題"測試里都拿到了100%的最終成功率,也就是說,只要給出完整、無歧義的需求,加上代碼報錯反饋可以來回修改,這兩個模型幾乎能解決所有題目。DeepSeek甚至有91.46%的題目是一次性寫對的,壓根不需要調試。
這個結果其實很關鍵,它說明了一件事:**當前頂尖大模型的基礎編程能力已經不是瓶頸了**。
它們卡住的地方,不是"能不能寫出正確代碼",而是"能不能理解你到底想要什麼"。這也是為什麼這篇論文要專門設計一套充滿歧義的測試集,去暴露模型在需求理解層面的真實短板,而不是繼續測試它們早已擅長的代碼生成能力。
六種"話沒說清楚"的方式:給歧義建一個分類賬
要研究個性化歧義,第一步得先搞清楚,人到底會以哪幾種方式把話說不清楚。
研究者從一篇語言學論文(Li等人2024年的工作)里借來了11種語言歧義類型,然後結合真實的人機編程對話(數據來自WildChat,一個包含上百萬條真實ChatGPT對話記錄的數據集),重新歸納整理,最終提煉出六種編程場景下特有的歧義機制。
這六種機制分別是:領域認知多義、結構邏輯錯位、習慣性語境省略、系統邊界誤解、對話語境錯位、隱含約束欠說明。
聽起來有點繞,我用大白話拆解一下每一種到底是什麼樣子。
領域認知多義,說的是不同專業背景的人對同一個術語有不同理解。比如一個生物資訊學背景的用戶說"跑一批樣本",他腦子裡想的是特定的批處理邏輯,而一個通用程序員可能理解成完全不同的東西。
> 多義:同一個詞在不同語境或不同人的理解中,指向了不同的含義,這是歧義產生最常見的源頭之一。
結構邏輯錯位,指的是用戶嘴上說得很隨意,比如"把小的那些過濾掉",但心裡其實有精確的數值邊界和邏輯判斷,只是沒有說出具體數字和判斷條件。
習慣性語境省略更好理解,就是用戶把團隊內部約定俗成的東西當成"大家都懂"的常識,直接省略不說,比如欄位命名規範、接口路徑這些。
系統邊界誤解則有點意思,是用戶把AI當成了一個可以直接操作你電腦、連SSH、能讀日誌文件的"人形助理",而實際上AI只是在對話框裡回話,根本碰不到你的伺服器。
對話語境錯位說的是多輪調試中,用戶經常用"就是上面那個函數"這種代詞指代,但對話里可能有好幾個候選對象,容易產生歧義。
隱含約束欠說明,是用戶只說了"我要功能能跑起來",但心裡默認包含了安全校驗、邊界處理、異常捕獲這些工程師的常識性要求,卻完全沒提。
為了驗證這套分類是不是真的能被人理解和識別,研究者還專門找了20名志願者做了一次人工標註實驗,每個樣本讓兩個人獨立判斷屬於哪種歧義類型。最後算出來的一致性指標(Fleiss' κ)是0.66,這個數值在標註任務里屬於"實質性一致",說明這套分類框架不是研究者自娛自樂編出來的概念遊戲,而是真的能被普通人識別出來的現象。
造數據的三段流程:如何讓AI假裝是同一個"有個性"的用戶
光有歧義分類還不夠,接下來的難題是:**怎麼造出一批真實可信、又能反覆驗證的多輪編程對話數據?**
研究者設計了一套三階段的數據生成管線。
第一階段是構造"故意含糊"的初始請求。他們從HumanEval里挑出一道原本描述清晰的編程題,先提取出這道題所有關鍵的實現約束條件,然後按照分配給這個"虛擬用戶"的歧義機制,故意抹去或替換掉其中一部分關鍵資訊,同時套上一個用戶人設的表達風格(比如是急脾氣的實習生,還是嚴謹的架構師),最終生成一句聽起來自然、但確實缺了關鍵資訊的初始提問。
這裡有個設計細節值得說一下:每個虛擬用戶會被分配兩種歧義機制的組合,而不是單一一種。這是為了增加數據的多樣性,讓生成的對話更貼近真實場景里"一句話里往往同時藏著好幾個理解漏洞"的情況。
第二階段是把這句含糊的初始請求,擴展成一整段多輪對話。研究者搭建了一個叫做AmbiSimu的模擬環境,裡面有三個角色:一個用戶智能體、一個對話大模型、一個代碼執行環境。用戶智能體這邊又拆成兩個獨立的子模組,一個負責"怎麼說話"(表達),一個負責"怎麼判斷對不對"(評判),這樣設計是為了避免兩者互相干擾,保證生成的對話既符合人設,又能被客觀地判斷任務是否完成。
對話過程就是模擬真實調試:AI要麼反問一句澄清問題,要麼直接給出代碼,代碼會被丟進執行環境裡跑一遍隱藏測試用例,用戶智能體拿到結果後決定繼續對話還是結束會話。
第三階段是一致性校驗。因為同一個虛擬用戶會在多個不同的編程任務上生成對話,研究者需要確保這個用戶"說話不清楚的方式"在每一次對話里都保持穩定,而不是這次是這種歧義、下次又變成另一種歧義。如果發現前後不一致,這條數據就會被打回重新生成。
這個三階段流程其實很像電影選角和排練的過程。你先寫好一個角色的性格設定和台詞大綱(第一階段),然後讓演員在不同場景里即興發揮對話(第二階段),最後導演要檢查這個演員在每一場戲裡是不是都保持了同一個人設,沒有前後OOC(第三階段)。
如果跳過第三階段的一致性校驗會怎樣?那這批數據就毫無意義了,因為你沒辦法驗證AI是不是真的學到了"這個用戶的說話習慣",還是只是巧合般地蒙對了這一次。整個個性化適應的研究前提就會崩塌。
CAPA
基準:600段對話,60個用戶格子
經過這套流程,研究者最終搭建出了一個叫CAPA(Cross-Session Adaptation to Personalized Ambiguity,跨會話個性化歧義適應)的基準測試集。
> CAPA:本文提出的評測基準,全稱是跨會話個性化歧義適應,專門用來測試AI編程助手能不能利用同一用戶過去的對話歷史,減少新對話里的反覆澄清。
具體規模是600段編程對話,被組織成60個"用戶-歧義類型"格子,每個格子裡有10段對話,前5段作為"已解決的歷史記錄"給AI參考,後5段作為"待評估的新任務"來評分。
十個用戶人設各自出現在6個格子裡,六種歧義機制兩兩組合成15種搭配,每種搭配出現在4個格子裡,整體設計是均衡分布的,避免某一種人設或歧義類型被過度代表而扭曲最終結果。
按任務難度劃分,300道待評估任務里有97道簡單題(1到2輪對話就能解決)、89道中等題(3到4輪)、114道複雜題(5到8輪),複雜題占比接近四成,說明這套測試集本身有相當的挑戰性梯度。
三把尺子:怎麼衡量AI適應得好不好
評測這件事光看"最後有沒有做對"是不夠的,研究者設計了三個指標來立體地衡量表現。
第一個是可執行成功率(ES),就是在規定的對話輪次內,模型最終有沒有做出能通過隱藏測試的正確代碼。
第二個是首輪可執行成功率(FT-ES),更嚴格,看的是模型能不能在第一次回復里就直接給出正確答案,壓根不用來回澄清。
第三個是完成輪數(TTC),衡量平均需要幾輪對話才能做對,沒做對的按最大輪次(8輪)計算,這個數值越低說明交互效率越高。
這三個指標搭配起來看的意義在於,ES反映"最終能不能做對",FT-ES和TTC反映"做對的過程有多順暢"。一個模型可能ES很高但FT-ES很低,說明它總能通過反覆試探最終蒙對,但每次都要多問幾句才行,這和"一步到位"的體驗是完全不同的。
實驗結果:歷史記錄確實有用,但用得還不夠好
研究者拿這套基準去測了12個當下比較主流的大模型,涵蓋閉源頂尖模型(比如GPT-5.5、Claude Opus 4.8)、開放權重的頂尖模型(比如DeepSeek V4 Pro、GLM-5.2)和體量更小的開源模型(比如Qwen3-8B)。
每個模型都在兩種條件下被測試:一種是"無歷史",完全不給任何過去對話記錄,純靠這一次的提問去猜;另一種是"同用戶歷史",給它看同一個虛擬用戶過去5段已解決的對話記錄,再讓它處理新任務。
結果相當有說服力。**12個模型里有11個模型在有歷史記錄時ES提升了,12個模型的FT-ES全部提升,TTC全部下降**。
具體到數字,GPT-5.5在無歷史情況下ES是74.3%,FT-ES只有可憐的2.3%,也就是100次對話里只有2到3次能一次說對。加上歷史記錄後,ES漲到84.3%,FT-ES直接跳到31.0%,翻了十幾倍。
表現最好的Claude Opus 4.8,無歷史時FT-ES是24.3%,有歷史時飆升到60.3%,幾乎翻倍。
這裡有個特別值得琢磨的現象:歷史記錄帶來的提升,**在"首次答對率"上比在"最終答對率"上更明顯**。平均來看,12個模型的ES平均提升了6.8個百分點,FT-ES平均提升了15.6個百分點,是ES提升幅度的兩倍多。這說明歷史記錄的作用主要體現在讓模型"少走彎路、一步到位",而不是把原本徹底做錯的任務硬生生扳回正確。
這個區別其實挺微妙的,好比一個新來的實習生本來就能通過多次試錯把事情做對,只是過程磕磕絆絆;給他看了老員工的工作筆記之後,他還是能做對,但這次是直接一次做對,不用來回被上級打回來修改。任務的最終結果變化不大,但過程中的溝通成本和試錯次數大幅下降了。
不過話說回來,即便是表現最好的模型,加上歷史記錄後的FT-ES也才60.3%,意味著接近四成的新任務還是需要反覆澄清或者一開始就答錯。跟前面提到的空白對照實驗裡100%的成功率相比,這個差距清楚地說明了:**個性化歧義理解這件事,目前的大模型遠沒有做到位**。
有一個特別值得單獨拿出來說的反例。ChatGPT-5.6-Sol這個模型,加上歷史記錄後FT-ES提升了15.6個百分點,看起來是進步了,但它的ES反而從79.0%微降到78.7%。這說明歷史記錄並不是萬能藥,用得不好反而可能帶來一些副作用,具體機制論文沒有深挖,但這提醒我們,"給更多資訊"不等於"給出正確的幫助",關鍵還要看模型能不能正確解讀這些資訊。
三個追問:難度、身份、記憶方式分別造成了什麼影響
研究者沒有止步於"歷史有用"這個結論,而是進一步做了三組對照實驗,試圖搞清楚這件事背後更細緻的機制。
**第一個問題是任務難度的影響。**
按前面提到的簡單、中等、複雜三檔難度切分待評估任務,結果很直白:即使給了歷史記錄,複雜任務的表現依然明顯更差。以GPT-5.5為例,簡單任務的ES是91.75%,複雜任務掉到71.05%,掉了整整20.7個百分點,完成輪數也從2.2輪漲到3.97輪。DeepSeek V4 Pro的落差更大,簡單任務ES是88.66%,複雜任務只有62.28%,掉了26.4個百分點。
這說明歷史記錄能幫上忙,但幫不了太多忙,尤其是面對本身就複雜的任務時,光靠"記住你之前的習慣"是不夠的,模型自身的推理能力還是決定性因素。
**第二個問題更有意思,也是我覺得整篇論文裡設計得最巧妙的一組實驗:歷史記錄帶來的提升,究竟是因為它真的讀懂了"這個用戶的特有習慣",還是僅僅因為多看了幾段編程對話,學到了一些通用的編程套路?**
為了回答這個問題,研究者設計了一個"打亂歷史"的對照組:把原本屬於A用戶的歷史記錄,換成從其他用戶那裡隨機抽來的歷史記錄,數量保持一致,但內容對不上號。然後對比三種情況:完全沒有歷史、打亂的歷史、正確匹配的同用戶歷史。
結果顯示,即便是打亂的、完全不匹配的歷史記錄,ES也比沒有歷史時提升了不少,最高提升了10.67個百分點。這說明模型確實能從任意的編程對話記錄里學到一些通用的模式,比如常見的代碼風格、調試思路,這部分收益跟"這個用戶是誰"無關。
但當研究者換回真正匹配的同用戶歷史後,FT-ES和TTC又有了進一步的提升,FT-ES額外提升2到12個百分點,TTC額外減少0.04到0.19輪。雖然這個額外收益的幅度不算特別誇張,但方向是一致且穩定的。
這個實驗的價值在於,它把"歷史記錄有用"這個籠統的結論,拆解成了兩層:一層是"看到更多樣本"帶來的通用學習收益,另一層才是真正的"認出這是同一個人"帶來的個性化收益。**如果沒有這組打亂對照實驗,我們根本無法區分這兩種效應,很可能會把功勞全部錯誤地歸給"個性化理解",實際上大部分提升可能只是來自"見多識廣"。**
這就好比你去一家新開的餐廳,服務生對你的口味判斷準不準,可能一部分來自他今天已經服務過十桌客人積累的經驗(通用經驗),另一部分才是真的因為他認出了你就是上周來過、點過微辣不要香菜的那位老顧客(個性化記憶)。如果不做對比測試,你根本分不清這家餐廳的貼心服務到底靠的是哪一種。
**第三個問題是關於記憶管理方式的。**
現在市面上已經有一些專門做長期記憶管理的開源系統,比如mem0和A-mem,它們的思路是把原始對話記錄提煉、總結、組織成更精簡的記憶條目,而不是每次都把完整的歷史對話原封不動地塞給模型。研究者好奇,這些現成的記憶系統是不是天然就適合處理這種個性化歧義問題。
> mem0:一個開源的AI智能體長期記憶管理框架,核心功能是從對話中抽取、更新、檢索關鍵事實資訊。
>
> A-mem:另一個智能體記憶系統,特點是把記憶組織成互相關聯、可以動態演化的筆記結構。
結果有點意外:這兩套現成的記憶系統,在DeepSeek V4 Pro和GLM-5.2上,三項指標全面不如直接把完整原始歷史丟給模型。哪怕是在GPT-5.5上表現稍好一些,也只是有得有失,沒有全面優勢。
研究者分析原因,認為問題出在"目標不匹配"上。mem0關注的是抽取和更新事實性資訊,A-mem關注的是把記憶組織成結構化筆記,但這兩者都沒有專門設計用來識別"用戶反覆出現的歧義解決模式"這件事,也沒有主動判斷"當前這些記憶證據是否足夠支撐我直接寫代碼,還是應該再問一句"。通用的記憶管理工具解決的是通用的記憶問題,但個性化歧義適應是一個更細分、更專門化的需求,直接套用通用工具效果反而打了折扣。
這個發現挺重要的,它提醒我們一個更普遍的道理:**工具的通用性和針對性之間存在權衡,一個為A場景設計得很好的系統,直接搬到結構相似但目標不同的B場景里,未必好用,甚至可能因為優化方向不對而幫倒忙。**
一個輕量級的解決方案:讓AI自己先判斷"這段歷史夠不夠用"
既然發現通用記憶系統不夠對症,研究者乾脆自己設計了一個針對性的輕量級方法,叫做"同用戶歷史門控
"。
這個方法的思路其實挺樸素的。它引入一個專門的"門控大模型",在正式處理新任務之前,先讓這個門控模型審查一遍用戶的歷史對話記錄,判斷裡面有沒有足夠清晰、一致的證據能說明這個用戶的歧義解決習慣。如果證據充分,門控模型就把最有參考價值的那一段歷史對話高亮出來,直接推薦給主模型參考;如果證據不夠,門控模型就生成一段"澄清指引",提示主模型這次應該重點問哪個方面,而不是漫無目的地反問。
這個高亮出來的證據或者澄清指引,會被一併塞進主模型的上下文裡,配合新的用戶提問,讓主模型要麼直接寫代碼,要麼帶著明確方向去追問。
評測結果顯示,跟直接使用原始的完整歷史記錄相比,這個門控方法在三個模型上都讓FT-ES提升了0.66到13.33個百分點,同時ES基本保持穩定(波動在1個百分點以內),TTC在GPT-5.5和GLM-5.2上也有所下降。
這個結果說明,**光是"多給點歷史資訊"效果有限,更關鍵的是讓模型學會主動判斷"這段資訊到底能不能支撐我直接下判斷"**。這有點像一個剛接手項目的新員工,如果給他一整箱過去的項目文檔,他可能翻半天也找不到重點;但如果有個老員工先幫他標出"這幾份文檔是關鍵,其他的可以先不看",他上手的速度就會快很多。如果沒有這一步篩選,海量的歷史資訊反而可能變成噪音,拖慢而不是加速判斷過程。
六種歧義機制里,哪種最容易被AI破解
論文還補充分析了GPT-5.5在六種不同歧義機制下的表現差異(因為每段對話都同時攜帶兩種機制,這裡統計的是每種機制單獨出現時的邊際表現)。
結果顯示各機制之間的差距並不算特別懸殊,ES範圍在81.0%到88.0%之間,FT-ES在24.0%到38.0%之間。習慣性語境省略這一類的ES最高、完成輪數最短,說明模型相對更容易從歷史記錄里學到用戶的隱含約定;而隱含約束欠說明這一類的完成輪數最長,說明那些藏在字裡行間、連用戶自己都沒意識到要說出口的工程細節,是AI最難從歷史裡總結出來的。
這個細節其實挺耐人尋味的:**越是"看不見的默認假設",越難通過歷史記錄去學習**,因為這類資訊本身就是用戶下意識省略的,連顯性的表達痕跡都很少留下。
寫在後面
讀完這篇論文,我最先想到的不是編程助手,而是我自己和朋友的日常對話。我們經常會說一些只有彼此才懂的"黑話",外人聽了完全不明白,但我們從不覺得這是歧義,因為共享的歷史消解了這種模糊性。這篇論文本質上是在問:AI能不能也建立起這種"共享歷史"?
有個細節我覺得值得單獨拎出來說:論文裡那個"打亂歷史"的對照實驗,其實暗示了一件讓人略微不安的事。**很多我們以為是"個性化理解"的AI表現,可能有相當一部分只是"看了更多例子"帶來的普通泛化能力,而不是真的認出了你是誰。**這提醒我,以後評價任何聲稱"記住你的偏好"的AI產品時,都應該多問一句:如果給它看的是別人的歷史記錄,它的表現會不會差不多?
還有一點讓我意外,就是通用記憶系統mem0和A-mem在這個任務上反而打不過最原始的"直接塞歷史對話"。這打破了我之前的一個默認假設,就是"專門做記憶管理的工具,肯定比什麽都不做更好"。事實證明工具設計的目標和實際任務目標如果不對齊,工具反而可能是負資產。
論文沒有回答的一個問題是:如果用戶的偏好本身會隨時間變化怎麼辦?比如一個人從"z-score標準化"的堅定支持者,某天因為項目需求變成了"min-max歸一化"的支持者,這時候歷史記錄反而可能變成誤導資訊。這個動態演變的場景,或許是這條研究路線接下來最值得啃的硬骨頭。
Q&A
Q1:CAPA是什麼?
A:CAPA是論文提出的一個跨會話個性化歧義適應基準測試集,包含600段編程對話,用於測試AI編程助手能不能利用同一用戶過去解決過的對話歷史,來減少新對話里的反覆澄清,更準確地寫出用戶想要的代碼。
Q2:有歷史記錄的AI編程助手真的比沒有歷史記錄表現更好嗎?
A:是的,論文測試了12個主流大模型,結果顯示有歷史記錄時,11個模型的最終成功率提升,全部12個模型的首輪直接答對率提升,平均完成對話所需輪數也明顯減少,其中Claude Opus 4.8的首輪答對率從24.3%提升到60.3%。
Q3:通用的AI記憶管理工具能不能直接解決這個問題?
A:論文測試了mem0和A-mem這兩個現成的記憶管理系統,發現它們整體表現反而不如直接把完整歷史對話丟給模型,原因是這些工具關注的是抽取事實或組織筆記,沒有專門針對識別用戶歧義解決模式做優化,研究者因此設計了一個更對症的輕量級歷史門控方法。






