Files
zwt13703 e558733f05 init
2026-07-02 14:48:05 +08:00

2.8 KiB
Raw Permalink Blame History

doc-forge — AI 文档模板生成系统

项目概述

上传 Word 模板 → AI 自动解析段落(按标题样式切割)→ 用户标注段落配置 → 上传参考文件 → AI 多段落并行生成 → 预览编辑 → 导出 Word(保留原始样式)。

技术栈

技术 说明
前端 Vue 3.4 + TypeScript + Ant Design Vue 4.x + Pinia + Vite 5 web/
后端 Python 3.11+ + FastAPI + SQLAlchemy 2.0 async backend/app/
数据库 MySQL 8.0asyncmy 驱动) docker-compose mysql
对象存储 MinIO 存模板文件、参考文件、生成文档
Word 处理 python-docx 解析/导出
Excel 处理 openpyxl 解析参考文件

目录结构

doc-forge/
├── web/                 前端
│   └── src/
│       ├── views/       TemplateList, TemplateEditor, ModelManage, GeneratePage, HistoryPage, PreviewEdit
│       ├── components/  ParagraphList, ParagraphConfig, DocPreview, FileUploader, ModelModal, TestModal
│       ├── api/         Axiostemplate, model, generate
│       ├── stores/      Piniatemplate, model, document
│       └── router/      6 条路由
├── backend/
│   ├── app/
│   │   ├── models/      ORMtemplate, paragraph, ai_model, document, generation_log
│   │   ├── routers/     APItemplates, models, generate, export
│   │   ├── schemas/     Pydantic 校验
│   │   ├── services/    业务逻辑(parser, ai_service, generator, exporter, minio_client
│   │   └── main.py
│   ├── config.py        配置(MySQL + MinIO + AI
│   └── database.py      异步引擎
├── docs/                项目文档
├── docker-compose.yml   MySQL + MinIO + backend + web
├── init.sql             数据库建表 DDL
├── CLAUDE.md
└── AGENTS.md

关键约定

段落解析规则

  • 段落边界由 Word 标题样式(Heading 1~6)确定
  • 标题与下一标题之间的正文、表格归属到该标题段落
  • 表格独立存储为 is_table=True,归属于前一个标题

AI 输出格式

AI 必须返回结构化 JSON

{"content": [{"type": "text", "text": "..."}, {"type": "table", "headers": [], "rows": []}]}

文件存储

  • 所有文件存 MinIO,不存本地磁盘
  • bucket 分三类:templates / uploads / outputs
  • MinIO 开发环境在 docker-compose 中启动

AI 模型调用

  • OpenAI 格式:GPT-4o, DeepSeek-V3, 通义千问
  • Anthropic 格式:Claude 3.5 Sonnet
  • 超时 60s,最多重试 3 次,单文档最大并发 5

Word 导出

  • 从 MinIO 拉取原始模板 → 在内存中修改 → 上传回 MinIO
  • 样式完全保留(字体/颜色/行距/页边距/页眉页脚)