Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • CreatiCode
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo

CreatiCode Scratch Forum

  1. CreatiCode Forum
  2. 知识库
  3. 小教程
  4. ChatGPT 人工智能:自动写书(难度:3)

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

Scheduled Pinned Locked Moved 小教程
1 Posts 1 Posters 776 Views
  • 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.
  • CreatiCodeI Offline
    CreatiCodeI Offline
    CreatiCode
    wrote on last edited by admin
    #1

    简介

    在本教程中,你将学习构建一个简单但实用的应用程序:书籍作者。用户可以指定任何主题,然后程序将使用 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
    0
    • CreatiCodeI CreatiCode pinned this topic on

    Hello! It looks like you're interested in this conversation, but you don't have an account yet.

    Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

    With your input, this post could be even better 💗

    Register Login
    Reply
    • Reply as topic
    Log in to reply
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes


    • Login

    • Don't have an account? Register

    • Login or register to search.
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • CreatiCode