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

python 访问openai assistant api(一)

目录

一、简介

二、案例

三、消息循环总结 


一、简介

使用 Python 访问 OpenAI Assistant API(如 GPT 模型),你需要使用 OpenAI 提供的官方 Python SDK。

官网介绍

https://platform.openai.com/docs/api-reference/assistants

目前只有简短的使用介绍,但是已经涵盖了所有需要注意的要点。

Assistants相关的对象
assistant:定义了assistant的名称,角色,可调用的openai模型和可使用的工具
thread:assistant和user之间的会话环境,可以存储消息列表
message:由assistant和user创建的消息,可以包括文本、图像和其他文件,消息以列表的形式存储在线程上
run:run就是在线程上调用assistant,assistant使用它的配置和线程的thread通过调用模型和工具来执行任务
run step:assistant在运行过程中所采取步骤的详细信息
 

二、案例

# 导入必要的模块
import os
import time
import json
#from dotenv import load_dotenv
from openai import OpenAI# 加载环境变量
#load_dotenv()#能够访问
import os
os.environ["http_proxy"] = "http://localhost:7890"
os.environ["https_proxy"] = "http://localhost:7890"# 获取 API 密钥
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")# 实例化 OpenAI 客户端
client = OpenAI(api_key=OPENAI_API_KEY)# 上传文件#file = client.files.create(
#  file=open("aa.json", "rb"),
#  purpose='assistants'
#)# 1. 创建 Assistant
assistant = client.beta.assistants.create(name="程序员励志师",instructions="你是一个程序员励志师,你的职能就是只要有人给你发消息,你就鼓励他 和他说你的代码像银河一样漂亮,越夸张越好",model="gpt-3.5-turbo-0125",tools=[{"type": "file_search"},{'type': 'code_interpreter'},],#=[file.id]
)# 2. 创建 Thread
thread = client.beta.threads.create()# 3. 创建 Message
message = client.beta.threads.messages.create(thread_id=thread.id,role="user",content="我写代码好累啊?"#file_ids=[file.id],
)# 2 & 3
thread = client.beta.threads.create(messages=[{"role": "user","content": "我是c++开发工程师",#"file_ids": [file.id]}])# 4. 创建 Run
run = client.beta.threads.runs.create(thread_id=thread.id,assistant_id=assistant.id,
)# 5. 执行 Run
while True:run = client.beta.threads.runs.retrieve(thread_id=thread.id, run_id=run.id)if run.status not in ["queued", "in_progress"]:breaktime.sleep(1)# 6. 取出 Message
messages = client.beta.threads.messages.list(thread_id=thread.id
)
message = messages.data[0].content[0].text.value
print(message)

运行结果:

 gpt-4o模型的回答

三、总结 

注意run的生命周期

run 有多个状态: queued, in_progress, requires_action, cancelling, cancelled, failed, completed, expired,这个例子中如果不是 queued 或者 in_progress 状态就代表已经有结果了。requires_action 是智能助手使用 function 工具时才会存在的状态,这个例子不涉及。 

状态含义
queued创建run之后 或者 使用function时确定了要调用的function及其参数 之后,就会进入这个状态,这个状态很短,马上会进入 in_progress状态。
in_progress使用模型或者tools处理消息。
completed本次运行成功完成,可以读取GPT响应的消息了。
requires_action使用function时,一旦模型确定要调用的function及其参数,run将进入这个状态。
expiredfunction执行的时间太长或者整个run运行的时间太长,达到了过期阈值(大约10分钟)。
cancelling可以在queued和in_progress状态时发起取消,将进入这个状态。
cancelled已成功取消。
failed您运行失败了,可以在 run.last_error 中获得失败原因。

因此获取消息时候,需要循环等待回复

# 执行 Run
while True:run = client.beta.threads.runs.retrieve(thread_id=thread.id, run_id=run.id)if run.status not in ["queued", "in_progress"]:breaktime.sleep(1)

看到另外一种写法,也记录一下。

while run.status == "queued" or run.status == "in_progress":time.sleep(1)run = client.beta.threads.runs.retrieve(thread_id=thread_userjia.id,run_id=run.id,)

 


http://www.mrgr.cn/news/58629.html

相关文章:

  • IDEA开发工具使用技巧积累
  • 论文笔记(五十)Segmentation-driven 6D Object Pose Estimation
  • itext自定义pdf
  • 搞副业的程序员们,建议看下这20个技术接单/远程平台,零基础入门到精通,收藏这一篇就够了
  • 漏洞挖掘 | 记一次逻辑漏洞修改任意用户密码
  • 渗透测试导学
  • 金融工程--pine-script 入门
  • 【python实战】利用代理ip爬取Alibaba海外版数据
  • 从视频中学习的SeeDo:通过VLM解释视频并生成规划、代码(含通过RGB视频模仿的人形机器人OKAMI、DexMV)
  • 机器学习与神经网络的当下与未来
  • Vue学习记录之二十一 Vue3中3种编程风格介绍
  • 凯伦股份荣获中国钢结构协会2024年度技术创新奖
  • 第二单元历年真题整理
  • 文本预处理——构建词云
  • Matlab学习02-matlab中的数据显示格式及符号变量
  • AIGC底层技术揭秘
  • 揭开C++ STL的神秘面纱之string:提升编程效率的秘密武器
  • Java如何实现站内消息系统的设计与实现
  • C++游戏开发教程:从入门到进阶
  • 蓝桥杯题目理解
  • 数字 图像处理算法的形式
  • 云轴科技ZStack亮相迪拜GITEX大会,与阿里云再次携手深化海外合作
  • qt 下载安装
  • 二分搜索法
  • 日常记录,使用springboot,vue2,easyexcel使实现字段的匹配导入
  • bios设置后cpu虚拟化仍禁用