尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

用大模型搭建AI网文创作系统:从标题拆解到批量生成完整方案

用大模型搭建AI网文创作系统:从标题拆解到批量生成完整方案 “风清扬刚继任破落宗门掌门便强势激活【诸天神宗系统】开局直接召唤无上大帝老祖坐镇大本营安全感直接拉满不仅如此系统更助他收尽天下逆天神徒”这一句话里包含的其实不是一个技术项目而是一套完整的“系统流网文产品需求”主角设定、初始危机、金手指、长期目标、爽点节奏全都在。如果把它当成需求文档来看真正值得技术侧讨论的问题就变成了怎么用当前市面上成熟的大模型工具把这样一句标题快速拆解成角色卡、世界观设定、章节大纲并批量生成可继续编辑的稿件这篇博客我会给出一套可落地的“网文创作辅助系统”搭建思路包含环境准备、接口设计、批量任务、效果验证和问题排查适合做内容工具、写网文辅助脚本、做自动化内容管线的读者收藏。先说结论这套方案不需要自己训练模型核心思路是用“提示词模板 大模型接口 批量任务脚本”组装成一条内容生产流水线。输入一个小说标题或创意方向输出一套结构化的角色设定、势力设定、章节大纲和正文初稿。整体要解决的问题很实际AI 生成内容容易飘、角色前后不一致、批量任务容易断、接口调用经常超时。下面按工程化的方式拆开讲。1. 核心能力速览能力项说明项目类型AI 辅助网文创作系统非模型训练项目主要功能小说标题拆解、角色卡生成、世界观设定、章节大纲生成、正文初稿批量生成模型依赖调用大模型接口兼容 OpenAI 协议的 API 或本地 Ollama 服务推荐硬件纯 API 调用无需 GPU本地推理则按模型参数量决定7B/14B/70B 模型差异较大启动方式Python 命令行脚本 FastAPI 服务两种模式是否支持 API支持提供 HTTP 接口可接入自有工具链是否支持批量任务支持基于输入列表批量执行可配置并发数输出格式JSON Markdown 文件适合场景网文作者辅助创作、内容团队批量生成设定、自媒体素材生产这个设计和“诸天神宗系统”里的核心逻辑是一样的你只需要把一个初始想法丢进去系统会帮你把后续的“剧情面板”“角色面板”“势力面板”都展开。区别在于这里的“系统”是代码和提示词不是金手指。2. 适用场景与使用边界这类创作辅助工具适合谁首先是网文作者尤其是写系统流、无敌流、宗门流题材的作者需要快速产出多版本角色设定和章节大纲用来筛选灵感。其次是内容团队需要批量生成“标题-简介-角色卡-案头设定稿”这些内容后续还要人工修改。最后是技术同学他们不写小说但想研究“结构化提示词 批量接口调度”这套通用工程思路。不适合什么场景不适合指望模型直接产出可发布成品的场景。大模型生成的长文本存在上下文遗忘、角色语气漂移、情节重复等问题尤其是超过 3000 字之后质量下滑很明显。更不适合把生成内容直接商用而不做人工审核这里涉及两个层面的风险。第一是版权与授权。小说标题里的“风清扬”是金庸作品中的知名角色名如果真要写相关小说必须确认原作品版权状态和平台授权要求不能默认可以直接使用。更稳妥的做法是改成原创角色名只保留“老掌门 破落宗门 召唤老祖”的设定框架。第二是隐私与内容合规。批量生成角色设定时不要采集真实人物的姓名、肖像、声音特征。涉及历史人物或现实人物只能做符合公序良俗的虚构创作。AI 生成内容发布前也要过一遍审核工具避免生成违规内容。3. 环境准备与前置条件整套系统依赖不重核心环境如下操作系统Windows / Linux / macOS 均可。Python 版本3.10 或更高建议 3.11。Python 依赖requests、fastapi、uvicorn、pydantic用于批量任务和接口服务。大模型接口推荐使用支持 OpenAI 兼容协议的服务可以是云端 API也可以是本地 Ollama。网络要求如果调用云端 API需要稳定网络如果是本地推理确保磁盘空间足够存放模型文件。磁盘空间纯脚本方案不到 100MB本地模型按模型大小算7B 模型约 4GB 到 5GB14B 模型约 8GB 到 10GB。端口准备FastAPI 默认占 8000如果被占用可以换 8001、8080 等端口。本地推理时显存占用需要按实际模型版本测试。以常见情况来看7B 量化模型通常需要 6GB 左右显存。14B 量化模型通常需要 10GB 以上显存。如果没有独立显卡只靠 CPU 跑 7B 模型也可以生成速度会明显下降。不过这些数字会因量化方式、上下文长度、并发数变化不能作为固定结论。更稳妥的判断是先拉一个最小的量化模型跑通流程再决定要不要上更大模型。安装依赖的命令是pip install requests fastapi uvicorn pydantic如果选择本地 Ollama需要先安装 Ollama 并拉取一个支持 OpenAI 兼容协议的模型示例ollama pull qwen2.5:7b注意模型名需要根据你实际拉取的版本替换不要假设一定存在某个具体模型。4. 项目结构与启动方式我建议把它做成一个小型工程目录结构如下novel-studio/ ├── config.json ├── main.py ├── server.py ├── batch_run.py ├── prompts/ │ ├── title_breakdown.txt │ ├── character_card.txt │ ├── world_setting.txt │ └── chapter_outline.txt └── outputs/配置文件config.json控制模型接口和批量任务参数是一个通用模板需要按实际环境替换{ api_base: http://127.0.0.1:11434/v1, api_key: EMPTY, model: qwen2.5:7b, temperature: 0.85, max_tokens: 2048, input_file: ./inputs/titles.txt, output_dir: ./outputs, max_concurrency: 2 }如果使用云端 API把api_base换成服务商提供的地址api_key换成真实 Key。如果是本地 Ollamaapi_key通常填EMPTY即可。核心调用逻辑写在main.py中先实现一个最基础的“标题拆解”函数import json import requests def load_config(pathconfig.json): with open(path, r, encodingutf-8) as f: return json.load(f) def call_llm(prompt, config): url config[api_base] /chat/completions headers { Authorization: fBearer {config[api_key]}, Content-Type: application/json } payload { model: config[model], messages: [ {role: system, content: 你是一个资深网文编辑擅长拆解小说核心设定。}, {role: user, content: prompt} ], temperature: config[temperature], max_tokens: config[max_tokens] } response requests.post(url, jsonpayload, headersheaders, timeout120) response.raise_for_status() return response.json()[choices][0][message][content]然后写一个调用示例把标题拆解成“主角 / 初始身份 / 金手指 / 初始冲突 / 成长目标”五要素if __name__ __main__: config load_config() title 风清扬刚继任破落宗门掌门便强势激活【诸天神宗系统】开局直接召唤无上大帝老祖坐镇大本营安全感直接拉满不仅如此系统更助他收尽天下逆天神徒 prompt f 请对以下小说标题做结构化拆解输出 JSON 格式字段包括 title, protagonist, initial_identity, cheat_system, initial_conflict, short_goal, long_goal 标题{title} result call_llm(prompt, config) print(result)跑通的判断标准是终端输出一个完整 JSON里面字段齐全没有多余的报错输出。如果模型经常输出 JSON 前后带解释文字可以在提示词里加一句“只输出 JSON不要解释”。启动命令行脚本的方式python main.py如果要用 HTTP 接口对外提供服务再写一个server.pyfrom fastapi import FastAPI from pydantic import BaseModel import main as core app FastAPI() config core.load_config() class TitleRequest(BaseModel): title: str task_type: str title_breakdown app.post(/api/generate) def generate(req: TitleRequest): prompt f请对以下小说标题做结构化拆解输出 JSON。\n{req.title} try: result core.call_llm(prompt, config) return {code: 0, data: result} except Exception as e: return {code: 1, message: str(e)} if __name__ __main__: import uvicorn uvicorn.run(app, host127.0.0.1, port8000)启动服务python server.py访问地址为http://127.0.0.1:8000接口路径为/api/generate。5. 功能测试与效果验证这套创作辅助系统至少要测四个核心功能标题拆解、角色卡生成、世界观设定、章节大纲生成。每个功能都有明确的验收标准。5.1 标题拆解测试测试目标是确认模型能识别标题中的主角、金手指和初始冲突。输入素材就用“风清扬”那句标题。预期输出包含protagonist风清扬、cheat_system诸天神宗系统、initial_conflict破落宗门面临生存危机等字段。判断成功的标准是 JSON 格式合法字段与标题语义一致。失败常见原因是模型把protagonist识别成“掌门”而不是“风清扬”或者漏掉金手指。排查时先检查提示词是否明确要求“只输出 JSON”再检查max_tokens是否太小导致输出被截断。5.2 角色卡生成测试测试目标是生成多张互相独立又风格统一的角色卡。我设计提示词模板prompts/character_card.txt内容大意是“以小说标题为基础生成 5 个角色卡每个角色卡包含姓名、身份、性格、口头禅、目标、与主角关系”。这里最容易出现的问题就是角色同质化。比如生成三个角色都是“沉默寡言、实力强大”这需要调高temperature或者修改提示词要求“每个角色的性格必须从不同维度展开不能出现重复关键词”。批量生成多个版本后人工挑选最合适的。5.3 世界观设定测试测试目标是生成宗门、势力、境界体系等结构。针对“诸天神宗系统”可以让模型设计破落宗门前任掌门的失踪原因。诸天神宗系统的激活条件。宗门当前面临的三大外部压力。天地境界体系从低到高的层次名称。判断逻辑是检查设定之间是否存在自相矛盾。例如前文写“灵气枯竭”后文又写“无上大帝每日消耗大量灵气”这类矛盾在长文本里经常出现人工审核阶段必须处理。5.4 章节大纲生成测试章节大纲直接决定模型后续能不能稳定输出正文。可以让模型生成“开局 5 章大纲”每章包含章名、核心事件、爽点、结尾钩子。对应到标题里第一章是“继任掌门 激活系统”第二章是“召唤老祖 震慑来敌”第三章是“立威 收第一批神徒”。预期输出是 5 章之间事件逻辑连续主角实力提升节奏合理每章结尾留有悬念。如果大纲出现明显跳剧情比如第一章刚激活系统第三章就统一诸天万界需要降低temperature并给模型限定“实力提升必须按等级循序渐进”。5.5 长文本正文生成测试正文生成是压力最大的一环。建议先让模型写第一章初稿限定 800 到 1200 字。观察角色是否走形、系统播报是否一致、叙事视角是否稳定。这里的稳定是指主角视角不能突然切到反派视角。如果正文生成质量不行不一定要换大模型可以先优化提示词把第五章大纲中的“核心事件”“爽点”“结尾钩子”直接拼接成正文提示词效果会明显好于“凭空生成一章”。6. 接口 API 与批量任务接口服务写好后可以用curl快速验证curl -X POST http://127.0.0.1:8000/api/generate \ -H Content-Type: application/json \ -d {title: 风清扬刚继任破落宗门掌门便强势激活【诸天神宗系统】, task_type: title_breakdown}Python 调用示例import requests url http://127.0.0.1:8000/api/generate payload {title: 风清扬刚继任破落宗门掌门便强势激活【诸天神宗系统】} response requests.post(url, jsonpayload, timeout120) print(response.json())批量任务才是真正的关键。所谓“批量”是把多个标题或角色需求写进titles.txt脚本自动逐条调用模型接口并把输出保存成独立文件。batch_run.py的核心逻辑import json import os import time from concurrent.futures import ThreadPoolExecutor, as_completed import main as core def process_title(title, config): prompt f请对以下小说标题做结构化拆解输出 JSON 字段title, protagonist, cheat_system, initial_conflict, short_goal, long_goal。\n标题{title} result core.call_llm(prompt, config) return {title: title, result: result} if __name__ __main__: config core.load_config() with open(config[input_file], r, encodingutf-8) as f: titles [line.strip() for line in f if line.strip()] os.makedirs(config[output_dir], exist_okTrue) with ThreadPoolExecutor(max_workersconfig[max_concurrency]) as executor: futures [executor.submit(process_title, title, config) for title in titles] for future in as_completed(futures): item future.result() out_path os.path.join(config[output_dir], f{item[title][:20]}.md) with open(out_path, w, encodingutf-8) as f: f.write(item[result]) print(f已生成: {out_path})批量任务设计要注意三点并发数不要一次调太高本地模型一般 1 到 2 并发即可云端 API 根据服务限额调整否则容易被限流。每条任务单独写入一个文件不要所有结果都塞进一个大文件避免单个文件损坏导致全部丢失。失败任务要重试。简单做法是捕获异常后 sleep 3 秒再重试一次仍然失败就把标题写入failed.txt方便二次处理。7. 资源占用与性能观察如果使用云端 API本机资源占用很低主要关注点是接口延迟、限流、预算。如果使用本地模型要从三个层面观察性能。首先是显存占用。启动本地模型后用nvidia-smi观察显存变化nvidia-smi在生成过程中显存占用会随模型加载和上下文长度变化。如果显存不够优先选择更小的量化模型或者限制上下文长度。其次是生成速度。影响速度的关键因素包括模型参数量、量化程度、输入提示词长度、生成 token 数量、并发数。同一模型在 7B 和 14B 上的生成速度差距明显。实测必须在自己机器上进行不能拿网上别人的数字直接套用。最后是稳定性。高频并发调用本地模型时容易出现请求超时或服务崩溃。建议给每个请求设置 120 秒以上的超时时间并在脚本里增加失败重试。如果任务量很大更稳妥的做法是分批跑每批 10 个标题跑完休息几秒再继续。降低显存占用和提升稳定性的常用手段使用低比特量化模型。限制max_tokens到实际需要的长度。降低并发数。关闭不需要的浏览器标签页避免额外显存占用。如果服务跑在 Windows 上注意进程残留任务结束后杀掉后台 Python 进程。8. 常见问题与排查方法问题现象可能原因排查方式解决方案Python 依赖安装失败网络问题或 Python 版本过低检查 Python 版本重试 pip 安装更换 pip 镜像源升级 Python 3.10接口返回 404请求地址错误查看服务启动日志和路由确认路径为/api/generate核对端口接口返回 401API Key 错误检查请求头和配置中心替换正确 Key本地服务用 EMPTY本地模型加载失败显存不足或模型文件损坏查看启动日志检查磁盘空间换更小模型重新拉取模型文件生成内容 JSON 解析失败输出被截断或模型混入解释文字打印原始输出提高 max_tokens强化提示词要求角色生成趋同temperature 太低或提示词限制不足对比多张角色卡关键词调高 temperature 到 0.9 左右加差异化要求批量任务卡住单条请求超时查看日志定位卡住的标题设置请求超时加失败重试正文越长越乱上下文长度限制和注意力漂移检查生成文本中后期逻辑改为分段生成先把大纲固化为上下文骨架服务端口被占用8000 端口被其他程序占用执行端口检查命令启动时换--port 8001端口检查命令示例netstat -ano | findstr 8000如果进程占用可以换端口启动python server.py --port 8001或者手动记录进程 PID 再结束进程taskkill /PID PID /F批量任务里最容易踩的坑是标题文件里混入空行、空格、特殊符号导致请求发送前就报错。处理方式是在读取标题后统一做strip()并且过滤掉长度小于 5 的行。9. 最佳实践与使用建议第一次跑通不要直接用大模型先准备两个测试标题用最小并发跑一遍全流程。确认输出格式稳定后再增加批量规模。整套流程里提示词模板是最值得花时间的部分建议把提示词单独放文件方便反复调优。目录管理上输入文件、输出结果、失败任务、日志要分开。我推荐的目录结构outputs/ ├── ok/ ├── failed/ └── logs/每个生成结果要附带元信息包括模型版本、temperature、提示词版本、生成时间这样出现问题时可以回溯。如果条件允许尽量把关键参数写入文件名或 JSON 头部。批量任务必须加日志。简单的做法是把每次调用的模型、耗时、是否成功都追加到task.logpython batch_run.py task.log 21涉及角色名、真实人物、版权素材时必须确认授权。这里的“风清扬”是一个典型例子不能因为标题素材方便就直接用于商用项目。建议改成原创角色名保留“继任掌门 激活系统 召唤老祖”的结构。接口服务不要直接暴露到公网。如果只是本机使用启动服务时写死127.0.0.1。如果需要局域网其他设备访问再绑定0.0.0.0同时要加一个简单的 Token 验证避免被扫到后无限调用。AI 生成内容在发布或商用前要做效果复核重点检查三块逻辑连贯性、角色一致性、内容合规性。尤其不能用 AI 生成的内容冒充人工原创发布到需要原创审核的平台否则有违规风险。10. 总结与下一步这套创作辅助系统最值得尝试的点不是某个具体模型而是“标题拆解 - 角色卡 - 世界观 - 章节大纲 - 正文生成 - 批量调度”这条完整流水线。最先应该验证的功能是标题拆解因为它关联后续所有环节也最容易看出模型是否理解你的提示词。最容易踩的坑有三个第一提示词不写“只输出 JSON”导致解析失败第二并发数设置过高把本地模型打崩第三不设超时和重试批量任务卡死一晚上。这三个问题都可以在第一次运行时提前规避。后续可以继续扩展的方向很多增加一个简单的 Web 页面来编辑角色卡和章节大纲接入向量数据库把已生成的设定存起来生成正文时自动检索相关内容加入人工审核标记让作者可以在 Web 页面里标注“可用/需修改/废弃”。如果想把这套系统做成团队工具还可以加任务队列、权限管理和生成记录审计。建议先把单机版跑通再决定要不要加服务化层。
返回列表