★在这个人人都在追捧 OpenClaw 等“全能型” AI 助手的时代,只要一个插件,AI 似乎就能接管一切。但在真正严肃的企业级业务场景里,本次项目实践却选择了一条看起来有些“笨”的路:放弃拿来主义的魔法,从底层手搓一个专属于企业的“超级 ERP 数据分析专家”。
因为企业软件的核心诉求永远是:绝对的安全可控,以及对业务的深度理解。 今天,我们将完整复盘这次基于 Spring AI Alibaba + BFF 架构,让 AI Agent 深度融入企业 ERP 的硬核实战。
一、 痛点与破局:让“死数据”听懂人话
只要是使用传统 ERP 系统的企业,大概率都经历过这样的痛点:
系统里沉淀了海量的客户记录、工程数据等,但它们是“死”的。管理层想要看个临时的数据维度,往往需要技术人员现写SQL,或者在“ERP”里反复配置,数据流转永远滞后于业务决策。
破局的目标很明确:打破僵局,打造一个能听懂人话的企业级智能数据分析助手。业务人员只需要对它说:“帮我综合分析一下客户XXX”,它就能立刻去数据库里挖掘、计算,并给出专业的诊断报告。


<<< 左右滑动见更多 >>>
二、 核心高光:打通 ERP 的最后一公里
很多企业做 AI,喜欢搞一个独立的高大上网页,或者挂在企业微信的机器人里。但我们认为,不改变用户习惯,才是最好的体验。
为此,我们重写了前端代码,将 AI 助手直接无缝嵌入到了现有的 ERP 系统中。
业务人员在录入客户信息、查阅工程进度的同时,随时可以唤出旁边的对话框进行提问。不需要跳出系统,不需要切换账号。这就是我们将 AI 真正变成“生产力工具”的最后一公里。

三、 水面之下的硬核技术底座
为了支撑前端这个极其简单的对话框,我们在水面之下构建了一套极其严密的三层架构。这也正是我们这套“笨方法”的最大优势所在:
1. 绝对的护城河:数据隔离与 BFF 守护
在安全面前,我们没有丝毫妥协。
数据库隔离:AI 直接连主库是极其危险的。我们建立了一个独立的查询数据库,定时从主库同步所需的业务数据(客户、工程等),并为 AI Agent 限制了最低的只读权限角色。最大限度保证了主系统的数据绝对安全。 BFF 网关:我们增加了一层 Node.js BFF (Backend for Frontend) 网关。它不仅把大模型的 API Key 死死锁在了内网,还通过“静默代持和存库”机制,完美解决了原生 DataAgent 的局限性。哪怕业务员在生成报告中途锁屏了,BFF 依然能在后台稳稳接住数据并存入数据库,确保对话不断档。
2. 告别幻觉:将业务 SOP 注入 AI 的灵魂
AI 经常胡说八道(幻觉)怎么办?我们的解法是:规则前置。 通过极其细致的 Prompt 调优、语义模型配置、业务知识配置以及智能体知识库的搭建,我们把一套极其严苛的“业务 SOP”和“深度诊断逻辑”注入了模型。它不仅会写 SQL,更知道我们公司的统计口径是什么,从而保证了输出结果的高度精准和可控。
3. 敏捷部署:从 1Panel 到未来生态
目前,这套包含前端、BFF 网关和后端 DataAgent 的架构,已通过 1Panel 实现了稳健的容器化部署。这种微服务架构让迭代和维护变得异常敏捷。
四、 价值延伸与星辰大海
这套架构落地后,最大的提效价值就是把沉睡的数据,变成了随时可以调用的活资产。
原则上来说,只要使用 ERP 系统的企业,都可以复用这套理论和架构。
未来计划朝着三个方向继续深耕:
体验持续进化:继续优化前端,加入历史会话管理、一键多智能体切换等更丝滑的功能。 服务一键打包:将三层服务做成类似 OpenClaw 那样的“一键安装扩展插件”,开箱即用。 跨部门的全域赋能:目前跑通了核心的客户链路,未来陆续接入工程、物业等各个部门的数据。通过不同的专属 Agent(智能体)来承接不同部门的分析需求,最终拼图成一个全知全能的企业超级大脑。

