内容提要
JetBrains Research 发布 Koog Agents 优化库,可自动优化 Koog 智能体的提示词。用户只需标记需调优的步骤、提供训练集和评分函数,库便运行智能体并生成改进后的指令 JSON 文件,无需重写代码。以 GEPA 优化器在隐私基准 PUPA 上的实验为例,智能体得分从 81.19 提升至 94.22。库还提供 BootstrapFewShot、MIPROv2 和 ACE 三种优化器,接口统一,可轻松切换。
延伸解读
优化器如何工作:从失败中学习
GEPA 优化器会运行智能体并收集每次运行的结果,然后让一个反思模型分析失败和成功的原因,据此提出改进的指令。它会在预算内多轮迭代,并同时保留多个候选指令,避免过早丢弃在困难样本上表现更好的版本。整个过程只需要作者提供一个评分函数,返回分数和简短反馈,其余由优化器自动完成。
实际效果与统计显著性
在 PUPA 隐私基准上,GEPA 将智能体得分从 81.19 提升到 94.22,提升约 13 分。这两个数字都是五次运行的平均值,且提升具有统计显著性。值得注意的是,基线本身已经较高,优化仍能带来明显改进,说明该方法在接近上限时依然有效。
四种优化器的选择与切换
除了 GEPA,库还提供 BootstrapFewShot、MIPROv2 和 ACE。BootstrapFewShot 从成功运行中挖掘示例,不额外调用 LLM,是最便宜的起步选项;MIPROv2 同时搜索指令和示例;ACE 则积累洞察形成 playbook。它们共享统一的 train 和 loadOptimizedAgent 接口,切换只需更换构造函数,周边代码无需改动。
使用前提与当前限制
要使用该库,需要将待调优步骤的构建器从 subgraphWithTask 换成 optimizableSubgraphWithTask,并把指令提取为独立参数。优化器需要训练集和评分函数,且 GEPA 的 numRollouts 建议设为训练集大小的 6 到 20 倍。目前 optimizable-subgraph 支持位于 Koog 的一个分支中,尚未合并到上游,使用时需注意依赖来源。
Q&A
Koog Agents Optimization Library 是什么?它主要解决什么问题?
Koog Agents Optimization Library 是 JetBrains Research 开发的研究库,用于优化 Koog 智能体的提示词。它允许你编写每个指令的初版,标记需要调优的步骤,提供训练集和评分函数,然后库会运行智能体并生成改进后的指令 JSON 文件,无需重写智能体代码。
如何使用 Koog 优化库来优化智能体的提示词?具体步骤是什么?
首先,用 optimizableSubgraphWithTask 替换 subgraphWithTask 来标记可优化步骤,并将指令提取为参数。然后,提供训练集和评分函数(返回分数和简短总结)。接着,选择优化器(如 GEPA)并调用 train 方法进行训练。最后,用 loadOptimizedAgent 加载优化后的智能体。
GEPA 优化器在 PUPA 基准上的效果如何?提升了多少?
GEPA 优化器将智能体在 PUPA 基准上的得分从 81.19 提升至 94.22,提高了 13 分。这两个数字是五次运行的平均值,且提升具有统计显著性。
Koog 优化库除了 GEPA 还有哪些优化器?它们有什么区别?
还有 BootstrapFewShot、MIPROv2 和 ACE。BootstrapFewShot 从成功运行中挖掘演示,是最便宜的选项;MIPROv2 搜索指令和演示;ACE 积累见解手册,随系统提示一起使用,适合让智能体积累知识。它们接口统一,可轻松切换。
GEPA 优化器是如何工作的?它需要作者提供什么?
GEPA 在训练集上运行智能体,让第二个模型查看错误并请求更好的指令,然后尝试新指令并重复多轮。它需要作者提供一个函数,给定一次运行返回分数和简短总结,分数决定候选指令的存活,总结文本供第二个模型阅读。
优化后的指令与原始指令相比有什么变化?能举个例子吗?
优化后的指令从两行模糊描述变为 4,456 字符的详细指令,包含占位符词汇、领域特定规则(如避免暴露教授姓名和课程代码)以及整体策略(确保零泄漏同时保留足够细节)。这些细节都来自运行过程,而非人工编写。