DEV Community

cognitalk
cognitalk

Posted on Edited on

GEPA with Lakshya A. Agrawal - Weaviate Podcast #127! | 智能体优化的艺术:用GEPA自动化提示词工程与Logfire动态管理实战


https://www.youtube.com/watch?v=fREQrxhBSk0

智能体优化的艺术:用GEPA自动化提示词工程与Logfire动态管理实战

通俗易懂的整体解释

这篇文稿是一场技术演讲的记录。演讲者Samuel是知名开源库 Pydantic 的创始人。他主要分享了如何利用两个强大的工具来优化AI Agent(智能体):

  1. GEPA:一个自动化“提示词工程师”库。它像一个聪明的育种师,通过不断尝试、混合和改进不同的提示词,自动找到能让AI表现最好的那个“配方”。
  2. Managed Variables (管理变量):一个可以让你在不重新部署代码的情况下,动态调整AI Agent行为的“控制面板”。你可以像做A/B测试一样,实时修改Agent的指令、使用的模型等参数。

为了演示,他用了一个有趣的例子:分析英国议员的家族政治关系。通过对比普通提示词和经过GEPA优化后的提示词,展示了优化能显著提升AI的准确性(从87%提升到96.7%)。最后,他还展望了将这两者结合起来,实现Agent的“自动驾驶”式优化。


文章分段与详细要点

第一部分:开场与背景介绍 (0% - 15%)

  1. 自我介绍

    • Samuel是Pydantic开源库的创建者,目前运营着Pydantic公司。
    • 公司业务包括维护Pydantic验证库、开发Pydantic AI(一个Agent框架)以及Logfire(一个可观测性平台)。
  2. Logfire平台的定位

    • Logfire是一个通用的可观测性平台,底层基于OpenTelemetry标准,处理日志、指标和链路追踪。
    • 他不认为存在独立的“AI可观测性”品类,这只是一个会被通用可观测性或AI领域吸收的功能特性。
    • Logfire除了标准功能,还提供Evals(评估)和Managed Variables(管理变量)等特色功能。
    • 未来目标是实现从平台上自主优化Agent。
  3. 核心主题预告

    • 本次演讲将聚焦于两个核心内容:GEPA 和 Managed Variables,并尝试在最后将它们结合起来。

第二部分:核心工具介绍:GEPA 与 Managed Variables (15% - 30%)

  1. GEPA 库详解

    • GEPA是一个优化库,其名称来源于“Genetic Pareto”(遗传帕累托)。
    • 它本质上是一种遗传算法:寻找表现良好的“候选方案”(如提示词字符串),然后将它们混合、变异,产生新的、可能更优的候选方案。
    • “Pareto”部分指的是它只从当前最优的一批候选方案中进行“繁殖”,就像培育赛马一样,只挑选最好的种马来配种。
    • 它可以优化的对象是一个字符串,可以是简单的文本提示词,也可以是包含复杂配置的JSON数据。
  2. Managed Variables 详解

    • 很多平台都有“提示词管理”功能,即可以在平台上编辑文本提示词。
    • Logfire的“管理变量”更进一步:被管理的变量不限于文本,可以是任何能用Pydantic模型定义的对象。
    • 这意味着你可以动态管理Agent的指令、使用的模型、温度参数等几乎所有配置。

第三部分:演示案例:分析英国议员政治关系 (30% - 45%)

  1. 任务来源与目标

    • 受播客《The Rest Is Politics》启发,任务是分析英国议员(MPs)的维基百科页面,找出他们的祖先(而非配偶、子女等同辈或后辈)是否也是政治家。
    • 难点在于,AI模型很容易将“亲戚”泛化,难以精确区分“祖先”和其他亲属关系。
  2. 技术实现

    • 使用Pydantic AI Agent,输入是维基百科页面的HTML文本,输出是结构化的政治关系列表。
    • 使用了结构化输出(Structured Outputs)功能,类似于从邮件中提取地址、从PDF中提取发票行。
    • 准备了一个“黄金数据集”(Golden Relations),用于后续评估Agent的准确性。
  3. 现场环境设置

    • 指导听众如何克隆代码仓库、安装依赖、设置API密钥(推荐使用Pydantic Gateway以方便访问多种模型)以及连接Logfire项目。

第四部分:运行评估 (Evals) 与对比 (45% - 55%)

  1. 运行基础评估

    • 演示如何运行一个评估脚本,用一个简单的初始提示词去分析一小部分议员数据。
    • 评估结果会记录在Logfire平台,可以看到每次调用的成本、耗时和具体结果。
    • 结果显示,简单提示词的准确率约为85%。
  2. 对比不同提示词的效果

    • 运行一个对比命令,比较“简单提示词”和“专家提示词”(由人类编写的更详细的提示词)的表现。
    • 在Logfire的Evals视图中,可以直观地比较两个实验的准确率等指标。
    • 结果显示,“专家提示词”将准确率提升到了约92%。
    • 可以深入到具体的失败案例中查看差异,例如简单提示词错误地将“配偶”识别为政治关系。

第五部分:使用 GEPA 进行自动化提示词优化 (55% - 75%)

  1. GEPA 适配器 (Adapter) 设置

    • 需要创建一个GEPA适配器,其核心是定义一个“提案Agent”(Proposer Agent)。
    • 这个提案Agent本身也是一个Pydantic AI Agent,它的任务就是为原始Agent生成更好的系统提示词。
    • 由于GEPA是同步的,而Pydantic AI是异步的,代码中需要一些特殊处理来避免错误。
  2. 运行优化过程

    • 启动优化命令,GEPA会开始迭代:
      • 提案Agent根据当前最优提示词和评估反馈,提出一个新的提示词。
      • 新提示词被用于运行一次完整的评估。
      • 根据评估结果(如准确率),判断是否进入“帕累托前沿”(即成为新的最优解)。
      • 重复上述过程,直到达到预设的迭代次数或性能阈值。
    • 在Logfire中可以观察到整个优化过程的轨迹,看到提案Agent的输入(上下文)和输出(新提示词)。
  3. 优化结果与分析

    • 优化完成后,GEPA给出了一个最终的最优提示词,准确率达到了96.7%,显著高于人工编写的专家提示词(92%)。
    • 代价是这个提示词变得非常冗长,因为它试图覆盖所有可能的边缘情况。
  4. 关于GEPA的讨论与问答

    • 过拟合风险:优化可能导致Agent过度适应训练数据中的特定模式(如排除了“叔叔”、“阿姨”这类正确的亲属关系)。解决方案是需要更大、更全面的数据集。
    • 模型依赖性:优化出的提示词通常只对特定的模型有效。更换模型后,可能需要重新优化。
    • 应用场景:对于有大量私有数据、需要低成本高精度处理的场景(如金融、法律)非常有价值;对于编码Agent这类开放任务,优化难度较大。
    • 与微调的关系:提示词优化和模型微调是两种策略。对于大多数情况,优化提示词性价比更高;但对于有海量调用需求的场景,微调可能更合适。

第六部分:演示 Managed Variables 的动态调整能力 (75% - 90%)

  1. 构建一个简单的Web服务器

    • 演示了一个基于FastAPI的简单Web应用,用户可以通过表单查询议员信息。
    • 该应用的Agent行为由Logfire中的Managed Variable控制。
  2. 实时修改变量

    • 修改回复语言:在Logfire的管理变量界面中,将“回复语言”从默认改为“法语”,保存并调整流量分配至100%。再次查询时,Agent果然用法语回复。
    • 修改模型:同样地,可以轻松地将Agent使用的模型从Anthropic切换到OpenAI。
    • 整个过程无需重启服务器或重新部署代码。
  3. 结合优化结果

    • 将之前GEPA优化出的最佳提示词,通过管理变量应用到Web服务器的Agent上。
    • 尽管演示因一个小bug未能完美展示效果提升,但清晰地传达了将离线优化结果无缝应用于在线生产环境的理念。
  4. 关于用户反馈的讨论

    • 讨论了如何收集用户反馈(如点赞/点踩),以及更有效的隐式反馈方式(如观察用户的下一步操作:是满意离开还是纠正提问)。

第七部分:结尾问答与总结 (90% - 100%)

  1. 内部用例

    • Logfire内部有一个Agent,能将用户的自然语言搜索转换为SQL查询。他们持续优化这个Agent,但由于涉及私有数据,无法作为公开示例。
  2. 数据隐私与可观测性

    • 回答了如何处理敏感数据的问题。可以选择不上传原始输入/输出,只上传性能指标(如好/坏)。企业版也支持私有化部署。
  3. 技术选型

    • 解释了为何在代码中使用dataclass而不是Pydantic模型:因为在这些场景下不需要数据验证,dataclass是Python中的规范选择,且性能差异微乎其微。
  4. 更广泛的优化空间

    • 除了提示词,GEPA还可以优化Agent的其他方面,如上下文压缩策略、工具注册方式等,以适应更复杂的场景,让更小、更便宜的模型也能完成高级任务。
  5. 总结致谢

    • Samuel感谢大家的参与,并愿意在会后继续回答问题。

Top comments (0)