项目文件夹

文件
wehub-resource-sync 46135dddc0
Harness Compat / harness compat (push) Failing after 0s
CI / lint (push) Has been cancelled
CI / mypy (push) Has been cancelled
CI / docs (push) Has been cancelled
CI / test on 3.10 (standard) (push) Has been cancelled
CI / test examples on 3.11 (push) Has been cancelled
CI / test on 3.11 (standard) (push) Has been cancelled
CI / test on 3.12 (standard) (push) Has been cancelled
CI / test on 3.13 (standard) (push) Has been cancelled
CI / test on 3.14 (standard) (push) Has been cancelled
CI / test on 3.10 (all-extras) (push) Has been cancelled
CI / test on 3.11 (all-extras) (push) Has been cancelled
CI / test on 3.12 (all-extras) (push) Has been cancelled
CI / test on 3.13 (all-extras) (push) Has been cancelled
CI / test on 3.14 (all-extras) (push) Has been cancelled
CI / test on 3.10 (pydantic-ai-slim) (push) Has been cancelled
CI / test on 3.11 (pydantic-ai-slim) (push) Has been cancelled
CI / test on 3.12 (pydantic-ai-slim) (push) Has been cancelled
CI / test on 3.13 (pydantic-ai-slim) (push) Has been cancelled
CI / test on 3.14 (pydantic-ai-slim) (push) Has been cancelled
CI / test on 3.10 (pydantic-evals) (push) Has been cancelled
CI / test on 3.11 (pydantic-evals) (push) Has been cancelled
CI / test on 3.12 (pydantic-evals) (push) Has been cancelled
CI / test on 3.13 (pydantic-evals) (push) Has been cancelled
CI / test on 3.14 (pydantic-evals) (push) Has been cancelled
CI / test on 3.10 (lowest-versions) (push) Has been cancelled
CI / test on 3.11 (lowest-versions) (push) Has been cancelled
CI / test on 3.12 (lowest-versions) (push) Has been cancelled
CI / test on 3.13 (lowest-versions) (push) Has been cancelled
CI / test on 3.14 (lowest-versions) (push) Has been cancelled
CI / test examples on 3.12 (push) Has been cancelled
CI / test examples on 3.13 (push) Has been cancelled
CI / test examples on 3.14 (push) Has been cancelled
CI / coverage (push) Has been cancelled
CI / check (push) Has been cancelled
CI / deploy-docs (push) Has been cancelled
CI / deploy-docs-preview (push) Has been cancelled
CI / build release artifacts (push) Has been cancelled
CI / publish to PyPI (push) Has been cancelled
CI / Send tweet (push) Has been cancelled
docs: make Chinese README the default
2026-07-13 11:12:31 +00:00

