0%

OpenAI Assistants 使用方法

本文介绍OpenAI新发布的assitance的使用方法,回答下面两个问题:

  • Assistants是什么?
  • Assistants怎么用?
  • Assistants的原理

OpenAI assistant 是什么

OpenAI Assistants是OpenAI于2023年11月7日晚发布的一款gpt集成应用产品,即在gpt的能力基础上,整合了一些附加的功能,用于帮助开发者在自己的应用中更方便的集成gpt。

目前,Assistants的能力包括三个部分:自动编辑和运行代码,信息检索,函数调用。也就是说,openai将这三种能力打包起来,提供给开发这使用。

对于想使用gpt的人而言,这三种能力是如此的基础和重要,在此之前,已经有众多的组织和个人开发出了一系列工具用于实现这些功能。

自动编辑和运行代码将会大大扩展gpt的能力边界,它会根据问题自动生成并运行python的代码,根据运行的结果回答问题。

信息检索也是非常重要的能力,近期非常热门的话题就是Retrieval-Augmented Generation (RAG),就是希望用户提供基础的数据文件,使用GPT强大的综合能力进行处理分析,用于解决GPT回答的内容不可靠、专业性和私人化程度不足的问题,其中最热门的两个开源项目是:llamaIndexlangchain

下图是RAG的基本实现思路:

现在,opanai的官方提供了这样三种集成的gpt能力,开发者可以直接在这三种能力的基础上进行后续开发,节省了很多时间和精力。

OpenAI assistant 如何使用

根据OpenAI 给的介绍,使用Assistants API的步骤分为总体如下四步:

  1. 创建Assistants实例。
  2. 创建对话线程Thread
  3. 根据问题创建信息Messages
  4. 在线程中运行(run)Assistants,获得结果。

openai在官网给了一个回答数学问题的Assistant创建方法,该案例使用的能力是自动编辑和运行代码

Step0 安装openai-python

1
pip install openai

测试是否安装成功:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import os
from openai import OpenAI
client = OpenAI(
# defaults to os.environ.get("OPENAI_API_KEY")
api_key="My API Key",
)
chat_completion = client.chat.completions.create(
messages=[
{
"role": "user",
"content": "Say this is a test, give me some faith",
}
],
model="gpt-3.5-turbo-1106",
)
print(chat_completion.choices[0].message.content)

如果还没有OpenAI的api,某宝可以解决;如果不知道还不知道怎么设置OPENAI_API_KEY,可以参考这个链接

Step1 创建Assistants

首先,创建一个assistant实例,其中可以指定的主要参数包括:

  • Instructions:指定这个Assistant的行为和返回。
  • model:选择使用的模型,包括GPT-3.5和GPT-4的一系列模型,需要注意的是如果要使用信息检索,必须使用这两个模型:gpt-3.5-turbo-1106gpt-4-1106-preview
  • Tools:可以选择上文提到的三种工具,分别是:code_interpreterretrievalfunction
1
2
3
4
5
6
assistant = client.beta.assistants.create(
name="Math Tutor",
instructions="You are a personal math tutor. Write and run code to answer math questions.",
tools=[{"type": "code_interpreter"}],
model="gpt-4-1106-preview"
)

Step2 创建对话线程Thread

这里可以我理解新建类似于chatgpt的一个会话,官方建议尽早给每个用户创立一个thread,且将该用户所有的message都放在这个thread内。

1
thread = client.beta.threads.create() 

Step3 将信息Messages 加入Thread

构建Messages,并将起加入到Thread中。

1
2
3
4
5
message = client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content="I need to solve the equation `3x + 11 = 14`. Can you help me?"
)

Step4 运行(run)Assistants

为了获取结果,构建run来让Assistants来阅读Thread,并做出调用工具等一系列指令。

1
2
3
run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id)

Step5 展示结果

当开始运行后,可以查看运行的状态,如果状态为completed,则表示运行结束了,可以在thread中得到运行的结果了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
run = client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id
)

while run.status != "completed":
print(run.status)
time.sleep(60) # 等待60秒
run = client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id
)

messages = client.beta.threads.messages.list(
thread_id=thread.id
)

print(messages.data)

三种工具详解

代码生成和运行

这个实现了从需求到代码实现、调试运行、结果返回的全流程自动化。

gpt会首先解析用户的需求,然后根据这个需求在沙盒环境下生成运行Python代码,如果生成的代码运行有错误,它甚至可以根据错误自行修改完善。

此外,它也支持各种类型的文件输入和输出,例如可以输入一个csv文件,得到一个可视化的图片输出。

文本检索

为了使用信息检索工具,需要先上传我们的文档,assistants支持文件最大大小为512MB,格式包括pdf文件,markdown文件,docx文件,具体见表格

有了这些输入的文档,文本检索工具会将我们的需求和上传的文本进行整合,以此输出更可靠的结果。

除了改进输出结果外,这个工具也提供了其他几个非常重要的工具,最为重要的一个是可以输出引用出处,也就是会把回答中涉及到的引用给标注出来,知明是哪个文件的哪个位置,这点对于构建一个完全可靠的答案非常重要。

函数调用

除了让gpt根据问题自动编写代码外,也可以向起提供编辑好的函数,并说明函数的用途、参数等信息,这样gpt就可以在用到的时候自动调用这些函数,实现能力的超级加倍。

如何理解这些工具

这张图说明了上面这些功能的实现细节,其中包括五个对象:

  • Assistant:相当于一个智能体,它可以调用其他的工具,是用户与之交流的对象;
  • Thread:用户与Assistant发起的一次对话;
  • Message:用户或Assistant所发出,可以是文字,也可以是文档、图片等;
  • Run:Assistant为了解决用户的需求,所发起的一次求解过程。在这个过程中,它可以调用其他的工具(例如信息检索)来帮助他解决这个问题;
  • Run Step:更加细致化的流程描述,理解Assistant在一次求解过程中的工作流程。

Assistants object architecture diagram