ChatGPT API教程在线对接OpenAI APIKey技术教程

一、OpenAI基本库介绍

您可以通过 HTTP 请求与 API 进行交互,这可以通过任何编程语言实现。我们提供官方的 Python 绑定、官方的 Node.js 库,以及由社区维护的库。

要安装官方的 Python 绑定,请运行以下命令:

pip install openai

要在您的 Node.js 项目目录中安装官方的 Node.js 库,请运行以下命令:

pip install openai

二、APIKey认证授权

API密钥(API Keys)
OpenAI API 使用 API 密钥进行认证。您可以在用户或服务账户级别创建 API 密钥。服务账户与“机器人”个体相关联,应用于为生产系统提供访问权限。每个 API 密钥可以限定以下之一的范围:

项目密钥 - 提供对单个项目的访问(推荐选项);通过选择您希望生成密钥的特定项目来访问项目 API 密钥。
用户密钥 - 我们的旧密钥。提供对用户已添加到的所有组织和所有项目的访问;访问 API 密钥以查看您可用的密钥。我们强烈建议过渡到项目密钥以获得最佳安全实践,尽管目前仍支持通过这种方法进行访问。
记住您的 API 密钥是一个秘密!不要与他人共享或在客户端代码(浏览器、应用程序)中公开它。生产请求必须通过您自己的后端服务器进行路由,您可以从环境变量或密钥管理服务中安全加载您的 API 密钥。

所有 API 请求应在 HTTP 头中包含您的 API 密钥,如下所示:
 

Authorization: Bearer OPENAI_API_KEY


组织和项目(可选)
对于属于多个组织的用户或通过其旧的用户 API 密钥访问其项目的用户,您可以传递一个头来指定用于 API 请求的组织和项目。这些 API 请求的使用将计入指定的组织和项目的使用量。

要访问组织中的默认项目,请省略 OpenAI-Project 头

示例 curl 命令:

curl https://api.openai.com/v1/models \-H "Authorization: Bearer $OPENAI_API_KEY" \-H "OpenAI-Organization: YOUR_ORG_ID" \-H "OpenAI-Project: $PROJECT_ID"

使用 openai Python 包的示例:

from openai import OpenAIclient = OpenAI(organization='YOUR_ORG_ID',project='$PROJECT_ID',
)

使用 openai Node.js 包的示例:

import OpenAI from "openai";const openai = new OpenAI({organization: "YOUR_ORG_ID",project: "$PROJECT_ID",
});

Organization IDs可以在您的组织设置页面找到。 Project IDs可以通过选择特定项目在您的常规设置页面找到。

三、发起请求示例

您可以将下面的命令粘贴到您的终端中来运行您的第一个 API 请求。请确保将 $OPENAI_API_KEY 替换为您的秘密 API 密钥。如果您使用的是旧版用户密钥并且有多个项目,您还需要指定Project ID。为了提高安全性,我们建议转向基于项目的keys。

curl https://api.openai.com/v1/chat/completions \-H "Content-Type: application/json" \-H "Authorization: Bearer $OPENAI_API_KEY" \-d '{"model": "gpt-3.5-turbo","messages": [{"role": "user", "content": "Say this is a test!"}],"temperature": 0.7}'

此请求查询的是 gpt-3.5-turbo 模型(实际上是指向 gpt-3.5-turbo 模型变体),以完成以 "Say this is a test" 为提示的文本。您应该会收到一个类似以下内容的响应:

{"id": "chatcmpl-abc123","object": "chat.completion","created": 1677858242,"model": "gpt-3.5-turbo-0613","usage": {"prompt_tokens": 13,"completion_tokens": 7,"total_tokens": 20},"choices": [{"message": {"role": "assistant","content": "\n\nThis is a test!"},"logprobs": null,"finish_reason": "stop","index": 0}]}

