Assistant API如何调用?Openai API调用手册

先上代码

js 复制代码
import OpenAI from "openai";

const openai = new OpenAI({ baseURL: '你的代理地址', apiKey: '你的apikey' });
//创建助手
async function Assistant() {
    const response = await openai.beta.assistants.create({
        instructions: "这是一个测试程序",
        name: "测试",
        model: "gpt-4",
    });

    return response.id; // 返回助手的 ID
}
//创建线程
async function Thread() {
    const response = await openai.beta.threads.create();
    return response.id; // 返回线程的 ID
}
//添加聊天消息的函数
async function messages(threadId) {
    const response = await openai.beta.threads.messages.create(
        threadId,
        { role: "user", content: "How does AI work? Explain it in simple terms." }
    );

    console.log(response.content);
}
//启动运行
async function run(threadId, assistantId) {
    const response = await openai.beta.threads.runs.create(
        threadId,
        { assistant_id: assistantId }
    );
    return response.id
}
//查询线程运行状态,非completed则等待后查询
async function runstatus(threadId, runId) {
    let run;
    do {
        run = await openai.beta.threads.runs.retrieve(
            threadId,
            runId
        );

        if (run.status !== "completed") {
            console.log("Run is not completed, waiting...");
            await new Promise(resolve => setTimeout(resolve, 5000)); // 等待5秒
        }
    } while (run.status !== "completed");

    console.log("Run completed:", run);
}
//获取全部聊天消息
async function messageslist(threadId) {
    const messages = await openai.beta.threads.messages.list(threadId);
    console.log(messages);
}


async function main() {
    try {
        const assistantId = await Assistant();
        const threadId = await Thread();
        await messages(threadId);
        const runId = await run(threadId, assistantId);
        await runstatus(threadId, runId);
        await messageslist(threadId);
    } catch (error) {
        console.error("An error occurred:", error);
    }
}

main();

Assistant工作流程

1.创建助手

  • 由于助手和线程是可重复使用的,你应该在创建它们之后保存它们的 ID。这样,你可以避免每次都重新创建它们,从而提高效率。
  • 可以将它们保存在数据库、环境变量或配置文件中,以便在未来的运行中重用。

2.创建线程

  • 通过线程与助手进行对话,不同线程互不相干,且单个线程中聊天记录始终保存,直到上限被刷新。

3.加入消息

  • 相较于chat类型api,Assistant api无需每次都传入全部聊天记录,只需要向线程中添加消息,则可实现山修改文关联

4.run起来,获得runid

  • 启动线程运行,获取运行id,然后监测运行状态。

5.获取run状态,检测run是否结束

  • 监测运行状态,如果Assistant线程处理结束,则可以提取消息

6.拿到助手回复,及获取messagelist

  • 获取到消息列表,Assistant最新回答都在里面。

Assistant继续使用

  1. 向线程中添加消息
  2. run
  3. run结束后获取消息列表
  4. 示例代码
js 复制代码
//添加消息
async function messagesinput(threadId, input) {
    const response = await openai.beta.threads.messages.create(
        threadId,
        { role: "user", content: input }
    );

    console.log(response.content);
}
async function chat() {
    await messagesinput('thread_0WtWyk8pKhPm2fSdH5HSX53l', "你好啊");
    const runId = await run('thread_0WtWyk8pKhPm2fSdH5HSX53l', 'asst_7MFbYPHSWhHHEQkXlukIFr0F');
    await runstatus('thread_0WtWyk8pKhPm2fSdH5HSX53l', runId);
    await messageslist('thread_0WtWyk8pKhPm2fSdH5HSX53l');
}

chat()

Assistant的优势与不足

不足

  • 不支持流式
  • 暂不支持传入图片
  • 需要自行检测run状态,无法主动告知

优势

  • 无需传入大量聊天记录,可以进行文献检索

  • 支持自定义结束等多种功能

  • 不足将在未来几个月得到解决(此文章发布于2023/11/26)

相关推荐
東雪木11 分钟前
Spring Boot 2.x 集成 Knife4j (OpenAPI 3) 完整操作指南
java·spring boot·后端·swagger·knife4j·java异常处理
天使街23号22 分钟前
go-dongle v1.2.0 发布,新增 SM2 非对称椭圆曲线加密算法支持
开发语言·后端·golang
用户69371750013841 小时前
Kotlin 协程基础入门系列:从概念到实战
android·后端·kotlin
Moonbit2 小时前
MoonBit Pearls Vol.14:哈希表避坑指南
后端·算法·编程语言
Moonbit2 小时前
MoonBit Pearls Vol.13: 使用 MoonBit 开发一个 HTTP 文件服务器
服务器·后端·http
一 乐2 小时前
个人博客|博客app|基于Springboot+微信小程序的个人博客app系统设计与实现(源码+数据库+文档)
java·前端·数据库·spring boot·后端·小程序·论文
LucianaiB2 小时前
Qoder 降价,立即生效!首购 2 美金/月
后端
新智元3 小时前
65 岁图灵巨头离职创业!LeCun 愤然与小扎决裂,Meta 巨震
人工智能·openai
微学网络3 小时前
基于 PVE 8.1 的 CentOS / Ubuntu / Docker / Kubernetes 部署手册
后端
机器之心3 小时前
全球第二、国内第一!钉钉发布DeepResearch多智能体框架,已在真实企业部署
人工智能·openai