chatgpt接口开发笔记1:completions接口

chatgpt,接口,开发,笔记,completions · 浏览次数 : 438

小编点评

**ChatGPT 接口开发笔记 1:Completions 接口序** **动机** 在部署 Chanzhaoyu/chatgpt-web 项目时,发现体验并不好,会出现多人同时提问时回答会夹断,上下文接不上的问题。为了解决该问题,我开发了后端接口,包含 completions 接口。 **Completions 接口** Completions 接口用于处理多个聊天请求,并根据会话的上下文提供个性化回复。它接受一个 `messages` 字列表作为请求参数,其中每个 `messages` 字列表代表一个聊天对话的阶段,例如 "user"、"assistant" 和 "system"。 **接口格式** Completions 接口使用 JSON 格式来定义请求参数。请求包含以下关键参数: - `model`: 使用的模型名称,目前仅支持 "gpt-3.5-turbo"。 - `messages`: 包含聊天对话的阶段的 JSON 列表。 **示例请求** ```json { "model": "gpt-3.5-turbo", "messages": [ { "role": "user", "content": "Hello!" } ] } ``` **示例响应** ```json { "id": "chatcmpl-123", "object": "chat.completion", "created": 1677652288, "choices": [ { "index": 0, "message": { "role": "assistant", "content": "Hello there, how may I assist you today?" }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 9, "completion_tokens": 12, "total_tokens": 21 } } ``` **总结** Completions 接口是一个用于处理多个聊天请求的强大工具。它通过根据会话的上下文提供个性化回复,可以显著提高聊天体验。

正文

chatgpt接口开发笔记1:completions接口

序:写这一系列文章的动机来源于在部署Chanzhaoyu/chatgpt-web项目时发现,体验并不好,会存在多人同时提问时回答会夹断,上下文接不上的现象。同时希望搭建的项目能实现前后端分离。于是用webapi写了一套后端接口。我会把我在对接openai的接口开发的经验分享给大家。

completions接口

目前我们用到最多的接口就是completions接口

POST  https://api.openai.com/v1/chat/completions

官方给出的入参示例为:

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": "Hello!"}]
  }'

header部分:

  • Authorization 身份验证 $OPENAI_API_KEY 替换成你用到的key

请求体:

  • model 使用的模型,这里使用的是gpt 3.5的模型
  • messages 会话

**注意点:这里的messages 是接口的核心,分为三类:user、assistant、system **

同时,我们可以

  • 添加max_tokens 用于控制回复内容的最大长度,一般可以设置为2000
  • 添加stream 用于控制接口是返回json字符串还是返回stream的流(stream可以实现打字机效果)
  • 添加presence_penalty或frequency_penalty 用于控制回复的开放程度,官方称为惩罚机制

返回参数官方示例:

{
  "id": "chatcmpl-123",
  "object": "chat.completion",
  "created": 1677652288,
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "\n\nHello there, how may I assist you today?",
    },
    "finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 9,
    "completion_tokens": 12,
    "total_tokens": 21
  }
}

重点参数解析:

  • created 回复时间的时间戳
  • message 回复内容,回复内容的role固定为assistant
  • finish_reason 结果完成原因 可能是"stop"(代表没有更多的建议),"cutoff"(代表建议被截断),或者"completion"(代表建议完成)
  • prompt_tokens:消息中包含的单词数量
  • completion_tokens:结果中包含的单词数量
  • total_tokens:消息中总共包含的单词数量

如何控制上下文

相信很多部署过chatgpt-web的同学都有遇到过上下文不连续,接不上的情况。其原因在于会话的数据是存在前端缓存里的,返回消息时出现了夹断,前端获取不到被夹断报错的上一次的聊天回复的内容。

看过chatgpt-web的源码的同学应该发现了,在发起聊天请求时,会传会话id给接口。我开始也是以为id是上下文的判断依据。后来在开发接口时才注意到OpenAI的接口并没有Id这样的参数。这说明会话的id并不是上下文的检索条件。

通过测试实现,我总结了下:

上下文的依据与会话id,还有你使用的key都是没有关系的,它只与你的message参数有关。

实现精确的上下文

为了实现精确的上下文,你可以在发起请求时,将接口回复的内容一并带上。因为message 是一个集合,如下:

"messages": [{
      "role": "assistant",
      "content": "\n\nHello there, how may I assist you today?",
    }{"role": "user", "content": "Hello!"}]

如果条件允许可以多加点(大于等于2),同时这肯定是消耗更多的余额的。

