傳統廣告系統的設計,是針對個別、獨立的使用者意圖做出回應。使用者在線上搜尋或瀏覽內容後,廣告系統會將這些查詢與網頁瀏覽視為事件接收,再根據這些事件尋找相符的廣告。為 ChatGPT 建構廣告技術堆疊則有所不同:使用者意圖會在不同對話中逐漸形成,也會隨著同一段對話的多輪互動而轉變,有時甚至沒有適合刊登廣告的時機。為了支援這種新模式,我們打造了專屬的廣告遞送系統。這種新型廣告技術堆疊,以客製化且經過後訓練的前沿 LLM 為基礎,透過工具呼叫執行檢索(找出最佳選項)、排序(預測使用者互動)、相關性評估(評估廣告的實用性),以及競價,以完成最終的廣告選擇與定價。
為掌握使用者目標變化的細微差異,我們的廣告系統採取三項關鍵設計:1)實作有狀態的廣告工作階段,在同一段對話的不同輪次,以及多段對話之間保留資訊;2)採用客製化、經過後訓練的 LLM,透過工具呼叫架構解讀對話脈絡與潛在意圖,再有效地選取、排序並遞送廣告;3)將廣告選擇流程置於獨立服務中,與 ChatGPT 的回答生成分開執行,避免廣告影響回答,並維持 ChatGPT 的中立語氣。我們使用後訓練 LLM 協調整個廣告流程,根據使用者當前這一輪對話與對話歷史,決定在適當時機呈現適合的廣告。過去,從零建立這種能自我改進的廣告系統往往需要數年,但 ChatGPT Ads 在推出不到 200 天就達到 10 億美元的年化營收規模;截至目前,自推出以來已有超過 10 萬名廣告主在 ChatGPT 上刊登廣告。
傳統廣告請求通常始於一個定義明確的事件。使用者送出搜尋查詢或開啟網頁,廣告系統就會收到請求。這類系統相對單純:先檢索潛在候選廣告,進行排序,再透過競價為這次廣告機會訂出合適價格,最後向使用者顯示選出的廣告。ChatGPT 的互動方式不會自然產生這樣明確的時機。
人們與 ChatGPT 對話時,帶來的是想完成的目標,而不是只求一個答案的搜尋查詢。他們可能正在規劃旅行、為公司挑選軟體、布置住家,或培養新的興趣。這些事情不會在一輪對話中全部完成。ChatGPT 往往會在過程中協助使用者釐清真正重要的事。
舉例來說,我們的工程團隊曾詢問 ChatGPT 如何為跑步比賽訓練:對話一開始是關於跑步的一般問題。幾輪對話之後,他們開始詢問有助於訓練的鞋款。每新增一項條件,對話的商業意涵就會改變,而這些個人化脈絡也會跨越多個工作階段持續演變。如果系統根據第一則訊息就採取行動,可能會依完全錯誤的意圖進行檢索,進而降低使用者體驗,甚至造成干擾。
因此,建構廣告系統時,我們必須跳脫請求與回應式的廣告架構,從零打造廣告技術堆疊,在優先維護使用者信任與價值的前提下,尋找潛在商業機會。
如果像傳統廣告系統一樣,將每則訊息都轉成獨立請求,在我們的聊天使用情境中會帶來幾項風險:1)過度簡化而誤判使用者目標;2)在使用者真正的需求尚未明確前,過早啟動廣告流程;3)顯示的廣告妨礙使用者達成目標,而非提供協助;4)每次請求改變都重新執行廣告流程,效率低落,既製造雜訊又浪費成本。因此,我們的廣告系統(包含檢索、排序與遞送)不以個別事件為核心,而是維持有狀態的工作階段。也就是說,廣告工作階段會在符合資格的整輪對話期間持續運作,隨著對話發展記住並更新資訊。ChatGPT 會將初始請求的脈絡傳送至廣告伺服器。廣告系統會隨著對話的進展調整,而不是依賴單一、扁平化的查詢。
廣告選擇流程與 ChatGPT 的正常回覆生成並行執行,確保廣告流程不會影響 ChatGPT 的回覆。廣告由獨立系統篩選與選取;該系統會讀取對話,並依自身的資格、品質與遞送限制運作。這個重要的架構邊界,讓不同服務使用各自獨立的模型與程式碼:ChatGPT 核心伺服器負責生成非廣告回覆;同時,廣告系統獨立評估是否存在合適的廣告機會,若有,就透過另一套投放流程準備贊助廣告版位。
廣告流程與 ChatGPT 回答路徑並行運作。
除了保障使用者體驗,這種分離設計也帶來了一些實際效益。ChatGPT 完全不依賴廣告系統;這兩項服務彼此獨立,也不共用內容生成模型。因此,即使廣告投放系統無法使用或速度緩慢,ChatGPT 的非廣告回覆仍不受影響。這表示廣告系統不會造成 ChatGPT 產品停擺或延遲。這種分離設計的另一項好處,是讓廣告必須達到很高的價值門檻。不傳回任何廣告,也是正常且成功的結果。只有在廣告明確有益於使用者與廣告主時,系統才會遞送廣告。
我們廣告技術堆疊中的另一個關鍵架構元件,是經過後訓練的 LLM。它會解讀對話,並以代理式迴圈執行完整廣告流程,透過工具呼叫操作廣告系統的核心功能,從檢索、排序、競價,直到最後的遞送。我們稱這個 LLM 為協調器。
廣告流程的第一步是理解使用者意圖,以啟動檢索程序:快速且刻意廣泛地蒐集潛在廣告,供後續篩選。逐步接收對話能帶來更豐富的資訊,卻也增加了檢索時的歧義,因為廣告系統必須區分當前意圖與過時的脈絡。協調器必須解讀對先前訊息的指涉、辨識使用者何時是在假設情境下發言,並避免將每次提及產品或服務都視為購買需求。
廣告協調器利用可用的對話與使用者脈絡,反覆尋找優質廣告,持續決定何時該呼叫哪項工具。其根本目標是找出最適合該對話與脈絡的廣告,也就是同時為使用者與廣告主帶來高價值的廣告。如果使用者選擇啟用個人化廣告,協調器也會考量使用者過往對話中可用的非敏感資訊,找出最合適的廣告。
廣告協調器會反覆呼叫廣告遞送工具,找出有價值的廣告。
隨著對話進行,廣告協調器取得更多最新資訊後,可以根據更新的脈絡執行新一輪工具呼叫,找出更合適的廣告並傳回用戶端。如果這些新廣告及時送達,用戶端就可以使用它們。
協調器的設計旨在兼顧使用者與廣告主的價值,並始終以使用者為優先。
廣告系統由個別工具組成,協調器會反覆呼叫這些工具,為對話找出最合適的廣告。概括來說,協調器會先將對話轉成簡短的文字摘要,再轉成語意嵌入向量(以便於廣告系統篩選的形式儲存語意),接著利用這些向量檢索候選廣告,依預算、使用者設定及其他初步檢查篩選符合資格的候選項目,再評估其品質與相關性,最後進行排序,找出適合在聊天回覆結尾刊登的高價值廣告。因此,每則廣告都必須在資格與相關性方面達到高標準,才能取得刊登資格。
協調器 LLM 首先會準備一或多個查詢,表達相關的商業意圖。這可能包括改寫對話脈絡,拓展商業機會,不侷限於一對一對應的搜尋查詢,接著建立語意表示。在這個過程中,協調器會將多輪對話濃縮成摘要,供檢索系統使用,以便有針對性地從資料庫中檢索廣告。
只有在深入理解使用者意圖後才刊登廣告,才能為使用者與廣告主帶來更好的效果。多個查詢可以保留意圖的不同面向。例如,規劃旅行的對話可能包含交通、住宿或活動等不同需求。檢索系統可以保留這些差異,而不是將整段對話壓縮成單一字串。
舉例來說,我們來看看一段可能涉及登山鞋的對話:
去優勝美地玩兩天,應該安排哪些景點?
下週會冷嗎?
[insert brand] 有哪些新產品系列?
雖然使用者沒有將鞋子品牌的問題與優勝美地之旅連結起來,但在我們的廣告系統中,這段對話可能會以兩個查詢表示,例如 [shoes appropriate for hiking trip] 和 [new [brand] product lines good for travel]。這可能只是第一次嘗試;協調器的設計會反覆調整這些表示方式,直到在廣告庫存中找到對使用者極具價值的廣告。
檢索的目的,是刻意建立涵蓋廣泛選項的廣告池。候選廣告可以來自不同的檢索策略,後續再於相同的投放限制下競爭。我們建立多個索引,針對不同的系統與產品限制進行最佳化。例如,產品動態饋給廣告的索引在擷取最佳廣告時,會考量產品的正面或負面評價;這項考量則不適用於可能沒有相關評價的其他廣告。每個索引都針對某種近似最近鄰(ANN)搜尋進行最佳化,並使用代表使用者意圖的嵌入向量。這種 ANN 搜尋是用於大型語意索引檢索的近似演算法。它不追求「唯一正確」的解,而是迅速取得接近理想的結果,在保留大多數相關候選廣告的同時,快速擷取廣告。
在廣告檢索過程中,廣告系統會使用改寫後的查詢建立語意嵌入向量,產生涵蓋廣泛選項的候選廣告池。
篩選的目標,是排除所有在相關性、出價與預算方面未達刊登門檻的候選廣告。依候選廣告與設定而定,篩選檢查可能包括素材與廣告活動的可用狀態(活動或廣告素材是否啟用)、廣告活動的指定目標(例如允許在哪些地區投放)、政策限制(可刊登內容的合規要求)、可用預算(活動是否還有預算可用)、投放節奏(活動應在現在還是當天其他時段花費預算)、版位相容性(這則廣告適合出現在哪些類型的對話中),以及廣告主與活動層級的去重處理(為每位廣告主選取適當數量的廣告,確保各家企業公平參與)。
通過資格檢查的候選廣告會進入評分階段。協調器透過工具呼叫使用各種評分系統,考量語意相關性(廣告是否符合使用者目標?)、預測互動情形(廣告是否可能被觀看、點擊,並轉換成廣告主期望的成果?),以及歷來成效(廣告迄今向使用者曝光時,表現是否良好?)等投放因素。協調器也會在競價前篩選廣告,確保相關性與安全性。這些系統會縮小候選廣告池,為競價做好準備,但仍不決定最終遞送的廣告。
協調器會根據對話脈絡評估已備妥的候選廣告,選出足夠合適、可進入最終競價的廣告。協調器不會直接決定投放哪則廣告,也不會設定價格。它會提名符合脈絡的候選廣告,交由競價工具評估。
競價階段會套用最終投放機制,包括競價准入(通過相關性與價值的最低門檻)、投放節奏(更均勻地花費廣告預算)、出價與競價特徵計算、品質調整後的排序、定價,以及最終選擇。
競價結束後,廣告仍可能因兩種情況而無法遞送,兩者都是 ChatGPT 這種對話媒介特有的情況。
廣告出現在聊天中可能不合宜:即使誠信模型(判斷何時適合投放廣告的模型)已判定對話本身可安全刊登廣告,而且廣告本身也符合政策,在某些對話脈絡下,這則廣告仍可能顯得不合宜。協調器會阻止這些廣告顯示。
廣告請求可能未及時送達:如果 ChatGPT 模型已準備好回覆,但廣告尚未準備好刊登,廣告請求就會逾時,廣告也不會遞送。因此,廣告系統的目標之一就是盡可能快速運作。ChatGPT 模型的回覆時間會動態變化,而我們不會為了等待廣告載入而延遲聊天回覆。
通過上述所有檢查後,我們會將廣告傳送至前端進行呈現。我們將這視為伺服器端的廣告遞送,但廣告仍可能不會向使用者顯示,而這是刻意的設計。
在 ChatGPT 這類對話式產品中,伺服器端遞送了廣告素材,並不保證廣告一定會顯示;廣告還必須及時送達,才能納入當前這一輪對話。廣告素材包含標題、說明、到達連結,以及任何行動呼籲。此外,廣告系統也會傳回由模型產生的引言,以簡短、中立的文字說明廣告與對話的關聯。將引言與廣告素材分開,既能保留廣告主的訊息,也能維持 ChatGPT 的中立語氣。
ChatGPT 前端會收到打包在一起的引言與廣告素材。如果內容在 ChatGPT 回覆完全生成前送達,前端就會將廣告顯示在 ChatGPT 回覆下方,並清楚標示為贊助內容。如果送達時間太晚,該輪對話就不會顯示廣告。這就是伺服器端廣告遞送與使用者實際看到廣告曝光之間的差別。
選出勝出廣告與遞送廣告是兩個獨立事件。選中的廣告必須經 ChatGPT 核准並顯示於版位,且收到遞送確認後,才算完成遞送。
我們的廣告技術堆疊採用傳統的記錄與資料管線,主要帶來三項好處:廣告主更容易將既有系統與我們的技術堆疊整合、能利用報表資料改善策略,而我們的團隊也能找出系統有待改善之處。除了這些報表與最佳化工具,我們也部署高品質模型,評估遞送成效並訓練其他廣告模型,建立強大的自我改進循環。
詳細分析各個環節發生的情況,能幫助我們分別理解並改善廣告系統的每個部分。記錄處理系統也會記下細部結果,例如:
該輪對話不符合廣告刊登資格。
廣告工作階段已啟動,但未提出檢索請求。
檢索未傳回任何候選廣告。
已檢索到候選廣告,但資料補全失敗或未通過資格檢查。
廣告已遞送,之後也獲得了互動。
這些詳細分析有助於我們分別改善廣告投放系統的每個部分。改善廣告機會偵測所需的依據,與改善檢索、候選廣告品質、競價參與或遞送可靠性所需的依據各不相同。
遞送、投放與品質系統各自觀察生命週期中的不同環節。受隱私控管的處理程序則決定哪些資料可用於成效衡量與模型改進。
以模型進行評估的理念,是讓我們能力最強、推理能力最高的模型觀察並評判系統結果,再透過訓練改善後訓練 LLM 的表現。例如,只要由最強大的模型蒐集回饋,並訓練較小的模型盡可能做好工作,我們就能使用更小、更有效率或推理能力較低的模型來執行協調或檢索任務。
我們會蒐集使用者的點擊與隱藏等真人回饋,並據此採取行動,也會透過使用者問卷,以及廣告管理平台取得廣告主的直接回饋。在開發過程中,我們的團隊也隨時接受回饋,直接聆聽 ChatGPT 使用者與廣告主的需求。相較於模型觀察產生的回饋,這些真人回饋對我們方向的影響更大,也是我們能快速迭代、做出正確產品決策的原因之一。模型或許能理解使用者意圖,運用批判性思考提供有價值的內容,但什麼才算得體,仍由人來定義。
一年前,我們還沒有廣告系統,只有少數人在思考這個領域的問題。如今,我們已擁有穩健的廣告系統,由以 LLM 為基礎的協調器執行廣告流程,支撐超過 10 億美元的年化營收規模。Codex 大幅提升了團隊效能,是我們得以從零建構系統,並以前所未有的速度達成這項重大使用里程碑的關鍵。從一開始,我們就圍繞 Codex 安排團隊與開發工作流程,以快速建置並擴展系統。我們為 Codex 建立了防護機制,讓它能可靠且安全地交付程式碼。同時,我們也為 Codex 設置資料基礎架構外掛程式,大幅縮短從蒐集洞見到落實系統改進的循環,包括推出新產品功能、提升品質,以及改善系統效能。
我們依據廣告原則訂定系統邊界,再結合以 LLM 為基礎的協調器,讓廣告真正有用,而不必將每段對話都視為廣告請求。展望未來,我們會繼續試驗更具動態互動性的廣告格式,提升使用者價值(例如讓使用者能透過廣告直接與企業對話)與廣告主價值。這套技術堆疊以 OpenAI 模型為基礎,透過持續的回饋循環自我改進,將讓我們能更快地持續提升相關性與個人化程度。



