Skip to main content

自动生成的代理人聊天:带有代码解释器的GPTAssistant

在Colab中打开 在GitHub上打开

最新发布的OpenAI Assistants API允许用户在自己的应用程序中构建AI助手。Assistants API目前支持三种类型的工具:代码解释器、检索和函数调用。在这个笔记本中,我们演示了如何使GPTAssistantAgent使用代码解释器。

要求

AutoGen需要Python>=3.8。要运行这个笔记本示例,请安装:

要求

安装pyautogen

pip install pyautogen

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

设置API端点

config_list_from_json函数从环境变量或json文件中加载配置列表。

import io

from IPython.display import display
from PIL import Image

import autogen
from autogen.agentchat import AssistantAgent, UserProxyAgent
from autogen.agentchat.contrib.gpt_assistant_agent import GPTAssistantAgent

config_list = autogen.config_list_from_json(
"OAI_CONFIG_LIST",
file_location=".",
filter_dict={
"model": ["gpt-3.5-turbo", "gpt-35-turbo", "gpt-4", "gpt4", "gpt-4-32k", "gpt-4-turbo"],
},
)
tip

了解有关为代理人配置LLM的更多信息,请点击这里

使用代码解释器执行任务

我们演示了使用带有代码解释器的GPTAssistantAgent来解决任务。在tools参数中传递code_interpreter以启用带有代码解释器的GPTAssistantAgent。它将编写代码并在沙盒中自动执行。代理人将从沙盒环境中接收结果,并相应地采取行动。

示例1:数学问题求解

在这个示例中,我们演示了如何使用代码解释器来解决数学问题。

# 初始化一个带有代码解释器的助手代理
gpt_assistant = GPTAssistantAgent(
name="编程助手",
llm_config={
"config_list": config_list,
},
assistant_config={
"tools": [{"type": "code_interpreter"}],
},
instructions="你是一个解决数学问题的专家。编写代码并运行它来解决数学问题。当任务解决并且没有问题时,请回复 TERMINATE。",
)

user_proxy = UserProxyAgent(
name="用户代理",
is_termination_msg=lambda msg: "TERMINATE" in msg["content"],
code_execution_config={
"work_dir": "coding",
"use_docker": False, # 如果有可用的 Docker 来运行生成的代码,请将 use_docker 设置为 True。使用 Docker 比直接运行生成的代码更安全。
},
human_input_mode="NEVER",
)

# 一切准备就绪后,开始对话。
user_proxy.initiate_chat(
gpt_assistant, message="如果 $725x + 727y = 1500$ 并且 $729x+ 731y = 1508$,求 $x - y$ 的值。"
)
gpt_assistant.delete_assistant()
GPTAssistantAgent(编码助手)的 OpenAI 客户端配置 - 模型:gpt-4-turbo
找到匹配的助手,使用第一个匹配的助手:{'id': 'asst_xBMxObFj0TzDex04NAKbBCmP', 'created_at': 1710321320, 'description': None, 'file_ids': [], 'instructions': '您是解决数学问题的专家。编写代码并运行以解决数学问题。当任务解决并且没有问题时,请回复 TERMINATE。', 'metadata': {}, 'model': 'gpt-4-turbo', 'name': '编码助手', 'object': 'assistant', 'tools': [ToolCodeInterpreter(type='code_interpreter')]}
user_proxy(给编码助手):

如果 \(725x + 727y = 1500\) 且 \(729x+ 731y = 1508\),求 \(x - y\) 的值是多少?

--------------------------------------------------------------------------------
编码助手(给 user_proxy):

\(x - y\) 的值是 \(-48\)。


--------------------------------------------------------------------------------
user_proxy(给编码助手):



--------------------------------------------------------------------------------
编码助手(给 user_proxy):

看起来您没有进一步的问题。如果将来有更多问题,请随时提问。再见!

TERMINATE


--------------------------------------------------------------------------------
永久删除助手...

示例 2:使用代码解释器绘图

代码解释器可以输出文件,例如生成图像图表。 在这个示例中,我们演示如何绘制图表并下载它。

