我们都被 ChatGPT 给骗了?

news2024/12/23 7:03:06

引言:

  • 用过 ChatGPT 的人都知道,当你与 chatgpt 对话的时候,它是“逐字输出”的,就像真的有个人在跟你打字一样。
  • 其实,这种技术并没有那么神奇,这种技术叫做“实时文本生成”或“逐字输出”技术,官方成“自回归(autoregressive)”技术

揭秘:

实际上,ChatGPT 官网也是在获取到完整响应后进行逐字输出的。逐字输出功能仅用于向用户展示响应时的视觉效果。在请求 OpenAI API 时,你会收到一个包含完整响应的结果。使用逐字输出只是为了在显示过程中更有趣且类似于实时对话的交互效果。

  • 原理如下:

1、网站会话逐字展示效果的原理

在我们通过官网与chatgpt对话时,我们可以看到逐字输出(实时文本生成)的文字效果。但其实这种效果也是通过网站的前端代码处理的,其实后台返回的响应也是整体传回来的,这样做只是为了提高用户体验,让对话看起来更加自然和动态。

2、调用API会返回的是完整响应

我们实际上在调用API时返回的响应也是完整的。API会在后台把响应处理好,并在生成完整的响应后将其返回,所以不会逐字输出。

3、实现逐字展示的原理

如果要通过 python 对接 openai 实现这种效果,openai后台把响应整合好,你直接用python遍历这个响应让其逐字输出展示即可。(后面实践章节有代码示例)

4、模型的底层原理

无论通过官网对话还是调用API获得响应,后台给我们返回的结果都是完整的。但是,openai的后台,在生成这个响应结果时,确实逐字逐词构造出来的,官方称之为自回归(autoregressive)的方式。
简单解释下“自回归”方式的意思,大致就是模型首先接收一个输入(如问题或提示),然后逐步生成单词或字符序列。在生成每个新单词或字符时,模型会考虑到目前为止生成的所有单词或字符。通过这样的方式,模型就能够生成上下文相关且连贯的文本。

总结一下,无论通过网站还是调用API,ChatGPT生成的响应是完整返回的。展现出来的逐字响应效果,都是前端代码处理完成的。但ChatGPT生成这个响应之前,其底层逻辑确实是逐字生成的。

5、不同见解

有圈友提出了不同见解,认为 ChatGPT 的逐字输出是通过 stream 流式技术实现的。

即:通过用 websocket + async await + 接口参数中 设置stream=True 可以实现逐字输出效果,他的解答是,oepnai 会将整个结果分段流式响应,达到预期效果。

那么,你的见解是什么呢? 可以把你的想法打在评论区,大家讨论一下~

实践:

而要实现这种效果,最简单的办法就是可以根据调整 time.sleep() 参数来改变逐个字符输出之间的延迟时间来间断的显示响应结果。也可以结合 websocket 以及 Python async 异步等技术实现。

也可以看看这位小哥实现的 websocket 效果,很棒
chatgpt流式服务

看看 ChatGPT4 如何解答?

python 实现 chatgpt 逐字输出,大家可以运行看一下效果,为了方便起见,这里用 gpt3 模型,其他模型原理相同
1、确保将 OPENAI_API_KEY 替换为你自己的 OpenAI API 密钥,然后运行此代码。它将使用 GPT-3.5-turbo 引擎生成一则关于狗的笑话,并逐个字符显示响应。可以根据需要调整 time.sleep() 参数来改变字符输出之间的延迟时间。
2、需要注意的是,逐字输出仅作为模拟用途,实际上在调用API时返回的响应是完整的。在这个示例中,我们只是逐个字符地显示响应。

import openai
import time

# Set up the OpenAI API key
openai.api_key = "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"

# Set up the prompt
prompt = "Hello, how are you?"

# Set up the parameters for the completion request
parameters = {
    "model": "text-davinci-003",
    "prompt": prompt,
    "temperature": 0.5,
    "max_tokens": 1,
    "n": 1,
    "stop": None,
}

# Send the completion request to the OpenAI API
response = openai.Completion.create(**parameters)
# # Loop to continue the conversation
while True:
    time.sleep(0.02)
    prompt += response.choices[0].text
    parameters["prompt"] = prompt
    response = openai.Completion.create(**parameters)
    print(response.choices[0].text)

# 另外一种实现
# response = openai.Completion.create(parameters)
# response_text = response.choices[0].text.strip()
# for char in response_text:
#     print(char, end="", flush=True)
#     time.sleep(0.1)


stream=True 的效果
在这里插入图片描述

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

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

相关文章

分布式事务Seata-AT模式

