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)

相关推荐
hui函数2 小时前
Flask电影投票系统全解析
后端·python·flask
小厂永远得不到的男人3 小时前
基于 Spring Validation 实现全局参数校验异常处理
java·后端·架构
毅航8 小时前
从原理到实践,讲透 MyBatis 内部池化思想的核心逻辑
后端·面试·mybatis
展信佳_daydayup8 小时前
02 基础篇-OpenHarmony 的编译工具
后端·面试·编译器
Always_Passion8 小时前
二、开发一个简单的MCP Server
后端
用户721522078778 小时前
基于LD_PRELOAD的命令行参数安全混淆技术
后端
笃行3508 小时前
开源大模型实战:GPT-OSS本地部署与全面测评
后端
知其然亦知其所以然8 小时前
SpringAI:Mistral AI 聊天?一文带你跑通!
后端·spring·openai
庚云8 小时前
🔒 前后端 AES 加密解密实战(Vue3 + Node.js)
前端·后端
超级小忍8 小时前
使用 GraalVM Native Image 将 Spring Boot 应用编译为跨平台原生镜像:完整指南
java·spring boot·后端