关于GPT的Open API,看这一篇就够了(可搭建自己的ChatGPT)

简介: 关于GPT的Open API,看这一篇就够了(可搭建自己的ChatGPT)

当今社会,AI技术的发展进入了爆发期,而其中最为引人注目的就是GPT(Generative Pre-trained Transformer)模型,这一模型凭借其强大的生成能力和智能化让人惊叹,ChatGPT的诞生,也意味着在AI从人工智障到智能的一个巨大的进步。随着GPT-3.5接口的开放,越来越多的开发者可以利用这一接口进行自然语言处理和文本生成等方面的创新应用。本文将介绍GPT-3.5接口的基本特性、应用场景以及相关技术细节,旨在让读者更好地了解GPT-3.5接口的强大功能。本文由chatGPT辅助写作。


什么是GPT以及chatGPT?


GPT(Generative Pre-trained Transformer)是一种基于Transformer架构的自然语言处理模型,由OpenAI公司开发。它的核心思想是在大规模的文本语料库上进行无监督的预训练学习,以此构建一个通用的语言理解模型。这个模型可以用于各种下游任务,如文本分类、摘要生成、对话系统等。

而ChatGPT则是基于GPT模型的一种特定应用,它专注于对话系统领域。ChatGPT通过前期的大规模预训练,在输入对话文本后,可以自动生成与用户对话内容相符合的回复。与传统的对话系统不同,ChatGPT不需要设计特定的规则和逻辑,也不需要对数据进行标记,因为它已经基于海量的数据进行了模型的训练,可以自动学习到语言的各种规律和逻辑关系。通过与用户不断的交互,ChatGPT可以逐渐加深对用户意图和需求的理解,从而更加准确地回答用户问题。

总的来说,GPT和ChatGPT是一种新型的自然语言处理技术,它们利用大数据和先进的算法,可以实现自然、流畅、智能的自然语言交流。这两种技术在各种领域都有广泛的应用前景,包括客服机器人、智能助手、智能家居等等。


GPT以及Open API


两个公共核心参数 (重要)
temperature

用来调整生成模型中文本语言的多样性和随机性的。它会在每一步骤中重新缩放模型中每个单词的概率分布,使得常见的词更有可能被选择,同时也让不太常见的单词出现的可能性更高。较高的temperature值通常会生成更大胆、更具创造性的文本,而较低的temperature值则会基于模型已经学到的内容生成更保守的文本。通常情况下,temperature的取值范围在0到2之间,值越大,生成的结果越随机,值越小,生成的结果越保守。


top_p

用于在生成模型中对概率进行剪枝。它计算一个累积概率分布,并在该分布超过top_p值时立即停止。例如,top_p为0.3表示只有占总概率分布前30%的标记被考虑。这样可以避免输出过于随机和不合适的文本,提高输出的合理性和可控性。


1、chat

地址: api.openai.com/v1/chat/com…

方法: POST

该API主要是用于对话,由于众所周知的原因,我们不能使用OpenAI官网提供的ChatGPT服务,但是我们还是可以在国内的很多网站去使用国内版的ChatGPT的服务,这其实就是基于此API所搭建的服务,请求参数以及响应列表如下: 当然可以,以下是 https://platform.openai.com/docs/api-reference/chatchat API 的参数列表:

请求参数


参数名称 类型 是否必填 参数说明
model string 要使用的模型名称,截至今天,支持的模型有gpt-4, gpt-4-0314, gpt-4-32k, gpt-4-32k-0314, gpt-3.5-turbo, gpt-3.5-turbo-0301,注意4的模型需要申请权限
messages array 对话的起始文本
temperature float 生成文本的随机度量程度。值越高,则生成结果更随机
max_tokens int 生成文本中最大的 token 数量
n int 生成文本的数量
stop string 生成文本的标志,当生成的文本中出现该标志时,自动停止生成


message参数,是最重要的内容,我们看一下官网的案例



[
    {
        "role":"system",
        "content":"You are a helpful assistant."
    },
    {
        "role":"user",
        "content":"Who won the world series in 2020?"
    },
    {
        "role":"assistant",
        "content":"The Los Angeles Dodgers won the World Series in 2020."
    }
]


从案例可以看出message的本质,就是role和conten字段组成的数组。role字段共有三个值,分别是system、user和assistant,system代表的是当前对话中AI的角色设定,案例中的意思是AI扮演的是个很有用的助手,user则代表用户的提问,assistant,则代表助手回答的内容。

你可能想问为什么一个message需要带这么多内容,这里我们回忆一个场景,我们在使用chatGPT的时候,它是可以记住上下文的,秘密就是在这里,其实在ChatGPT的服务端,是不记录每次回答的内容的,而是每次都会把上下文内容带过去,这就是它能记住上下文的原因。这里也有一个特别坑的地方,上下文也会被记录到token数量中,过长的上下文会导致费用上升。关于收费,可以参考文章后面的内容。


