草庐IT

如何用乐高积木式操作让 ChatGPT 变得更强大?

nkwshuyi 2024-04-12 原文

需求

这些日子,很多小伙伴儿玩儿 ChatGPT 不亦乐乎,甚至陷入了沉迷。

他们尝试了各种 ChatGPT 的功能。不少功能强悍到不可思议;当然,也有些功能尝试因遇到障碍无法完成。于是很多用户非常失望,觉得 ChatGPT 好像啥都干不了。

其实很多时候,任务完成与否以及结果质量高低,和你使用什么样的输入文本(prompts)与ChatGPT来对话高度相关。不少人尝试了诸多方式,才引导ChatGPT执行了某项具体的功能。

为了完成某个目标,从头开始一一试用不同 prompts 可能会耗费你很多的时间。而利用这些时间,你原本可以做更有意义的创造工作。

我们常说一句话:

不要重复发明轮子。

在社会科学领域,研究者做问卷调查时,一般不会从头开始设计调查问卷,而是会参考已有的问卷,在其基础上进行适当修改,以更好地反映当前研究主题;在数据科学领域,研究者也往往会在别人的模型上进行修改调整,或者利用独特的数据集进行「微调」,而不是从无到有设计架构,然后从头开始训练模型。这些「复用」的实践,节约了大量的时间和经济成本。

同样的道理,在使用 ChatGPT 的时候,自己从头尝试编写合适的 prompt 来让人工智能完成特定任务,效率也不够高。他山之石可以攻玉,我们不妨借鉴别人已经测试过的优质 prompts。

我给你推荐 这个 Github 仓库,叫做 awesome-chatgpt-prompts

在项目的介绍区域,你可以看到许许多多的 ChatGPT 功能,以及开启激活这些功能对应的 prompt 。

通过浏览,你可以发现,ChatGPT 真是能干不少事儿啊。

你可以在自己的 ChatGPT 对话里面直接尝试这些 prompts ,看看结果如何。但是这样尝试起来,还得来回切换不断翻找,比较麻烦。

其实你可以把这个项目里面的所有 prompts ,作为基本模块一股脑导入到自己的 ChatGPT 备用。实践中只需要调用某个 prompt,就可以愉快地使用对应功能了。当然这样做之前,你还需要做一项准备工作 —— 安装一个 ChatGPT 客户端。

准备

这个客户端不是 OpenAI 官方产品,而是第三方集成了 ChatGPT 功能,并且加入了特色能力。你可以 在这里下载。

按照项目说明,下载对应的软件包之后直接安装即可。在 macOS 下面,如果你熟悉命令行,也可以采用 homebrew 方式安装,非常方便。

执行起来,跟浏览器打开 ChatGPT 界面是基本一致的。

只不过,桌面版提供了一些独特的特色:

例如,原始版在对话框上方,只提供了一个「再试一次」。

而桌面版这里,多了好几个选项。

你可以把对话的结果,导出成为 png 或者 pdf ,或者通过链接的方式将其直接分享。

当然,这些小的改变不算什么。我觉得真正有用的,是特性列表中的最后一条 —— 调用 awesome chatgpt prompts 项目里面已经分享的 prompts ,对于 ChatGPT 功能复用,避免自己重复发明轮子。

打开菜单栏里面的 Preferences - Control Center,点击下面菜单右侧大大的 Sync 按钮。

同步完毕之后,你会看到一系列的 prompts 。包括了对应的斜杠命令、功能简介、标签等项目。

需要用到哪些 prompts ,打开 Enable 滑块就行。你也可以批量进行操作。如果你觉得某些命令没有用处,为了避免干扰,也可以单独关闭对应的 Enable 滑块,避免它在你的备用命令清单里形成干扰。

实践

做好了相应的准备之后,下面咱们来实际尝试应用一下斜杠命令,呼唤 ChatGPT 对应的功能吧。

你可以在输入框里面打上一个斜杠,然后输入 eng 三个字符,就能选取下图里面的 English Translator and Improver(英语翻译和改进) 功能了。

这里其实是输入了这样一段话作为初始的 prompt:

I want you to act as an English translator, spelling corrector and improver. I will speak to you in any language and you will detect the language, translate it and answer in the corrected and improved version of my text, in English. I want you to replace my simplified A0-level words and sentences with more beautiful and elegant, upper level English words and sentences. Keep the meaning same, but make them more literary. I want you to only reply the correction, the improvements and nothing else, do not write explanations. My first sentence is "istanbulu cok seviyom burada olmak cok guzel"

然后 ChatGPT 反馈的结果是这样的:

翻译得对不对?这得问问明白 "istanbulu cok seviyom burada olmak cok guzel" 是哪国语言的小伙伴了,哈哈。

