# 售前报价Agent **Repository Path**: lkx2000/quotation-agent ## Basic Information - **Project Name**: 售前报价Agent - **Description**: 针对水处理厂设备集成商的客户定制的售前报价Agent系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-08 - **Last Updated**: 2026-07-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 报价 Agent 智能系统 > 从检索到生成:设备集成商报价数据智能化解决方案 *** ## 目录 - [1. 项目简介](#1-项目简介) - [2. 业务背景与痛点](#2-业务背景与痛点) - [3. 核心价值](#3-核心价值) - [4. 版本演进路线](#4-版本演进路线) - [5. V1 检索系统](#5-v1-检索系统) - [6. V2 智能 Agent](#6-v2-智能-agent) - [7. 项目亮点](#7-项目亮点) - [8. 技术栈全景](#8-技术栈全景) - [9. 快速开始](#9-快速开始) - [10. 目录结构](#10-目录结构) - [11. 性能与评测](#11-性能与评测) - [12. 演进路线](#12-演进路线) - [13. 许可证](#13-许可证) *** ## 1. 项目简介 本项目面向**设备集成商行业的客户**,针对历史沉淀的 **7000+ 份 Excel 报价单**,分阶段实现从"找案例"到"自动生成"的全链路智能化。 系统以**历史报价数据**为底座,以**大语言模型 + 检索增强生成(RAG)为引擎,结合**Human-in-the-Loop机制,让售前工程师从"重复劳动"中解放出来,专注于高价值决策。 *** ## 2. 业务背景与痛点 | 角色 | 痛点 | 现状 | | --------- | ---------------------- | ------------ | | **售前工程师** | 新报价时需要从记忆中搜索"之前做过类似项目" | 找案例耗 5-10 分钟 | | **项目经理** | 不同工程师报价风格不统一,质量参差 | 复用难、标准化难 | | **公司** | 7000+ 份历史报价单沉淀在共享盘,无索引 | 数据资产沉睡 | | **客户** | 报价响应慢、易出错、缺乏历史参考依据 | 体验差 | *** ## 3. 核心价值 | 价值点 | V1(已实现) | V2(已实现) | | -------- | ---------- | -------------- | | **检索效率** | 5 分钟 → 5 秒 | — | | **草稿生成** | 手动 | 自动(LLM 智能生成) | | **多轮修改** | 不支持 | 自然语言多轮迭代 | | **质量管控** | 无 | 置信度分级 + 强制反馈 | | **数据闭环** | 无 | 反馈数据反哺 V3 规则挖掘 | *** ## 4. 版本演进路线 ``` V1 检索版 ✅(已完成) │ 解决"找案例难" │ │ V1 → V2 契机:用户反馈"找案例之后还要自己改,太累" ↓ V2 Agent 版 ✅(已完成) │ 解决"生成草稿难" │ │ V2 → V3 契机:用户反馈积累 + 修改数据积累 ↓ V3 规则挖掘版(规划中) │ 解决"规则沉淀难" │ │ V3 → V4 契机:规则覆盖率提升 + 业务标准化 ↓ V4 端到端自动(规划中) 解决"高置信场景全自动" ``` **演进哲学**:**让模型先学会"做",再学会"做对",最后学会"自动做对"**。 *** ## 5. V1 检索系统 ### 5.1 架构总览 ``` 报价 Excel 文件 ↓ [Excel 解析] src/core/excel_parser.py ↓ [SQLite 数据库] data/demo_quotes.db ↓ [特征提取] src/core/feature_builder.py(智能去噪音) ↓ [词汇学习] src/core/vocabulary_manager.py(自动学习) ↓ [向量生成] src/search/embedding_service.py ↓ [混合检索] src/search/hybrid_search.py(60% BM25 + 40% 向量) ↓ [向量索引] ChromaDB ↓ [Web 应用] src/app.py(Flask + Tailwind CSS) ``` ### 5.2 核心功能 - **Excel 数据解析与入库** - 支持 `.xls` / `.xlsx` / `.zip` 批量上传 - 自动识别多 Sheet 和子表结构 - 智能提取表头、行项目、备注和金额 - 数据结构化存储到 SQLite - **智能特征工程** - 自动移除行数、Sheet 名、合计金额等无关信息 - 从历史数据中自动学习专业词汇,支持增量扩展 - 调用 Embedding 模型生成 1024 维向量 - 向量持久化到 ChromaDB - **BM25 + 向量混合检索** - 双引擎融合:60% BM25 精确匹配 + 40% 向量语义相似度 - 自然语言查询:"循环水系统,预算 15 万,需要加药泵" 即可检索 - 文件名 / 设备名称 / 品牌的高权重匹配 - 技术参数 / 项目描述的语义理解 - **数据埋点与分析** - 用户行为数据云端存储 - Session 追踪:关联完整行为链路 - 一键导出 Excel 分析报告 ### 5.3 性能指标 | 指标 | 数值 | | ----------- | --------- | | Excel 解析成功率 | ≥ 95% | | 特征提取速度 | \~100 表/秒 | | 向量生成速度 | \~4 表/秒 | | 检索响应时间 | < 500ms | | 向量维度 | 1024 | *** ## 6. V2 智能 Agent ### 6.1 背景 V1 检索系统解决了"找案例"的问题,但用户仍需手动: 1. 对比需求与历史案例的差异 2. 调整设备型号、品牌、数量 3. 生成新的报价单 **V2 目标**:让 Agent 自动完成上述工作,生成可直接使用的报价草稿。 ### 6.2 系统架构 ```mermaid flowchart TB subgraph Frontend["🖥️ 前端层"] Simple["简易版
HTML + Alpine.js"] React["React 版
React 18 + TypeScript + Ant Design"] end subgraph Backend["⚡ Flask 后端"] API["app_agent.py
API 路由"] EP1["/api/agent/generate
生成报价草稿"] EP2["/api/agent/clarify
追问补充"] EP3["/api/agent/revise
修改草稿"] EP4["/api/agent/feedback
提交反馈"] EP5["/api/agent/download
下载 Excel"] end subgraph Agent["🤖 LangGraph Agent"] direction LR Parse["parse_requirements
需求解析"] --> Check["check_params
参数检查"] Check -->|参数完整| Retrieve["retrieve_cases
案例检索"] Check -->|参数缺失| Clarify["clarify
🛑 Human-in-the-loop 追问"] Clarify --> Check Retrieve --> Generate["generate_draft
草稿生成"] Generate --> Render["render_quote
模板渲染"] end subgraph Tools["🔧 工具层"] SKU["sku_lookup.py
SKU 查询工具"] Search["hybrid_search
混合检索(复用 V1)"] end subgraph Data["📁 数据层"] SQLite["SQLite
会话/反馈存储"] Cases["历史案例库
Supabase"] end Frontend -->|HTTP API| Backend Backend --> Agent Agent --> Tools Agent --> Data Tools --> Data ``` ### 6.3 Agent 工作流 ```mermaid stateDiagram-v2 [*] --> parse_requirements: 用户输入需求 parse_requirements --> check_params: LLM 提取关键参数 state check_params { [*] --> 验证参数完整性 验证参数完整性 --> 参数完整: 所有关键参数已具备 验证参数完整性 --> 参数缺失: 缺少品牌/流量/扬程等 } check_params --> clarify: 参数缺失 clarify --> check_params: 用户补充后重新验证 check_params --> retrieve_cases: 参数完整 retrieve_cases --> generate_draft: 检索到历史案例 generate_draft --> render_quote: 输出 JSON 草稿 state render_quote { [*] --> JSON转Excel JSON转Excel --> HTML预览 } render_quote --> user_action: 展示草稿 user_action --> download: 强制反馈后才可下载草稿 user_action --> revise: 修改草稿 revise --> revise_draft: 提交修改意见 revise_draft --> generate_draft: 基于意见重新生成 download --> save_session: 保存会话 save_session --> [*]: END ``` ### 6.4 核心功能 - **需求解析**:从自然语言中提取关键参数(流量、扬程、品牌、预算等),结构化 JSON 输出 - **Human-in-the-Loop 追问**:关键参数缺失时主动追问,使用 LangGraph `interrupt` 机制暂停等待 - **智能草稿生成**:对比用户需求与历史案例,自动调整不匹配设备,标注低置信度项供人工审核 - **多轮对话修改**:支持自然语言修改意见,每轮只需"当前草稿 + 修改意见",不维护长上下文 - **强制反馈收集**:必须点赞 / 点踩才能下载,点踩需选择问题类型,为后续优化积累数据 ### 6.5 双前端架构 | 前端版本 | 技术栈 | 适用场景 | 特点 | | ----------- | ----------------------------------------- | ---------- | -------- | | **简易版** | HTML + Alpine.js + Tailwind CDN | 快速演示、单文件部署 | 零依赖、即开即用 | | **React 版** | React 18 + TypeScript + Vite + Ant Design | 生产级应用、可扩展 | 组件化、状态管理 | *** ## 7. 项目亮点 ### 7.1 三明治架构(V2 Agent) ``` ┌──────────────────────────────────────┐ │ 🧠 灵魂层:LLM Prompt(业务理解) │ ← prompts.py ├──────────────────────────────────────┤ │ 🦴 骨架层:LangGraph 工作流 │ ← quote_agent.py ├──────────────────────────────────────┤ │ 💪 血肉层:业务规则 + SKU 校验 │ ← nodes.py + sku_lookup.py └──────────────────────────────────────┘ ``` **设计哲学**:**LLM 负责理解、规则负责兜底**。任何一环出错都有补救措施,不依赖单一技术。 ### 7.2 强 HITL 设计 - **流程可控**:参数不完整必追问,绝不猜测 - **多轮可逆**:草稿可多次修改,回退无忧 - **强制反馈门控**:不反馈不能下载,保证数据闭环 - **结构化归因**:5 类点踩原因 + 自由文本,支撑 V3 规则挖掘 ### 7.3 混合检索策略(V1 复用) - **60% BM25**:精确匹配品牌、型号、文件名 - **40% 向量**:语义理解场景、需求描述 - **混合优势**:既保证精准度,又兼顾召回率 ### 7.4 置信度分级 | 等级 | 含义 | 处理策略 | | ---------- | -------------- | ------ | | 高(≥ 0.8) | SKU 库匹配 + 规则通过 | 可直接使用 | | 中(0.5-0.8) | 部分参数缺失 | 建议人工复核 | | 低(< 0.5) | 规则违反 / SKU 缺失 | 必须人工确认 | ### 7.5 完整数据闭环 ``` 用户输入 → Agent 解析 → 案例检索 → 草稿生成 ↑ ↓ └── 反馈数据 ←── 强制反馈门控 ←── 用户决策 ↓ V3 规则挖掘(规划中) ↓ 自动沉淀业务规则 ↓ 提升下次生成质量 ``` *** ## 8. 技术栈全景 ### 8.1 后端 | 层级 | 技术 | 用途 | | ------------ | ----------------------------- | ---------------- | | **Web 框架** | Flask | REST API 路由 | | **Agent 框架** | LangGraph 1.0 | 工作流编排 + 状态机 | | **LLM 客户端** | langchain-ollama / OpenRouter | 大模型调用 | | **Excel 解析** | pandas + xlrd + openpyxl | 历史报价单解析 | | **混合检索** | BM25 + 向量 | 案例检索 | | **向量模型** | Ollama(qwen3-embedding) | 1024 维 Embedding | | **向量数据库** | ChromaDB | 向量索引与检索 | | **数据存储** | SQLite | 会话/反馈/案例元数据 | | **远程存储** | Supabase | 用户行为埋点 | | **渲染引擎** | openpyxl + Jinja2 | Excel + HTML 渲染 | | **日志** | Python logging | 分级日志(文件 + 控制台) | | **分词** | jieba | 中文分词 | ### 8.2 前端 | 层级 | 技术 | 用途 | | --------- | --------------------- | --------- | | **框架** | React 18 + TypeScript | 组件化、强类型 | | **构建** | Vite | 极速 HMR | | **UI 组件** | Ant Design | 企业级组件库 | | **样式** | Tailwind CSS 3 | 原子化样式 | | **状态管理** | Zustand 5 | 轻量级 store | | **HTTP** | fetch + SSE | 流式响应 | ### 8.3 简易前端 | 技术 | 用途 | | ---------------- | ------------ | | HTML 5 | 静态页面骨架 | | Alpine.js | 轻量响应式 | | Tailwind CSS CDN | 原子化样式(CDN 版) | *** ## 9. 快速开始 ### 9.1 环境要求 - **Python** 3.11+ - **Node.js** 18+(React 前端需要) - **Ollama**(本地向量模型)或 **OpenRouter API Key** - 浏览器(推荐 Chrome / Edge) ### 9.2 安装步骤 ```bash # 1. 创建并激活虚拟环境 conda create -n py311 python=3.11 conda activate py311 # 2. 安装后端依赖 pip install -r requirements.txt ``` ### 9.3 启动 V1 检索系统 ```bash python run.py --port 5001 ``` 访问:**** ### 9.4 启动 V2 Agent ```bash python run_v2.py # 默认端口 5002 python run_v2.py --port 5003 # 自定义端口 python run_v2.py --host 0.0.0.0 --port 5002 # 允许外部访问 python run_v2.py --debug # 调试模式 # 终端 2:启动 React 前端 cd quote-agent-frontend npm install npm run dev ``` 访问: - 简易版:自动打开 `demo.html` - React 版:**** *** ## 10. 目录结构 ``` 售前报价agent/ ├── README.md # 本文件(项目总览) ├── requirements.txt # 后端 Python 依赖清单 ├── openapi.yaml # 后端 RESTful 接口契约(前后端共用) ├── vocabulary.json # 业务词典(品牌/设备等标准词) ├── run.py # V1 检索系统启动入口(端口 5001) ├── run_v2.py # V2 Agent 启动入口(端口 5002)推荐 ├── demo.html # V2 简易前端(HTML + Alpine.js) ├── .env.example # 环境变量模板 ├── .gitignore # Git 忽略配置 │ ├── config/ # 业务配置(独立目录,方便热更新) │ └── business_rules.json # 业务规则配置(泵-变频器匹配、品牌一致性等) │ ├── docs/ # 详细文档 │ ├── V1_RETRIEVAL.md # V1 检索系统详细指南 │ ├── V2_AGENT.md # V2 Agent 详细指南 │ ├── evaluation_report.md # 自动化评测报告 │ ├── supabase_config.md # Supabase 配置说明 │ ├── 分析项目源代码1.md # 源码深度分析 │ └── 分析项目源代码2.md # 源码深度分析 │ ├── src/ # 后端 Python 源码 │ ├── app.py # V1 主应用(Flask) │ ├── core/ # 核心业务(V1/V2 共用) │ │ ├── excel_parser.py # Excel 解析引擎 │ │ ├── feature_builder.py # 特征提取(去噪音) │ │ └── vocabulary_manager.py # 智能词汇管理 │ ├── search/ # 检索引擎(V1/V2 共用) │ │ ├── bm25_search.py # BM25 精确匹配 │ │ ├── embedding_service.py # 向量生成(Ollama / DashScope) │ │ ├── hybrid_search.py # 混合检索(60% BM25 + 40% 向量) │ │ └── vector_index.py # 向量索引(ChromaDB) │ ├── v2_agent/ # V2 Agent 核心 │ │ ├── app_agent.py # Flask 路由(API 入口) │ │ ├── llm_client.py # LLM 客户端封装(Ollama/OpenRouter) │ │ ├── nodes.py # 工作流节点函数实现 │ │ ├── prompts.py # LLM Prompt 模板 │ │ ├── quote_agent.py # LangGraph 工作流编排 │ │ ├── quote_renderer.py # JSON → Excel/HTML 渲染 │ │ ├── rules_loader.py # 业务规则加载器 │ │ ├── sku_lookup.py # SKU 查询工具 │ │ ├── state.py # Agent 状态定义(TypedDict) │ │ └── supabase_client.py # Supabase 数据同步 │ ├── utils/ # 通用工具函数 │ ├── analytics/ # 数据分析 │ │ └── export_analytics.py # 行为分析报告导出 │ └── __init__.py │ ├── quote-agent-frontend/ # V2 React 前端 │ ├── .traerules # Trae IDE AI 开发规则 │ ├── .gitignore │ ├── package.json │ ├── vite.config.ts │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── eslint.config.js │ ├── README.md # 前端独立说明 │ └── src/ │ ├── main.tsx # React 入口 │ ├── App.tsx # 根组件 │ ├── App.css / index.css │ ├── api/ │ │ └── agentApi.ts # 后端 API 封装(含 SSE 流式) │ ├── store/ │ │ └── agentStore.ts # Zustand 全局状态 │ ├── types/ │ │ └── index.ts # TypeScript 类型定义 │ ├── components/ │ │ ├── chat/ # 聊天区 │ │ │ ├── InputArea.tsx │ │ │ ├── MessageList.tsx │ │ │ └── WelcomeScreen.tsx │ │ ├── clarification/ # 追问卡片 │ │ │ └── ClarificationCard.tsx │ │ ├── draft/ # 草稿区 │ │ │ ├── BomTable.tsx │ │ │ └── DraftCard.tsx │ │ ├── feedback/ # 反馈弹窗 │ │ │ └── FeedbackModal.tsx │ │ ├── layout/ # 布局 │ │ │ ├── Header.tsx │ │ │ └── Sidebar.tsx │ │ └── thinking/ # 思考过程可视化 │ │ ├── SearchRefs.tsx │ │ └── ThinkingProcess.tsx │ └── assets/ # 静态资源 │ ├── scripts/ # 运维脚本 │ ├── create_quote_template.py # 创建 Excel 报价模板 │ ├── init_agent_tables.py # V2 数据库表初始化 │ ├── reset_demo.py # 重置演示数据 │ ├── run_evaluation.py # 自动化评测运行 │ └── test_supabase.py # Supabase 连接测试 │ ├── data/ # 数据目录(运行产物,.gitignore 排除) │ ├── demo_quotes.db # V1 SQLite 案例库 │ ├── agent_data.db # V2 SQLite 业务库(会话/反馈) │ ├── vocabulary.json # 学习后的业务词典 │ ├── chroma_db/ # ChromaDB 向量索引 │ ├── generated_quotes/ # 生成的 Excel 报价草稿 │ └── uploaded_files/ # 用户上传的原始文件 │ ├── log/ # 日志目录(.gitignore 排除) │ ├── agent.log # Agent 运行日志 │ └── agent_debug.log # 调试日志 │ ├── templates/ # Excel 模板 │ └── quote_template.xlsx # 报价单生成模板 │ ├── dataset/ # 测试数据集(.gitignore 排除) │ ├── STD_quotations/ # 6 份标准报价单样本 │ ├── sku_library.json # SKU 知识库 │ └── golden_test_cases.md # 黄金测试集 │ ├── static/ # V1 静态资源 │ └── search.js # V1 检索前端脚本 │ └── docs/ # (见上方 docs/ 说明) ``` ### 10.1 新增成员快速定位 | 你想看什么 | 看这个文件 | | ---------- | -------------------------------------------------------------------------------------------- | | 业务如何理解需求 | [src/v2\_agent/prompts.py](src/v2_agent/prompts.py) | | 工作流怎么编排 | [src/v2\_agent/quote\_agent.py](src/v2_agent/quote_agent.py) | | 节点逻辑怎么写 | [src/v2\_agent/nodes.py](src/v2_agent/nodes.py) | | API 怎么暴露 | [src/v2\_agent/app\_agent.py](src/v2_agent/app_agent.py) | | Excel 怎么渲染 | [src/v2\_agent/quote\_renderer.py](src/v2_agent/quote_renderer.py) | | 前端状态怎么管 | [quote-agent-frontend/src/store/agentStore.ts](quote-agent-frontend/src/store/agentStore.ts) | | 前端如何调 API | [quote-agent-frontend/src/api/agentApi.ts](quote-agent-frontend/src/api/agentApi.ts) | | 业务规则在哪配置 | [config/business\_rules.json](config/business_rules.json) | *** ## 11. 性能与评测 ### 11.1 V1 性能指标 | 指标 | 数值 | | ----------- | --------- | | Excel 解析成功率 | ≥ 95% | | 特征提取速度 | \~100 表/秒 | | 向量生成速度 | \~4 表/秒 | | 检索响应时间 | < 500ms | ### 11.2 V2 自动化评测(2026-01-04) | 指标 | 数值 | | --------- | --------- | | **测试用例数** | 5 | | **通过率** | **100%** | | **平均得分** | **87.2%** | #### 各用例得分 | 用例 | 场景 | 得分 | | ----- | ----------- | --- | | TC-01 | 简单生成(完整参数) | 84% | | TC-02 | 追问流程(参数不完整) | 91% | | TC-03 | 参数迁移(南方泵业) | 89% | | TC-04 | 草稿修改(用户反馈) | 81% | | TC-05 | 档次切换(经济→豪华) | 91% | #### 评测维度 | 维度 | 权重 | 平均得分 | | ------------ | ---- | -------- | | 参数提取 | 20% | 89.6% | | SKU 验证 | 20% | **100%** | | 业务约束 | 25% | **100%** | | 响应时间 | 15% | 64% | | 过程可解释性 | 20% | 96% | **结论**:业务流程相关维度(SKU 验证、业务约束、可解释性)表现优秀,**参数提取准确率**与**响应时间**是后续优化重点。 *** ## 12. 演进路线 ### V3 规则挖掘版(规划中) **目标**:从 V2 积累的反馈数据中自动挖掘业务规则 **核心工作**: - 收集 V2 的 `feedback` 表数据(点赞 / 点踩 + 原因 + 详情) - 用 LLM 分析点踩原因,挖掘新的业务规则 - 规则化后回写到 `business_rules.json` - 让 V3 的生成质量在 V2 基础上自动提升 **预期收益**: - 业务约束覆盖率从 25% 提升到 60%+ - 参数提取准确率从 79.6% 提升到 90%+ ### V4 端到端自动(远期) **目标**:高置信场景实现完全自动化 **核心工作**: - 用户偏好记忆(常用品牌 / 预算 / 场景) - 草稿一键应用历史修改 - 多人协同审批(采购 / 技术 / 财务) - 完全自动化(高置信场景无需人工介入) *** ## 13. 许可证 本项目基于 **MIT License** 开源。 *** ## 联系与反馈 - **GitHub Issues**:欢迎提交 Bug 报告与功能建议 - **Pull Requests**:欢迎贡献代码 - **邮箱**:见 GitHub Profile *** **最后更新**:2026-06-18\ **当前版本**:V2.0\ **下一版本**:V3 规则挖掘版(规划中)