开放AI Node API库:无缝接入OpenAI的利器

如果你希望在TypeScriptJavaScript中方便地访问OpenAI的REST API,那么这个库为你提供了便捷的解决方案。它是基于我们的OpenAPI规范使用Stainless生成的。

要学习如何使用OpenAI API,请查看我们的API参考文档文档

安装

npm install --save openai
# 或者
yarn add openai

使用

你可以在api.md文件中找到这个库的完整API。下面的代码演示了如何使用聊天完成API开始工作。

import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: '你的API密钥', // 默认为process.env["OPENAI_API_KEY"]
});

async function main() {
  const completion = await openai.chat.completions.create({
    messages: [{ role: 'user', content: '说这是一个测试' }],
    model: 'gpt-3.5-turbo',
  });

  console.log(completion.choices);
}

main();

流式响应

我们支持使用Server Sent Events (SSE) 进行流式响应。

import OpenAI from 'openai';

const openai = new OpenAI();

async function main() {
  const stream = await openai.chat.completions.create({
    model: 'gpt-4',
    messages: [{ role: 'user', content: 'Say this is a test' }],
    stream: true,
  });
  for await (const part of stream) {
    process.stdout.write(part.choices[0]?.delta?.content || '');
  }
}

main();

如果你需要取消流,你可以从循环中break,或者调用stream.controller.abort()

请求和响应类型

这个库包含了所有请求参数和响应字段的TypeScript定义。你可以像下面这样导入并使用它们:

import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: '你的API密钥', // 默认为process.env["OPENAI_API_KEY"]
});

async function main() {
  const params: OpenAI.Chat.ChatCompletionCreateParams = {
    messages: [{ role: 'user', content: 'Say this is a test' }],
    model: 'gpt-3.5-turbo',
  };
  const completion: OpenAI.Chat.ChatCompletion = await openai.chat.completions.create(params);
}

main();

每个方法、请求参数和响应字段的文档都可在文档字符串中找到,并将在大多数现代编辑器中悬停时显示。

[!IMPORTANT]
此SDK的先前版本使用了Configuration类。请参阅v3到v4的迁移指南

文件上传

与文件上传对应的请求参数可以以多种不同的形式传递:

  • File(或具有相同结构的对象)
  • fetch Response(或具有相同结构的对象)
  • fs.ReadStream
  • 我们的toFile助手的返回值
import fs from 'fs';
import fetch from 'node-fetch';
import OpenAI, { toFile } from 'openai';

const openai = new OpenAI();

// 如果你有Node `fs`,我们建议使用`fs.createReadStream()`:
await openai.files.create({ file: fs.createReadStream('input.jsonl'), purpose: 'fine-tune' });

// 或者,如果你有Web `File` API,你可以传递一个`File`实例:
await openai.files.create({ file: new File(['my bytes'], 'input.jsonl'), purpose: 'fine-tune' });

// 你也可以传递一个`fetch` `Response`:
await openai.files.create({ file: await fetch('https://somesite/input.jsonl'), purpose: 'fine-tune' });

// 最后,如果上述方法都不方便,你可以使用我们的`toFile`助手:
await openai.files.create({
  file: await toFile(Buffer.from('my bytes'), 'input.jsonl'),
  purpose: 'fine-tune',
});
await openai.files.create({
  file: await toFile(new Uint8Array([0, 1, 2]), 'input.jsonl'),
  purpose: 'fine-tune',
});

处理错误

当库无法连接到API,或者API返回非成功状态码(即4xx或5xx响应)时,将抛出APIError的子类:

async function main() {
  const fineTune = await openai.fineTunes
    .create({ training_file: 'file-XGinujblHPwGLSztz8cPS8XY' })
    .catch((err) => {
      if (err instanceof OpenAI.APIError) {
        console.log(err.status); // 400
        console.log(err.name); // BadRequestError

        console.log

(err.headers); // {server: 'nginx', ...}
      } else {
        throw err;
      }
    });
}

main();

错误代码如下:

状态码 错误类型
400 BadRequestError
401 AuthenticationError
403 PermissionDeniedError
404 NotFoundError
422 UnprocessableEntityError
429 RateLimitError
大于等于500 InternalServerError
N/A APIConnectionError

Azure OpenAI

关于如何在Azure OpenAI中使用这个库的示例可以在这里找到。

