OpenAI 官方博客 · 2026/10/21 15:00:00
OpenAI 揭秘 ChatGPT 广告栈:基于 LLM 工具调用的有状态检索与竞价架构
OpenAI 披露了为 ChatGPT 构建的定制广告系统,核心采用后训练前沿大模型通过工具调用执行检索、排序、相关性评估及竞价。该系统引入“有状态广告会话”以捕捉跨轮次对话中演变的用户意图,旨在平衡用户体验与商业价值。
报道全文原始报道全文
本文目录13 个章节
传统广告系统的设计初衷是响应用户意图的离散单元。当用户在线搜索或浏览内容时,广告系统将查询和页面浏览量视为事件接收,并基于这些事件寻找匹配的广告。为 ChatGPT 构建广告技术栈则截然不同:用户意图是在对话过程中逐步形成的,并在多轮交互中不断演变,有时甚至不存在合适的广告投放时机。为了支持这一新范式,我们构建了一套定制化的广告投放系统。这种新型广告技术栈基于一个经过后训练(post-trained)的前沿大语言模型(LLM),该模型通过工具调用(tool calls)执行检索(识别最佳选项)、排序(预测用户参与度)、相关性评估(判断广告实用性)以及运行拍卖机制以完成最终的广告选择和定价。
我们的广告系统通过以下三个关键设计决策来应对用户目标不断演变的细微差别:1) 实现有状态的广告会话,这意味着信息会在对话的多轮之间以及多次对话中被记忆;2) 依赖一个采用工具调用架构的定制化后训练 LLM,用于解读对话上下文及潜在意图,从而有效地选择、排序和投放广告;3) 将广告选择过程与 ChatGPT 的回答生成分离,在独立的服务中运行,以防止广告影响回答内容并保持 ChatGPT 的中立语调。我们利用后训练 LLM 来编排整个广告流程,根据用户的当前轮次和对话历史,决定在合适的时间展示合适的广告。虽然引导这样一个自我改进的广告系统过去需要数年时间,但 ChatGPT Ads 在上线 不到 200 天 后就达到了 10 亿美元的年化收入运行率;自上线以来,已有超过 100,000 家广告主在 ChatGPT 上投放了广告。
智能体聊天中的广告应如何运作?
传统的广告请求通常始于一个明确定义的事件。用户提交搜索查询或打开网页,广告系统随即收到请求。这类系统相当简单:它检索潜在的候选广告,对其进行排序,运行拍卖机制以合理地为机会定价,并向用户展示最终生成的广告。然而,ChatGPT 并不会自然地产生这样具体的时刻。
在 ChatGPT 的对话中,用户带着目标而来,而非仅仅为了获取一个答案进行搜索。他们可能在规划旅行、为企业选择软件、布置家居或学习新爱好。这些需求并非在一次对话轮次中就能完全明确。ChatGPT 通常会在过程中帮助用户厘清真正重要的事项。
例如,我们的工程团队曾向 ChatGPT 咨询如何为比赛进行训练:对话始于关于跑步的一般性问题。几轮之后,他们询问了有助于训练的鞋款。随着每个约束条件的出现,对话的商业含义也在发生变化——这种个性化的上下文会跨越多个会话不断演变。如果系统仅根据第一条消息采取行动,可能会完全误解用户的意图,从而降低用户体验并造成阻碍。
构建我们的广告系统要求我们超越传统的“请求-响应”式广告架构,从零开始搭建一套广告技术栈,以便在优先保障用户信任和价值的前提下,发掘潜在的经济机会。
在不影响 ChatGPT 回答的前提下实现对话记忆
如果像传统广告系统那样将每条消息都视为独立的请求,在我们的聊天场景中将带来几个风险:1) 因过度简化而误读用户目标;2) 在用户真实需求尚未明确之前过早启动广告投放流程;3) 展示干扰而非辅助用户旅程的广告;4) 每当请求变化时低效地重新运行广告流程,产生噪音并浪费成本。因此,广告系统(包括检索、排序和投放环节)不再围绕单个事件构建,而是维护一个有状态的会话。这意味着广告会话会在符合条件的对话轮次期间持续运行,随着信息的演变进行记忆和更新。ChatGPT 会将初始请求上下文发送给广告服务器。广告系统随后跟随并适应不断发展的交互过程,而不是依赖单一的扁平化查询。
广告选择流程与 ChatGPT 的正常响应生成并行运行,以确保广告投放流程不会影响 ChatGPT 的回复内容。广告通过一个独立的系统进行过滤和筛选,该系统在消费对话数据时遵循其自身的资格、质量和投放约束条件。这一重要的架构边界——即使用不同模型和独立代码的不同服务——使得核心 ChatGPT 服务器能够专注于生成自然语言回复;与此同时,广告系统独立评估是否存在合适的广告机会,如果存在,则通过独立的投放流程准备赞助位展示。
广告流程与 ChatGPT 的回答路径并行运行。
除了保护用户体验外,这种分离还带来了一些实际影响。ChatGPT 不依赖广告系统——这些服务之间没有任何交织,也不共享内容生成模型。因此,即使广告投放系统不可用或响应缓慢,ChatGPT 的自然语言回复也不会受到任何影响。这意味着广告系统无法导致 ChatGPT 产品宕机或延迟。这种分离的另一个好处是它保持了极高的有价值广告门槛。不返回广告是一种普通且成功的结果。只有当广告明显对用户和广告主都有益时,系统才会投放广告。
LLM 解读对话并调用工具
我们广告技术栈中的另一个关键架构组件是经过后训练的大语言模型(LLM),它负责解读对话并在智能体循环中运行整个广告流程——向广告系统的核心功能发起工具调用,涵盖从检索阶段到排序、竞价,最终到投放的全过程。我们将这个 LLM 称为 编排器(orchestrator)。
广告流程的第一步是理解用户意图以启动检索过程,这是一个快速且刻意宽泛的潜在广告源获取步骤,以便后续进行过滤。增量接收对话数据会创建一个更丰富但也更具模糊性的检索问题,因为广告系统需要区分当前意图与过时的上下文信息。编排器必须解读对早期消息的引用,识别用户何时在进行假设性陈述,并避免将每一次对产品或服务的提及都视为购买请求。
广告编排器(Ads Orchestrator)利用可用的对话和用户上下文,通过迭代寻找合适的广告,并反复决定何时调用哪个工具,其根本目标是为该对话和上下文找到最恰当的广告(即在用户价值和广告主价值之间取得平衡的广告)。如果用户选择个性化广告,编排器还会参考关于用户过往对话的非敏感信息,以找到最佳匹配的广告。
广告编排器会迭代调用广告投放工具,以寻找有价值的广告。
随着对话的推进以及广告编排器获取到更多更新的信息,编排器可以基于更新后的上下文运行新一轮的工具调用,以寻找更优质的广告并将其返回给客户端;如果这些新广告及时送达,客户端便可使用它们。
编排器的设计旨在平衡用户价值与广告主价值,始终将用户利益置于首位。
广告系统由各个独立的工具组成,编排器通过迭代调用这些工具来为对话寻找最佳广告。从宏观层面来看,编排器会将对话转化为简短的文本摘要,随后将这些摘要转化为语义嵌入(Semantic Embeddings,即便于广告系统筛选的存储含义),利用这些语义嵌入检索候选广告,根据资格标准(基于预算、用户设置及其他初步检查)对候选广告进行过滤,评估其质量和相关性,并进行最终排序,以确定在聊天回复末尾展示的高价值机会。因此,每一则广告都必须在资格和相关性方面达到高标准,才有资格被展示。
准备捕捉意图的检索查询
编排器 LLM 首先准备一个或多个代表相关商业意图的查询。这可能包括重写对话上下文,以拓展超越一对一搜索查询的商业可能性,然后创建语义表示——在此过程中,编排器将多轮对话提炼为供检索系统使用的摘要版本,从而以聚焦的方式从我们的数据库中检索广告。
如果广告展示仅基于对用户意图的深度理解,那么这对用户和广告主而言都是更好的选择。多个查询可以保留意图的不同方面。例如,一次关于规划旅行的对话可能包含与交通、住宿或活动相关的不同需求。检索系统能够保留这些细微差别,而不是将整个对话压缩成一个字面字符串。
让我们以一段关于徒步鞋的潜在对话序列为例:
- 去优胜美地国家公园进行为期两天的旅行,我应该准备哪些物品?
- 下周天气会冷吗?
- [插入品牌] 的新产品线有哪些?
尽管用户并未将询问鞋类品牌的问题与优胜美地之旅直接关联起来,但在我们的广告系统中,这段对话可能会被表示为两个查询,例如 [适合徒步旅行的鞋子] 和 [适合旅行的新 [品牌] 产品线]。这可能只是初步尝试;编排器(orchestrator)的设计旨在对这些表示形式进行迭代优化,直到在我们的库存中找到对用户极具价值的广告。
检索可能的广告
检索是创建一个刻意宽泛的广告选项池的过程。候选广告可能来自不同的检索策略,随后在相同的投放约束条件下进行竞争。我们构建了多个索引,以针对不同的系统和产品约束进行优化(例如,用于产品 Feed 广告的索引在设计上会考虑正面或负面的产品评论,以便获取最佳广告。这对于那些没有关联评论的其他广告并不适用)。每个索引都针对某种版本的近似最近邻(ANN)搜索进行了优化,使用代表用户意图的嵌入向量。这种 ANN 搜索是一种针对大型语义索引的近似检索算法,意味着广告获取速度极快,它寻求的是接近最优解而非“绝对正确”的解,同时保留了大部分相关候选项。
广告系统在广告检索过程中利用重写后的查询生成语义嵌入,从而产生一个宽泛的广告候选池。
过滤不合格候选项
过滤的目标是剔除所有在相关性、出价和预算方面未达到投放标准的广告候选项。根据候选项和配置的不同,过滤检查可能包括:创意与活动可用性(即广告活动或广告创意是否处于激活状态)、活动定向设置(例如,允许活动在哪些地区运行)、政策限制(关于可投放内容的合规要求)、预算可用性(活动是否仍有剩余预算可供消耗)、投放节奏控制(即当前时段是否应消耗预算,还是留待一天中的其他时段)、版位兼容性(该广告适用于哪些类型的对话场景),以及广告主和活动级别的去重处理(为每个广告主选取适当数量的广告,以确保各企业的公平参与)。
评估相关性与质量
通过资格检查的候选项将进入评分阶段。在此阶段,编排器会调用各类评分系统来处理投放考量因素,例如语义相关性(广告是否与用户目标相关?)、预测互动率(广告是否可能被浏览、点击并转化为广告主期望的结果?)、历史表现(该广告此前向用户展示时的效果如何?)。此外,编排器还会在竞价前对广告进行筛选,以确保其相关性和安全性。这些系统将候选范围缩小至一个更小的、准备就绪的竞价池,但它们仍不决定最终投放的广告。
执行广告竞价
编排器会在对话语境下评估已准备好的候选项,并选择那些足够合理、可进入最终竞价的广告候选项。编排器并不直接决定投放哪条广告,也不设定价格;它仅提名符合语境的候选项,交由竞价工具进行评估。
竞价环节应用最终的投放机制,包括竞价准入(达到相关性和价值的最低阈值)、投放节奏控制(使广告预算消耗更加均衡)、出价及竞价特征计算、基于质量调整的排序、定价以及最终选择。
最终资格检查
竞价结束后,广告可能因两种特定于 ChatGPT 对话媒介的原因而无法投放。
-
广告在对话中可能显得不合时宜:即使对话本身已通过完整性模型(用于判断何时适合投放广告的模型)的安全评估,且广告内容也符合政策要求,但在某些特定对话语境下,广告仍可能显得突兀或不恰当。编排器(Orchestrator)会拦截此类广告,使其不予展示。
-
广告请求可能无法及时送达:如果 ChatGPT 模型已准备好生成回复,但广告尚未就绪,则广告请求将超时,导致广告无法交付。因此,广告系统的一个核心目标是尽可能提高运行速度。ChatGPT 模型的响应时间是动态变化的,我们不会为了等待广告加载而延迟聊天回复的发送。
如果上述所有检查均通过,我们将把广告发送至前端进行渲染。这被视为服务端广告 交付(delivery),但我们仍可能不会向用户展示该广告——这是有意为之的设计。
最后一步:向用户展示广告
在 ChatGPT 这类对话式产品中,服务端交付广告素材并不保证广告一定会被展示;广告还必须在当前轮次结束前及时到达才能被包含在内。广告素材包括标题、描述、落地页链接以及任何行动号召(Call to Action)。此外,广告系统还会返回一段由模型生成的前言(preamble),这是一段简短、中立的介绍,旨在解释广告与当前对话的关联。将前言与广告素材分离,既保留了广告主的信息原貌,又维持了 ChatGPT 的中立语调。
ChatGPT 前端会将前言和广告素材作为一个整体接收。如果它们在 ChatGPT 完全生成回复之前到达,前端会在 ChatGPT 回复下方展示该广告,并明确标注为“赞助内容”。如果它们到达得太晚,则该轮次不展示广告。这就是服务端广告交付与面向用户的广告曝光之间的区别。
胜出选择与交付是两个独立的事件。只有当 ChatGPT 批准并展示该广告位,且交付得到确认后,选中的广告才成为一次有效的交付。
我们的广告技术栈采用传统的日志记录和数据管道,这带来了三大主要优势:广告主可以更轻松地将现有系统与我们的技术栈集成;广告主可以利用报告数据优化投放策略;我们的团队能够发现系统中需要改进的环节。除了这些报告和优化工具之外,我们还部署了一个高质量模型来评估广告投放效果并训练其他广告模型,从而形成一个强大的自我改进闭环。
对发生情况的详细拆解有助于我们独立理解和改进广告系统的各个部分。日志处理系统还会记录细粒度的结果,例如:
- 该轮对话不符合广告投放资格。
- 广告会话已启动,但未请求检索。
- 检索未返回任何候选广告。
- 已检索到候选广告,但在填充(hydration)或资格验证阶段失败。
- 广告已成功投放,并在后续获得了用户互动。
这些详细的拆解数据帮助我们独立改进广告投放系统的各个组件。提升机会检测能力所需的证据,与提升检索质量、候选广告质量、竞价参与度或投放可靠性所需的证据截然不同。
投放、服务和质量系统观察的是生命周期的不同阶段。隐私受控的处理流程决定了哪些数据可用于衡量指标和改进模型。
高性能模型评估并优化整个技术栈
基于模型的评估理念在于:由我们最强、推理能力最高的模型来监控和评判系统的运行结果,进而通过训练来提升后训练 LLM 的表现。例如,如果最强大的模型负责收集反馈并训练小型工作模型以尽可能出色地完成任务,那么我们在编排或检索环节就可以使用更小、更高效或低推理成本的模型。
人类反馈引导品味方向
我们收集并响应用户提供的人类反馈(如点击和隐藏操作),以及针对用户的调研和来自广告主的直接反馈(通过 Ads Manager)。在构建过程中,我们也保持团队开放以接收反馈,并直接倾听 ChatGPT 用户和广告主的需求。这种反馈来源比模型的观察性反馈更能指引我们的发展方向,也是让我们能够快速迭代并做出正确产品决策的关键因素之一。虽然模型能够理解用户意图并进行批判性思考以交付有价值的内容,但塑造“品味”的终究是人。
下一步计划
一年前,我们还没有广告系统,只有少数人在思考这一领域的问题。如今,我们已拥有一个稳健的广告系统,其年化运行率(annualized run rate)超过 10 亿美元,并由基于 LLM 的编排器(orchestrator)驱动整个广告投放流程。Codex 是根本性的力量倍增器,使我们能够以无与伦比的速度引导并扩展系统,从而达成这一重大使用里程碑。从一开始,我们就建立了团队和开发工作流,利用 Codex 快速构建和扩展系统。我们为 Codex 设置了护栏(guardrails),以确保代码可靠且安全地发布。与此同时,我们为 Codex 配置了数据基础设施插件,大幅缩短了从洞察收集到系统改进落地的循环周期,包括新功能、质量提升以及更好的系统性能。
我们系统的边界(植根于我们的广告原则)与基于 LLM 的编排器的结合,让我们能够在不将每次对话都视为广告请求的前提下,使广告变得有用。展望未来,我们将继续尝试更多动态广告格式,以提升用户价值(例如让用户能够通过广告直接与商家对话)和广告主价值。该堆栈的自我改进架构建立在 OpenAI 模型之上,并配有持续反馈循环,这将加速我们不断提升相关性和个性化水平的能力。