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. 通过调用模型和工具在线程上运行助手以生成响应。

在这里插入图片描述

OBJECTWHAT 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: completedMessages: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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构学习笔记

参考教材:数据结构C语言版(严蔚敏,杨伟民编著) 参考课程:青岛大学王卓老师:数据结构与算法基础 思维导图:XMind、幕布 正在备考,结合自身空闲时间,不定时更新&a…

Three.js的阴影技术,创建逼真效果的必备!

three.js是一个流行的用于创建和展示3D图形的JavaScript库,它提供了多种阴影技术来增强3D场景的真实感和视觉效果。 一、常用阴影技术 1. 基于光线的阴影(Raytraced Shadows):通过跟踪光线的路径来计算阴影,产生非常…

大数据之CDH对Hdfs做Balance数据均衡/数据平衡/数据倾斜

问题的来源: 由于在hive工具运行sql,出现sql卡顿的情况,去cdh上查看yarn资源的分布情况,发现了整个cdh平台中hdfs和yarn资源分布不均匀,大量的爆红显示: 以下 DataNode 数据目录 位于小于其可用空间 10.0 吉字节 的文件系统中。 /data1/dfs/dn(可用:7.2 …

Python爬虫协程批量下载图片

import aiofiles import aiohttp import asyncio import requests from lxml import etree from aiohttp import TCPConnectorclass Spider:def __init__(self, value):# 起始urlself.start_url value# 下载单个图片staticmethodasync def download_one(url):name url[0].spl…

SpringCloud 微服务中网关如何记录请求响应日志?

在基于SpringCloud开发的微服务中,我们一般会选择在网关层记录请求和响应日志,并将其收集到ELK中用作查询和分析。 今天我们就来看看如何实现此功能。 日志实体类 首先我们在网关中定义一个日志实体,用于组装日志对象 Data public class …

第九十七节 Java面向对象设计 - Java Object.Finalize方法

Java面向对象设计 - Java Object.Finalize方法 Java提供了一种在对象即将被销毁时执行资源释放的方法。 在Java中,我们创建对象,但是我们不能销毁对象。 JVM运行一个称为垃圾收集器的低优先级特殊任务来销毁不再引用的所有对象。 垃圾回收器给我们一个…

函数计数和跟踪 --- console的count和trace方法

新学到一个小方法,分享一下哦。 使用 console 对象的 trace ⽅法在控制台上输出当前的调用栈,可以追踪⼀个函数的执⾏过程。 当我们想要了解一个函数是如何被其他函数调用的,或者想要查看调用栈中的其他信息时,这个方法非常有用…

Cadence Virtuoso IC617 系统内存清理

1、清空simelation和垃圾箱下的文件 2、在虚拟机磁盘路径下,例如/home下面输入 cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill 3、在windows下winR ->cmd 找到VMware安装目录和系统存放目录 Microsoft Windows [版本 10.0.19045.4412] (c…

/etc/fstab、/etc/mtab 文件详解及永久挂载(文件系统、ISO镜像、文件网络共享)

/etc/mtab /etc/mtab 是当前的分区挂载情况,记录的是当前系统已挂载的分区。每次挂载/卸载分区时会更新 /etc/mtab 文件中的信息(执行 mount 命令会改变 /etc/mtab 的信息)。 文件样例 /etc/fstab 系统开机时会主动读取 /etc/fstab 这个文…

网络服务ftp实验

网络服务之ftp vsftpd的安装和配置 rpm -qc vsftpd #检查vsftpd安装包是否存在,存在即不需要安装 yum install -y vsftpd #yum 安装vsftpdcd /etc/vsftpd ls #切换到安装好vsftpd目录下查看文件cp vsftpd.conf vsftpd.conf.bak.20240604 #将vsftpd的…

数据库开发-Mysql03

目录 1. 多表查询 1.1 概述 1.1.1 数据准备 1.1.2 介绍 1.1.3 分类 1.2 内连接 1.3 外连接 1.4 子查询 1.4.1 介绍 1.4.2 标量子查询 1.4.3 列子查询 1.4.4 行子查询 1.4.5 表子查询 1.5 案例 2. 事务 2.1 介绍 2.2 操作 2.3 四大特性 3. 索引 3.1 介绍 3…

算法人生(18):从神经网络的“剪枝策略”看“怎么找回时间”

IT人的工作和生活难平衡这事,到底要怎么解决呢,让我们从神经网络的“剪枝策略”中找点灵感吧! 剪枝策略是指训练和优化深度神经网络时采取的一种技术,从名字就知道,它就像修剪树木一样,去除不必要的枝叶&a…

《平渊》· 捌 —— 「庄子」山木篇中的 “空船效应”

《平渊》 捌 "若能虚己以游世,其孰能害之?" "方舟而济于河,有虚船来触舟,虽有惼心之人而不怒;有一人子其上,则呼张歙之;一呼而不闻,再呼而不闻,于是三呼邪…

Linux C语言学习:数据类型

一、 为什么要引入数据类型 • 计算机中每个字节都有一个地址(类似门牌号) • CPU通过 地址 来访问这个字节的空间 0x20001103 1 0 0 1 0 0 1 1 0x20001102 1 1 1 0 1 1 1 0 0x20001101 1 1 1 1 0 1 0 1 0x20001100 0 …

STM32 MDK Keil5软件调试功能使用(无需连接硬件)

MDK Keil5 在线仿真STM32(无需连接硬件) 首先点击工具栏的魔术棒配置一下:(记得选择自己的STM32芯片类型) 开启调试 使用逻辑分析仪查看IO输出 会打开这个界面,点击左边的setup按钮 会打开这个窗口&am…

Golang | Leetcode Golang题解之第119题杨辉三角II

题目&#xff1a; 题解&#xff1a; func getRow(rowIndex int) []int {row : make([]int, rowIndex1)row[0] 1for i : 1; i < rowIndex; i {row[i] row[i-1] * (rowIndex - i 1) / i}return row }

npm install pubsub-js报错的解决汇总

我在练习谷粒商城P83时&#xff0c;选择分类时触发向后端请求选择分类catId绑定的品牌数据&#xff0c;发现前端控制台报错&#xff1a; "PubSub is not definded",找不到pubsub。 因为缺少pubsub包&#xff0c;所以开始安装此包。 于是在网上一顿搜索猛如虎&…

理解NSCopying协议

NSCopying 协议用于让对象能够被复制。实现这个协议的类需要定义如何创建该对象的副本。这个副本是独立的&#xff0c;不会与原对象共享内存地址。 为什么需要 NSCopying 协议&#xff1f; 当你需要复制对象时&#xff0c;例如将对象存储到一个集合&#xff08;如数组、字典&…

如何规避亚马逊测评的风险?

国外的真实刷手和服务商的账号风险主要是表现在以下几点&#xff1a; 1. 账号资源的重复利用&#xff0c;下单的产品上一秒高端品牌&#xff0c;下一秒地摊货&#xff0c;对账号的标签定位不清晰 2. 留Review的时间周期长 3. 账号的质量会参差不齐&#xff0c;有的上不了评价…

INT202 例题

算法复杂度 O(n)&#xff1a;表示算法的渐进上界。如果一个算法的运行时间是O(n)&#xff0c;那么它的运行时间最多与输入规模n成正比。换句话说&#xff0c;当输入规模n增加时&#xff0c;算法的运行时间不会超过某个常数倍的n。比如&#xff0c;如果一个算法的时间复杂度是O(…