Skip to content

Repository files navigation

ai_toubiao · AI 标书自动生成系统

CI Docs License

本仓库承载 AI 标书自动生成系统 的产品调研、需求分析、架构设计与后端/前端实现代码。

📘 在线文档(GitHub Pages)https://growdu.github.io/ai_toubiao/

系统架构

flowchart TB
    %% 客户端
    subgraph CLIENT["客户端(Web / Desktop)"]
        UP["上传 RFP + 材料"]
        HIL["人在回路交互<br/>3 个暂停点"]
        DL["下载 Word / PDF"]
    end

    %% API
    API["API 网关<br/>Gin + JWT + 限流"]

    %% 核心服务
    subgraph SERVICES["核心服务"]
        ORCH["编排服务<br/>状态机 + 调度 + HIL"]
        KB["知识库服务<br/>检索 + 证据链 + pgvector"]
        DOC["文档服务<br/>Word 模板 + 渲染"]
        AUDIT["审计服务<br/>合规 + 一致性 + 废标项"]
        TEMPLATE["模板服务<br/>Word 模板管理"]
        BILLING["账单服务<br/>预算 + 交易记录"]
        NOTIFY["通知服务<br/>邮件/钉钉/企微"]
    end

    %% 任务队列
    subgraph QUEUES["任务队列(Asynq + Redis)"]
        QP["planner-q"]
        QC["chapter-q<br/>默认 10 并发"]
        QA["auditor-q"]
        QX["export-q"]
    end

    %% AI
    subgraph AI["AI 路由层"]
        LLM["LLM Router<br/>多 provider + Prompt 缓存"]
    end

    %% 图表
    subgraph ILL["图表渲染层"]
        M["Mermaid"]
        IAI["DALL-E 3"]
        MT["go-echarts"]
        TB["自实现表格"]
    end

    %% 存储
    subgraph STORE["存储"]
        PG[("PostgreSQL<br/>元数据 + 向量")]
        RD[("Redis<br/>队列 + 锁 + 缓存")]
        S3[("S3 / MinIO<br/>章节 + 图表 + Word/PDF")]
    end

    %% 主流程
    UP --> API
    HIL --> API
    API --> ORCH
    API --> DOC
    API --> KB
    API --> AUDIT
    API --> TEMPLATE
    API --> BILLING
    API --> NOTIFY

    ORCH --> QP
    ORCH --> QC
    ORCH --> QA
    ORCH --> QX

    QC --> KB
    QC --> LLM
    QC --> ILL
    QA --> LLM
    QX --> DOC

    LLM -.->|"HTTPS"| LLMEXT[("Claude / DeepSeek / GPT")]

    ORCH --> PG
    ORCH --> RD
    KB --> PG
    DOC --> S3
    ILL --> S3

    DOC --> DL

    classDef external fill:#fff,stroke:#999,stroke-dasharray: 5 5
    class LLMEXT external
Loading

主输出格式:Word(.docx),PDF 为衍生品(LibreOffice headless 异步生成)。

技术栈

层级 技术
后端 Go 1.22 + Gin
前端 React 18 + TypeScript + Vite + Tailwind CSS
数据库 PostgreSQL + pgvector
任务队列 Asynq + Redis
AI 路由 Anthropic / OpenAI / DeepSeek 多 Provider 路由
文档生成 unioffice (Word)
图表 Mermaid + go-echarts
部署 Docker Compose

项目结构

ai_toubiao/
├── backend/                    # Go 后端(微服务)
│   ├── services/
│   │   ├── api-gateway/       # API 网关(认证、限流、路由)
│   │   ├── project-svc/       # 项目管理
│   │   ├── router-svc/        # AI 路由(多 Provider)
│   │   ├── workflow-svc/     # 工作流编排(状态机)
│   │   ├── document-svc/     # 文档解析与导出
│   │   ├── knowledge-svc/     # 知识库(RAG + pgvector)
│   │   ├── audit-svc/       # 合规审查
│   │   ├── template-svc/     # Word 模板管理
│   │   ├── billing-svc/      # 账单与预算
│   │   ├── notify-svc/       # 通知服务
│   │   └── doc-gen/          # 文档生成内核(CLI + HTTP 服务)
│   ├── shared/               # 共享包(db、logger、tenant、httperr)
│   └── migrations/          # 数据库迁移(goose)
├── web/                      # React 前端
│   ├── src/
│   │   ├── api/             # API 客户端
│   │   ├── components/      # 通用组件
│   │   ├── pages/          # 页面
│   │   │   ├── auth/       # 登录
│   │   │   ├── bids/        # 标书管理(列表、详情、大纲、章节、审计、导出)
│   │   │   └── knowledge/  # 知识库
│   │   ├── lib/             # 状态管理(Zustand)
│   │   └── hooks/           # 自定义 Hooks
│   └── package.json
└── docs/                    # 设计文档

服务状态

服务 状态 说明
api-gateway 完整 JWT 认证、限流、路由代理(9 个上游服务全接入)
project-svc 完整 Project CRUD、多租户隔离
router-svc 完整 AI Provider 路由、LRU 缓存
workflow-svc 完整 状态机、事件溯源、Asynq 队列、MinIO 大文件
document-svc 完整 Word/PDF 导出、MinIO 后端、含 16MB 大文件集成测试
knowledge-svc 完整 向量检索 + BM25 + 混合 RRF、UUID chunk ID、TSV 触发器
audit-svc 完整 合规审查、一致性检查、废标项扫描
template-svc 完整 Word 模板 CRUD、MinIO 后端
billing-svc 完整 预算管理、交易记录
notify-svc 完整 多渠道通知偏好
doc-gen 完整 标书生成内核(摄取/分析/规划/生成/图表/审计/组装/学习),CLI + HTTP

