当 AI 助手回答“从苏黎世中央火车站怎么去 Sihlcity”时,真正的问题不只是付费推荐显得生硬。在一种测试流程中,助手推荐了根本不运营这段本地路线的 Megabus。GEM-Bench 把这个上线前很难回答的问题变成一套可重复测试:广告加入以后,答案是否仍然准确、自然、可信,广告是否仍然明显,以及为此需要多付出多少生成成本。
这就是 GEM-Bench 的具体问题。它是我们发表于 KDD 2026 的带广告回答生成基准,不是广告投放平台,也不是一个承诺带来更多点击的模型;它要测试的对象,是加入广告以后的完整答案。
苏黎世路线案例并列还原论文原始输出:蓝色标出广告相关文字;Ad-Chat 转向推销 Megabus,GIR-R 则保留电车路线,只加入一处 Citymapper 推荐。
图中下方不是摘要,而是论文 Figure 2 的原始输出;蓝色标出广告相关内容。Ad-Chat 在两句泛化的公共交通建议后,几乎整段转向 Megabus 推销;GIR-R 则保留 13/14 路电车的完整路线,只把 Citymapper 推荐作为一小段插入。
对正在探索 AI 搜索、聊天助手或赞助推荐的团队,GEM-Bench 可以提供一次上线前离线筛查:
- 从一个真实产品表面收集 10–20 个问题;
- 建立一份小广告库,同时放入合适与不合适的商品;
- 让同一批问题分别经过直接提示词基线和候选的分步流程;
- 比较答案质量、广告送达与生成成本;
- 人工阅读质量下降最大的五个案例,再决定实验是否值得继续。
最后得到的不是一个总榜分数,而是一组具体失败:团队可以看到哪些问题上,商业内容带来的收益不值得答案受到的损害。
设想一个具体场景:用户提出问题,助手可能掌握一段对话上下文,平台有一份可以展示的广告库。生成方法需要返回一条包含相关推荐的回答。GEM-Bench 同时追问两件事:
- 加入广告以后,答案是否仍然在帮助用户?
- 推荐是否真正被送达,又没有破坏这条答案?
这两个问题看起来理所当然,过去常用的评测却在检查不同对象。ROUGE 和 BLEU 奖励与参考答案重合,任何新插入的句子都像错误;通用模型评审可以判断流畅,却容易漏掉过度推销、突然跳出的广告或信任损失;广告文本评测能检查促销句,却不关心周围的路线、菜谱或商品比较是否仍然正确。
GEM-Bench 因此先把任务边界写清楚。输入包括用户问题、可选上下文、广告库、LLM 和需要插入的广告数量;输出是一条带广告回答,论文中称为 AIR。主实验默认问题已经适合展示广告,并且只插入一条。广告位识别、竞价和激励机制不属于这个任务。
评测基准可以理解为一场允许不同方法参加同一场考试的数据、评分标准和运行工具。GEM-Bench 把四件事放在一起:数据集、指标体系、基线流程和执行协议。
| 评测集 | 使用表面 | 主评测规模 | 广告库与问题范围 |
|---|---|---|---|
| MT-Human | 聊天助手 | 10 个问题 | MT-Bench 人文学科问题,共用 6,556 条广告目录 |
| LM-Market | 聊天助手 | 100 个抽样问题 | 1,701 个旅行、菜谱和软件工具问题;另有 1,000 个问题的稳健性实验 |
| CA-Prod | AI 搜索 | 120 个问题 | 2,215 个商品,并带有人类标注的问题-商品相关性 |
三个评测集覆盖开放对话、消费型问题和关键词式 AI 搜索,彼此互补,但并不庞大。主评测只有 10、100 和 120 个问题,这个规模本身就是解读结果时必须保留的限制。
指标被拆成三类:
- 答案质量: 回答衔接与整体一致性、准确性、自然度、个性和信任;
- 广告送达: 广告是否出现、局部衔接和相关性、由模型评估的明显程度,以及模型预测的点击可能性;
- 执行成本: 输入 token、输出 token 与模型价格估算。
六项定性评分由另一个 LLM 按固定标准,在 0、30、60、90 四档中选择。固定标准让比较可以重复,却不会把模型预测的点击变成真实点击,也不会把一项离线分数变成长期用户信任。
笔记式流程图把用户问题、可选上下文、广告库和 LLM 组合成一个完整回答,再检查答案是否仍然有用、广告是否成功送达,以及为此付出的生成成本。
论文比较了四种原始基线:
- Ad-Chat: 先选商品,把它写进系统提示词,再一次性生成最终答案;
- GI-R: 先生成不含广告的答案,从答案中检索商品,再直接插入,不做改写;
- GIR-R: 同样从答案中检索,插入后再改写;
- GIR-P: 从原始问题检索,插入后再改写。
当前软件还提供 RAG-AdChat,但这是仓库后续加入的扩展,不是论文最初的四个基线之一。
在六项 LLM 定性评分的均分上,论文报告的最佳变体把 MT-Human 从 65.10 提高到 74.70,把 LM-Market 从 63.81 提高到 73.73,把 CA-Prod 从 50.51 提高到 58.41。对应相对提升约为 14.8%、15.6% 和 15.6%。
在这三个评测集上,方法选择还取决于产品表面。对话问题更适合从已经生成的答案中检索,关键词式搜索则更适合从原始问题检索。改写提高了由 LLM 评出的自然度、个性和信任分数;不改写的 GI-R 在量化效率上更好。
左侧分组柱状图显示最佳定性方法在 MT-Human、LM-Market 和 CA-Prod 上提高均分;右侧比较显示,改写流程在最终回答前产生的额外输出 token 约为 Ad-Chat 的两倍。
图的右边故意没有写“延迟”。它统计的是最终答案之前额外生成的输出 token:改写流程的开销大约是 Ad-Chat 的两倍。真实墙钟延迟还取决于模型、服务商、批处理和网络,论文没有用这组实验建立稳定结论。
另一项实验把广告数量从一条增加到五条。随着广告变多,满意度指标持续下降,模型预测的点击信号先升后降。即使只看广告代理指标,更多库存也不会自动带来更好结果。
模型评审是否有价值,取决于它的排序与人类判断是否有关系。论文因此在 20 个问题、两种方法 Ad-Chat 与 GIR-R 上做了有限的人类研究,共有 118 位参与者、157 份有效问卷和 3,140 个评分。
人类内部的分半法 Spearman 相关系数是 0.84,人类与 LLM 的相关系数是 0.73。这支持在这组比较中使用固定评分标准,却不能证明所有数据集、所有方法或真实广告行为都已经被验证。
有限的人类研究覆盖 20 个问题、118 位参与者、157 份有效问卷和 3,140 个评分;人类分半相关为 0.84,人类与 LLM 相关为 0.73,验证的是排序一致性而不是真实广告行为。
GEM-Bench 没有解决生成式广告。它的贡献是把其中一层变成可以执行、复现和批评的研究对象:公开任务定义、三个评测集、指标实现、基线流程、模型评审提示词、token 记录和可检查的代码路径。
后续工作如何使用它,更能说明这个定位:
LLM-Auction 称 GEM-Bench 为首个带广告回答生成评测基准,同时补上 GEM-Bench 不评估的机制层:竞价与激励性质;
NaiAD 把它视为较早的显式插入评测基准,并继续构造更难、维度更正交的训练数据;
Trustworthy Commercial Intervention 使用提示词注入与插入后改写的区别,再把问题扩展到信息框架(framing)、行为引导、偏好塑造、披露与可质疑性。
更重要的学术影响在于:研究者现在有了可以共同复现、质疑和扩展的评测对象。这比“一个模型赢了榜单”更重要,也比“LLM 广告已经解决”更窄、更可信。
仓库把这条路径做成了 validate -> inject -> score -> report -> compare。
仓库内已有的示例结果可以让读者检查数据格式并比较现成输出,不需要支付模型调用费用:
git clone https://github.com/Generative-Engine-Marketing/GEM-Bench.git
cd GEM-Bench
python -m venv .venv
source .venv/bin/activate
pip install -e .
gembench ads validate examples/production/ads.json
gembench score examples/production/results-ad-chat.jsonl \
--output /tmp/ad-chat.json
gembench score examples/production/results-rag-adchat.jsonl \
--output /tmp/rag-adchat.json
gembench compare /tmp/ad-chat.json /tmp/rag-adchat.json \
--baseline ad-chat这次快速验证可以确认文件格式、广告是否出现、token 数量和价格估算,不能证明准确性、自然度或信任。
先准备最小广告库:
[
{
"name": "Citymapper",
"description": "公共交通路线规划",
"category": "travel",
"url": "https://citymapper.com"
},
{
"name": "Megabus",
"description": "城际长途汽车",
"category": "travel",
"url": "https://www.megabus.com"
}
]保存为 ads.json。再把每个问题写成 queries.jsonl 中的一行:
{"query":"从苏黎世中央火车站怎么去 Sihlcity?"}
{"query":"在苏黎世乘坐公共交通,最简单的路线规划方式是什么?"}用 OPENAI_API_KEY 和 BASE_URL 配置生成模型。向量检索可以单独使用 EMBEDDING_API_KEY 与 EMBEDDING_BASE_URL;定性模型评审可以单独使用 JUDGE_API_KEY 与 JUDGE_BASE_URL。没有单独设置时,两者会沿用主密钥和地址。再把 GEMBENCH_MODEL_NAME、GEMBENCH_EMBEDDING_MODEL 和 GEMBENCH_JUDGE_MODEL 设为对应服务真正提供的模型;仓库默认值并不假设同一家服务商同时提供三种模型。gembench diagnose 只检查所需配置是否齐全,不会实际请求端点来证明模型可用。
export OPENAI_API_KEY="<生成模型密钥>"
export BASE_URL="<生成模型地址>"
export GEMBENCH_MODEL_NAME="<生成模型名>"
export GEMBENCH_EMBEDDING_MODEL="<向量检索模型名>"
export GEMBENCH_JUDGE_MODEL="<评审模型名>"
gembench diagnose先分别生成直接提示词基线和候选方法,再比较:
for method in ad-chat gir-r; do
gembench inject \
--ad-file ads.json \
--query-file queries.jsonl \
--method "$method" \
--model-name "$GEMBENCH_MODEL_NAME" \
--embedding-model "$GEMBENCH_EMBEDDING_MODEL" \
--output "results-$method.jsonl" \
--jsonl
gembench score "results-$method.jsonl" \
--judge-model "$GEMBENCH_JUDGE_MODEL" \
--matrix has_ad \
--matrix local_flow \
--matrix global_coherence \
--matrix accuracy_evaluation \
--matrix naturalness_evaluation \
--matrix trust_evaluation \
--matrix out_token \
--matrix price \
--output "scores-$method.json"
done
gembench compare scores-ad-chat.json scores-gir-r.json \
--baseline ad-chat
gembench report scores-gir-r.json生成、向量检索和定性模型评审需要相应凭证,也会产生模型费用。最后的问题不应该是“谁的总分最高”,而应该是“在哪些问题上,商业内容带来的收益不值得答案质量和成本损失?”
GEM-Bench 提供的是带广告回答生成的离线证据。它目前不测量:
- 真实曝光、点击、转化或收入;
- 问题是否适合广告、竞价、拍卖激励或广告主效用;
- 披露方式如何改变用户理解;
- 政策合规、品牌安全或监管要求;
- 隐性的信息框架与偏好塑造;
- 长期用户信任。
论文中 CA-Prod 的“CTR”带引号是有意为之:它实际报告的是问题-商品相关性准确率,而不是真实点击率。另一项 Click 评分维度则是 LLM 预测的点击倾向。人类研究是有限的一致性检查,不是在线市场实验。这些不是应该藏在脚注里的缺陷,而是决定评测基准能支持什么决策的边界。
当研究问题是如何生成和评估一条包含显式广告的 AI 回答时,可以使用和引用 GEM-Bench。不要用它证明广告系统会带来真实点击、维持长期信任,或形成激励相容的市场。
论文、
开源评测基准 与
KDD 2026 记录 均已公开。


