用OpeAI API打造ChatGPT桌面端应用

news2024/12/26 11:21:37

用OpeAI API打造ChatGPT桌面端应用

自从《如何用ChatGPT高效完成工作》这篇文章火了之后,我在公司内部分享了一下”摸鱼“的先进经验,激发起广大同事一起”摸鱼“的热情。但是注册ChatGPT账号非常麻烦,既要Science上网,又要海外手机收验证码,每个人都注册一个ChatGPT账号不现实。于是就用OpenAI开放出来的GPT模型API,手撸了一个桌面端应用,来满足广大人民群众日益增长的”摸鱼“需求。

文章目录

    • 成果展示
    • 模型概述
      • GPT-3
        • Davinci
        • Curie
        • Babbage
        • Ada
      • Codex
    • API调用
      • Python库
      • Node.js库
    • 参数说明
    • 总结

成果展示

先来看一下最终成果:【申请试用请关注留言或评论留言】

文本生成

图1. 文本生成

代码生成

图2. 代码生成

图片生成

图3. 图片生成

目前包含文本生成代码生成图片生成三大项功能。其中以文本生成和代码生成日常使用最多。针对文本生成和代码生成这两大类场景,OpenAPI分别提供了GPT-3Codex模型,

模型描述
GPT-3一组能够理解和生成自然语言的模型
Codex一组可以理解和生成代码的模型,包括将自然语言转换为代码

虽然GPT-3模型没有ChatGPT背后的GPT-3.5强大,但是用API有如下好处:

优点

  • 无需注册、无需Science上网
  • 有参数可以控制输出
  • 比ChatGPT稳定
  • 速度比ChatGPT快一点
  • 可以整合到其他系统中

缺点

  • 生成质量不如ChatGPT
  • 优先的上下文支持
  • 会产生费用

模型概述

GPT-3

在这里插入图片描述

GPT-3模型可以理解并生成自然语言。OpenAI根据任务场景和功能强度提供了四种可选子模型。其中Davinci g功能最强大,而Ada 响应速度最快。

模型名称描述最大tokens训练数据
text-davinci-003最强大的GPT-3模型。
具有更高的输出质量、
更长的输出内容
和更好的语言理解能力。
还支持文本插入功能。
4,000 tokens截至2021年6月
text-curie-001功能强大,
但比Davinci速度更快,价格也更便宜。
2,048 tokens截至2019年10月
text-babbage-001能够完成简单任务,速度快,成本低。2,048 tokens截至2019年10月
text-ada-001能够完成非常简单的任务,
通常是GPT-3系列中速度最快的,成本最低的。
2,048 tokens截至2019年10月

尽管通常来讲Davinci最强大,但其他型号的模型在某些特定场景和任务下,具有明显的速度或成本优势。例如,Curie可以执行许多与Davinci相同的任务,但速度更快,成本仅为Davinci的1/10。

建议在实验时使用Davinci,因为它产生的结果最好。一旦实验完成,建议尝试一下其他模型的效果,看看是否能以更低的延迟或成本获得同样或近似的效果。同时还可以通过在特定任务上对其他模型进行微调来提高它们的性能。

Davinci

Davinci是GPT-3系列中最强大的模型,可以在很少指引的情况下完成其他模型能完成的任何任务。对于需要大量理解内容的应用,如针对特定受众的摘要生成和创造性内容生成,Davinci的产生效果最佳好。当然,这些优势需要更多的计算资源,因此Davinci每次API调用的成本更高,而且速度也不如其他模型。

Davinci的另一个亮点是理解文本的意图。Davinci非常擅长解决各种逻辑问题,并解释其中角色的动机。Davinci已经能够解决一些涉及因果关系的最具挑战性的人工智能问题。

擅长领域:复杂意图理解、因果关系发现及理解、针对性摘要总结

Curie

Curie也非常强大,同时速度也非常快。虽然Davinci在分析复杂文本时更具优势,但Curie在情感分类和总结摘要等许多细致任务上表现出色。Curie还非常擅长回答问题,因此非常适合作通用服务聊天机器人。

擅长领域:翻译、摘要、复杂分类、文本情感

Babbage

Babbage可以执行分类等简单任务。当涉及到语义搜索时,它也可以很好地对文档与搜索查询的匹配程度进行排序。

擅长领域:文本分类、语义搜索分类

Ada

Ada通常是速度最快的模型,可以执行解析文本、地址更正和粗放的分类任务。可以通过提供更多上下文来提升Ada的表现。

擅长:文本解析、简单分类、地址更正、关键字提取

⚠注意:高级模型都能完成低级模型能完成的任务,例如Ada能完成的工作,Curie和Davinci都能完成。

OpenAI模型是非确定性的,这意味着相同的输入可以产生不同的输出。将temperature 设置为0将使输出大部分具有确定性,但仍可能存在少量可变性。

