打造自己的ChatGPT:OpenAI 的API接入技巧

2023年3月更新

OpenAI 在3月1日的时候放出了ChatGPT的接口,新的接口可以使用 GPT-3.5 模型,同时接口参数更新为了 messages 的结构,更符合对话场景的消息格式,而且价格也更加便宜。

由于其他的接口参数变化不大,同时返回的消息格式没有发生变化,所以只需要对请求格式,直接按照messages的格式进行整理之后,变更接口和模型,就可以方便的替换之前接入的completions的接口。

值得推荐


简介

:OpenAI 的API提供了一系列的人工智能模型,包括 GPT-3、GPT-2 和 GPT-1,可以帮助开发者利用机器学习和深度学习的技术快速实现文本理解和生成。OpenAI API 拥有强大的自然语言处理功能,可以帮助开发者实现各种自然语言处理任务,包括语义理解、文本生成、文本分类等.

对于每个想尝试使用OpenAI API 开发自己的ChatGPT的开发者来说,可能对会面临一个问题,都是对接的同一套的API,为什么我得到的输出和想象的完全不一样呢。

这其中最主要的问题就在于对于接口的理解。

理解接口

OpenAI API的核心在于 completions 接口,用户提供 prompt,API返回文本completion,这一来一回就构成的对于用户需求的应答。

所以作为开发者,在尝试的接入该接口的时候,就会默认认为和ChatGPT的效果一样,直接将聊天的内容作为prompt,但是没过多久就会发现的,返回的内容的越发感觉到奇怪,有时会不知所云,有时候会出现格式错乱。

这是因为 OpenAI API 的 completions 接口本身是为了支持多种类型的prompt,而不仅仅是聊天文本。为了获得更好的效果,开发者需要根据自己的需求,设置合适的prompt格式,以便获得更准确的结果。

聊天效果

在OpenAI的Example 和 Playground里面提供了 Chat 情景的Prompt。

Open AI playground

其中核心点就在于三点:

  1. 使用一段简短的描述说明当前的场景,并对AI assistant 赋予一定的人格特性说明
  2. 使用了聊天对话的格式作为prompt,API作为文本生成的工具,会进行后续文本的生成,当prompt刚好结束到AI:(playground使用 Inject start text ,在提交prompt之前自动补充了 /n AI:)的时候,API自然会以当前的场景进行后续内容的补充
  3. 使用stop避免生成内容超出范围。在聊天的场景中,如果不加stop的话,可能除了生成AI的回答以外,还有继续生成Human的内容,这些就不是在预期范围之内的了。

由此,开发者在自行接入OpenAI API的打造聊天机器人时候,就需要注意将用户的聊天内容包装入 prompt中,构建出完整的意图描述,并设置好对应的stop,才能得到更加有效的回答。

上下文连续

另外一个比较常见的问题就是,为什么接入的API并不像ChatGPT一样具有上下文的连续性的。

这个关键点还是在于当前的API是无状态的,尤其是Web应用的开发者对于无状态应该是再熟悉不过的了。无状态的接口自然是无法有前后的关联了,每一次的调用都是独立的。

所以想要实现上下文的关联,就之内尽可能的给足上文。这个意思就是说,在prompt中,需要把之前的聊天内容的都携带上。带的越多,自然知道的越多,关联性就越强。

ChatGPT的会话连续性

但是也并不是可以无限制的携带上文。接口中有一个max_tokens的参数,用于控制生成completion的长度,而prompt和completion的总长度,受模型最大长度的限制(最新的text-davinci-003的最大长度是4096token),token的计算可以使用官方的工具进行评估。

其他参数

除了以上参数之外的,另外的像是temperature控制的生成内容的随机性,frequency_penalty和presence_penalty提供生成内容的多样性等等,开发者可以详细参考OpenAI的开发文档,了解参数的详情,根据实际的应用场景进行参数微调,从而打造属于自己的ChatGPT。

