一、OpenAI Assistant API运行原理
-
核心概念:Assistant API的核心是构建assistant(助手)、thread(线程)和message(消息)这三个静态抽象概念之间的紧密联系,同时引入run(运行)这个动态抽象概念。
run用于保持与大模型的任务交互工作,将assistant、thread和message连接在一起,实现与大模型的实际交互。这类似于agent概念中,静态设定与动态运行时状态的关系,run就相当于agent的运行时状态,推动任务执行。
-
以ChatGPT为例理解概念
- assistant:在ChatGPT中,每个用户账号对应Assistant API中的一个assistant实例对象,代表用户角色。
- thread:用户账户下的每个历史会话框可理解为一个thread。每个assistant对象可以有多个thread,用于执行不同的聊天或任务,如不同主题的对话。
- message:进入任意一个历史会话框,其中的历史聊天记录就是message。每个thread可能包含多个message,用于存储对话过程中的问答信息,使模型具备记忆能力。
-
各概念在应用开发逻辑中的关系:assistant可以访问thread,thread通过存储message,并在对话时自动构建用户问题与大模型回答的对应存储机制,同时在后续对话中追加历史信息,让大模型拥有记忆功能。
-
run的作用及运作方式:run将assistant、thread和message有机串联,形成实际可执行的工作流程,推动任务或对话的实际运行。其运作方式如同用户输入问题,大模型接收、分析并回答,用户收到回复这一过程。
-
OpenAI官方流程图解析:以单一Assistant API对象(如个人金融机器人)为例,assistant对象需赋予能力和任务目标,如个人金融助理。用户消息(user message)通过thread传递,run接收assistant和thread(包含用户问题),并依据特定思考方式或工具(如code interpreter代码解释器)生成模型响应,最后将响应追加回thread,完成一轮对话或任务。
-
用户与Assistant API交互的顺序流程图及关键步骤
- 创建对话线程:用户发送POST请求到/v1/threads,Assistant API接收请求并初始化一个对话线程(Thread),返回线程ID。这相当于初始化一个会话框。
- 发送消息:用户通过POST请求到/v1/threads/[thread_id]/messages发送消息,Assistant API确认消息并处理,将消息添加到对应的thread中。
- 消息处理与响应(run状态):此过程涉及与大模型的实际连接,根据用户消息获取最终响应。
- 请求最新回复:用户通过GET请求到/v1/threads/[thread_id]/messages请求最新回复,Assistant API找到对应的thread,获取并返回最后一条消息,展示给用户。
二、OpenAI Assistant API使用方法
- 官方提供的两种构建方式
- Assistants Playground(网页构建):这是一个可视化界面,用户可在其中自定义参数和流程。优势在于用户友好,便于测试和学习,无需安装额外软件,适合初学者和非技术用户。但它仅适用于OpenAI的GPT模型生态。
- 本地编程环境创建:通过API在本地编程环境调用,允许开发者基于OpenAI的GPT模型实现人工智能助手或代理。优势是扩展度和可定制化更高,可集成到现有流程中。OpenAI提供了Python和Node.js的SDK,方便调用接口。
- 创建Assistant对象
-
指定模型:创建Assistant对象时,必须指定model参数,其值为OpenAI提供的GPT家族模型名称,可通过OpenAI官网或在开发环境中使用models.list()方法查看可调用模型。
-
其他建议参数:虽然name(设定身份)和instructions(设定任务目标)是可选参数,但建议作为必填项传递,以明确AI agent的身份和目标,提高任务执行效果。
-
构建代码示例:使用client.beta.assistants.create()方法创建Assistant对象,如:
-
from openai import OpenAI
client = OpenAI()
assistant = client.beta.assistants.create(
model="gpt-4o-mini-2024-07-18",
name="Good writer",
instructions="You are an expert at writing excellent literature"
)
- 返回响应体分析:创建成功后,可通过to_dict()方法查看返回响应体,其中包含如id(唯一标识)、created_at(创建时间)、instructions(自定义指令)、model(使用模型)、name(设定名称)等信息。
字段 | 解释 |
---|---|
id | 该Assistant对象在OpenAI系统中的唯一标识符,用于在后续操作中准确识别和定位此Assistant实例 。 |
created_at | Assistant对象的创建时间,以Unix时间戳形式呈现,可用于记录创建时间点,方便进行时间相关的统计或审计等操作 。 |
description | 对Assistant对象的描述信息,当前值为None ,可用于添加关于Assistant功能、用途等方面的简要说明 。 |
instructions | 创建Assistant对象时设定的指令,这里表示“你是优秀文学创作方面的专家” ,用于明确Assistant的任务目标和行为准则 。 |
metadata | 元数据字段,当前为空字典,开发者可自行添加一些额外信息,如版本号、所属项目等,用于更好地管理和识别Assistant对象 。 |
model | 创建该Assistant对象所使用的具体模型版本,此处为gpt-4o-mini-2024-07-18 ,模型决定了Assistant具备的能力和表现 。 |
name | 为Assistant设定的名称,即“Good writer(优秀作家)” ,是其身份标识的一部分,在交互中可体现其角色 。 |
object | 固定值为assistant ,用于表明该对象是Assistant API中的Assistant对象实例 。 |
tools | 工具列表,当前为空列表,若Assistant在执行任务时需要使用外部工具(如代码解释器等),相关工具配置信息会在此列出 。 |
response_format | 响应格式设置,当前为auto ,表示由系统自动决定如何格式化返回的响应内容 。 |
temperature | 大模型生成回复时的参数,取值范围通常在0 - 2之间,值为1.0时,用于控制生成文本的随机性,值越高文本越具多样性和创造性,但也可能更偏离预期;值越低回复越保守、确定性越高 。 |
tool_resources | 工具资源相关字段,当前为空字典,当Assistant使用工具时,可能会在此存储与工具相关的资源信息,如工具使用权限、配置参数等 。 |
top_p | 同样是大模型生成回复的参数,与temperature 类似,用于调整生成文本的随机性和多样性,通过选择概率质量高的词来生成文本,当前值为1.0 。 |
- 创建Thread对象:在创建好Assistant对象后,需创建Thread对象。
Thread即会话,每个Assistant对象可应用多个Thread。创建Thread的一种简单方式是直接调用https://api.openai.com/v1/threads接口,无需任何参数。Thread实例与Assistant实例在创建阶段无需绑定,执行会话或任务时绑定即可。