Assistants API
Assistants API允许您在您自己的应用程序中构建AI助手。助手具有指令,并可以利用模型、工具和知识来响应用户查询。Assistants API目前支持三种类型的工具:代码解释器、检索和函数调用。未来,我们计划发布更多由OpenAI构建的工具,并允许您在我们的平台上提供自己的工具。
您可以使用 Assistants playground 探索Assistants API的功能,或按照本指南中逐步集成的说明进行构建。从高层次上看,Assistants API的典型集成流程如下:
- 通过定义其自定义指令并选择模型来在 API 中创建助手。如果有帮助,请启用代码解释器、检索和函数调用等工具。
- 当用户开始对话时创建一个线程。
- 当用户提问时将消息添加到线程中。
- 在线程上运行助手以触发响应。这会自动调用相关工具。
Assistants playground
除了Assistants API之外,我们还提供Assistants Playground(需要登录)。Playground 是探索 Assistants API 功能并学习如何在不编写任何代码的情况下构建自己的 Assistant 的好方法。
第 1 步:创建助手
助手代表一个实体,可以配置为使用多个参数响应用户的消息,例如:
- 说明:助理和模特应如何表现或回应
- 模型:您可以指定任何 GPT-3.5 或 GPT-4 模型,包括微调模型。检索工具需要gpt-3.5-turbo-1106和gpt-4-1106-preview模型。
- 工具:API 支持由 OpenAI 构建和托管的代码解释器和检索。
- 函数:API 允许您定义自定义函数签名,其行为与我们的函数调用功能类似。
在此示例中,我们将创建一个作为个人数学导师的助手,并启用代码解释器工具。
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"
)
第 2 步:创建线程
一个线程代表一个对话。我们建议在用户发起对话后立即为每个用户创建一个线程。通过创建 Messages在此线程中传递任何特定于用户的上下文和文件。
thread = client.beta.threads.create()
线程没有大小限制。您可以向话题添加任意数量的消息。助手将使用相关的优化技术(例如我们已经使用 ChatGPT 进行了广泛测试的截断)来确保对模型的请求适合最大上下文窗口。当您使用 Assistants API 时,您可以委托控制针对任何给定运行传递给模型的输入令牌数量,这意味着在某些情况下您对运行 Assistant 的成本的控制较少,但不必处理复杂性自己管理上下文窗口。
第 3 步:向主题添加消息
消息包含文本,还可以选择允许用户上传的任何文件。消息需要添加到特定的 Thread 中。目前不支持通过消息对象添加图像,例如使用 GPT-4 和 Vision 在聊天完成中添加图像,但我们计划在未来几个月内添加对它们的支持。您仍然可以上传图像并通过检索对其进行处理。
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?"
)
现在,如果您在 Thread 中列出消息,您将看到该消息已被附加。
{
"object": "list",
"data": [
{
"created_at": 1696995451,
"id": "msg_abc123",
"object": "thread.message",
"thread_id": "thread_abc123",
"role": "user",
"content": [{
"type": "text",
"text": {
"value": "I need to solve the equation `3x + 11 = 14`. Can you help me?",
"annotations": []
}
}],
...
第4步:运行助手
为了让助手响应用户消息,您需要创建一个 Run。这使得助手读取线程并决定是调用工具(如果启用了)还是简单地使用模型来最好地回答查询。随着运行的进行,助手将消息附加到带有
role="assistant"
. 助手还将自动决定要在模型的上下文窗口中包含哪些先前的消息。这对定价和模型性能都有影响。目前的方法已经根据我们在构建 ChatGPT 时所学到的知识进行了优化,并且可能会随着时间的推移而发展。
您可以选择在创建运行时将新指令传递给助手,但请注意,这些指令会覆盖助手的默认指令。
run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id=assistant.id,
instructions="Please address the user as Jane Doe. The user has a premium account."
)
第5步:检查运行状态
默认情况下,运行进入queued状态。您可以定期检索运行以检查其状态,看看它是否已移至completed.
run = client.beta.threads.runs.retrieve(
thread_id=thread.id,
run_id=run.id
)
第 6 步:显示助理的响应
运行完成后,您可以列出助手添加到线程的消息。
messages = client.beta.threads.messages.list(
thread_id=thread.id
)
最后,将它们显示给用户!在此运行期间,助理向线程添加了两条新消息。下面是一个示例:
角色 | 内容 |
---|---|
user | I need to solve the equation 3x + 11 = 14. Can you help me? |
assistant | Certainly, Jane Doe. To solve the equation (3x + 11 = 14) for (x), you’ll want to isolate (x) on one side of the equation. Here’s how you can do that: Subtract 11 from both sides of the equation to get (3x = 3). Then, divide both sides by 3 to solve for (x). Let me calculate the value of (x) for you. |
assistant | The solution to the equation (3x + 11 = 14) is (x = 1). |
如果您想探索或显示助手及其工具的内部工作原理,您还可以检索此运行的运行步骤。
最后编辑:Jeebiz 更新时间:2023-12-28 16:43