让AI写后端,我多花10分钟测试,省下半天debug
「Vibe Coding AI编程实战」第6篇:后端最容易连环翻车,解法是测试先行——先用 docs-langchain MCP 查规范,再用最小
.py测通千问/NL2SQL 的真实字段,把字段规范写回开发文档后再集成;sqlglot 做 AST 级 SQL 枷锁;维护越来越准的文档,而不是手敲代码。
基本信息
- 来源类型:文章(人人都是产品经理 · 东哥说AI · 「Vibe Coding AI编程实战」系列第 6 篇)
- 原文位置:
raw/articles/2026-07-23-woshipm-ai-backend-test-first-debug.md - Telegram stub:
raw/articles/2026-07-23-212547-tg-01de88.md - baoyu 抽取:
raw/extracts/20260724-004342/woshipm.com/ai10debug.md(Converter: defuddle) - 原文 URL:https://www.woshipm.com/share/6433970.html
- 作者:东哥说AI(页面字段另见蔡延庆等)
- 发布日期:2026-07-22
- 页面信息:约 841 浏览 · 7 分钟读 · 1 评论(抓取时)
- 消化日期:2026-07-24
- 系列定位:上接任务管理篇(Plan→Linear 40 任务),下接联调收尾篇(字段真源 / 假测试通过)
- 抓取信息:baoyu-url-to-markdown ·
URL_CHROME_HEADLESS=1· extract20260724-004342
核心观点
- 后端连环翻车的根因不是「AI 写不出来」,是模块多、接口一对不上全线崩:智能数据分析代理的后端要查库、出图、答业务,任何一层字段/契约飘了后面全返工。作者用的四字口诀:测试先行——在写集成代码前,先拿到真实输入输出。
- 阶段拆分降低风险面:① 前后端脚手架 + 健康检查启动验证;② 前端三栏 UI(会话列表 / 问答 / 图表)让 AI「抽卡」生成;③ 核心难关 = 接千问 + NL2SQL。前两阶段相对轻,第三阶段任一项没测明白就会全链路返工。
- 接模型前先用 MCP 查官方文档(ask 模式,只问不写):挂 docs-langchain MCP 连 LangChain 官方文档;先问「怎么接千问、怎么做 NL2SQL、有哪些现成组件」。文档指向
SQLDatabase、create_sql_agent等,但查归查,字段长什么样还得以实测为准。 - 最小测试是全流程最值钱动作:单独
.py,用阿里云百炼 DashScope SDK 接 通义千问(文中最新 Qwen3.7)——基础对话 → 流式输出 → 工具调用;每项跑通就记下真实字段(流式吐哪些字段、工具参数藏哪、如何强制 JSON)。NL2SQL 同理:先测现成组件 I/O,发现编排不合拍后自研链路:理解意图 → 生成 SQL → sqlglot 安全校验(禁删表、禁SELECT *、强制LIMIT)→ 查库 → 图表配置 → 总结回答,全程 SSE 吐出。 - 测试字段必须写回开发文档,再集成:两份最小测试的真实字段规范追加进任务/开发文档,作为前后端对接参数说明;再让 AI 按「带真实样板的文档」写集成——作者称基本一次过,因为 AI 不用靠猜。这直接喂给系列第 7 篇「以后端真实字段为真源」的联调纪律。
- 报错定位 + 环境/数据卫生:健康检查对不上、Trae IDE 起多个后端、表建了没插模拟数据(补初始化:100 客户 + 1000 订单)、Pydantic v2 把
BaseSettings拆到pydantic-settings(AI 按老版本会漏装)——都靠人盯报错与环境。核心经验:每阶段有真实 I/O 后,联调出问题可把排查从「整个项目」缩到「某两个模块之间」。 - 范式:从盯代码到盯文档:作者自称全程没敲一行业务代码,但多次改开发文档——每测通一模块就追加真实字段。金句:维护的不是代码,是一份越来越准的文档;文档准了,AI 照着写就八九不离十。
实操内容保留
代码/配置
(原文无完整可复制源码块;以下为文中明确的技术选型与约束,可当实现清单。)
- 模型接入:阿里云百炼 DashScope SDK + 通义千问(文中:Qwen3.7)
- 文档 MCP:docs-langchain(LangChain 官方文档检索)
- 现成 NL2SQL 组件(调研结论):LangChain
SQLDatabase、create_sql_agent - 自研编排(实测后):意图理解 → SQL 生成 → sqlglot 校验 → 执行 → 图表配置 → 总结;SSE 流式
- sqlglot 安全规则(AST 级):禁删表 / 禁
SELECT */ 强制LIMIT(防 DROP、防全表拉爆) - 依赖坑:Pydantic v2 → 需显式安装
pydantic-settings(BaseSettings拆包) - 数据初始化量级示例:100 个客户 + 1000 个订单(表空导致「API 通、结果空」)
Prompt 模板 / 指令意图
【Ask 模式 · 只查不写】
请通过 docs-langchain MCP 查 LangChain 最新文档,回答:
1) 如何接入通义千问 / DashScope?
2) 如何做 NL2SQL?有哪些现成组件(如 SQLDatabase、create_sql_agent)?
3) 流式输出、工具调用、结构化 JSON 的推荐写法是什么?
不要写业务集成代码,只给规范与组件名。【最小测试 · 记真实字段】
新建独立 .py 测试文件(不要先写完整后端):
1) DashScope 接千问:基础对话 → 流式 → 工具调用,每步打印并记录真实返回字段
2) 再测 LangChain NL2SQL 组件的真实输入/输出接口
3) 把字段规范追加到开发任务文档,作为前后端对接参数说明
确认字段前不要做全量集成。【集成指令 · 文档驱动】
请按开发任务文档中「已实测的字段规范」编写集成代码:
链路 = 意图理解 → 生成 SQL → sqlglot 校验(禁删表、禁 SELECT *、强制 LIMIT)
→ 查库 → 图表配置 → 总结回答;全程 SSE。
不要猜测未记录的字段名。操作步骤(可复用后端测试先行清单)
- 拆阶段:脚手架+健康检查 → 前端三栏 UI → 模型接入+NL2SQL 核心。
- 接模型前:挂 docs-langchain MCP,ask 模式查官方文档与组件面。
- 最小模型测试:独立
.py+ DashScope 通对话/流式/工具调用,逐项记字段。 - 最小 NL2SQL 测试:测现成组件 I/O;不合适则自研编排 + sqlglot 枷锁 + SSE。
- 字段写回文档:明确指令「追加到开发任务文档」,作为前端对接契约。
- 再集成:按带样板的文档生成集成代码(预期一次过率高)。
- 集成排障:健康检查、多实例/多进程、空表造数、Pydantic v2 依赖拆分——人盯报错与环境。
- 验收标准:每阶段有真实输入输出;后端测通后联调问题默认先查前端参数。
关键概念
- Vibe Coding — 本篇为系列第 6 篇,把 vibe 落到后端交付纪律
- 智能数据分析Agent — 项目对象:查库 + 出图 + 业务问答
- NL2SQL — 人话→SQL;现成组件调研 + 自研编排(新建)
- LangChain —
SQLDatabase/create_sql_agent与 docs-langchain MCP - 通义千问 — DashScope / 百炼接入;文中 Qwen3.7
- MCP 模型上下文协议 — docs-langchain:写代码前先查规范
- 数据分析Agent安全围栏 — sqlglot AST 校验 = SQL 侧枷锁
- 假测试通过 — 对照:本篇用「最小真实调用」提前堵假通过
- Trae IDE — 宿主;文中出现多起后端实例等环境问题
- Claude Code Plan 模式 — 系列后篇联调用 Plan 对齐字段;本篇产出「字段文档」是其输入
- sqlglot — Python SQL 解析/改写库,做 AST 级安全审查(纯文本,未单建实体)
- DashScope / 阿里云百炼 — 通义调用 SDK 与控制台(纯文本)
- Pydantic v2 / pydantic-settings — 配置类拆包依赖坑(纯文本)
- SSE — 后端流式响应通道(纯文本)
与其他素材的关联
- 与 2026-07-23-woshipm-mcp-rules-40-tasks(系列第 5 篇):上篇把 Plan 约 40 任务同步到 Linear 并 Rules 自动流转;本篇在任务板就绪后正式啃后端核心,同一项目时间线。
- 与 2026-07-23-woshipm-vibe-coding-system-pitfalls(系列第 7 篇):本篇产出「带真实字段的开发文档」+ 后端测通;第 7 篇用其做联调真源、防 假测试通过、SSE 结束标识与环境卫生——宜按 5→6→7 顺序读。
- 与 2026-07-05-juejin-intelligent-data-analysis-agent:同属智能数据分析 Agent;掘金偏 PandasAI/Schema/双端架构与安全围栏产品化,本篇偏 Vibe Coding 下后端怎么测着写。
- 与 2026-07-19-juejin-langchain-models-guide:Models 层
invoke/stream/batch与 tool 契约;本篇把 stream/tool 字段「测出来写进文档」再集成。 - 与 2026-06-17-woshipm-ai-dev-failure-engineering:同样强调观测→描述→验证;本篇把验证前移成模块级最小测试。
原文精彩摘录
后端是整个项目最容易连环翻车的地方。不是AI写不出来,是模块一多,一个接口没对上,后面全跟着出错。我用的招就四个字:测试先行。
为什么要加一道sqlglot校验?因为SQL是AI生成的,万一它手一抖写个DROP TABLE删库,或者来个SELECT *把几百万行数据拉爆,后果不堪设想。加这层AST级的安全审查,等于给AI的SQL戴个枷锁,不安全的直接拦下。
这其实就是AI编程的范式:你维护的不是代码,是一份越来越准的文档。文档准了,AI照着写就八九不离十。
(评论·蔡延庆)通过最小测试拿真实字段再给AI参考,确实能大幅降低幻觉风险。而且把测试结果追加到文档里,相当于不断校准AI的上下文,比每次重新生成靠谱。