ChatGPT广告:200天,年化10亿美元,不拖慢你的回答
传统广告系统是为响应离散的用户意图单元而构建的。用户在线搜索或查看某些内容时,广告系统将这些查询和页面浏览作为事件接收,系统基于这些事件寻找匹配的广告。为ChatGPT构建广告系统则有所不同:用户意图在对话中逐步发展,并在对话的多个轮次中转变,有时甚至没有一个合适的广告时机。为了支持这种新范式,我们构建了一个定制化的广告投放系统。这种新型广告系统基于一个定制、后训练的前沿LLM,该模型通过工具调用完成检索(识别最佳选项)、排序(预测用户参与度)、相关性评估(评估广告的实用性)以及运行最终广告选择与定价的拍卖。
我们的广告系统通过三个关键设计决策来支持用户目标不断演变的细微差别:1)实现有状态的广告会话,即信息会在对话轮次之间和多次对话之间被记住;2)依赖一个定制的、后训练的LLM,使用工具调用架构来解释对话的上下文和潜在意图,然后有效地选择、排序和投放广告;3)将广告选择过程与ChatGPT的答案生成分离,运行在独立服务中,以防止广告影响答案并保持ChatGPT的中立语气。我们使用后训练的LLM来编排整个广告流程,根据用户当前的对话轮次和对话历史确定在合适的时间展示合适的广告。虽然从零构建这样一个自我改进的广告系统过去需要数年时间,但ChatGPT Ads在推出后不到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模型之上的自我改进架构,具有持续反馈循环,将加速我们不断提升相关性和个性化能力。