ARTIFACT // N8N-SAFE-TEXT-TO-SQL.JSON (JSON)
n8n + 本地模型安全自然语言查库工作流(AST 语句拦截 + 只读事务 + 行数熔断) (n8n-safe-text-to-sql.json)
利用本地 Qwen2.5-Coder 将业务问题转化为 SQL,内置正则 AST 语句白名单校验(严禁 DELETE/UPDATE/DROP)与强制 LIMIT 熔断。
[核心实测结论 / TL;DR]本配置包「n8n + 本地模型安全自然语言查库工作流(AST 语句拦截 + 只读事务 + 行数熔断)」(文件名:n8n-safe-text-to-sql.json,格式:JSON)是 Tinker AI 实测工坊配套指南《n8n-sql-readonly-database-analyst》的参数化生产模板。支持在本地浏览器实时定制 Ollama 接口地址 (OLLAMA_URL=http://host.docker.internal:11434)、SQL 生成模型 Tag (SQL_MODEL=qwen2.5-coder:14b)、单次查询最大返回行数 (MAX_SQL_ROWS=100) 等 3 项核心变量,默认遵循 127.0.0.1 回环绑定与最小权限规范。
02 // WORKFLOW无代码工作流· 验证日期:2026-10-26
查看全部 42 套配置附件 →n8n-safe-text-to-sql.json
查看配套实测指南 →n8n + 本地模型安全自然语言查库工作流(AST 语句拦截 + 只读事务 + 行数熔断)
利用本地 Qwen2.5-Coder 将业务问题转化为 SQL,内置正则 AST 语句白名单校验(严禁 DELETE/UPDATE/DROP)与强制 LIMIT 熔断。
参数化定制变量 (Variables — 自动保存在本地浏览器)
UTF-8 编码 · 零延迟实时编译
{
"name": "Tinker AI - Safe Local Text-to-SQL Analyst",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "safe-sql-query",
"responseMode": "lastNode"
},
"name": "Question Webhook",
"type": "n8n-nodes-base.webhook",
"typeVersion": 2,
"position": [200, 300]
},
{
"parameters": {
"method": "POST",
"url": "http://host.docker.internal:11434/api/generate",
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={{ JSON.stringify({ model: 'qwen2.5-coder:14b', format: 'json', stream: false, options: { temperature: 0, num_ctx: 8192 }, prompt: 'You are a PostgreSQL read-only analyst. Given schema: orders(id, customer_id, status, amount_cents, created_at). Return JSON {"sql": "SELECT ..."} for question: ' + String($json.body?.question || '').slice(0, 500) }) }}",
"options": { "timeout": 45000 }
},
"name": "Generate SQL via Local Coder",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"retryOnFail": true,
"maxTries": 2,
"continueOnFail": true,
"position": [440, 300]
},
{
"parameters": {
"jsCode": "const raw = JSON.parse($input.first().json.response || '{}');\nlet sql = String(raw.sql || '').trim().replace(/;+$/, '');\nconst forbidden = /\\b(INSERT|UPDATE|DELETE|DROP|ALTER|TRUNCATE|GRANT|REVOKE|COPY|CREATE|EXEC|INTO|pg_sleep)\\b/i;\nif (!/^SELECT\\b/i.test(sql) || forbidden.test(sql) || sql.includes(';')) {\n throw new Error('SECURITY_BLOCK: Only single-statement read-only SELECT queries are permitted.');\n}\nif (!/\\bLIMIT\\s+\\d+/i.test(sql)) {\n sql += ' LIMIT 100';\n}\nreturn [{ json: { verifiedSql: sql } }];"
},
"name": "Deterministic SQL AST & Limit Guard",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [680, 300]
}
],
"connections": {
"Question Webhook": {
"main": [[{ "node": "Generate SQL via Local Coder", "type": "main", "index": 0 }]]
},
"Generate SQL via Local Coder": {
"main": [[{ "node": "Deterministic SQL AST & Limit Guard", "type": "main", "index": 0 }]]
}
}
}
PARAMETER SPECIFICATION // 参数化变量规范说明表
「n8n-safe-text-to-sql.json」可定制环境变量与默认值说明
本配置模板(JSON 格式)支持 3 项运行时参数注入,所有替换均在本地浏览器内完成。
| 模板占位符 | 参数用途说明 | 安全默认值 | 填写示例 |
|---|---|---|---|
{{OLLAMA_URL}} | Ollama 接口地址 | http://host.docker.internal:11434 | http://host.docker.internal:11434 |
{{SQL_MODEL}} | SQL 生成模型 Tag | qwen2.5-coder:14b | qwen2.5-coder:14b |
{{MAX_SQL_ROWS}} | 单次查询最大返回行数 | 100 | 100 |
PAIRED HARDWARE MANIFEST // 配套实测环境与边界记录
配套指南《n8n + 本地模型 Text-to-SQL 数据分析工作流:只读事务沙箱、AST 语法拦截与行数熔断》验证基线
实测硬件与操作系统 (Hardware & OS)
Docker n8n 1.76+ · PostgreSQL 16 / MySQL 8 · 本地 Ollama (`qwen2.5-coder:14b`)
锁定软件栈与模型版本 (Pinned Versions)
n8n 1.76.xPostgreSQL 16Ollama 0.5.7qwen2.5-coder:14b
离线与安全边界 (100% 内网闭环(数据库表结构与业务明细零外传))
无论是核心业务表结构(DDL)还是查询出的客户/营收明细,全程在本地内网闭环流转。
已知限制与失败边界 (Known Limits)
- 高危安全红线:严禁在 Text-to-SQL 节点中复用业务系统的读写主账号(如 `postgres` 超管)!必须创建专用的只读数据库角色(`GRANT SELECT ON ...`)。
- 上下文信噪比边界:不要把上百张底层表的 DDL 全塞进提示词;应精选 5–8 张核心业务宽表或只读视图(View),并附带字段枚举值注释,实测 SQL 一次可执行通过率可达 94% 以上。
DEPLOYMENT CHECKLIST // 配置落地核验步骤
部署 n8n-safe-text-to-sql.json 后的 3 步验收清单
- 已使用开启 `default_transaction_read_only = on` 且带 5 秒超时保护的专用只读数据库账号。
- 确认 Code 校验节点已在执行前拦截分号堆叠语句及一切非 SELECT/WITH 关键字。
- 已强制追加 `LIMIT 100` 行数熔断,并在提示词中标注了核心状态字段的真实枚举值。