Skip to main content

AgentOps

在 Colab 中打开 在 GitHub 上打开

logo

AgentOps 提供了用于 AI 代理的会话回放、指标和监控功能。

在高层次上,AgentOps 可以让您监控 LLM 调用、成本、延迟、代理失败、多代理交互、工具使用情况、会话统计等等。更多信息,请查看 AgentOps 仓库

仪表盘

代理仪表盘

将 AgentOps 添加到现有的 Autogen 服务中

要开始使用,您需要安装 AgentOps 包并设置一个 API 密钥。

AgentOps 在初始化时会自动配置自身。这意味着您的代理将立即被跟踪和记录到您的 AgentOps 账户中。

要求

此笔记本需要安装一些额外的依赖项,可以通过 pip 安装:

pip install pyautogen agentops

更多信息,请参阅安装指南

设置 API 密钥

默认情况下,AgentOps 的 init() 函数会查找一个名为 AGENTOPS_API_KEY 的环境变量。或者,您可以将其作为可选参数传递进去。

AgentOps.ai 上创建一个账户和 API 密钥

import agentops

from autogen import ConversableAgent, UserProxyAgent, config_list_from_json

agentops.init(api_key="7c94212b-b89d-47a6-a20c-23b2077d3226") # or agentops.init(api_key="...")
🖇 AgentOps: 会话回放: https://app.agentops.ai/drilldown?session_id=8bfaeed1-fd51-4c68-b3ec-276b1a3ce8a4
UUID('8bfaeed1-fd51-4c68-b3ec-276b1a3ce8a4')

Autogen 现在会自动跟踪以下内容:

  • LLM 提示和完成
  • Token 使用和成本
  • 代理名称和操作
  • 代理之间的通信
  • 工具使用情况
  • 错误

简单的聊天示例

import agentops

# 初始化 AgentOps,可以传入可选的标签来帮助筛选会话
agentops.init(tags=["simple-autogen-example"])

# 创建使用 LLM 的代理
config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST")
assistant = ConversableAgent("agent", llm_config={"config_list": config_list})

# 创建代表用户的代理
user_proxy = UserProxyAgent("user", code_execution_config=False)

# 让助手开始对话。当用户输入 exit 时对话结束。
assistant.initiate_chat(user_proxy, message="今天我能帮你什么?")

# 关闭 AgentOps 会话以表示完成
agentops.end_session("成功")
机器人(对用户):

今天我能帮你什么?

--------------------------------------------------------------------------------
用户(对机器人):

2+2

--------------------------------------------------------------------------------

>>>>>>>> 使用自动回复...
机器人(对用户):

2 + 2 等于 4。

--------------------------------------------------------------------------------
🖇 AgentOps:本次运行费用为 $0.000960
🖇 AgentOps:会话回放:https://app.agentops.ai/drilldown?session_id=8bfaeed1-fd51-4c68-b3ec-276b1a3ce8a4

您可以在 app.agentops.ai 上查看此次运行的数据。

仪表板将显示每个机器人发送的每条消息的 LLM 事件,包括人类用户发送的消息。

会话概览

工具示例

AgentOps 还会跟踪 Autogen 机器人使用工具的情况。您可以在 tool-use.ipynb 中找到更多信息。

from typing import Annotated, Literal

from autogen import ConversableAgent, config_list_from_json, register_function

agentops.start_session(tags=["autogen-tool-example"])

Operator = Literal["+", "-", "*", "/"]


def calculator(a: int, b: int, operator: Annotated[Operator, "operator"]) -> int:
if operator == "+":
return a + b
elif operator == "-":
return a - b
elif operator == "*":
return a * b
elif operator == "/":
return int(a / b)
else:
raise ValueError("Invalid operator")


config_list = config_list_from_json(env_or_file="OAI_CONFIG_LIST")

# 创建使用LLM的代理
assistant = ConversableAgent(
name="助手",
system_message="你是一个有用的AI助手。"
"你可以帮助进行简单的计算。"
"当任务完成时,请返回'TERMINATE'。",
llm_config={"config_list": config_list},
)

# 用户代理用于与助手代理交互并执行工具调用。
user_proxy = ConversableAgent(
name="用户",
llm_config=False,
is_termination_msg=lambda msg: msg.get("content") is not None and "TERMINATE" in msg["content"],
human_input_mode="NEVER",
)

assistant.register_for_llm(name="calculator", description="一个简单的计算器")(calculator)
user_proxy.register_for_execution(name="calculator")(calculator)

# 将计算器函数注册到两个代理中。
register_function(
calculator,
caller=assistant, # 助手代理可以建议调用计算器。
executor=user_proxy, # 用户代理可以执行计算器调用。
name="calculator", # 默认情况下,使用函数名作为工具名。
description="一个简单的计算器", # 工具的描述。
)