为了稳妥起见,咱们还是试试中文吧。

因为 ChatGPT 可以记忆多轮对话的上下文(最多 4000 个 tokens),因此我们只需要接着说就行:

第二句是 “鞠躬尽瘁,死而后已”

反馈的结果是:

这翻译,你觉得符合「信达雅」的标准吗?

之后,我把刚刚跟朋友答复的健康状况信息,也写了上去:

“昨夜还是咳嗽,数次起来喝水止咳,然后又数次起来上厕所”

反馈结果如下:

我觉得翻译得没毛病。

然后,咱再尝试一个有意思的 —— 让 ChatGPT 扮演「脱口秀」演员。

输入初始 prompt 之后,我对默认生成文本不感兴趣。转而尝试使用自己的文本:

And my second request is "I was still coughing last night and had to get up several times to drink water to stop the cough, and then get up several more times to go to the bathroom." 

这是 ChatGPT 反馈结果:

我喜欢其中这句:

And hey, at least you're getting some cardio in, right?

眼尖的话你会发现,我这里输入的 prompt 实际上是刚才调用翻译功能 ChatGPT 反馈给咱们的结果。也就是说,你可以结合起多种功能,一同发挥作用。这也是我为什么把 ChatGPT 的功能复用,比喻做「乐高积木」的原因。

下面咱们再试一个好玩儿的。你可以把 ChatGPT 当成 Linux 虚拟机,来操练 shell 命令。

这次使用的斜杠命令,是这个 linux_terminal:

输入的实际 prompt 为:

I want you to act as a linux terminal. I will type commands and you will reply with what the terminal should show. I want you to only reply with the terminal output inside one unique code block, and nothing else. do not write explanations. do not type commands unless I instruct you to do so. when i need to tell you something in english, i will do so by putting text inside curly brackets {like this}. my first command is pwd

可以看出来,除了最后一句,都是在和 ChatGPT 进行约定,甚至是在给它「洗脑」,哈哈。

这种假设和约定管用吗?这是反馈结果:

可以看到,对于第一个指令 pwd ,ChatGPT 返回了家目录的路径,符合我们的预期。看来 ChatGPT 真的认为自己是个 Linux 虚拟机了。然后我来尝试建立一个目录,输入:

mkdir wshuyi

ChatGPT 显然记住了上下文,继续在执行命令,只不过没有返回信息而已。这也难怪,作为建立文件夹命令,只有在遇到问题的时候,才会有提示。

那目录建立成功了吗?咱们试试看。

第三个 prompt 输入列出目录指令:

ls

显示结果孤零零的,就是咱们刚刚建立的目录。你还可以详细查看这个目录的具体信息。输入以下命令即可:

ls -l

你看,ChatGPT 像不像一个真正的 linux shell ?作为一个初学者在这里尝试执行命令,你可以毫无顾忌。不用害怕因为误操作删除数据,或者造成什么其他危害。

篇幅所限,这里只给你演示了 3 项功能。而实际上 awesome-chatgpt-prompts 包含的功能项目还有 100 多条,足够你好好玩儿一阵子了。

关键是,你可以将别人千锤百炼得来的优质有效 prompt 作为基础,完成自己的特定任务。不亦乐乎?

小结

ChatGPT 可以完成各种有趣的功能,有些你甚至可能一下子想不到。但是在使用时需要输入合适的 prompt 来引导它。你可以利用第三方开发的桌面客户端,将优质 prompt 导入自己的 ChatGPT 中,像乐高积木一样组合使用,以便更快地完成任务。

祝你和 ChatGPT 聊天愉快哦!

点赞 +「在看」,转发给你身边有需要的朋友。收不到推送?那是因为你只订阅,却没有加星标

如果有问题咨询,加入知识星球吧。之前已经积累下的帖子和问答,就有数百篇。足够你好好翻一阵子。

若文中部分链接可能无法正常显示与跳转,可能是因为微信公众平台的外链限制。如需访问,请点击文末「阅读原文」链接,查看链接齐备的版本。 

延伸阅读

有关如何用乐高积木式操作让 ChatGPT 变得更强大?的更多相关文章

  1. 亚特兰蒂斯的回声(中文版): chatGPT 的杰作 - 2

    英文版英文链接关注公众号在“亚特兰蒂斯的回声”中踏上一段难忘的冒险之旅,深入未知的海洋深处。足智多谋的考古学家AriaSeaborne偶然发现了一件古代神器,揭示了一张通往失落之城亚特兰蒂斯的隐藏地图。在她神秘的导师内森·兰登教授的指导和勇敢的冒险家亚历克斯·默瑟的帮助下,阿丽亚开始了一段危险的旅程,以揭开这座传说中城市的真相。他们的冒险之旅带领他们穿越险恶的大海、神秘的岛屿和充满陷阱和谜语的致命迷宫。随着Aria潜在的魔法能力的觉醒,她被睿智勇敢的QueenNeria的幻象所指引,她让她为即将到来的挑战做好准备。三人组揭开亚特兰蒂斯令人惊叹的隐藏文明,并了解到邪恶的巫师马拉卡勋爵试图利用其古

  2. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

  3. ruby-on-rails - 如何处理 Grape 中特定操作的过滤器之前? - 2

    我正在我的Rails项目中安装Grape以构建RESTfulAPI。现在一些端点的操作需要身份验证,而另一些则不需要身份验证。例如,我有users端点,看起来像这样:moduleBackendmoduleV1classUsers现在如您所见,除了password/forget之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如passwords并且只是删除password/forget从逻辑上讲,这个端点应该与用户资源。问题是Grapebefore过滤器没有像except,only这样的选项,我可以在其中说对某些操作应用过滤器。您通常如何干净利落地处理这种情况?

  4. ruby-on-rails - 在 Ruby on Rails 中发送响应之前如何等待多个异步操作完成? - 2

    在我做的一些网络开发中,我有多个操作开始,比如对外部API的GET请求,我希望它们同时开始,因为一个不依赖另一个的结果。我希望事情能够在后台运行。我找到了concurrent-rubylibrary这似乎运作良好。通过将其混合到您创建的类中,该类的方法具有在后台线程上运行的异步版本。这导致我编写如下代码,其中FirstAsyncWorker和SecondAsyncWorker是我编写的类,我在其中混合了Concurrent::Async模块,并编写了一个名为“work”的方法来发送HTTP请求:defindexop1_result=FirstAsyncWorker.new.async.

  5. ruby - 在 Ruby 中是否有一种惯用的方法来操作 2 个数组? - 2

    a=[3,4,7,8,3]b=[5,3,6,8,3]假设数组长度相同,是否有办法使用each或其他一些惯用方法从两个数组的每个元素中获取结果?不使用计数器?例如获取每个元素的乘积:[15,12,42,64,9](0..a.count-1).eachdo|i|太丑了...ruby1.9.3 最佳答案 使用Array.zip怎么样?:>>a=[3,4,7,8,3]=>[3,4,7,8,3]>>b=[5,3,6,8,3]=>[5,3,6,8,3]>>c=[]=>[]>>a.zip(b)do|i,j|c[[3,5],[4,3],[7,6],

  6. ruby-on-rails - 如何用不同的用户运行nginx主进程 - 2

    A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(

  7. ruby-on-rails - 如何让 Rails View 返回其关联的操作名称? - 2

    我有一个非常简单的Controller来管理我的Rails应用程序中的静态页面:classPagesController我怎样才能让View模板返回它自己的名字,这样我就可以做这样的事情:#pricing.html.erb#-->"Pricing"感谢您的帮助。 最佳答案 4.3RoutingParametersTheparamshashwillalwayscontainthe:controllerand:actionkeys,butyoushouldusethemethodscontroller_nameandaction_nam

  8. ruby - 如何用递增的值填充数组 Ruby - 2

    我正在尝试解决http://projecteuler.net/problem=1.我想创建一个方法,它接受一个整数,然后创建一个包含它前面的所有整数的数组,并将整数本身作为数组中的值。以下是我目前所拥有的。代码不起作用。defmake_array(num)numbers=Array.newnumcount=1numbers.eachdo|number|numbers 最佳答案 (1..num).to_a是您在Ruby中需要做的全部。1..num将创建一个Range对象,以1开始并以任意值num结束是。Range对象有to_a方法通过

  9. ruby - 如何用 Nokogiri 解析连续的标签? - 2

    我有这样的HTML代码:Label1Value1Label2Value2...我的代码不起作用。doc.css("first").eachdo|item|label=item.css("dt")value=item.css("dd")end显示所有首先标记,然后标记标签,我需要“标签:值” 最佳答案 首先,您的HTML应该有和中的元素:Label1Value1Label2Value2...但这不会改变您解析它的方式。你想找到s并遍历它们,然后在每个你可以使用next_element得到;像这样:doc=Nokogiri::HTML(

  10. ruby-on-rails - 如何用 has_many 保存数据 :through - 2

    我在游戏和帐户模型之间存在多对多关系,如下所示:classAccount:destroyhas_many:games,:through=>:account_gamesendclassGame:destroyhas_many:accounts,:through=>:account_gamesendclassAccountGame现在我知道让我们说我想创建一个类似这样的记录:@account=Account.new(params[:user])@account.games但是我应该如何在执行此操作时更新AccountGame中的某些属性?假设AccountGame有一些名为score的字段

随机推荐