Skip to content

Commit 2a56020

Browse files
committed
更新打包脚本文件、README、requirements.txt;略微改动UI
1 parent 15186fa commit 2a56020

File tree

6 files changed

+198
-150
lines changed

6 files changed

+198
-150
lines changed

README.md

Lines changed: 154 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,85 @@
1-
**自动小说生成工具**
21

3-
**核心功能:**
2+
# **自动小说生成工具**
43

5-
**小说设定**(世界观、人物、剧情结构)
6-
**章节生成**(多步生成,确保逻辑连贯)
7-
**角色状态 & 伏笔管理**(追踪人物发展)
8-
**向量检索**(保证长篇小说上下文一致)
9-
**自定义知识库**(上传本地参考文档)
10-
**一致性检查**(防止剧情冲突)
11-
**GUI 友好交互**(可配置 & 直观操作)
4+
> 一款基于大模型的多功能小说生成器,帮助你快速生成连贯、可控、可审校的长篇故事。
125
13-
# **部署与使用指南**
6+
<div align="center">
147

15-
## **1. 环境要求**
16-
在开始之前,请确保你的系统满足以下要求:
17-
- **Python 3.8+**
18-
- **pip 已安装**(Python 包管理器)
19-
- **API 访问权限**(支持OpenAI API方式的任何AI,中文推荐使用DeepSeek)
8+
| 功能点 | 描述 |
9+
|-------|-----|
10+
| 🚀 **小说设定** | 世界观 / 人物 / 剧情结构 |
11+
| 📝 **章节生成** | 多步生成,确保逻辑连贯 |
12+
| 👥 **角色状态 & 伏笔管理** | 追踪人物发展、重要事件 |
13+
| 🔍 **向量检索** | 保证长篇小说上下文一致 |
14+
| 📁 **自定义知识库** | 可上传本地参考文档 |
15+
|**一致性检查** | 自动识别剧情冲突或矛盾 |
16+
| 🖥 **GUI 友好交互** | 所见即所得,配置 & 操作简便 |
17+
18+
</div>
2019

2120
---
2221

