通过 Assistants API 将 GPT-4o 集成到自己的业务系统

什么是 Assistants API

顾名思义就是助手 API, 你可以在 OpenAI 官网添加一个智能体,这个智能体就是 assistant,如何想集成这个 assistant 到你的应用中就是通过 Assistants API。本质上就是接口调用。

Assistants API 的特点

  1. 创建和管理 assistant,每个 assistant 有独立的配置
  2. 支持无限长的多轮对话,对话历史保存在 OpenAI 的服务器上
  3. 通过自有向量数据库支持基于文件的 RAG
  4. 支持 Code Interpreter
    1. 在沙箱里编写并运行 Python 代码
    2. 自我修正代码
    3. 可传文件给 Code Interpreter
  5. 支持 Function Calling
  6. 支持在线调试的 Playground

即将具备的能力:

  1. 支持 DALL·E
  2. 支持图片消息
  3. 支持自定义调整 RAG 的配置项

收费:

  1. 按 token 收费。无论多轮对话,还是 RAG,所有都按实际消耗的 token 收费
  2. 如果对话历史过多超过大模型上下文窗口,会自动放弃最老的对话消息
  3. 文件按数据大小和存放时长收费。1 GB 向量存储 一天收费 0.10 美元
  4. Code interpreter 跑一次 $0.03

接下来直接进入正题,先介绍 AssistantsAPI,然后通多实例展示

安装 openai

pip install openai

创建一个 Assistant

可以在代码用创建

from dotenv import load_dotenv, find_dotenv
from openai import OpenAI

load_dotenv(find_dotenv())

client = OpenAI()

assistant = client.beta.assistants.create(
    name="Food Assistant",
    instructions="你是美食家,擅长美食,擅长美食的问答,你负责回答与美食相关的问题。",
    model="gpt-4o"
)

也可以到官网去手动创建:https://platform.openai.com/playground?mode=assistant

对话历史 Thread

注意,这里的 thread 不是我们程序员理解的那个线程的概念,这里是报错对话历史的工具

  1. Threads 里保存的是对话历史,即 messages
  2. 一个 assistant 可以有多个 thread
  3. 一个 thread 可以有无限条 message
  4. 一个用户与 assistant 的多轮对话历史可以维护在一个 thread 里

创建方式:

# 创建 thread
thread = client.beta.threads.create()

我们写一个函数用来打印生成的对象里面到底有些什么属性

import json


def show_json(obj):
    """把任意对象用排版美观的 JSON 格式打印出来"""
    print(json.dumps(
        json.loads(obj.model_dump_json()),
        indent=4,
        ensure_ascii=False
    ))

接下来打印一下这个 thread

show_json(thread)

输出:

{
    "id": "thread_UmmMZHrQy6QHpguE4YoKUlia",
    "created_at": 1718886745,
    "metadata": {},
    "object": "thread",
    "tool_resources": {
        "code_interpreter": null,
        "file_search": null
    }
}
给对话历史加上标记

前面说了,thread 是用来保存对话历史的,那么不同的用户应该会有不同的对话历史,如何给 thread 做好标记呢?答案就是 metadata

thread = client.beta.threads.create(
    metadata={"fullname": "IT民工老包", "username": "bj"}
)
show_json(thread)


输出:

{
    "id": "thread_ZO9PbLBA4sHJdsseshprusi",
    "created_at": 1718896823,
    "metadata": {
        "fullname": "IT民工老包",
        "username": "bj"
    },
    "object": "thread",
    "tool_resources": {
        "code_interpreter": null,
        "file_search": null
    }
}
thread.id 可以保存到数据库

thread.id 是可以保存到应用数据库中,当用户发起下一次的对话时,可以通过 thread.id 获取到原先创建的 thread 对象:

thread = client.beta.threads.retrieve(thread.id)
show_json(thread)

输出:


{
    "id": "thread_ZO9PbLBA4sHJdsseshprusi",
    "created_at": 1718896823,
    "metadata": {
        "fullname": "IT民工老包",
        "username": "bj"
    },
    "object": "thread",
    "tool_resources": {
        "code_interpreter": null,
        "file_search": null
    }
}
其他的方法:
  1. threads.modify() 修改 thread 的 metadata 和 tool_resources
  2. threads.retrieve() 获取 thread
  3. threads.delete() 删除 thread。

官方文档:https://platform.openai.com/docs/api-reference/threads

用户消息添加

thread 是消息历史,我们可以往 thread 添加用户消息来实现对话,就跟在 ChatGPT 输入框中输入消息一样,只是现在我们是通过代码实现

message = client.beta.threads.messages.create(
    thread_id=thread.id,  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值