Navigation

    CreatiCode Scratch Forum

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • CreatiCode

    ChatGPT 人工智能:自动写书(难度:3)

    小教程
    1
    1
    104
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • info-creaticode
      CreatiCode last edited by admin

      简介

      在本教程中,你将学习构建一个简单但实用的应用程序:书籍作者。用户可以指定任何主题,然后程序将使用 ChatGPT 自动编写整本书。

      p.gif

       

      我们将首先添加一些小部件,允许用户指定他/她想要什么类型的书,然后使用 ChatGPT 块相应地编写这本书。

       
       

      步骤 0 - 编写书籍策略讨论

      在开始编写任何代码之前,我们需要讨论如何使用 ChatGPT 编写书籍的基本思路。众所周知,ChatGPT 的响应存在字数限制:我们的输入加上它的输出不能超过 4096 个标记,大约是 3000 个单词。因此,如果我们的书长度超过 3000 个单词,我们无法在单个请求中从 ChatGPT 获得完整的书。

      为了解决这个问题,有一个简单而巧妙的解决方案。我们将把这个过程分解成 2 个步骤:

      • 我们将首先要求 ChatGPT 编写一个目录,其中包括每个章节的标题
      • 然后我们反复要求 ChatGPT 编写每个章节。

       
      现在让我们开始吧。

       
       

      步骤 1 - 一个空项目

      创建一个新项目,并将其命名为“ChatGPT- Book Writer”。删除带有狗的精灵,我们将只使用“Empty1”精灵进行编码。

       
       

      步骤 2 - 标题标签

      首先,我们将添加一个标签,上面写着“标题:”。它将告诉用户在哪里输入书的标题。如下图所示,确保将标签的背景设置为 100% 透明,并将其边框宽度设置为 0。你将在舞台的中心获得一个标签。

      3bbd1b39-b342-490c-b745-652a1de1403f-image.png

       
       

      步骤 3 - 移动标题标签

      我们需要将标签移动到左上角。最简单的方法是使用“小部件位置”工具,它允许我们更改小部件的大小并将其拖动到新位置。新位置和大小将直接存储在块中,因此下次程序运行时,小部件将自动出现在新位置。

      p.gif

       
       

      步骤 4 - 添加标题输入文本框

      接下来,我们将添加一个文本框供用户输入书名。我们将采取相同的 2 个步骤:添加小部件,然后调整其大小和位置。

      p.gif

       
       

      步骤 5 - 添加章节数标签

      接下来,我们需要允许用户从下拉菜单中选择章节数。它不仅可以让用户控制书的长度,还可以让我们轻松地逐个浏览每个章节。

      我们将首先添加一个如下所示的标签:

      db79978c-da93-45de-9653-ffcb866805f6-image.png

       
      以下是执行此操作的块:

      43b3f1c0-4eac-489e-8d28-e757ddd01f6c-image.png

       
       

      步骤 6 - 添加下拉菜单

      接下来,我们将添加一个下拉菜单,允许用户选择 3 到 10 之间的数字:

      p.gif

       
      为此,我们首先需要添加一个名为“numbers”的新列表,并将数字 3 到 10 插入其中:

      7d7c5edb-30f0-4c2e-89f3-1cd7794defaa-image.png

       
      接下来,我们可以添加使用“numbers”列表的“下拉菜单”小部件,并将其移动到所需位置:

      4b4b2ef1-7984-4e73-9954-eed4e3355b93-image.png

       
       

      步骤 7 - 添加“目录”按钮和“内容”按钮

      接下来,我们需要再添加 2 个按钮:

      • “目录”按钮将生成目录。
      • “内容”按钮将根据目录生成书的章节。

      它们将如下所示:

      3f69ac5f-ee40-4c06-999f-31b9657d5e87-image.png

       
      以下是添加按钮并更新其样式的新块:

      dbcdb31b-ccb0-404d-8ca3-4312d3d7925c-image.png

       
       

      步骤 8 - 添加用于输出的文本框

      最后,我们需要的小部件是另一个用于显示书籍的文本框。它需要有多行并允许滚动。

      37ba16be-06a3-4f0e-ba5b-e858181f758c-image.png

       
      以下是添加文本框的新块:

      c75ae064-2718-49e7-8eb6-167a354e0227-image.png

       
       

      步骤 9 - 将标题添加到书中

      在用户输入书名(随意选择任何标题)和章节数后,他/她将首先单击“目录”按钮。当发生这种情况时,我们首先需要将书名从输入文本框复制到输出文本框:

      p.gif

       
      为此,我们需要使用“当小部件被点击时”块来检测用户何时单击“目录”按钮。当发生这种情况时,我们需要将输出文本框(“booktextbox”)的值设置为输入文本框(“textbox1”)的值。为了表明这是标题,我们可以使用连接块将“<”和“>”添加到标题:

      677d6ced-68ba-4f5b-b2a2-5ba2cd1b5335-image.png

       
       

      步骤 10 - 要求 ChatGPT 生成目录

      现在我们终于准备好使用 ChatGPT API 了。为了让它编写目录,我们只需要告诉它书名和章节数。例如,这是我们的第一个版本的提示:

      你正在帮我写一本书。标题是 <时间旅行 101>。它将有 4 个章节。现在编写目录。
      

      现在让我们将此提示放入名为“request”的变量中,然后将此请求发送给 ChatGPT,并将响应存储在名为“response”的变量中。然后我们可以将此响应“追加”到输出文本框:

      9a60b3ea-99bc-4b9d-bc19-c25706a5e07e-image.png

       
      这是我们将得到的:

      p.gif

       
      这是一个好的开始。我们将逐一修复这些问题。

       
       

      步骤 11 - 让 ChatGPT 只返回目录

      显然,最大的问题是 ChatGPT 的响应不“干净”。由于它被训练为“聊天”,它自然会在目录之前和之后添加一些句子。

      现在让我们尝试改进我们的请求,以便它只返回目录。例如,我们可以尝试这样说:

      你正在帮我写一本书。标题是 <时间旅行 101>。它将有 4 个章节。现在只返回目录,不要在它之前或之后添加任何内容。除了目录,我不想要任何其他内容!
      

      不幸的是,我们总是得到一个“健谈”的响应:

      p.gif

       
      你能找到一个总是有效的好的提示吗?

       
       

      步骤 12 - 标记目录的开头和结尾

      坏消息是,对于当前版本的 ChatGPT 来说,几乎不可能找到一个能让我们得到干净目录的提示。所以我们必须找到另一种解决方案。我们的想法是,我们接受在目录之前和之后可能存在不需要的句子,并且我们要求 ChatGPT 告诉我们目录在哪里。具体来说,我们可以要求 ChatGPT 在目录之前和之后添加 ```,如下所示:

      你正在帮我写一本书。标题是 <时间旅行 101>。它将有 4 个章节。现在编写目录。在它之前和之后添加 ```。
      

       
      现在我们发现 ChatGPT 几乎总是在一对 ``` 之间给出目录:

      p.gif

       
      现在我们只需要提取响应中 2 个 ``` 标记之间的部分。我们可以使用“part N of T by X”块轻松地做到这一点:

      9ec77f78-28ea-4e97-b8e3-5b4528701b57-image.png

       
      它的工作方式是,它将首先通过 ``` 标记拆分响应。由于响应中有 2 个标记,此步骤会将响应拆分为 3 个部分,中间部分(第 2 部分)将是目录本身。

       
      这是更改后你应该得到的:

      p.gif

       
       

      步骤 13 - 使用用户输入组成请求

      另一个小问题是我们的提示是“硬编码的”。它根本没有使用用户的输入。要更改这一点,我们需要使用“连接”块来使用文本框和下拉菜单的值组成请求:

      p.gif

       
      之后,我们将始终获取用户指定的标题和章节数:

      p.gif

       
       

      步骤 14 - 编写第一章

      现在让我们尝试要求 ChatGPT 编写第一章。我们只需要告诉它书名和目录,这恰好是输出文本框的当前值。所以我们只需要将它保存到一个名为“toc”的新变量中,然后像这样组成请求:

      13109a8b-8453-4952-90be-7c23228a5607-image.png

       
      请注意,由于我们正在开发程序,我们可以将字数限制为一个较小的数字,例如 100,这样我们就不必等待太长时间才能得到响应。

      如果我们将 request2 变量打印到控制台面板,它将如下所示:

      df02681c-4026-4252-b7da-5e78747bbe0b-image.png

       
      由于它看起来不错,现在我们只需要将此 request2 发送给 ChatGPT,并将新的响应追加到书籍文本框。

      7ae84d31-8578-4ce4-9d3b-e5a1b5cfc4fa-image.png

       
      现在我们可以成功生成第 1 章:

      p.gif

       
       

      步骤 15 - 使用循环编写所有章节

      对于最后一步,我们需要使用循环逐个编写所有章节。我们可以使用 for 循环使变量“chapter”从 1 到章节总数,然后在循环中使用“chapter”变量组成对 ChatGPT 的请求:

      b11b1101-d035-4d3b-bce7-9fdbbd76a9c9-image.png

       
      这是该程序的最终演示:

      p.gif

       
       

      增强功能

      这个版本的书籍作者非常粗糙。有很多地方可以增强它。以下是一些示例:

      • 有时 ChatGPT 无法正确生成目录。我们如何改进请求以避免这种情况?

      b5e39227-9ef0-434a-8de1-3a3d18438204-image.png

      • 输出文本框中的书籍格式不正确。尝试在书的不同部分之间添加一些空行。

      • 有时目录在给定的章节数之后包含一个“结论”,但我们的程序尚未生成任何结论。你可以尝试在最后添加它。

      1 Reply Last reply Reply Quote 0
      • Pinned by  info-creaticode info-creaticode 
      • First post
        Last post