通俗理解API:OpenAI API调用手册

本文通过简单的例子,来介绍openai api的调用,解决调用常常遇到的问题,能够解决大部分应用场景,适合初学者,对chatgpt,openAI不熟悉的小伙伴。

第1章:理解API——程序之间的合约

1.1 API的定义

API的英文即Application Programming Interface首字母的缩写,直译过来的意思就是:程序之间的接口。不过,我更倾向于把API理解为,程序之间的合约。这样的理解有助于我们更深入地揭示API的本质。

1.2 程序之间的合约:一种现实世界的类比

为了更好地理解API是如何充当程序之间的合约,我们可以通过一个现实世界的例子来展示。

想象一下餐厅里的服务员和厨师。顾客通过菜单选择自己想吃的食物,服务员将订单传递给厨师。在这个过程中,菜单就充当了一种“合约”。

  • 菜单(API): 菜单上列出了所有可供选择的菜肴以及它们的价格。这就像是API提供了一系列可用的函数、方法和数据结构,让开发人员知道可以使用哪些操作和如何使用它们。
  • 顾客(调用方): 顾客选择菜单上的菜肴。这就像程序中的一部分(调用方)选择调用API的特定功能。
  • 服务员(接口): 服务员了解菜单上的内容,并将顾客的选择传递给厨师。这就像接口在调用方和被调用方之间传递信息。
  • 厨师(被调用方): 厨师根据服务员传递的信息准备食物。在软件中,这个阶段对应于API所代表的底层系统或服务执行特定操作。
  • 准备食物(执行操作): 厨师根据订单准备食物,并确保按照菜单的描述准备。同样地,API确保按照文档中的描述执行特定操作。
  • 食物的交付(返回值): 食物准备好后,服务员将其送到顾客的桌上。在软件中,执行操作后,API会返回特定的值或结果。

通过这个类比,我们可以清楚地看到API作为程序之间的合约的工作原理。它定义了如何请求特定操作,如何传递参数,如何执行操作,以及如何返回结果。只要遵循API的规则(菜单),各方都可以顺利协同工作。如果尝试执行不在API规定范围内的操作,就像点菜单上没有的食物,那么操作将无法进行。

第2章:OpenAI API概述

2.1 人工智能的普及和OpenAI的角色

随着人工智能的飞速发展,它已经不仅限于学术研究或大型企业的专利技术。从推荐系统到自动驾驶汽车,AI正在渗透到我们日常生活的方方面面。在这个背景下,OpenAI通过开发易用的API接口,让普通人也能轻松使用和开发自己的对话式人工智能。这不仅降低了入门门槛,还促进了AI技术的广泛传播和应用。

2.2 OpenAI调用流程简述

调用OpenAI的API流程相当直观和友好,以下是一般的流程概述:

  1. 注册和获取API密钥: 任何有意使用OpenAI服务的人员或组织首先需要在OpenAI的官方网站上注册,并获取专属的API密钥。这个密钥将用于身份验证和授权。

  2. 选择适当的模型: OpenAI提供了一系列的预训练模型,如GPT-3和GPT-4等,开发者可以根据自己的需求选择合适的模型。

  3. 构建和发送请求: 通过构建特定的请求,可以与选定的模型进行交互。请求通常包括您希望模型执行的任务的具体细节,如文本生成、文本补全等。

  4. 接收和处理响应: 模型将根据您的请求生成一个响应,并返回给您的应用程序。您可以进一步处理这些响应,以适应您的具体需求或应用场景。

  5. 分析和优化: OpenAI还提供了工具和资源来帮助您分析模型的性能,以便您可以根据需要进行调整和优化。

OpenAI的API不仅强大而且灵活,无论是初学者还是经验丰富的开发者都能轻松上手。它打开了一个新的世界,让更多人能够探索和利用人工智能的潜力。随着技术和平台的不断完善和升级,未来有望看到更多由OpenAI API支持的创新应用和服务。

第3章:OpenAI API简单调用(以gpt-3.5-turbo为例)

本章将列举几种常用语言的调用

Linux终端

arduino
复制代码
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 }'

Node.js(JavaScript)

php
复制代码
async function getdata(){ const res = await fetch('https://api.openai.com/v1/chat/completions',{ method:'POST', headers:{ Authorization:'Bearer 你的apikey', "Content-Type":"application/json" }, body:JSON.stringify({ model:'gpt-3.5-turbo', messages:[ { role:"user", content:"hello!" }, { role:"user", content:"how are you?" } ] }) }) const data = await res.json(); console.log(data); } getdata()

Python

kotlin
复制代码
import requests url = 'https://api.openai.com/v1/chat/completions' headers = { 'Authorization': 'Bearer 你的apikey', 'Content-Type': 'application/json' } data = { 'model': 'gpt-3.5-turbo', 'messages': [ {'role': 'user', 'content': 'hello!'}, {'role': 'user', 'content': 'how are you?'} ] } response = requests.post(url, headers=headers, json=data) content = response.json().get('choices')[0].get('message').get('content') print(content)

GO