Codex

在这里插入图片描述

Codex模型是GPT-3模型的派生模型,可以理解和生成代码。训练数据包含自然语言和来自GitHub的数十亿行公共代码。

Codex最擅长Python,并精通十几种语言,包括JavaScript、Go、Perl、PHP、Ruby、Swift、TypeScript、SQL,甚至Shell。

Open AI目前提供2种子模型:

模型名称描述最大请求训练数据
code-davinci-002最强大的Codex模型。
特别擅长将自然语言转译成代码。
除了完成代码外,还支持在代码补全。
8,000 tokens截至2021年6月
code-cushman-001几乎与Davinci Codex一样强大,但速度稍快。
这种速度优势可使其更适合于实时应用。
2,048 tokens

Codex目前尚处在公测阶段。公测期间免费调用,但是速度会受限制。推荐直接用最强的code-davinci-002

API调用

OpenAI API调用非常简单,官方提供Python和Node.js库。

Python库

Python库可以通过下面命令安装:

$ pip install openai

安装后即可在代码中通过导入openai库来调用各功能接口

import openai

openai.api_key = "YOUR_OPENAI_API_KEY"

response = openai.Completion.create(
    model="text-davinci-003", 
    prompt="Hello", 
    temperature=0, 
    max_tokens=16
)

这里需要注意的是:调用接口需要先绑定OpenAI API Key。该API Key可以在OpenAI后台申请,点击右上角头像,在弹出菜单中点击”View API keys“。在API Keys管理界面可以创建或删除API Keys。

在这里插入图片描述

Node.js库

Node.js库的安装和使用步骤与Python库类似,在项目中运行

$ npm install openai

即可向项目中安装并添加openai库。安装完成后,即可在代码中调用

const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
  apiKey: 'YOUR_OPENAI_API_KEY',
});
const openai = new OpenAIApi(configuration);
const response = await openai.createCompletion({
  model: "text-davinci-003",
  prompt: "Hello",
  temperature: 0,
  max_tokens: 16,
});

社区提供了其他所有主流编程语言的库,大家可以根据自己使用的语言,在这里查找。

参数说明

用API的一大好处是,API提供了众多参数,可以让我们控制输出效果。下面是GPT-3Codex模型支持的参数:

