搭建ChatGPT对话式小说

牙叔教程 简单易懂

你只需要写一个开头

剩下的交给ChatGPT

视频查看效果

两个ChatGPT互聊-写小说_哔哩哔哩_bilibili

这是一种ChatGPT的展现方式, 他把你主动问ChatGPT的这种方式,

改为了ChatGPT和ChatGPT聊天的方式


我们只需要写一个开头, 小说的后续部分, 完全都交给了ChatGPT,

算是某种程度上的 AutoGPT

AutoGPT

AutoGPT 是一个实验性的开源的主动的人工智能,它利用 GPT4 作为大脑,利用 langchain 的链接思想,把 Google 等工具链接起来,以完成人类给予的任务。

人类只需要给它设置一个目标,它就会自主规划出任务,并一步步地执行任务。

如果在执行任务中遇到问题,会自主地拆解子任务,并一步步地执行。

Github 项目地址,项目完全开源 GitHub - Significant-Gravitas/Auto-GPT: An experimental open-source attempt to make GPT-4 fully autonomous.

Auto-GPT is an experimental open-source application showcasing the capabilities of the GPT-4 language model. This program, driven by GPT-4, chains together LLM "thoughts", to autonomously achieve whatever goal you set. As one of the first examples of GPT-4 running fully autonomously, Auto-GPT pushes the boundaries of what is possible with AI.

我理解的AutoGPT是这样的:

  1. 你提出一个任务
  2. chatGPT拆解任务
  3. AutoGPT通过代码执行任务
  4. 出错了, 就把错误信息抛给chatgpt, 获取解决方案
  5. 用解决方案解决遇到的问题
  6. 重复以上, 直到任务完成

这里面最有价值的就是作者真的把chatgpt和程序结合起来, 并且写出来了,

完全没有了人工的限制, 不需要人类了, autoGPT自己就呼呼的干活了.

以上是给大家扩展chatggpt的知识, 接下来我们搭建这个qqGPT写小说


流程图

机器人框架

zhin

zhin - npm

关键代码

机器人监听QQ消息

ctx.middleware(async (session, next) => {
  let gptQuestion = session.elements[0].toString().trim();
...
});

可以从代码看到使用了插件

没错, 这个框架主要就是写插件

参数session里面包含了消息

  • user_id
  • user_name
  • group_id
  • gptQuestion
  • protocol
  • self_id
  • message_type
  • from_id

基本上你需要的数据, 都可以在session中获取


你不可能在Q群里面写小说, 所以一定是私聊

if (session.message_type === "private") {
...
}

根据消息类型, 如果是私聊, 巴拉巴拉巴拉

这还不够, 还要加判断, 不可能谁私聊你都给他发消息, 对吧?

所以还要加上号码限制

 if (customerIds.indexOf("" + session.user_id) !== -1) {
	...
 }

谁私聊我? 在不在我的白名单里面? 以上代码就是解决使用机器人的资格问题


消息收到以后, 我们通过chatgpt去获取小说的后续内容

async function chatgpt(question) {
  let url = "https://api.openai.com/v1/chat/completions";
  let headers = {
    "Content-Type": "application/json",
    Authorization: "Bearer " + config.secretKey,
  };
  let data = {
    model: "gpt-3.5-turbo",
    messages: [
      { role: "user", content: question },
      {
        role: "system",
        content:
          `你是一个小说家, 想象力超越普通人一万倍, 擅长模仿"海贼王"作者尾田荣一郎(Eiichiro Oda) 的风格写小说,  你现在看到了海贼王最新一期漫画的中一部分文字内容, 现在请你续写小说 遵循以下原则:
1. 小说中的人物都要有名字, 人物的名字不能重复.
2. 小说中的人物使用的招式,武功, 装备, 魔法, 宠物, 恶魔果实, 等小说元素,  都要有名字, 不能重复.
3. 小说用中文写, 不能用英文.
3. 其他就靠你的想象力自由发挥了.
---------------------------------------
好了, 现在你可以在遵守以上原则的情况下, 续写小说了.
你每次回复时, 请不要超过66个字, 也不要超过2句话.
          `,
      },
    ],
    temperature: 0.7,
    max_tokens: 1000,
    top_p: 1,
    frequency_penalty: 0,
    presence_penalty: 0,
    stream: false,
  };
  try {
    let res = await axios.post(url, data, {
      headers: headers,
      httpsAgent: agent, // 设置代理
    });
    return res.data.choices[0].message.content;
  } catch (e) {
    let errorMsg = e?.response?.data?.error?.message ? e.response.data.error.message : e.message;
    console.log(errorMsg);
    return "出错了: " + errorMsg;
  }
}

注意这里有两个用户

chatgpt的角色

  • user
  • system

user就是我们.

system就是你给chatgpt设置的角色

chatgpt字数限制

第一种

我是通过 截取新数据, 抛弃旧数据;

比如数据有5000个字, 我就裁掉2000个字, 然后再发给chatgpt;

这个策略基于如下假设:过于久远的对话不太重要,而距离当前时间更近的对话则更加重要。


第二种

你也可以用chatgpt把文章压缩: 比如让chatgpt把1000个字压缩成500个字, 也就是 文本摘要

然后提交压缩后的数据给chatgpt


第三种, 向量存储

把文本存到外部设备, 然后用一个向量, 也就是一串数字代替他,

然后把问题也变成向量, 看哪个向量接近, 就用哪个数据,

大概思路就这么回事, 具体可看知乎文章: 如何看本周最火的AutoGPT?

如何看本周最火的AutoGPT? - 知乎

提取chatgpt报错的消息

let errorMsg = e?.response?.data?.error?.message ? e.response.data.error.message : e.message;

如果只是写e.message, 他的报错信息几乎只是对你说404, 就没了.

e.response.data.error.message的消息, 更详细一些

接收到chatgpt返回的消息, 我们要把消息发送给qq

获取机器人

let bot = ctx.zhin.pickBot(protocol, self_id);

这两个参数是啥意思就不知道了, 我是直接赋值黏贴, 能用就行

第一个不知道, self_id应该是机器人的qq号

机器人发消息

bot.sendMsg(from_id, "private", answer);

from_id就是跟你聊天的用户的qq号,

answer就是chatgpt返回的内容


基本关键代码和思路就是这样,

然后就是重复这个过程,

一篇chatgpt对话式小说就诞生了


chatgpt写的小说

微信公众号 牙叔教程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牙叔教程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值