目录
一、简介
使用 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将进入这个状态。 |
expired | function执行的时间太长或者整个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