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)

相关推荐
夜月行者1 小时前
如何使用ssm实现基于SSM的宠物服务平台的设计与实现+vue
java·后端·ssm
Yvemil71 小时前
RabbitMQ 入门到精通指南
开发语言·后端·ruby
sdg_advance1 小时前
Spring Cloud之OpenFeign的具体实践
后端·spring cloud·openfeign
猿java2 小时前
使用 Kafka面临的挑战
java·后端·kafka
碳苯2 小时前
【rCore OS 开源操作系统】Rust 枚举与模式匹配
开发语言·人工智能·后端·rust·操作系统·os
kylinxjd2 小时前
spring boot发送邮件
java·spring boot·后端·发送email邮件
2401_857439695 小时前
Spring Boot新闻推荐系统:用户体验优化
spring boot·后端·ux
进击的女IT6 小时前
SpringBoot上传图片实现本地存储以及实现直接上传阿里云OSS
java·spring boot·后端
一 乐7 小时前
学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
艾伦~耶格尔10 小时前
Spring Boot 三层架构开发模式入门
java·spring boot·后端·架构·三层架构