现在您已经生成了第一次chat completion  ,让我们分解一下响应对象。我们可以看到 finish_reason 是 stop,这意味着 API 返回了模型生成的完整chat completion 内容,没有遇到任何限制。在 choices 列表中,我们只生成了一条消息,但您可以设置 n 参数来生成多个消息选项。

四、流式输出

OpenAI API 提供了将响应流回客户端的能力,以允许某些请求返回部分结果。为实现此目的,我们遵循 Server-sent events 标准。我们的官方 Node 和 Python 库包括一些帮助工具,可以简化这些事件的解析。

流式传输支持 Chat Completions API 和 Assistants API。本节重点介绍流式传输在 Chat Completions 中的工作方式。

在 Python 中,流式请求看起来像这样:

from openai import OpenAIclient = OpenAI()stream = client.chat.completions.create(model="gpt-3.5-turbo",messages=[{"role": "user", "content": "Say this is a test"}],stream=True,
)
for chunk in stream:if chunk.choices[0].delta.content is not None:print(chunk.choices[0].delta.content, end="")

在 Node / Typescript 中,流式请求看起来像这样:

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

解析 Server-sent events 并不简单,需要谨慎处理。简单的策略比如按新行分割可能会导致解析错误。我们建议尽可能使用现有的客户端库。

原文链接:介绍 | ChatGPT API教程 | ChatGPT API技术开发教程 (chatgptzh.com)icon-default.png?t=N7T8https://jc.chatgptzh.com/web-59-1.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/34441.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【总结】在SpringBoot项目中如何动态切换数据源、数据库?(可直接CV)

注意:文章若有错误的地方,欢迎评论区里面指正 🍭 前言 本文参考若依源码,介绍了如何在SpringBoot项目中使用AOP和自定义注解实现MySQL主从数据库的动态切换,当从库故障时,能自动切换到主库,确…

1-什么是自动驾驶?

