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)

相关推荐
win4r42 分钟前
🚀GPT-5.2又赢了?我用一套“开发者视角”的实测流程,真实能力一看便知!
openai·ai编程·vibecoding
喵个咪1 小时前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:基于 GORM 从零实现新服务
后端·go·orm
a努力。2 小时前
【基础数据篇】数据等价裁判:Comparer模式
java·后端
开心猴爷2 小时前
苹果App Store应用程序上架方式全面指南
后端
小飞Coding2 小时前
三种方式打 Java 可执行 JAR 包,你用对了吗?
后端
bcbnb2 小时前
没有 Mac,如何在 Windows 上架 iOS 应用?一套可落地的工程方案
后端
用户8356290780512 小时前
从一维到二维:用Spire.XLS轻松将Python列表导出到Excel
后端·python
哈哈哈笑什么2 小时前
SpringBoot 企业级接口加密【通用、可配置、解耦的组件】「开闭原则+模板方法+拦截器/中间件模式」
java·后端·安全
期待のcode2 小时前
springboot依赖管理机制
java·spring boot·后端