当前位置: 首页 > news >正文

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

相关文章:

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…...

全面理解渗透测试

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

「网络编程」基于 UDP 协议实现回显服务器

🎇个人主页:Ice_Sugar_7 🎇所属专栏:计网 🎇欢迎点赞收藏加关注哦! 实现回显服务器 🍉socket api🍉回显服务器🍌实现🥝服务器🥝客户端 &#x1f3…...

云数融合与大数据技术在日常生活中的创新应用探索

前言 移动云模型服务产品在中国移动旗下主要包括云计算、大数据、人工智能等服务,它依托广泛的算力资源(4N31X)、丰富的网络接入资源和高品质云专网,实现算网端资源一站式开通,构建企业级一体化解决方案。 文章目录 前言云计算的日常应用智…...

ETCD 备份与还原

安装etcdctl 准备看下etcd如何命令行操作,才发现,主机上,只用kubeadm拉起了etcd,但没有etcdctl命令。 # sudo docker ps -a | awk /etcd-master/{print $1} c4e3a57f05d7 26a11608b270 836dabc8e254 找到正在运行的etcd&#xf…...

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、学术背景和研究成果要求? 访学是面向学术单位和企事业单位开放的。 针对学术单位,比如高校与科研院所,学科内涉及的论文发表,课题研究,专利,著作,含金量较高的奖项等背景都是国外比较看重…...

生成 Git SSH 证书

🔑 1. ​​生成 SSH 密钥对​​ 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​: -t rsa&#x…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...

基于小程序老人监护管理系统源码数据库文档

摘 要 近年来,随着我国人口老龄化问题日益严重,独居和居住养老机构的的老年人数量越来越多。而随着老年人数量的逐步增长,随之而来的是日益突出的老年人问题,尤其是老年人的健康问题,尤其是老年人产生健康问题后&…...

react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)

之前都是使用react-pdf来渲染pdf文件,这次有个需求是要兼容xp环境,xp上chrome最高支持到49,虽然说iframe或者embed都可以实现预览pdf,但为了后续的定制化需求,还是需要使用js库来渲染。 chrome 49测试环境 能用的测试…...

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题 2025/6/9 20:54 缘起,为了跨网段推流,千辛万苦配置好了网络参数。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在调试串口/DEBUG口正确执行。…...

Oracle实用参考(13)——Oracle for Linux物理DG环境搭建(2)

13.2. Oracle for Linux物理DG环境搭建 Oracle 数据库的DataGuard技术方案,业界也称为DG,其在数据库高可用、容灾及负载分离等方面,都有着非常广泛的应用,对此,前面相关章节已做过较为详尽的讲解,此处不再赘述。 需要说明的是, DG方案又分为物理DG和逻辑DG,两者的搭建…...

Python爬虫(52)Scrapy-Redis分布式爬虫架构实战:IP代理池深度集成与跨地域数据采集

目录 一、引言:当爬虫遭遇"地域封锁"二、背景解析:分布式爬虫的两大技术挑战1. 传统Scrapy架构的局限性2. 地域限制的三种典型表现 三、架构设计:Scrapy-Redis 代理池的协同机制1. 分布式架构拓扑图2. 核心组件协同流程 四、技术实…...