跳过内容

调试和监控

使用LLMs的应用程序面临一些众所周知且易于理解的挑战:LLMs是不可靠昂贵的。

这些应用程序也面临一些大多数开发人员很少遇到的挑战:LLMs 是 反复无常非确定性的。提示中的细微变化可以完全改变模型的性能,并且没有 EXPLAIN 查询可以让你理解原因。

警告

从软件工程师的角度来看,你可以把LLMs想象成你听说过的最糟糕的数据库,但更糟糕。

如果大型语言模型不是那么有用,我们永远不会接触它们。

为了使用LLM构建成功的应用程序,我们需要新工具来理解模型性能和依赖于它们的应用程序的行为。

仅仅让您了解您的模型表现如何的LLM可观测性工具是没用的:对LLM发起API调用很简单,将其构建到应用程序中才是困难的。

Pydantic 日志火焰

Pydantic Logfire 是一个由创建和维护 Pydantic 和 PydanticAI 的团队开发的可观察性平台。Logfire 旨在让您了解整个应用程序:生成 AI、经典预测 AI、HTTP 流量、数据库查询以及现代应用程序所需的其他一切。

Pydantic Logfire是一个商业产品

Logfire 是一个商业支持的托管平台,提供极为慷慨和永久的 免费层。您可以在几分钟内注册并开始使用 Logfire。

PydanticAI内置了对Logfire的支持(但这是可选的),通过logfire-api无操作包提供。

这意味着如果安装并配置了 logfire 包,则关于代理运行的详细信息将被发送到 Logfire。但如果 logfire 包未安装,则几乎没有开销,也不会发送任何信息。

以下是一个示例,显示在Logfire中运行天气代理的详细信息:

Weather Agent Logfire

使用 Logfire

要使用 logfire,您需要一个 logfire 账户,并且安装 logfire:

pip install 'pydantic-ai[logfire]'
uv add 'pydantic-ai[logfire]'

然后使用logfire验证您的本地环境:

 logfire auth
uv run logfire auth

并配置一个项目以发送数据到:

 logfire projects new
uv run logfire projects new

(或使用现有项目,使用 logfire projects use)

最后一步是将logfire添加到您的代码中:

adding_logfire.py
import logfire

logfire.configure()

logfire 文档提供了关于如何使用 logfire 的更多细节,包括如何为其他库进行插桩,如 PydanticHTTPXFastAPI

由于Logfire构建在OpenTelemetry上,您可以使用Logfire Python SDK将数据发送到任何OpenTelemetry收集器。

一旦您设置好logfire,它可以通过两种主要方式帮助您了解您的应用程序:

  • 调试 — 使用实时视图查看您的应用程序中发生的事情。
  • 监控 — 使用SQL和仪表板观察您的应用程序的行为,Logfire实际上是一个SQL数据库,存储有关您的应用程序运行方式的信息。

调试

为了演示Logfire如何让您可视化PydanticAI运行的流程,这里是您在运行聊天应用示例时从Logfire获得的视图:

监控性能

我们还可以在Logfire中使用SQL查询数据,以监控应用程序的性能。以下是使用Logfire监控PydanticAI在Logfire内部运行的真实示例:

Logfire monitoring PydanticAI

监控HTTPX请求

为了监控模型发出的HTTPX请求,您可以使用 logfireHTTPX 集成。

仪表化只需将以下三行添加到您的应用程序中:

instrument_httpx.py
import logfire
logfire.configure()
logfire.instrument_httpx(capture_all=True)  # (1)!
  1. 请查看logfire docs获取更多httpx仪器细节。

特别是,这可以帮助您追踪特定的请求、响应和头部信息:

instrument_httpx_example.py
import logfire
from pydantic_ai import Agent

logfire.configure()
logfire.instrument_httpx(capture_all=True)  # (1)!

agent = Agent('openai:gpt-4o')
result = agent.run_sync('What is the capital of France?')
print(result.data)
#> The capital of France is Paris.
  1. 捕获所有的头信息,请求体和响应体。

Logfire with HTTPX instrumentation

Logfire without HTTPX instrumentation

提示

httpx 插桩可能特别有用,如果您在模型中使用自定义 httpx 客户端,以便获取自定义请求的洞察。