Skip to content

linhut/document-ai-assistant

Repository files navigation

AI 公文智能优化助手

AI Document GB/T 9704

Official Document AI Assistant
基于 GB/T 9704 标准的公文格式智能检测与优化桌面应用

version python node electron license tests stars forks

功能界面 · 功能特性 · 快速开始 · 技术架构 · AI 配置 · 项目结构 · 社区与友链 · 开发日志


🖥 功能界面

工作台 文档处理
工作台 文档处理
校审中心 模板中心
校审中心 模板中心
AI 配置 关于
AI 配置 关于
关于-详情

📋 功能特性

  • 格式检测 — 依据 GB/T 9704 标准自动检查公文格式(字体、字号、缩进、行距、页边距等),190 条检查规则
  • 智能修复 — 一键自动修复格式问题,180 条修复规则,生成优化后的 .docx 文档
  • AI 深度分析 — 接入大模型进行语义级分析,按 22 种文种定制检查规则,发现规则引擎无法识别的问题
  • 22 种文种 — 支持通知、报告、请示、会议纪要、决定、决议、函、通报等全部法定公文文种
  • 多 AI 服务商 — 支持 DeepSeek、通义千问、智谱、Moonshot、MiniMax、腾讯混元、豆包等 23+ 服务商
  • AI 建议应用 — AI 发现的问题可勾选后一键应用到文档
  • 模板管理 — 内置官方模板 + 自定义模板,支持三级优先级合并
  • A4 实时预览 — 左右分栏布局,左侧格式设置 + 右侧 A4 预览,支持版头版记、Markdown 转公文、表格渲染
  • Markdown 转公文 — 识别 # 标题、加粗、列表、表格等 Markdown 语法并自动转为公文格式
  • AI 模型监控 — 每 60 秒自动检测所有已配置 AI 模型的可用性,实时显示在线状态和延迟
  • 格式提取器 — 从已有文档中提取格式信息,自动生成规则模板
  • 本地运行 — 数据不离开本机,API Key 加密存储

方式一:一键启动(Windows)

双击 启动应用.bat,自动安装依赖并启动。

方式二:手动启动(Windows / Linux / 信创)

# 1. 克隆仓库
git clone https://github.com/linhut/document-ai-assistant.git
cd document-ai-assistant

# 2. 启动后端
cd backend
pip install -r requirements.txt
python main.py

# 3. 启动前端(新终端)
cd frontend
npm install
npm run electron:dev

环境要求

依赖 版本 说明
Python >= 3.12 下载地址
Node.js >= 20 下载地址

构建桌面安装包

# Windows
cd frontend
npm run electron:build:preview
# 输出: frontend/release/AI公文智能优化助手 Setup X.X.X.exe

# Linux x86_64 (需在 Linux 环境执行)
npm run electron:build:linux
# 输出: frontend/release/*.AppImage + *.deb

# Linux ARM64 (鲲鹏/飞腾,需在对应架构执行)
npm run electron:build:linux:arm64

信创环境部署指南

以下指南覆盖 UOS、银河麒麟、OpenEuler 等主流信创系统,提供从环境搭建到应用启动的完整步骤。

一、UOS / Deepin(x86_64)

# 1. 安装系统依赖
sudo apt update
sudo apt install -y python3 python3-pip python3-venv nodejs npm libreoffice-common fonts-wqy-zenhei

# 如果 Node.js 版本低于 20,需安装 nvm 升级:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 20
nvm use 20

