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

第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 = 'http://172.178.89.163:3001/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...

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-4 8,192 tokens $0.03 / 1K tokens $0.06 / 1K tokens NULL 3500次/min api.openai.com/v1/chat/com...
gpt-4-0613 8,192 tokens $0.03 / 1K tokens $0.06 / 1K tokens NULL 3500次/min api.openai.com/v1/chat/com...
gpt-4-32k 32,768 tokens $0.06 / 1K tokens $0.12 / 1K tokens NULL 3500次/min api.openai.com/v1/chat/com...
gpt-4-32k 32,768 tokens $0.06 / 1K tokens $0.12 / 1K tokens NULL 3500次/min api.openai.com/v1/chat/com...
gpt-3.5-turbo 4,096 tokens $0.0015 / 1K tokens $0.002 / 1K tokens 3次/min 3500次/min api.openai.com/v1/chat/com...
gpt-3.5-turbo-16k 16,384 tokens $0.003 / 1K tokens $0.004 / 1K tokens 3次/min 3500次/min api.openai.com/v1/chat/com...
gpt-3.5-turbo-0613 4,096 tokens $0.0015 / 1K tokens $0.002 / 1K tokens 3次/min 3500次/min api.openai.com/v1/chat/com...
gpt-3.5-turbo-16k-0613 16,384 tokens $0.003 / 1K tokens $0.004 / 1K tokens 3次/min 3500次/min api.openai.com/v1/chat/com...
DALL·E 1024×1024 $0.020 / image 5次/min 50次/min api.openai.com/v1/images/g...

4.4参数

聊天模型request and response

参数名称 参数类型 是否必须 参数介绍
model string 要使用的模型ID
messages array[] 对话的消息列表
role 对话角色
content 对话内容
temperature number or null 否(默认1) 生成内容随机度(范围0-2)
top_p number or null 否(默认1) 另一种采样方式,不建议改变
n integer or null 否(默认1) 生成内容的条数
stream bool or null 否(默认false) 流式生成内容
max_tokens integer 否(默认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,请自行解决。

多次请求后失败?

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

相关推荐
nbsaas-boot7 分钟前
如何利用ChatGPT加速开发与学习:以BPMN编辑器为例
学习·chatgpt·编辑器
hunteritself15 小时前
ChatGPT高级语音模式正在向Web网页端推出!
人工智能·gpt·chatgpt·openai·语音识别
Doker 多克18 小时前
Spring AI 框架使用的核心概念
人工智能·spring·chatgpt
曼城周杰伦1 天前
自然语言处理:第六十二章 KAG 超越GraphRAG的图谱框架
人工智能·pytorch·神经网络·自然语言处理·chatgpt·nlp·gpt-3
爱技术的小伙子1 天前
【ChatGPT】ChatGPT在多领域知识整合中的应用
chatgpt
学习前端的小z1 天前
【AIGC】如何准确引导ChatGPT,实现精细化GPTs指令生成
人工智能·gpt·chatgpt·aigc
段传涛2 天前
LLM( Large Language Models)典型应用介绍 1 -ChatGPT Large language models
人工智能·语言模型·chatgpt
起名字真南2 天前
【C++】深入理解 C++ 中的继承进阶:多继承、菱形继承及其解决方案
java·jvm·c++·chatgpt·aigc
爱技术的小伙子2 天前
【ChatGPT】如何通过角色扮演让ChatGPT回答更贴合实际场景
人工智能·chatgpt
在人间负债^2 天前
VRT: 关于视频修复的模型
人工智能·python·学习·机器学习·chatgpt·音视频