承接上文分布式事务-二阶段提交 Seata是开源的分布式事务解决方案,提供高性能和简单易用的分布式事务服务,包含AT、TCC、 SAGA、XA四种事务模式,为用户打造一站式的分布式解决方案。 Seata提供的4种事务模式都是由2PC(二阶段提交…

【C++的内联函数】

文章目录 一、什么是内联函数二、内联函数的优缺点三、使用内联函数的注意事项 一、什么是内联函数 用关键字inline修饰的函数叫做内联函数。 C编译器编译时会自动在被调用的地方展开。 二、内联函数的优缺点 内联函数的优点: 没有函数栈帧创建,提升…

干货分享 | 如何在业余时间学习数据分析?

从社会学背景的数分小白到独揽公司市场部的数据分析,和大家简单分享我的数据分析升级打怪之路。 简单说就是两点【培养数据分析思维】【提升数据分析技能】 思维的培养主要靠书籍和课程 以下是一些对我影响较大的书籍,按照【入门、进阶、高阶】简单做了…

torch.nn.Multiheadattention介绍

初始化参数: class torch.nn.MultiheadAttention(embed_dim, num_heads, dropout0.0, biasTrue, add_bias_kvFalse, add_zero_attnFalse, kdimNone, vdimNone, batch_firstFalse, deviceNone, dtypeNone) 允许模型共同关注来自不同表示子空间的信息。 多头注意力…

C#连接数据库失败,ORA-28040: No matching authentication protocol

C#连接数据库失败 1.原先使用的是oracle11,后来升级数据库到oracle19c,启动程序,数据库连接时报错"ORA-28040: No matching authentication protocol" 2.原因分析:最近服务器数据库版本升级到了19c,网上查了…

【技巧】如何以“只读方式”打开PPT文稿?附两个方法

以“只读方式”打开PPT文稿,可以防止意外修改文稿。今天小编就来介绍一下以“只读方式”打开PPT的两种方法。 方法一:无密码的“只读”模式 1、打开PowerPoint程序,点击菜单中的【文件】选项,再依次点击【打开】-【浏览】。接着在…

FL Studio水果萝卜编曲中文版软件V21版本详细功能介绍

FL Studio十分出色的数字音乐工作软件,其功能大致和Cubase相仿,FL Studio拥有自带的音频插件,并且随着软件的不断更新,使得FL studio不仅仅能够制作电子音乐,同时也能够承担古典、流行等风格的音乐。同时,F…

MySQL:创建数据库,数据表,主键和外键

目录 前言: 安装MySQL: 打开MySQL: 创建数据库: 查看已建数据库: 查看数据库引擎: 创建数据表: 主键约束: 单字段主键: 多字段联合主键: 外键约束&…

《编码——隐藏在计算机软硬件背后的语言》精炼——第11章(门)

“The only source of knowledge is experience.” - Albert Einstein 引言 编码是一种处理并表达信息的方式,它包括摩斯电码、盲文、二进制语言等等,当然作为计算机类的经典书籍,这本书简述了计算机中以二进制数为基础的编码方式&#xff0…

5自由度并联机械臂实现搬运功能

1. 功能说明 本文示例将实现R306样机5自由度并联机械臂搬运牛奶到指定地点的功能。该机械臂由1个5自由度并联机械臂和1个单轴丝杠平台构成,机械臂通过并联的方式同时控制同一个端点的运动。其驱动系统采用大扭矩舵机和小扭矩舵机、执行末端为夹持机构。 2. 并联机械…

SEO优化中的外链与反链是什么意思?它们之间有什么区别?

在SEO优化中,外链和反链是两个非常重要的概念。虽然它们听起来很相似,但实际上却有着很大的区别。那么,什么是外链和反链?它们之间有什么区别呢?本文将为您详细介绍。 一、什么是外链 外链,也被称为入站链…

C++---区间DP---环形石子合并(每日一道算法2023.4.24)

注意事项: 本题是"区间dp—石子合并"的扩展题,dp思路完全一样,就不多详细讲了,可以去那篇文章看,这题主要讲一下如何处理环形。 题目: 将 n 堆石子绕圆形操场排放,现要将石子有序地合…

ES的索引结构与算法解析

作者:京东物流 李洪吉 提到ES,大多数爱好者想到的都是搜索引擎,但是明确一点,ES不等同于搜索引擎。不管是谷歌、百度、必应、搜狗为代表的自然语言处理(NLP)、爬虫、网页处理、大数据处理的全文搜索引擎,还是有明确搜…

DAY03_循环语句

1:for循环结构 来,继续啊,下面我们来学习循环结构语句,循环结构有三种语句,分别是: for循环 while循环 do…while循环 这三种循环可以做相同的事情,当然它们也有小的区别,至于它…

【LeetCode】322. 零钱兑换

322. 零钱兑换(中等) 思路 由于题目提到 「每种硬币的数量是无限的」,所以这道题本质上完全背包问题,我直接使用了空间压缩的写法。dp[j] 表示当前区间在 [0, i]的硬币可以表示成 j 的最小数量。注意,这里把 dp数组初始…

windows安装sqli-labs靶场,两种方式

1、安装phpstudy 官网打不开了,下载地址在这儿https://download.csdn.net/download/weixin_59679023/87711536 双击安装 点自定义安装,选择安装目录,注意目录不要有空格和中文 安装完成启动红框内的两个服务 2、安装sqli靶场 这个包支持ph…

4.23学习周报

文章目录 前言文献阅读摘要简介方法结果结论 时间序列预测学习总结 前言 本周阅读文献《A novel hybrid model for water quality prediction based on synchrosqueezed wavelet transform technique and improved long short-term memory》,文献主要提出一种新型混…

动力节点Springsecurity笔记06-13基于数据库的方法授权

6 密码处理 6.1 为什么要加密? csdn 密码泄露事件 泄露事件经过:https://www.williamlong.info/archives/2933.html 泄露数据分析:https://blog.csdn.net/crazyhacking/article/details/10443849 6.2加密方案 密码加密一般使用散列函数&a…

react-9 函数式写法rsc,配合HOOKS基础钩子函数

函数组件和类组件区别: 1.函数组件中没有this 2.函数组件无需继承 3.函数组件默认没有状态,想要使用组件状态必须通过 HOOK 函数引入 4.函数组件默认没有生命周期函数 5.函数组件的渲染,只需要一次函数调用即可 useState :用…

【react全家桶学习】react中JSX语法规则

目录 JSX的定义 XML的含义 JSX的语法规则 (1)定义类名,用className而不是class (2)如何使用内联样式设置样式 (3)虚拟dom必须只有一个根标签 (4)在react组件中使用变…