数据库迁移

迁移 内容
00006 bid_jobs、chapter_specs、chapter_contents、illustrations、evidence
00007 kb_materials、kb_chunks、kb_evidence_links(知识库)
00008 audit_reports、audit_issues(审计)
00009 word_templates(模板)
00010 billing_budgets、billing_transactions(账单)
00011 notification_preferences、notification_logs(通知)

API 概览

端点 说明
POST /api/v1/auth/login 用户登录
GET/POST /api/v1/projects 项目管理
GET/POST /api/v1/bids 标书管理
GET /api/v1/bids/:id/outline 章节大纲
GET /api/v1/bids/:id/chapters 章节内容
POST/GET /api/v1/audit/bidjobs/:id/report 审计报告
POST/GET /api/v1/templates 模板管理
GET/POST /api/v1/billing/budget 预算管理
POST /api/v1/notifications/send 发送通知
POST /api/v1/docgen/generate 标书生成(异步任务)
GET /api/v1/docgen/tasks/:id 生成任务状态
POST /api/v1/docgen/assemble 重新组装标书文档
POST /api/v1/billing/checkout 升级套餐
GET /api/v1/billing/plan 当前套餐

文档索引

需求基线

文档 内容
docs/requirements-spec.md 需求规格说明书 SRS(9 节)
docs/diaoyan.md 调研:行业现状、痛点、机会

设计与架构

文档 内容
docs/framework.md 设计纲要:系统目标、核心三要素
docs/tech-selection.md 技术选型(13 节)
docs/high-level-design.md 概要设计 HLD(15 节)

CI

检查 工具 严格度
必需文件存在且非空 shell 严格
Markdown 风格 markdownlint-cli2 严格
Mermaid 块渲染 mermaid.js + Chrome 严格

部署(单容器 11 服务)

把 11 个 Go 服务 + 共享前端打到一台机器上跑:

cd backend

# 1. 启基础设施(PG + MinIO + Redis)
docker compose -f docker-compose.yml up -d

# 2. 编译 11 个 Go 服务(用 docker golang:1.25-alpine 因为主机没 Go)
./scripts/build-services.sh

# 3. 单容器跑 11 服务(api-gateway:7080 对外暴露)
./scripts/start-stack.sh start

# 4. 部署前端(dist + nginx:alpine)
cd ../web && npm install && npm run build
docker run -d --name bidwriter-web \
  --network bidwriter-net \
  -v $(pwd)/dist:/usr/share/nginx/html:ro \
  -p 8081:80 nginx:1.27-alpine

Demo 登录

初始化时 seed 文件 (migrations/00002_seed_dev.sql) 给了三个测试账号。 注意:seed 里的 bcrypt hash 与 README 中标注的密码可能因 hash 漂移 而对不上;第一次登录失败时用以下 SQL 重置:

-- 在容器里执行(密码统一为 password123)
docker exec bidwriter-pg-test psql -U postgres -d bidwriter <<'SQL'
-- 重新生成 password123 的 hash,然后用它更新
UPDATE users SET password_hash = '<新 hash>' WHERE email IN (
  'admin@demo-a.test','member@demo-a.test','admin@demo-b.test'
);
SQL

生成 hash 的最简办法:

docker run --rm -v $(pwd)/tmp:/tmp -w /tmp golang:1.25-alpine sh -c '
  go mod init tmp >/dev/null 2>&1
  go get golang.org/x/crypto/bcrypt >/dev/null 2>&1
  echo "package main
import (\"fmt\"; \"golang.org/x/crypto/bcrypt\")
func main() { h,_:=bcrypt.GenerateFromPassword([]byte(\"password123\"),10); fmt.Println(string(h)) }" > main.go
  go run main.go
'

最终登录凭据:

  • demo-a / admin@demo-a.test / password123 (owner)
  • demo-a / member@demo-a.test / password123 (member)
  • demo-b / admin@demo-b.test / password123 (owner)

本地开发

后端

cd backend

# 运行所有服务(Docker Compose)
docker-compose up

# 或本地运行单个服务
go run ./services/api-gvc/cmd/api-gateway

# 数据库迁移
goose -dir migrations postgres "postgres://user:pass@localhost:5432/db" up

前端

cd web
npm install
npm run dev

校验 Mermaid 图

npm install
npm run lint:mermaid

License

Private · 仅供内部使用

测试与基准

类别 数量 说明
后端 Test 函数 423 59 个 _test.go,12 个服务 + shared,含 5 个真实 PG/MinIO 集成测试
前端 vitest 38 8 个 *.test.{ts,tsx}(LoginPage、Layout、auth、bids、toast、useHotkey、theme、CommandPalette),全绿

性能基准 (Go testing.B):

基准 当前基线 (i5-8400)
shared/pkg/httperr BenchmarkWrite / BenchmarkWriteNoDetails 863 ns · 456 ns
shared/pkg/validator Validate / hex64 / mime 1.1 µs · 747 ns · 486 ns
api-gateway/.../ratelimit AllowSingleKey / ManyKeys / Concurrent 75 ns · 89 ns · 170 ns
workflow-svc/.../ooxml DefaultOutline / LargeBid 219 µs · 233 µs

运行方式见 CHANGELOG.md 末尾。

About

ai 招投标

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages