牙叔教程 简单易懂
你只需求写一个最初
剩下的交给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是这样的:
- 你提出一个使命
- chatGPT拆解使命
- AutoGPT经过代码执行使命
- 出错了, 就把错误信息抛给chatgpt, 获取解决方案
- 用解决方案解决遇到的问题
- 重复以上, 直到使命完结
这里边最有价值的便是作者真的把chatgpt和程序结合起来, 而且写出来了,
彻底没有了人工的约束, 不需求人类了, autoGPT自己就呼呼的干活了.
以上是给大家扩展chatggpt的常识, 接下来咱们搭建这个qqGPT写小说
流程图
机器人结构
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写的小说
微信公众号 牙叔教程