首页 > 其他分享 >Assistants API

Assistants API

时间:2024-03-10 16:24:20浏览次数:32  
标签:Python 助手 API 线程 Assistants id

Assistants API 允许您在自己的应用程序中构建 AI 助手。助手有指令,可以利用模型、工具和知识来响应用户查询。Assistants API 目前支持三种类型的工具:代码解释器、检索和函数调用。未来,我们计划发布更多 OpenAI 构建的工具,并允许您在我们的平台上提供自己的工具。

您可以使用Assistants Playground或通过构建本指南中概述的分步集成来探索 Assistants API 的功能。从较高层面来看,Assistants API 的典型集成具有以下流程:

  1. 通过定义其自定义指令并选择模型来在 API 中创建助手。如果有帮助,请启用代码解释器、检索和函数调用等工具。
  2. 当用户开始对话时创建一个线程。
  3. 当用户提问时将消息添加到线程中。
  4. 在线程上运行助手以触发响应。这会自动调用相关工具。
Assistants API 处于测试阶段,我们正在积极努力添加更多功能。在我们的开发者论坛中分享您的反馈!   调用 Assistants API 要求您传递 beta HTTP 标头。如果您使用 OpenAI 的官方 Python 或 Node.js SDK,则会自动处理此问题。
OpenAI-Beta: assistants=v1

本入门指南逐步介绍了创建和运行使用代码解释器的助手的关键步骤。

助理游乐场

除了Assistants API之外,我们还提供Assistants Playground(需要登录)。Playground 是探索 Assistants API 功能并学习如何在不编写任何代码的情况下构建自己的 Assistant 的好方法。

第 1 步:创建助手

助手代表一个实体,可以配置为使用多个参数响应用户的消息,例如:

  • 说明:助理和模特应如何表现或回应
  • 型号:您可以指定任何 GPT-3.5 或 GPT-4 型号。检索工具至少需要gpt-3.5-turbo-1106(支持较新版本)或 个gpt-4-turbo-preview模型。
    • 注意:Assistants API 中对微调模型的支持即将推出
  • 工具:API 支持由 OpenAI 构建和托管的代码解释器和检索。
  • 函数:API 允许您定义自定义函数签名,其行为与我们的函数调用功能类似。

在此示例中,我们将创建一个作为个人数学导师的助手,并启用代码解释器工具。

  Python  
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-turbo-preview"
)

第 2 步:创建线程

一个线程代表一个对话。我们建议在用户发起对话后立即为每个用户创建一个线程。通过创建 Messages在此线程中传递任何特定于用户的上下文和文件。

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

线程没有大小限制。您可以向话题添加任意数量的消息。助手将使用相关的优化技术(例如我们已经使用 ChatGPT 进行了广泛测试的截断)来确保对模型的请求适合最大上下文窗口。当您使用 Assistants API 时,您可以委托控制针对任何给定运行传递给模型的输入令牌数量,这意味着在某些情况下您对运行 Assistant 的成本的控制较少,但不必处理复杂性自己管理上下文窗口。

已启用“线程”页面的组织可以查看通过助手 API 和助手游乐场创建的线程。线程页面权限可以在组织设置中进行管理。

第 3 步:向主题添加消息

消息包含文本,还可以选择允许用户上传的任何文件。消息需要添加到特定的 Thread 中目前不支持通过消息对象添加图像,例如使用 GPT-4 和 Vision 在聊天完成中添加图像,但我们计划在未来几个月内添加对它们的支持。您仍然可以上传图像并通过检索对其进行处理

  Python  
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?"
)

现在,如果您在 Thread 中列出消息,您将看到该消息已被附加。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
  "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": []
        }
          }],
        ...

第四步:运行助手

为了让助手响应用户消息,您需要创建一个 Run。这使得助手读取线程并决定是调用工具(如果启用了)还是简单地使用模型来最好地回答查询。随着运行的进行,助手将消息附加到带有role="assistant". 助手还将自动决定要在模型的上下文窗口中包含哪些先前的消息。这对定价和模型性能都有影响。目前的方法已经根据我们在构建 ChatGPT 时所学到的知识进行了优化,并且可能会随着时间的推移而发展。

您可以选择在创建运行时将新指令传递给助手,但请注意,这些指令会覆盖助手的默认指令。

  Python  
1
2
3
4
5
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."
)

第五步:检查运行状态

默认情况下,运行进入queued状态。您可以定期检索运行以检查其状态,看看它是否已移至completed.

  Python  
1
2
3
4
run = client.beta.threads.runs.retrieve(
  thread_id=thread.id,
  run_id=run.id
)

第 6 步:显示助理的响应

运行完成后,您可以列出助手添加到线程的消息。

  Python  
