首页 > 编程语言 >python 访问openai assistant api(一)

python 访问openai assistant api(一)

时间:2024-10-25 23:18:37浏览次数:7  
标签:run thread python assistant client beta api openai id

目录

一、简介

二、案例

三、消息循环总结 


一、简介

使用 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"]:
        break
    time.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"]:
        break
    time.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,
    )

 

标签:run,thread,python,assistant,client,beta,api,openai,id
From: https://blog.csdn.net/cangqiongxiaoye/article/details/143245447

相关文章

  • 6.1 用python代码绘制以下图形
    用python绘制一个无向图:v1在中间,v2、v3、v4、v5、v6在周围;v1与v2、v3、v4相连;v2与v3、v6、v1相连;v3与v1、v2、v4相连;v4与v1、v3、v5相连;v5与v4、v6相连;v6与v2、v5相连点击查看代码importnetworkxasnximportmatplotlib.pyplotaspltG=nx.Graph()nodes=['v1'......
  • Python编码规范
        为什么不直接进入Python的语法和数据类型阶段,而是介绍Python编码规范?因为这很重要!作为一个开发的老鸟,给新人的第一个建议就是Python编码规范,这种规范很多时候不仅仅是Python,祝大家养成良好的代码习惯!~~~~一.忽略代码规范的规则以下情况可以忽略代码规范,其余情况请尽量......
  • python编程基础
    @目录1.python中的变量和数据类型1.1变量1.2python基本数据类型1.3基本输入与输出输入(Input)输出(Output)基本输出打印多个参数格式化输出打印到文件1.4python中的运算符算术运算符比较运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符2.python中的列表、元组、字典、集合2.1......
  • python异常处理中finally的作用
    Python异常处理中finally的作用包括:1、确保程序块退出前的代码执行、2、资源释放和清理工作、3、与return语句的交互行为。在finally子句中最为典型的应用是清理资源,比如关闭文件流或数据库连接。不论try块内代码是否触发了异常,finally子句都会被执行,这为程序员提供一种可靠的手段......
  • Python应用指南:地铁两站之间最短路径查询
    随着城市交通的发展,地铁已成为许多城市居民日常出行的重要方式之一。地铁网络的复杂性和站点数量的增加使得乘客在选择最佳路线时面临挑战。为了帮助乘客快速、准确地找到从起始站到目的站的最短乘坐线路,本篇文章我们来求一下地铁两站之间最短路径查询的查询,通过Python脚本快......
  • 10.25Python_pandas_函数(1)
    二、函数1、常用的统计学函数函数名称描述说明count()统计某个非空值的数量sum()求和mean()求均值median()求中位数std()求标准差min()求最小值max()求最大值abs()求绝对值prod()求所有数值的乘积案例:#创建一个示例DataFramedata={'A':[1,2,3,4,5],......
  • 用python绘图-散点图/直方图/概率密度图
    项目用到的文件:一、代码解释:drawing01.pyimportdash#Dash是用于构建分析型Web应用的Python框架,由Plotly开发fromdashimportdccfromdashimporthtmlfromdash.dependenciesimportInput,Outputimportpandasaspd#尤其适用于表格数据和时间序列数......
  • python+flask框架的基于微信小程序的非法集资案件登记平台前台8(开题+程序+论文) 计算
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着互联网技术的飞速发展,微信小程序作为一种轻量级的应用形式,已广泛应用于各行各业。在打击非法集资案件的过程中,传统的登记方式存在效率......
  • python+flask框架的基于微信小程序的高校实验室考勤管理系统的设计与实现前端8(开题+
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景关于高校实验室考勤管理问题的研究,现有研究主要集中在传统考勤系统的设计与实现上,如基于RFID、指纹识别等技术。然而,随着移动互联网技术的......
  • python+flask框架的基于微信小程序的高校食堂在线预约点餐系统的设计服务端视频8(开题
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着移动互联网技术的迅猛发展,高校学生的生活方式和学习模式正发生着深刻变化。特别是在餐饮消费方面,学生群体对便捷性、个性化和高效性的......