★技术从来不是为了炫技,而是为了解决业务问题。在这条从“人找数据”向“数据找人”进化的路上,我们才刚刚开始。
附录:核心组件配置指南
1. DataAgent 核心端配置 (服务器端自编译模式)
首先下载spring-ai-alibaba/DataAgent。
在 1Panel 的容器编排中,我们data-agent-management和data-agent-frontend分开在两个容器中,严格执行前后端分离部署:
data-agent-management容器:专门负责底层 Java 逻辑和 AI 大模型交互,是整个系统的“重装大脑”。data-agent-frontend容器:作为 DataAgent 原生的管理后台前端运行,负责系统级的配置管理。
由于初期没有配置本地开发环境,我们直接把 DataAgent 源码扔到 1Panel 服务器上,让服务器自己完成 Maven 编译和运行。
以下是 1Panel 上的容器编排核心片段(节选):
version:'3'services:# ---------------------------------------------# 核心大脑:Java 引擎 + 动态注入 Python 环境# ---------------------------------------------dataagent:image:dataagent1.0:latestcontainer_name:data-agent-managementports:-"8065:8065"volumes:# 直接挂载服务器上编译好的 Jar 包和业务配置文件-/opt/1panel/apps/data-agent-source/DataAgent-main/data-agent-management/target/spring-ai-alibaba-data-agent-management-1.0.0-SNAPSHOT.jar:/app/app.jar-/opt/1panel/apps/data-agent-source/DataAgent-main/data-agent-management/src/main/resources/application.yml:/app/application.ymlworking_dir:/app# 核心操作:启动 Jar 包前,先动态安装 Python3 环境,以支撑复杂的数据诊断脚本command:sh-c"apt-get update && apt-get install -y python3 && java -XX:-UseContainerSupport -jar app.jar"restart:always# ---------------------------------------------# 原生管理后台:Node 环境支撑# ---------------------------------------------frontend:image:dataagent-web1.0:latestcontainer_name:data-agent-frontendports:-"3000:3000"volumes:# 挂载前端管理台源码-/opt/1panel/apps/data-agent-source/DataAgent-main/data-agent-frontend:/appworking_dir:/app# --host 0.0.0.0 极其重要,允许外部浏览器访问开发服务器command:sh-c"npm install && npm run dev -- --host 0.0.0.0"restart:always★(注:此处省略了网络配置与依赖节点,重点展示应用层的分离逻辑。)
2. BFF 中继网关配置 (流式拦截与静默存库)
BFF 层是保护企业 API Key 和接管data-agent-frontend前端长连接的“桥头堡”。我们使用 Node.js 结合Express编写。下面展示了 server.js 中最核心的“流式拦截与断网兜底存库”逻辑片段:
// server.js 核心逻辑节选:接管 Java 端的 SSE 流app.get('/api/stream/search', async (req, res) => {// ... 省略前置鉴权与限流逻辑 ...// 监听前端手机锁屏或意外断开连接 req.on('close', () => {console.log(`⚠️ [手机锁屏/断开] Session: ${finalSessionId}。BFF 启动【静默代持】完成存库!`); clientConnected = false; }); javaResponse.data.on('data', (chunk) => {if (clientConnected) res.write(chunk); // 如果前端还在,正常推流// 【核心】无论前端在不在,BFF 都会解析底层流,组装 HTML 和 Markdown// ... (解析逻辑略) ... }); javaResponse.data.on('end', async () => {if (clientConnected) res.end();// 流结束后,BFF 自动调用 Java 的存库接口,确保对话数据 100% 落盘if (currentNodeName && nodeContentBuffer) {await saveMessageToJava(finalSessionId, apiKey, formatNodeHtml(currentNodeName, nodeContentBuffer), 'html'); }console.log(`🎉 [大圆满] Session: ${finalSessionId} 数据落盘完毕`); });});在 1Panel 中,BFF 的部署同样精简,将其接入 1panel-network 内部网络,实现与 Java 后端的安全隔离通信。

