详细摘要 摘要

生成:2025-06-05 22:25

摘要详情

音频文件
2025-05-21 | PyCon 2025 | Building AI Applications the Pydantic Way (Sponsor: Pydantic)
摘要类型
详细摘要
LLM 提供商
openai
LLM 模型
gemini-2.5-pro-exp-03-25
已创建
2025-06-05 22:25:31

概览/核心摘要 (Executive Summary)

Samuel Colvin (Pydantic创始人) 在 PyCon 2025 的演讲中,详细阐述了使用 Pydantic 生态系统(包括核心库 Pydantic、智能体框架 PydanticAI 和可观测性平台 Pydantic Logfire)构建AI应用的理念与实践。他指出,尽管AI领域日新月异,但构建可靠、可扩展和可维护的AI应用仍然是核心挑战,这与传统软件开发的工程原则一脉相承。Pydantic 通过其强大的数据校验和模型定义能力,为AI应用提供了坚实的数据结构基础。PydanticAI 作为一个新兴的智能体框架,强调类型安全、模型无关性,并利用模型上下文协议 (MCP) 实现与外部工具的交互,支持结构化输出、工具调用、记忆管理等功能。Pydantic Logfire 则通过与 OpenTelemetry 的集成,为AI应用提供深入的追踪、调试、性能监控和成本分析。演讲重点介绍了 Pydantic Evals 框架,它提供了一套类似 Pytest 的机制,用于对AI模型和应用进行系统的基准测试和迭代改进,支持自定义评估器和“LLM即评判者”等高级功能。Colvin 强调了对开放标准、稳定性和清晰文档的重视,并宣布 PydanticAI 将于2025年6月底发布v1.0版本,旨在为Python开发者提供一套高效、可靠的AI应用构建方案。

Pydantic 简介与AI领域应用

  • Pydantic 核心数据与背景
    • 创始人: Samuel Colvin
    • 创建时间: 2017年 (早于生成式AI浪潮)
    • 月下载量: 约3.5亿次 (约每秒140次)
    • 用户群体: 广泛应用于Python生态,包括通用开发、FastAPI等,同时也被所有主流生成式AI库和框架使用。
      • SDKs: OpenAI, Anthropic, Cohere (原文为rock), Google 等。
      • 智能体框架: Langchain, LlamaIndex, CrewAI 等。
  • Pydantic 公司与新产品
    • 公司成立于2023年初。
    • Pydantic Logfire: 开发者优先的可观测性平台。
    • PydanticAI: 智能体框架。
    • 行动号召: 邀请参会者前往Pydantic展台体验Logfire演示、领取T恤和贴纸,并参与抽奖。

构建AI应用的核心原则与挑战

  • 行业现状:
    • AI领域变化极快,但构建可靠、可扩展应用的基础需求不变。
    • 生成式AI (GenAI) 功能强大,但Colvin认为其“完全是一头难以驾驭的猪 (a complete pig to work with)”,使得构建可靠应用更具挑战。
  • Pydantic 的主张:
    • 演讲旨在分享一套“有主见的AI开发蓝图 (opinionated blueprint for AI development in Python)”。
    • 核心原则超越具体工具。
  • 关键技术原则:
    1. 类型安全 (Type Safety):
      • 在Python和TypeScript中日益重要。
      • 随着AI越来越多地编写代码 (如自动补全、代码生成),类型检查成为AI智能体最有效的反馈形式,因其无副作用且执行速度快 (未来将因 "ti" [不确定具体指代,可能为某种类型检查加速工具] 而更快)。
      • Colvin批评其他一些智能体框架为了自身原因牺牲了类型安全。
    2. 模型上下文协议 (Model Context Protocol, MCP): 一种允许本地LLM应用访问外部工具和资源的协议。
    3. 评估 (Evals): AI应用测试和基准评估的重要性。
    4. 可观测性 (Observability): 通过Logfire贯穿始终。

