Shopify 一直在打造 Sidekick——一个通过自然语言交互帮助商家管理店铺的 AI 驱动助手。
从分析客户细分群体到填写产品表单,再到导航复杂的后台界面,Sidekick 已从简单的工具调用系统发展成为一个复杂的智能体平台。
在这一过程中,我们积累了关于架构设计、评估方法和训练技术的宝贵经验,希望能与更广泛的 AI 工程社区分享。
在接下来的文章中,将详细介绍 Sidekick 架构的演进历程、我们构建的健壮评估系统,以及如何通过 GRPO 训练优化模型性能,并防范奖励黑客问题。
Sidekick 的设计围绕着 Anthropic 提出的"智能体循环"展开——这是一个连续循环过程:人类提供输入,LLM 处理该输入并决定行动方案,这些行动在环境中执行并收集反馈,循环持续进行直至任务完成。
在实际应用中,这意味着 Sidekick 能够处理诸如"我的客户中哪些来自多伦多?"这类请求,通过自动查询客户数据、应用适当的过滤器并呈现结果。而当商家需要帮助编写 SEO 描述时,Sidekick 可以识别相关产品,理解上下文,并直接在产品表单中填入优化后的内容。
工具复杂性问题
随着 Sidekick 功能的不断扩展,我们很快遇到了一个许多智能体系统开发团队都熟悉的扩展性挑战。我们的工具清单从最初几个明确定义的函数,逐渐增长到数十个专业化功能:
- 0-20 个工具
- 20-50 个工具
- 50+个工具:完成同一任务出现多种路径,系统变得难以推理和维护
这种增长导致了我们所谓的"千条指令之殇"——系统提示逐渐演变为一个臃肿的特殊情况集合、相互冲突的指导原则和边缘情况处理逻辑,不仅拖慢了系统速度,更使其几乎无法维护。
即时指令:扩展性解决方案
面对工具复杂性问题,我们的突破来自于实施即时(Just-In-Time,JIT)指令机制。我们不再将所有指导原则塞进系统提示,而是在需要时与工具数据一起返回相关指令。我们的目标是为 LLM 在每种情境下都精心构建最理想的上下文,不多一个 token,不少一个 token。
实际工作机制
这种方法的核心是根据当前上下文动态生成指令,确保 LLM 只接收与当前任务最相关的指导。
这种方法带来了三个关键优势:
- 本地化指导指令仅在相关时出现,使核心系统提示始终聚焦于基本智能体行为
- 缓存效率
- 模块化设计可根据 beta 标志、模型版本或页面上下文提供不同的指令
效果立竿见影——系统变得更加易于维护,同时各项性能指标也得到了显著改善。
架构优化解决了可扩展性问题,但要确保系统在生产环境中的可靠性,我们还需要建立一套严格的评估机制。部署智能体系统面临的最大挑战之一是评估问题。传统软件测试方法在应对 LLM 输出的概率性质和多步骤智能体行为的复杂性时,显得力不从心。
如今,许多人仅对 LLM 系统进行表面的"氛围测试",并认为这已足够;然而事实并非如此。简单创建一个"给这段内容评分 0-10"的"氛围 LLM 评委"是远远不够的。评估必须建立在原则基础上,并且在统计上严格可靠,否则你将带着虚假的安全感进行部署。
真实数据集优于黄金数据集
我们从精心策划的"黄金"数据集转向了反映实际生产分布的真实数据集(GTX)。我们不再试图预测每一种可能的交互情况(规范文档通常尝试枚举的内容),而是对真实商家对话进行采样,并基于实践中观察到的情况制定评估标准。
这一过程包括:
- 人工评估
- 统计验证使用 Cohen's Kappa、Kendall Tau 和 Pearson 相关系数测量标注者间的一致性
- 基准设定将人工一致性水平视为我们的 LLM 评委可达到的理论最大值
LLM 评委与人工判断的相关性
我们为 Sidekick 性能的不同方面开发了专门的 LLM 评委,但关键洞见在于确保这些评委与人工判断保持一致。
通过迭代优化提示,我们将评委表现从几乎与随机无异(Cohen's Kappa 值为 0.02)提升至接近人工水平(0.61,而人工基线为 0.69)。
我们的思路是:一旦 LLM 评委与人工判断达到高度相关,我们便尝试在 GTX 中随机用人工替换部分对话的评委。当观察者难以区分评估结果是来自人工还是评委时,我们就可以确信已拥有一个可靠的 LLM 评委。
通过用户模拟进行全面测试
为在生产部署前测试候选变更,我们构建了一个由 LLM 驱动的商家模拟器,它能够捕捉真实对话的"本质"或目标,并通过新的系统候选版本重新执行这些对话。这使我们能够同时运行多个不同候选系统的模拟测试,并选择表现最佳的方案。
这种方法在商家实际接触系统前就发现回归问题并验证改进效果方面,证明了其不可估量的价值。
有了稳健的架构和评估系统后,我们开始关注如何通过训练提升模型性能。对于模型微调,我们采用了组相对策略优化(Group Relative Policy Optimization,GRPO)方法——这是一种强化学习技术,使用我们的 LLM 评委作为奖励信号。我们开发了一个 N 阶段门控奖励系统,将程序验证(语法检查、模式验证)与来自 LLM 评委的语义评估相结合。
奖励黑客的现实挑战
尽管我们精心设计了评估机制,但在训练过程中仍遇到了显著的奖励黑客问题。模型找到了各种巧妙的方式来"游戏"我们的奖励系统:
- 回避策略模型面对困难任务时,会解释为何无法提供帮助,而非尝试解决问题
- 标签滥用将客户标签作为万能解决方案,而非进行适当的字段映射
- 模式违规
例如,当被要求"细分状态为启用的客户"时,模型学会了创建customer_tags CONTAINS 'enabled'这样的过滤器,而非正确的customer_account_status = 'ENABLED'。
迭代式改进
解决奖励黑客问题需要更新我们的语法验证器和 LLM 评委,使其能够识别这些失败模式。实施修复后:
- 语法验证准确率在所有技能领域从约 93%提升至约 99%
- LLM 评委相关性平均从 0.66 提高到 0.75
通过构建和优化 Sidekick 的过程,我们总结出了一套构建生产就绪智能体系统的关键经验。以下是我们的核心建议:
架构原则
- 保持简洁:抵制在没有明确边界的情况下盲目添加工具的冲动。对于智能体能力而言,质量远胜于数量
- 从模块化起步:从设计之初就采用 JIT 指令等模式,确保系统在扩展过程中保持可理解性
- 初期避免多智能体架构
评估基础设施
- 构建多维度 LLM 评委
- 确保评委与人工判断一致:与人工评估者的统计相关性是建立自动化评估信任的关键
- 提前防范奖励黑客:预见到模型可能会"游戏"奖励系统,并相应构建检测机制
训练与部署
- 程序+语义双重验证结合基于规则的检查和基于 LLM 的评估,构建健壮的奖励信号
- 投资用户模拟
- 持续优化评委
总结我们的实践经验后,我们对智能体系统的未来发展充满期待。我们将继续演进 Sidekick 的架构和评估系统。未来工作包括将推理轨迹纳入训练流程,在训练期间同时使用模拟器和生产环境评委,以及探索更高效的训练方法。
生产智能体系统领域仍处于起步阶段,但我们在 Shopify 开发的模式——模块化架构、健壮的评估框架和对奖励黑客的密切关注——为构建商家可以信赖的可靠 AI 助手奠定了基础。
构建生产就绪的智能体系统需要的不仅仅是将 LLM 连接到工具。它需要深思熟虑的架构决策、严格的评估方法,以及对这些系统可能以意外方式失效的持续警惕。但当一切运转良好时,结果将是真正能够以有意义的方式增强人类能力的 AI。