# 让助手开始对话。当用户输入exit时对话将结束。
user_proxy.initiate_chat(assistant, message="(1423 - 123) / 3 + (32 + 23) * 5 等于多少?")

agentops.end_session("成功")
🖇 AgentOps: 会话回放: https://app.agentops.ai/drilldown?session_id=880c206b-751e-4c23-9313-8684537fc04d
用户(对助手):

(1423 - 123) / 3 + (32 + 23) * 5 等于多少?

--------------------------------------------------------------------------------

>>>>>>>> 使用自动回复...
助手(对用户):

***** 建议的工具调用(call_aINcGyo0Xkrh9g7buRuhyCz0):计算器 *****
参数:
{
"a": 1423,
"b": 123,
"operator": "-"
}
***************************************************************************

--------------------------------------------------------------------------------

>>>>>>>> 执行函数 calculator...
用户(对助手):

用户(对助手):

***** 调用工具的响应(call_aINcGyo0Xkrh9g7buRuhyCz0) *****
1300
**********************************************************************

--------------------------------------------------------------------------------

>>>>>>>> 使用自动回复...
助手(对用户):

***** 建议的工具调用(call_prJGf8V0QVT7cbD91e0Fcxpb):计算器 *****
参数:
{
"a": 1300,
"b": 3,
"operator": "/"
}
***************************************************************************

--------------------------------------------------------------------------------

>>>>>>>> 执行函数 calculator...
用户(对助手):

用户(对助手):

***** 调用工具的响应(call_prJGf8V0QVT7cbD91e0Fcxpb) *****
433
**********************************************************************

--------------------------------------------------------------------------------

>>>>>>>> 使用自动回复...
/Users/braelynboynton/Developer/agentops/autogen/autogen/agentchat/conversable_agent.py:2489: UserWarning: 函数 'calculator' 被覆盖。
warnings.warn(f"函数 '{tool_sig['function']['name']}' 被覆盖。", UserWarning)
/Users/braelynboynton/Developer/agentops/autogen/autogen/agentchat/conversable_agent.py:2408: UserWarning: 函数 'calculator' 被覆盖。
warnings.warn(f"函数 '{name}' 被覆盖。", UserWarning)
助手(对用户):

***** 建议的工具调用(call_CUIgHRsySLjayDKuUphI1TGm):计算器 *****
参数:
{
"a": 32,
"b": 23,
"operator": "+"
}
***************************************************************************

--------------------------------------------------------------------------------

>>>>>>>> 执行函数 calculator...
用户(对助手):

用户(对助手):

***** 调用工具的响应(call_CUIgHRsySLjayDKuUphI1TGm) *****
55
**********************************************************************

--------------------------------------------------------------------------------

>>>>>>>> 使用自动回复...
助手(对用户):

***** 建议的工具调用(call_L7pGtBLUf9V0MPL90BASyesr):计算器 *****
参数:
{
"a": 55,
"b": 5,
"operator": "*"
}
***************************************************************************

--------------------------------------------------------------------------------

>>>>>>>> 执行函数 calculator...
用户(对助手):

用户(对助手):

***** 调用工具的响应(call_L7pGtBLUf9V0MPL90BASyesr) *****
275
**********************************************************************

--------------------------------------------------------------------------------

>>>>>>>> 使用自动回复...
助手(对用户):

***** 建议的工具调用(call_Ygo6p4XfcxRjkYBflhG3UVv6):计算器 *****
参数:
{
"a": 433,
"b": 275,
"operator": "+"
}
***************************************************************************

--------------------------------------------------------------------------------

>>>>>>>> 执行函数 calculator...
用户(对助手):

用户(对助手):

***** 调用工具的响应(call_Ygo6p4XfcxRjkYBflhG3UVv6) *****
708
**********************************************************************

--------------------------------------------------------------------------------

>>>>>>>> 使用自动回复...
助手(对用户):

计算结果为708。

--------------------------------------------------------------------------------
用户(对助手):



--------------------------------------------------------------------------------

>>>>>>>> 使用自动回复...
助手(对用户):

终止

--------------------------------------------------------------------------------
``` text
🖇 AgentOps: 这次运行的成本为 $0.001800
🖇 AgentOps: 会话回放: https://app.agentops.ai/drilldown?session_id=880c206b-751e-4c23-9313-8684537fc04d

你可以在 app.agentops.ai 上观看你的运行情况。在这个例子中,AgentOps 仪表板将显示以下内容:

  • 代理之间的对话
  • 使用 calculator 工具的每次使用
  • 调用 OpenAI 进行 LLM 使用的每次调用
会话回放