三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

我做了一款软考 AI 笔记客户端:本地记笔记、论文计字,写完还能让 AgentScope 评分润色

我做了一款软考 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 笔记

备考资料往往带项目经历、架构图、论文底稿,我不希望默认就上云。

所以产品原则是:

  1. 本地优先:选一个文件夹,笔记就是普通.md,VS Code、Typora、Obsidian 都能打开。
  2. 无登录:打开就能写,配置只记「根目录 + 上次科目」。
  3. 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 / turndownUI、字数、论文结构、调 AI
预加载contextBridge只暴露受控window.api,不把 Node 直接塞给页面
主进程Electron + Nodefs选目录、读写笔记、存图、排序
AI 服务Java AgentScope 2.x按软考论文标准润色、打分

工程用electron-vite把主进程、preload、渲染进程打在一起,开发时热更新,发布用electron-builder打 Mac DMG / Windows 安装包。


四、论文练习:结构拆开,字数按考场习惯算

软考论文不是「一个大文本框」。客户端拆成三块:

  1. 题目:首行当题目名称,下面贴题目描述和要求
  2. 摘要:硬限制 300 字
  3. 正文:建议 2000~2500 字,底部实时变色提示

字数规则刻意贴近考场,而不是text.length

  • 中文每个汉字计1
  • 英文 / 数字连续串(整个单词)计1,中间加空格就变成两个词
  • 标点计1
  • 空白不计

界面上摘要超 300 会标红禁止保存;正文落在 2000~2500 显示为合适区间。

打开 / 保存 / AI 润色之后,还会做一次「章节消毒」:摘要框里如果误带了## 正文,会截断,避免三个框互相污染。这对从 Word 粘贴、或模型偶尔把结构标题一起吐出来特别有用。

知识点笔记走另一条路:contenteditable编辑,保存时turndown转 Markdown,打开时marked转回 HTML。标题只写 YAML frontmatter,正文不再重复插# 标题,避免每次保存叠一层标题。


六、AI 评分与润色:桌面端只负责「问」和「展示」

润色可以指定partabstract/body/all。写回编辑器前同样走sanitizeEssayParts,防止模型把「## 摘要」这类结构标题带回来。

评分弹窗直接消费后端 JSON:

  • totalScore:总分,满分 75
  • level:合格 / 不及格(≥45 合格)
  • dimensions:切题、实践、结构、表达等维度分 + 评语
  • strengths/improvements:优点和改进建议

七、后端:AgentScope 2.x Java 实现论文智能体

论文润色、评分都属于「一次任务、不要记忆」的场景。我没有用带 Redis 会话的长对话 Agent,而是每次请求新建一个ReActAgent

  • 无 Toolkit(不需要搜网页、不需要调工具)
  • 无会话记忆、无压缩
  • 系统提示词里写死软考论文规则
  • 强制模型只吐 JSON,方便桌面端直接渲染

八、列表拖动排序:不引入第三方拖拽库

中间栏用原生draggable。拖动过程中 Pinia 即时换位,松手后把文件名数组写进.order.json


九、几个做下来比较有用的点

  1. 笔记是 Markdown,不是私有库。卸载应用不会带走仓库;换编辑器也不怕被锁死。
  2. 字数规则要单独写。length对英文单词和标点都不符合软考直觉,正则按「汉字 / 整词 / 标点」切一次就够用。
  3. AI 不要塞进 Electron 主进程。模型、提示词、JSON 解析都放 Java 服务里,桌面端保持可独立分发。
  4. 评分 Agent 不要记忆。论文是试卷,不是聊天。AgentScope 的 ReActAgent 很适合这种一次性任务。
  5. 模型输出要契约化。弹窗、维度分、优缺点列表全靠 JSON 字段,提示词里把 schema 写死,解析失败再兜底。

写在最后

软考通解决的是我自己备考时的真实摩擦:知识点要本地可检索,论文要能看见字数,写完还想有个「阅卷老师」给修改意见。

它不是又一个 ChatGPT 套壳,而是:

本地 Markdown 仓库 + 软考论文编辑器 + AgentScope 2.x 评分润色智能体。

前端 Vue 3 / Electron,后端 Java AgentScope 2.x,两边通过两个 HTTP 接口对接,结构很干净。

如果这篇文章对你有帮助,欢迎点赞收藏。
需要完整源码(桌面端 + AI 后端)的同学,私信我即可。

(配图建议:工作区全貌、论文字数条、AI 评分弹窗各一张。)

← 返回列表