novel-agent微调教程
novel-agent微调教程
1. 微调的场景与目标
场景
现有长篇中文小说 Agent 虽然通过提示词约束去除 AI 腔,但生成章节中仍会出现模板化句式、空泛心理描写、机械转折和过度解释等问题。
- 仅仅通过提示词工程的约束无法完全消除AI味的句子的生成。
现在已有的可以解决该问题的技术:(调研一下)
- 使用skill去AI味:
目标
因此计划使用 Qwen3-8B,在 A10 22GB GPU 上通过 LoRA 微调一个“局部文学编辑器”。它接收目标段落及前后文,只对句子或段落做最小幅度改写:
- 去除明显 AI 腔;
- 保持人物、剧情、时间、数字、境界、道具和因果关系不变;
- 不新增剧情、不续写、不解释;
- 原文自然时保持原样。
最终目标是把它接入现有小说生成流程,在章节生成后对高风险段落进行局部润色,使成稿更自然、更像人工写作,同时不破坏长篇小说的一致性。
2. 选择微调框架
这里使用的是LlamaFactory大模型微调框架
3. 选择微调的基础模型
最终选择:
- 使用
Qwen/Qwen3-8B
资源限制
- 受制于硬件GPU显存等的限制,这里最多选择一个7b参数量左右的小模型
- 因为写的小说是中文网文,所以最好选择中文模型
选型优点
- 中文能力和中文网文表达较稳定;
- 是Instruct模型,指令遵循能力比 Base 模型好,适合“只改写目标段落、不能改变事实”;
- 文本理解能力比
qwen2.5-7b-instruct更强 - 你的任务不是从零创作,而是“理解上下文后做局部编辑”,8B 足够
- ModelScope、Transformers、ms-swift 生态成熟;支持 LoRA/QLoRA;
4. 数据集的构造
4.1 Alpaca 格式
在指令监督微调时,instruction 列对应的内容会与 input 列对应的内容拼接后作为提示词,即提示词为 instruction\ninput。而 output 列对应的内容为模型回答。
如果指定,system 列对应的内容将被作为系统提示词。
1 | |
对于上述格式的数据,dataset_info.json 中的数据集描述应为:
1 | |
具体构造数据集示例:
1 | |
4.2 数据集格式的建议
system固定,instruction尽量短一些input的文本长度(这个尽量对应后续真实改写时的上下文长度)- 70%:单句、短句改写
- 30%:几百字段落改写样本,平衡长短,防止模型只会输出短句
- 加入原样保留样本,必须占比30%左右:
input和output一样 - 训练和实际推理的输入形式必须一致
system固定写入硬约束:不得改变事实、不得改变剧情、不得改变专名和数字等instruction最好使用有限、稳定的几类要求- 去除空泛心理描写
- 删除重复动作
- 减少机械转折
- 压缩解释性句子
- 让对白更自然
- 调整句子节奏
- 保留原文,不做修改
input中的文本必须完整- 完整的一句话
- 完整的几句话
- 完整的一个段落
4.3 第一版数据集构造格式示例
system和instruction都固定input是输入的原文内容output是润色改写后的文章内容
1 | |
4.4 数据集常见问题的解决方案
A. 数据量:先做小规模高质量数据
1000->3000->5000
分阶段:
1 | |
B. 样本比例
第一轮 1000 条可以这样分:
- 需要改写:700 条
- 原样保留:300 条
改写样本内部再覆盖这些问题,并且这些问题需要是平均的:
1 | |
C. 样本偏差:长度和内容要接近真实使用场景
最重要的是,训练集要接近未来真实输入
网文小说的特点就是以段落为一个整体内容
长度比例:
- 80%:完整段落
- 20%:单独句子或几个短句
D. 多样性:针对多种题材的网文内容
不仅支持历史小说、还支持玄幻、都市、言情等题材的小说