# 2. 安装公文字体(项目自带)
sudo mkdir -p /usr/share/fonts/custom
sudo cp TTF/*.TTF /usr/share/fonts/custom/ 2>/dev/null
sudo cp TTF/*.ttf /usr/share/fonts/custom/ 2>/dev/null
sudo fc-cache -fv

# 3. 克隆项目
git clone https://github.com/linhut/document-ai-assistant.git
cd document-ai-assistant

# 4. 创建 Python 虚拟环境并安装依赖
cd backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# 5. 启动后端(后台运行)
nohup python main.py > ../backend.log 2>&1 &

# 6. 启动前端
cd ../frontend
npm install
npm run electron:dev

# 7. .doc/.wps 转换依赖 LibreOffice(apt 已安装)
# 后端会自动调用 libreoffice --headless 进行格式转换

二、银河麒麟 Kylin(ARM64 鲲鹏/飞腾)

# 1. 安装系统依赖
sudo apt update
sudo apt install -y python3 python3-pip python3-venv nodejs npm libreoffice-common fonts-wqy-zenhei

# Node.js 升级到 20+(Kylin 自带版本可能较低)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 20
nvm use 20

# 2. 安装公文字体
sudo mkdir -p /usr/share/fonts/custom
sudo cp TTF/*.TTF /usr/share/fonts/custom/ 2>/dev/null
sudo cp TTF/*.ttf /usr/share/fonts/custom/ 2>/dev/null
sudo fc-cache -fv

# 3. 克隆项目
git clone https://github.com/linhut/document-ai-assistant.git
cd document-ai-assistant

# 4. Python 环境
cd backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# 5. 启动后端
nohup python main.py > ../backend.log 2>&1 &

# 6. 启动前端
cd ../frontend
npm install
npm run electron:dev

三、OpenEuler / Anolis(x86_64 / ARM64)

# 1. 安装系统依赖(OpenEuler 使用 dnf)
sudo dnf install -y python3 python3-pip nodejs npm libreoffice-core libreoffice-writer wqy-zenhei-fonts

# Node.js 升级
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 20

# 2. 安装公文字体
sudo mkdir -p /usr/share/fonts/custom
sudo cp TTF/*.TTF TTF/*.ttf /usr/share/fonts/custom/ 2>/dev/null
sudo fc-cache -fv

# 3. 克隆项目
git clone https://github.com/linhut/document-ai-assistant.git
cd document-ai-assistant

# 4. Python 环境
cd backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# 5. 启动后端
nohup python main.py > ../backend.log 2>&1 &

# 6. 启动前端
cd ../frontend
npm install
npm run electron:dev

四、龙芯 MIPS64 / 申威 SW64(纯 Web 模式)

龙芯/申威架构上 Electron 不可用,使用纯 Web 模式:后端本地运行 + 浏览器访问。

# 1. 安装 Python(龙芯 loongnix 自带,申威需编译安装)
sudo apt install -y python3 python3-pip python3-venv libreoffice-common

# 2. 克隆项目
git clone https://github.com/linhut/document-ai-assistant.git
cd document-ai-assistant

# 3. Python 环境
cd backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# 4. 启动后端(监听 0.0.0.0 支持局域网访问)
python main.py

# 5. 打开系统自带浏览器(Firefox / 360 安全浏览器)
# 访问 http://127.0.0.1:8765 即可使用

信创环境注意事项

事项 说明
公文字体 项目 TTF/ 目录包含 3 个核心字体(仿宋_GB2312、方正小标宋简、楷体_GB2312),安装后执行 fc-cache -fv
格式转换 .doc/.wps.docx 依赖 LibreOffice headless,信创系统通常预装 WPS 或 LibreOffice
AI 功能 需联网访问 AI 服务商 API(DeepSeek/通义千问等),信创内网环境需配置代理或使用 Ollama 本地模型
Node.js 版本 Electron 35 需要 Node.js >= 20,信创系统自带版本可能较低,用 nvm 升级
Pydantic 兼容性 龙芯/申威上如遇 Pydantic v2 编译失败,可降级:pip install 'pydantic<2'
防火墙 局域网访问需开放 8765 端口:sudo firewall-cmd --add-port=8765/tcp --permanent

🏗 技术架构

Electron Shell
  ├── React 19 + TypeScript + Vite + TailwindCSS + Radix UI
  │     ├── A4 实时预览(左右分栏:设置面板 + 实时渲染)
  │     ├── 校审中心(规则检查 + AI 分析 + 分组合并显示)
  │     └── Markdown 转公文(标题/加粗/列表/表格 → Word 格式)
  └── FastAPI Backend (Python 3.12+)
        ├── Document Pipeline: Parse → Check → Fix → Generate
        │     ├── Parser: 段落/Run/表格/版头版记/行距(EMU→pt)
        │     ├── Generator: 段落替换 + 表格定位插入(insert_after_index)
        │     └── Modifier: 加粗范围裁剪/Markdown转换/标点规范化
        ├── Rule Engine: 190+ 条检查 + 180+ 条修复 (YAML 配置)
        │     └── 三级合并: official < custom < user
        ├── AI Manager: 23+ 服务商 (Strategy 模式)
        │     └── 模型健康检测: 每 60s 自动探测可用性 + 延迟
        └── SQLite: 文档、检查结果、AI 配置(Fernet 加密)
类别 技术
前端框架 React 19 + TypeScript + Vite
UI 组件 Radix UI + TailwindCSS
桌面壳 Electron 35
后端框架 FastAPI (Python 3.12+)
文档处理 python-docx(解析/生成/修改)
数据存储 SQLite + SQLAlchemy
AI 接入 OpenAI 兼容协议 + Anthropic Claude (Strategy 模式)
预览渲染 A4 实时预览(版头版记/表格/Run级加粗)
规则配置 YAML(三级合并继承:official < custom < user)

🤖 AI 配置

在应用内「AI 配置」页面选择服务商并填入 API Key,支持:

服务商 默认模型 说明
DeepSeek deepseek-chat 国产首选,性价比高
阿里云百炼 qwen-turbo 通义千问系列
智谱 AI glm-4-flash GLM 系列
Moonshot moonshot-v1-8k Kimi 长上下文
豆包 / 火山方舟 doubao-1.5-pro 字节跳动
MiniMax MiniMax-Text-01 海螺 AI
腾讯混元 hunyuan-lite 腾讯
OpenRouter openai/gpt-4o-mini 聚合 100+ 模型
Ollama qwen2.5:7b 本地模型,无需联网
自定义 任意 OpenAI 兼容接口

📂 项目结构

├── backend/                    # Python 后端
│   ├── api/routes/             # FastAPI 路由 (9个: documents/check/optimize/ai/settings/templates/rules/template_download/office)
│   ├── core/document/          # 文档处理
│   │   ├── parser.py           #   解析器 (段落/Run/表格/版头/行距EMU转换)
│   │   ├── generator.py        #   生成器 (段落替换 + 表格定位插入)
│   │   ├── modifier.py         #   修改器 (加粗范围/Markdown转换/标点规范化)
│   │   ├── models.py           #   数据模型 (DocumentModel/Table/Paragraph/Run)
│   │   └── format_extractor.py #   格式提取器 (从文档生成规则模板)
│   ├── core/rules/             # 规则引擎 (加载/检查/修复/管理)
│   ├── ai/                     # AI Provider 架构 (OpenAI/Claude/DeepSeek/Ollama/Custom)
│   ├── services/               # 业务服务
│   │   ├── document_service.py #   文档处理编排
│   │   └── model_health.py     #   模型可用性定时检测 (60s)
│   └── db/                     # 数据模型 (Document/AIConfig/CheckResult)
├── frontend/                   # Electron + React 前端
│   ├── electron/               # Electron 主进程 (main.ts/preload.ts)
│   └── src/
│       ├── pages/              # 页面 (Workspace/CheckCenter/EnhancedA4Preview/AISettings/Templates/...)
│       ├── components/         # 组件 (A4PreviewModal/Sidebar/PageHeader/ui/*)
│       ├── hooks/              # 自定义 Hooks (useDocumentConfig)
│       ├── api/                # API 客户端 (axios + 拦截器)
│       └── lib/                # 工具库 (cn/utils/ai-status)
├── rules/official/             # 22 种文种 YAML 规则 (_common.yaml + 类型特定)
├── templates/                  # 公文模板 (official + user)
└── tests/                      # 自动化测试

📊 与同类工具对比

维度 本项目 AIPoliDoc 小恐龙公文助手
AI 分析 ✅ 23+ 服务商 ✅ 仅 DeepSeek ❌ 无
规则检查 ✅ 190 条规则 ❌ 无 ❌ 无
文种覆盖 22 种法定文种 学术论文为主 通用公文
独立运行 ✅ 桌面应用 ✅ 桌面应用 ❌ 需 Word
开源 ✅ MIT ✅ MIT ❌ 闭源
自动修复 ✅ 180 条修复规则 ✅ 格式化
AI 建议应用 ✅ 勾选应用
测试覆盖 ✅ 39 个测试

❓ FAQ

Q: 启动后提示"无法连接到后端服务"? A: 确认后端已运行(终端显示 Uvicorn running on http://127.0.0.1:8765)。如果端口被占用,运行 python main.py --force

Q: AI 分析报错 429(限流)? A: API 请求频率超限,系统会自动重试(最多 5 次)。等待 1-2 分钟后重试,或切换到其他 AI 服务商。

Q: 优化后的文档字体不对? A: 请确保系统安装了公文字体(仿宋_GB2312、黑体、楷体_GB2312、方正小标宋简体)。TTF 目录下有字体文件,双击安装即可。

Q: 如何添加自定义规则? A: 在「规则管理」页面可以查看和编辑规则。自定义规则保存在 data/user_rules/,优先级高于官方规则。

Q: 支持哪些文档格式? A: 支持 .docx.doc.wps 三种格式。.doc.wps 文件会自动转换为 .docx 后处理。


📝 开发日志

详见 CHANGELOG.md


🤝 社区与友链

感谢以下开源项目和社区对本项目的支持与启发

LinuxDo

LinuxDo

python-docx FastAPI Electron React

GB/T 9704 Star


📄 许可证

MIT License