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

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

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

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

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

claude3国内API接口对接

众所周知,由于地理位置原因,Claude3不对国内开放,而国内的镜像网站使用又贵的离谱! 因此,团队萌生了一个想法:为什么不创建一个一站式的平台,让用户能够通过单一的接口与多个模型交流呢?这样,用户就可以轻松地比较不同模型的表现,并根据需要选择最合适的一个。于是诞生了这个ChatGPT,Claude

基于ChatGPT的API的C#接入研究

今年开年,最火的莫过于ChatGPT的相关讨论,这个提供了非常强大的AI处理,并且整个平台也提供了很多对应的API进行接入的处理,使得我们可以在各种程序上无缝接入AI的后端处理,从而实现智能AI的各种应用。ChatGPT的API可以在前端,以及一些后端进行API的接入,本篇随笔主要介绍基于ChatGPT的API的C#接入研究。

ChatGPT小型平替之ChatGLM-6B本地化部署、接入本地知识库体验

本文期望通过本地化部署一个基于LLM模型的应用,能让大家对构建一个完整的应用有一个基本认知。包括基本的软硬环境依赖、底层的LLM模型、中间的基础框架及最上层的展示组件,最终能达到在本地零编码体验的目的。

LM Studio + open-webui 快速本地部署大语言模型

目录一、前言二、环境准备三、安装设置四、下载模型并运行五、配置 open-webui写在结尾 一、前言 自 OpenAi 发布 ChatGPT 对话性大语言模型,AI 这两年发展迎来爆发,国内外也衍生了大量的语言模型开放给公众使用。为了可以让更多人接触到AI,让本地化部署更加轻便快捷,于是就有了Ol

重新定义性价比!人工智能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无

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

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