go
复制代码
package main import ( "bytes" "encoding/json" "fmt" "net/http" ) func main() { url := "https://api.openai.com/v1/chat/completions" messages := []map[string]string{ {"role": "user", "content": "hello!"}, {"role": "user", "content": "how are you?"}, } bodyMap := map[string]interface{}{ "model": "gpt-3.5-turbo", "messages": messages, } body, _ := json.Marshal(bodyMap) req, _ := http.NewRequest("POST", url, bytes.NewBuffer(body)) req.Header.Add("Authorization", "Bearer 你的apikey") req.Header.Add("Content-Type", "application/json") resp, err := http.DefaultClient.Do(req) if err != nil { fmt.Println("Error:", err) return } defer resp.Body.Close() var result map[string]interface{} json.NewDecoder(resp.Body).Decode(&result) fmt.Println(result) }

第4章:OpenAI API调用手册

4.1调用方式

你可以通过任何编程语言的HTTP请求与API进行交互!

4.2身份验证

OpenAI API使用API密钥进行身份验证。所有API请求都要在Authorization HTTP头部中包括您的API密钥

makefile
复制代码
Authorization: Bearer OPENAI_API_KEY

如何获取API Key:platform.openai.com/account/api…

通俗理解API:OpenAI API调用手册

4.3models列表

  使用接口管理工具,可以获取OpenAi的models列表,也可自行调用。

bash
复制代码
GET https://api.openai.com/v1/models
ini
复制代码
import requests url = 'https://api.openai.com/v1/models' headers = { 'Authorization': 'Bearer 你的apikey' } response = requests.get(url, headers=headers) print(response.json())

这里直接列举了OpenAI常用模型

模型名称最大token费用(输入 or 输出)请求速率(Free or Bill)HTTP请求地址
gpt-48,192 tokens$0.03 / 1K tokens$0.06 / 1K tokensNULL3500次/minapi.openai.com/v1/chat/com…
gpt-4-06138,192 tokens$0.03 / 1K tokens$0.06 / 1K tokensNULL3500次/minapi.openai.com/v1/chat/com…
gpt-4-32k32,768 tokens$0.06 / 1K tokens$0.12 / 1K tokensNULL3500次/minapi.openai.com/v1/chat/com…
gpt-4-32k32,768 tokens$0.06 / 1K tokens$0.12 / 1K tokensNULL3500次/minapi.openai.com/v1/chat/com…
gpt-3.5-turbo4,096 tokens$0.0015 / 1K tokens$0.002 / 1K tokens3次/min3500次/minapi.openai.com/v1/chat/com…
gpt-3.5-turbo-16k16,384 tokens$0.003 / 1K tokens$0.004 / 1K tokens3次/min3500次/minapi.openai.com/v1/chat/com…
gpt-3.5-turbo-06134,096 tokens$0.0015 / 1K tokens$0.002 / 1K tokens3次/min3500次/minapi.openai.com/v1/chat/com…
gpt-3.5-turbo-16k-061316,384 tokens$0.003 / 1K tokens$0.004 / 1K tokens3次/min3500次/minapi.openai.com/v1/chat/com…
DALL·E1024×1024 $0.020 / image5次/min50次/minapi.openai.com/v1/images/g…

4.4参数

聊天模型request and response

参数名称参数类型是否必须参数介绍
modelstring要使用的模型ID
messagesarray[]对话的消息列表
role对话角色
content对话内容
temperaturenumber or null否(默认1)生成内容随机度(范围0-2)
top_pnumber or null否(默认1)另一种采样方式,不建议改变
ninteger or null否(默认1)生成内容的条数
streambool or null否(默认false)流式生成内容
max_tokensinteger否(默认inf)最大的token数
其他不常用自行查阅platform.openai.com/docs/api-re…

json格式请求与返回

json
复制代码
{ "model": "gpt-3.5-turbo-0613", "max_tokens": 1000, "stream": true, "n": 1, "temperature":1, "messages": [ { "role": "system", "content": "你现在需要扮演喜羊羊,当我问到你是谁的时候,你回答你是喜羊羊!" }, { "role": "user", "content": "你是谁?" }, { "role": "assistant", "content": "我是喜羊羊!快乐又活泼的喜羊羊!" } ] }
json
复制代码
{ "id": "chatcmpl-7me3fFf3j7X5qJucqBpPB7SkKjRHz", "object": "chat.completion", "created": 1691828083, "model": "gpt-3.5-turbo-0613", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "咩咩咩咩~大家快跑,灰太狼来了!我是喜羊羊,我们要小心!" }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 101, "completion_tokens": 44, "total_tokens": 145 } }

4.5进阶用法

  如何使请求携带上下文?

  答:将整个聊天数组都发送,即实现上下文功能,但请求不能超过最大token。

  如何自定义请求功能?

  答:在消息数组中使用system或者user指定chat身份,通过prompt工程,使其拥有特定功能。

第5章:OpenAI API调用的坑坑绕绕

  请求不成功怎么办?

  答:国内网络无法请求api.openai.com,请自行解决。

  多次请求后失败?

答:免费用户一分钟只能发送三次请求。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
人工智能

ChatGPT最佳实践系列-第1篇

2024-4-30 21:35:43

人工智能

【收藏】目前为止,我能给你总结到的所有ChatGPT

2024-5-1 1:38:53

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索