GithubHelp home page GithubHelp logo

maoxiaoyuz / long-novel-gpt Goto Github PK

View Code? Open in Web Editor NEW
131.0 3.0 18.0 6.54 MB

Long-Novel-GPT是一个基于GPT等大语言模型的长篇小说生成器。它采用层次化的大纲/章节/正文结构,以把握长篇小说的连贯剧情,通过上下文管理优化API调用成本,并根据自身或用户反馈不断进行优化,直至达到预定目标。

Python 84.99% Jinja 15.01%
gpt novel chatgpt ai llm

long-novel-gpt's Introduction

Long-Novel-GPT

关于项目

Long-Novel-GPT是一个基于GPT等大语言模型的长篇小说生成器。它采用层次化的大纲/章节/正文结构,以把握长篇小说的连贯剧情,通过上下文管理优化API调用成本,并根据自身或用户反馈不断进行优化,直至达到预定目标。

目标

本项目的目标是根据用户提供的初步想法(例如:我想写一部xxx样的小说),通过AI不断完善和构建小说内容,最终生成达到人类作家水平的长篇小说。

更新日志

  • 2024.1.20:<生成章节>页面支持润色,可以单独对字段进行修改。
  • 2024.2.24:支持直接使用ChatGPT网页作为API,将调用成本减为0。
  • 2024.3.10(版本1.3):支持单独生成大纲/章节/正文。
  • 2024.4.1(版本1.4):prompt有更好的表现,更低的调用费用;支持手动修改;最新更新

V 1.4


(1.4版本更新不兼容之前存档文件,老用户需要根据requirements安装特定版本promptflow)

  1. 支持在页面中直接手动修改大纲/章节/正文
  2. 采用PromptFlow重构prompt。
  3. 所有prompt更新,采用md输出格式替代JSON,更便于读取和修改。
  4. 重写逻辑优化,现在可以只针对选定的文本进行重写。

后续更新计划

  • 支持单独生成大纲/章节/正文的功能(已完成)
  • 在重写时可以只针对选定文本(已完成)
  • 支持自定义prompt(进行中)
  • 由AI给出意见,而不是人工反馈(未开始)

关键特性

  • 结构化写作:通过层次化的大纲/章节/正文来进行结构化写作,有效把握长篇小说的发展脉络。
  • 反思循环:在不断的反思中优化生成的大纲、章节和正文内容。
  • 成本优化:通过上下文管理优化API调用成本,确保每次API调用的费用固定,不会因反思次数增加而上升。

关键特性

快速上手

安装

conda create -n lngpt python=3.10
conda activate lngpt
pip install -r requirements.txt

界面

我们提供了一个Gradio Demo用于展示Long-Novel-GPT的功能。可以通过以下命令启动:

cd Long-Novel-GPT
python demo/app.py

Gradio DEMO中有5个Tab页面,分别为:

  • 生成小说名:这是初始页面,用于新建或加载小说项目。你生成的所有内容会被保存在Long-Novel-GPT/output/{小说名}下。
  • 生成大纲:在选择小说后,可以在这里生成小说的大纲。
  • 生成章节:在此处生成小说的各个章节。
  • 生成正文:在此编写小说的具体内容。
  • 设置:在这里设置OpenAI API以及一些生成小说的参数。

Gradio DEMO有5个Tab页面

如何使用ChatGPT作为API(1.4版本暂不支持)

本指南将帮助您使用ChatGPT作为API。请遵循以下步骤:

1.安装AutoChatScript

首先,您需要安装AutoChatScript。请访问AutoChatScript GitHub 仓库并按照安装说明进行操作。

2. 启动服务

安装完毕后,通过以下命令启动服务:

cd AutoChatScript
python openai_api.py --server-port 8000

这将在本地启动服务,并监听8000端口。

3. 配置Demo

在AutoChatScript的demo <设置> 页面中,填写ChatGPT的base_url为:

http://localhost:8000/v1/

确保8000端口与步骤2中的服务器端口一致。输入后,请点击测试按钮以确保配置正确。

4. 效果展示

using chatgpt as api

使用指南

  1. GPT-3.5可能不足以生成达到签约或出版水平的小说,请优先选择GPT-4或文心4 API。
  2. 请在设置页面中配置OpenAI或文心API,否则无法使用。
  3. 在生成小说名后可以自行选择生成大纲,章节或正文。
  4. 如果遇到任何无法解决的问题,请尝试刷新页面或重启程序。

贡献

我们欢迎所有形式的贡献,无论是新功能的建议、代码改进,还是bug报告。请通过GitHub issues或pull requests与我们联系。

long-novel-gpt's People

Contributors

maoxiaoyuz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

long-novel-gpt's Issues

M1 MAC运行报错

