AI大模型应用开发实践:5.快速入门 Assistants API

快速入门 Assistants API

Assistants API 允许您在自己的应用程序中构建人工智能助手。一个助手有其指令,并可以利用模型、工具和知识来回应用户查询。

Assistants API 目前支持三种类型的工具:

  • 代码解释器 Code Interpreter
  • 检索 Retrieval
  • 函数调用 Function calling

使用 Playground 可以在线探索和测试 Assistants API 功能。

本入门指南将指导您完成创建和运行使用代码解释器的助手的关键步骤,以下是使用 Assistants API 标准流程:

  1. 通过定义其自定义指令并选择 LLM 来创建一个助手(Assistant)。如果有需求,可以添加文件并启用诸如代码解释器、检索和函数调用等工具。
  2. 当用户开始对话时,创建一个线程(Thread)。
  3. 当用户提问时,向线程添加消息(Messages)。
  4. 通过调用模型和工具在线程上运行助手以生成响应。

在这里插入图片描述

OBJECT WHAT IT REPRESENTS
Assistant 专为特定目的构建的人工智能,使用 OpenAI 的模型并调用工具
Thread 助手与用户之间的对话会话。线程存储消息,并自动处理截断,以将内容适应模型的上下文。
Message 由助手或用户创建的消息。消息可以包括文本、图片和其他文件。消息以列表形式存储在线程上。
Run 在线程上对一个助手的调用。助手利用其配置和线程的消息执行任务,通过调用模型和工具。作为运行的一部分,助手会将消息追加到线程中。
Run Step 助手在运行中采取的详细步骤列表。助手可以在其运行期间调用工具或创建消息。检查运行步骤可以让您深入了解助手如何得出最终结果。

使用 Assistants 开发数学辅导老师

在这个示例中,我们正在创建一个数学辅导助手,并启用了代码解释器工具。

第一步:创建助手

import openai  # 导入 openai 库

# 从环境变量 OPENAI_API_KEY 中获取 API 密钥
client = openai.OpenAI()

# 创建一个名为 "Math Tutor" 的助手,它是一个个人数学辅导老师。这个助手能够编写并运行代码来解答数学问题。
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",  # 使用模型: GPT-4
)

第二步:创建线程

一个线程代表用户和一个或多个助手之间的对话。

# 创建一个交流线程
thread = client.beta.threads.create()

第三步:往线程添加消息

用户或APP创建的消息内容将作为消息对象(Message Object)添加到线程中。

消息可以包含文本和文件,向线程添加的消息数量没有限制 - OpenAI 会智能地截断任何不适合模型上下文窗口的内容。

# 在该线程中创建一条用户消息,并提交一个数学问题:“我需要解方程 `3x + 11 = 14`。你能帮忙吗?”
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?",
)

第四步:调用助手

一旦所有用户消息都添加到了线程中,你可以使用任何助手运行该线程。

创建一个运行会使用与助手相关的模型和工具来生成响应。这些响应将作为助手消息添加到线程中。

# 创建并等待执行流完成,用于处理该线程中的交互和问题解答
run = client.beta.threads.runs.create_and_poll(
    thread_id=thread.id,
    assistant_id=assistant.id,
    instructions="Please address the user as Jane Doe. The user has a premium account.",  # 以 Jane Doe 称呼用户,并且用户拥有高级账户
)

print("Run completed with status: " + run.status)  # 打印执行流的完成状态

# 如果执行流状态为 "completed"(已完成),则获取并打印所有消息
if run.status == "completed":
    messages = client.beta.threads.messages.list(thread_id=thread.id)

    print("\nMessages:\n")
    for message in messages:
        assert message.content[0].type == "text"
        print(f"Role: {
     message.role.capitalize()}")  # 角色名称首字母大写
        print("Message:")
        print(message.content[0].text.value + "\n")  # 每条消息后添加空行以增加可读性
Run completed with status: completed

Messages:

Role: Assistant
Message:
The solution to the equation \(3x + 11 = 14\) is \(x = 1\). If you need additional help with this equation or another one, feel free to ask, Jane.

Role: Assistant
Message:
Of course, Jane! To solve the equation \(3x + 11 = 14\), we need to isolate the variable \(x\) on one side of the equation. We can do this by following these steps:

1. Subtract 11 from both sides of the equation to get the term with \(x\) by itself on one side.
2. Divide both sides of the resulting equation by 3 to solve for \(x\).

Let's do these calculations to find the value of \(x\).

Role: User
Message:
I need to solve the equation `3x + 11 = 14`. Can you help me?

通过 Assistant ID 删除指定助手

# 删除创建的助手
client.beta.assistants.delete(assistant.id)
AssistantDeleted(id='asst_CmikkRdSAUDlb5dBDqHX57dT', deleted=True, object='assistant.deleted')

使用流式输出实现数学辅导老师

import openai

# 从环境变量 OPENAI_API_KEY 中获取 API 密钥
client = openai.OpenAI()

# 创建一个名为 "Math Tutor" 的助手,它是一个个人数学辅导老师。这个助手能够编写并运行代码来解答数学问题。
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",  # 使用的模型是 GPT-4
)

# 创建一个交流线程
thread = client.beta.threads.create()

# 在该线程中创建一条消息,表示用户角色,并提交一个数学问题:“我需要解方程 `3x + 11 = 14`。你能帮忙吗?”
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?",
)

print("starting run stream")  # 打印开始执行流的消息

# 创建一个执行流,用于处理该线程中的交互和问题解答
stream = 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.",  # 以 Jane Doe 称呼用户,并且用户拥有高级账户
    stream=True,  # 持续流式传输
)

# 遍历执行流中的事件,并以 JSON 格式打印它们
for event in stream:
    print(event.model_dump_json(indent=2, exclude_unset=True))

# 删除创建的助手
client.beta.assistants.delete(assistant.id)
starting run stream
{
  "data": {
    "id": "run_0PqlNbmtft5Nz6F8eaYsP1vU",
    "assistant_id": "asst_9UdKwJ8S7iOMrlEX6lzXpLWD",
    "cancelled_at": null,
    "completed_at": null,
    "created_at": 1713409009,
    "expires_at": 1713409609,
    "failed_at": null,
    "file_ids": [],
    "incomplete_details": null,
    "instructions": "Please address the user as Jane Doe. The user has a premium account.",
    "last_error": null,
    "max_completion_tokens": null,
    "max_prompt_tokens": null,
    "metadata": {},
    "model": "gpt-4-1106-preview",
    "object": "thread.run",
    "required_action": null,
    "response_format": "auto",
    "started_at": null,
    "status": "queued",
    "thread_id": "thread_rudF1jmbDRotBYIm3RVJIoX0",
    "tool_choice": "auto",
    "tools": [
      {
        "type": "code_interpreter"
      }
    ],
    "truncation_strategy": {
      "type": "auto",
      "last_messages": null
    },
    "usage": null,
    "temperature": 1.0,
    "top_p": 1.0
  },
  "event": "thread.run.created"
}
{
  "data": {
    "id": "run_0PqlNbmtft5Nz6F8eaYsP1vU",
    "assistant_id": "asst_9UdKwJ8S7iOMrlEX6lzXpLWD",
    "cancelled_at": null,
    "completed_at": null,
    "created_at": 1713409009,
    "exp

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/680368.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电源modbus 485 测试方法之功能选择

目录 背景介绍 错误分析 功能开关拨码原因分析 背景介绍 在正常测试modbus-RTU 485通信是否正常时,正常的流程如下: 连接电源模块与摄像仪模块的485连接线,或使用USB转485连接电脑,打开串口调试助手,开始访问寄存…

线性代数|机器学习-P6正定和半正定矩阵

文章目录 1. 正定矩阵的判定标准2. 非正定矩阵3. 能量方程3. 正定方程4. 半正定矩阵 1. 正定矩阵的判定标准 目前我们有 5 种方法判断矩阵是否为正定矩阵: 所有的特征值大于零: λ i > 0 \lambda_i>0 λi​>0对于所有的非零向量x,…

微信小程序-WXS脚本

一、概述 1.WXS WXS(WeiXin Script)是小程序独有的一套脚本语言,结合 WXML,可以构建出页面的结构。 2.wxs 的应用场景 wxml中无法调用在页面的.js 中定义的函数,但是,wxml 中可以调用 wxs 中定义的函数。因此,小程序…

13. 一个天文望远镜R-C系统的设计

导论: 要求主口径2160mm,整个系统的相对孔径为1:1(相对孔径:镜头的有效孔径和焦距之比)。系统的焦距为19440mm,焦点需引出主镜之后,以便配接各种光谱和光度观测设备。 设计流程: (1)理论分析与计算 望远镜的两镜系统由一个主镜和一个次镜组成,通常主镜和次镜都是…

文本纠错助手

欢迎来到高效文本纠错的世界! 文本纠错助手 是您的最佳搭档,专为处理各种文本中的错误而生。在我们强大的 Intel G8i 处理器上,它能快速、准确地帮你找出并纠正错误。下面是这款神器的详细介绍。 硬件配置 处理器:Intel G8i 处理…

Adobe XD最新版号查询,如何使用?

Adobe XD是Adobe家推出的基于矢量的原型设计合作工具,被业界视为应对Sketch的“对抗”产品。Adobe XD不同于Sketch的系统限制,灵活性比较高,Windows和Mac都可以使用。自2017年推出以来,Adobe XD版经历了多次更新,这篇文…

vue3之拆若依--记实现后台管理首页(左侧菜单栏、头部信息区域...)

效果图 前期准备 启动若依在本地 启动若依后台,跑在自己本地: 这里对于如何下载若依相关的前后端代码请参考若依官网:RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-…

03--nginx架构实战

前言:这应该是nginx梳理的最后一章,写一些关于网站架构和网站上线的知识内容,主要是感觉到运维并不是单一方向的行业,这一章概念会有一些广泛,但是非常重要,都是这几年工作中遇到的情况,整理一下…

element-plus表格添加简单右键

实现如下 <template><main class"mainClass" > <el-table :data"tableData" style"width: 100%"row-contextmenu"rowContextmenu"cell-contextmenu"cellContextmenu"contextmenu.prevent><el-table-c…

C51学习归纳4 --- 矩阵键盘

一、开发板原理图 我们可以看到这个键盘是4*4的&#xff0c;行可以由4个数据接口接收&#xff08;P1_4~7&#xff09;&#xff0c;列可以由4个数据接口接收&#xff08;P1_0~3)。 所以我们可让行作为扫描方向&#xff0c;或者列作为扫描方向&#xff0c;进行按键扫描。如何扫描…

AI 入门指南二 :AI提示词(Prompt)

一&#xff0c;提示词的定义 提示词在中文中意为“触发”&#xff0c;在自然语言处理&#xff08;NLP&#xff09;的领域&#xff0c;它更接近于一个“心领神会”的概念&#xff0c;而非具有明确定义的术语。 简而言之&#xff0c;提示词是用户对大型语言模型的输入&#xff0…

氘化铝锂产品附加值高 市场需求将继续增长

氘化铝锂产品附加值高 市场需求将继续增长 氘化铝锂&#xff08;LiAlD4&#xff09;是一种还原性非常强的氢同位素铝-氘化合复合物&#xff0c;常温常压下为灰色固体粉末&#xff0c;是四氢锂铝中被氘原子取代的衍生物。在锂电池领域&#xff0c;氘化铝锂可以添加到正极材料中&…

专业好用的屏幕捕获工具

一、简介 1、一款功能全面、操作简便的屏幕捕获工具,它不仅支持常规的截屏功能,还包括了录屏、OCR文字识别、翻译、GIF制作等多项实用功能。该软件适用于Windows操作系统,旨在为用户提供一站式的屏幕捕捉解决方案 二、下载 1、下载地址: 官网链接:https://verycapture.com…

Sqli-labs-maste靶场的下载、配置

目录 下载 配置 配置数据库 配置网站 初始化靶场 下载 GitHub下载地址&#xff1a; 百度网盘&#xff1a;https://pan.baidu.com/s/1jBcKkLzRV8q72rx_0AcznA?pwdxrsc 提取码&#xff1a;xrsc 迅雷链接&#xff1a;https://pan.xunlei.com/s/VNzC0-XAVysQYz4HufgYYze4A…

php质量工具系列之phpmd

PHPMD PHP Mess Detector 它是PHP Depend的一个衍生项目&#xff0c;用于测量的原始指标。 PHPMD所做的是&#xff0c;扫描项目中可能出现的问题如&#xff1a; 可能的bug次优码过于复杂的表达式未使用的参数、方法、属性 PHPMD是一个成熟的项目&#xff0c;它提供了一组不同的…

Fortigate防火墙二层接口的几种实现方式

初始配置 FortiGate出厂配置默认地址为192.168.1.99&#xff08;MGMT接口&#xff09;&#xff0c;可以通过https的方式进行web管理&#xff08;默认用户名admin&#xff0c;密码为空&#xff09;&#xff0c;不同型号设备用于管理的接口略有不同。 console接口的配置 防火墙…

1.2 QT随手简记(二)

QT学习篇2 一、QT学习方法 1. QT查询与学习资源 QT助手&#xff1a;学会使用QT的助手和上网查询&#xff0c;掌握API文档的查询与使用。QT设计师界面&#xff1a;通过图形界面进行组件的拖拽布局&#xff0c;所见即所得。 2. QT设计师界面操作 跳转与代码生成&#xff1a;…

大数据湖一体化平台整体建设方案(PPT原件)

背 景&#xff1a;大数据湖的发展背景与建设理念 体 系&#xff1a;大数据湖体系规划与建设思路 生态圈&#xff1a;探索新兴业务入湖建设模式 共 享&#xff1a;大数据湖统一访问共享规划 运 营&#xff1a;大数据湖一体化运营管理建设 软件全套资料部分文档清单&…

使用Django JWT实现身份验证

文章目录 安装依赖配置Django设置创建API生成和验证Token总结与展望 在现代Web应用程序中&#xff0c;安全性和身份验证是至关重要的。JSON Web Token&#xff08;JWT&#xff09;是一种流行的身份验证方法&#xff0c;它允许在客户端和服务器之间安全地传输信息。Django是一个…

Canva如何通过从MySQL迁移到DynamoDB来管理每日新增的5000万素材

随着数字化设计的蓬勃发展&#xff0c;Canva作为一家在线设计平台&#xff0c;面临着海量的用户生成内容。每天&#xff0c;平台上新增的素材数量高达5000万&#xff0c;这对数据库系统提出了前所未有的挑战。为了应对这一挑战&#xff0c;Canva决定将原本基于MySQL的数据库系统…