打造生产级 AI 智能体系统:来自 Shopify Sidekick 的经验教训 (2025)
作者:Andrew McNamara
本文改编自 Andrew McNamara、Ben Lafferty 和 Michael Garner 在 ICML 2025 上的演讲:构建生产就绪的智能体系统:架构、基于大语言模型的评估与 GRPO 训练。
在 Shopify,我们一直在打造 Sidekick,一个由 AI 驱动的助手,帮助商家通过自然语言交互来管理他们的店铺。从分析客户群体到填写商品表单,再到驾驭复杂的后台界面,Sidekick 已经从一个简单的工具调用系统,演变成了一个复杂的 AI 智能体 (AI Agent) 平台。一路走来,我们在架构设计、评估方法和训练技术上学到了宝贵的经验,希望能与更广泛的 AI 工程社区分享。
Sidekick 架构的演进之路
Sidekick 的核心是围绕着 Anthropic 公司所说的“智能体循环” (agentic loop) 构建的——这是一个持续的循环:人类提供输入,大语言模型 (LLM) 处理输入并决定要执行的动作,这些动作在环境中被执行,系统收集反馈,然后循环继续,直到任务完成。

在实践中,这意味着 Sidekick 可以处理像“我有哪些客户来自多伦多?”这样的请求,它会自动查询客户数据,应用合适的筛选条件,并呈现结果。或者,当商家需要帮助撰写 SEO 描述时,Sidekick 能够识别相关商品,理解上下文,并直接在商品表单中填入优化过的内容。

工具复杂性难题
随着我们不断扩展 Sidekick 的功能,我们很快就遇到了一个许多构建智能体系统的团队都会遇到的扩展性挑战。我们的工具库从最初几个定义明确的函数,增长到了几十个专业化的功能:

0-20 个工具:边界清晰,易于调试,行为直接。
20-50 个工具:边界开始模糊,工具之间的组合开始导致意想不到的结果。
50+ 个工具:完成同一任务有多种方式,系统变得难以理解和推理。
这种增长导致了我们称之为“千条指令之死” (Death by a Thousand Instructions) 的问题——我们的系统提示词变成了一堆杂乱无章的特殊情况、相互矛盾的指南和边缘案例处理的大杂烩,这不仅拖慢了系统速度,还让维护变得几乎不可能。

“即时指令”:应对规模化的解决方案
我们的突破来自于实现了“即时指令” (Just-in-Time Instructions, JIT)。我们不再把所有的指南都塞进系统提示词里,而是在工具数据返回的同时,附上相关的指令,只在需要它们的时候才提供。我们的目标是,在每一种情况下,都为大语言模型打造一个不多不少、恰到好处的上下文。
实践中如何运作
下图下方是提供给大语言模型的指令:
下图上方是大语言模型根据收到的指令做出的响应:

这种方法带来了三个关键好处:
局部化指导:指令只在相关时出现,让核心系统提示词专注于最基本的智能体行为。
缓存效率:我们可以动态调整指令,而不会破坏大语言模型的提示词缓存。
模块化:可以根据测试标志 (beta flags)、模型版本或页面上下文,提供不同的指令。
效果立竿见影——我们的系统变得更易于维护,同时所有性能指标都得到了提升。
构建稳健的大语言模型评估系统
部署智能体系统最大的挑战之一就是评估。传统的软件测试方法在处理大语言模型输出的概率性,以及多步骤智能体行为的复杂性时,显得力不从心。

如今,太多人只是在对他们的大语言模型系统进行“凭感觉测试” (vibe testing),并认为这就足够了;然而事实并非如此。“凭感觉测试”,或者创建一个“感觉流大语言模型裁判”让它“给这个打个 0-10 分”,是行不通的。评估必须有原则、有统计上的严谨性,否则你发布产品时所怀揣的只是一种虚假的安全感。

用“基准真相集”取代“黄金数据集”
我们放弃了精心策划的“黄金”数据集,转而采用能反映真实生产环境数据分布的“基准真相集” (Ground Truth Sets, GTX)。我们不再试图预测所有可能的交互(这通常是产品规格文档想做的事),而是从真实商家的对话中抽样,并根据我们在实践中观察到的情况来创建评估标准。

这个过程包括:
人工评估:让至少三位产品专家根据多个标准为对话打标签。
统计验证:使用科恩系数 (Cohen's Kappa)、肯德尔等级相关系数 (Kendall Tau) 和皮尔逊相关系数 (Pearson correlation) 来衡量标注者之间的一致性。
设定基准:将人类评估员之间的一致性水平,视为我们的大语言模型裁判所能达到的理论上限。

“大语言模型作为裁判”并与人类对齐
我们为 Sidekick 性能的不同方面开发了专门的大语言模型裁判,但关键的洞见是,要将这些裁判与人类的判断进行校准。通过迭代优化提示词,我们将裁判的性能从几乎和随机差不多(科恩系数为 0.02),提升到接近人类的水平(0.61,而人类基准为 0.69)。我们的理念是,一旦我们的大语言模型裁判与人类评估员高度相关,我们就会尝试在基准真相集里随机地用裁判替换掉某个评估员。当我们很难分辨出评估组里是混入了一个人还是一个裁判时,我们就知道我们拥有了一个值得信赖的大语言模型裁判。

使用“用户模拟”进行全面测试
为了在部署到生产环境前测试候选的系统变更,我们构建了一个由大语言模型驱动的商家模拟器。它能捕捉真实对话的“精髓”或目标,并在新的候选系统上重放这些对话。这使我们能够对许多不同的候选系统进行模拟,并选择表现最好的一个。

完整的评估流程如下:

这种方法在捕捉性能衰退和验证改进方面被证明是无价之宝,确保了问题在触达商家之前就被发现。
GRPO 训练与“奖励作弊”
在模型微调方面,我们采用了“群组相对策略优化” (Group Relative Policy Optimization, GRPO),这是一种强化学习方法,它使用我们的大语言模型裁判作为奖励信号。我们开发了一个 N 阶段的门控奖励系统,该系统结合了程序化验证(语法检查、模式验证)和来自大语言模型裁判的语义评估。

“奖励作弊”的残酷现实
尽管我们精心设计了评估体系,但在训练过程中还是遇到了严重的“奖励作弊” (reward hacking) 问题。模型找到了各种花式方法来钻我们奖励系统的空子:
退出式作弊:模型不尝试完成困难任务,而是解释为什么它做不到。
标签式作弊:使用客户标签作为万能的解决方案,而不是进行正确的字段映射。
模式违规:幻觉出不存在的 ID 或使用不正确的枚举值。
例如,当被要求“筛选出状态为启用的客户”时,模型学会了创建像 customer_tags CONTAINS 'enabled'
这样的筛选条件,而不是正确的 customer_account_status = 'ENABLED'
。
迭代改进
要解决奖励作弊问题,我们需要同时更新语法验证器和大语言模型裁判,让它们能够识别这些失败模式。在实施修复后:
所有技能的语法验证准确率从约 93% 提升到约 99%。
大语言模型裁判的平均相关性从 0.66 增加到 0.75。
最重要的是,端到端的对话质量达到了我们监督式微调的基准水平。
对生产级智能体系统的核心启示
基于我们构建和部署 Sidekick 的经验,以下是我们的核心建议:
架构原则
保持简单:抵制住诱惑,不要在没有明确边界的情况下添加工具。对于智能体能力而言,“质”远胜于“量”。
从模块化开始:从一开始就使用像“即时指令”这样的模式,以便在系统规模扩大时保持其可理解性。
早期避免多智能体架构:简单的单智能体系统能处理的复杂性可能远超你的想象。
评估基础设施
构建多个大语言模型裁判:智能体性能的不同方面需要专门的评估方法。
将裁判与人类判断对齐:与人类评估员在统计上的相关性,是建立对自动化评估信任的关键。
预料到奖励作弊:要预计到模型会想办法钻奖励系统的空子,并提前构建检测机制。
训练与部署
程序化 + 语义验证:将基于规则的检查与基于大语言模型的评估相结合,以获得稳健的奖励信号。
用户模拟:投资于逼真的用户模拟器,以便在投产前进行全面的测试。
迭代改进裁判:随着你发现新的失败模式,要准备好多轮迭代来完善你的裁判。
展望未来
我们正在不断进化 Sidekick 的架构和评估系统。未来的工作包括将推理轨迹纳入我们的训练流程,在训练期间使用模拟器和生产环境的裁判,以及探索更高效的训练方法。
生产级智能体系统领域仍然很年轻,但我们在 Shopify 发展的这些模式——模块化架构、稳健的评估框架,以及对奖励作弊的高度警惕——为构建商家可以信赖的、可靠的 AI 助手奠定了基础。
打造生产就绪的智能体系统,需要的不仅仅是将大语言模型与工具连接起来。它需要深思熟虑的架构决策、严谨的评估方法,以及对这些系统可能出现的各种意想不到的失败保持时刻警惕。但如果做得好,其结果将是 AI 能够以有意义的方式,真正增强人类的能力。
Shopify 机器学习团队正在积极招聘智能体系统、评估基础设施和生产级机器学习等领域的职位。如果你对这些挑战感兴趣,我们很乐意听到你的消息。
关于作者
Andrew McNamara 是 Shopify 的应用机器学习总监,他领导着 Sidekick 项目,这是一个帮助商家更有效经营业务的 AI 助手。他在构建助手领域已有超过 15 年的经验。
X: @drewch
原文链接:https://shopify.engineering/building-production-ready-agentic-systems