235 行
13 KiB
Markdown

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
<!-- WEHUB_ZH_README -->
> [!NOTE]
> 本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
> [English](./README.en.md) · [原始项目](https://github.com/pydantic/pydantic-ai) · [上游 README](https://github.com/pydantic/pydantic-ai/blob/HEAD/README.md)
> 原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。
<div align="center">
<a href="https://ai.pydantic.dev/">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://pydantic.dev/docs/ai/img/pydantic-ai-dark.svg">
<img src="https://pydantic.dev/docs/ai/img/pydantic-ai-light.svg" alt="Pydantic AI">
</picture>
</a>
</div>
<div align="center">
<h3>GenAI 智能体框架,Pydantic 风格</h3>
</div>
<div align="center">
<a href="https://github.com/pydantic/pydantic-ai/actions/workflows/ci.yml?query=branch%3Amain"><img src="https://github.com/pydantic/pydantic-ai/actions/workflows/ci.yml/badge.svg?event=push" alt="CI"></a>
<a href="https://coverage-badge.samuelcolvin.workers.dev/redirect/pydantic/pydantic-ai"><img src="https://coverage-badge.samuelcolvin.workers.dev/pydantic/pydantic-ai.svg" alt="Coverage"></a>
<a href="https://pypi.python.org/pypi/pydantic-ai"><img src="https://img.shields.io/pypi/v/pydantic-ai.svg" alt="PyPI"></a>
<a href="https://github.com/pydantic/pydantic-ai"><img src="https://img.shields.io/pypi/pyversions/pydantic-ai.svg" alt="versions"></a>
<a href="https://github.com/pydantic/pydantic-ai/blob/main/LICENSE"><img src="https://img.shields.io/github/license/pydantic/pydantic-ai.svg?v" alt="license"></a>
<a href="https://logfire.pydantic.dev/docs/join-slack/"><img src="https://img.shields.io/badge/Slack-Join%20Slack-4A154B?logo=slack" alt="Join Slack" /></a>
</div>
---
**文档** [ai.pydantic.dev](https://ai.pydantic.dev/)
---
### <em>Pydantic AI 是一款 Python 智能体框架,旨在帮助你快速、自信且轻松地构建生产级生成式 AI(Generative AI)应用与工作流。</em>
FastAPI 凭借基于 [Pydantic Validation](https://docs.pydantic.dev) 与现代 Python 特性(如类型提示)的创新且符合人体工程学的设计,彻底改变了 Web 开发。
然而,尽管几乎每一个 Python 智能体框架和 LLM 库都在使用 Pydantic Validation,当我们在 [Pydantic Logfire](https://pydantic.dev/logfire), 中开始使用 LLM 时,却找不到能带来同样体验的方案。
我们构建 Pydantic AI 只有一个简单目标:将那种 FastAPI 般的开发体验带给 GenAI 应用与智能体开发。
## 为何使用 Pydantic AI
1. **由 Pydantic 团队打造**
[Pydantic Validation](https://docs.pydantic.dev/latest/) 是 OpenAI SDK、Google ADK、Anthropic SDK、LangChain、LlamaIndex、AutoGPT、Transformers、CrewAI、Instructor 等众多项目的校验层。_既然可以直接使用源头,何必使用衍生品?_ :smiley:
2. **模型无关(Model-agnostic**
几乎支持所有 [模型](https://ai.pydantic.dev/models/overview) 与提供商:OpenAI、Anthropic、Gemini、DeepSeek、Grok、Cohere、Mistral、Perplexity;Azure AI Foundry、Amazon Bedrock、Google Cloud、Ollama、LiteLLM、Groq、OpenRouter、Together AI、Fireworks AI、Cerebras、Hugging Face、GitHub、Heroku、Vercel、Nebius、OVHcloud、Alibaba Cloud、SambaNova 和 Z.AI。若你偏爱的模型或提供商未在列表中,也可以轻松实现 [自定义模型](https://ai.pydantic.dev/models/overview#custom-models).
3. **无缝可观测性(Observability**
与我们的通用 OpenTelemetry 可观测性平台 [Pydantic Logfire](https://pydantic.dev/logfire), 深度 [集成](https://ai.pydantic.dev/logfire),用于实时调试、基于评估(evals)的性能监控,以及行为、追踪与成本跟踪。若你已有支持 OTel 的可观测性平台,也可以 [直接使用](https://ai.pydantic.dev/logfire#alternative-observability-backends).
4. **完全类型安全(Type-safe**
旨在为 IDE 或 AI 编程助手提供尽可能多的上下文,以支持自动补全与 [类型检查](https://ai.pydantic.dev/agents#static-type-checking),,将整类错误从运行时前移到编写时,带来几分 Rust「编译通过即可运行」的体验。
5. **强大的评估(Evals**
让你能够系统化地测试并 [评估](https://ai.pydantic.dev/evals) 所构建智能体系统的性能与准确性,并在 Pydantic Logfire 中持续监控其表现。
6. **可扩展设计**
通过可组合的 [能力(capabilities](https://ai.pydantic.dev/capabilities) 构建智能体,将工具、钩子、指令与模型设置打包为可复用单元。使用内置能力实现 [网页搜索](https://ai.pydantic.dev/capabilities#provider-adaptive-tools), [思考](https://ai.pydantic.dev/capabilities#thinking), 与 [MCP](https://ai.pydantic.dev/capabilities#provider-adaptive-tools),,从 [Pydantic AI Harness](https://ai.pydantic.dev/harness/overview) 能力库中选取,自行构建,或安装 [第三方能力包](https://ai.pydantic.dev/extensibility).。可完全通过 [YAML/JSON](https://ai.pydantic.dev/agent-spec) 定义智能体——无需编写代码。
7. **MCP 与 UI**
集成 [Model Context Protocol](https://ai.pydantic.dev/mcp/overview) 与多种 [UI 事件流](https://ai.pydantic.dev/ui/overview) 标准,让智能体访问外部工具与数据,并以基于流式事件的方式构建交互式应用。
8. **人机协同工具审批(Human-in-the-Loop Tool Approval**
可轻松标记某些工具调用在继续执行前 [需要审批](https://ai.pydantic.dev/deferred-tools#human-in-the-loop-tool-approval),并可依据工具调用参数、对话历史或用户偏好进行判断。
9. **持久化执行(Durable Execution**
让你能够构建 [持久化智能体](https://ai.pydantic.dev/durable_execution/overview/),在瞬时 API 故障、应用错误或重启后仍能保留进度,并以生产级可靠性处理长时间运行、异步以及人机协同工作流。
10. **流式输出(Streamed Outputs**
提供持续 [流式传输](https://ai.pydantic.dev/output#streamed-results) 结构化输出的能力,并即时校验,确保实时访问生成的数据。
11. **图(Graph)支持**
提供一种基于类型提示定义 [](https://ai.pydantic.dev/graph) 的强大方式,适用于标准控制流容易退化为面条代码的复杂应用。
不过说实话,任何清单都不如 [亲自试一试](#next-steps) 来得有说服力——看看它给你的感受如何!
## Hello World 示例
以下是 Pydantic AI 的最小示例:
```python
from pydantic_ai import Agent
# Define a very simple agent including the model to use, you can also set the model when running the agent.
agent = Agent(
'anthropic:claude-sonnet-4-6',
# Register static instructions using a keyword argument to the agent.
# For more complex dynamically-generated instructions, see the example below.
instructions='Be concise, reply with one sentence.',
)
# Run the agent synchronously, conducting a conversation with the LLM.
result = agent.run_sync('Where does "hello world" come from?')
print(result.output)
"""
The first known use of "hello, world" was in a 1974 textbook about the C programming language.
"""
```
_(该示例完整可用,在假设你已 [安装 `pydantic_ai` 包](https://ai.pydantic.dev/install))_ 的前提下,可直接运行。)_
交互会非常简短:Pydantic AI 会将指令与用户提示发送给 LLM,模型再返回文本响应。
目前还不算有趣,但我们可以轻松添加 [工具](https://ai.pydantic.dev/tools), [动态指令](https://ai.pydantic.dev/agents#instructions), [结构化输出](https://ai.pydantic.dev/output), 或可组合的 [能力](https://ai.pydantic.dev/capabilities),以构建更强大的智能体。
以下是同一智能体搭配 [思考](https://ai.pydantic.dev/capabilities#thinking) 与 [网页搜索](https://ai.pydantic.dev/capabilities#provider-adaptive-tools) 能力的版本:
```python
from pydantic_ai import Agent
from pydantic_ai.capabilities import Thinking, WebSearch
agent = Agent(
'anthropic:claude-sonnet-4-6',
instructions='Be concise, reply with one sentence.',
capabilities=[Thinking(), WebSearch()],
)
result = agent.run_sync('What was the mass of the largest meteorite found this year?')
print(result.output)
```
## 工具与依赖注入示例
下面是一个使用 Pydantic AI 为银行构建支持智能体的简明示例:
(文档中有更完善的示例 [请参阅文档](https://ai.pydantic.dev/#tools-dependency-injection-example))**
```python
from dataclasses import dataclass
from pydantic import BaseModel, Field
from pydantic_ai import Agent, RunContext
from bank_database import DatabaseConn
# SupportDependencies is used to pass data, connections, and logic into the model that will be needed when running
# instructions and tool functions. Dependency injection provides a type-safe way to customise the behavior of your agents.
@dataclass
class SupportDependencies:
customer_id: int
db: DatabaseConn
# This Pydantic model defines the structure of the output returned by the agent.
class SupportOutput(BaseModel):
support_advice: str = Field(description='Advice returned to the customer')
block_card: bool = Field(description="Whether to block the customer's card")
risk: int = Field(description='Risk level of query', ge=0, le=10)
# This agent will act as first-tier support in a bank.
# Agents are generic in the type of dependencies they accept and the type of output they return.
# In this case, the support agent has type `Agent[SupportDependencies, SupportOutput]`.
support_agent = Agent(
'openai:gpt-5.2',
deps_type=SupportDependencies,
# The response from the agent will be guaranteed to be a SupportOutput,
# if validation fails the agent is prompted to try again.
output_type=SupportOutput,
instructions=(
'You are a support agent in our bank, give the '
'customer support and judge the risk level of their query.'
),
)
# Dynamic instructions can make use of dependency injection.
# Dependencies are carried via the `RunContext` argument, which is parameterized with the `deps_type` from above.
# If the type annotation here is wrong, static type checkers will catch it.
@support_agent.instructions
async def add_customer_name(ctx: RunContext[SupportDependencies]) -> str:
customer_name = await ctx.deps.db.customer_name(id=ctx.deps.customer_id)
return f"The customer's name is {customer_name!r}"
# The `tool` decorator let you register functions which the LLM may call while responding to a user.
# Again, dependencies are carried via `RunContext`, any other arguments become the tool schema passed to the LLM.
# Pydantic is used to validate these arguments, and errors are passed back to the LLM so it can retry.
@support_agent.tool
async def customer_balance(
ctx: RunContext[SupportDependencies], include_pending: bool
) -> float:
"""Returns the customer's current account balance."""
# The docstring of a tool is also passed to the LLM as the description of the tool.
# Parameter descriptions are extracted from the docstring and added to the parameter schema sent to the LLM.
balance = await ctx.deps.db.customer_balance(
id=ctx.deps.customer_id,
include_pending=include_pending,
)
return balance
... # In a real use case, you'd add more tools and a longer system prompt
async def main():
deps = SupportDependencies(customer_id=123, db=DatabaseConn())
# Run the agent asynchronously, conducting a conversation with the LLM until a final response is reached.
# Even in this fairly simple case, the agent will exchange multiple messages with the LLM as tools are called to retrieve an output.
result = await support_agent.run('What is my balance?', deps=deps)
# The `result.output` will be validated with Pydantic to guarantee it is a `SupportOutput`. Since the agent is generic,
# it'll also be typed as a `SupportOutput` to aid with static type checking.
print(result.output)
"""
support_advice='Hello John, your current account balance, including pending transactions, is $123.45.' block_card=False risk=1
"""
result = await support_agent.run('I just lost my card!', deps=deps)
print(result.output)
"""
support_advice="I'm sorry to hear that, John. We are temporarily blocking your card to prevent unauthorized transactions." block_card=True risk=8
"""
```
## 后续步骤
若要亲自体验 Pydantic AI,请[安装](https://ai.pydantic.dev/install) 并参阅[示例中的说明](https://ai.pydantic.dev/examples/setup).
阅读[文档](https://ai.pydantic.dev/agents/) 以进一步了解如何使用 Pydantic AI 构建应用。
阅读 [API Reference](https://ai.pydantic.dev/api/agent/) 以了解 Pydantic AI 的接口。
如有疑问,请加入 [Slack](https://logfire.pydantic.dev/docs/join-slack/) 或在 [GitHub](https://github.com/pydantic/pydantic-ai/issues) 上提交 issue。
## Pydantic Stack 生态的一部分
Pydantic Stack 汇集了交付生产级 AI 智能体所需的一切:
- [Pydantic AI](https://pydantic.dev/pydantic-ai?utm_source=github&utm_medium=readme&utm_campaign=pydantic-ai) - 类型安全的智能体框架
- [Pydantic Logfire](https://pydantic.dev/logfire?utm_source=github&utm_medium=readme&utm_campaign=pydantic-ai) - AI 优先的全栈可观测性
- [Logfire AI Gateway](https://pydantic.dev/ai-gateway?utm_source=github&utm_medium=readme&utm_campaign=pydantic-ai) - 统一的 LLM 代理