AI小说生成器
一款基于大语言模型的多功能小说生成器,集成了完整的创作工作流,从世界观架构到章节生成,再到一致性维护,为创作者提供全方位的智能写作辅助。
✨ 核心功能
:artist_palette: 小说设定工坊
- 世界观架构:基于主题和题材生成完整的小说设定
- 角色动态设计:创建具有发展弧光的角色系统
- 剧情蓝图规划:构建逻辑严谨的章节架构
📖 智能章节生成
- 多阶段生成保障:确保剧情连贯性和逻辑一致性
- 上下文感知:基于前文内容智能续写
- 风格统一:维持整体文风和叙事节奏
🧠 状态追踪系统
- 角色发展轨迹:实时更新角色状态和关系变化
- 伏笔管理系统:跟踪未解决冲突和待推进剧情线
- 全局摘要维护:动态更新故事进展概览
:magnifying_glass_tilted_left: 语义检索引擎
- 向量化存储:基于ChromaDB的上下文向量库
- 智能检索:相关性驱动的知识片段提取
- 长程一致性:跨越章节的设定统一维护
📚 知识库集成
- 本地文档支持:导入参考文档增强创作素材
- 智能文本分割:基于语义的文档分段处理
- 向量化存储:高效的知识检索和利用
:check_mark_button: 自动审校机制
- 剧情矛盾检测:识别设定冲突和逻辑不一致
- 连续性检查:确保角色状态和情节发展的连贯性
- 冲突预警:提前发现潜在的故事性问题
🖥️ 可视化工作台
- 一体化界面:配置、生成、审校全流程GUI操作
- 实时进度跟踪:直观显示生成状态和结果
- 参数灵活调整:支持温度、token数等精细调控
🛠️ 安装指南
环境要求
- Python 3.9+ 运行环境(推荐3.10-3.12)
- pip 包管理工具
- 有效API密钥(OpenAI/DeepSeek等云端服务或Ollama等本地接口)
安装步骤
-
下载项目
git clone https://github.com/YILING0013/AI_NovelGenerator cd AI_NovelGenerator
-
安装依赖
pip install -r requirements.txt
-
运行应用
python main.py
可选步骤
如遇依赖安装问题,可安装C++编译工具:
- 下载 Visual Studio Build Tools
- 安装时勾选 C++ 桌面开发 选项
🚀 使用说明
基础配置
首先在GUI界面中配置LLM接口参数:
# 示例配置结构
{"api_key": "your_api_key","base_url": "https://api.deepseek.com/v1","model_name": "deepseek-chat","temperature": 0.7,"max_tokens": 8192
}
核心工作流
1. 小说架构生成
Novel_architecture_generate(interface_format="OpenAI",api_key=api_key,base_url=base_url,llm_model="deepseek-chat",topic="科幻未来",genre="硬科幻",number_of_chapters=20,word_number=3000,filepath="./novel_project"
)
2. 章节蓝图规划
Chapter_blueprint_generate(interface_format=interface_format,api_key=api_key,base_url=base_url,llm_model=model_name,filepath=filepath,number_of_chapters=number_of_chapters
)
3. 章节内容生成
# 生成章节草稿
chapter_draft = generate_chapter_draft(interface_format=interface_format,api_key=api_key,base_url=base_url,model_name=model_name,temperature=temperature,filepath=filepath,novel_number=chapter_num,user_guidance=user_guidance
)
4. 一致性检查
consistency_result = check_consistency(novel_setting=novel_setting,character_state=character_state,global_summary=global_summary,chapter_text=chapter_text,api_key=api_key,base_url=base_url,model_name=model_name
)
知识库集成
导入参考文档增强创作素材:
import_knowledge_file(embedding_api_key=embedding_api_key,embedding_url=embedding_url,embedding_interface_format=embedding_interface_format,embedding_model_name=embedding_model_name,file_path="./knowledge.txt",filepath=filepath
)
:laptop: 核心代码
章节蓝图解析器
def parse_chapter_blueprint(blueprint_text: str):"""解析整份章节蓝图文本,返回结构化数据返回格式:{"chapter_number": int, # 章节编号"chapter_title": str, # 章节标题"chapter_role": str, # 本章定位"chapter_purpose": str, # 核心作用"suspense_level": str, # 悬念密度"foreshadowing": str, # 伏笔操作"plot_twist_level": str, # 认知颠覆"chapter_summary": str # 本章简述}"""chunks = re.split(r'\n\s*\n', blueprint_text.strip())results = []# 正则模式匹配各字段chapter_number_pattern = re.compile(r'^第\s*(\d+)\s*章\s*-\s*\[?(.*?)\]?$')role_pattern = re.compile(r'^本章定位:\s*\[?(.*)\]?$')purpose_pattern = re.compile(r'^核心作用:\s*\[?(.*)\]?$')for chunk in chunks:lines = chunk.strip().splitlines()if not lines:continue# 解析章节头部信息header_match = chapter_number_pattern.match(lines[0].strip())if header_match:chapter_number = int(header_match.group(1))chapter_title = header_match.group(2).strip()# 解析其他字段chapter_data = {"chapter_number": chapter_number,"chapter_title": chapter_title,"chapter_role": "","chapter_purpose": "","suspense_level": "","foreshadowing": "","plot_twist_level": "","chapter_summary": ""}# 遍历剩余行匹配各字段for line in lines[1:]:line_stripped = line.strip()# 各字段模式匹配...results.append(chapter_data)# 按章节编号排序返回results.sort(key=lambda x: x["chapter_number"])return results
一致性检查器
def check_consistency(novel_setting: str,character_state: str,global_summary: str,chapter_text: str,api_key: str,base_url: str,model_name: str,temperature: float = 0.3,plot_arcs: str = "",interface_format: str = "OpenAI",max_tokens: int = 2048,timeout: int = 600
) -> str:"""调用模型进行一致性检查,检测剧情冲突和逻辑不一致新增对未解决冲突或剧情要点的衔接情况检查"""# 构建检查提示词prompt = CONSISTENCY_PROMPT.format(novel_setting=novel_setting,character_state=character_state,global_summary=global_summary,plot_arcs=plot_arcs,chapter_text=chapter_text)# 创建LLM适配器llm_adapter = create_llm_adapter(interface_format=interface_format,base_url=base_url,model_name=model_name,api_key=api_key,temperature=temperature,max_tokens=max_tokens,timeout=timeout)# 调用模型进行检查response = llm_adapter.invoke(prompt)return response if response else "审校Agent无回复"
配置管理器
def load_config(config_file: str) -> dict:"""从指定配置文件加载配置,不存在时创建默认配置"""if not os.path.exists(config_file):create_config(config_file)try:with open(config_file, 'r', encoding='utf-8') as f:return json.load(f)except:return {}def create_config(config_file: str) -> dict:"""创建默认配置文件,包含多种模型配置"""config = {"last_interface_format": "OpenAI","last_embedding_interface_format": "OpenAI","llm_configs": {"DeepSeek V3": {"api_key": "","base_url": "https://api.deepseek.com/v1","model_name": "deepseek-chat","temperature": 0.7,"max_tokens": 8192,"timeout": 600,"interface_format": "OpenAI"},# 其他模型配置...},"embedding_configs": {"OpenAI": {"api_key": "","base_url": "https://api.openai.com/v1","model_name": "text-embedding-ada-002","retrieval_k": 4,"interface_format": "OpenAI"}}}return config
LLM适配器框架
class BaseLLMAdapter:"""统一的LLM接口基类,为不同后端提供一致的方法签名"""def invoke(self, prompt: str) -> str:raise NotImplementedError("Subclasses must implement .invoke(prompt) method.")class DeepSeekAdapter(BaseLLMAdapter):"""DeepSeek官方/OpenAI兼容接口适配器"""def __init__(self, api_key: str, base_url: str, model_name: str, max_tokens: int, temperature: float = 0.7, timeout: Optional[int] = 600):self.base_url = check_base_url(base_url)self.api_key = api_keyself.model_name = model_nameself.max_tokens = max_tokensself.temperature = temperatureself.timeout = timeoutself._client = ChatOpenAI(model=self.model_name,api_key=self.api_key,base_url=self.base_url,max_tokens=self.max_tokens,temperature=self.temperature,timeout=self.timeout)def invoke(self, prompt: str) -> str:"""调用模型生成内容"""response = self._client.invoke(prompt)return response
该项目通过模块化设计和统一的接口抽象,为小说创作提供了完整的AI辅助解决方案,显著提升了创作效率和质量一致性。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
公众号二维码
公众号二维码