1
2
3
messages = client.beta.threads.messages.list(
  thread_id=thread.id
)

最后,将它们显示给用户!在此运行期间,助理向线程添加了两条新消息。下面是一个示例:

角色内容
user 我需要解方程3x + 11 = 14。你能帮助我吗?
assistant 当然,简·多伊。(3x + 11 = 14)要求解的方程(x),您需要(x)在方程的一侧进行隔离。您可以按照以下方法执行此操作:
  1. 等式两边同时减去11,得到(3x = 3)
  2. 然后,两边除以 3 即可解出(x)
(x)让我为您计算一下价值。
assistant 方程的解(3x + 11 = 14)(x = 1)

标签:Python,助手,API,线程,Assistants,id
From: https://www.cnblogs.com/flyingsir/p/18064306

相关文章

  • elasticsearch常用请求接口Rest API示例
    创建shopping索引PUT/shopping查看全部索引GET/_cat/indices查看指定索引GET/shopping删除指定索引DELETE/shopping索引的映射字段属性,是否关键字和加入索引PUT/shopping/_mapping{"properties":{"title":{"type":"text"},&qu......
  • 使用C#和MemoryCache组件实现轮流调用APIKey以提高并发能力
    文章信息标题:使用C#和MemoryCache组件实现轮流调用APIKey以提高并发能力的技巧摘要:本文介绍了如何利用C#语言中的MemoryCache组件,结合并发编程技巧,实现轮流调用多个APIKey以提高系统的并发能力。通过示例代码和详细说明,读者将了解如何有效地管理APIKey的调用次数限制,并优化系......
  • kube-api-server的端口是多少?各个pod是如何访问kube-api-server的
    kube-api-server的端口是8080和6443,前者是http的端口,后者是https的端口,以我本机使用kubeadm安装的k8s为例:在命名空间的kube-system命名空间里,有一个名称为kube-api-master的pod,这个pod就是运行着kube-api-server进程,它绑定了master主机的ip地址和6443端口,但是在default命名空间......
  • 淘宝天猫获得淘宝商品评论 API 返回值说明 (商品详情店铺)
    item_review-获得淘宝商品评注册开通taobao.item_review公共参数名称 类型 必须 描述key String 是 调用key(必须以GET方式拼接在URL中)secret String 是 调用密钥api_name String 是 API接口名称(包括在请求地址中)[item_search,item_get,item_search_shop等]cache String ......
  • 淘宝天猫获得商品详情 API 如何做到实时数据获取?
    淘宝天猫的商品详情API实现实时数据获取主要依赖于以下几个关键方面:API设计与更新频率:淘宝天猫的API接口会定期进行数据更新,确保返回的商品详情是最新的。这通常依赖于平台的后端系统,它们会实时监控商品数据的变化并实时更新到API中。开发者在调用API时,可以获取到最新的商品详......
  • 使用 Visual Studio 2022 直接调试 WebAPI
    参考资料https://learn.microsoft.com/zh-cn/aspnet/core/test/http-files?view=aspnetcore-8.0在没有Postman等专门软件环境下,有没有轻量的调试http方法呢?尤其是每天都要打开宇宙第一IDE的环境,其实VS本身就带了一种方式,就是创建一个http文件来完成这个工作.VisualStud......
  • API可视化编排,提高API可复用率
    在数字化时代,API(应用程序编程接口)已成为不同软件应用之间沟通的桥梁。然而,如何高效管理、编排和复用这些API,成为了企业和开发者面临的重要挑战。随着技术的不断进步,RestCloud API可视化编排应运而生,成为提高API复用率、提升开发效率的得力助手。 一、API复用率的挑战在传统的......
  • 如何开发云打印服务?云打印api怎么对接?
    近来一段时间,云打印的火热让很多企业和第三方程序也想通过云打印服务来进行App的变现,尤其是一些学习类、工具类App,本身的变现方式较为单一,对于云打印服务的需求就更大了。那么我们该如何开发云打印服务?云打印api怎么对接?今天就带大家来了解一下。 如何开发云打印服务?云打印ap......
  • 高德地图api标记点和线段重合点击响应问题
    问题现象:现在地图上放置了line和marker,marker在line的上层显示这时line和marker同时存在,当line和marker有重合部分并点击重合点时,只响应line对应的click事件,而位于下方的line无法响应对应的click事件如图:原因:点击事件被上层的marker阻挡,marker并未注册点击事件解决方案在am......
  • .net api接口接收字符串或者xml
    a///<summary>///接收字符串或者xml///</summary>///<returns></returns>[HttpPost]publicasyncTask<JsonResult>AcceptXMLOrString(){varlen=Convert.ToInt32(HttpContext.Request.ContentLength);byte[]byt=newbyte......