请注意,在Azure OpenAI API和OpenAI API之间存在API形状和行为的细微差异,因此在Azure OpenAI中使用这个库可能会导致不正确的类型,可能会导致错误。

请查看@azure/openai,这是Microsoft提供的一个Azure特定的SDK。

重试

默认情况下,某些错误将被自动重试2次,使用短暂的指数退避。默认情况下,将重试连接错误(例如,由于网络连接问题),409冲突,429速率限制以及>=500内部错误。

你可以使用maxRetries选项来配置或禁用这个功能:

// 配置所有请求的默认值:
const openai = new OpenAI({
  maxRetries: 0, // 默认为2
});

// 或者,按请求配置:
await openai.chat.completions.create({ messages: [{ role: 'user', content: 'How can I get the name of the current day in Node.js?' }], model: 'gpt-3.5-turbo' }, {
  maxRetries: 5,
});

超时

默认情况下,请求会在10分钟后超时。你可以使用timeout选项来配置它:

// 配置所有请求的默认值:
const openai = new OpenAI({
  timeout: 20 * 1000, // 20秒(默认为10分钟)
});

// 重写每个请求:
await openai.chat.completions.create({ messages: [{ role: 'user', content: 'How can I list all files in a directory using Python?' }], model: 'gpt-3.5-turbo' }, {
  timeout: 5 * 1000,
});

在超时时,会抛出APIConnectionTimeoutError

请注意,超时的请求将默认重试两次

自动分页

OpenAI API中的列表方法是分页的。你可以使用for await … of语法来遍历所有页面中的项目:

async function fetchAllFineTuningJobs(params) {
  const allFineTuningJobs = [];
  // 自动获取更多页面。
  for await (const job of openai.fineTuning.jobs.list({ limit: 20 })) {
    allFineTuningJobs.push(job);
  }
  return allFineTuningJobs;
}

或者,你可以一次只请求一页:

let page = await openai.fineTuning.jobs.list({ limit: 20 });
for (const job of page.data) {
  console.log(job);
}

// 提供用于手动分页的便捷方法:
while (page.hasNextPage()) {
  page = page.getNextPage();
  // ...
}

高级用法

访问原始响应数据(例如,标头)

通过APIPromise类型上的.asResponse()方法,你可以访问由fetch()返回的“原始”Response

你也可以使用.withResponse()方法获取原始的Response以及解析后的数据。

const openai = new OpenAI();

const response = await openai.chat.completions
  .create({ messages: [{ role: 'user', content: 'Say this is a test' }], model: 'gpt-3.5-turbo' })
  .asResponse();
console.log(response.headers.get('X-My-Header'));
console.log(response.statusText); // 访问底层的Response对象

const { data: completions, response: raw } = await openai.chat.completions
  .create({ messages: [{ role: 'user', content: 'Say this is a test' }], model: 'gpt-3.5-turbo' })
  .withResponse();
console.log(raw.headers.get('X-My-Header'));
console.log(completions.choices);

配置HTTP(S)代理(例如,用于代理)

默认情况下,这个库使用一个稳定的代理来处理所有http/https请求,以重用TCP连接,消除许多TCP和TLS握手,并从大多数请求中刮去大约100ms。

如果你想禁用或自定义此行为,例如使用代理访问API,你可以传递一个用于所有请求的httpAgent,例如:

import http from 'http';
import HttpsProxyAgent from 'https-proxy-agent';

// 配置所有请求的默认值:
const openai = new OpenAI({
  httpAgent: new HttpsProxyAgent(process.env.PROXY_URL),
});

// 或者,按请求配置:
await openai.models.list({
  baseURL: 'http://localhost:8080/test-api',
  httpAgent: new http.Agent({ keepAlive: false }),
})

语义版本

这个包通常试图遵循SemVer约定,尽管某些不向后兼容的更改可能作为次要版本发布:

  1. 只影响静态类型的更改,不影响运行时行为。
  2. 影响库内部的更改,技术上是公共的,但不是为外部使用或记录的。 (如果你依赖这些内部变更,请在GitHub上提出问题告诉我们)
  3. 我们不希望在实际上影响绝大多数用户的情况下进行的更改。

我们认真对待向后兼容

性,并努力确保你可以放心升级。

我们渴望听到你的反馈,请在GitHub上打开一个问题,提出问题、错误或建议。

要求

支持TypeScript >= 4.5。

