牙叔教程 简单易懂

你只需求写一个最初

搭建ChatGPT对话式小说

剩下的交给ChatGPT

搭建ChatGPT对话式小说

视频检查效果

www.bilibili.com/video/BV1Cs…

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

改为了ChatGPT和ChatGPT聊天的方法


咱们只需求写一个最初, 小说的后续部分, 彻底都交给了ChatGPT,

算是某种程度上的 AutoGPT

AutoGPT

AutoGPT 是一个实验性的开源的主动的人工智能,它利用 GPT4 作为大脑,利用 langchain 的链接思维,把 Google 等东西链接起来,以完结人类给予的使命。

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

假如在执行使命中遇到问题,会自主地拆解子使命,并一步步地执行。

Github 项目地址,项目彻底开源 github.com/Significant…

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写小说


流程图

搭建ChatGPT对话式小说

机器人结构

zhin

www.npmjs.com/package/zhi…

要害代码

机器人监听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?

www.zhihu.com/question/59…

提取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写的小说

搭建ChatGPT对话式小说

微信公众号 牙叔教程