我做了一款软考 AI 笔记客户端:本地记笔记、论文计字,写完还能让 AgentScope 评分润色
备考软考这几年,我最烦两件事:
一是知识点散落在各种文档、云笔记、截图里,换台电脑就找不到;
二是下午论文,摘要卡 300 字、正文卡 2000~2500 字,Word 里数格子既不准又折磨人。写完还得自己对照评分标准抠「切题、实践、结构、表达」。
所以我做了软考通:一款本地优先的软考备考笔记桌面端。它不只是记笔记,论文练习时实时按软考习惯统计字数,写完还可以交给 AI 评分、润色,并给出修改意见。
技术栈很克制:
- 桌面端:Vue 3 + TypeScript + Electron
- AI 后端:Spring Boot +AgentScope 2.x(Java)
- 数据:笔记全部落本地 Markdown,不登录、不上传
需要源码的同学可以私信我。
一、它到底能干什么
| 能力 | 说明 |
|---|---|
| 分学科 | 架构、高项、软设、网工、库工等常见科目一键切换 |
| 本地仓库 | 自己选一个文件夹当笔记根目录,应用按科目自动建目录 |
| 知识点笔记 | 富文本工具栏(标题 / 字号 / 对齐 / 下划线 / 列表),保存为 Markdown |
| 截图粘贴 | 粘贴或拖入图片,存到assets/,Markdown 里引用相对路径 |
| 论文练习 | 题目、摘要、正文分块编辑;摘要 ≤300 字,正文建议 2000~2500 字 |
| 字数统计 | 汉字 1 字、英文/数字整词 1 字、标点 1 字,贴近考场习惯 |
| AI 润色 | 可单独润色摘要、正文,或一次润色全部 |
| AI 评分 | 按 75 分制打分(≥45 合格),给维度分、优点和改进建议 |
| 拖动排序 | 笔记列表原生拖拽,顺序写入.order.json |
不启动 AI 后端时,记笔记、写论文、打包安装包照样能用。AI 是可选插件,不是强绑定。
二、为什么做成桌面端,而不是又一个 Web 笔记
备考资料往往带项目经历、架构图、论文底稿,我不希望默认就上云。
所以产品原则是:
- 本地优先:选一个文件夹,笔记就是普通
.md,VS Code、Typora、Obsidian 都能打开。 - 无登录:打开就能写,配置只记「根目录 + 上次科目」。
- AI 解耦:桌面端只负责编辑和展示;评分 / 润色走本机 HTTP(默认
127.0.0.1:9001)。
目录约定很简单:
你的目录/ architect/ # 系统架构设计师 notes/ # 知识点 .md notes/assets/ # 截图 notes/.order.json essays/ # 论文练习 .md essays/assets/ essays/.order.json pm/ # 高项 notes/ essays/ ...
论文落盘时按固定结构组装,方便以后用别的编辑器继续改:
--- title: "论大模型智能运维技术及应用" type: essay updatedAt: "2026-08-15T12:00:00.000Z" --- # 论大模型智能运维技术及应用 ## 题目描述 (首行题目名 + 下方题目背景与写作要求) ## 摘要 …… ## 正文 ……
三、整体架构
┌─────────────────────────────────────────────┐ │ 软考通 桌面端 │ │ Vue 3 + Pinia + Vue Router(渲染进程) │ │ ↕ preload + contextBridge │ │ Electron 主进程(fs / dialog / IPC) │ │ 读写本地 Markdown / 图片 │ └──────────────────────┬──────────────────────┘ │ HTTP JSON ▼ ┌─────────────────────────────────────────────┐ │ Spring Boot + AgentScope 2.x │ │ POST /api/ai/essay/polish 论文润色 │ │ POST /api/ai/essay/score 论文评分 │ │ ReActAgent(无记忆、无工具,一次一评) │ └─────────────────────────────────────────────┘
进程划分:
| 层 | 技术 | 职责 |
|---|---|---|
| 渲染进程 | Vue 3、Pinia、marked / turndown | UI、字数、论文结构、调 AI |
| 预加载 | contextBridge | 只暴露受控window.api,不把 Node 直接塞给页面 |
| 主进程 | Electron + Nodefs | 选目录、读写笔记、存图、排序 |
| AI 服务 | Java AgentScope 2.x | 按软考论文标准润色、打分 |
工程用electron-vite把主进程、preload、渲染进程打在一起,开发时热更新,发布用electron-builder打 Mac DMG / Windows 安装包。
四、论文练习:结构拆开,字数按考场习惯算
软考论文不是「一个大文本框」。客户端拆成三块:
- 题目:首行当题目名称,下面贴题目描述和要求
- 摘要:硬限制 300 字
- 正文:建议 2000~2500 字,底部实时变色提示
字数规则刻意贴近考场,而不是text.length:
- 中文每个汉字计1
- 英文 / 数字连续串(整个单词)计1,中间加空格就变成两个词
- 标点计1
- 空白不计
界面上摘要超 300 会标红禁止保存;正文落在 2000~2500 显示为合适区间。
打开 / 保存 / AI 润色之后,还会做一次「章节消毒」:摘要框里如果误带了## 正文,会截断,避免三个框互相污染。这对从 Word 粘贴、或模型偶尔把结构标题一起吐出来特别有用。
知识点笔记走另一条路:contenteditable编辑,保存时turndown转 Markdown,打开时marked转回 HTML。标题只写 YAML frontmatter,正文不再重复插# 标题,避免每次保存叠一层标题。
六、AI 评分与润色:桌面端只负责「问」和「展示」
润色可以指定part:abstract/body/all。写回编辑器前同样走sanitizeEssayParts,防止模型把「## 摘要」这类结构标题带回来。
评分弹窗直接消费后端 JSON:
totalScore:总分,满分 75level:合格 / 不及格(≥45 合格)dimensions:切题、实践、结构、表达等维度分 + 评语strengths/improvements:优点和改进建议
七、后端:AgentScope 2.x Java 实现论文智能体
论文润色、评分都属于「一次任务、不要记忆」的场景。我没有用带 Redis 会话的长对话 Agent,而是每次请求新建一个ReActAgent:
- 无 Toolkit(不需要搜网页、不需要调工具)
- 无会话记忆、无压缩
- 系统提示词里写死软考论文规则
- 强制模型只吐 JSON,方便桌面端直接渲染
八、列表拖动排序:不引入第三方拖拽库
中间栏用原生draggable。拖动过程中 Pinia 即时换位,松手后把文件名数组写进.order.json。
九、几个做下来比较有用的点
- 笔记是 Markdown,不是私有库。卸载应用不会带走仓库;换编辑器也不怕被锁死。
- 字数规则要单独写。
length对英文单词和标点都不符合软考直觉,正则按「汉字 / 整词 / 标点」切一次就够用。 - AI 不要塞进 Electron 主进程。模型、提示词、JSON 解析都放 Java 服务里,桌面端保持可独立分发。
- 评分 Agent 不要记忆。论文是试卷,不是聊天。AgentScope 的 ReActAgent 很适合这种一次性任务。
- 模型输出要契约化。弹窗、维度分、优缺点列表全靠 JSON 字段,提示词里把 schema 写死,解析失败再兜底。
写在最后
软考通解决的是我自己备考时的真实摩擦:知识点要本地可检索,论文要能看见字数,写完还想有个「阅卷老师」给修改意见。
它不是又一个 ChatGPT 套壳,而是:
本地 Markdown 仓库 + 软考论文编辑器 + AgentScope 2.x 评分润色智能体。
前端 Vue 3 / Electron,后端 Java AgentScope 2.x,两边通过两个 HTTP 接口对接,结构很干净。
如果这篇文章对你有帮助,欢迎点赞收藏。
需要完整源码(桌面端 + AI 后端)的同学,私信我即可。
(配图建议:工作区全貌、论文字数条、AI 评分弹窗各一张。)
