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)

相关推荐
why1518 小时前
腾讯(QQ浏览器)后端开发
开发语言·后端·golang
浪裡遊8 小时前
跨域问题(Cross-Origin Problem)
linux·前端·vue.js·后端·https·sprint
声声codeGrandMaster8 小时前
django之优化分页功能(利用参数共存及封装来实现)
数据库·后端·python·django
呼Lu噜9 小时前
WPF-遵循MVVM框架创建图表的显示【保姆级】
前端·后端·wpf
bing_1589 小时前
为什么选择 Spring Boot? 它是如何简化单个微服务的创建、配置和部署的?
spring boot·后端·微服务
学c真好玩9 小时前
Django创建的应用目录详细解释以及如何操作数据库自动创建表
后端·python·django
Asthenia04129 小时前
GenericObjectPool——重用你的对象
后端
Piper蛋窝9 小时前
Go 1.18 相比 Go 1.17 有哪些值得注意的改动?
后端
excel10 小时前
招幕技术人员
前端·javascript·后端
盖世英雄酱5813610 小时前
什么是MCP
后端·程序员