Skip to content

ADK 的 Latitude 可观测性

Supported in ADKPython

Latitude 是一个用于 LLM 应用的开源可观测性和评估平台。其 latitude-telemetry Python SDK 为 Agent Development Kit 提供了专用仪表化,因此每次智能体运行、模型生成和工具调用都会作为 OpenTelemetry 追踪导出,供你检查、搜索和评估。

为什么选择 Latitude for ADK?

ADK 包含自己的基于 OpenTelemetry 的追踪。Latitude 在此基础上构建了一个专为智能体打造的托管(或自托管)平台:

  • 完整的智能体追踪: 嵌套的智能体、生成和工具调用层次结构,自动捕获,无需更改你调用 ADK 的方式。
  • 成本、令牌和延迟: 在追踪的每个层级进行汇总。
  • 会话: 将多轮对话和多步智能体运行分组到单个会话中。
  • 评估: 使用 LLM-as-judge 或基于代码的评估器在线或离线对智能体输出进行评分。
  • 开源: 完全自托管运行,或使用托管云服务。

前置条件

  • Latitude 账户API 密钥(在 console.latitude.so 注册,或自托管)。
  • Latitude 项目 slug
  • 设置为 GOOGLE_API_KEYGemini API 密钥

安装

pip install latitude-telemetry google-adk

设置所需的环境变量:

export LATITUDE_API_KEY="your-api-key"
export LATITUDE_PROJECT="your-project-slug"
export GOOGLE_API_KEY="your-gemini-api-key"

LATITUDE_API_KEYLATITUDE_PROJECT 将追踪发送到你的 Latitude 项目。GOOGLE_API_KEY 由 ADK 的 Gemini 模型调用使用。

与智能体配合使用

google.adk 模块传递给 Latitude SDK 的 google_adk 仪表化键。Latitude 注册 OpenTelemetry 追踪器提供者并对 ADK 进行仪表化;你继续像往常一样调用 ADK。

import asyncio
import os

import google.adk
from google.adk.agents import Agent
from google.adk.runners import InMemoryRunner
from google.genai import types

from latitude_telemetry import Latitude, capture

latitude = Latitude(
    api_key=os.environ["LATITUDE_API_KEY"],
    project=os.environ["LATITUDE_PROJECT"],
    instrumentations={"google_adk": google.adk},
)


def get_weather(city: str) -> dict:
    """Returns the current weather for a city."""
    return {"status": "success", "report": f"The weather in {city} is sunny."}


agent = Agent(
    name="weather_agent",
    model="gemini-flash-latest",
    description="Agent that answers weather questions using tools.",
    instruction="Answer weather questions using get_weather.",
    tools=[get_weather],
)


async def weather_agent_run():
    runner = InMemoryRunner(agent=agent, app_name="weather_app")
    await runner.session_service.create_session(
        app_name="weather_app",
        user_id="user_123",
        session_id="session_abc",
    )

    async for event in runner.run_async(
        user_id="user_123",
        session_id="session_abc",
        new_message=types.Content(
            role="user",
            parts=[types.Part(text="What's the weather in Barcelona?")],
        ),
    ):
        if event.is_final_response() and event.content and event.content.parts:
            return event.content.parts[0].text


# Wrap a request or job with capture() to attach a user_id, session_id, tags,
# or metadata to every span produced inside it.
capture("weather-agent-run", lambda: asyncio.run(weather_agent_run()))

# Flush any pending spans and shut down before the process exits.
latitude.shutdown()

你获得的功能

每次智能体运行在 Latitude 中显示为一个带有嵌套跨度的追踪:

  • 智能体跨度: 智能体名称、指令和配置的工具
  • 生成跨度: 模型、输入/输出消息和令牌使用
  • 工具跨度: 工具调用,包含输入参数和输出

Latitude 仪表盘中打开你的项目,查看完整的智能体、生成和工具层次结构,每个层级都聚合了令牌使用和延迟。

资源