到此,你应该对completions接口已经有了充足的认识了。

阅读如遇样式问题,请前往个人博客浏览: https://www.raokun.top
拥抱ChatGPT:https://ai.terramours.site
开源项目地址:https://github.com/firstsaofan/TerraMours

与chatgpt接口开发笔记1:completions接口相似的内容:

chatgpt接口开发笔记1:completions接口

chatgpt接口开发笔记1:completions接口 序:写这一系列文章的动机来源于在部署Chanzhaoyu/**chatgpt-web**项目时发现,体验并不好,会存在多人同时提问时回答会夹断,上下文接不上的现象。同时希望搭建的项目能实现前后端分离。于是用webapi写了一套后端接口。我会把

chatgpt接口开发笔记2生成图片接口

chatgpt接口开发笔记2生成图片接口 chatgpt的生成图片接口,可以根据用户的描述来生成满足用户意愿的图片 1、了解接口参数 接口地址: POST https://api.openai.com/v1/images/generations 下面是接口文档描述内容 curl https://ap

重新定义性价比!人工智能AI聊天ChatGPT新接口模型gpt-3.5-turbo闪电更新,成本降90%,Python3.10接入

北国春迟,春寒料峭略带阴霾,但ChatGPT新接口模型gpt-3.5-turbo的更新为我们带来了一丝暖意,使用成本更加亲民,比高端产品ChatGPT Plus更实惠也更方便,毕竟ChatGPT Plus依然是通过网页端来输出,Api接口是以token的数量来计算价格的,0.002刀每1000个token,token可以理解为字数,说白了就是每1000个字合0.01381人民币,以ChatGPT无

LLM探索:GPT类模型的几个常用参数 Top-k, Top-p, Temperature

## 前言 上一篇文章介绍了几个开源LLM的环境搭建和本地部署,在使用ChatGPT接口或者自己本地部署的LLM大模型的时候,经常会遇到这几个参数,本文简单介绍一下~ - temperature - top_p - top_k ### 关于LLM 上一篇也有介绍过,这次看到一个不错的图 >A rec

逐句回答,流式返回,ChatGPT采用的Server-sent events后端实时推送协议Python3.10实现,基于Tornado6.1

善于观察的朋友一定会敏锐地发现ChatGPT网页端是逐句给出问题答案的,同样,ChatGPT后台Api接口请求中,如果将Stream参数设置为True后,Api接口也可以实现和ChatGPT网页端一样的流式返回,进而更快地给到前端用户反馈,同时也可以缓解连接超时的问题。 Server-sent ev

以效率为导向:用ChatGPT和HttpRunner实现敏捷自动化测试(二)

本篇文章将详细讲解一下我们团队内部在遇到业务痛点时如何利用Httprunner框架进行接口自动化测试的。当最近邂逅chatGPT后又是如何将二者结合起来,实现"敏捷"自动化测试的。

利用ChatGPT提升测试工作效率——测试工程师的新利器(一)

在测试工作中可以辅助功能测试包括需求分析或解读代码(注意代码安全)后生成测试用例,还可以辅助生成代码,接口测试用例,自动化脚本等各个方向起作用。当然实际使用中可能会因为提示词的不同生成的结果需要人工多次对话训练才可以。但是使用chatGPT肯定比不用能提高工作效率。当然具体落地后如何进行量化提效抽象...

.NET 如何实现ChatGPT的Stream传输

# .NET 如何实现ChatGPT的Stream传输 ChatGPT是如何实现不适用websocket进行一个一个字返回到前端的? 下面我们会介绍一下`EventSource` ## EventSource **`EventSource`** 接口是 web 内容与[服务器发送事件](https:

使用ChatGPT自动构建知识图谱

1.概述 本文将探讨利用OpenAI的gpt-3.5-turbo从原始文本构建知识图谱,通过LLM和RAG技术实现文本生成、问答和特定领域知识的高效提取,以获得有价值的洞察。在开始前,我们需要明确一些关键概念。 2.内容 2.1 什么是知识图谱? 知识图谱是一种语义网络,它表示和连接现实世界中的实体

ChatGPT 通过谷歌算法面试,年薪 18.3 万美金

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 声明:此图片由 MidJourney 生成 未经训练,不属于任何真实人物 大家好,我是小彭。 2023 开年以来,全球媒体最火爆的热点莫过于一个生成式 AI 聊天机器人 —— ChatGPT,我们都被大量的信