AgentOps
AgentOps 提供了用于 AI 代理的会话回放、指标和监控功能。
在高层次上,AgentOps 可以让您监控 LLM 调用、成本、延迟、代理失败、多代理交互、工具使用情况、会话统计等等。更多信息,请查看 AgentOps 仓库。
仪表盘
将 AgentOps 添加到现有的 Autogen 服务中
要开始使用,您需要安装 AgentOps 包并设置一个 API 密钥。
AgentOps 在初始化时会自动配置自身。这意味着您的代理将立即被跟踪和记录到您的 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 使用的每次调用