基于 Olist 真实电商业务数据库构建的可控 Text2SQL 项目。Olist 本身不是 Text2SQL 标注数据集;本项目在其上构建语义层、检索和 SQL 安全边界。
当前第一批已实现 Phase 1–5,使用说明见 backend/README.md。
后端:
cd backend
uvicorn app.main:app --reload前端:
cd frontend
npm install
npm run dev右上角身份选择器支持 Viewer / Analyst / Finance / Admin。角色会随普通请求通过
X-User-Role、X-User-Id Header 传递,SSE 则通过 role、user_id query 参数传递。
这是轻量演示身份,不是登录系统;真正的表级、字段级和输出级校验由后端 SQLGlot
Guardrail 强制执行。
curl -X POST http://127.0.0.1:8000/api/query \
-H "Content-Type: application/json" \
-H "X-User-Role: analyst" \
-H "X-User-Id: demo_user" \
-d '{"question":"信用卡支付下销售额最高的商品类别是什么?","mode":"mock"}'
curl -N "http://127.0.0.1:8000/api/query/stream?question=每月订单量趋势&mode=mock&role=analyst&user_id=demo_user"python -m app.eval.validate_eval_sets --eval-dir backend/eval_data --role analyst
python -m app.eval.evaluator --suite official --provider mock
python -m app.eval.evaluator --suite permission --provider mock
python -m app.eval.evaluator --suite retrieval
python -m app.eval.evaluator --suite all --provider mock
python -m app.eval.evaluator --suite official --provider llm --limit 20
python -m app.eval.evaluator --ablation all --limit 20The official suite is the reviewed main benchmark. The stress suite is generated pressure data and should be reported separately.