response


{
  "id": "chatcmpl-123", 
  "object": "chat.completion",
  "created": 1677652288,
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "\n\nHello there, how may I assist you today?",   // AI的回答内容
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 9,  // 请求的token长度
    "completion_tokens": 12, // 响应的token长度
    "total_tokens": 21  // 总长度
  }
}


2、completion

地址: api.openai.com/v1/completi…

方法: POST

根据用户的提示,来完成任务,主要是文本类型任务。这个和上面的chatAPI不同的是可以使用不同的模型,不同的模型能力不一样,以下是请求参数列表


参数名 类型 是否必须 说明
model string 准备使用的模型,这里支持的模型都有text-davinci-003, text-davinci-002, text-curie-001, text-babbage-001, text-ada-001,除过这些还可以使用自己的fine-tunes模型
prompt string 需要生成文本的起始文本
max_tokens int 生成文本的最大长度。默认为16,最大值为2048。
temperature float 控制生成文本的随机程度。默认为1,越高则生成的文本越随机。
top_p float 与温度类似,控制生成文本的随机程度。默认为1,越高则生成的文本越随机。
n int 指定需要生成的文本的数量。默认为1。
stream bool 是否将生成的文本流式返回。默认为False。
stop list of string 停止生成文本的标记符号列表。
presence_penalty float 控制生成文本的重复程度。默认为0。
frequency_penalty float 控制生成文本中特定单词(比如人名)出现的频率。默认为0。
best_of int 设定多次调用API后,取结果中最佳的n个结果。默认为1。
logprobs int 控制需要返回每个标记符号的日志概率。默认为None。
echo bool 是否向生成的文本添加起始文本。默认为True。


response


{
  "id": "cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7",
  "object": "text_completion",
  "created": 1589478378,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "\n\nThis is indeed a test",  // AI'的回答
      "index": 0,
      "logprobs": null,
      "finish_reason": "length"
    }
  ],
  "usage": {
    "prompt_tokens": 5, //同上
    "completion_tokens": 7,
    "total_tokens": 12
  }
}


3、edits

地址: api.openai.com/v1/edits

方法: POST

这个api通常被用作文本纠错,润色。参数列表如下:


参数名 类型 是否必须 描述
model string 这里支持的模型有text-davinci-edit-001 or code-davinci-edit-001
input string 一个可选的显式提示,将引导API生成特定类型的文本。
instruction string 指令,指的是你要求ai做的事情
temperature float 控制生成本文中的随机性的值。较高的温度会导致更出人意料的文本。默认值为1。
top_p int 生成文本的最大标记数。请注意,每个标记可能包含多个单词。
n int 生成返回的备选文本个数。默认为1。


response


{
  "object": "edit",
  "created": 1589478378,
  "choices": [
    {
      "text": "What day of the week is it?", // AI回复
      "index": 0,
    }
  ],
  "usage": {
    "prompt_tokens": 25,            // 同上
    "completion_tokens": 32,
    "total_tokens": 57
  }
}


4、images


(1)生成Image

地址: api.openai.com/v1/images/g…

方法: POST

参数列表


参数名 类型 是否必须 描述
prompt string 提示,将引导API生成特定类型的图像。
n int 生成图片的数量(最大为10)。默认是1。
size string 要生成的图像的大小,例如:“1024x1024”。默认值是“512x512”。
response_format string 服务器返回文件的格式。可以是:“url”(以URL的形式返回)或“base64”(以base64编码的形式返回)。默认是“url”。
user int 用户唯一标识符,用的很少


response


{
  "created": 1589478378,
  "data": [
    {
      "url": "https://..." // 图片地址
    },
    {
      "url": "https://..."
    }
  ]
}


(2)image edit

根据提示编辑图片

地址: api.openai.com/v1/images/e…

方法: POST

参数列表


参数名 类型 是否必须 描述
image string 包含图像数据的对象。目前支持PNG格式,图片必须小于4M
mask string 另外一张图片,根据官方解释,这里是指定image中哪些地方呗编辑的(因为不搞图片处理,作者也不太明白的,懂的可以在评论区讨论下)。
prompt string 一个可选的显式提示,将引导API生成特定类型的图像。
n int 生成图片的数量(最大为10)。默认是1。
size string 要生成的图像的大小,例如:“1024x1024”。默认值是“512x512”。
response_format string 服务器返回文件的格式。可以是:“url”(以URL的形式返回)或“base64”(以base64编码的形式返回)。默认是“url”。
user int 用户唯一标识符,用的很少


响应同上

5、embeddings


根据给定的输入,计算出一个向量,常被用于搜索,聚合,分类等领域

地址: api.openai.com/v1/embeddin…

