OpenAI 揭秘 ChatGPT 广告系统原理:如何能精准插入广告,又不改变回答效果
一条广告要经过意图理解、检索、评分和竞价,即使胜出,也可能因为语境不合适或来得太晚而不展示。
ChatGPT 已经开始卖广告了。当你用它规划旅行、挑选软件或讨论新爱好时,回答下方可能会出现一条明确标注“赞助”的商品或服务推广。这是 OpenAI 商业模式的一部分,商家可以付费在 ChatGPT 中投放广告。
图中 Headline 对应标题,Description 对应说明,Creative 对应右侧图片。来源:OpenAI 帮助中心的广告素材示例。
ChatGPT 广告系统,就是负责挑选、安排这些广告的一套后台系统。它要结合对话判断有没有合适的广告机会、该选哪条,以及能否在这轮回答下方展示。
随之而来的疑问是:我只是聊跑步,它怎么判断我想不想买鞋?如果商家付了钱,ChatGPT 会不会在回答里偏向赞助品牌?它会不会为了等广告选好,让我多等一会儿?
OpenAI 最近公开了这套系统的工程原理:广告怎样跟着多轮对话理解需求,又怎样与回答生成分开运行。
为什么不能把每条消息当成一次广告请求?
搜索广告有一个比较明确的起点:用户提交搜索词,系统据此检索候选、排序、竞价,再展示广告。在 ChatGPT 里,人们可能先说想准备一场比赛,聊了几轮才问到训练鞋。最初的跑步咨询,并不自动等于购买装备。
OpenAI 工程团队举的正是这样的例子:从一般的跑步问题,逐步聊到适合训练的鞋。随着目标、条件和偏好不断补充,广告系统需要重新判断此刻的需求,不能一直拿第一条消息代表整段对话。
如果每轮都被压成一个孤立查询,广告可能出现得太早,系统也会反复做相似的工作。为此,OpenAI 引入了有状态的广告会话:把已经出现的相关信息记下来,收到新上下文时继续更新,而不是每次从头猜。
这里的“状态”可以理解为系统手里不断更新的一份需求记录:前面聊了什么,当前又补了什么条件,哪些信息已经过时。能记住信息,也要会判断信息是否还适用;随口提到一个品牌、讨论一个假设,都不该直接当成购买请求。
双轨独立:为什么“懂我”和“不干扰回答”能同时成立?
广告能结合对话找商品,会不会反过来让 ChatGPT 在回答里偏向赞助商?OpenAI 披露的做法,是把两条工作路径分开:回答由核心 ChatGPT 服务生成,广告由另一套服务筛选;两边使用不同的模型和代码,不共享内容生成模型。
图中没有从广告选择返回回答生成的箭头。来源:OpenAI。
图里最容易忽略的是那条虚线:回答独立,不等于广告系统不读取对话。广告端会使用可用的会话上下文,判断有没有合适的商业机会;它选出的广告作为单独的赞助内容出现,而不是写进自然回答。
分开运行还意味着,广告服务慢了或不可用,回答照常生成,不需要等待广告结果。系统返回“没有广告”也是正常的成功结果。按 OpenAI 的设计,只有对用户和广告主都有价值时才交付广告;这解释了它如何隔开两条服务链路,但架构说明本身不能证明产品在任何情况下都没有偏见。
大模型当编排器,工具负责检索和竞价
OpenAI 在已有大模型上,针对广告任务进一步训练,这个过程叫“后训练”。训练后的模型在这里担任编排器。它的工作方式类似一个能调用工具的 Agent:先理解对话,再根据结果选择下一步调用哪个工具;新信息到来后,还能重新检索、评估候选。
比如前面问的是旅行路线,后面问到了某个品牌的新品,编排器需要判断两件事是否有关。它负责组织这段理解过程,检索、预算检查、评分和竞价则由对应工具执行。
大模型根据可用上下文反复调用工具;用户选择个性化后,还可考虑过去对话中的非敏感信息。
工具链里各环节回答的问题不同:检索工具先找出可能有关的广告;资格工具检查候选是否可以投放;评分工具评估相关性和预期互动;竞价工具决定最终选谁以及价格。
大模型负责理解语言和调度这些能力,不直接决定最终赢家,也不自己定价。到了竞价环节,它的角色是向竞价工具提名合适的候选。
意图改写与多路检索:不把每句话都当成购买指令
当用户展开多轮交流时,编排器首先需要把复杂的语境改写为适合广告索引检索的表示形式。
以官方披露的优胜美地两日游为例:
- 第 1 轮:用户询问优胜美地两日游的游览路线;
- 第 2 轮:用户追问下周当地会不会很冷;
- 第 3 轮:用户随口询问某个户外品牌最近是否有新产品线。
在这个例子里,用户没有明确说要买鞋。编排器可以把行程与品牌新品这些线索串联起来,尝试与徒步出行有关的检索,而不是把三轮对话直接拼成一串搜索词。可能的查询包括:
[适合徒步旅行的鞋类][该品牌适合出行的新品系列]
这些文字查询随后被编码为语义向量,也就是用一串数字表示含义,让系统能在广告库里寻找意思接近的内容。“徒步旅行的鞋”不必和广告文案逐字相同,也能找到相关候选。
检索使用近似最近邻搜索(ANN):快速找出大致接近的选项,尽量保留多数相关候选,而不是穷举所有广告、寻找唯一最优解。系统有多个索引,分别适应普通广告、商品广告等需求;商品广告索引还会把商品的正面和负面评价纳入考虑。
普通广告、商品广告和其他可选策略提供不同来源的候选;汇合后的名单还不是最终赢家。
候选池形成后,要过三层不同的判断:
- 能不能参选。广告和活动是否仍有效、投放地域是否匹配、是否满足政策要求、预算是否还有余额、现在该不该花这笔预算、能否出现在这种对话版位,以及是否需要按广告主或活动去重,避免同一广告主或活动重复占据候选。预算节奏控制,是避免把预算不合时宜地集中花掉。
- 与当前目标有多相符。评分工具评估语义相关性,预测用户会不会浏览、点击或完成购买、注册等广告主期待的“转化”,也参考广告的历史表现。相关、安全的候选才能继续进入竞价准备。
- 最终选谁、价格多少。编排器提名后,竞价工具执行最低相关性与价值准入、预算节奏、质量调整后的排序、定价和最终选择。出价参与决策,质量也参与;原文没有公开具体竞价公式。
所以,“找到了徒步鞋广告”只是第一步。它还要符合投放条件、与此刻需求相关,并在竞价中获得展示机会。
竞价胜出为什么不等于真正展示?时钟竞争与展示回执
一条广告赢得竞价后,仍然可能不出现在本轮回答下方。对话产品还要考虑两个问题:此时放广告合不合适,以及广告是否赶得上这次回答。
原文把广告包由服务器发往前端称为服务端交付(server-side delivery),但“服务器发出了”与“用户看到了”仍是两个阶段。
读图顺序是:选中 → 宿主检查 → 标注赞助并展示 → 确认与回执 → 记录成功交付。被拒绝或中断的广告会被放弃。
回答结束前没赶到,本轮就不展示
ChatGPT 生成回答所需的时间是动态的,广告流程必须在这个窗口里完成。前端只有在回答完全生成前收到广告包,才会在本轮显示它;如果到得太晚,就不展示。回答不会为了广告停下来等。
广告合规,也可能不适合当前语境
合规解决的是这条广告和这段对话是否满足基本投放要求;但把两者放在一起,仍可能显得不合适。即使广告已经赢得竞价,编排器也可以因为当前语境不适合而阻断它。这是竞价之后的另一道检查。
广告出现在哪里,系统怎样确认交付?
广告系统返回的包里,既有标题、描述、目标链接和行动按钮等广告创意,也有模型生成的一段简短中性前言,解释广告与这段对话的关系。前言与广告创意分开,保留广告主的信息,同时避免把商家的宣传口吻混进 ChatGPT 的回答。
示例中,聚餐建议之后出现了食品广告,卡片列出商品图片、价格和烹饪时间。来源:OpenAI 官方界面示例。
前端把广告放在回答下方,并明确标注赞助。按官方时序图,展示端确认后,ChatGPT 再向广告系统回传交付确认,系统才记录成功交付。竞价胜出、服务器发出、实际展示和收到回执,要分别看待;这些步骤本身没有说明采用哪种计费方式。
教学示意 · 沿用原文流程,非投放实测
同一条胜出广告,可能有三种去向
假设竞价已选出一条广告。改变下面的条件,看看它能走到哪一步;回答生成始终独立继续。
- 1竞价胜出
竞价工具选出广告,仍需通过后续检查。
- 2语境检查
合适,继续准备下发。
- 3前端接收
及时到达,可以在本轮展示。
- 4展示与回执
回答下方标注赞助;展示后确认并回传成功交付。
结果:展示并确认交付。回答路径照常运行。
语境不合适:即使广告本身合规、竞价胜出,编排器仍可阻断。
到得太晚:本轮不展示,回答不会停下来等广告。
数据流向、隐私控制与闭环演进
广告系统的可持续性依赖于客观的数据度量,但对话产品的核心资产是用户的隐私信任。
下方两种输出分别是聚合测量,以及允许用于模型改进的数据;图中没有给出具体脱敏技术或数据保留期限。
隐私边界与个性化开关
广告端使用当前对话上下文;如果用户选择个性化广告,编排器还会考虑过去对话中可用的非敏感信息。这是利用历史信息的明确前提,不能据此推断内部如何存储、隔离或清除每一种数据。
OpenAI 在广告原则中承诺:广告主不能查看用户的私密对话,用户数据也不会被出售给广告主;用户可以关闭个性化,并随时清除用于广告的数据。广告系统能利用上下文,与广告主能直接拿到聊天记录,是两件不同的事。
左图可见 Personalize ads(个性化广告)与 Past chats and memory(过去对话与记忆)两个开关。来源:OpenAI 官方界面示例。
系统怎么知道该改哪一环?
广告流程可能停在不同阶段,也可能顺利完成:这一轮本来不适合广告;启动了会话但没有检索;检索没找到候选;候选没通过资格检查;或者广告已经展示,随后收到了用户互动。日志把这些结果分开记录,才能判断该改善机会识别、检索质量、候选筛选还是交付可靠性。
OpenAI 还用推理能力更强的模型评估系统结果,再以反馈训练广告模型。这样可以让更小、更高效或推理开销较低的模型承担编排、检索等工作,而不必让每个在线环节都使用最强模型。
但模型的判断不是唯一标准。用户的点击和隐藏、用户调查,以及广告主在 Ads Manager 中的直接反馈,也会推动调整。OpenAI 表示,这些人的反馈对产品方向的影响甚至超过模型的观察反馈:模型可以帮助判断相关性,广告出现得是否得体,仍要听人的感受。
规模数据与演进边界
OpenAI 此前公布,ChatGPT Ads 在上线不到 200 天时达到 10 亿美元年化收入运行率。本次工程文章又披露,自上线以来,累计已有超过 10 万广告主投放过。
年化收入运行率,是把阶段性的营收速度换算成年尺度,不代表已经收到一整年的 10 亿美元;累计投放过的广告主,也不等于当下仍在活跃投放。这两项都是公司的自报数据,说明这套系统已经承载了实际商业业务。
开发过程也用了 AI:团队从一开始就把 Codex 纳入工作流,配合代码护栏和数据基础设施插件,缩短发现问题、获取洞察到落地改进之间的循环。
OpenAI 接下来还想探索更动态的广告形式,例如让用户通过广告直接与商家交流。这属于未来探索。当前披露更值得关注的做法,是让模型负责理解变化中的需求,让工具执行检索、评分与竞价,再用服务边界和展示条件约束广告何时出现。
ChatGPT 广告系统:如何在多轮对话里既懂需求又不干扰回答
商家可以付费投放广告:它是回答下方单独标注“赞助”的商品或服务卡片。后台系统负责选广告,回答由另一条路径生成。
比如先聊优胜美地路线,再问天气、品牌新品:广告端会更新需求记录,尝试找相关商品。提到品牌并不等于想买鞋。
展示后回传确认 → 系统记录成功交付。
胜出、发出、展示、收到回执,是不同阶段。
广告侧使用当前对话;用户选择个性化后,还可考虑过去对话中的可用非敏感信息。OpenAI 承诺广告主不能查看私密对话,用户数据不出售给广告主;用户可关闭个性化并清除广告数据。
这是已披露的架构与边界,本身不能证明产品在任何情况下都没有偏见。
How we built ChatGPT’s novel ad stack for user trust and relevance
Learn how OpenAI built ChatGPT’s LLM-powered ad stack to understand conversational intent, keep ads separate from answers, and deliver relevant ads at scale.
Traditional advertising systems are built to respond to discrete units of user intent. A user searches for or views something online, the ads system receives those queries and page views as events, and the system looks for matching ads based on those events. Building an ads stack for ChatGPT was different: user intent develops across conversations and shifts over multiple turns of a conversation, sometimes without a fitting advertising moment. To support this new paradigm, we built a bespoke ads delivery system. This new type of ad stack is based on a custom, post-trained frontier LLM that makes tool calls for retrieval (identifying the top options), ranking (predicting user engagement), relevance (evaluating the usefulness of the ad), and running auctions for final ad selection and pricing.
Our ads system supports the nuance of evolving user goals by making three key design decisions: 1) implementing stateful ads sessions, meaning information is remembered across turns of a conversation and across multiple conversations, 2) relying on a custom, post-trained LLM that uses a tool call architecture to interpret a conversation’s context and underlying intent, and then effectively select, rank, and deliver ads, and 3) running the ads selection process separately from ChatGPT’s answer generation, in its own service, to keep ads from influencing answers and maintain ChatGPT’s neutral voice. We use our post-trained LLM to orchestrate the entire ads flow, determining the right ad to surface at the right time based on both the user’s current turn and conversation history. While bootstrapping a self-improving ads system like this used to take years, ChatGPT Ads reached $1 billion in annualized revenue run rate less than 200 days after launch; now, more than 100,000 advertisers have run ads on ChatGPT since launch.
How should ads work in agentic chat?
A conventional advertising request usually starts with a well-defined event. A user submits a search query or opens a webpage and the ads system receives a request. This type of system is fairly simple: it retrieves potential ad candidates, ranks them, runs an auction to appropriately price the opportunity, and shows the resulting ad to the user. ChatGPT does not naturally produce such a concrete moment.
In a ChatGPT conversation, people arrive with goals rather than a one-answer search query. They might be planning a trip, choosing software for their business, furnishing a home, or learning a new hobby. This doesn’t all happen in one turn of a conversation. ChatGPT often helps the user clarify what matters along the way.
As an example, our engineering team asked ChatGPT how to train for a race: A conversation begins with a general question about running. Several turns later, they ask about shoes to help train. The commercial meaning of the conversation changes as each constraint arrives—and this personalized context evolves across multiple sessions. A system that acted on the first message could retrieve the wrong intent entirely, potentially degrading the user’s experience and getting in their way.
Building our ads system required us to move beyond the request-response advertising architecture and build an ads stack from scratch to find potential economic opportunities while prioritizing user trust and value.
Conversation memory, without influencing ChatGPT answers
Turning every message into a standalone request, like a traditional ads system, would have carried a few risks in our chat use case: 1) misreading the user goal by oversimplifying it, 2) beginning the advertising flow too soon, before the user’s real need has become clear, 3) showing ads that get in the way of the user journey instead of supporting it, and 4) inefficiently rerunning the ads flow every time the request changes, creating noise and wasting cost. Instead of building around individual events, the ads system (consisting of retrieval, ranking, and delivery) maintains a stateful session, meaning the ads session runs for the duration of an eligible turn, remembering and updating information as it evolves. ChatGPT sends the initial request context to the ads server. The ads system follows and adapts to the developing exchange rather than relying on a single flattened query.
The ads selection process runs alongside ChatGPT’s normal response generation to ensure the ads flow doesn’t influence ChatGPT’s responses. Ads are filtered and selected through a separate system consuming the conversation under its own eligibility, quality, and delivery constraints. This important architectural boundary—different services that use separate models and separate code—lets core ChatGPT servers handle generating the organic response; meanwhile, the ads system independently evaluates whether there’s an appropriate advertising opportunity and, if so, prepares a sponsored placement through a separate serving process.
Advertising runs alongside the ChatGPT answer path.
Beyond protecting the user experience, this separation has some practical consequences. ChatGPT has no dependency on the ads system—the services are in no way intertwined and don’t share a content generation model. So if the ads serving system is unavailable or slow, ChatGPT’s organic response continues unaffected. This means the ads system can’t take down or delay the ChatGPT product. The other benefit of this separation is that it keeps the bar very high for valuable ads. Returning no ad is an ordinary, successful outcome. The system only delivers an ad if it’s clearly beneficial to users and advertisers.
An LLM interprets conversations and calls tools
The other key architectural component in our ads stack is the post-trained LLM that interprets conversations and runs the entire ads flow in an agentic loop—making tool calls to the core functions of the ads system, from the retrieval stage to ranking to auction and, ultimately, delivery. We call this LLM the orchestrator.
The first part of an ads flow is understanding user intent to start the retrieval process, which is a fast and deliberately broad sourcing of potential ads to later filter through. Receiving the conversation incrementally creates a richer but more ambiguous retrieval problem because the ads system needs to distinguish current intent from stale context. The orchestrator must interpret references to earlier messages, recognize when a user is speaking hypothetically, and avoid treating every mention of a product or service as a request to buy something.
The ads orchestrator uses the available conversation and user context, iterating to find good ads and repeatedly choosing when to call which tool with the underlying goal of finding the most appropriate ad (the ad that balances high user value and high advertiser value) for that conversation and context. If the user chooses to personalize ads, the orchestrator also considers available nonsensitive information about the user’s past conversations to find the best ad matches.
The ads orchestrator iteratively calls ads delivery tools to find valuable ads.
As the conversation progresses and the ads orchestrator gets more updated information, the orchestrator can run a fresh set of tool calls with the updated context to find better ads and return them to the client, which can then use these new ads if they arrive in time.
The orchestrator is designed to balance user value and advertiser value, always putting users first.
The ads system consists of individual tools, and the orchestrator calls them iteratively to find the best ads for a conversation. At a high level, the orchestrator turns conversations into brief text summaries, which are then turned into semantic embeddings (stored meanings that are easier for an ads system to sift through), retrieves ad candidates using those semantic embeddings, filters those candidates for eligibility (based on budget, user settings, and other preliminary checks), assesses their quality and relevance, and does a final ranking to identify high value opportunities for placement at the end of a chat response. Each ad must therefore meet a high bar on eligibility and relevance in order to be eligible for placement.
Preparing retrieval queries that capture intent
The orchestrator LLM first prepares one or more queries representing the relevant commercial intent. This can include rewriting conversation context to broaden the commercial possibilities beyond 1:1 search queries and then creating semantic representations, where the orchestrator distills a multiturn conversation into a summarized version for the retrieval system—retrieving ads from our database in a focused way.
Ad placements will be better for both users and advertisers if they only appear when there’s deep understanding of the user’s intent. Multiple queries can preserve different aspects of intent. A conversation about planning a trip, for example, might contain distinct needs related to transportation, lodging, or activities. The retrieval system can preserve these distinctions rather than compressing the entire conversation into one literal string.
As an example, let’s look at a potential conversation sequence about hiking shoes:
- What should I cover on a two-day trip to Yosemite?
- Will it be cold next week?
- New [insert brand] product lines?
Although the user hasn’t connected the shoe brand question to the Yosemite trip, this conversation might be represented in our ads system by two queries, such as [shoes appropriate for hiking trip] and [new [brand] product lines good for travel]. This might only be the first attempt; the orchestrator is designed to iterate on these representations until it finds ads in our inventory that are highly valuable to the user.
Retrieving possible ads
Retrieval is the process of creating a deliberately broad pool of ad options. Candidates may come from different retrieval strategies and can later compete under the same serving constraints. We build multiple indices that optimize for different system and product constraints (for example, the index for product feed ads is designed to be aware of positive or negative product reviews as it fetches the best possible ads. This is not relevant to other ads that may not have reviews associated with them). Each index is optimized for some version of approximate-nearest-neighbor (ANN) search, using embeddings representing the user’s intent. This ANN search is an approximation algorithm for retrieval over large semantic indices, meaning ads are fetched very quickly, getting close to a good solution rather than looking for “the right” solution, while retaining most of the relevant candidates.
The ads system uses rewritten queries to create semantic embeddings during the ad retrieval process and produce a broad pool of ad candidates.
Filtering ineligible candidates
The goal of filtering is to eliminate all ad candidates from consideration that don't meet the bar for placement when it comes to relevance, bids, and budget. Depending on the candidate and configuration, filtering checks can include creative and campaign availability (whether the campaign or ad-creatives are active), campaign targeting (e.g., which locales a campaign is allowed to operate in), policy restrictions (compliance requirements around what can be advertised), budget availability (whether or not a campaign still has budget available to spend), pacing (whether a campaign should be spending budget now versus another time in the day), placement compatibility (what kinds of conversations this advertisement is eligible for), and advertiser and campaign level deduplication (picking an appropriate number of ads per advertiser to ensure fair participation across businesses).
Evaluating relevance and quality
Candidates that survive eligibility checks move on to a scoring phase, where the orchestrator makes tool calls to various scoring systems—for serving considerations such as semantic relevance (is the ad relevant to the user’s goal?), predicted engagement (is the ad likely to get viewed, clicked, and converted into the advertiser’s desired outcome?), historical performance (has the ad performed well when shown to users so far?). The orchestrator also filters ads to ensure relevance and safety before the auction. These systems narrow the field into a smaller candidate pool ready for auction, but they still don’t determine the final delivered ad.
Running the ads auction
The orchestrator evaluates the prepared candidates in the context of the conversation and chooses which ad candidates are plausible enough to enter the final auction. The orchestrator doesn’t directly decide which ad will be served, nor does it set a price. It nominates contextually appropriate candidates for the auction tool to evaluate.
The auction applies the final serving mechanics, including auction admission (passing a minimum threshold of relevance and value), pacing (spending ad budget more evenly), bid and auction-feature computation, quality-adjusted ranking, pricing, and final selection.
Final eligibility checks
After the auction, there are two ways an ad might fail to deliver, both specific to the ChatGPT conversational medium.
- The ad might not feel appropriate in the chat: Even though the conversation itself was deemed safe for ad placement by integrity models (the models that decide when it’s appropriate to serve an ad), and the ad itself was deemed policy-compliant, sometimes the ad might feel inappropriate in the context of certain conversations. The orchestrator blocks these ads from being shown.
- The ad request might not arrive in time: If the ChatGPT model is ready to respond, but the ad is not yet ready to place, the ad request times out and the ad doesn’t get delivered. One goal of the ads system, therefore, is to run as fast as possible. The ChatGPT model response time is dynamic, and we don’t delay chat responses to wait for ads to load.
If all of the above checks are met, we send the ad to the frontend for rendering. We consider this a server-side ad delivery, but we still might not show the ad to the user—and this is by design.
The final step: showing the ads to the user
In a conversational product like ChatGPT, server-side delivery of an ad creative does not guarantee an ad will be displayed; the ad must also arrive in time to be included in the current turn. The ad creative includes the title, description, destination link, and any call to action. Additionally, a model-generated preamble, which is a short, neutral introduction explaining how the ad relates to the conversation, is also returned by the ads system. Keeping the preamble separate from the creative preserves the advertiser’s message while keeping ChatGPT’s voice neutral.
The ChatGPT frontend receives the preamble and ad creative as a bundle. If it arrives before ChatGPT's response is fully generated, the frontend displays the ad below ChatGPT’s response, clearly labeled as sponsored. If it arrives too late, the ad is not shown for that turn. This is the difference between server-side ad delivery and a user-facing ad impression.
Winner selection and delivery are separate events. A selected ad becomes a delivery only after ChatGPT approves and displays the placement and the delivery is acknowledged.
Our advertising stack uses traditional logging and data pipelines, which have three main benefits: advertisers can more easily integrate their existing systems with our stack, advertisers can improve their strategies with the reporting data, and our team can find areas of the system to improve. Beyond these reporting and optimization tools, we deploy a high quality model to evaluate our delivery and train other ads models, creating a powerful self-improvement loop.
Detailed breakdowns of what happened help us understand and improve each part of the ad system in isolation. The logs processing system also records granular outcomes such as:
- The turn was not eligible for advertising.
- An ads session started but no retrieval was requested.
- Retrieval returned no candidates.
- Candidates were retrieved but failed hydration or eligibility.
- An ad was delivered and later received an interaction.
These detailed breakdowns help us improve each part of the ad serving system in isolation. Improving opportunity detection requires different evidence from improving retrieval, candidate quality, auction participation, or delivery reliability.
Delivery, serving, and quality systems observe a different part of the lifecycle. Privacy-controlled processing determines what may be used for measurement and model improvement.
High-power models evaluate and improve the entire stack
The idea behind model-based evaluation is that our strongest, highest-reasoning models watch and judge the results of our system, then improve the post-trained LLM by training it to perform better. For instance, we can use smaller, more efficient models or lower-reasoning models for orchestration or retrieval if our most powerful model gathers feedback and trains these small workers to do the best job possible.
Human feedback steers tasteful direction
We gather and act on human feedback (clicks and hides from users), as well as surveys for users and direct feedback from advertisers through our Ads Manager. We also make our team available for feedback as we build, and directly listen to what both ChatGPT users and advertisers want. This source of feedback informs our direction even more than the model’s observational feedback and is part of what allowed us to iterate toward the right product decisions quickly. The model may be able to understand user intent and think critically to deliver something valuable, but people shape taste.
What’s next
A year ago, we had no ads system and only a few people thinking about this problem space. Now we have a robust ads system powering more than $1 billion in annualized run rate, with an LLM-based orchestrator running the ads flow. Codex was a fundamental force multiplier that allowed us to bootstrap our system to achieve this major usage milestone with unparalleled speed. From the start, we set up the team and development workflows to use Codex to rapidly build and scale the system. We built guardrails for Codex to reliably and safely ship code. In parallel, we set up data infrastructure plugins for Codex to massively tighten the loop of insight gathering and landing improvements to the system, including new product features, quality improvements, and better system performance.
The combination of our system’s boundaries (grounded in our advertising principles) and our LLM-based orchestrator lets us make advertising useful without treating every conversation as an ad request. Looking ahead, we’ll continue to experiment with more dynamic ad formats to increase user value (e.g. giving users the ability to talk directly to businesses through ads) and advertiser value. The stack’s self-improving architecture, built on OpenAI models with continuous feedback loops, will accelerate our ability to keep improving relevance and personalization over time.