以下运行时环境受支持:

  • Node.js 16 LTS或更高版本(非EOL版本)。
  • Deno v1.28.0或更高版本,使用import OpenAI from "npm:openai"
    暂时不支持Deno Deploy。
  • Cloudflare Workers。
  • Vercel Edge Runtime。

如果你对其他运行时环境感兴趣,请在GitHub上打开或投票提出问题。

本文由作者 王大神 原创发布于 大神网的AI博客。

转载请注明作者:王大神

原文出处:开放AI Node API库:无缝接入OpenAI的利器

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2023年9月9日
下一篇 2023年9月9日

相关推荐

  • 快速开启 GPT-4o 体验:免费使用教程和注意事项

    在这篇文章中,我们将详细介绍如何通过访问特定网址快速开启 GPT-4o 免费体验的方法。本文旨在帮助用户轻松体验 OpenAI 的最新工具,并提供一些实用的技巧和注意事项。无论是技术爱好者还是普通用户,都可以从中受…

    2024年5月15日
    00
  • 如何在Windows上设置OpenAI的环境变量

    在使用OpenAI的API时,设置环境变量是一个重要的步骤,它可以帮助你轻松地管理API密钥和基本API配置。本教程将教你如何在Windows操作系统上设置OpenAI的环境变量,以便顺利使用OpenAI的服务。 背景故事 在数字时代…

    2023年11月7日
    00
  • ChatGPT最新功能大揭秘:联网、语音输入和图像输入!

    你好,亲爱的读者们!今天,我将为你们带来一篇激动人心的文章,让你们了解到ChatGPT的最新功能,这些功能将会彻底改变你们的体验。从联网功能、语音输入到图像输入,ChatGPT已经焕然一新,让我们一起来看看这些新…

    2023年10月4日
    00
  • GPT-4性能问题曝光:OpenAI承认并计划修复

    2023年12月11日,OpenAI的GPT-4模型成为热门话题,但不是因为其卓越的性能,而是因为用户普遍反映模型变得“懒散”,不愿提供答案。这一问题引起了广泛关注和批评,OpenAI在社交平台上承认了这一问题,并表示将采取措…

    2023年12月11日
    00
  • AI领域本周重要进展:Runway、DeepMind、OpenAI等亮点

    本周,人工智能领域再次掀起了波澜,各大机构和公司纷纷发布了令人振奋的消息。这些重要进展将进一步推动AI技术的发展,改变我们与人工智能互动的方式。让我们一起来看看本周AI领域的亮点。 Runway开展通用世界模型…

    2023年12月26日
    00
  • 2023年8月编程语言排行榜揭晓:Python领跑,C++、Java紧随其后!

    当今时代,编程语言的发展如火如荼,不断涌现出新的技术和工具,推动着科技的进步和创新。每个月,TIOBE编程社区指数都会发布最新的编程语言排行榜,展示了各个编程语言在全球范围内的流行度和趋势。让我们一起来看…

    2023年8月29日
    00
  • 如何使用多个OpenAI服务实例:详细指南

    随着技术的不断进步,有时您可能需要使用多个OpenAI服务实例来满足不同的需求。从版本6.9.0开始,OpenAI SDK提供了创建多个实例的功能,使您能够更灵活地管理和利用服务。在本文中,我们将详细介绍如何使用多个Open…

    2023年9月17日
    00
  • chatgpt账号挂了

    2023年5月27日,我收到了一封来自OpenAI官方的邮件,通知我他们已经退款并取消了我的ChatGPT Plus订阅,原因是他们在我的账户中发现了可疑活动。这一消息让我陷入了困惑和焦虑,但我知道我不是唯一一个面临这种情况…

    2023年5月28日
    00
  • ChatGPT重磅升级:OpenAI计划降低开发成本、提升安全性

    有一天,你坐在电脑前,试图构建一个基于人工智能的应用程序。你有一个创意,但是随之而来的问题是如何让这个想法变为现实,而且要成本可控。正当你为这个挑战感到困惑时,OpenAI宣布了一个重大消息:他们即将推出…

    2023年10月20日
    00
  • 如何使用OpenAI的Chat Completions API创建智能助手

    在现代科技的时代,人工智能正日益成为我们生活中的重要一部分。OpenAI的Chat Completions API是一个强大的工具,可以用于创建智能助手,以执行各种任务,从回答问题到生成文本。本教程将向您介绍如何使用Chat Comp…

    2023年11月25日
    00