方法: POST

参数列表:


参数名 类型 是否必须 描述
model string 这里支持的模型有text-davinci-edit-001 or code-davinci-edit-001
input string 一个可选的显式提示,将引导API生成特定类型的文本。


响应


{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "embedding": [
        0.0023064255,
        -0.009327292,
        .... (1536 floats total for ada-002)
        -0.0028842222,     
      ], // 向量
      "index": 0
    }
  ],
  "model": "text-embedding-ada-002",
  "usage": {
    "prompt_tokens": 8,
    "total_tokens": 8
  }
}


官方推荐的计算相似度的函数是余弦相似度函数,比如说用在搜索时,我们先将被搜索的数据都求出上面的向量值,然后再把关键词求出向量,再使用余弦相关函数来对比,如果是专业的搜索,推荐使用向量检索数据库来做。


6、fine-tunes


fine-tunes是深度学习中的一个术语,指的是在已经训练好的模型上,使用新的训练集进行微调,以使其适应新的任务或数据集。这个过程通常会调整模型的参数(例如权重和偏差),以使其能够更好地拟合新的数据,并提高整体性能。这里的API较多,这里只列最重要的两个

(1)上传文件

地址:api.openai.com/v1/files

方法: POST

方法只有两个参数,一个是file,文件格式,另外一个是purpose,字符串类型,代表上传的目的是什么。我们来看一组request和response的示例。 request


{
  "file": "mydata.jsonl",   // 文件路径
  "purpose": "create fine-tunes"
}


response


{
  "id": "file-XjGxS3KTG0uNmNOK362iJua3", // 文件Id,用于后边创建自己的fine-tunes模型
  "object": "file",
  "bytes": 140,
  "created_at": 1613779121,
  "filename": "mydata.jsonl",
  "purpose": "fine-tune"
}


(2)创建fine-tunes

地址:api.openai.com/v1/fine-tun…

方法: POST

参数列表(仅列出常用且重要的)


参数名 类型 是否必须 描述
model string 基于哪个模型去做微调,这里仅支持"ada", "babbage", "curie", "davinci"这四种以及在2022-04-21之后fine-tunes的模型
training_file string 文件ID,即上个API返回值中的ID


注意,fine-tunes模型的创建,需要一定的时间,一般来说在半个小时以上。

响应


{
  "id": "ft-AF1WoRqd3aJAHsqc9NY7iL8F",
  "object": "fine-tune",
  "model": "curie",
  "created_at": 1614807352,
  "events": [ // 这里是创建fine-tune过程中的事件,如果创建完成,这里也会对应信息
    {
      "object": "fine-tune-event",
      "created_at": 1614807352,
      "level": "info",
      "message": "Job enqueued. Waiting for jobs ahead to complete. Queue number: 0."
    }
  ],
  "fine_tuned_model": null,
  "hyperparams": {
    "batch_size": 4,
    "learning_rate_multiplier": 0.1,
    "n_epochs": 4,
    "prompt_loss_weight": 0.1,
  },
  "organization_id": "org-...",
  "result_files": [],
  "status": "pending",
  "validation_files": [],
  "training_files": [
    {
      "id": "file-XGinujblHPwGLSztz8cPS8XY",
      "object": "file",
      "bytes": 1547276,
      "created_at": 1610062281,
      "filename": "my-data-train.jsonl",
      "purpose": "fine-tune-train"
    }
  ],
  "updated_at": 1614807352,
}


目前支持的模型


我们可以调用api.openai.com/v1/models 来查看自己可以使用哪些model。下面是各个模型的详细介绍


GPT3.5


模型名称 描述 最大 token 数 训练数据
gpt-3.5-turbo GPT-3.5 家族中最具能力且成本效益最高的模型,针对聊天进行了优化,也适用于传统的语言生成任务。 4,096 截至2021年9月
gpt-3.5-turbo-0301 基于 gpt-3.5-turbo 的快照,适用于三个月的支持期限,并不会再更新。 4,096 截至2021年9月
text-davinci-003 可以完成任何语言任务,比 curie、babbage 或 ada 模型具有更好的质量、更长的输出和一致的指令跟随,支持在文本中插入自动完成功能。 4,097 截至2021年6月
text-davinci-002 具有类似于 text-davinci-003 的功能,但经过有监督的微调而非强化学习进行训练。 4,097 截至2021年6月
code-davinci-002 针对代码补全任务进行了优化的模型。 8,001 截至2021年6月


其中,以上模型都是 GPT-3.5 模型,能够理解和生成自然语言或代码。其中 gpt-3.5-turbo 是最具能力且成本效益最高的模型,适用于聊天和传统文本生成任务。text-davinci-003可以完成任何语言任务,并具有更好的质量、更长的输出和一致的指令跟随,同时支持在文本中插入自动完成功能。另外,code-davinci-002这个模型则是针对代码补全任务进行了优化。


