先解释这个词。FDE = Forward Deployed Engineer,前线部署工程师,Palantir 把这个词带火的:他们的工程师不是坐在总部写代码,而是直接派到客户现场,拿着客户的真实问题现场解决,再把解决方案沉淀回产品。OpenAI、Anthropic 现在都在招这个岗位。
防水建材行业天然就是 FDE 模式:产品卖出去只是开始。屋面防水做得好不好,要看现场基层处理到不到位;经销商能不能卖货,要看 FDE 有没有陪他跑工地;客户复购不复购,要看巡检发现问题后响应快不快。威盾建材的业务本质上就是:一批工程师 + 一堆工程项目 + 一个产品知识库 + 无数次现场巡检。
问题是,这些活动原来散落在微信聊天、Excel 表格、纸质巡检单里。FDE 每天在客户现场产生的最有价值的数据——巡检结论、整改要求、项目阶段、回款风险——全都没有沉淀。这套系统要解决的就是这一件事:把 FDE 的前线动作全部数字化、结构化、可追踪。
这套系统是 2026 年 10 月 7 日一天之内开发完成的——从早上 v0.2 到晚上 v2.0,20 个版本,每个版本都有完整备份链(server.js.bak.v0.2 到 v1.9 一个不缺)。这不是炫技,是 AI 对话式开发的标准节奏:每个版本只加一两个模块,加完立刻测试、立刻备份,坏了随时回滚。
| 版本段 | 新增能力 | 设计决策 |
|---|---|---|
| v0.2 → v0.5 | 项目、客户、知识库三大主档 | 先建骨架:所有业务围绕"项目"这一个主实体展开 |
| v0.6 → v0.9 | 合同回款、现场巡检、交付任务 | 钱(回款)、事(巡检)、人(任务)三条线补齐 |
| v1.0 → v1.2 | AI 盾盾、数据导入、数据库备份 | AI 后置——先把数据结构做对,AI 是锦上添花 |
| v1.3 → v1.5 | 连接器、企业微信通知、操作审计 | 开始考虑"和客户现有系统怎么共存" |
| v1.6 → v2.0 | 用户角色鉴权、文件病毒扫描、部署配置 | 从"能用"到"敢给客户用"——安全收口 |
几个值得同行抄的决策:零依赖——整个系统只用 Node.js 内置模块(http + sqlite),没有 node_modules,没有供应链投毒风险,内网裸跑都行;测试先行收口——29 个测试覆盖项目、客户、知识、任务、财务、巡检、鉴权、审计、连接器、导入备份、病毒扫描每个模块,改坏了立刻知道;部署配置随代码走——nginx 配置、systemd 服务、PM2 配置、备份定时任务、日志轮转,七个文件放在 deploy/ 目录,上生产就是复制粘贴。
当时我写到这里以为可以收工了。结果紧接着的一轮迭代,把这套系统的体量又翻了一倍多——下面是后面那段。
v2.0 到 v2.51 之间,版本号只走了半格,模块数却从 10 个长到了 25 个。原因很简单:把 FDE 的真实工作流从头到尾捋一遍,发现光有"项目/合同/巡检/任务"这四条主干不够——主干之外全是断点:巡检发现问题谁去整改?回款对不上账谁去核?合同要审批走什么流程?材料价格凭什么定?供应商和班组怎么管?这些问题在 v2.0 里统统没有答案。
| 分组 | 新增模块 | 补上的断点 |
|---|---|---|
| 钱 | 智能报价(含历史校准)、回款自动对账、审批中心、经营分析 | 报价凭经验 → 用历史单方造价反算校准;回款对不上账 → 逐笔自动对平 + 人工确认锁 |
| 事 | 整改闭环、质量分析 | 巡检发现的问题没人跟 → 整改单 + 复查 + 整改前后照片 + 逾期升级 |
| 人 | 通讯录、提醒中心 | 催收靠人记 → 4 类提醒自动生成草稿、人工确认后发企业微信、跟进台账留痕 |
| 料 | 供应商与班组、采购台账、材料出库台账 | 材料成本口径混乱 → 财务支出/材料消耗/采购入库三选一,成本真实挂到供应商 |
| 智 | 企业图谱、工程数字孪生、智能体协同、开放平台、企业本体、AI 评测 | 知识散落 → 296 个实体 + 396 条关系织成图谱;能力对外 → 4 个开放 API 接口 + 密钥配额管理 |
其中我最想说的是智能报价的历史校准。原来报价靠人拍脑袋,现在系统会拿历史数据当锚:项目合同额 ÷ 面积,按防水部位分组算出单方造价基准(真实基线:历史 8 个项目、整体单方均价 129.26 元/㎡、屋面 4 个样本 116.09 元/㎡);材料单价按 ERP 类别统计均价与区间;人工费扣掉税、利润、材料、辅材后从历史单方造价倒推,并明确标注"推算值"。报价单方低于历史均价 15% 会提示漏项,高于 35% 提示竞争力,材料单方超历史成本提示复核选型。
模块翻倍,测试跟着翻五倍。每加一个模块就补一组接口断言和边界用例:报价的偏差预警阈值、对账的幂等(重复对账不能覆盖已人工确认的记录)、提醒的"未配置企业微信时不许虚构发送成功"、审批的金额分级与代理时间窗、分页的 limit 生效性……151 项全绿才允许归档。
归档也做成了标准动作:npm run archive 生成干净源码归档(自动排除 *.bak*、审计目录、临时目录和数据库),输出 SHA256 校验值,并支持 --copy-to 复制到另一块盘做跨盘双份。当前归档是 2.71MB / 214 个源文件,解包后 151 项测试全通过——这条"解包后能跑通"的验证很关键,否则归档就只是一堆看起来齐了的文件。
功能补齐之后,界面还是"能用的工具",不是"能拿给客户看的系统"。我做了两件事:把整套配色换成客户自己的品牌色,以及补一套告警灯体系。
很多人做"参考客户官网配色",是打开网站截图、肉眼取个差不多的色。这样出来的东西永远差一口气——因为品牌色往往藏在渐变和变量里。我的做法是:用 Playwright 打开客户官网,遍历根元素把所有 CSS 自定义属性导出,再统计全站文本颜色的出现频次。结果一次就拿到了他们的设计系统底牌:
| 挖到的东西 | 值 |
|---|---|
| 品牌渐变(核心) | linear-gradient(115deg, #0868bd 0%, #13a8ad 52%, #48bd85 100%) |
| 深色底 → 中景 → 亮色 | #042f4f / #073e68 / #13a8ad / #48bd85 |
| 全站高频文本色 | #0756d8 / #147be5 / #073d78 |
官方网站的品牌语言是"蓝 → 青 → 绿"三色渐变,寓意从水到生态。这套渐变直接成了系统的品牌令牌(--wd-brand-gradient),主按钮、关键数字、图表主色全部走它。
配色不是硬编码,而是全部令牌化(--wd-* 系列 CSS 变量),所以顺手就做了四套主题实时切换——威盾蓝青(默认,与客户官网同源)、深海青蓝、石墨钢蓝、玄石暖金,顶栏四个圆点一点就换,选择记在本地,刷新不丢。同一套代码,换四个客户就是四种气质。
登录页是客户对系统的第一印象,我用官网的原生素材重做:官网首屏的城市科技感背景图(原图 2MB,压成 93KB 的 JPG)、官网的 Weldon 威盾彩色 logo、官网的标语「科技守护建筑 创新成就未来」、官网的四个实力数字(26年+ 工程防护经验 / 500+ 专业技术团队 / 2000+ 成功项目案例 / 98% 客户满意度)。布局是左右双联卡片:左边品牌区交代"这是谁家的系统",右边深色玻璃表单只管登录。
这里踩了三个坑,都是同类项目的通病,记下来:①官网渐变是为白底设计的,直接拿来做深色底上的渐变文字会糊成一团,得另做一版亮化的渐变专供深底;②背景图遮罩不够深会吃掉白字,叠层要压到 93%~96% 并给浅色文字加阴影;③外链官网图片会被 CSP 拦死(img-src 'self'),所有素材必须下载到本地目录再引用。
系统里堆了 9 组待办(待审批、逾期对账、逾期整改、到期跟进、成本缺口、未报价、缺面积、草稿提醒……),但原来它们只是数字,没人会天天去翻。告警的关键不是"有没有提示",而是"提示会不会自己抓住你的眼睛"。
我加了一套呼吸灯体系,三级灯号 + 四个落点:
四个落点:①顶栏总灯——一句话告诉你"紧急待办 N 项",点一下直接跳到待办面板;②左侧导航角标——哪个模块有活,数字灯就挂在那个菜单上,不用点进去找;③待办卡片——每张卡片自己的灯跟着等级变;④逾期标签——标签文字命中白名单(逾期/超期/已升级/高风险/驳回/严重/过期/异常)自动开始呼吸。
数据源是统一的待办接口,前端用 MutationObserver 盯着内容区,页面一变就重新点灯,另有 90 秒定时兜底。并且尊重系统的"减少动态效果"设置——用户开了无障碍选项,所有呼吸动画自动关掉,只保留静态色块。这个细节很多系统会漏。
功能做完、界面调好,我做了一轮正式代码审计——不是自己看一遍,是按检查项逐条过,每条给出严重等级和复现路径。第一轮查出 1 个高危、4 个中危、4 个低危,全部修完。
| 等级 | 问题 | 影响与修复 |
|---|---|---|
| 🔴 高危 | H-1 系统性时区错位 | 93 处建表默认值用 UTC,导致 created_at 与本地时间差 8 小时。修复:全部改本地时间 + 一次性迁移(重建表、平移历史值、保留索引、可重复执行)。差 8 小时 → 0 小时 |
| 🟠 中危 | M-1 登录失败返回 500 | 密码错误应当返回 401,返回 500 会让监控误判成服务故障。连带修复:不支持的导出格式 500 → 400 |
| 🟠 中危 | M-3 金额浮点精度 | 实测服务出口的金额归一函数已正确,补回归测试锁住这个行为;残留建议改为整数分存储 |
| 🟠 中危 | M-4 孪生页 N+1 查询 | 改为批量聚合。2000 个项目下 1123ms → 25ms |
| 🟠 中危 | M-2 无行级数据隔离 | 属业务决策,转为交付文档明确项(建议限制外部账号发放),不擅自改语义 |
| 🟡 低危 | L-1 孪生页 3 处未转义 | 动态 XSS 泄漏点 5 处 → 0 处 |
| 🟡 低危 | L-2 分页 limit 被静默忽略 | 13 处列表接口修复,?limit=10 真的返回 10 条;响应体 250KB → 50KB |
| 🟡 低危 | 审计中发现的新问题 | 客户列表相关子查询是 O(N×M),改为预聚合 JOIN。2000 客户下 651ms → 7ms,语义逐行比对 0 差异 |
修完复验:11 项审计检查全部 PASS,151 项自动化测试全通过。我想强调最后那条"审计中发现的新问题"——审计的价值不只是把清单上的问题改掉,而是改的过程中顺带看见原本没在清单上的问题。那两个 O(N×M) 查询,如果只是照着清单打勾,永远不会被发现。
这轮升级还顺手处理了三个"界面上看不出来、但功能已经悄悄坏掉"的问题,都挺典型:
input 事件里声明、却在 change 事件里被引用,导致任何一次下拉筛选都抛异常——提醒中心、通讯录、审批中心的筛选全废。补上声明后,审批中心筛选从 16 行正确收敛到 10 行。第三个问题值得多说一句:它造成了本次最典型的误报——有人反馈"登录页怎么没有了"。查下来根本不是故障:登录态有效期 7 天,用户已经登录着,系统直接把他送进了工作台,看不到登录页是预期行为。但顺着这条线查,才发现 Service Worker 的缓存策略确实是个真隐患。误报里往往藏着真问题,别一看到"不是bug"就收工。
打开 FDE 工作台,顶部一行大数:在库项目、本月新签、合同总额、待巡检项目、已竣工工程、活跃任务。往下是项目阶段分布条形图和今日优先任务队列。整个系统的业务流是一条漏斗:
项目立项 → 方案设计 → 材料选定 → 报价 → 施工中 → 验收 → 回款 → 已完工,八个阶段状态机驱动。每个项目挂三根线:
客户与经销商模块单独一条线:每个客户挂项目数、合同额、巡检记录,点开详情能看到这个客户名下所有工程的健康度。产品知识库则是 AI 的弹药库——下一节细说。
AI 盾盾是这套系统的灵魂模块。它不是通用聊天机器人,是一个被产品知识库约束住的防水业务问答引擎,四种模式:知识问答、产品选型、规范查询、方案草稿。
看一张真实的对话:问"地下室高分子材料怎么选型?",AI 盾盾的回答分四段——先给出选型要点(先确认水压和结构、优先选耐静水压高的卷材、搭配配套保护层),再列知识库命中的具体产品资料(高分子胎基改性材料、高分子耐根穿刺防水卷材、自粘聚合物改性沥青聚酯胎防水卷材,每条都带知识编号和匹配度),最后给核心信息和适用场景,并把关联的业务实体一并带出来——相关项目、合同、客户、风险点、任务。每句话都有出处,不编造。
技术上:接 DeepSeek 这类 openai-compatible 模型(企业名称、API Key 环境变量都在系统设置里配),检索用知识库分片匹配,回答强制引用来源。FDE 在工地现场拿手机打开就能问:"这个部位用什么材料"、"JS-II 型和聚氨酯哪个适合",相当于给每个 FDE 配了一个背熟了全部产品手册的技术顾问。
升级后还补了 AI 评测模块:24 条标准评测问题 + 真实数据基线,按关键词 50% + 业务实体 30% + 引用 20% 打分,当前基线通过率 91.7%。AI 功能有没有变差,靠感觉判断不靠谱,得有评测集和回归门禁。
很多"AI 一天写出来的系统"停在演示阶段。这套系统在 v1.6 之后做的全是"敢交付"的收口:
node:http + node:sqlite),没有 node_modules,内网机器拷过去就能跑。应用只监听 127.0.0.1,由 Nginx 终止 TLSdeploy-check.js 做 9 项上线预检(Node 版本 / 零依赖 / 目录可写 / 绝对路径 / 数据库 / 端口 / 监听地址 / 企业微信 / 备份策略),全绿才放行上线手册里另含:20 项验收清单(安全/数据/运维)、常见问题排查表、升级与回滚流程、备份恢复演练、安全加固清单。
最后回答"未来发展"。这套系统的架构已经给未来留好了五个接口:
现在已经内置 ERP/CRM/进销存连接器框架和同步预览执行机制。下一步是接客户真实的金蝶/用友/管家婆——FDE 在系统里录的合同回款自动同步财务系统,进销存里的材料库存直接反映到方案选型里。对接标准一旦跑通,每接一个新客户系统就是配置化的工作。
现在是响应式 Web(手机浏览器可用)。巡检打卡、拍照上传、GPS 定位这些动作在原生 App 里体验会好一个量级,还能做离线缓存——工地没信号,巡检记录先存本地,有网自动上传。
AI 盾盾现在回答知识、起草方案;提醒中心已经能做到"从逾期对账、逾期整改、到期跟进、逾期承诺生成提醒草稿"。下一步:整改单自动 @负责人、回款逾期自动起草催款函、项目验收材料自动汇编成册。AI 从"你问它答"变成"它发现该做的事并推动流程"——但依然守住红线:AI 建议,人来确认。未配置企业微信时,系统绝不虚构"发送成功"。
对象存储替换本地文件目录、异地备份(跨盘双份已有)、监控告警推送。这是接大客户前的必修课。
这是我最看好的:FDE 模式是可复制的底座,行业只是换皮。贵阳防水修缮获客 FDE 管前段(渠道、线索、AI 作战),威盾建材交付 FDE 管后段(项目、巡检、回款)——两个系统拼起来就是防水行业全链路。同样的底座换到涂料经销商、管材厂家、暖通工程公司,改的是字段和知识库,不变的是骨架。300+ 套系统的沉淀,最终都会汇到这一类"行业 FDE 底座"上。
今天这套系统还多了一层可能:开放平台已经长出 4 个对外接口(防水选型、报价草稿、节点规范查询、质量诊断),带 API 密钥、作用域和调用配额管理。/openapi/v1/selection 这类接口意味着——威盾的产品能力可以不通过登录界面,而是被客户的 ERP、经销商的小程序直接调用。系统从"给人用的工具"变成"给系统用的能力"。
以下全部是 3840×2160 实拍截图(1920×1080 视口 @2 倍像素密度),取自最新版本——威盾蓝青主题、呼吸灯告警在线、左侧 25 个模块一个不漏。按业务逻辑分四组。
新版登录页:官网同源背景图 + Weldon 威盾 logo + 官网标语「科技守护建筑 创新成就未来」+ 四个实力数字。左侧品牌区交代"这是谁家的系统",右侧深色玻璃表单只管登录。
6 大指标卡(在库项目 19 / 合同总额 ¥13,330,000 / 活跃任务 22)+ 项目阶段条形图 + 巡检质量分布 + 合同回款结构 + 区域业务分布(西昌 / 成都天府新区 / 重庆渝北区),顶部右侧红色呼吸灯「紧急待办 20」在跳。
八个阶段状态机(勘察/方案设计/材料选定/报价/施工中/验收中/回款/已完工),每张卡片带客户、区域和防水部位。
项目全字段结构化:编号、类型、客户、联系人电话、防水部位、体系类型、面积、合同额、阶段、负责人、工期、质保期——所有字段入库,不靠备注栏堆文字。
报价不再是拍脑袋:带历史校准的选型报价。按防水部位、面积、材料体系生成报价草稿,系统同时给出历史单方造价基准(均价 129.26 元/㎡)并做偏差预警——低于历史均价 15% 提示漏项,高于 35% 提示竞争力。
合同台账挂项目,金额、签订日期、回款进度一目了然。
回款计划逐笔管理:计划日期、金额、状态,逾期自动预警——现金流风险提前暴露。
合同详情弹窗:合同编号、类型、合同金额、已收、未收、甲方乙方、签订与执行日期、付款条件(10% 预付 + 进度款 + 5% 质保金),下挂回款计划三条(已收款/未收款状态实时标注),底部可打印合同、提交审批。
合同回款自动对账:合同与回款逐笔比对,状态分已对平 / 待确认 / 逾期 / 已确认。人工确认后锁定,重新对账不会覆盖——这是对账功能最容易被做错的地方。真实基线:22 条对账记录、逾期 12 条。
巡检卡片墙:GPS 定位打卡、天气自动记录、检查结论分级,不合格自动进待整改队列。顶部四项统计(巡检记录 6 / 待处理 2 / 限期整改 1 / 合格 4)。
真实巡检单:屋面女儿墙节点检查、天气与温度自动记录、结论不合格、整改限期——前线动作全结构化,不是拍张照片丢群里。
发现 → 建单 → 记录 → 复查 → 逾期升级的完整闭环。整改单挂真实项目、严重度分级(高/中/低)、责任人、期限,状态覆盖待整改 / 整改中 / 待复查 / 已整改 / 已逾期,逾期行自动标红呼吸。
整改单详情:问题描述、整改前后说明与照片、复查结论(通过 / 部分通过 / 不通过,不通过自动重开)。系统只做发现、建单、记录和提醒,整改执行与复查判定必须人工确认。
整改质量与高频问题分析:高频问题 TOP、部位×类别矩阵、趋势、改进建议、同比环比——质量问题从"个案"变成"分布",才知道该培训哪个班组。
任务绑定项目和负责人,优先级高中低,与工作台的"今日优先任务"实时联动。
任务编辑视图:关联项目、负责人、优先级、截止日期,结构化派单,不再是口头交代。
4 类提醒自动生成草稿(回款催收 / 整改提醒 / 跟进提醒 / 承诺提醒):已配置模型则 AI 起草,未配置则本地模板且事实全部来自真实数据。草稿必须人工确认后才进入"待发送"。
多级金额阈值 + 角色绑定人 + 代理审批 + 超时提醒 + 耗时统计 + 超时升级。审批流是要按金额分级走的,不能一个按钮谁都能点。
负责人毛利排名、项目毛利率、承诺兑现率——老板视角的三个数字。加上承诺核销:记录承诺时的已收款基线,之后按"当前已收款 − 基线"算出真实兑现,而不是听口头承诺。
客户档案挂项目和合同,区域经销商、直供客户分层管理。
客户详情:等级、区域、对接人、名下项目与合同额、巡检记录——一个客户的全生命周期。
供应商与施工班组主数据 + 分包台账。有了班组主数据,才能做"质量按班组排行"——把质量问题和具体施工班组挂钩,这是质量分析能落地的前提。
姓名 → userid 映射表:发送提醒时按姓名自动解析 userid。未配置企业微信时也能手工维护联系人,不假装连上了。
112 条产品资料、施工规范、案例库统一归档,是 AI 盾盾的弹药库,也是新人培训教材。材料名称标准化的别名归并逻辑让 ERP 里五花八门的叫法能对上号。
施工方案、检测报告、巡检记录统一归档,上传前过病毒扫描,支持 PDF / Office / 图片 / CAD。上传文件不走公开目录,只能通过带鉴权的下载接口取。
企业图谱分析引擎:把项目、客户、合同、材料、人员织成关系网。当前库里有 296 个实体 + 396 条关系——关系型数据库只能回答"是什么",图谱能回答"跟谁有关系"。
工程项目状态镜像与推演:把所有项目按阶段、风险、回款状态做成一张实时镜像。这个页面正是审计中把 N+1 查询改成批量聚合的那个——2000 个项目下从 1123ms 降到 25ms。
多智能体协同工作台:把"查资料 → 算报价 → 写方案"拆成可观测的步骤链,每一步留下执行记录。AI 干活的过程要能看见,不能只给结果。
产业开放 API 平台:4 个接口(防水选型 / 报价草稿 / 节点规范查询 / 质量诊断)+ 合作方管理 + 若干密钥签发 + 作用域与配额管理。系统从"给人用"变成"给系统用"——客户 ERP、经销商小程序可以直接调这些能力。
威盾企业知识图谱本体:定义业务概念、属性与关系(100 个本体术语 + 关系规则)。这是让 AI 回答"有依据"的底座——先把企业的概念体系定义清楚,AI 才知道什么能连什么。
四种模式(知识问答 / 产品选型 / 规范查询 / 方案草稿),回答强制引用知识库来源。图为真实对话:"经销商怎么给客户解释防水?"——回答带编号引用(KB-202610-010、GB 55030-2022 等)+ 产品资料卡片 + 关联业务实体(项目/合同/客户/风险/任务)。
24 条标准评测问题 + 真实数据基线,按关键词 50% + 业务实体 30% + 引用 20% 打分,当前基线通过率 91.7%。AI 有没有变差靠感觉判断不靠谱,得靠评测集和回归门禁。
企业信息、AI 模型接入(Base URL / API Key 环境变量名)、数据保留策略、导出编码、企业微信配置向导——全部配置化,不写死在代码里。右侧"数据库状态"面板实时显示各业务表数据量。
四级角色与权限矩阵:超级管理员 / 管理员 / 项目经理 / 普通员工,按模块颗粒度授权。
外部集成状态检测(模型 / 企业微信)、ERP / CRM 连接器同步预览、操作审计日志——谁改了什么,全程可追溯。
FDE 这个词是 Palantir 发明的,但这个模式属于所有"产品卖出去才算开始"的行业——防水建材是,涂料是,暖通是,几乎所有工程建材都是。把 FDE 的前线动作装进软件,行业知识才会沉淀成数据,数据才会变成 AI 的弹药。
这套系统两次跃迁给我最大的体会是:功能的"多"和系统的"稳",是两件需要分开处理的事。第一次迭代解决"有没有"——一天 20 个版本把主干铺开;第二次迭代解决"敢不敢给客户用"——把模块补齐、把界面做成客户自己的品牌色、把告警做进眼睛里、再拿审计清单把系统从头到尾过一遍。中间还顺手挖出三个"界面上看不出来、功能已经坏了"的隐性问题。
开发过程本身也是"AI 时代软件该怎么做"的一个样本:人负责业务判断和验收标准,AI 负责实现,每个版本可回滚,每一步有测试兜底。25 个模块、151 项测试、零依赖、部署包齐备——但真正让这套系统能卖出去的,是那些不起眼的东西:审计后敢写"这条不建议改"、未配置企业微信时不虚构发送成功、AI 反算的人工费老实标上"推算值"。
—— Y2Ksoft · 千年虫,2026 年 10 月 7 日于贵阳(10-08 增补升级章节)