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

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日

相关文章

  • caffe框架研究(一)

    最近一直在研究caffe源码,将一些心得体会记录下来,以便以后查阅。 首先记录一个c++ template的知识,caffe大量使用了template,但貌似只支持float与double类型的数据。定义了template的函数,如果在.h文件中声明,在cpp文件中定义的话,在其他的文件include头文件之后再调用此函数,会出现无法解析的外部符号的错误,这…

    2023年4月8日
    00
  • 机器学习笔记–KNN算法2-实战部分

    本文申明:本系列的所有实验数据都是来自【美】Peter Harrington 写的《Machine Learning in Action》这本书,侵删。 一案例导入:玛利亚小姐最近寂寞了,然后她就准备在一个在线社交网站搞网恋,但是凡是都有一个选择,按照她以往的经验,她接触了三种人: 1:不喜欢的人 2:魅力一般的人 3:特别有魅力的人 但是啊,尽管发现了这三…

    机器学习 2023年4月12日
    00
  • caffe初步实践———使用训练好的模型完成语义分割任务

    caffe刚刚安装配置结束,乘热打铁! (一)环境准备 前面我有两篇文章写到caffe的搭建,第一篇cpu only ,第二篇是在服务器上搭建的,其中第二篇因为硬件环境更佳我们的步骤稍显复杂。其实,第二篇也仅仅是caffe的初步搭建完成,还没有编译python接口,那么下面我们一起搞定吧! 首先请读者再回过头去看我的《Ubuntu16.04安装配置Caffe…

    2023年4月8日
    00
  • codeforces757E. Bash Plays with Functions(狄利克雷卷积 积性函数)

    http://codeforces.com/contest/757/problem/E 题意 Sol 非常骚的一道题 首先把给的式子化一下,设$u = d$,那么$v = n / d$ $$f_r(n) = \sum_{d \mid n} \frac{f_{r – 1}(d) + f_{r – 1}(\frac{n}{d})}{2}$$ $$= \sum_{…

    卷积神经网络 2023年4月7日
    00
  • 时间序列(五): 大杀器: 循环神经网络

    循环神经网络 目录 循环神经网络 引言 循环神经网络 循环结构* RNN 结构* 双向循环神经网络 深度循环神经网络 穿越时间的反向传播算法 反向传播算法* 一. 一个乘积: 二. 二个假设: 三: 三个步骤: 四: 四个基本方程**: BPTT** 总结 参考方献: 引言 上几节讲了一些时间序列的基本概念, 大家总感觉不那么的’智能’, 与现在的人工智能的…

    2023年4月6日
    00
  • pytorch中tensorboardX进行可视化

    环境依赖: pytorch   0.4以上 tensorboardX:   pip install tensorboardX、pip install tensorflow   在项目代码中加入tensorboardX的记录代码,生成文件并返回到浏览器中显示可视化结果。 官方示例:   默认设置是在根目录下生成一个runs文件夹,里面存储summary的信息。…

    2023年4月7日
    00
  • 一文讲透产品经理如何用好ChatGPT

    作者:京东零售 何雨航 “4.0版本的ChatGPT可以有效提升产品经理工作效率,但并无法替代产品经理的角色。” 一、引言 3月15日,OpenAI发布了最新的基于GPT-4的ChatGPT,关于其智能性的讨论热度在互联网上空前高涨。 我之前体验过3.5版,发现其难以应用于实际工作中。4.0版本推出后,在中文互联网上并没有辅助产品经理工作的详细介绍。因此,我…

    人工智能概论 2023年4月27日
    00
  • tensorflow学习之——tf.app.flags.DEFINE_XXXX() 使用flags定义命令行参数

    和C/C++编写main函数中的argv一样,tf框架下也封装了tf.app.flags.DEFINE_XXXX()函数用于定义参数,便于命令行形式传递参数。常见的函数形式如下: flags.DEFINE_float(参数1,参数2,参数3) flags.DEFINE_integer(参数1,参数2,参数3) flags.DEFINE_string(参数1,…

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