GPT4


模型名称 描述 最大 token 数 训练数据
gpt-4 目前最新的 GPT 模型,支持文本生成和处理。相较于其它 GPT-3.5 模型,GPT-4 在更复杂的推理场景下表现出更高的准确性,并且在聊天优化方面也进行了改进。 8,192 截至2021年9月
gpt-4-0314 基于 GPT-4 的快照,不会再更新,并只支持三个月的期限,将于2023年6月14日结束。 8,192 截至2021年9月
gpt-4-32k 能力与基础的 GPT-4 模型相同,但上下文长度为其 4 倍。将根据最新的模型迭代进行更新。 32,768 截至2021年9月
gpt-4-32k-0314 基于 gpt-4-32k 的快照,将不会再更新,并只支持三个月的期限,将于2023年6月14日结束。 32,768 截至2021年9月


虽然对于一些基础的任务而言,GPT-4 与 GPT-3.5 模型之间的差异并不明显,但在更复杂的推理场景下,GPT-4 显得更加强大。需要注意的是,GPT-4 目前处于限制性测试阶段,只有被授权的用户才能够使用。


API Key的申请以及收费


上面每条API都需要通过ApI Key来调用,API key可以在platform.openai.com/account/api… 申请,至于token的计算,可以在OpenAI官网platform.openai.com/tokenizer 来计算。token收费可以参考参考官方这个页面openai.com/pricing 来看。

目录
相关文章
|
2月前
GPT-4 vs. ChatGPT:19个弱项问题(多步逻辑推理、概念间接关联)的横向对比
GPT-4在逻辑推理和概念关联上的准确率提升至100%,超越ChatGPT,其智力可能超过95%的人。在逻辑和多模态理解上有显著进步,但数数和某些逻辑推理仍是挑战。擅长处理成本计算和复杂情境,能建立概念间的间接关联,如遗忘与老龄化的联系。在数学和物理领域表现出色,但处理复杂间接关系和抽象概念时仍有局限。总体而言,GPT-4展现出超越人类智能的潜力,但仍需面对认知任务的挑战。![GPT-4进步示意](https://developer.aliyun.com/profile/oesouji3mdrog/highScore_1?spm=a2c6h.132)查看GPT-5教程,可访问我的个人主页介绍。
39 0
GPT-4 vs. ChatGPT:19个弱项问题(多步逻辑推理、概念间接关联)的横向对比
|
4月前
|
人工智能 自然语言处理 测试技术
使用 GPT4 和 ChatGPT 开发应用:第四章到第五章
使用 GPT4 和 ChatGPT 开发应用:第四章到第五章
88 0
|
4月前
|
存储 算法 网络架构
问 ChatGPT 关于GPT的事情:压缩篇
问 ChatGPT 关于GPT的事情:压缩篇
31 0
|
4月前
|
PyTorch 调度 算法框架/工具
问 ChatGPT 关于GPT的事情:扩展篇
问 ChatGPT 关于GPT的事情:扩展篇
50 0
|
6月前
|
存储 自然语言处理 API
【网安AIGC专题11.1】12 CODEIE用于NER和RE:顶刊OpenAI API调用、CodeX比chatgpt更好:提示工程设计+控制变量对比实验(格式一致性、模型忠实度、细粒度性能)(下)
【网安AIGC专题11.1】12 CODEIE用于NER和RE:顶刊OpenAI API调用、CodeX比chatgpt更好:提示工程设计+控制变量对比实验(格式一致性、模型忠实度、细粒度性能)
57 0
|
4月前
|
机器学习/深度学习 数据采集 人工智能
问 ChatGPT 关于 GPT 的事情:数据准备篇
问 ChatGPT 关于 GPT 的事情:数据准备篇
59 0
|
19天前
|
API 数据安全/隐私保护 Python
ChatGPT邮箱API发送邮件有什么方法吗
ChatGPT邮箱API提供多样化的邮件发送方式:SMTP协议、HTTP请求、直接API接口及电子邮件库(如Python's smtplib和JavaMail)。用户可依据需求选择合适的方法,配置SMTP服务器地址、端口、用户名和密码等信息,实现便捷的编程发邮件。首先确保邮件服务器配置正确,然后参照文档指南开始使用。
|
12天前
|
人工智能 JSON 机器人
【Chat GPT】用 ChatGPT 运行 Python
【Chat GPT】用 ChatGPT 运行 Python
|
12天前
|
JSON Java API
在 Spring Boot 中使用 OpenAI ChatGPT API
在 Spring Boot 中使用 OpenAI ChatGPT API
49 1
|
2月前
|
机器学习/深度学习 自然语言处理 API
使用 Python 集成 ChatGPT API
使用 Python 集成 ChatGPT API
114 1