Skip to content

Vela v0.2.6

Choose a tag to compare

@github-actions github-actions released this 10 Oct 07:31
· 6 commits to master since this release

改进

  • 编辑器选中文本的 AI 操作(润色 / 扩写 / 续写 / 对话)全面加强:
    • 硬约束:只改表达、不改事实(人名、设定、能力、位置、伤势、物品、已发生事件、人物关系),保持视角/人称/文风一致,不做与要求无关的改写。
    • 自动带上选区前后的上下文(前 400 字 / 后 200 字,标注为「仅作参考、不要改写」),改写在语境里更贴,续写不再凭空开始。
    • 「续写」改为把结果插入到选区之后,不再覆盖原文;按钮文案在「替换 / 插入」之间随动作切换。
    • 生成中可「停止」(真正中断请求并保留已生成部分),完成后可「重新生成」;关闭预览也会中断请求。
    • 预览面板新增「补充要求」输入框:可临时追加一条额外指令(如「再克制一点」「少用排比」),回车即按新要求重新生成。
    • 精修类动作(润色 / 扩写 / 对话)走「精修」用途模型,续写走「生成」用途模型,和设置页的用途绑定一致。
    • 生成时关闭模型思考,各动作的提示词分别细化(润色保长度、扩写不加情节转折、续写只推进当前场景、对话区分角色语气)。
  • 新增「去 AI 味」动作:针对 8 类 AI 痕迹(模板化转折、清单式罗列、神态/内心套话、万能副词堆叠、句长过于均匀、对白标签单一、排比式说明、段尾总结)做语义改写,长短句交错、用动作代替宣告,不新增情节、不改动事实。
  • 「润色」提示词同步加入反 AI 腔要求(避免排比成串、段尾总结与高频套话)。
  • 选区 AI 预览新增「对比 / 结果」切换:默认用逐词对比标出改了什么(新增绿底、删除红底加删除线),并给出「N 处改动 · +X / -Y 字」的统计,不用整段替换也能看清改了哪些字。「续写」是新增内容,不存在可对比的原文,仍只显示结果。
  • 选区 AI 预览新增「逐条」视图:每处改动单独列出(原文 → 改写)并可逐个勾选,「全选 / 全不选」一键切换;点「替换所选」只把勾选的改动写回去,未勾选的位置保持原文——满意的部分采纳、不满意的部分留原样,不必整段替换。
  • 对比只在生成结束后计算(流式过程中每来一段都重算会拖慢预览),文本超过 2 万字时退化为「整段替换」标记,不会把界面拖住。
  • 差异对比统一成一套内核(services/text-diff):选区润色的逐词对比与整章修稿的三栏合并共用同一份实现。段落级对齐算法从合并组件原样搬移(逐行比对确认 DP 与权重一行未改,行为不变),并补了回归测试锁住对齐结果。
  • 整章修稿的三栏合并现在会在变更块内部标出「改了哪几个字」:原稿侧删除线、修稿侧加色;相似度太低(相当于整段重写)的变更块不做逐词标注,避免满屏彩色反而看不清。
  • 删除两个从未被任何地方引用的死文件(DiffViewer / MonacoDiffViewer),项目里只剩一套真正在用的对比实现。
  • 助手改正文不再弹窗确认:revise_story(联动调整剧情)与 rewrite_draft(改写整章正文)都改成直接写入。改正文时工具会自动声明,不必再由模型记得设置 edit_written_text,也不会再因为漏设而整次失败。防误改的约束仍在仓储层:已定稿/归档正文不可覆盖、读到写入之间内容被改过会重读重试、整次要么全写要么不写;每次改动都记录前后内容,可用「剧情调整记录」里的 id 撤回。
  • 修复本地向量模型(Ollama 等)完全不生效的问题:以前用「有没有 apiKey」判断要不要做向量化,本地推理不填密钥就被当成「没有向量模型」——导入时不写向量、检索时也不算查询向量,语义检索永远退化成关键词匹配(本地向量模型等于白配)。现在按 provider / 能力判断(Ollama 或声明了向量能力的模型即可用),并且空密钥不再发送空的 Authorization 头;导入、拆书、检索三条路径一并修正。
  • 内置「去 AI 味」方法升级为 Humanizer-zh v2.5.1 的中文小说改编版:在原有的「先判断再动手」框架上,并入它的 29 条模式清单(意义膨胀、宣传腔、模糊归因、挑战展望模板、权威措辞、积极结论、否定式排比、三段式、同义词循环、系动词回避、虚假范围、被动与无主语、滑尾分析、预告式语句、AI 高频词、过度限定、填充短语、破折号等)、五条核心原则(删填充 / 拆公式 / 变节奏 / 信读者 / 删金句)与交稿前自检清单。改编为精简版(约 2.4k 字)以控制按段注入的 token 成本,保留小说最该盯的三类:神态套话、万能副词堆叠、段尾总结旁白。想要带完整示例的原版,把它的 SKILL.md 放到 ~/.vela/skills/de-ai-tone/SKILL.md(并把开头 name: 改成 de-ai-tone)即可整体替换内置方法。来源与 MIT 许可见 THIRD-PARTY-NOTICES.md。
  • 选区 AI 的「去 AI 味」动作同步补上 Humanizer 的其余模式:意义膨胀与广告腔、否定式排比与系动词回避、权威措辞与填充语、破折号滥用与 emoji/粗体/英文引号。
  • 去 AI 味改写的分段预算改为按方法实际长度动态预留:方法来自可替换的 Skill,用户可能换成任意长度的 SKILL.md,写死预留(2500)会在换成长方法后把单次请求撑爆。
  • 拆书列表的向量状态改为按知识库现状实时判断(原来存的是导入当时的快照,之后在知识库页补过向量也不会变,会出现「明明补好了还写着仅全文检索」)。文案同步改为「仅全文检索(未生成向量)」——原来的「未配置 Embedding 模型」在配了本地模型却没生成向量时会误导。