gpt_assistant = GPTAssistantAgent(
name="编码助手",
llm_config={
"config_list": config_list,
},
assistant_config={
"tools": [{"type": "code_interpreter"}],
},
instructions="您是使用 Python 代码解决问题的专家。当任务解决并且没有问题时,请回复 TERMINATE。",
)

user_proxy.initiate_chat(
gpt_assistant,
message="绘制一条线图以显示美国的人口趋势。展示您如何使用代码解决它。",
is_termination_msg=lambda msg: "TERMINATE" in msg["content"],
human_input_mode="NEVER",
clear_history=True,
max_consecutive_auto_reply=1,
)
GPTAssistantAgent(编码助手)的 OpenAI 客户端配置 - 模型:gpt-4-turbo
未找到匹配的助手,正在创建新的助手
user_proxy (to Coder Assistant):

绘制一张折线图,展示美国的人口趋势。请展示你是如何使用代码解决这个问题的。

--------------------------------------------------------------------------------
Coder Assistant (to user_proxy):

要绘制一张展示美国人口趋势的折线图,我们首先需要获取包含一系列年份的人口数据。由于我在这个环境中无法访问互联网,无法直接下载数据。不过,如果你能提供数据,我可以继续为你创建折线图。

为了演示的目的,让我们假设我们有一些假设的美国人口数据,涵盖了几年的情况。我将生成一些示例数据,并使用Python中的`matplotlib`库创建一张折线图。

下面是我们的操作步骤:

收到文件 id=assistant-tvLtfOn6uAJ9kxmnxgK2OXID

这是一张展示2010年至2020年间假设美国人口趋势的折线图。这里使用的数据仅供演示目的。如果你有实际的人口数据,可以提供给我,我将相应地更新图表。

TERMINATE


--------------------------------------------------------------------------------
ChatResult(chat_id=None, chat_history=[{'content': '绘制一条折线图来展示美国的人口趋势。展示你是如何用代码解决的。', 'role': 'assistant'}, {'content': '要绘制一条展示美国人口趋势的折线图,我们首先需要获取包含一系列年份的人口数据。由于我在这个环境中无法访问互联网,无法直接下载数据。但是,如果您能提供数据,我可以继续为您创建折线图。\n\n为了演示的目的,让我们假设我们有一些假设的美国人口数据,涵盖了几年的时间。我将使用Python中的`matplotlib`库生成一些示例数据,并创建一个折线图。\n\n下面是我们可以做的:\n\n\nReceived file id=assistant-tvLtfOn6uAJ9kxmnxgK2OXID\n\n这是一个展示从2010年到2020年的假设美国人口趋势的折线图。这里使用的数据仅用于演示目的。如果您有实际的人口数据,可以提供给我,我将相应地更新图表。\n\n终止\n', 'role': 'user'}], summary='要绘制一条展示美国人口趋势的折线图,我们首先需要获取包含一系列年份的人口数据。由于我在这个环境中无法访问互联网,无法直接下载数据。但是,如果您能提供数据,我可以继续为您创建折线图。\n\n为了演示的目的,让我们假设我们有一些假设的美国人口数据,涵盖了几年的时间。我将使用Python中的`matplotlib`库生成一些示例数据,并创建一个折线图。\n\n下面是我们可以做的:\n\n\nReceived file id=assistant-tvLtfOn6uAJ9kxmnxgK2OXID\n\n这是一个展示从2010年到2020年的假设美国人口趋势的折线图。这里使用的数据仅用于演示目的。如果您有实际的人口数据,可以提供给我,我将相应地更新图表。\n\n\n', cost=({'total_cost': 0}, {'total_cost': 0}), human_input=[])

现在我们有了文件ID。我们可以下载并显示它。

api_response = gpt_assistant.openai_client.files.with_raw_response.retrieve_content(
"assistant-tvLtfOn6uAJ9kxmnxgK2OXID"
)

if api_response.status_code == 200:
content = api_response.content
image_data_bytes = io.BytesIO(content)
image = Image.open(image_data_bytes)
display(image)

gpt_assistant.delete_assistant()
正在永久删除助手...