# 自动报价系统 **Repository Path**: teampanel/auto-quote-system ## Basic Information - **Project Name**: 自动报价系统 - **Description**: 自动报价系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-05 - **Last Updated**: 2026-09-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 自动报价系统 Auto Quote System ## 业务链路 ``` 聊天记录(.txt) → 解析器 Parser → AI识别 Extractor → 规则校验 Validator → 人工确认 Confirmer → 文档生成 DocGenerator(PDF/Excel) ``` ## 核心结构化字段(>=5) | 字段 | 说明 | 示例 | |---|---|---| | 客户名称 customer_name | 单据级 | 星河科技有限公司 | | 产品/服务名称 product_name | 明细级 | XX智能客服系统 | | 数量 quantity | 明细级 | 2 | | 单价 unit_price | 明细级 | 12000 | | 总价 total_price | 可直接识别,或按数量×单价自动计算 | 24000 | | 税率 tax_rate | 单据级 | 13 | | 报价有效期 valid_until | 单据级 | 30天 | | 交付周期 delivery_days | 单据级 | 7个工作日 | ## 项目结构 ``` auto-quote-system/ ├── README.md ├── requirements.txt ├── run_cli.py # CLI 入口 ├── run_web.py # Web 界面入口(Flask) ├── quote/ # 核心模块包 │ ├── __init__.py │ ├── models.py # 数据模型:QuoteRequest / QuoteItem / 金额计算 │ ├── chat_parser.py # 【解析器】聊天记录读取与消息清洗 │ ├── ai_extractor.py # 【AI识别】openai 结构化输出 + mock 规则兜底 │ ├── rules_validator.py # 【校验器】必填/数值/金额一致性规则 │ ├── confirm.py # 【确认器】人工确认(CLI 交互) │ ├── doc_generator.py # 【文档生成器】PDF(reportlab) + Excel(openpyxl) │ └── pipeline.py # 主流程编排 ├── samples/ │ └── chat_sample.txt # 示例聊天记录 └── data/ # 首次运行 run_cli/run_web 后自动创建 ├── drafts/ # 报价草稿 JSON(中间产物) └── output/ # 生成的 PDF / Excel ``` ## 安装依赖 ```bash cd /Users/xxwei/ss-space/auto-quote-system python3 -m venv .venv && source .venv/bin/activate # 可选 pip install -r requirements.txt ``` > 说明: > - `reportlab`/`openpyxl` 为必须;`flask` 仅在运行 Web 界面时需要。 > - `openai`/`pydantic` 可选:未配置 API Key 时自动使用内置 **mock 规则引擎**,开箱即可演示。 > - 若要启用大模型识别:`export OPENAI_API_KEY=sk-xxx`(可选 `export OPENAI_MODEL=gpt-4o-mini`)。 ## 运行示例 ### 方式一:CLI(人工确认) ```bash python run_cli.py --chat samples/chat_sample.txt ``` 程序会打印识别字段与校验结果,输入 `y` 确认后生成 PDF/Excel: `data/output/报价单_星河科技有限公司_Q20260904-xxxxxx.pdf` 与 `.xlsx`。 ### 方式二:CLI 自动化(跳过确认,用于演示/集成) ```bash python run_cli.py --chat samples/chat_sample.txt --auto-confirm ``` ### 方式三:Web 界面 ```bash python run_web.py # 浏览器打开 http://127.0.0.1:8765 ``` 支持:粘贴/上传聊天记录 → 一键识别 → 在线核对/编辑字段 → 确认生成 PDF/Excel 并下载。 ## 字段提取示例效果 以 `samples/chat_sample.txt` 为例: | 字段 | 提取值 | 来源行(清洗后) | |---|---|---| | 客户名称 | 星河科技有限公司 | 客户名称:星河科技有限公司 | | 产品/服务名称 | XX智能客服系统 | 我们想采购XX智能客服系统 | | 数量 | 2(套) | 数量2套 | | 单价 | 12000 元 | 单价12000元 | | 税率 | 13% | 税率13% | | 总价 | 24000 元 | 总价24000元(与 2×12000 一致,校验通过) | | 报价有效期 | 30天 | 报价有效期30天 | | 交付周期 | 7个工作日 | 交付周期7个工作日 | 规则校验器同时给出 error/warning(如必填缺失、总价与单价×数量不一致等),供人工确认兜底。 ## 模块职责 - `models.py`:报价数据模型与金额口径(小计/含税总价)。 - `chat_parser.py`:读取 .txt 聊天导出,剥离"时间+昵称"消息头,过滤图片/撤回等噪声。 - `ai_extractor.py`:引擎自动切换——配置了 `OPENAI_API_KEY` 则调用 OpenAI JSON 结构化输出;否则走 mock 正则规则,两路输出同一 `QuoteRequest` 模型。 - `rules_validator.py`:纯规则校验,不依赖模型;必填、数值范围、金额一致性、单位合理性。 - `confirm.py`:人工确认环节,识别结果展示 + y/n 决策。 - `doc_generator.py`:reportlab 输出 PDF 报价单(自动探测 macOS 中文字体 PingFang 等);openpyxl 输出 Excel(报价单 + 结构化字段两个 sheet)。 - `pipeline.py`:串起整条链路并落盘草稿 JSON,便于续跑/留痕。 ## 商务合作或定制 QQ: 467643531