修复

  • 修复选中文本的 AI 操作会把模型思维链(<think>…</think>)带进预览、点「替换」时写进正文的问题;并补上 onDone / onTruncated,长选区被截断时保留已产出内容而不是直接报「生成失败」,同时给出截断提示,避免把不完整的改写替换进正文。
  • 修复气泡菜单的定位:紧贴窗口边缘时会溢出编辑器可视区;现在按实测尺寸做水平贴边,上方空间不足时改在选区下方展开,高面板也不会被窗口裁掉。
  • 修复预览面板打开后把光标点回编辑器,会导致后续选中再也弹不出 AI 菜单的问题(现在会放弃该次预览并中断后台请求)。
  • 修复写作第 1 章时提示词里「本章信息 / 后续章节蓝图 / 作者微操指导」三段没有被赋值的问题:模型收到的提示词里只有 {{chapter_info}} 这类占位符,等于既没有本章章纲、也没有后续大纲约束,开篇容易跑偏。现在第 1 章与后续章节一样会注入这三段内容(这几段此前被误划进「非首章」分支)。
  • 修复整章「AI 修稿」的「文风要求」一直没有注入(提示词里残留 {{writing_style}})的问题,精修不再缺少文风锚点。
  • 提示词构建新增兜底:模板里任何未被赋值的 {{变量}} 都会从提示词中移除,不再让模型把占位符当作正文内容;同时在工作流日志里明确提示是哪个提示词、哪些变量没赋值(主要用于发现自定义提示词里写错变量名)。
  • 新增回归测试:校验每个提示词调用点都给模板变量赋了值,且构建结果不残留占位符。
  • 修复知识库关键词检索:查询里只要出现一个单引号(或百分号、下划线这类 LIKE 通配符),拼出来的 text LIKE 谓词就会失效,检索整体报错并静默返回空——写作时等于完全没有知识库上下文。现在改为先把查询拆成最多 8 个安全关键词(单引号、%、_、反斜杠一律剔除,词长与会话数都有上限),再用 OR 组合匹配。
  • 修复带章节范围的知识库检索会把关键词条件顶掉的问题:where() 是覆盖式调用,第二次调用会把 LIKE 条件替换成纯章节范围,于是返回该范围内的任意文本块。现在拼成一个 (关键词 OR …) AND (章节范围) 谓词。
  • 知识库检索结果改为按命中关键词数排序,相关度按命中比例给出(此前固定 0.5,界面上看不出差别);若过滤条件本身失效,会退化为本地匹配而不是直接返回空。
  • 修正 vector-store 头部注释:中文检索并非 BM25 全文检索,而是 DataFusion LIKE 模糊匹配。
  • 助手改写「已写正文」改为请作者确认:revise_story 只在本次真的动正文时才弹确认,作者同意后才落盘;整章改写 rewrite_draft 在开始执行前也会先确认。以前靠模型自己记得设置 edit_written_text,漏设就整次失败。
  • 剧情调整支持用章节号定位草稿:以前 draft 只能用内部草稿编号,编号猜错就是「内容不存在」,整次调整白跑。现在编号不是草稿 id 时会退化为「该章最新的草稿」(编号本身就是草稿 id 时行为不变),调整记录里存的也是解析后的真实编号,撤回不会找错目标。
  • 「内容不存在」现在会列出当前真正可用的内容(草稿编号与对应章节、已有蓝图的章节、已登记角色),助手可以自己改对,不必再让作者手动排查。
  • 读到写入之间作者又保存过导致的「已有更新」不再整次失败:会自动重读最新版本重试一次;如果目标片段确实已经对不上,仍然整次不写,并明确提示需要重新读取。
  • 修复整章「AI 修稿」把模型附带的说明写进正文的问题:以前只有「审稿驱动修稿」会剥离【修复说明】【待作者确认】,整章修稿这条路径只剥离了思维链,于是说明段落会被当成正文写进修订稿、出现在 diff 里(自定义修稿提示词要求在结尾附【待作者确认】时尤其明显)。现在两条路径共用同一套剥离逻辑,说明会被收集并在日志里提示,不会进入正文;如果模型只返回了说明、没有正文,直接报错不做无意义保存。
  • 整章「AI 修稿」的内置提示词补上去 AI 腔要求(禁止清单式罗列、排比式设定倾泻、段尾总结、神态/内心套话、万能副词堆叠、对白标签单调,要求长短句参差、金句最多 1 句),并明确「说明请放在正文之后、用【修复说明】或【待作者确认】开头」——这样与用户自定义提示词的要求一致,不会被当成正文。该约束写在内置模板的 systemSuffix 里,即使覆盖了自定义修稿提示词也依然生效。
  • 修复合并窗口的一个显示缺陷:变更块两侧行数不同(段落合并 / 拆分)时,逐词高亮会串行取到另一侧的内容,现在按「每一侧」分别切分行。