一、任务背景
业务人员日常查数据往往需要"提需求 → 等排期 → 拿报表",链路太长。这次借着 TRAE 全面升级,我决定用新版跑通一个真实任务:开发一个对话式数据分析智能体(NL2SQL)。
预期目标:用户输入自然语言,直接返回可执行的 SQL、结果表格和可视化图表,端到端响应控制在 5 秒内。核心考验 Agent 的架构拆解能力和 IDE 的代码编写效率。
二、推进过程(Agent 与 IDE 的丝滑配合)
这次合并减少"信息断点"上体验很好,我的开发流程变成了:
阶段一:Agent 模式做架构与方案拆解
我没有急着写代码,而是先让 Agent 模式拆解任务。我输入:“我要做一个基于 LangGraph 和 FastAPI 的 NL2SQL 应用,需要包含 Schema 检索、SQL 生成自愈、安全机制,帮我出个技术方案和目录结构。”
体验:Agent 很快给出了包含语义层、生成层和执行层的架构建议——retrieve_context → generate_sql → validate_sql(自愈) → execute_sql 的 LangGraph 状态图,外加 YAML 语义层做 Top-N 表注入、sqlglot 做校验回灌。省去了我翻阅文档的时间。
阶段二:切到 IDE 模式死磕核心代码
架构有了,直接切到 IDE 模式写核心逻辑。这里有个难点:用 sqlglot 做 SQL 语法校验和报错回灌重试。
体验:IDE 模式的上下文理解很稳,我在写重试逻辑卡壳时,直接在 IDE 侧边栏对话,让它帮我补齐了"将数据库报错自动翻译为修正提示"的代码——_translate_sqlite_error 把 no such table / no such column / misuse of aggregate 翻成中文 hint,回灌到下一轮生成节点。
阶段三:回到 Agent 模式搞定前端联调
后端通了,前端渲染图表是个体力活。我把需求丢给 Agent:“用 Vue3 + ECharts 写一个组件,通过 SSE 接收流式数据,根据返回字段类型自动匹配折线图或表格。”
体验:Agent 直接吐出了完整的 Vue 组件代码——ChartView.vue 按 chart.type 分发 line/bar/kpi,MessageItem.vue 用 ReadableStream 解析 SSE 逐字符渲染 SQL 打字机效果。我复制进项目微调样式就通了,极大减少了切换工具的成本。
踩坑与解决
遇到一个坑:Agent 生成的 SQL 偶尔会查错表(问销售却去 join 退款表)。解决办法是回到 IDE 模式,优化了 YAML 语义层的检索逻辑——按问题与每张表的描述/关键词/字段中文做命中计分,只注入 Top-5 相关表,无关表不进 prompt。单次输入 token 直接降了约 60%,一次生成成功率从 62% 提升到了 91%。
三、最终产物
经过几个小时的推进,Demo 成功跑通。输入"帮我查一下上个月华南区的销售总额",系统成功输出了可执行 SQL,并以流式打字机效果输出,最后渲染出了 ECharts KPI 卡片(385.78 万)。
换复杂点的问法:“最近30天各区域的销售额排行前5”——自动出柱状图;“今年按月份的销售趋势”——自动出折线图。图表类型由后端根据返回列名/类型决策,前端 ECharts 渲染。
产物截图:
四、真实评价与建议
节省时间的地方:Agent 模式负责"脑暴和搭骨架",IDE 模式负责"填肉和精修"。以前在两个软件间复制粘贴,现在一个窗口无缝切换,思路不中断。尤其是 LangGraph 状态图 + sqlglot 自愈循环这种需要同时顾着编排和校验的逻辑,Agent 先出框架、IDE 补报错翻译,分工很顺。
仍需人工的地方:复杂业务 SQL 的边界情况,Agent 依然会幻觉,必须依赖 IDE 里的 sqlglot 强校验和人工介入。比如多表 join 的别名前缀、聚合函数与 GROUP BY 的搭配,规则引擎能兜底但真模型生成时还是得靠校验回灌拉回来。
给产品的建议:希望未来 Agent 模式能直接连接本地 MySQL 数据库,自动读取表结构并生成 YAML 语义层,那就真起飞了——现在语义层还得手写,是这套方案里最费体力的环节。
