钉客户 · 系统架构

怎么设计的 · 数据与 AI 怎么分工 · 现在实现了什么 · 未来怎么走(已实现 进行中 待实现

返回:产品示意 · 进入系统 · 演示环境

一、总体分层(数据从公开信息走进销售手里,一共 7 层)

① 采集层配置驱动的通用采集器 + 专用采集器;14 个源(政府采购 ×2 / 公共资源交易 / 环评管理 / 环评受理公示(前置) / 发改委 / 上市公司公告 / 官网 watchdog / 公开检索(搜狗微信 + MCP 搜索)…) 已实现 加源=改配置,不改代码
② 事实层(原始信息)统一落库:标题 / 摘要 / 原文链接 / 发布时间 / 来源;批内去重 + 每条独立事务;抓取失败必须抛错(stale 状态留痕,不伪装成"没有新条目") 已实现
③ 信号层由词表(配置)把事实归到 E1~E16 事件类型,并标注分层(前置 / 已发生)与证据强度;例行文件(法律意见书/工作制度/股东会通知)先剔除 已实现
④ 规则层(聪明的地方)三层键:卖方包(我卖什么)× 事件 × 客户类型;算最佳/最晚窗口、强信号(90 天同类 ≥3)、变化包合并;规则全部是配置数据 已实现 按用户卖方包选规则 已实现主体
⑤ 应用层(API)FastAPI:事件流 / 客户 / 行业 / 画像 / 候选 / 额度 / 账号 / 档案 / 线索;24+ 端点;数据域 fail-closed(按域名解析租户,解析不出就空域,绝不回落默认) 已实现
⑥ AI 层只做「表达与推理」,不产生事实:画像生成、事件分析、提问式启发、多维档案抽取;输出做逐数字溯源校验,无出处自动替换为「待核实」 已实现
⑦ 客户端层H5(已上线,手机直接开)→ uni-app 一套代码出微信小程序 + H5 H5 已上线;小程序待 AppID
⑧ 运维层nginx + systemd + Docker;HTTPS(Let's Encrypt 自动续期);监控接口需 X-Monitor-Token;采集与批处理串行执行(低配机器防打爆) 已实现

二、数据层:现在用什么、以后换什么

现在:SQLite(单机嵌入式)已实现

  • 20 张表,当前真实数据量(实时取自系统):原始信息 条、信号 、机会事件 (其中前置 )、企业 、客户档案事实 、在线源
  • 优点:零运维、单文件、开发期迁移成本低
  • 边界:并发写弱、无行级权限、备份靠文件 —— 够现在用,不够多租户并发用

规划:PostgreSQL(多租户生产)待实现

  • 多租户:单库 + tenant_id 列 + 行级安全(RLS),租户数据强隔离
  • 并发与体量:连接池、分区表(按时间分区存事实/信号)、JSONB 存配置与证据
  • 检索pg_trgm 模糊搜索 + 全文检索(客户名/统一社会信用代码防串档)
  • 运维:每日全量 + WAL 归档、只读副本供报表
  • 切换方式:SQLAlchemy 换连接串 + 迁移脚本(模型层已按此设计,不用重写业务代码)

数据模型(20 张表,按职责分)

说明
租户与账号tenant user_account login_session activity_log数据域 / 账号(口令 pbkdf2+盐)/ 会话 / 全程使用留痕(登录、看事件、钉客户、记录动作)
采集source raw_item collect_run源配置(站点规则全在 config)/ 原始信息 / 采集批次留痕(stale 可见)
事实与判断company signal event rule_pack copy_mark企业主档 / 变化信号 / 机会事件(窗口·强信号·按卖方包规则变体)/ 规则包(配置)/ 可复制性标记
客户与档案customer_profile customer_fact pin action_log user_profile candidate画像(带依据)/ 11 维档案事实(每条带出处) / 钉住与额度 / 动作记录 / 引导问卷 / 候选名单(匹配度可解释)
行业industry_watch industry_news关注行业(地区+行业+频次)/ 每日行业信息 + AI 机会分析 + 关联企业

三、AI 怎么用(和不用):事实与表达严格分开

AI 负责(已实现)

  • 画像生成:从问卷 + 现成资料(官网链接/粘贴文本)读出来,不让用户从零填表
  • 事件分析:这条变化对「我卖的东西」意味着什么 + 可以想什么(提问式启发)
  • 行业机会分析:行业信息 → 机会点 → 关联企业
  • 多维档案抽取:产品/客户群体/重大项目/上下游/组织/政企/公益/活动/伙伴/竞对/技术(当前关键词版 v1,LLM 版规划中 v2 待做

AI 不负责(红线)

  • 不产生数字:输出中每个数字都必须能在材料里找到,否则自动改写为「待核实」
  • 不做客户排名打分:只给「与画像的匹配度」并逐项解释
  • 不伪造身份/关系:查不到就留空,界面显示「待核实」
  • 不替销售决策:建议是启发式问题,不是行动指令

实现:services/llm.py(调用 + 逐数字校验 + 降级),模型通道复用本机已配置的国产模型。

四、部署与运行

用户手机 / 浏览器
   │  https(Let's Encrypt,自动续期)
   ▼
nginx ── dingkehu.com / www …… 首页 → 登录页(H5)
      ├─ demo.dingkehu.com …… 演示环境(同一套 H5,登录页列出演示账号)
      ├─ intro.dingkehu.com …… 产品示意(本页的姊妹页)
      └─ arch.dingkehu.com …… 系统架构(本页)
   │  /api/* 反代
   ▼
FastAPI(uvicorn,systemd 托管,端口 8500)
   ├─ SQLite(现在)/ PostgreSQL(规划)
   ├─ APScheduler:按源间隔串行采集(礼貌频率、请求间 sleep)
   └─ AI 通道:国产模型(只做表达与推理 + 反幻觉校验)

当前部署:2 核 / 1.6G 单机 + Docker(同机还跑着其他业务)。重活(拉镜像 / 浏览器渲染 / 批量脚本)已约定串行执行,避免把机器打爆。

五、未来规划(按优先级)

方向内容状态
信息源①钉钉网关搜索 MCP(百度/博查/小宿)接入 → 微博/小红书/抖音/公众号定向检索;②官网 watchdog 铺开到更多目标客户;③前置信号源(环评受理已接,招标预告/招聘/项目备案待找可用通道)①已接入 ②进行中 ③受网络限制
客户档案关键词抽取 → LLM 抽取(带反幻觉校验),维度可配置增减v2 待做
内部知识上传产品资料/报价/案例/异议话术,AI 回答只用「内部知识 + 公开信息」,无依据即「待核实」待实现
客户端H5(已上线)→ uni-app → 微信小程序(需 AppID)小程序待 AppID
数据库SQLite → PostgreSQL(多租户 RLS、分区、连接池、备份)待实现
多租户第二租户开通(渠道配置 + 独立机器人 + 数据域隔离),当前仅一个租户开源使用待实现
付费个人版免费额度 → 付费版本(额度、团队版、管理视图)待实现
质量工程模拟人测试常态化(4 类角色 26 项检查);真实历史回放(已做 4 年 / 11,914 条);规则由资深销售校准持续
本页数字取自系统真实数据(2026-09-19);「已实现」=已在生产环境跑通并实测,「待实现」=已设计未开发,不做夸大。
← 产品示意 · 进入系统