# NL2SQL-Agent **Repository Path**: yechen653/nl2-sql-agent ## Basic Information - **Project Name**: NL2SQL-Agent - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-11-07 - **Last Updated**: 2026-11-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # docs 索引 · 四道闸门 单人开发,8 阶段压成 4 道闸门。压的是**文档份数**,不是决策顺序。 | 闸门 | 文件 | 何时过闸 | 状态 | |---|---|---|---| | G1 定范围 | [G1-定范围.md](./G1-定范围.md) | 目标用户 / 成功数字 / 审批者三题有答案 | ✅ 已过闸
用户=A 业务同学 · 准确率目标 75% · 审批者同一人 | | G2 定形状 | [G2-定形状.md](./G2-定形状.md) | SSE 事件表能倒推出界面区块;`SqlDialect` 与 State 已冻结 | ✅ 已定稿
8 事件 / 6 接口 / 3 冻结结构 · 契约已机器化 | | G3 切片开发 | [G3-切片开发.md](./G3-切片开发.md) | 每个切片动工前填「决策清单」,随代码提交 | ✅ S1~S4 全部落地,S5 决策清单 10 条
Java 54 / Python 30 / 契约 27 断言 | | G4 评测与交付 | [G4-评测与交付.md](./G4-评测与交付.md) | 一条命令跑出指标表 + 新人按手册能跑通 | 🟡 首次 L4 已完成(§9)
SC-1 严格 0.46 **未达 75%**;§6 快速开始手册待补 | | — 活动文件 | [决策日志.md](./决策日志.md) | 全程随手记,不设过闸 | 🟢 D-01~D-31 持续 | ## 仓库结构地图 | 目录 | 职责 | 关键入口 | |---|---|---| | `contracts/` | **契约单一真源**(机器读):JSON Schema → 生成 `contracts_py/` 与 `contracts.d.ts` | `validate.py`(27 例)、`generate.sh` | | `gateway/` | Java 数据网关:白名单 / 单语句 / EXPLAIN 成本门 / 一次性票据 / 只读执行 / 独立审计库 | Spring Boot 3.5.7 · JDK 25 | | `orchestrator/` | Python 编排层:FastAPI + LangGraph 10 节点图、SSE、checkpoint、真/假模型 | `app/main.py` · `.env.example` | | `ui/` | Vue3 前端:A~G 区块、SSE 消费、审批交互、结果表与流式结论 | `src/App.vue` · `vite.config.ts` | | `eval/` | G4 评测:Golden 集、能力边界样本、指纹、L1~L4 回归 | `run_all.py` · `golden.json` · `results/` | | `tools/` | 开发辅助脚本(与产品运行时无关) | `seed_demo_data.py` 演示数据播种/回滚 | | `docs/` | 四道闸门、决策日志、历史归档(人类读) | 本文件 | 文档负责「为什么这么定」,`contracts/` 负责「这么定之后怎么被强制」。两者不能互相替代:文档不会让测试变红,schema 不会解释取舍。 **一条命令跑 L1~L4**(项目根目录): ```bash orchestrator/.venv/Scripts/python.exe eval/run_all.py ``` L1~L3 无需外部依赖;L4 需要网关与编排层在线,不在线会明确标 `SKIPPED` 并打印启动命令,不会伪造指标。 ## 端口:设计值与本地演示值 G2 §1.3 / G4 §6 记的是**设计定稿值** `8080 / 8000 / 5173`。本机因其他项目长期占用 5173、且为避免与 WorkBuddy 端口碰撞,实际演示改用: | 进程 | 设计值 | 本地演示值 | |---|---|---| | Java 网关 | 8080 | **18080** | | Python 编排 | 8000 | **18000** | | Vue 前端 | 5173 | **5180** | `orchestrator/.env` 与 `ui/vite.config.ts` 按演示值配置;改设计端口时两处与文档要一起改。 ## 三条不可压缩项 1. **接口契约与 State schema 必须在 G2 冻结**——三进程跨语言,改一次伤筋动骨。 2. **Golden 集要早于评测攒完**——已落地 50 条(分桶 15/10/10/8/5/2,每条有真实结果指纹),不是临时凑题。 3. **决策日志全程写**——面试追问「为什么不上向量库」时,靠当时记录的原始理由。 ## 已归档 - 原 8 阶段骨架(00~07)已合并进四份闸门文档,原件于 2026-10-29 删除(见 D-08)。 - [archive/项目交接文档-2026-10-28.md](./archive/项目交接文档-2026-10-28.md):开做前的**初始设想**,⚠️ **已过时**。其中 MyBatis、JDK 21、conda/Python 3.13、`deepseek-flash` 不可用、长期记忆 Store 等说法已被 D 系列决策推翻或实现阶段否决。**只读归档,不可当现状使用**;判断现状以四道闸门 + 决策日志为准。