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