23-
## **2. 安装依赖**
22+
## **目录**
23+
1. [环境要求](#环境要求)
24+
2. [安装依赖](#安装依赖)
25+
3. [项目结构](#项目结构)
26+
4. [配置 API Key](#配置-api-key)
27+
5. [运行程序](#运行程序)
28+
6. [使用指南](#使用指南)
29+
7. [生成文件管理](#生成文件管理)
30+
8. [常见问题](#常见问题)
2431

25-
**进入项目目录,执行**
26-
```bash
27-
pip install -r requirements.txt
28-
```
29-
### 安装语句切分模型punkt(可选,默认程序运行后会自动加载)
30-
**Python环境终端输入**:
31-
```bash
32-
python
33-
import nltk
34-
nltk.download('punkt')
35-
```
32+
---
33+
34+
## **环境要求**
35+
在开始之前,请确保你的系统满足以下条件:
36+
- 推荐**Python 3.10+**
37+
- 已安装 **pip**(Python 包管理器)
38+
- 拥有 **API Key**(如 OpenAI 或 DeepSeek)或 **支持OpenAI调用方式的本地接口**
3639

37-
等待下载完成(很小,下载很快的)
40+
---
3841

39-
**至此,环境配置完成。**
42+
## **安装依赖**
43+
1. 在项目根目录下,打开终端或命令行
44+
2. 执行以下命令安装所有依赖:
45+
```bash
46+
pip install -r requirements.txt
47+
```
48+
3. (可选)若需要手动安装 `nltk``punkt` 数据包:
49+
```bash
50+
python
51+
>>> import nltk
52+
>>> nltk.download('punkt')
53+
```
4054

4155
---
4256

43-
## **3. 项目结构**
44-
克隆或下载本项目后,你会看到如下结构:
45-
```plaintext
57+
## **项目结构**
58+
克隆或下载本项目后,你将看到如下目录结构:
59+
60+
```
4661
.
47-
├── main.py # 入口文件,运行 GUI
48-
├── ui.py # 图形界面
49-
├── novel_generator.py # 章节生成核心逻辑
50-
├── consistency_checker.py # 一致性检查 (防止剧情冲突)
51-
├── prompt_definitions.py # 预定义的 AI 提示词
52-
├── utils.py # 通用工具函数 (文件操作)
53-
├── config_manager.py # 处理配置信息 (API Key, Base URL)
54-
├── config.json # 用户配置文件 (可选)
55-
└── vectorstore/ # (可选) 存储向量数据库
62+
├── main.py # 入口文件, 运行 GUI
63+
├── ui.py # 图形界面
64+
├── novel_generator.py # 章节生成核心逻辑
65+
├── consistency_checker.py # 一致性检查, 防止剧情冲突
66+
|—— chapter_directory_parser.py #格式化目录
67+
├── prompt_definitions.py # 定义 AI 提示词
68+
├── utils.py # 常用工具函数, 文件操作
69+
├── config_manager.py # 管理配置 (API Key, Base URL)
70+
├── config.json # 用户配置文件 (可选)
71+
└── vectorstore/ # (可选) 本地向量数据库存储
5672
```
5773

74+
> `vectorstore/` 文件夹将在程序运行后自动生成,存储向量检索的缓存数据。
75+
5876
---
5977

60-
## **4. 配置 API Key**
61-
运行前,你需要**配置 API Key** 以便调用 OpenAI 或本地 LLM。
78+
## **配置 API Key**
79+
你可以通过以下方式指定或修改 API Key
6280

63-
### **方式 1:手动修改 `config.json`**
64-
`config.json` 文件中填入
81+
### 方式 1:**修改 `config.json`**
82+
打开 `config.json`,将对应字段替换为你的配置
6583
```json
6684
{
6785
"api_key": "your_openai_api_key",
@@ -75,93 +93,119 @@ nltk.download('punkt')
7593
}
7694
```
7795

78-
### **方式 2:通过 GUI 直接输入**
79-
- 启动程序后,在 GUI 中输入 `API Key` 并选择 `Base URL`,然后**点击 "保存配置"** 以存储到 `config.json`
96+
### 方式 2:**通过 GUI 输入**
97+
1. 运行 `main.py` 后会弹出图形界面
98+
2. 在界面输入 `API Key``Base URL`、模型名称、Temperature 等
99+
3. 点击 **“保存配置”** 按钮,自动生成或更新 `config.json`
80100

81101
---
82102

83-
## **5. 运行程序**
84-
### **方式 1:使用 `Python` 运行**
103+
## **运行程序**
104+
105+
### **方式 1:使用 Python 解释器**
85106
```bash
86107
python main.py
87108
```
88-
程序启动后,你会看到一个图形界面,方便用户交互
109+
执行后,GUI 将会启动,你可以在图形界面中进行各项操作
89110

90-
### **方式 2:打包成可执行文件**
91-
如果你希望**打包成可执行文件**(避免 Python 依赖),可以使用 `PyInstaller`
92-
```bash
93-
pip install pyinstaller
94-
pyinstaller --onefile --windowed main.py
95-
```
96-
这样会在 `dist/` 目录下生成 `main.exe`(Windows)或 `main`(Linux/macOS)。
111+
### **方式 2:打包为可执行文件**
112+
如果你想在无 Python 环境的机器上使用本工具,可以使用 **PyInstaller** 进行打包:
97113

98-
或者使用提供的`main.spec`,执行以下打包指令:
99114
```bash
115+
pip install pyinstaller
100116
pyinstaller main.spec
101117
```
118+
打包完成后,会在 `dist/` 目录下生成可执行文件(如 Windows 下的 `main.exe`)。
102119

103120
---
104121

105-
## **6. 使用指南**
106-
### **步骤 1:设置小说参数**
107-
在 GUI 界面:
108-
1. **输入 API Key & Base URL**(或使用 `config.json`)。
109-
2. **选择模型**(如 `gpt-4o`)。
110-
3. **输入小说主题**(如 "未来世界中的 AI 革命")。
111-
4. **选择小说类型**(如 "科幻"、"奇幻"、"悬疑")。
112-
5. **设置章节数和每章字数**(如 10 章,每章 3000 字)。
113-
6. **选择存储路径**(建议创建 `novels/` 目录)。
114-
115-
### **步骤 2:生成小说设定 & 目录**
116-
点击 **"1. 生成设定 & 目录"**,系统将:
117-
- 生成**世界观设定**`Novel_setting.txt`)。
118-
- 生成**章节目录**`Novel_directory.txt`)。
119-
120-
### **步骤 3:生成章节**
121-
点击 **"2. 生成单章"**,系统将:
122-
- 读取**上一章节内容**`lastchapter.txt`)。
123-
- 通过**向量检索**查找相关背景信息。
124-
- **动态调整角色状态**`character_state.txt`)。
125-
- **生成完整章节**,并保存到 `chapters/chapter_X.txt`
126-
127-
### **步骤 4:一致性检查(可选)**
128-
点击 **"3. 一致性审校"**,系统将:
129-
- 检查**角色行为、剧情逻辑**是否前后矛盾。
130-
- 识别是否有**未解伏笔**,保证故事合理性。
122+
## **使用指南**
123+
124+
1. **启动后,先完成基本参数设置:**
125+
- **API Key & Base URL**(如 `https://api.openai.com/v1`
126+
- **模型名称**(如 `gpt-3.5-turbo``gpt-4o` 等)
127+
- **Temperature**(0~1,决定文字创意程度)
128+
- **主题(Topic)**(如 “废土世界的 AI 叛乱”)
129+
- **类型(Genre)**(如 “科幻”/“魔幻”/“都市幻想”)
130+
- **章节数****每章字数**(如 10 章,每章约 3000 字)
131+
- **保存路径**(建议创建一个新的输出文件夹)
132+
133+
2. **点击「1. 生成设定 & 目录」**
134+
- 系统将基于主题、类型等生成:
135+
- `Novel_setting.txt`**世界观 & 整体设定**
136+
- `Novel_directory.txt`**章节目录**(含标题、简要提示)
137+
- 可以在生成后的文件中查看、修改或补充世界观设定和目录标题。
138+
139+
3. **点击「2. 生成章节草稿」**
140+
- 在生成章节之前,你可以:
141+
- **设置章节号**(如要写第 1 章,就填 `1`
142+
- **在“本章指导”输入框**中,填写对本章剧情的任何期望或指导
143+
- 点击按钮后,系统将:
144+
- 自动读取前文与 `Novel_directory.txt` 的标题与简述
145+
- 调用向量检索回顾剧情,确保上下文连贯
146+
- 生成本章大纲 (`outline_X.txt`) 及正文 (`chapter_X.txt`)
147+
- 生成完成后,可在左侧查看本章草稿内容。
148+
149+
4. **手动检查 & 编辑**(可选)
150+
- 你可以在文本编辑器中修改 `chapter_X.txt` 的内容,使之更符合个人审美或剧情要求。
151+
152+
5. **点击「3. 定稿当前章节」**
153+
- 系统将:
154+
- **更新全局摘要**`global_summary.txt`
155+
- **更新角色状态**`character_state.txt`,包含人物发展、物品变动、剧情线索等)
156+
- **更新向量检索库**,保证后续章节能够调用最新信息。
157+
158+
6. **一致性检查(可选)**
159+
- 点击「4. 一致性审校」进行冲突检测,比如**角色逻辑、剧情前后矛盾**等。
160+
- 若有冲突,会在日志区输出详细说明。
161+
162+
7. **重复第 3~5 步** 直到所有章节完成!
131163

132164
---
133165

134-
## **7. 生成文件管理**
135-
所有生成的文件存储在你选择的目录下:
136-
```plaintext
166+
## **生成文件管理**
167+
168+
在你指定的输出文件夹中,程序会自动生成并维护以下文件/目录:
169+
170+
```
137171
output_directory/
138-
├── Novel_setting.txt # 小说世界观 & 角色设定
139-
├── Novel_directory.txt # 章节目录
140-
├── lastchapter.txt # 最新章节 (供 AI 参考)
141-
├── character_state.txt # 角色状态 (道具、情感、技能)
142-
├── global_summary.txt # 小说摘要
143-
└── chapters/ # 所有章节
144-
├── chapter_1.txt
145-
├── chapter_2.txt
146-
├── chapter_3.txt
147-
└── ...
172+
├── Novel_setting.txt # 世界观 & 整体设定
173+
├── Novel_directory.txt # 小说章节目录
174+
├── character_state.txt # 角色状态/物品/伏笔等追踪
175+
├── global_summary.txt # 整体剧情摘要 (用于后续上下文)
176+
├── outlines/ # 存放各章大纲 (outline_1.txt 等)
177+
├── chapters/ # 存放每一章成稿 (chapter_1.txt 等)
178+
└── vectorstore/ # 向量检索数据库 (可清空重置)
148179
```
149180

181+
- **`character_state.txt`**:记录角色的动机、能力、持有物品等关键信息
182+
- **`global_summary.txt`**:每次定稿后都会更新,保证剧情可被后续章节引用
183+
- **`chapters/`**:每一章的正文会独立保存,方便你随时手动修改
184+
150185
---
151186

152-
## **8. 可能遇到的问题**
153-
### **1. `Chroma' object has no attribute 'persist'`**
154-
**原因:** `Chroma` 版本问题。
155-
**解决方案:**
156-
```bash
157-
pip uninstall chromadb
158-
pip install chromadb==0.3.21 # 或尝试其他版本
159-
```
160-
如果仍然报错,可以在 `novel_generator.py`**注释 `store.persist()`**
187+
## **常见问题**
188+
189+
#### 1. **`Chroma' object has no attribute 'persist'` 错误**
190+
191+
- **原因**:Chroma 库版本不匹配
192+
- **解决办法**
193+
```bash
194+
pip uninstall chromadb
195+
pip install chromadb==0.3.21
196+
```
197+
或者在 `novel_generator.py` 中找到 `store.persist()` 并注释掉,如果你的版本不支持此方法。
198+
199+
---
200+
201+
#### 2. **生成内容与预期不符**
202+
203+
- **可能原因**
204+
1. 主题或类型过于宽泛,模型难以把握重点
205+
2. 角色和世界观设定不够详细,可在 `Novel_setting.txt` 中增补更多细节
206+
- **建议**
207+
- 在 GUI 的“本章指导”输入框中填写更明确的剧情走向或重点描述,让模型更好地理解和发挥
161208

162209
---
163210

164-
### **2. 生成内容不符合预期**
165-
**可能的原因:**
166-
- 主题不够清晰,可以在 `topic` 字段中添加详细设定(如 `“废土世界 + AI 叛乱”`)。
167-
- 角色设定较少,可手动在 `Novel_setting.txt` 里补充。
211+
若你还有其他问题或需求,欢迎在项目 Issues 中提出。

main.spec

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,31 @@
11
# -*- mode: python ; coding: utf-8 -*-
2-
from PyInstaller.utils.hooks import collect_submodules
2+
from PyInstaller.utils.hooks import collect_all
3+
4+
datas = []
5+
binaries = []
6+
hiddenimports = ['typing_extensions',
7+
'langchain-openai',
8+
'langgraph',
9+
'openai',
10+
'nltk',
11+
'sentence_transformers',
12+
'scikit-learn',
13+
'langchain-community',
14+
'pydantic',
15+
'pydantic.deprecated.decorator',
16+
'tiktoken_ext.openai_public',
17+
'tiktoken_ext'
18+
]
19+
tmp_ret = collect_all('chromadb')
20+
datas += tmp_ret[0]; binaries += tmp_ret[1]; hiddenimports += tmp_ret[2]
21+
322

423
a = Analysis(
524
['main.py'],
625
pathex=[],
7-
binaries=[],
8-
datas=[
9-
('vectorstore', 'vectorstore')
10-
],
11-
hiddenimports=['typing_extensions',
12-
'langchain-openai',
13-
'langgraph',
14-
'openai',
15-
'chromadb',
16-
'nltk',
17-
'sentence_transformers',
18-
'scikit-learn',
19-
'langchain-community',
20-
'pydantic',
21-
'pydantic.deprecated.decorator',
22-
*collect_submodules('chromadb'),
23-
'chromadb.utils.embedding_functions.onnx_mini_lm_l6_v2',
24-
'chromadb.telemetry.product.posthog',
25-
'chromadb.api.segment',
26-
'chromadb.db.impl',
27-
'chromadb.db.impl.sqlite',
28-
'chromadb.migrations',
29-
'chromadb.migrations.embeddings_queue'
30-
31-
],
26+
binaries=binaries,
27+
datas=datas,
28+
hiddenimports=hiddenimports,
3229
hookspath=[],
3330
hooksconfig={},
3431
runtime_hooks=[],
@@ -43,8 +40,8 @@ exe = EXE(
4340
a.scripts,
4441
[],
4542
exclude_binaries=True,
46-
name='AI_NovelGenerator_V1.1',
47-
debug=False,
43+
name='AI_NovelGenerator_V1.2.3',
44+
debug=True,
4845
bootloader_ignore_signals=False,
4946
strip=False,
5047
upx=True,
@@ -63,5 +60,5 @@ coll = COLLECT(
6360
strip=False,
6461
upx=True,
6562
upx_exclude=[],
66-
name='AI_NovelGenerator_V1.1',
63+
name='AI_NovelGenerator_V1.2.3'
6764
)

0 commit comments

Comments
 (0)