qq群推广网站免费秒进,企业系统申报,台州网站制作方案,甘肃酒泉建设银行网站导读#xff1a; 传统 BI 报表难以及时响应灵活多变的运营需求#xff0c;而 Text-to-SQL#xff08;文本转SQL#xff09; 技术正是打破这一数据壁垒的关键。 本文将深度复盘 佳杰云星技术团队 如何基于 Java 生态#xff08;Spring AI Alibaba#xff09;#xff0c;从…导读传统 BI 报表难以及时响应灵活多变的运营需求而 Text-to-SQL文本转SQL 技术正是打破这一数据壁垒的关键。 本文将深度复盘 佳杰云星技术团队 如何基于 Java 生态Spring AI Alibaba从 0 到 1 构建生产级“AI 问数” Agent。文章将完整解析从解决大模型“幻觉”的 RAG 设计到 SQL 执行的安全熔断再到前端图表自动渲染的全链路代码实现与踩坑经验。最近产品上线了一个新功能——「AI 问数」一个完全基于 Spring AI含 Spring AI Alibaba 扩展开发的 AI Agent。它能让运营人员以及非技术同学用日常中文直接“聊天式”问数据Agent 自动理解意图、生成 SQL、执行查询再以交互式图表把结果漂亮地呈现出来。这篇文章把从需求调研 → 场景定义 → 问题拆解 → 技术选型 → 全链路开发 → 上线优化整个过程完整拆解复盘一遍。一、需求调研为什么要做「AI 问数」2025 年上半年我们的云运营平台很多客户的数据量已经突破千万级而各个客户对于日常查询需求非常碎片化且有差异。我们做了一次小范围调研覆盖客户的运营、财务、营销 等部门得到的核心痛点如下痛点具体描述影响比例报表固定报表不灵活固定报表只能看平台中提供的固定报表数据临时想看“教育行业客户的 11 月订单趋势”就卡死85%数据等待时间长提数导出 → 分析报表 → 出结果最快也要几个小时62%图表手动做太麻烦拿到 Excel 后还要自己画图、调颜色91%调研结论非常明确大家不是不想要数据而是“要数据太难、太慢、太丑”。于是我们定了目标让所有人 30秒内看到自己想要的图表。二、适用场景到底能解决哪些实际业务问题「AI 问数」目前主要覆盖以下高频场景按使用频率排序日常运营监控“最近 3 个月新用户数趋势”“最近7天订单走势”临时领导/跨部门要数“上个月某类产品订单占比最高的10个客户”“本周账单金额环比上周增长了多少”多指标组合查询“最近30天客户日活、付费金额、订单数量 三条曲线放一张图上”实际使用下来85% 以上的日常提数需求都能被覆盖剩下15% 极复杂需求我们会引导走传统 BI 或版本迭代。三、核心解决问题能力总结传统方式「AI 问数」提升幅度提数最快2小时~1天平均20 秒出结果含图表提升 400 倍只能看固定维度任意自然语言自由组合维度无限结果是表格/Excel直接交互式图表体验跃升需要定制开发纯中文对话成本降低四、技术选型为什么最终选了 Spring AI当时我们对比了以下几套方案我们产品主要技术栈为 Java方案优点缺点最终评价LangChain4j社区最活跃功能最全Java生态适配一般生产级稳定性稍弱备选Semantic Kernel (.NET)企业级成熟我们是Java栈跨语言成本高放弃直接调用通义千问/DeepSeek API 自研Agent最灵活重复造轮子维护成本极高Spring AI Spring AI Alibaba原生Spring风格、开箱即用、生产级稳定、NL2SQL模块现成、Agent框架优秀、与云运营平台相同技术栈兼容性好社区比LangChain小选中最终决定主线用 Spring AI 官方 Spring AI Alibaba 的 DataAgent / Graph 模块大模型底座先用通义千问 Qwen后期可平滑切换 OpenAI-Like 的 LLM如 DeepSeek。五、开发全过程完整复盘5.1 架构设计整体架构如下核心是把Agent Tool Calling RAG三者结合。5.2 关键技术实现细节1. 数据库 Schema 向量化RAG我们把所有表的注释、中文别名、字段注释、历史高频SQL样例全部向量化存入向量引擎。BeanpublicVectorStore vectorStore() {returnnewOpenSearchVectorStore(openSearchOps, embeddingModel);}// 上线前把所有表结构注释灌入一次vectorStore.add(documents);用户提问时先检索最相关的 8-12 个表字段描述注入 Prompt避免大模型“幻觉”生成不存在的字段。2. Text-to-SQL Agent核心我们基于 Spring AI Alibaba Graph 快速搭建 ReAct AgentBeanpublicAgent dataQueryAgent(ChatModel chatModel, ListToolCallback tools) {returnReActAgent.builder().chatModel(chatModel).tools(tools)// SqlExecutor ChartGenerator.systemPrompt(SYSTEM_PROMPT)// 含业务规则安全限制.build();}SYSTEM_PROMPT 里写了非常严格的规则必须使用中文别名禁止 DELETE/UPDATE/DROP 等操作结果集限制 5000 行等3. SQL 执行安全控制我们没有直接把 JDBC 暴露给大模型而是封装了 SqlExecutor Tool先生成 SQL用正则 ANTLR 解析 SQL AST检查是否只涉及允许的表自动注入 WHERE user_id IN (...) 权限条件执行前走 SQL审核规则公司内部规则引擎执行超时 10s 自动熔断4. 图表自动生成这是我们自己扩展的一个 ToolChartGeneratorAgent 会在思考后决定数据类型 → 推荐图表类型折线/柱状/饼等是否需要多系列是否需要堆叠/双Y轴然后调用 ChartGenerator 返回完整的 Chart Option JSON前端直接渲染。{// X 轴上的标签labels: [一月, 二月, 三月, 四月, 五月, 六月, 七月],// 数据集数组 - 每个对象代表一条折线datasets: [{label: 订单数量, // 图例显示的名称data: [65, 59, 80, 81, 56, 55, 40], // Y 轴对应的数据值borderColor: rgb(75, 192, 192), // 折线颜色backgroundColor: rgba(75, 192, 192, 0.2), // 填充区域的颜色若 fill: truefill: false, // 是否填充折线下方区域false | true | - | origin 等tension: 0.4, // 曲线平滑度0 直线接近 1 更圆滑pointBackgroundColor: rgb(75, 192, 192), // 数据点背景色pointBorderColor: #fff, // 数据点边框颜色pointRadius: 5, // 数据点半径borderWidth: 2, // 折线宽度stepped: false, // 是否为阶梯线图true/false/before/after},// 可以添加更多 dataset 实现多条线{label: 订单金额元,data: [45100.00, 60000.00, 35000.00, 70000.00, 88000.00, 65000.00, 50000.00],borderColor: rgb(255, 99, 132),backgroundColor: rgba(255, 99, 132, 0.2),fill: false,tension: 0.4,borderWidth: 2,}]}用户还可以继续追问“换成柱状图”“加上去年同期对比”Agent 会记住上下文继续调整。5. 上下文记忆与多轮对话用了 Spring AI 的 Memory 组件 Redis 存 20 轮对话历史支持指代消解“它”指代上文提到的指标。六、上线效果与数据上线测试局点数据平均响应时间20.8 秒含图表渲染SQL 生成准确率94.3%人工抽查 1000 条用户满意度评分4.8/5.0内部调研运营人员工单量下降 67%七、后续优化方向接入自部署的OpenAI-Like 的 LLM如DeepSeek 进一步降低成本目前 Qwen 费用可控支持“把这张图发给领导”自动生成图片 关键洞察总结多模态支持上传活动海报 → 问“这个活动数据表现如何”Agent 间协作运营异常监控 Agent发现指标突降自动告警八、写在最后「AI 问数」是产品第一次把 Spring AI 从 PoC 真正落地到生产的重磅项目亲身体会是Spring AI已经完全可以支撑企业级 ChatBI 场景开发体验比 LangChain4j 更 Spring-native生产稳定性也更让我们放心。更多系列文章、开源项目、关键洞察、深度解读、技术干货请持续关注佳杰云星欢迎在评论区留言或私信博主交流 Spring AI 实战与企业级 Agent 开发经验