参数名类型默认值说明
modelstring模型名称(详见模型综述)
promptstring输入的提示
suffixstringnull文本生成后在文末插入的后缀
max_tokensint16文本生成时要生成的最大token数。
提示的token数加上max_tokens不能超过模型的上下文长度。
大多数模型的上下文长度为2048个token(最新模型支持4096 tokens)
temperaturefloat1采样温度。值越高意味着模型承担的风险越大。
对于需要创意的场景,可以尝试0.9,
对于答案明确的场景,建议用0(argmax采样)
建议不要与top_p同时改变。
top_pfloat1核采样(温度采样的另一种方式),其中模型考虑具有top_p概率质量的token的结果。因此,0.1意味着只考虑包含最高10%概率质量的token
建议不要与temperature同时改变。
nint1每个提示要生成多少个答案
streambooleanfalse是否返回流传输进度。如果设置,token将在可用时以纯数据服务器端推送事件发送,流以data:[DONE]消息终止。
logprobsintnul如果传值(最大值5)则表示包括logprobs个最可能的token以及所选令牌的对数概率。例如,如果logprobs为5,则API将返回包含5个最可能Token的列表。
echobooleanfalse是否回传提示
stopstringnull最多4个序列,遇到stopAPI将停止生成。
返回的文本不包含停止序列。
presence_penaltyfloat0数值介于-2.0和2.0之间。正值将根据到目前为止新token是否出现在文本中来惩罚新token,从而增加模型谈论新主题的可能性。
frequency_penaltyfloat0数值介于-2.0和2.0之间。正值根据文本中新token已经出现的频率惩罚新token,从而降低模型逐字重复同一行的可能性。
best_ofint1在服务端生成best_of个完成,并返回“最佳”(每个token的log概率最高的一条)。结果无法流式传输。
n一起使用时,best_of控制候选回应的数量,n指定要返回的数量–best_of必须大于等于n
⚠注意:由于此参数生成许多回应,因此会快速消耗token配额。小心使用并确保对max_tokensstop进行了合理的设置。
logit_biasmapnull修改回应种出现指定token的可能性。
接受一个json对象,该对象将token(由GPT tokenizer的token ID指定)映射到-100到100之间的相关偏差值。可以用 tokenizer tool 将文本转换成token ID。
在数学上,在采样之前,将偏差添加到模型生成的逻辑中。每个模型的确切效果会有所不同,但介于-1和1之间的值应该会降低或增加选择的可能性;像-100或100这样的值应该会导致相关token的禁用或必现。
例如,可以传递{"50256": -100}以防止生成`<
userstringnull代表终端用户的唯一标识符,OpenAI用来监控和检测滥用。

理解上述参数对文本生成任务的影响至关重要。其中最重要的一组参数是temperaturetop_ppresence_penaltyfrequency_penalty,后面我会专门整理相关文章来介绍这些参数背后的原理和对模型输出的影响。

总结

经过一周测试,我们发现虽然GPT-3和Codex的生成质量没有ChatGPT那么好,且对上下文的支持也不如ChatGPT,但在一些简单工作上使用还是够用的。关键是用API比用网页可以带来更多优势:

  • 无需注册、无需Science上网
  • 有参数可以控制输出
  • 相对稳定、快速
  • 可以整合到其他系统中

不过,这里不得不吐槽一下,OpenAI开发出来的图像生成接口真的是不行。生成的图像非常粗糙,明显是将多张图片中的元素剪切拼在一起,完全无法满足工作需要的精度。各位读者如果知道哪些更强大的AI图像接口,欢迎大家留言告知我。

最后希望我的ChatGPT API申请能尽快审核下来,届时我将带给大家真正的ChatGPT-3.5的桌面端工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/338130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spark环境搭建

文章目录Spark 概述Spark 发展历史使用现状官网介绍流行原因组成模块Spark环境搭建-Local模式(本地模式)Spark环境搭建-Standalone(独立集群)Spark环境搭建-Standalone-HA(高可用)Spark环境搭建-Spark-On-Yarn两种模式Spark 概述 Spark 发展历史 2009年诞生2014年成为Apache顶…

Java笔记-线程中断

线程的中断 1.应用场景&#xff1a; 假设从网络下载一个100M的文件&#xff0c;如果网速很慢&#xff0c;用户等得不耐烦&#xff0c;就可能在下载过程中点“取消”&#xff0c;这时&#xff0c;程序就需要中断下载线程的执行。 2.常用中断线程的方法&#xff1a; 1.使用标…

Canvas鼠标滚轮缩放以及画布拖动(图文并茂版)

Canvas鼠标滚轮缩放以及画布拖动 本文会带大家认识Canvas中常用的坐标变换方法 translate 和 scale&#xff0c;并结合这两个方法&#xff0c;实现鼠标滚轮缩放以及画布拖动功能。 Canvas的坐标变换 Canvas 绘图的缩放以及画布拖动主要通过 CanvasRenderingContext2D 提供的 …

C++设计模式(13)——装饰模式

亦称&#xff1a; 装饰者模式、装饰器模式、Wrapper、Decorator 意图 装饰模式是一种结构型设计模式&#xff0c; 允许你通过将对象放入包含行为的特殊封装对象中来为原对象绑定新的行为。 问题 假设你正在开发一个提供通知功能的库&#xff0c; 其他程序可使用它向用户发…

注册ChatGPT的辛酸血泪史,不能算教程的教程

注册ChatGPT的血泪史 2月份了&#xff0c;改论文降重了&#xff0c;所以想搞个ChatGPT玩玩&#xff0c;本以为有渠道能顺序上车&#xff0c;但是看了很多教程&#xff0c;也进了很多交流群&#xff0c;都喵的(要不是卖号&#xff0c;租体验&#xff0c;liar)&#xff0c;所以自…

java ssm高校教材管理平台 idea maven

设计并且实现一个基于JSP技术的高校教材管理平台的设计与实现。采用MYSQL为数据库开发平台&#xff0c;SSM框架&#xff0c;Tomcat网络信息服务作为应用服务器。高校教材管理平台的设计与实现的功能已基本实现&#xff0c;主要学生、教材管理、学习教材、教材入库、教材领取、缴…

C语言 大数加法 大数乘法

最近刷题&#xff0c;总遇到大数加法&#xff08;浮点数&#xff09;和乘法问题(阶乘)&#xff0c;总结一下思路。 大数乘法主要思想&#xff1a;编程实现竖式乘法&#xff08;小学时候学的列竖式计算乘法&#xff09;创建一个很大的数组&#xff0c;用于存储大数的每一位。&am…

Android Q WiFi 代码框架

同学,别退出呀,我可是全网最牛逼的 WIFI/BT/GPS/NFC分析博主,我写了上百篇文章,请点击下面了解本专栏,进入本博主主页看看再走呗,一定不会让你后悔的,记得一定要去看主页置顶文章哦。 1 wifi 架构图 备注:在Android 9.0中,WiFi的状态处理在WifiStateMachine中进行,到…

c语言数据结构-图的遍历

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 定义&#xff1a; 两种遍历方法&#xff1a; 深度优先搜索&#xff08;DFS&#xff09;&#xff1a; …

ElasticJob-Lite架构篇 - 认知分布式任务调度ElasticJob-Lite

前言 本文基于 ElasticJob-Lite 3.x 版本展开分析。 如果 Quartz 集群中有多个服务端节点&#xff0c;任务决定在哪个服务端节点上执行的呢&#xff1f; Quartz 采用随机负载&#xff0c;通过 DB 抢占下一个即将触发的 Trigger 绑定的任务的执行权限。 在 Quartz 的基础上&…

从0到1一步一步玩转openEuler--10 openEuler基础配置-设置kdump

10 openEuler基础配置-设置kdump 文章目录10 openEuler基础配置-设置kdump10.1 设置kdump10.1.1 设置kdump预留内存10.1.1.1 预留内存参数格式10.1.2 预留内存推荐值10.1.3 禁用网络相关驱动10.1 设置kdump 本节介绍如何设置kdump预留内存及修改kdump配置文件参数。 10.1.1 设…

写python爬虫,你永远绕不过去代理问题

如果你想要从事 Python 爬虫相关岗位&#xff0c;那你一定会接触到代理问题&#xff0c;随之而来的就是下面 5 大代理知识点。 什么是代理&#xff1a;代理是网络中间人&#xff08;中间商赚插件&#xff09;&#xff0c;它代表用户发送网络请求&#xff0c;隐藏用户的真实身份…

JDY-31蓝牙模块使用指南

前言 本来是想买个hc-05&#xff0c;这种非常常用的模块&#xff0c;但是在优信电子买的时候&#xff0c;说有个可以替代的&#xff0c;没注意看&#xff0c;买回来折腾半天。 这个模块是从机模块&#xff0c;蓝牙模块分为主机从机和主从一体的&#xff0c;主机与从机的区别就…

【安全】nginx反向代理+负载均衡上传webshel

Nginx负载均衡下上传webshell 什么是反向代理&#xff1f; 正向代理就是代替客户端进行各种服务的访问以及获取&#xff1b;那么反向代理自然就是代替服务器进行事务处理&#xff0c;就是此时的代理服务器负责将用户的各项请求做一个汇总、分类&#xff0c;将其分发到不同的服务…

网络抓包方式复现Tomcat- AJP协议文件读取/命令执行漏洞(CVE-2020-1938 / CNVD-2020-10487)

目录 测试是否安装成功​编辑 基础简介 Tomcat Connector(连接器) ​编辑Servlet(服务程序) Tomcat内部处理请求流程 Tomcat加载和处理jsp的流程图 抓包复现 需要将下图中抓取到的数据包修改一下 替换成二进制数据的形式&#xff1a; python版替换代码&#xff1a; 运…

WordPress网站日主题Ri主题RiProV2主题开启了验证码登录但是验证码配置不对结果退出登录后进不去管理端了

背景 WordPress网站日主题Ri主题RiProV2主题开启了验证码登录但是验证码配置不对结果退出登录后进不去管理端了;开启了腾讯云验证码防火墙但APPID,APPSecret没配置,结果在退出登录后,由于验证码验证失败管理端进不去了 提示如下:

自定义软件帮助文档(qt assistant实现)

网上搜了一下&#xff0c;软件的帮助文档&#xff0c;三个都可以&#xff1a;https://github.com/zealdocs/zeal&#xff0c;https://zealdocs.org/&#xff0c;看看这个博客说的 https://blog.csdn.net/libaineu2004/article/details/125028913&#xff0c;这个也是开源的&…

神经网络实战--使用迁移学习完成猫狗分类

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天来学习一下如何使用基于tensorflow和keras的迁移学习完成猫狗分类&#xff0c;欢迎大家一起前来探讨学习~ 本文目录&#xff1a;一、加载数据集1.调用库函数2.加载数据集3.数据集管理二、猫狗数据集介绍1.猫狗数据集介…

【Spring(十一)】万字带你深入学习面向切面编程AOP

文章目录前言AOP简介AOP入门案例AOP工作流程AOP切入点表达式AOP通知类型AOP通知获取数据总结前言 今天我们来学习AOP,在最初我们学习Spring时说过Spring的两大特征&#xff0c;一个是IOC,一个是AOP,我们现在要学习的就是这个AOP。 AOP简介 AOP:面向切面编程,一种编程范式&#…

计算机网络自顶向下 -- 流水线,滑动窗口协议

流水线协议 Rdt3.0在停等操作的过程中浪费了大量的时间&#xff1a; 从而在Rdt 3.0上引入了流水线机制&#xff1a;为了提高资源利用率 流水线协议&#xff1a; 允许发送方在收到ACK之前连续发送多个分组&#xff0c;更大的序列号范围&#xff0c;同时发送方和/或接收方需要更…