墨参 MoShen
本地优先的个人写作 Agent:自己整理资料、自己核对设定、自己追踪伏笔,把模型放在编辑的位置,不代你动笔
![platform]()
![python]()
![electron]()
项目定位
墨参是一个本地优先的个人写作 Agent,属于作者自己,用来管住一部长篇的里子。
把项目交给它,它会自己去读你的稿件、核对设定与人物、追还没回收的伏笔,然后把结论摆到你面前。它始终只在“编辑”的位置上工作:整理、核对、质疑、记录。这一章究竟怎么写,仍然由你决定。
它把你散落的设定、大纲、角色、伏笔与参考资料收进同一个项目,在你动笔前后提供结构、逻辑、文风与节奏上的判断,并把你的决定记录下来,供下一章延续。
它不产出正文。正文只有在你于写作页手动保存时才会写入磁盘;模型拿到的上下文用于讨论、诊断与整理,不会替你写下一章。对话中有两类写入:一类是约定标记触发的直接写入,范围限定在设定、大纲与知识库;另一类是待确认提案,模型把整理好的内容交给你,点「加入」之后才归入设定、大纲、知识库或爽爆点库。两者都会标注来源,且不会覆盖你手工维护的内容。
与一键生成型写作工具的区别
写作助手与写作 Agent 是同一类东西,不必在名字上分高下。实际要区分的是下面这条线:正文由谁来写。
| 维度 | 墨参 | 一键生成型写作工具 | |---|---|---| | 正文来源 | 由作者书写 | 由模型生成 | | AI 的角色 | 编辑、审稿、资料整理 | 代笔 | | 主动性 | 保存即巡检、主动干预、多步任务自主跑完 | 一次提示一次输出 | | 事实来源 | 区分作者事实与 AI 推断,来源可查 | 模型输出即事实 | | 数据位置 | 本机工作区文件,模型与 Key 自配 | 多为云端托管 | | 创作主导权 | 在作者 | 在模型 |
上表第二列的行为分别落在哪些功能上,见「功能总览」;具体怎么操作,见「各功能使用教程」。
界面预览
以下截图均来自产品原型(内置示例项目《长夜行》的静态样例数据,非真实项目)。
| 对话 | 写作 |
| --- | --- |
|
|
|
| 角色 · 阶段图 | 角色 · AI 观察 |
| --- | --- |
|
|
|
| 伏笔 | 星图 · 关系图 |
| --- | --- |
|
|
|
| 星图 · 档案库 | 设定 |
| --- | --- |
|
|
|
| 大纲 | 爽爆点 |
| --- | --- |
|
|
|
| 知识库 | 文件 |
| --- | --- |
|
|
|
| 灵感 | |
| --- | --- |
|
| |
项目背景
让模型直接写完一章并不困难,代价却出现在后面。模型在海量平均语料上训练,输出会趋向"最平均"的表达,人物与桥段容易趋向套路;长篇小说依赖几十万字前后一致的设定与伏笔,纯生成很难长期维持;当写作被交出去之后,作者对作品的判断力与个人风格也一并交了出去。
墨参把模型放在编辑的位置上。它帮你核对前后矛盾、追踪尚未回收的伏笔、梳理人物关系、诊断文风里的"AI 味",在你偏离设定时提出质疑;这一章究竟怎么写,仍然由你决定。
功能总览
界面共 10 个页面。一级侧栏与各页目录栏都能收成窄轨,把宽度让给工作区。
| 页面 | 能做什么 | |---|---| | 对话 | 讨论大纲、人物、设定、伏笔与逻辑;流式输出;输入意图自动路由到合适的职能模型;发现问题时给出 L1 建议 / L2 质询 / L3 否决;可提出待确认提案,由你点「加入」或「忽略」后归入设定、大纲、知识库或爽爆点;单条回复可存入知识库 | | 写作 | 富文本正文编辑器(粗体 / 斜体 / 下划线、首行缩进、标蓝);实时字数与保存状态;章节创作流程状态机与门禁;正文中提到的角色条目自动标蓝,点击即见该角色档案与当前阶段;AI 审稿(单章 / 全书)输出设定一致性、人物 OOC、逻辑因果、节奏、文风与伏笔的问题清单;单章与全文伏笔检测、回收检测;保存后自动巡检 | | 角色 | 三个子页:阶段图、角色档案、AI 观察。角色 = 档案 + 阶段节点 + 事件连线 + AI 观察收件箱。阶段图可拖拽摆位、手动增删阶段与连线,连线标注这一阶段到下一阶段经历的事件;AI 分阶段解析按正文把角色拆成成长阶段(档位为粗略 / 标准 / 细致,只控制切分粒度,不预设阶段数量);「AI 观察」收纳保存章节时自动提取的提及与新别名,逐条采纳或忽略;设定页的人物条目可一键「添加到角色页」 | | 伏笔 | 伏笔台账:登记每条伏笔的埋设与回收条目,按状态与时间排序,未回收的排在前面 | | 星图 | 从稿件抽取角色 / 世界 / 势力 / 地点 / 事件 / 道具六类实体及关系;分析档位分快速 / 标准 / 深度,文本来源可选写作模块章节、已上传文件或粘贴文本;重新分析采用增量更新(只提交变更补丁,可随剧情增删,不会整份重写已有设定,也不覆盖你手动维护的内容);3D 关系图支持拖拽旋转、拖拽节点、滚轮缩放,右键节点或连线直接编辑;档案库可手动增删条目与关系;出品风格档案(可选)为同一本书统一肖像画风;可选人物肖像生成;画布背景可自定义 | | 设定 | 多级设定目录树;按类别筛选加标题关键词搜索;内容可切换「预览 / 编辑」,预览按 Markdown 渲染;AI 优化后可应用结果或另存为新设定;可移动到其他父节点;从文档导入提取设定;导出 txt / md / html / docx | | 大纲 | 节点与连线式大纲,区分主线与支线;节点与连线均可编辑与删除 | | 爽爆点 | 大纲页的子页面:按剧情段 / 副本登记爽点、爆点、钩子等,记录每个点用了多少次,附审美疲劳提示;可用 AI 检查已写正文,核对并修正使用次数 | | 知识库 | 上传本地文件(txt / md / docx)分析整理;「网络搜索」按知识类型与关键词生成参考文档;从对话消息存入;条目可编辑、删除 | | 灵感 | 指定灵感文件夹,浏览并读取其中的常见文本与 Word 文档 | | 文件 | 上传 txt / md / docx;文风诊断、逻辑检查、冲突值计算、全面诊断;拆文分析;蒸馏学习 |
贯穿各页的能力:
| 能力 | 说明 | |---|---| | 设置 | 工作区路径;写作设置(自动章节编号模式、自动伏笔检测、实时更新条目);多组 API 渠道与按职能分配模型;图像生成 API(含肖像风格一致性);连通性检测 | | 项目工作区 | 每个项目可单独绑定一个本地文件夹,其中的文档参与对话分析与设定参考 | | 长任务进度 | 星图分析、拆文蒸馏、AI 审稿、角色分阶段解析都带实时进度,可暂停 / 继续 / 停止,也可收起后在后台继续跑 | | 上下文与租约 | 上下文按预算与优先级注入,被截断的部分会显式告知;项目重新打开后旧会话租约立即失效 | | 语言 | 界面语言与写作语言相互独立,各自切换并保存 |
各功能使用教程
下面的操作路径都以「已有一组可用模型、已选中一个项目」为前提。安装与启动见「快速开始」,模型与密钥的约定见「模型配置」。
准备:配置一个可用的模型
- 点左下角「设置」。
- 在「已保存的 API」区域点「+ 添加 API」,填 Base URL、API Key 与模型名。
- 需要给不同职能配不同模型时,展开「职能独立 API Key」逐项填写;只配默认渠道也可以,未单独指定的职能会按降级链自动挑选。
- 点「检测」验证连通性,再点「保存」。
准备:新建项目并绑定项目工作区
- 在左侧「项目」区点「+ 新建项目」,输入名称后点「创建」。
- 把鼠标移到项目上,点它右侧的齿轮按钮打开「设置项目工作区」。
- 在弹窗里点「浏览」选择本地文件夹,也可直接输入完整路径,然后点「确认」。
- 想解绑时重新打开该弹窗,点「清除」。
对话:讨论并把提案落地
- 在底部输入框写下问题(人设、情节走向、逻辑疑点等),点「发送」或按回车。
- 输入会先经过意图路由,自动挑一个合适的职能模型回答,回复流式输出。
- 若模型给出了待确认提案,卡片上会出现「加入」与「忽略」;「加入」会写入设定、大纲、知识库或爽爆点,「忽略」则收起该提案。
- 想留下某条回复,点该条消息下的「存入知识库」,补上标题与类别后点「保存」。
写作:新建章节、写作与保存
- 进入「写作」页,在左侧目录点「+ 卷」新建卷,再点卷上的「+」新建章节。
- 在章节头填写卷号 / 卷名与章号 / 章名;章号会按「设置 → 写作设置」里的自动章节编号模式预填。
- 在正文区写作。工具栏提供粗体、斜体、下划线,以及默认开启的「缩进」和可切换的「标蓝」。
- 点底部「保存」写入磁盘;要接着往下写,点「保存并新建下一章」,它会保存当前章并新建下一章。
- 状态栏显示当前字数与保存状态(有未保存改动 / 已保存 / 尚未保存)。
写作:章节流程与门禁
- 新章节初始为「未开始」,点「标记草稿」进入草稿。
- 草稿状态下点「标记已审稿」;也可以先跑一次审稿,再在报告里点「标记为已审稿」。
- 审稿后点「标记已修稿」,再点「定稿」。
- 已定稿章节只读,需要改动时先点「重置」。
写作:AI 审稿
- 打开要审的章节,点底部「审稿」。
- 等待报告生成,过程中可以收起进度条让它继续在后台跑。
- 报告按设定一致性、人物 OOC、逻辑因果、节奏、文风与伏笔分组列出问题。
- 点报告里的「标记为已审稿」,把这次结论记进章节流程状态。
reports/ 目录与知识库。
写作:伏笔检测与回收检测
- 点「伏笔(单章)」检测当前章,或点「伏笔(全文)」扫全书。
- 结果弹窗里每条都标着「新伏笔」或「已有伏笔」,点「添加到伏笔页」写入台账。
- 点「回收检测」核对已埋伏笔的回收情况。
写作:标蓝与实时信息卡
- 确认工具栏的「标蓝」处于开启状态,右侧会提示已标出多少处。
- 正文里出现的角色名与别名会被标蓝;点任意一处蓝色文字,弹出实时信息卡,显示该角色当前阶段与别名等信息。
- 卡片里可以直接跳到角色页。
写作:保存后的自动巡检
- 打开「设置 → 写作设置」,按需打开「自动伏笔检测」与「实时更新条目」两个开关,点「保存」。
- 回到写作页正常保存章节。
- 状态栏右侧显示自动同步中,完成后给出本轮结果。
角色:建档、别名与档案
- 在角色页左侧点「+ 角色」新建角色,或从设定页的人物条目点「添加到角色页」带入(重复点只补充别名,不重复建档)。
- 左侧列表可按角色名或别名搜索。
- 切到「角色档案」子页,填写基础信息;在「别名」一行点「+ 添加别名」,正文里出现这些称呼同样会标蓝。
角色:阶段图与 AI 分阶段解析
- 切到「阶段图」子页,点「+ 添加阶段」手动建阶段节点,拖动节点摆位,点「重排画布」恢复自动布局。
- 选中阶段后可以「删除阶段」;选中连线可以「删除连线」,连线标注的是从这一阶段到下一阶段经历的事件。
- 想按正文自动切分,在角色页顶部标签行右侧的档位下拉里选「粗略 / 标准 / 细致」(只控制切分粒度,不规定阶段数量),再点「AI 分阶段解析」。
- 解析过程中可以收起进度条,完成后阶段节点会出现在画布上。
角色:AI 观察收件箱
- 切到角色页顶部的「AI 观察」子页;有待处理条目时标签上会显示数量,左侧栏底部也有「AI 观察 N 条待处理」的入口。
- 每条观察都带着出现的章节与正文片段,并标注是否吻合已有阶段、是否疑似新别名。
- 逐条处理:吻合已有阶段时可以点「追加到某阶段」把片段并进去,点「记为新阶段」新建阶段节点,点「并入别名」写进别名表,点「忽略」永久隐藏。
- 勾上「显示已处理」可以回看被采纳或忽略的记录。
设定:新建、筛选与编辑
- 左侧目录点「+ 新建」建条目,或把鼠标移到已有条目上点「+」加子项。
- 用类别标签(全部 / 世界观 / 人物 / 地区 / 物品 / 剧情 / 力量体系 / 其他)加标题关键词搜索来缩小范围。
- 点中条目后,右侧「设定内容」默认按 Markdown 预览;点右上角的「编辑」切到文本框,写完点「预览」或直接「保存修改」,保存后自动回到预览。
设定:AI 优化与迁移
- 内容写好一部分后点「AI 优化」,结果出现在下方可编辑的文本框里。
- 满意就点「应用优化结果」替换原内容,或点「保存为新设定」另存一条。
- 要把条目换个父节点,点「移动到」,选目标后点「移动」。
设定:导入与导出
- 先把素材文档上传到「文件」页(导入的来源是已上传文档)。
- 回到设定页,点侧栏底部的「导入」,在「从文档导入设定」里选「选择文档」与「提取类别」,需要时再指定「父级目录」,点「开始提取」。
- 点「导出」选择格式(txt / md / html / docx)导出当前设定树。
伏笔:台账维护
- 左侧列表点「+ 新增」,填「伏笔名」与「伏笔内容」,点「创建」。
- 在右侧详情里登记「出现记录」:点「+ 添加」,填出现的具体内容与出现章节(如「第3章 初遇」),点「添加」;点某条记录右侧的「×」删除它。
- 状态在「未回收」与「已回收」之间切换;回收后在「回收章节」里写明在哪一章回收(如「第10章 真相大白」)。
- 列表按状态与时间排序,未回收的排在前面;不需要的伏笔在详情右上角点「删除」。
星图:分析与增量更新
- 进入「分析」子页,先选分析档位(快速 / 标准 / 深度)与文本来源(写作模块章节 / 已上传文件 / 粘贴文本)。
- 选「已上传文件」时先到「文件」页上传 txt / md / docx,回来点「刷新」,再勾选要分析的文件。
- 点「开始分析」,过程中带实时进度。
- 再次分析已有数据时,会先弹出确认框,选「保留手动内容」或「覆盖手动内容」。
星图:关系图与档案库
- 「关系图」子页用鼠标拖拽旋转视角、拖拽节点调整位置、滚轮缩放。
- 右键节点或连线可直接编辑;空白处右键可新建条目或关系。
- 「档案库」按类型列出全部条目,点「+ 新增条目」补充,点「编辑条目」改内容,点「加关系」连到别的条目,点「删除」移除。
星图:出品风格档案与肖像
- 在「分析」子页打开「出品风格档案」,它会识别本书题材(玄幻 / 仙侠 / 机甲科幻等),让所有肖像共用同一套画风、上色与光影。
- 点「手动调整」可直接改题材与风格字段,改完点「保存」。
- 生成肖像:在「分析」子页点「生成角色肖像」批量生成已有的人物;单张生成可以在「关系图」里右键节点点「更新肖像图」,或在「档案库」的条目详情里点「生成肖像」(已有肖像时为「重绘肖像」)。
- 画布背景:在「关系图」的右键菜单里打开背景设置,点「选择图片…」上传,或点「本页恢复默认」「全部恢复默认」。
/images/generations。
大纲:节点与连线
- 「大纲图」子页点「+ 添加节点」建节点,填写标题与内容。
- 拖动节点摆位,并按主线 / 支线区分;点「刷新」重新载入。
- 选中节点或连线后,在右侧面板可以编辑,也可以点「删除」。
爽爆点:登记与次数检查
- 点「+ 新增爽爆点」登记一条,填写标题、类型(爽点 / 爆点 / 钩子 / 情绪点 / 悬念 / 转折 / 其他)、套路与所属剧情段或副本。
- 每条记录已用次数,用「+1 使用」与「-1」手动增减;用得多会给出审美疲劳提示,疲劳阈值可以直接在筛选栏改。
- 点「AI 检查使用次数」,让它读已有正文核对实际出现次数并给出修正建议,逐条点「应用」采纳,看到「一致」则跳过。
- 筛选栏支持按标题 / 内容 / 套路搜索,并按类型、状态与剧情段 / 副本过滤。
- 点「编辑」改内容,点「删除」移除。
知识库:两条入库路径
本地文件:在「本地文件」页签点上传区选择或拖入 txt / md / docx,等待 AI 分析成条目。
网络搜索:切到「网络搜索」页签,选知识类型(完本小说 / 游戏设定 / 背景故事 / 其他),填搜索关键词(例如「原神世界观设定」),点「搜索并分析」。
另外,对话里的单条回复可以点「存入知识库」直接入库。条目详情页可以「编辑」「保存」「返回」「删除」。
灵感:指定并读取文件夹
- 在灵感页侧栏点「设置」,在弹窗里点「浏览」选文件夹(或直接填路径),点「确认」。
- 侧栏会列出该文件夹里的文本与 Word 文档,点文件名即可读取内容。
- 想换文件夹,重新点「设置」修改即可。
文件:上传、诊断与蒸馏
- 点「上传文件」选 txt / md / docx,或把文件拖进窗口。
- 卡片上点「打开」进入详情;点「星图分析」把这份文件直接送去星图。
- 进入详情后可以点「打开文件」预览正文,选诊断类型(全面诊断 / 文风诊断 / 逻辑诊断 / 冲突值分布)点「拆文分析」;填好章节数上限后点「蒸馏学习」,逐章提取事实卡(0 表示不限章节数)。
界面:侧栏收起与语言
- 点侧栏顶部的「«」把一级侧栏收成窄轨,「»」展开;各页目录栏右上角有同样的收起按钮。
- 左下角「设置」里的语言区可以分别切换界面语言与写作语言,两者互不影响。
快速开始
安装版
安装包由 npm run build:electron 生成,产物为 release/ 下的 墨参 MoShen-Setup-<版本>.exe,双击安装即可。运行不需要本机安装 Node.js 或 Python——后端已随安装包打包,由 Electron 在启动时拉起。
源码运行
需要 Node.js 18+ 与 Python 3.10+。
npm install
npm run dev
start.bat 等价于开发调试入口。窗口打开后,Python 后端在后台启动。
构建
# 1. 打包 Python 后端(PyInstaller → dist/moshen-server)
npm run build:python
2. 免安装版(→ release/win-unpacked)
npx electron-builder --win --dir --publish never
3. NSIS 安装包(→ release/)
npm run build:electron
模型配置
墨参使用任意 OpenAI 兼容接口,DeepSeek、Claude、GPT、Qwen、Ollama 等均可接入。配置按职能分配模型,保存在 ~/.moshen/.env。
| 角色 | 用途 | 建议 |
|---|---|---|
| TEXT_MASTER | 文学分析、文风诊断 | 文字能力最强的模型 |
| STRUCTURE_ANALYST | 结构分析、逻辑检查、干预评估 | 推理能力强的模型 |
| KNOWLEDGE_BUILDER | 拆书、知识提取 | 快速低成本模型 |
| DIALOGUE_PARTNER | 日常对话、创意讨论 | 均衡模型 |
| NOVEL_ANALYZER | 星图实体与关系抽取 | 推理能力强的模型 |
| IMAGE_GENERATOR | 人物肖像的绘画提示词(图像接口需兼容 /images/generations) | 可复用聊天 API |
只配置一组即可使用:未单独指定时按降级链自动挑选,auto 模式还会结合输入长度与意图,在同一渠道的多个模型之间选择。设置页可以管理多组 API 渠道。
密钥字段的约定:后端不会把你已保存的密钥回传给界面,输入框默认留空并标记「已设置」。留空保存 = 保持不变(只改模型名、温度等不会影响密钥);若要删除某个密钥,点该字段的「清除」按钮再保存。
语言
界面语言与项目写作语言相互独立,各自切换并保存。
界面语言只影响按钮与标签的文案;写作语言会写进系统提示词,决定模型用什么语言创作。你粘贴的作者原文与参考资料在任何语言设置下都保持原样,不被翻译或改写。系统提示词中的语言约定、结构化输出协议与作者事实优先级属于不可覆盖的合同,用户配置与写作模板都改不动它们。
当前内置简体中文与 English 两套界面文案,覆盖导航与主要状态提示,其余页面文案仍在补齐。
数据、隐私与边界
| 数据 | 位置 |
|---|---|
| 项目资料(设定、大纲、伏笔、正文、对话、报告、星图、爽爆点) | 你选择的工作区目录,纯文件存储(JSON / Markdown / HTML) |
| 模型配置与 API Key | ~/.moshen/.env |
| 工作区、灵感文件夹、语言与写作设置 | ~/.moshen/workspace.json |
几条约定:
- 墨参不提供模型额度,也不托管稿件;请求发往你自己配置的服务商。
- API Key 只保存在
~/.moshen/.env,接口不会把已保存的密钥回传给界面(一律以掩码返回);设置页只显示「已设置」状态,留空即保持不变。 - 文件写入采用原子替换(临时文件 + fsync + 重命名),读取-修改-写入序列串行执行,避免文件损坏与并发覆盖。
- 设定、大纲与伏笔记录带来源标注
author/ai;墨参不能覆盖你手工维护的内容,遇到冲突会提示,而不是悄悄改写。 - 自动巡检产生的条目观察默认只是收件箱里的待办,采纳后才会写进角色的阶段或别名,不会改动设定页。
- 对话中的写入分两类:标记触发的直接写入只覆盖设定、大纲、知识库;其余内容走待确认提案,需你点「加入」才会落地。
- 项目被重新打开后,旧窗口持有的会话租约立即失效,其写入会被拒绝,避免过期上下文污染新会话。
- 上下文按预算与优先级注入,被截断或省略的部分会显式告知模型与用户,不做静默丢弃。
项目结构
moshen/
├── electron/
│ ├── main.js # Electron 主进程(窗口管理 + Python 子进程)
│ ├── preload.js # 渲染进程桥接
│ └── splash.html # 启动页(品牌动画)
├── backend/
│ ├── server.py # 后端服务启动器(Electron 模式入口)
│ ├── desktop.py # 桌面入口(PyWebView 备选方案)
│ ├── main.py # FastAPI 应用与会话租约校验
│ ├── requirements.txt
│ ├── core/ # 核心层
│ │ ├── config.py # 多模型配置与渠道
│ │ ├── llm_provider.py # LLM 调用(流式、断流重试、结束原因)
│ │ ├── prompt_loader.py # 提示词加载
│ │ ├── context_manager.py # 四层上下文(请求级)
│ │ ├── context_builder.py # 分节预算组装与缺口说明
│ │ ├── safe_io.py # 原子写与写锁
│ │ ├── session.py # 项目会话租约
│ │ ├── file_parser.py # 文件解析(含 .docx)
│ │ ├── resource_path.py # 资源路径解析(开发 / 打包)
│ │ └── utils.py # 通用工具
│ ├── engines/ # 引擎层
│ │ ├── dialogue_manager.py # 对话编排
│ │ ├── intent_router.py # 意图路由
│ │ └── intervention.py # 主动干预评估
│ ├── knowledge/ # 知识层
│ │ ├── project_kb.py # 项目知识库
│ │ ├── flow.py # 章节创作流程状态机
│ │ ├── character_kb.py # 角色页:阶段 / 事件 / AI 观察收件箱
│ │ ├── plot_points.py # 爽爆点库与使用次数统计
│ │ ├── rules_kb.py # 创作规范库
│ │ ├── novel_analyzer.py # 可选拆书引擎
│ │ └── relation_graph_render.py
│ ├── analysis/ # 分析层
│ │ ├── base.py # 分析器基类(模板方法)
│ │ ├── tasks.py # 通用任务进度通道
│ │ ├── relation_graph_analyzer.py
│ │ ├── foreshadowing_analyzer.py
│ │ ├── character_stage.py # 角色分阶段解析
│ │ ├── style_profile.py # 本书出品风格档案(肖像风格一致性)
│ │ ├── chapter_split.py
│ │ ├── portrait.py
│ │ └── progress.py
│ ├── routes/ # 路由层
│ │ ├── chat.py # 对话
│ │ ├── writing.py # 写作、AI 审稿、保存后自动巡检、流程门禁
│ │ ├── character.py # 角色页与 AI 观察
│ │ ├── flow.py # 创作流程
│ │ ├── foreshadowing.py # 伏笔
│ │ ├── relations.py # 星图与出品风格档案
│ │ ├── settings_writer.py # 设定
│ │ ├── outline.py # 大纲
│ │ ├── plot_points.py # 爽爆点与 AI 使用次数检查
│ │ ├── knowledge.py # 知识库
│ │ ├── files.py # 文件与诊断
│ │ ├── workspace.py # 工作区与偏好
│ │ ├── project.py # 项目管理
│ │ ├── conversation.py # 对话历史
│ │ ├── tasks.py # 任务进度 SSE
│ │ └── session.py # 会话租约
│ └── prompts/ # 提示词模板
│ ├── system_persona/ # 墨参人格
│ └── system_contract/ # 不可覆盖的系统合同
├── frontend/
│ ├── index.html # Vue 3 前端(单文件)
│ ├── vue.global.js # Vue 3 运行时
│ ├── assets/ink/ # 启动动画与等待动画素材
│ └── vendor/three.min.js # three.js(关系图可视化)
├── tools/ # 动画素材处理脚本
├── moshen.spec # PyInstaller 打包配置
├── package.json # Electron + electron-builder 配置
├── start.bat # 开发模式启动脚本
└── README.md
技术栈
- 桌面:Electron + electron-builder
- 后端:Python 3.10+ / FastAPI / uvicorn / PyInstaller
- 前端:Vue 3(单文件 HTML)+ three.js
- 模型:OpenAI 兼容接口,流式输出,具备断流重试与结束原因识别
- 存储:工作区文件,原子写 + 写锁
已知限制
- 不生成正文,也不提供"一键成书";选题、创意与事实核查仍由你负责。
- 星图分析、文风诊断与拆书蒸馏的质量取决于所配模型,结论需要你复核。
- 人物肖像需要兼容
/images/generations的接口,未配置时该项不可用。 - 界面文案仅覆盖简体中文与 English,且英文覆盖尚不完整。
- 安装包尚未代码签名,Windows 可能显示发布者信誉提示。
- 当前只提供 Windows 构建。
参与开发
欢迎提交 issue 与 PR。提交前请确认:
- 后端可编译:
python -m compileall backend - 前端内联脚本语法正确;
- 若改动版本号,需同步
package.json、backend/main.py(FastAPI 与/api/health)、frontend/index.html三处。
致谢
架构与产品思路受以下开源项目启发:
- tianming-skill by 子夜
- harnessNovel by XTmingyue
- AI-Novel-Writer by EthanYoQ