SuperAPI AI 工具集

pydantic-ai

智能体与模型

查看项目

更新于 10-16 04:00

技能介绍

PydanticAI 是由 Pydantic 团队开发的 Python 智能体框架,目标是把与 Pydantic 相同的类型安全与校验保证带入基于大模型的应用。它支持结构化输出(用 Pydantic 模型验证)、便于测试的依赖注入、流式响应、多轮对话以及工具调用,可跨 OpenAI、Anthropic、Google Gemini、Groq、Mistral 和 Ollama 使用。当你在构建对正确性和可测试性有要求的生产级 AI 智能体、聊天机器人或大模型流水线时,适合使用本技能。

主要能力与使用方式:

安装:pip install pydantic-ai;按提供商安装扩展,例如 pip install 'pydantic-ai[openai]'(OpenAI / Azure OpenAI)、'pydantic-ai[anthropic]'(Anthropic Claude)、'pydantic-ai[gemini]'(Google Gemini)、'pydantic-ai[groq]'(Groq)、'pydantic-ai[vertexai]'(Google Vertex AI)。

最小智能体:用 Agent('anthropic:claude-sonnet-4-6', system_prompt=...) 创建,agent.run_sync(...) 运行,result.data 取结果,result.usage() 查看用量。

结构化输出:设置 result_type=某个 Pydantic BaseModel,result.data 即为完全类型化的实例。

工具调用:用 @agent.tool 注册工具,运行中大模型可调用;工具函数接收 RunContext,返回字典等结果。

依赖注入:用 deps_type 配合 dataclass(如 Deps)注入数据库、HTTP 客户端、配置;在 agent.run(message, deps=deps) 时传入,工具内通过 ctx.deps 访问,从而提升可测试性。

测试:用 pydantic_ai.models.test.TestModel 配合 agent.override(model=...) 避免真实调用大模型;用 FunctionModel 提供确定性响应。

流式响应:使用 agent.run_stream(...) 并通过 result.stream_text() 逐块输出。

多轮对话:先取 result1.all_messages() 得到历史,再在后续 agent.run_sync(..., message_history=history) 中传入。

示例场景包括:代码审查智能体(CodeReview 模型,含 quality/issues/suggestions/approved 字段)、带重试逻辑的智能体(用 @agent.result_validator 配合 ModelRetry)、多智能体流水线(researcher 与 writer 分工,先生成 ResearchSummary 再生成 BlogPost)。

最佳实践:始终用 Pydantic 模型定义 result_type;用 deps_type 与 dataclass 做依赖注入以利于测试;单测用 TestModel,CI 中不要调用真实大模型;对超出 Pydantic 校验的业务逻辑加 @agent.result_validator;面向用户的长输出用 run_stream 展示渐进结果。不要把密钥写进 Agent() 参数,应使用环境变量;不同依赖的异步任务不要共享同一个 Agent 实例;不要宽泛捕获 ValidationError,可恢复的输出错误应交给 ModelRetry 重试。

安全与安全说明:通过环境变量设置 API 密钥(OPENAI_API_KEY、ANTHROPIC_API_KEY 等),不要硬编码;将工具输入传给外部系统前先校验;会改动数据的工具(写库、发邮件、调用支付 API)在生产中应要求用户明确确认后再由智能体调用;智能体执行重要动作时记录 result.all_messages() 作为审计线索;在 Agent() 上设置 retries= 限制,防止持续校验失败导致失控循环。

常见问题:LLM 响应始终 ValidationError,可简化 result_type 字段,适当使用 Optional 与默认值;工具从不被调用,可为工具函数写清晰、具体的 docstring(PydanticAI 会把 docstring 作为工具描述传给 LLM);工具内 RunContext 依赖为 None,需在 agent.run()/run_sync() 时传 deps=,依赖不是全局设置;在 FastAPI 中调用 agent.run() 出现 asyncio.run() 错误,应直接在异步路由处理函数中 await agent.run()。

相关技能:@langchain-architecture(另一种 Python AI 框架,更灵活但类型安全性较弱)、@llm-application-dev-ai-assistant(通用大模型应用开发模式)、@fastapi-templates(用 FastAPI 端点提供 PydanticAI 智能体服务)、@agent-orchestration-multi-agent-optimize(编排多个 PydanticAI 智能体)。

限制:仅在任务明确符合上述范围时使用本技能;不要把其输出当作针对具体环境的验证、测试或专家审查的替代;若缺少必要输入、权限、安全边界或成功标准,应停下来请求澄清。