3. ERP (IIS 服务器) 反向代理与 HTTPS 配置
因为我们的 AI 聊天助手是直接嵌入到现有 ERP 页面中的,为了彻底解决浏览器的 CORS 跨域问题,并保护内网的 BFF 端口,我们在 ERP 宿主服务器(IIS)上配置了 URL Rewrite 反向代理。
在 web.config 中添加如下规则:
一是将发往 /data-agent-api/的请求悄悄转发给内网的BFF服务(3001 端口);二是强制 HTTP跳转到HTTPS,保证数据传输安全。
XML<rewrite> <rules> <rule name="ReverseProxyToDataAgent" stopProcessing="true"> <match url="^data-agent-api/(.*)" /> <action type="Rewrite" url="http://139.18.18.69:3000/{R:1}" /> </rule> <rule name="HTTP to HTTPS" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="^OFF$" /> </conditions> <action type="Redirect" url="https://XXX.com:13201/{R:1}" redirectType="Found" /> </rule> </rules></rewrite>4. 前端代码部署:双轨鉴权与 ERP 无缝集成
为了让 AI 助手完美融入业务人员的工作流,我们采用最轻量级的原生 HTML + JS 编写了专属客户端。并且,在系统入口设计上,我们做了双轨制鉴权的架构。
整个前端资源包被精简到了极致,部署到 ERP 的 Web 服务器时,文件结构如下:
Plaintext📦 ERP_Web_Root (企业 ERP 网站根目录) ┣ 📂 css ┃ ┗ 📜 agent-atom-one-dark.min.css // 代码块与 SQL 语句的暗黑高亮主题 ┣ 📂 js ┃ ┣ 📜 agent-echarts.min.js // ECharts 核心库:负责渲染动态可视化图表 ┃ ┣ 📜 agent-highlight.min.js // 语法高亮引擎 ┃ ┣ 📜 agent-html2canvas.min.js // 截图引擎:支持一键将 AI 分析报告导出为图片 ┃ ┣ 📜 agent-marked.min.js // Markdown 解析器:负责实时渲染流式文本 ┃ ┣ 📜 agent-NoSleep.min.js // 防休眠插件:防止移动端看长篇分析报告时锁屏导致断流 ┃ ┗ 📜 agent-presets.js // 核心预设:包含接口路由、UI 配置及重试逻辑 ┗ 📜 ai-agent-chat.html // 🌟 核心主程序:UI 界面与 URL 参数解析引擎绝密核心:如何实现“懂你”的无缝嵌入与独立鉴权?
很多人以为嵌入就是写死一个iframe,那 AI 就像个瞎子,根本不知道你是谁。我们的核心杀手锏是:“ERP 动态 URL 传参注入”与“独立登录角色提纯”相结合。
模式一:ERP 内部唤醒(免登 SSO)
当业务员在 ERP 中打开某个项目的页面并点击“AI 助手”时,ERP 系统会在底层动态拼接出一个带有加密参数的 iframe 链接:
HTML<iframe src="/ai-agent-chat.html?userId=8801&role=sales_manager&projectId=XXX&token=eyJhbG..." style="border:none; width:400px; height:600px; position:fixed; right:20px; bottom:20px; z-index:9999;"></iframe>前端的 JS 会自动拦截 URL 中的 token 和 userId,并在随后发往 BFF 网关的请求中带上这些凭证。业务员无需二次登录,AI 也会静默继承该员工的业务上下文。
模式二:独立界面登录(角色提纯与解耦)
考虑到系统的独立可用性(比如高管需要用手机在外部随时查看数据),我们还开发了专属的独立登录界面。
账套与业务对齐:登录时强制选择业务账套。 精准的角色提纯:ERP 系统中通常有几十上百种角色,但 AI 助手在登录获取 Profile 后,会在前端进行严格的“角色提纯”,自动过滤并只保留与数据分析强相关的核心角色(如:总经理、销售经理、销售顾问)。
这种设计的终极优势:
无论是从 ERP 内部免登唤起,还是通过独立链接外部登录,最终都会殊途同归——带着纯净、合规的角色权限来到我们的 BFF 网关面前。这种既能“深度耦合”又能“随时解耦”的设计,才是企业级架构应有的样子。
(注:如果您对这套“企业级 AI Agent 前端落地工程”的细节感兴趣,欢迎交流探讨。)
夜雨聆风