打造自己的ChatGPT:OpenAI的API接入技巧的更多相关文章

  1. 微信公众平台开发,API接入与推送事件(1)

    博客好久没有更新了,今天说说微信开发.微信开发的好多初学者都会又这样的迷惑,微信开发到底是什么?其实微信开发本质我和我们的网站开发没有太大的区别.我们常说的微信开发也就是公众号开,微信公众号分为三个类 ...

  2. 微信企业红包api接入

    项目描述:基于微信浏览器的H5页面,接入微信支付接口和微信红包接口 一.接入前准备条件 1.微信公众号 需要基于已认证的微信公众号承载该H5页面.该条件默认已具备,本文重点为红包接口. 2.微信支付商 ...

  3. 微信小程序入门与实战 常用组件API开发技巧项目实战*全

    第1章 什么是微信小程序? 第2章 小程序环境搭建与开发工具介绍 第3章 从一个简单的“欢迎“页面开始小程序之旅 第4章 第二个页面:新闻阅读列表 第5章 小程序的模板化与模块化 第6章 构建新闻详情 ...

  4. 初学者的API测试技巧

    API(应用程序编程接口)测试是一种直接在API级别执行验证的软件测试.它是集成测试的一部分,它确认API是否满足测试人员对功能.可靠性.性能和安全性的期望.与UI测试不同,API测试是在没有GUI层 ...

  5. 扫描仪API接入大全:Twain, WIA 或 两者不具有.[换个思路 春暖花开]

    最近做和扫描仪接入的扫描应用程序,深深感觉到了来自底层设备和WINDOWS协议的恶意.软件专业,对计算机深层次通知机制和协议,以及与之相连接的机器的接入协议和一些参数,当时并木有认真学习和了解,前一阵 ...

  6. 京东JOS API 接入使用笔记

    商户开设了京东店.淘宝店,最近打算使用京东物流,需要使用京东仓库(京东店的订单使用京仓发货,淘宝等其他店使用京东云仓)发货,所以得从自家的ERP与京东沧海(ECLP)API对接,实现收发存. 首先得在 ...

  7. .NET接入微信支付(一)JS API接入 V3

    前段时间刚接完银联支付,完事后又接了微信支付,前段时间一直急着上线,微信的接入一直没有时间处理,今天我们就来整理一下微信支付的接入方法和要点. 配置: 首先呢微信支付需要通过审核,审核啥的准备工作我就 ...

  8. 【活动公告】Hackathon —— 腾讯云AI API接入迷你赛

    一. 活动简介 编程马拉松(Hackathon)是将热爱软硬件开发的人聚集起来所举办的一项比赛,本次活动由腾讯云AI联合云+社区发起,希望让广大开发者体验到腾讯云AI的魅力.比赛过程中,参赛者可以尽情 ...

  9. Bing的Translation API 接入

    参考: https://msdn.microsoft.com/zh-cn/library/mt146806.aspx 首先你需要一个Microsoft的帐号,如果没有在这里注册一下 https://s ...

  10. Elaticsearch REST API常用技巧

    在Elasticsearch的REST API中,有很多使用技巧,这里针对官方文档给出的介绍,总结了几个常用的例子. 更多内容参考:Elastisearch文档总结 多索引 ES支持在一次请求中指定多 ...

随机推荐

  1. react 前端导出Excel

    1.首先下载 js-export-excel npm install js-export-excel; 2.下载 xlsx npm install xlsx; 3.引入    import * as  ...

  2. Visual Studio快速清除程序中的空行 删除空行

    Ctrl+H; 正则替换 ^(?([^\r\n])\s)*\r?$\r?\n 快速删除多个空行

  3. Nginx系列---【配置文件中静态资源文件禁止通过目录查看】

    配置文件中静态资源文件禁止通过目录查看 1.问题 nginx作为文件服务器时,默认是可以通过目录路径查看该目录下的所有文件的,这样很不安全,容易造成静态资源泄露. 2.方案 location /ima ...

  4. js 将多层json对象 转化为一层json

    const parse = data => { const uid = `uid_${Date.now()}`; const process = (input, prefix = '', jso ...

  5. 获取n位数m进制的随机数 js

    js 获取n位数m进制的随机数 n 的取值范围为 0 < n > 1.7976931348623157e+308 (Number.MAX_VALUE) m的取值范围为 2 <= m ...

  6. 3html5

    <label>网址:</label><input type="url" name="" required><br> ...

  7. drf(3)

    1 不使用drf编写5个接口 1.1 路由 urlpatterns = [    path('books/', views.BookView.as_view()),    path('books/&l ...

  8. Mysql 的用户权限等操作管理与设置(创建、授权、修改、查看)

    注:请在 MySql 的客户端操作 1.创建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password';//例 CREATE USER 'use ...

  9. protobuf怎么处理java中的Object和Object[],protobuf的bytestring和object[]

    如题,作者一开始也遇到了这个比较棘手的问题. 话不多说,直接说解决方案. 这里使用bytestring,如果是object[]的话则用repeated定义即可. 那么问题又来了,用这个类型怎么做到与j ...

  10. 8-WebShell总结

    WebShell 1.webshell介绍 在计算机科学中,Shell 俗称壳(用来区别"核"),是指"为使用者提供操作界面"的软件(命令解释器).类似于win ...