AI大模型应用开发实践:5.快速入门 Assistants API
快速入门 Assistants API
Assistants API 允许您在自己的应用程序中构建人工智能助手。一个助手有其指令,并可以利用模型、工具和知识来回应用户查询。
Assistants API 目前支持三种类型的工具:
- 代码解释器 Code Interpreter
- 检索 Retrieval
- 函数调用 Function calling
使用 Playground 可以在线探索和测试 Assistants API 功能。
本入门指南将指导您完成创建和运行使用代码解释器的助手的关键步骤,以下是使用 Assistants API 标准流程:
- 通过定义其自定义指令并选择 LLM 来创建一个助手(Assistant)。如果有需求,可以添加文件并启用诸如代码解释器、检索和函数调用等工具。
- 当用户开始对话时,创建一个线程(Thread)。
- 当用户提问时,向线程添加消息(Messages)。
- 通过调用模型和工具在线程上运行助手以生成响应。
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: 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
相关文章:

AI大模型应用开发实践:5.快速入门 Assistants API
快速入门 Assistants API Assistants API 允许您在自己的应用程序中构建人工智能助手。一个助手有其指令,并可以利用模型、工具和知识来回应用户查询。 Assistants API 目前支持三种类型的工具: 代码解释器 Code Interpreter检索 Retrieval函数调用 Function calling使用 P…...

stack和queue的模拟实现
文章目录 如何实现?实现stack实现queue总结 如何实现? 首先我们看看官网上的stack,官网上的stack是用deque作为模版的缺省值去实现的,deque是什么? deque其实就是双端队列,双端队列,顾名思义&am…...

你的手机是如何控制你的手表之广播篇
前言 要让手机能够控制手表,第一步当然要让手机能够“看见”手表,人类作为上帝视角,我们是能够通过眼睛直接看见手机和手表的,但要让手机“看见”手表,就需要一端把自己的信息通过电磁波的形式发往空中,另…...

深入理解并发之LongAdder、DoubleAdder的实现原理
深入理解LongAdder、DoubleAdder的实现原理 本文主要通过LongAdder和DoubleAdder的源码,讲述一下其实现原理。通过LongAdder和DoubleAdder的源码可知。两者都是继承了Striped64的类。下面我们将通过源码的形式讲述一下这三个类都做了哪些事情。 1: Striped64 …...
virtuoso原理图无法编辑
(SCH-1217): Could not open "XX schematic" for edit. (because it is locked by user XX on XX) Would you like to open it for read? 解决方法: 到工程目录的schematic文件夹下找到sch.oa.cdslck.RHEL30.XXX-eda.21423和sch.oa.cdslck全部删掉即可正…...
Kotlin协程中的作用域 `GlobalScope`、`lifecycleScope` 和 `viewModelScope`
Kotlin协程中的作用域 Kotlin协程提供了多种作用域来管理协程的生命周期,其中最常见的是 GlobalScope、lifecycleScope 和 viewModelScope。 1. GlobalScope GlobalScope 是一个全局作用域,不受任何其他生命周期的限制。这意味着在 GlobalScope 中启动…...

leetcode739 每日温度
题目 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 输入: tempe…...

【软件测试】自动化测试如何管理测试数据
前言 在之前的自动化测试框架相关文章中,无论是接口自动化还是UI自动化,都谈及data模块和config模块,也就是测试数据和配置文件。 随着自动化用例的不断增加,需要维护的测试数据也会越来越多,维护成本越来越高&#…...

Llama 3-V: 比GPT4-V小100倍的SOTA
大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调重新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模…...
Anaconda安装配置
Anaconda下载: 网盘下载:https://pan.quark.cn/s/c5663477ccef 配置环境变量: 以管理员身份运行命令提示符 setx /M PATH "%PATH%;C:\ProgramData\anaconda3;C:\ProgramData\anaconda3\Scripts;C:\ProgramData\anaconda3\Library\bi…...

全面理解渗透测试
揭秘网络安全的秘密武器:全面理解渗透测试 在数字化时代,网络安全已成为人们关注的焦点。网络攻击和数据泄露事件频发,给个人、企业和国家带来了巨大的损失。为了应对这一挑战,渗透测试作为一种重要的网络安全评估手段࿰…...

「网络编程」基于 UDP 协议实现回显服务器
🎇个人主页:Ice_Sugar_7 🎇所属专栏:计网 🎇欢迎点赞收藏加关注哦! 实现回显服务器 🍉socket api🍉回显服务器🍌实现🥝服务器🥝客户端 dz…...

云数融合与大数据技术在日常生活中的创新应用探索
前言 移动云模型服务产品在中国移动旗下主要包括云计算、大数据、人工智能等服务,它依托广泛的算力资源(4N31X)、丰富的网络接入资源和高品质云专网,实现算网端资源一站式开通,构建企业级一体化解决方案。 文章目录 前言云计算的日常应用智…...
ETCD 备份与还原
安装etcdctl 准备看下etcd如何命令行操作,才发现,主机上,只用kubeadm拉起了etcd,但没有etcdctl命令。 # sudo docker ps -a | awk /etcd-master/{print $1} c4e3a57f05d7 26a11608b270 836dabc8e254 找到正在运行的etcd…...
LeeCode 1787 DP
题意 传送门 LeeCode 1787 使所有区间的异或结果为零 题解 任一个元素都至多对 k k k个长度为 k k k的区间产生影响,故难以直接依次处理每一个元素。 观察到满足条件的数组中模 k k k意义下索引相等的各个元素相同,故可以依次处理每一个同余类。 d p…...
如何有效屏蔽手机上的骚扰电话20240530
如何有效屏蔽手机上的骚扰电话 引言 最近,我的手机经常接到954开头的7位数字座机电话,这些骚扰电话让我非常困扰。由于我经常点外卖,无法屏蔽所有陌生号码,因此需要一个既能屏蔽特定前缀的骚扰电话,又不影响日常生活…...

Linux CGroup资源限制(概念限制进程CPU使用)
Linux CGroup资源限制(详解) 最近客户认为我们程序占用cpu过高,希望我们限制,排查之后发现是因为程序频繁gc导致,为了精细化、灵活的的限制,想到了使用Linux CGroup。 0 前置知识 ①概念及作用 官网&#…...

Latex中标注通讯作者
** 直接使用脚注,不用添加宏包 多个同地址的并列,建议加点空格,好看一些 ** \title{xxxxxxxxxxxxxxxxxxx}\author{xxxxxxxxxxxxxxxxxxx\footnote{Corresponding author} ,bbbbbbbbbbbbbbbbbbb}\address{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx…...

PyQt5开发笔记:1.环境搭建与界面美化
推荐视频教程: https://www.bilibili.com/video/BV1LT4y1e72X?p23&vd_source7ab611f3afb3d469faad93d3996f99ba 一、打开网址,点击下载 https://build-system.fman.io/qt-designer-download 下载后,点开exe 不推荐:http…...

公派/自费访问学者申请出国访学的常见问题解答(下)
06、学术背景和研究成果要求? 访学是面向学术单位和企事业单位开放的。 针对学术单位,比如高校与科研院所,学科内涉及的论文发表,课题研究,专利,著作,含金量较高的奖项等背景都是国外比较看重…...

网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...

Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...