本周,OpenAI 宣布他们已经为 ChatGPT 创建了一个面向公众的 API。至此,我觉得结束了。我们将不得不学会接受大型语言模型和人们不可避免地会编造的所有其他类型的模型。
由 Counterfeit v2.5 生成的图像 — 杰作,最佳质量,1girl,绿头发,绿眼睛,毛衣,连帽衫,看着观众,可爱,可爱,户外,水彩,动漫,下午,山脉,野外呼吸,黑色连帽衫,ahoge,长发,快乐,原神冲击,初音未来,双马尾辫,辫子
学习如何使用这些工具对我们有利可能最终会更好,而不是在这一点上试图与它们作斗争。我怀疑与 ChatGPT 等工具的集成将变得像现在的语言服务器。您可以在没有语言服务器的情况下进行编码,但您真的想要吗?语言服务器允许您自动执行许多操作,例如格式化、代码完成、重构等等。您可以从源代码内部查询文档,总的来说它最终成为编辑体验的资产而不是障碍。
我认为这些大型语言模型将为许多其他人做同样的事情,就像语言服务器为程序员做的一样。这可能是好事,也可能是坏事,我不知道结果会怎样。
为了尝试获得这些工具的专业知识,我认为为我的 emacs 配置创建一些 ChatGPT API 绑定会很有趣。所以我就那样做了。这让我可以问语言模型问题,并让它解释我选择的代码。我试图尽可能减少用户体验。
为了向 AI 提问,我按下Mx xe/ask-chatgpt
。系统会提示我要问一个问题,一旦我按下回车键,它就会被发送到 API。整体用户体验如下所示:
Mx
在 Emacs 领域中的意思是“alt-x”。 该缓冲区的内容
我如何在 CentOS 中更新软件包?
要在 CentOS 中更新软件包,请按照以下步骤操作:
- 打开一个终端窗口。
- 键入以下命令并按 Enter:
sudo yum update
此命令将获取系统上所有已安装软件包的最新更新。
- 如果出现提示,请输入您的 sudo 密码并按 Enter。
- 系统现在将检查更新,如果有任何更新可用,它会要求您确认安装。输入“y”并按 Enter 继续。
- 等待安装更新。根据可用更新的数量,这可能需要一段时间。
- 安装更新后,重新启动系统以应用更改。
就是这样!您的 CentOS 系统现在是最新的,包含最新的软件包更新。
你输入你的问题,它会打开一个缓冲区,然后你等待你的答案。这是一个原型,写这个有点困难,让我接触到 emacs lisp 的很多方面,但我并不完全理解。将来我想让它成为一种类似于 ielm 或 IRC 客户端的交互模式。我认为您输入问题并从 AI 一个接一个地得到答复会很酷;很像 ChatGPT 网页,但在您的编辑器中。
我已经用了几天了,它对我在工作中编辑东西很有帮助。更不用说,API 非常便宜,我可以免费使用它。在我测试和编写它的同时,我对 API 进行了多次查询。我还没有花一分钱。这几乎令人担忧。
我将尝试进一步改进我的 emacs 模式,当我觉得它不再那么棘手并且更接近于可靠的东西时,我将在MELPA上发布它。尽管我不喜欢它,但它在过于冗长地解释代码位方面是体面的。我经常在不同的语言之间跳来跳去,拥有贯穿整个语法树的东西会很有帮助。
这是一个例子:
对一些 Rust 代码的过于冗长的解释
解释这段代码。用户处于生锈模式。
fn main () { let target = env::args(). skip ( 1 ). next (). unwrap (); let srv = Server::new() . hostname (" tsnet-rs-echoclient ") . ephemeral () . authkey (env::var(" TS_AUTHKEY "). unwrap ()) . build () . unwrap ();
let mut conn = srv. dial (" tcp ", &target). unwrap (); write!(conn, " This is a test of the Tailscale connection service. \n "). unwrap (); }
这是一个连接到 Tailscale 网络端点 ( target
) 并向其发送测试消息的 Rust 程序。下面是代码一步一步做的事情:
-
env::args()
返回程序命令行参数的迭代器。skip(1)
跳过第一个参数(程序本身的名称),next()
接受下一个参数,假定它是目标端点。unwrap()
返回next()
返回的Option
内的值。如果没有这样的论点,unwrap()
将恐慌。 -
Server::new()
使用默认选项创建一个 Tailscale 连接Server
对象。 -
hostname("tsnet-rs-echoclient")
将服务器的主机名设置为“tsnet-rs-echoclient”。这是一个特定的主机名,Tailscale 管理员可能已将其配置为允许访问网络上的某些资源。 -
ephemeral()
将服务器设置为临时的,这意味着它会在程序退出时自动关闭。 -
authkey(env::var("TS_AUTHKEY").unwrap())
将 Tailscale 身份验证密钥设置为TS_AUTHKEY
环境变量的值,该变量假定已设置。env::var()
返回一个Result
,如果未设置TS_AUTHKEY
unwrap()
将恐慌。 -
build()
使用指定的选项构建Server
对象。如果选项无效,build()
将返回错误。 -
srv.dial("tcp", &target)
使用 TCP 协议连接到目标端点。&target
是对命令行上指定的目标 IP 地址或主机名的引用。如果连接失败,unwrap()
将崩溃。 -
write!(conn, "This is a test of the Tailscale connection service.\n").unwrap()
将测试消息写入连接。如果写入失败,unwrap()
将 panic。 - 程序退出。
我确实喜欢这解释了很多关于 Rust 代码的不言而喻的假设。在将此回复放在这里之前,我已经检查过它,我确信它是准确的。使用这些工具时,您需要仔细检查输出。你需要像在 4chan 上阅读它一样对待输出。大型语言模型的输出不应该被隐含地信任,在接受输出效果之前,你应该做的不仅仅是尽职调查,以确保事情是准确的。
总的来说,我对这项技术真的很复杂。如果做得好,这可以让人们更容易地获得广泛的知识库。通过大量的指导、细心和思考,这可以用来为内部知识库创建自定义搜索工具,这些工具可以与地球上的其他一切相媲美。我明白为什么谷歌害怕这种技术。这是一个绝对的游戏规则改变者。
然而,与此同时,它基本上是在整个互联网上进行训练的,而无需向任何相关人员付费。我敢打赌,我的文章正在某处的语料库中翻滚。我可能看不到 OpenAI 用这个模型赚的一分钱。我真的很高兴我的日常工作是为一家科技公司工作,而不是我自己做的事情。我只能想象这样的安排在未来会变得更加普遍。
我不知道如何看待这一切。这是一项了不起的技术,可以让很多事情变得如此简单,但我可以看到它同时被用于如此邪恶的事情。我一直在看这个,我想知道当有人试图用它来激化人们时会发生什么。
我怀疑潘多拉的盒子是打开的,现在我们必须忍受困在里面的疾病。我还怀疑,如果我们要生病,我们不妨在疾病发作之前了解这些疾病。
在我的文本编辑器中提问的确切情况下,我相当确定让 AI 模型解释这样的代码位是无害的。检查 AI 模型是否准确非常容易。随着事情变得越来越复杂,人工智能开始深入研究社会学等主题,我担心事情不会那么简单。对于每一次无害的使用,都有一千种邪恶的用途等待发生。阻止这项技术无济于事,向公众发布它也无济于事,这是一个适当的困境。
这不是一坨屎吗?