815cbf9d8c
- 更新 .gitignore:全面覆盖环境变量、数据库、日志、缓存、上传文件 - 移除误跟踪的 server/venv/、crm_data.db、.env 文件 - 新增 server/.env.example 模板 - 新增合同管理、利润核算、AI教练等功能模块 - 新增 Playwright e2e 测试套件 - 前后端多项功能升级和 bug 修复
5.4 KiB
5.4 KiB
SHBL-ERP 升级 PRD:AI 原生销售攻坚教练引擎 (Phase 3.0)
项目代号:天津硕博霖销售攻坚智能体改造 关联基础版本:v0.2.0 核心目标:实现 AI 从“被动问答”向“业务流主动拦截与教练辅导”的跨越,提升针对燃气轮机、透平压缩机等大型工业设备的大客户攻坚成功率。
一、 数据库层改造 (Database Schema Updates)
目前核心数据持久层基于 PostgreSQL。本次需要引入向量检索能力并扩展现有业务表,以支持结构化的 AI 评估数据。
- 扩展 1:引入
pgvector插件- 需求:在当前的 PostgreSQL 宿主机实例中安装并启用
pgvector扩展。 - 目的:构建原生向量表(如
kb_obsidian_vectors),用于将平时沉淀的设备工况数据、润滑油 TDS/MSDS 及历史技术方案进行向量化存储,供大模型进行检索增强 (RAG)。
- 需求:在当前的 PostgreSQL 宿主机实例中安装并启用
- 扩展 2:修改
sales_logs表- 变更:新增字段
ai_coaching_feedback(类型:JSONB,可空)。 - 目的:存储 AI 异步评估后返回的结构化教练反馈(含 MEDDIC 扫描、SPIN 提问建议)。
- 变更:新增字段
- 扩展 3:修改
crm_customers表- 变更 1:新增字段
health_score(类型:Integer,默认 100)。 - 变更 2:新增字段
meddic_status(类型:JSONB,可空)。 - 目的:固化大客户的交易健康度,便于王 X 等管理层直观把控高净值客户的推进阶段。
- 变更 1:新增字段
- 迁移任务:通过 Alembic 生成对应的
async迁移脚本。
二、 后端接口层改造 (FastAPI Backend Updates)
需要改变目前 AI 模块仅依靠 SSE 实时流式输出的单向模式。
- 改造 1:重构
POST /api/sales-logs接口- 主逻辑不变:接收前端提交的销售日志,校验
involved_company_ids,执行常规的快速数据库INSERT,立刻向前端返回 200 OK,确保业务流程不卡顿。 - 新增逻辑:挂载 FastAPI 原生的
BackgroundTasks。在后台异步触发httpx请求,调用 Dify 的 Workflow API,将新生成的log_id、客户信息与日志内容发送给底层部署在公司机架上的 R740-A 服务器进行深度思考。
- 主逻辑不变:接收前端提交的销售日志,校验
- 新增 1:内部回调接口
POST /api/dify-tools/log-feedback- 目的:接收 Dify Workflow 执行完毕后返回的标准化 JSON 数据,反向执行
UPDATE sales_logs SET ai_coaching_feedback = ? WHERE id = ?。
- 目的:接收 Dify Workflow 执行完毕后返回的标准化 JSON 数据,反向执行
- 新增 2:SSE 通知系统
GET /api/notifications/stream- 目的:当后台
ai_coaching_feedback字段更新完毕时,向对应的销售人员(owner_id)推送一条前端消息提示:“💡 您的最新拜访日志已生成 AI 战术诊断,请查阅。”
- 目的:当后台
三、 前端交互层改造 (Vue 3 + Element Plus)
- 改造 1:全局悬浮球 (FloatingChat) 上下文嗅探
- 需求:修改前端逻辑,拦截悬浮球的开启事件。读取 Vue Router 当前路径。如果处于
/customers/detail/:id路由下,隐式提取当前客户画像与近期沟通历史,随 Chat API 的 Payload 自动发送。
- 需求:修改前端逻辑,拦截悬浮球的开启事件。读取 Vue Router 当前路径。如果处于
- 改造 2:
sales_logs详情视图扩展- 需求:在日志详情页增加一个“教练评估面板 (Coaching Board)”。
- 渲染逻辑:读取
ai_coaching_feedback(JSONB) 字段。如果为空,显示“🧠 AI 战术推演中...”的骨架屏;如果有数据,使用 Element Plus 的折叠面板或卡片组件,结构化渲染“MEDDIC 盲区警告”、“Solution 诊断需求”和“SPIN 提问剧本”。
四、 Dify 编排层配置指南 (Workflow API)
此阶段的算力将严格依赖 R740-A 节点。其中 RTX 3090 (qwen3.5:27b) 负责深度逻辑剖析,RTX 4060 (bge-m3) 负责高频知识库向量检索。
配置模式:在 Dify 中新建应用,必须选择“工作流 (Workflow)”类型,而非传统的“聊天助手”。
1. 变量定义节点 (Start Node)
定义明确的系统级输入变量,确保接口调用规范:
log_id(String):系统日志主键。customer_context(String):由 FastAPI 拼装的客户基础信息(行业、设备规模等)。log_content(String):业务员刚提交的散乱日记文本。
2. 知识检索节点 (Knowledge Retrieval)
- 配置:挂载基于 Obsidian 笔记构建的技术参数知识库。
- 作用:根据
log_content中的关键词(如特定型号的伺服阀、透平压缩机),从向量库中抽取出相应的油样分析标准或故障排查手册。
3. LLM 处理节点 (Core Engine)
-
模型选择:
qwen3.5:27b(位于 192.168.1.88:11434)。 -
System Prompt:植入我们上一轮确定的“工业大客户攻坚教练” Markdown 提示词。
-
关键指令:在 Prompt 末尾增加 JSON 约束指令:
"你必须严格输出合法的 JSON 格式,不要包含任何 Markdown 代码块包裹(即不要带有 ```json)。结构必须如下:"
{"meddic_alerts": ["..."], "solution_diagnostics": "...", "spin_questions": [{"type": "Situation", "question": "..."}, ...]}
4. HTTP 请求节点 (HTTP Request - End Node)
- 配置:不使用默认的结束节点。在 LLM 节点后,直接拼接一个 HTTP Request 节点。
- 动作:将 LLM 生成的 JSON 结果,加上
log_id,以 POST 形式发送回你后端的/api/dify-tools/log-feedback接口完成闭环。