PydanticAI:智能体 (Agent) 框架详解

  • 智能体定义与行业共识:
    • 采纳Anthropic和OpenAI等公司目前较为统一的智能体定义。
    • 引用了Barry Zhang (Anthropic) 在AI Engineer大会上展示的伪代码:智能体接收环境、工具、系统提示 (现多称“指令”),运行LLM,获取工具调用指令,执行工具,更新状态,循环此过程。
    • 伪代码中的一个bug (while循环无法退出) 指出了智能体何时停止循环这一难题。
  • PydanticAI 核心特性:
    • 模型无关性: 支持一行代码切换不同LLM (如OpenAI GPT-4o, Gemini, Anthropic, Google, Groq等),方便比较模型性能。
    • Direct API: PydanticAI本周发布的新功能,提供统一接口直接调用各模型,无需智能体封装。
    • 类型安全的工具定义: 使用 @agent.tool 装饰器和泛型 Deps 上下文对象,确保工具函数参数和上下文访问的类型安全。
  • 代码示例:结构化数据提取 (非智能体行为)
    • 定义Pydantic模型 Person (name, date of birth, city)。
    • PydanticAI智能体配置输出类型为 Person
    • 从非结构化文本中提取信息并填充到 Person 实例。
    • Colvin指出这仅为单次LLM调用,并非真正的智能体循环。
  • 代码示例:具备校验与重试能力的智能体循环
    • Person 模型中添加函数校验器 (如出生日期需在19世纪)。
    • LLM初次提取数据若未满足校验条件,Pydantic的校验错误会被反馈给LLM。
    • LLM根据错误信息进行修正并重试,形成智能体循环。
    • Logfire演示:
      • 展示了两次对Gemini模型的调用。
      • 第一次调用因校验失败,第二次调用根据校验错误修正后成功。
      • Logfire追踪视图显示了每次调用的耗时和(若可用)价格信息。
  • 代码示例:工具使用与长短期记忆
    1. 长期记忆 (Tool-based Memory / Long-Term Memory):
      • 通过定义工具 (如 record_memory, retrieve_memory) 与外部系统 (如PostgreSQL数据库) 交互,实现记忆的持久化存储和检索。
      • Logfire演示:
        • 追踪显示智能体调用、LLM调用、工具调用以及工具内部的数据库查询 (如SQL插入和查询语句)。
        • 可观测性数据帮助分析性能瓶颈 (如数据库查询耗时远小于LLM调用耗时)。
    2. 短期记忆 (Context Memory / Short-Term Memory):
      • 将历史消息或相关信息直接放入LLM的上下文窗口中。
      • 示例:从数据库查询历史消息,通过 message_history 参数传递给智能体。
      • Logfire演示:
        • 通常比长期记忆更快 (示例中700ms vs 1.6s),因其减少了额外的工具调用和LLM调用。
        • 追踪显示历史消息被包含在LLM的上下文中。

模型上下文协议 (MCP) 的应用

  • MCP 简介与核心原语:
    • 由Anthropic于2023年12月左右推出,旨在让本地LLM应用 (如Claude Desktop, Cursor) 以标准化方式访问外部工具和资源。
    • 三大原语:
      1. 工具 (Tools): PydanticAI目前主要使用的部分。
      2. 资源 (Resources): 指文档等,供模型下载并放入上下文 (PydanticAI未来计划支持)。
      3. 提示 (Prompts): 特定查询的模板 (如包含数据库模式的模板),目前使用较少。
    • Colvin提及MCP的创造者之一David Perea对于资源和提示原语未被广泛使用感到些许失望。
  • PydanticAI 对 MCP 的应用:
    • 用于连接和管理外部工具服务。
  • 代码示例:mcp-run-python (沙盒化Python执行)
    • PydanticAI内置的MCP服务,用于在沙盒环境中执行Python代码。
    • 技术栈: Pyodide (Python in Wasm) -> Deno (JavaScript/TypeScript运行时,提供隔离) -> Wasm。Colvin形容为“Python inside Deno, inside JavaScript, inside Wasm running Python code”。
    • 安全性: 强调其隔离性优于某些简单阻止导入的方案 (如批评Hugging Face Small Agents的隔离机制不足)。
    • 用例: 执行LLM生成的Python代码进行计算 (如计算两个日期之间的天数),避免LLM直接进行复杂计算。OpenAI内部也采用类似机制。
    • Logfire演示: 追踪显示LLM调用 -> MCP工具调用 (启动Python、安装依赖) -> Python代码执行 -> LLM调用生成最终回复。
    • 未来: mcp-run-python 将支持回调宿主机函数,例如处理大型HTML文件时,LLM生成Beautiful Soup代码在沙盒中执行,但可回调宿主机获取文件。
  • 代码示例:Playwright MCP 服务 (浏览器控制)
    • 使用微软维护的Playwright库提供的MCP服务器,实现对浏览器的程序化控制。
    • 用例: 让智能体访问Pydantic网站,找到最新的博客文章并进行总结。
    • Logfire演示:
      • 追踪多次浏览器导航和页面交互的工具调用。
      • Playwright MCP服务器会将HTML页面简化为YAML格式,便于LLM处理并减少上下文占用。
      • 显示了整个复杂任务的成本 (示例中为15美分)。

Pydantic Logfire:AI应用的可观测性

  • 核心功能:
    • 提供详细的追踪信息,包括LLM调用、工具调用、函数执行、数据库查询等。
    • 帮助调试AI应用,理解其内部行为。
    • 分析性能瓶颈和优化机会。
    • 聚合和显示AI调用的成本。
    • 支持通过SQL查询追踪数据,构建自定义仪表盘。
  • 与开放标准的集成 (OpenTelemetry):
    • Logfire后端虽为闭源,但其构建于OpenTelemetry之上。
    • PydanticAI和Logfire SDK发出的数据遵循OpenTelemetry的GenAI语义约定。
    • 用户可以将数据发送到任何兼容OpenTelemetry的平台,不局限于Logfire。Colvin强调“我们不试图进行锁定 (We're not trying to do the lock-in thing)”。
  • 应用场景: 贯穿于演讲中的所有PydanticAI示例,用于展示智能体行为、调试问题、追踪性能和成本。

Pydantic Evals:评估AI应用的框架

  • Evals 的重要性与挑战:
    • 对于随机的、非确定性的AI应用,Evals类似于基准测试而非简单的单元测试。
    • 评估AI输出的正确性和质量是一门仍在发展的艺术/科学,尚无完美解决方案。
  • Pydantic Evals 的设计理念:
    • 旨在成为“该领域的Pytest (Pytest of this space)”。
    • 提供运行评估的框架和有用工具 (如“LLM即评判者”),而非规定具体的评估方法。
  • 核心流程与功能:
    1. 数据集构建:
      • 可以人工编写,或从Logfire等平台收集真实用户数据。
      • 示例中使用强大模型 (GPT-4o) 通过PydanticAI生成包含输入、预期输出和评估器的测试用例,并输出为YAML文件。
      • YAML文件支持JSON Schema,可在编辑器中提供自动补全和校验。
    2. 评估器定义:
      • 内置评估器:如 IsInstanceOfSuccess (检查是否成功返回特定类型)、LLMJudge (使用LLM根据指定准则评估输出)。
      • 自定义评估器:通过继承 Evaluator 基类并实现 evaluate 方法来定义。
    3. 运行评估:
      • pydantic-evals 可与Logfire集成 (可选)。
      • 命令行或代码中运行评估,输出类似Pytest的摘要报告。
      • Logfire演示:
        • 展示每个评估案例的运行情况,哪些断言通过/失败。
        • 可深入查看失败案例的具体追踪信息,分析原因。
        • 示例:通过修改智能体提示 (增加“总是用第二人称回复”),重新运行评估,成功率从80%提升到83%。
    4. 模型对比:
      • PydanticAI的 override 方法允许在评估时轻松替换智能体使用的模型。
      • 示例:对比GPT-4o和Claude 37在同一评估集上的表现 (GPT-4o: 76% vs Claude 37: 78%)。
  • 采用情况: 已有公司开始大规模使用Pydantic Evals (例如某公司一天花费25000美元运行评估)。

PydanticAI 的未来展望与版本计划

  • 即将推出的功能增强:
    • 结构化输出: 支持不依赖工具调用的结构化输出方式 (如利用模型内置能力或在指令中嵌入JSON Schema),对不擅长工具调用的简单模型更友好。
    • MCP采样 (MCP Sampling): MCP服务器请求客户端代理LLM请求的强大功能。
    • 工具注册控制: 更细致地控制在特定步骤注册哪些工具。
    • mcp-run-python 回调: 允许沙盒中的Python代码回调宿主机函数。
    • 图计算库 (Graph Library): 类似LangGraph但类型安全的实现,将进行改进以增强组合性。
    • 记忆持久化抽象: 简化对智能体记忆持久化机制的访问。
  • 版本与稳定性承诺:
    • PydanticAI 尚年轻 (2023年12月发布)。
    • PydanticAI v1.0 版本计划于2025年6月底发布
    • 发布v1.0后将严格遵循语义化版本控制 (Semantic Versioning),避免破坏性更改。

问答环节重点

  • 内部/自托管模型支持: 是的,可以通过实现 Model 抽象基类或配置OpenAI兼容的API端点来支持。
  • 异步支持: PydanticAI内部完全是异步的,同步方法是封装。在某些线程环境 (如Celery) 中使用同步接口可能存在问题。
  • 视觉模型支持: 对多模态输入有一定的支持,多模态输出方案尚在完善中。
  • Llama 3.1等模型支持: 支持多种模型,并欢迎对广泛使用模型的PR。
  • Langchain Runnable到PydanticAI模型的转换: Colvin表示这是个有趣的想法,愿意考虑相关实现。
  • 本地模型结构化输出的约束生成: 目前主要依赖JSON Schema。对于何时依赖模型自身能力,何时提供辅助工具,是一个需要权衡的问题 ("don't bet against the model" vs 现实需求)。
  • Logfire中自托管模型的定价配置: 正在开发中。计划构建一个开源的模型价格数据库,并在PydanticAI中计算价格,允许用户自定义价格,并能在Logfire中基于价格进行查询。
  • 智能体在模糊情况下的停止条件:
    • 若未指定输出类型,则迭代至产生文本输出为止。
    • 若指定输出类型,则内部注册一个 final_result 工具,模型调用此工具即视为运行结束。若校验失败,则将错误反馈给模型重试 (次数可配置)。
  • 文档质量与维护 (对比Langchain等): Pydantic的文档示例都经过单元测试,确保可运行。团队拥有经验丰富的开源维护者。

核心结论

Samuel Colvin的演讲清晰地展示了Pydantic团队在AI应用开发领域的战略布局和技术实践。通过Pydantic核心库、PydanticAI智能体框架和Pydantic Logfire可观测性平台,他们致力于提供一套类型安全、模块化、可观测且易于评估的工具链。其核心理念是将成熟的软件工程原则应用于AI开发,强调通过结构化、可测试和可维护的方式来应对AI系统固有的复杂性和不确定性。对开放标准和开发者体验的重视,以及即将发布的PydanticAI v1.0,预示着Pydantic生态将在Python AI开发中扮演越来越重要的角色。