当前位置:首页>python>AgentPulse (Py):用 Python 为你的 AI Agent 装上“算账雷达”

AgentPulse (Py):用 Python 为你的 AI Agent 装上“算账雷达”

  • 2026-10-11 08:33:32
AgentPulse (Py):用 Python 为你的 AI Agent 装上“算账雷达”

1. 这是什么?一句话定位

AgentPulse (Py) 是一款轻量级、框架无关的 Python 可观测性库。想象一下,你的 AI Agent 在生产环境里狂奔,API 调用费像流水一样花出去,但你可能根本不知道:

每个请求到底消耗了多少 Token?

每次调用延迟多少毫秒?

有没有连续失败、哪里在悄悄烧钱?

AgentPulse 就是用来回答这些问题的——它零侵入地记录每一次 LLM 调用的成本、Token 用量、调用链与耗时,并且无需修改你的业务代码。

对比:AgentPulse (Py) 是专门为 Python 生态设计的库级工具,而非 Avalpoint、Rectify 等企业级的 Agent 治理平台——后者更多面向多代理统一管控,而 AgentPulse (Py) 专注于“开发者本机可观测”。

2. 安装

pip install agentpulse

3. 整体工作流程

在深入代码之前,先看 AgentPulse 的监控闭环是怎么跑的:

4. 核心概念速览

AgentPulse 客户端 负责连接 Dashboard、发送监控数据的核心对象

@tool 装饰器 标记一个函数为 Agent 调用的“外部工具”,自动追溯

@trace 装饰器 标记一段业务逻辑为一条“可追踪的调用链”

ap.shutdown() 确保所有数据最终发送、连接安全关闭

5. 实战代码示例

5.1 最小可运行例子

from agentpulse import AgentPulse, trace, tool# 1️⃣ 初始化客户端ap = AgentPulse(    endpoint="http://localhost:3000",   # Dashboard 地址    api_key="ap_dev_default"           # 开发环境默认密钥)# 2️⃣ 定义一个"工具"——Agent 用来干具体活的函数@tooldef search(query: str) -> str:    """模拟一次网络搜索"""    return f"Results for {query}"# 3️⃣ 定义一个"追踪"——Agent 的主流程@trace(name="research-agent")def run_agent(topic: str) -> str:    """模拟一个会调用工具的研究型 Agent"""    # 这行代码会被自动记录为一次工具调用    result = search(topic)    return f"Research on '{topic}' completed: {result}"# 4️⃣ 执行并观察output = run_agent("quantum computing")print(output)# 5️⃣ 优雅关闭,确保数据完全发送ap.shutdown()

运行这段代码后,你会看到 Dashboard 中自动出现一条名为 research-agent 的 Trace,里面包含一次 search 工具调用,并且清晰地展示出 Token 用量和延迟。

5.2 多工具协作 + 嵌套调用

真实的 Agent 往往不会只调一个工具。下面的例子展示 AgentPulse 如何自动记录多个工具的执行情况:

import timeimport randomfrom agentpulse import AgentPulse, trace, toolap = AgentPulse(    endpoint="http://localhost:3000",    api_key="ap_dev_default")@tooldef fetch_weather(city: str) -> str:    """获取天气(模拟网络请求)"""    time.sleep(random.uniform(0.2, 0.5))  # 模拟网络延迟    return f"Weather in {city}: Sunny, 22°C"@tooldef fetch_news(topic: str) -> str:    """获取新闻(模拟网络请求)"""    time.sleep(random.uniform(0.3, 0.7))    return f"Latest news about {topic}: Some headlines..."@trace(name="advanced-assistant")def advanced_agent(user_query: str) -> str:    """组合多个工具完成复杂任务"""    # 工具1:查天气    weather_info = fetch_weather("London")    # 工具2:查新闻    news_info = fetch_news("AI")    # 可嵌套的简单处理(同样被追踪)    summary = f"Summary: {weather_info} | {news_info}"    return summaryprint(advanced_agent("What's happening today?"))ap.shutdown()

效果:在 Dashboard 中,advanced-assistant 这条 Trace 下会包含两条子 Span——分别标记为 fetch_weather 和 fetch_news,你可以很直观地看到每个步骤的耗时占比。

5.3 自定义追踪 + 异步工具

对于复杂的异步场景(例如 Agent 需要同时调用多个服务),你可以手动创建 Span,精细控制追踪粒度:

import asyncioimport randomfrom agentpulse import AgentPulse, traceap = AgentPulse(    endpoint="http://localhost:3000",    api_key="ap_dev_default")async def async_llm_call(model: str, prompt: str) -> str:    """模拟异步 LLM 调用"""    await asyncio.sleep(random.uniform(0.5, 1.0))    return f"Response from {model}: ..."@trace(name="multi-step-agent")async def execute_agent(query: str) -> str:    """分阶段执行,每阶段独立追踪"""    # 阶段1:使用 with 语法手动创建 Span    with ap.span(name="phase-1-understanding", metadata={"query": query}):        await asyncio.sleep(0.1)  # 模拟分析        context = "Understood query context"    # 阶段2:并行调用两个 LLM    with ap.span(name="phase-2-llm-calls"):        tasks = [            async_llm_call("gpt-4", query),            async_llm_call("claude-3", query)        ]        results = await asyncio.gather(*tasks)    # 阶段3:结果合并    with ap.span(name="phase-3-finalize"):        final = f"Q: {query}\nContext: {context}\nResults: {results}"    return final# 异步入口result = asyncio.run(execute_agent("How to learn Rust?"))print(result)ap.shutdown()

关键点:ap.span() 是手动创建 Span 的上下文管理器——你可以在任何地方插入它,AgentPulse 会自动将其纳入当前 Trace 的调用树中。

5.4 错误监控与成本追踪

生产环境里,API 失败在所难免。AgentPulse 会自动捕获这些异常,并在 Dashboard 中高亮展示:

import randomfrom agentpulse import AgentPulse, trace, toolap = AgentPulse(    endpoint="http://localhost:3000",    api_key="ap_dev_default")@tooldef risky_api_call(input_text: str) -> str:    """模拟有一定概率失败的 API"""    if random.random() < 0.3:  # 30% 概率失败        raise ConnectionError("API timeout exceeded")    return f"Processed: {input_text}"@trace(name="resilience-test")def test_agent(task: str) -> str:    try:        return risky_api_call(task)    except Exception as e:        # 🔴 即使你捕获了异常,AgentPulse 也已自动记录        return f"Fallback response (error: {e})"# 执行多次,观察失败率for i in range(5):    print(f"Run {i+1}: {test_agent('test data')}")ap.shutdown()

效果:Dashboard 中会显示 5 次 resilience-test 的 Trace,其中一些 Trace 会标记为红色(异常),你可以立即发现失败率和失败原因,甚至看到每次失败对应的具体时间和输入参数

6. 真·流程图:Agent 内调用追踪

下面这张流程图更严格地描述了 AgentPulse 在一次函数调用内部的跟踪传播机制:

AgentPulse 的核心逻辑就是:在装饰器中拦截函数调用 → 自动生成 Span → 汇总成 Trace → 异步发送。你只需要关注业务逻辑本身。

7. 更多高级用法

7.1 自定义 Metadata

你可以给 Trace 和工具打上自定义标签,方便在 Dashboard 中按版本、环境等维度过滤:

@trace(    name="custom-trace",    metadata={"version": "1.2.0", "env": "staging"})def customized_agent():    ...@tool(metadata={"type": "database"})def query_db(sql: str):    ...

7.2 支持 OpenAI / Anthropic 的“零侵入”监控

如果你的项目已经用 openai 或 anthropic 包,AgentPulse 可通过 monkey-patch 机制,在不修改你的调用代码的前提下,自动监控所有 LLM API 调用——仅需在初始化时开启相应插件即可。

7.3 本地 Dashboard

AgentPulse 的 Dashboard 体积小巧,可通过 Docker 一键启动:

# 首次启动 Dashboard(需要安装并运行 AgentPulse Dashboard 镜像)docker run -p 3000:3000 agentpulse/dashboard:latest

或者也可以使用官方提供的 SaaS Dashboard,只需将 endpoint 改为云端地址即可。

8. 总结:为什么选择 AgentPulse (Py)?

零侵入:无需修改现有业务代码。

轻量级:对主流程性能影响极小,数据通过缓冲区异步发送。

全面追踪:从 API 的 Token、成本、耗时到嵌套的工具调用,一次性覆盖。

框架无关:支持 OpenAI、Anthropic 等主流 LLM,也适配你自定义的任何工具函数。

如果你正为 AI Agent 的“烧钱”而烦恼,或者需要更清晰地诊断问题,AgentPulse 值得一试。

编辑:余文彬
审校:余雨馨

最新文章

随机文章