项目 local-style-writer —— 通过 QLoRA 学习个人写作风格,以本地 INT4 模型直接生成贴合用户笔风的原创内容,草稿全程零网络外联。我已开源到github,具体可访问(https://github.com/ruyuehao/local-personal-style-writer)

一、背景与痛点:创作内容的隐私与风格困境

内容创作者在借助云端大模型进行润色、扩写、改标题时,不可避免地需要将未发表的选题、内部材料输入第三方服务。由此带来两类核心问题:

  1. 数据隐私风险:未发表的观点与内部资料一旦进入外部服务器,创作者就面临信息泄露的风险,在团队协作与客户信息保护方面存在合规隐患。
  2. 风格同质化:通用大模型的输出普遍带有可被识别的"AI 腔调",难以承载创作者的长期个人品牌语调。

理想的写作助手需同时满足三个条件:仅本地运行(数据不出设备)、输出贴合个人风格、且可被便捷调用。传统方案中,"学习个人风格"依赖将数据上传训练,"数据不出端"则无法使用云端大模型,二者长期难以兼顾。本项目通过端侧推理实现了三者的统一,并且打包成skill供智能体调用。同时适配Intel的npu加速、底层用OpenVINO做推理引擎,相比原生方案(PyTorch/HuggingFace) prompt 处理快 2–4 倍、decode 持平;CPU 上快 2–3 倍,更加适合个人场景。已在qoder、workduddy上跑通。

二、技术路线:云端一次性训练,端侧异构推理

整体方案可概括为:云端通过 QLoRA 完成一次个性化微调,导出 INT4 量化模型,后续全部推理在端侧由 OpenVINO 于 NPU / GPU / CPU 上完成。

2.1 以 QLoRA 学习个人风格

风格特征无法通过提示词直接约束。本项目使用创作者历史文章作为训练数据,以 QLoRA 对 Qwen3-8B 进行个性化微调。该步骤在云端完成,属于低频一次性投入,训练结束后即不再需要。训练产物进一步导出为 INT4 精度 —— 8B 模型经量化后体积压缩至 4.6 GB,使其具备端侧部署的可行性。

2.2 自动化的异构设备调度

推理阶段采用 OpenVINO 的 AUTO 设备模式,由运行时依据本机实际可用的加速器(NPU / GPU / CPU)动态选择执行硬件。device_manager.py 在服务启动时探测可用加速器类型与系统内存容量,结合模型规格拼出最优的异构执行链:优先分配至 NPU,能力不足时回退至 GPU、CPU;当内存不足时自动剔除 NPU、仅保留 CPU。整个过程对用户零配置

这一机制带来直接收益:同一份 Skill 无需修改任何代码,即可在不同硬件配置的机器上自动匹配到合适的推理设备 —— 搭载 NPU 的 AI PC 走 NPU,仅具备核显的笔记本走 GPU,无独显设备回退至 CPU。

2.3 分层按需加载的模型架构

系统未采用单一大模型堆砌,而是构建了按职责解耦、按需加载的分层结构:

功能 体积 加载时机
Prompt 拼装 将需求组织为提示词 必选
RAG 检索(bge_int8,INT8) 从用户历史文章中检索参考 95 MB 按需启用
风格画像(JSON) 记录用户语气偏好 ~50 KB 按用户加载
风格分析(Qwen2.5-0.5B INT4) 文本风格分析 308 MB 必选
个性化生成(Qwen3-8B INT4) 正文生成 4.6 GB 必选

从 50 KB 的风格画像到 4.6 GB 的生成引擎,各模块各司其职、按需插拔。快速写作场景可跳过 RAG;当需要参考历史爆款文风格时,启用 load_rag 即可。

三、从 API 调用到 Skill 封装:生产力 Skill 的工程化

本项目参与 ModelScope × Intel × OpenVINO 主办的 Production AI Skills 大赛,大赛主题为"从智能体工作流迈向生产力 Skills"。基于此理念,系统并非"编写代码调用模型 API",而是将能力封装为标准件,由 Agent 在需要时主动调用。

项目是一个典型的 Model-as-Skill:自身不主动执行任务,而是静候 Qoder 触发。

name: local-style-writer
description: 端侧个性化内容生成助手。当用户说"帮我写一篇""用我的风格生成"
  "保持人味""团队风格统一""像我自己写的""保护未发表稿件"时使用。

关键在于,它并非仅在本机运行的本地脚本,而是携带 SKILL.md 契约的标准件。契约明确了能力范围与触发条件,Agent 据此自主决定是否调用。换言之,任何安装了 Qoder、置备好模型的用户,均可通过自然语言指令将其唤起,无需阅读源码或配置 OpenVINO。

这正是"生产力 Skill"与"个人脚本"的本质差异:脚本服务于个人,Skill 服务于所有潜在使用者。

实际运行中,在 Qoder 输入"给我整一篇 AI PC 的稿子"(该表述未精确命中上述任一触发词),Qoder 的 LLM 仍基于语义理解推断出应调用本技能,并自动触发 scripts\run.ps1,通过命名管道将请求送达本地服务。

调用链路如下:

用户: "帮我写一篇 AI PC 优势的文章,用我的风格"
      │
      ▼
  Qoder Agent  ── 解析意图 → 匹配 SKILL.md → 调起 run.ps1(命名管道)
      │
      ▼
  本地服务(命名管道 \\.\pipe\local-style-writer)
      ├─ 读取用户风格画像
      ├─ 懒加载 Qwen3-8B INT4 至 NPU
      ├─ [可选] RAG 检索历史文章 top-3 片段
      └─ 生成原创内容 → 返回用户

全程纯本地、零网络外联,无任何数据离开用户设备。从意图识别、本地推理到内容返回,该链路已完成端到端验证,而非演示原型。

四、总结

通过串联 QLoRA、INT4 量化与 OpenVINO 异构调度并在 NPU 上落地,本项目验证了:对于个性化写作场景,端侧推理并非妥协方案,而是更优解。它同时提供了其他方案难以兼顾的两项能力 —— 隐私保护与风格一致性。

创作者的草稿与文风,本就不应以让渡给云端服务器为代价。对于重视数据隐私与内容风格的创作者,端侧路径值得尝试。

如需从零完成"将模型训练为另一个自己"的完整流程(微调 + 导出),可参考配套教程《从零微调专属写作模型:QLoRA 个性化内容生成模型训练实践指南》(https://blog.csdn.net/ruyuehao/article/details/163002301?spm=1001.2014.3001.5501)

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