从黑盒到透明:AI Agent 运行监控实战!

news/2025/2/23 17:20:23/文章来源:https://www.cnblogs.com/o-O-oO/p/18732421

你是否遇到过这样的情况:辛辛苦苦开发的 AI Agent 突然失灵了,却不知道是哪个环节出了问题?今天给家人们分享一下如何让 AI Agent 的运行过程透明化。

一、为什么要监控 AI Agent?

传统的对话系统就像一张预先画好的地图,用户只能按照既定路线前进。而 AI Agent 则像是一位灵活的向导,能够根据用户的需求实时规划路线。

但这种灵活性也带来了新的问题:

1、Agent 的决策过程变得难以追踪
2、性能问题无法快速定位
3、错误原因难以排查

用 AI Agent 而没有做好监控,就像蒙着眼睛开车一样危险。

二、一般要监控哪些内容?

在 AI Agent 的运行过程中,常见的一些关键指标如下:

1、决策链路
Agent 采取了哪些行动?
每个决策的依据是什么?

2、性能指标
响应延迟
资源消耗
调用成功率

3、输入输出

用户输入的具体内容

系统的响应结果

中间步骤的数据

三、实战:如何实现 Agent 监控?

今天我们以 HuggingFace 的 SmolAgents 为例,介绍如何使用 OpenTelemetry 实现监控。

3.1 环境准备

首先安装必要的包:

pip install smolagents
pip install arize-phoenix opentelemetry-sdk opentelemetry-exporter-otlp openinference-instrumentation-smolagents

3.2 配置监控

添加以下代码来初始化监控:

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessorfrom openinference.instrumentation.smolagents import SmolagentsInstrumentor
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporterendpoint = "http://0.0.0.0:6006/v1/traces"
trace_provider = TracerProvider()
trace_provider.add_span_processor(SimpleSpanProcessor(OTLPSpanExporter(endpoint)))SmolagentsInstrumentor().instrument(tracer_provider=trace_provider)

3.3 创建并运行 Agent

下面是一个简单的天气查询 Agent 示例:

from typing import Optional
from smolagents import TransformersModel, tool
from smolagents.agents import CodeAgent, ToolCallingAgentmodel = TransformersModel(model_id="HuggingFaceTB/SmolLM2-1.7B-Instruct", device_map="auto", max_new_tokens=1000)@tool
def get_weather(location: str, celsius: Optional[bool] = False) -> str:"""获取指定地点的天气信息"""return "当前天气晴朗,温度 20°C"agent = ToolCallingAgent(tools=[get_weather], model=model)
result = agent.run("北京今天天气怎么样?")

3.4 查看监控数据

运行后,我们可以在监控面板中看到:

1、Agent 的完整调用链路
2、每个步骤的耗时
3、输入输出详情
4、资源使用情况

可以深入每一次输入查看完整信息。

最后

在实际应用中,要把握好监控的"度"。

保持一个恰到好处的粒度,既要能及时发现问题,又不能让监控本身成为系统的负担。常见重点关注的几个关键指标:响应时间、错误率和资源使用情况。当这些指标出现异常时,比如响应明显变慢或错误突然增多,往往意味着系统出现了问题。

最后是设置合理的告警机制。当系统出现异常时,能够第一时间感知到。

原创 猕猴桃 探索AGI

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/888480.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[2025.2.23] 周记

引言在这周的面试当中,我遇到了几个不是很清楚的题目,回家之后进行学习发现了一些比较有意思的事情,在这里记录一下 这周还发现了一个很有帮助的Java知识网站:Java 基础 - 面向对象 | Java 全栈知识体系1.字符串和常量池 在这次面试当中遇到的一个原题就是 String i = "i&…

YOLOv5 的量化及部署 - RGB 专题

技术背景 YOLOv5 是一种高效的目标检测算法,尤其在实时目标检测任务中表现突出。YOLOv5 通过三种不同尺度的检测头分别处理大、中、小物体;检测头共包括三个关键任务:边界框回归、类别预测、置信度预测;每个检测头都会逐像素地使用三个 Anchor,以帮助算法更准确地预测物体…

Java基础学习(十七)

Java基础学习(十七):网络编程 目录Java基础学习(十七):网络编程概念IP端口号协议UDP 通信TCP 通信 本文为个人学习记录,内容学习自 黑马程序员概念定义:在网络通信协议下,不同计算机上运行的程序进行的数据传输 常见的软件架构:C/S 和 B/SC/S:Client/Server,在用户…

最小费用最大流问题的 SSP 算法

我们已经了解最大流问题,其目标是通过网络中的各条边传输流量,尽可能地从源点流向汇点。通过经典的算法,如 Ford-Fulkerson 增广,我们能够找到一种方式,最大化从源点到汇点的流量。 然而,最大流问题的基本形式并没有考虑流动的成本。一个图的最大流值是一个固定数,可以由…

逆向软件设计-扫雷(C语言)

本人选用了舍友开发的C语言扫雷游戏用以学习逆向软件设计,环境为vs2022 在该程序中,代码被分成了三个部分,分别是game的头文件和源文件,以及test的源文件 在game的头文件中,代码主要包括了游戏的基本信息和函数 #include<stdio.h> #include<stdlib.h> #includ…

将一个数组旋转 k 步

题目:将一个数组旋转 k步。如输入一个数组[1,2,3,4,5,6,7] 和 k = 3, 即旋转 3步。输出 [5,6,7,1,2,3,4] 解题思路:思路1: 把k 后面的元素,挨个pop,然后unshif 到数组前面 思路2: 将 k 后面的所有数据拿出来作为 part1 将 k前面的所有数据拿出来作为part2 返回 part1.conca…

bge-large-zh-v1.5 和 bge-reranker-large模型有什么区别和联系

BGE(BAAI General Embedding)系列模型是智源研究院开发的高性能语义表征工具,其中bge-large-zh-v1.5和bge-reranker-large是两类不同功能的模型。它们的区别和联系如下:核心区别功能定位bge-large-zh-v1.5:属于Embedding模型,主要用于将文本(如句子或段落)转换为高维向…

整数二分查找

整数二分 二分的本质不是单调性 有单调性一定可以二分 可以二分不一定有单调性 二分的本质是边界 -1记得+1 +1不用再补

输入菜单关键字,遍历匹配到 menuIds,展开 匹配节点 的所有父节点以及 匹配节点 本身,高亮 匹配节点

菜单检索,名称、地址、权限标志 等 关键字匹配、展开、高亮(全程借助 DeepSeek ) 便捷简洁的企业官网 的后台菜单管理,图示:改造点:(1)修改 bootstrapTreeTable 的节点class命名方式为:treegrid-{item[options.id]},即采用id作为节点的唯一标识; (2)展开所有父节点 …

动手学大模型应用开发,第5天:大模型评估

第一章、验证迭代的一般思路 根据前文所讲解的大模型开发流程,我们可以发现,以调用、发挥大模型为核心的大模型开发相较传统的 AI 开发更注重验证迭代。由于你可以快速构建出基于 LLM 的应用程序,在几分钟内定义一个 Prompt,并在几小时内得到反馈结果,那么停下来收集一千个…