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

yizhihongxing

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

个人博客地址: https://note.raokun.top
拥抱ChatGPT,国内访问网站:https://www.playchat.top

序:写这一系列文章的动机来源于在部署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.cnblogs.com/raok/p/17354459.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:chatgpt接口开发笔记1:completions接口 - Python技术站

(0)
上一篇 2023年4月27日
下一篇 2023年4月27日

相关文章

  • TF、Keras错误解决:TypeError: Cannot interpret feed_dict key as Tensor …… is not an element of this graph.

    原因:多线程情况下,model执行预测时的session、graph环境和加载时的不一致。 解决办法: 加载模型前,先执行 from tensorflow.keras import backend as K K.clear_session() 加载模型后获取session、graph,并保存: K.get_session()tf.get_default_gr…

    Keras 2023年4月8日
    00
  • 目标检测之人脸识别

    序言         目录     正文 人脸特征点       PERCLOS LBP BSD(盲区检测)   常用人脸库:       MIT        FERET       PIE       AR       ORL       YaleA       YaleB       CAS-PEAL       JAFEE   效果检测参数:    …

    2023年4月5日
    00
  • GAN(生成式对抗网络)学习笔记,手势识别论文笔记

    1.了解生成式对抗网络 Continuous dynamic gesture recognition based on acceleration sensor 生成式对抗网络:采用神经网络作为模型类型的博弈式的训练过程 生成模型+判别模型 生成模型的目标是让判别模型无法区分真实的值与训练出来(生成模型出来的)的值 数学语言描述: 假设生成模型是g(z),其中…

    2023年4月6日
    00
  • Pytorch 网络结构可视化

    安装 conda install graphvizconda install tensorwatch 载入库 import sysimport torchimport tensorwatch as twimport torchvision.models 网络结构可视化 alexnet_model = torchvision.models.alexnet()t…

    2023年4月6日
    00
  • 从零开始山寨Caffe·伍:Protocol Buffer简易指南

    你为Class外访问private对象而苦恼嘛?你为设计序列化格式而头疼嘛?                             ——欢迎体验Google Protocol Buffer 面向对象之封装性 历史遗留问题 面向对象中最矛盾的一个特性,就是“封装性”。 在上古时期,大牛们无聊地设计了三种访问域: public、private、protecte…

    2023年4月8日
    00
  • CNN(循环卷积神经网络)

    这篇博客是看微软亚洲研究院的王井东讲解CNN做的笔记,图片居多。30分钟的视频,我看+写用了2个小时,可以说干货满满。适合已经对机器学习,CNN有一定了解的人,但对于CNN实践环节还不太清楚或者是想对最新的研究情况做进一步跟踪。 视频资源见链接:https://v.qq.com/x/page/s05667eq28w.html 视频主要从四个部分讲述CNN:卷…

    2023年4月8日
    00
  • pytorch-Flatten操作

    1 class Flatten(nn.Module): 2 def __init__(self): 3 super(Flatten,self).__init__() 4 5 def forward(self,input): 6 shape = torch.prod(torch.tensor(x.shape[1:])).item() 7 # -1 把第一个维度…

    PyTorch 2023年4月8日
    00
  • <****-2>生成对抗网络GAN****part6-完整版

    生成对抗网络GAN的学习已经持续两周多,今天给大家送上生成对抗网络最后一个部分part6的课程。 链接: https://pan.baidu.com/s/1miboNJM 密码: 扫描头像二维码添加关注,回复“gan6”即可获得密码 此外,为了方便大家观看,台主把整套****整理到一起了,附上是个****地址:链接: https://pan.baidu.co…

    2023年4月5日
    00
合作推广
合作推广
分享本页
返回顶部