自动驾驶(Autonomous Driving)是指利用计算机系统来实现车辆的自主控制,使车辆能够在没有人类司机的情况下安全行驶的技术。自动驾驶车辆通常配备有多种传感器,如雷达(Radar)、激光雷达(Lidar&a…

集群开发学习(三)修改用户模块(git 使用,局域网设代理)

git 使用 参考:https://blog.csdn.net/weixin_60033897/article/details/136016074 在服务器端创建公钥私钥 git config --global user.email "1686660735qq.com" git config --global user.name qinliangql git config --global -l # 查看信息# 这样可…

Java-内部类成员内部类

类的五大成员 属性 方法 构造方法 代码块 内部类 什么是内部类? 在一个类的里面,再定义一个类。 举例:在A类的内部定义B类,B类就被称为内部类 内部类表示的事物是外部类的一部分 内部类单独出现没有任何意义 内部类的访问特点 1.…

java中的this关键字—调用本类属性

在java中,当成员变量与局部变量发生重名问题时,需要使用this关键字分辨成员变量与局部变量 这里首先说使用this关键字调用本类中的属性 下面是一段代码 lass Student6{private String name;private int age;public Student6(String name,int age) {na…

YOLOv8模型代码学习

1.参考文献 链接1 2.网络模型解析 2.1卷积神经单元(conv.py) 在该文件中定义了yolov8网络中的卷积神经单元,位置如图所示。 def autopad(k, pNone, d1): # kernel(卷积核), padding(填充), dilation(扩张)"""Pad to same…

解决Java中的InstantiationException异常的技术指南

解决Java中的InstantiationException异常的技术指南 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在Java编程中,InstantiationException异常是开…

Python中位运算详解

✨前言: 在Python中,位运算用于直接操纵数值的二进制位。以下是Python中的几种位运算符,每个位运算符的功能及其使用实例: ✨按位与(AND) - & 当两个操作数的位都为1时,结果的相应位才是…

Nginx日志管理之错误日志配置

Nginx 的错误日志可以帮助用户及时判断 Nginx 配置及运行时出错的原因,错误日志也可以通过 Nginx 内置指令进行配置,但不支持格式定义。配置指令如下表所示。 说明 错误日志指令组成主指令error_log作用域main、http、mail、stream、server、location默…

坐标传送指令

目录 主城传送 联盟 部落 中立 副本传送 旧世界(Vanilla 1.0) 燃烧的远征(TBC 2.0) 巫妖王之怒(WLK 3.0) 大灾变(CTM 4.0) 熊猫人之谜(MOP 5.0) 德…

Xlua三方库Android编译出错解决办法

Xlua三方库Android编译出错解决办法 最近听老师的热更教程,讲到xlua编译android平台会报错,也是看了老师的博客,按照方法去解决,然而问题并没有解决。应该是因为代码更新或者版本不一样,在此简单记录一下解决过程。 参…

Node.js 事件循环的工作流程

Node.js 的事件循环由六个主要阶段组成,每个阶段都有一个或多个回调队列。事件循环依次遍历这些阶段,并在每个阶段执行相应的回调函数。具体的流程如下: Timers(计时器阶段): 执行已到期的 setTimeout 和 s…

js 获取get请求请求时间

要获取GET请求的响应时间,可以使用JavaScript的XMLHttpRequest对象。以下是一个示例: function getResponseTime(url, callback) {var xhr new XMLHttpRequest();var startTime new Date().getTime();xhr.onreadystatechange function() {if (xhr.re…

[RPI4] 树莓派4b安装istoreos及使用 -- 1. 系统安装

最近在研究家庭智能化的一些东西,其中包括网络,智能家居等一系列内容,然后看过的资料有的想再回来看的时候就找不到了,然后就想着开这么一个系列,做一些记录,先从智能家居开始吧。 1 安装istoreos系统 iStoreOS 目标是提供一个人人会用的路由兼轻 NAS 系统,不管是作为路…

Transformer预测 | 基于Transformer的风电功率多变量时间序列预测(Matlab)

文章目录 预测效果文章概述模型描述程序设计参考资料预测效果 文章概述 Transformer预测 | 基于Transformer的风电功率多变量时间序列预测(Matlab) Transformer 模型本质上都是预训练语言模型,大都采用自监督学习 (Self-supervised learning) 的方式在大量生语料上进行训练,…

python桌面应用

py文件 import osimport wx import wx.html2class MyFrame(wx.Frame):def __init__(self, parent):wx.Frame.__init__(self, parent, title"启动啦", size(1000, 700))# 创建一个Web视图组件self.browser wx.html2.WebView.New(self)# 加载本地HTML文件# self.brow…

考研数学|《李林880》正确率多少算合格?

李林880题是针对考研数学三的练习题集,覆盖了考研数学三的主要知识点和题型。如果能够熟练掌握这些题目,意味着对考研数学三的知识点有了较为深入的理解和应用能力。 首先,考研数学三的总分是150分,题型包括单选题、填空题和解答…

RN开发搬砖经验之—“Calculated frame index should never be lower than 0“崩溃问题分析

问题重现 崩溃堆栈: Back traces starts. java.lang.RuntimeException: java.lang.IllegalStateException: Calculated frame index should never be lower than 0at com.facebook.react.animated.NativeAnimatedModule$1.doFrameGuarded(NativeAnimatedModule.ja…

PostgreSQL中 GROUPING SETS、CUBE 和 ROLLUP功能

PostgreSQL 中,GROUPING SETS、CUBE 和 ROLLUP 的功能,允许在查询中更灵活地生成聚合结果,而不需要多次重写查询或使用复杂的 UNION 语句。这些功能在数据分析中特别有用,因为它们允许你以不同的维度对数据进行分组和聚合。 1、测…

持久化容器数据

持久化容器数据 目录 容器卷管理卷试一试 使用卷查看卷内容删除卷 当一个容器启动时,它会使用镜像提供的文件和配置。每个容器可以创建、修改和删除文件,并且不会影响其他容器。当容器被删除时,这些文件更改也会被删除。 虽然容器的这种短…