你好,运行环境为M1 MAC,好像不支持pywin32模块及运行demo时报引用Grapefruit库时遇到了错误,有解决方案吗?万分感激

大佬,调用本地RWKV api,创作小说设定,运行一半就报错:Error JSONDecodeError('Expecting value: line 1 column 2 (char 1)')

(lngpt) cn@cn:~/ai/Long-Novel-GPT$ python demo/app.py
Running on local URL: http://127.0.0.1:7860

To create a public link, set share=True in launch().
Traceback (most recent call last):
File "/home/cn/ai/Long-Novel-GPT/demo/tab_outline_writer.py", line 109, in wrapper
for ret in func(*args, **kwargs):
File "/home/cn/ai/Long-Novel-GPT/demo/tab_outline_writer.py", line 128, in on_submit
for messages in get_writer().init_outline_setting(human_feedback=human_feedback):
File "/home/cn/ai/Long-Novel-GPT/layers/outline_writer.py", line 70, in init_outline_setting
response_json = json.loads(response)
File "/home/cn/anaconda3/envs/lngpt/lib/python3.10/json/init.py", line 346, in loads
return _default_decoder.decode(s)
File "/home/cn/anaconda3/envs/lngpt/lib/python3.10/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/home/cn/anaconda3/envs/lngpt/lib/python3.10/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 2 (char 1)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/cn/anaconda3/envs/lngpt/lib/python3.10/site-packages/gradio/queueing.py", line 495, in call_prediction
output = await route_utils.call_process_api(
File "/home/cn/anaconda3/envs/lngpt/lib/python3.10/site-packages/gradio/route_utils.py", line 232, in call_process_api
output = await app.get_blocks().process_api(
File "/home/cn/anaconda3/envs/lngpt/lib/python3.10/site-packages/gradio/blocks.py", line 1561, in process_api
result = await self.call_function(
File "/home/cn/anaconda3/envs/lngpt/lib/python3.10/site-packages/gradio/blocks.py", line 1191, in call_function
prediction = await utils.async_iteration(iterator)
File "/home/cn/anaconda3/envs/lngpt/lib/python3.10/site-packages/gradio/utils.py", line 521, in async_iteration
return await iterator.anext()
File "/home/cn/anaconda3/envs/lngpt/lib/python3.10/site-packages/gradio/utils.py", line 514, in anext
return await anyio.to_thread.run_sync(
File "/home/cn/anaconda3/envs/lngpt/lib/python3.10/site-packages/anyio/to_thread.py", line 56, in run_sync
return await get_async_backend().run_sync_in_worker_thread(
File "/home/cn/anaconda3/envs/lngpt/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 2134, in run_sync_in_worker_thread
return await future
File "/home/cn/anaconda3/envs/lngpt/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 851, in run
result = context.run(func, *args)
File "/home/cn/anaconda3/envs/lngpt/lib/python3.10/site-packages/gradio/utils.py", line 497, in run_sync_iterator_async
return next(iterator)
File "/home/cn/anaconda3/envs/lngpt/lib/python3.10/site-packages/gradio/utils.py", line 678, in gen_wrapper
response = next(iterator)
File "/home/cn/ai/Long-Novel-GPT/demo/tab_outline_writer.py", line 115, in wrapper
raise gr.Error(e)
gradio.exceptions.Error: JSONDecodeError('Expecting value: line 1 column 2 (char 1)')

请问下,文心一言配置出现这种报错怎么解决?

你好,大佬,出现这种错误怎么解决,
image

我网上查了解决方案,还是没没找到。
百度智能云中也也建了一个应用,如下图
image
配置页面中应该不是填建的这个应用的api key和Secret Key,因为早前我填这个也试了,报api return error, req_id: code: 14, msg: IAM Certification failed的错,当时我根据百度官方的文档,重新申请了这个安全认证,目前文心一言配置页面填的是下方截图中的这两个,
image

在使用ChatGPT作为API的部分不知道怎么操作

您好,我按照教程操作下来,在使用ChatGPT作为API的部分,运行python openai_api.py --server-port 8000之后只显示This Say a is Test!,不知道后续该怎么操作,能否完善一下教程呢
微信截图_20240311161125

运行demo文件时编码报错

在运行app.py时,报错UnicodeDecodeError: 'gbk' codec can't decode byte 0xb2 in position 2009: illegal multibyte sequence。
修改component_meta.py 文件中为“source_code = source_file.read_text(encoding='utf-8')”或“source_code = source_file.read_text(errors='ignore')”均无法解决

AutoChatScript的问题

是运行AutoChatScript后,会在chatgpt的聊天框里自动输入This Say a is Test!。之后会看到鼠标自动逐行往下去找聊天框发送的的那个按钮,但是鼠标自动到了聊天框那个发送的按钮的时候,鼠标会在按钮旁边周围运动,导致This Say a is Test!这句话一直没有发出去。

我不知是不是这个原因,在浏览器的demo设置中,在chatgpt base_url填写http://localhost:8000/v1/ ,后,测试结果反馈:
User:Say this is a test
(ERROR)chatgpt:list() takes no keyword arguments

GPT4也有点差强人意

反馈一个问题:
新建了一个章节后,存在了第一章,再新建章节,选择了分卷,还是第一章,生成到章节剧情也是第一章。
image

夜色已经深沉,寒风中还残留着白日的嘈杂却又多了几分不为人知的寂静。李晨依稀记得自己正踏足于深山之中寻找古迹,脚下踏打的破败石板忽然一阵剧烈的光芒闪烁,紧接着便是天旋地转。当他再次睁开眼时,世界已经变了模样。

石板道变成了黄土路,穿着奇特衣裳的人们来往匆忙。他穿着的运动装如同异类,在这个时代格格不入,被好奇的眼光追逐。

他感到困惑,混乱,不敢相信这是现实。手中沉甸甸的玉佩犹如发烫的铁块,刺痛着他的掌心,似乎在告诉他一切不是梦。

在宫廷外徘徊,李晨尝试着理解眼前的一切。宫廷内的建筑比任何一本史籍描述的都要宏伟,金色的屋顶在日光下闪耀着璀璨的光芒,落寞的鸦雀在宫墙外盘旋。

这里的生活节奏与他熟悉的现代社会完全不同。处处可见行走于宫廷中的太监和宫女,他们或忙碌、或聊天,每一个动作都充满了规矩和秩序。

在一次迷茫的徘徊中,李晨结识了一个名叫小李的太监,他透露出不同于其他人的友好和狡黠。小李看似平凡,却对这里的人人物和地理颇为了解,他变成了李晨了解这个世界的眼睛。

不久,李晨又遇到了小红,一位在皇宫中任职的女医生,她具有治愈之手及广博的知识。在一次无心揭开玉佩的秘密中,李晨透露了他来自另一个世界的信息,小红虽然震惊却也表现出浓厚的兴趣。两人的友情逐渐加深,在险恶的宫廷中,他们成了李晨最稳固的依靠。

李晨渐渐适应了这个世界的节奏,开始尝试找到那神秘玉佩的使用之法。每当闲暇之时,他都会默默地研究,尝试摸索着那层层叠叠的神秘纹路,寻找着它发出光芒的秘密。可每次当光芒初现,他的心脏都会剧烈地跳动,恍如有种力量即将将他带离这时空,然后,在那一刻却总是不了了之。

日复一日,李晨的步伐越发坚定,他知道,在这个陌生而又危机四伏的时代,他只有变得更强,才能找到回家的路。与小李、小红共度的每一个日日夜夜,都让他对他们产生了深厚的感情,也让他更加渴望掌握玉佩的奥秘,寻找属于他的未来。

设置时一直返回takes no keyword arguments

AutoChatScript 运行python demo.py时都是正常,当运行python openai_api.py --server-port 8000然后在网页进行设置url时一直都是返回User:Say this is a test
(ERROR)chatgpt:list() takes no keyword arguments

生成章节后如何进一步生成正文?

已做的尝试:
(均已正常生成章节)

  1. 生成章节页面勾选全部章节生成正文页面的章节剧情栏中仅有 小说名、这是一部什么样的小说、大纲,没有具体的章节
  2. 生成章节页面勾选第1章节生成正文页面的章节剧情栏中出现了生成的第1章节及其他小说信息,进行新建正文等操作后,返回生成章节页面勾选第2章节生成正文页面的章节剧情栏中仍显示生成的第1章节
  3. 多次进行生成正文操作后,仅显示(已省略)

大佬,属于半小白类型,可否能够写上安装教程,我用Anaconda Prompt 命令安装了前两个并激活,但是pip install -r requirements.txt始终出现错误。是需要把代码全部下载下来吗?下载下来了之后放在哪里可以被检测呢?

大佬,属于半小白类型,可否能够写上安装教程,我用Anaconda Prompt 命令安装了前两个并激活,但是pip install -r requirements.txt始终出现错误。是需要把代码全部下载下来吗?下载下来了之后放在哪里可以被检测呢?

不会安装

刚刚接触 python,按照说明一步步来,前面好像没问题
一、运行conda create -n lngpt python=3.10,conda activate lngpt,pip install -r requirements.txt,cd Long-Novel-GPT都没什么问题,再运行python demo/app.py时出现这个,就停住了,光标一直闪,不动了
image
二、在AutoChatScript中,下载AutoChatScript后,运行pip install -r requirements.txt后,再运行python demo.py时出现这个,然后也不知道怎么弄
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.