AI小说生成器代码审查实录:对比PlotPilot与novel-阶跃星辰,我避开了全量重构的坑
上周我在准备给自研的AI小说生成器novel-阶跃星辰做长文本生成稳定性优化时,顺手拉取了同领域开源项目PlotPilot做技术对标。本来只想找几个参考优化点,结果顺着代码结构扫完一圈,结合AI编码助手的代码审查能力,整理出了三页的差异对比和分优先级落地方案——整个过程没有上来就改一行代码,反而先跑了5个核心场景的单测确认两个项目当前都是可运行状态,最后选的最优路径比最初预想的“全量重构”省了至少80%的工作量。
先做验证再下结论:AI辅助代码审查的正确打开方式
这次对比我特意用了「using-superpowers + requesting-code-review」的审查思路:第一步先做只读取证,不直接改代码;第二步补跑定向单测确认两个项目的基线状态。
一开始我本来想直接给novel-阶跃星辰做全量重构,毕竟之前出现过几次长文本生成中途断掉的问题,但补跑单测后发现核心生成链路其实是通的,只是边缘场景的上下文长度没做裁剪,导致偶尔触发token超限。如果当时直接上全量重构,反而会引入更多不必要的风险,这个细节也让我意识到:做技术改造前先确认基线状态,比直接上手改代码重要10倍。
核心差异拆解:两个项目的长板与短板
我把两个仓库的结构和关键模块扫完一遍后,整理出了明确的优劣势对比:
PlotPilot 的核心亮点
作为已经跑了一年多的开源项目,PlotPilot在运营稳定性相关的模块设计上成熟度很高:生成流程做了标准化的状态机流转,支持生成中断后的断点续写;LLM调用层加了统一的错误重试和日志埋点,过去一年线上运行时生成失败率低于0.5%;还内置了多套适配不同小说类型的提示词模板,开箱即用。
novel-阶跃星辰的核心优势
我自研的novel-阶跃星辰的核心竞争力是定制化能力:提示词模板支持动态注入用户自定义的角色设定、剧情约束、文风偏好,扩展性比PlotPilot的硬编码模板高很多,非常适合做面向C端用户的个性化生成场景;另外我们还做了多模型热切换的逻辑,用户可以根据需求切换不同基座模型,灵活性更高。
核心差距
两边最大的差距在上下文管理和稳定性基建:PlotPilot做了严格的上下文长度裁剪和生成状态持久化,而novel-阶跃星辰目前只做了基础的消息拼接,长文本生成到1万字以上时大概率触发token超限;另外PlotPilot有完整的错误监控和告警逻辑,我们的项目目前只有基础的控制台日志,出问题只能靠用户反馈。
分优先级落地方案:避免无效投入
基于上面的对比,我没有选择全量重构,而是整理出了分优先级的落地方案,优先补高ROI的短板:
P0:最快见效(1-2天可落地)
优先给novel-阶跃星辰加上上下文长度裁剪逻辑和LLM调用基础日志:前者可以直接解决长文本生成的超限问题,后者可以把问题排查效率提升至少50%。核心改动只需要加一个上下文裁剪的中间层,不需要动核心生成逻辑,改动量小、见效快。核心裁剪逻辑参考如下:
def trim_context(messages: list, max_tokens: int = 3000) -> list:
total_tokens = count_tokens(messages)
# 保留system提示词和最新一轮用户输入,优先裁剪中间的历史生成内容
while total_tokens > max_tokens and len(messages) > 2:
messages.pop(1)
total_tokens = count_tokens(messages)
return messages
P1:中期补强(1-2周可落地)
参考PlotPilot的状态机设计,把novel-阶跃星辰的生成流程做标准化流转,加上断点续写和生成状态持久化能力,解决生成中途断掉后需要从头开始的问题。这个改动不需要推翻现有逻辑,只需要在现有生成链路里加状态标记和持久化层即可。
P2:长期基建(1个月以上落地)
抽象统一的LLM SDK层,整合PlotPilot的日志埋点、错误重试能力,和novel-阶跃星辰的灵活提示词模板、多模型切换能力,形成通用的AI小说生成工具链,后续不管是做新功能还是新项目都可以复用。
可带走的方法论
这次对比和改造过程给我最大的启发是:做项目对标和技术改造时,不要上来就想“全量推翻重写”,先做基线验证、再找高ROI的改动点,最后再考虑长期基建。
尤其是用AI编码助手做代码审查时,先把“确认当前项目可运行”作为第一步,避免在错误的基础上做决策;另外取长补短不是全盘照搬别人的设计,要结合自己项目的核心诉求选适配的方案——比如novel-阶跃星辰的核心优势是定制化,就不要为了学PlotPilot的稳定性把灵活性丢了。

浙公网安备 33010602011771号