用 llm + SQLite 实现自然语言到 SQL 的智能转换:一个实战案例

在日常开发中,我们经常需要从数据库中查询数据。但对非技术人员来说,写 SQL 查询语句可能是个"噩梦"。而随着大模型的兴起,将自然语言直接转化为 SQL 查询已成为现实。

今天,我将结合 DeepSeek Reasoner 模型SQLite 数据库 ,展示如何通过一段简单的 Python 代码,实现"你说中文,我出 SQL"的自动化能力。


🧩 项目目标

给定一个简单的员工信息表,用户输入自然语言问题(如:"开发部门员工的姓名和工资是多少?"),程序自动解析并生成对应的 SQL 查询语句。


🔧 环境准备

我们使用轻量级的 SQLite 数据库,并接入 DeepSeek 的 API 来完成自然语言理解与 SQL 生成任务。

1. 创建数据库表

python 复制代码
import sqlite3

# 打开链接
conn = sqlite3.connect("test.db")
cursor = conn.cursor()

cursor.execute("""
CREATE TABLE IF NOT EXISTS employees(
    id INTEGER PRIMARY KEY,
    name TEXT,
    department TEXT,
    salary INTEGER
)
""")

✅ 这一步创建了一个名为 employees 的表,包含员工编号、姓名、部门和工资字段。


2. 插入测试数据

scss 复制代码
sample_data = [    (6, "王五", "开发部", 32000),    (7, "张三", "销售部", 20000),    (8, "老六", "开发部", 33000),    (9, "李四", "销售部", 15000)]

cursor.executemany("INSERT INTO employees VALUES(?,?,?,?)", sample_data)
conn.commit()

💡 插入了4条测试数据,涵盖两个部门:开发部和销售部。


3. 获取数据库 Schema

为了让 LLM 理解表结构,我们需要把表的 schema 提供给模型:

python 复制代码
# 通过 table_info 拿到 employees 表的描述
schema = cursor.execute("PRAGMA table_info(employees)").fetchall()
schema_str = "CREATE TABLE EMPLOYEES (\n" + "\n".join([f"{col[1]} {col[2]}" for col in schema]) + "\n)"
print("数据库Schema:")
print(schema_str)

输出结果类似:

sql 复制代码
CREATE TABLE EMPLOYEES (
id INTEGER
name TEXT
department TEXT
salary INTEGER
)

📌 这个 schema 将作为上下文传给 DeepSeek 模型,帮助它理解字段含义。


4. 调用 DeepSeek 生成 SQL

现在,我们调用 DeepSeek 的 API,让模型根据自然语言生成 SQL 查询。

ini 复制代码
from openai import OpenAI

client = OpenAI(
    api_key='',//这里写入自己的apikey
    base_url='https://api.deepseek.com/v1'
)

def ask_deepseek(query, schema):
    prompt = f"""这是一个数据库的Schema:
{schema}
根据这个Schema,你能输出一个SQL查询来回答以下问题吗?
只输出SQL查询,不要输出任何内容,也不要带任何格式。
问题:{query}
"""
    response = client.chat_completions.create(
        model="deepseek-reasoner",
        max_tokens=2048,
        messages=[
            {"role": "user", "content": prompt}
        ]
    )
    return response.choices[0].message.content

# 示例提问
question = "开发部门员工的姓名和工资是多少?"
sql = ask_deepseek(question, schema_str)
print("生成的sql查询:")
print(sql)

✅ 预期输出

运行上述代码后,你可能会得到如下 SQL 查询:

ini 复制代码
SELECT name, salary FROM employees WHERE department = '开发部';

🎉 完美!模型成功理解了"开发部门"对应的是 department = '开发部',并返回了正确的字段选择。


🚀 技术亮点解析

特性 说明
自然语言 → SQL 利用 LLM 的理解能力,无需人工编写复杂查询
Schema 上下文注入 让模型知道表结构,避免误读字段名
轻量级部署 使用 SQLite,无需复杂数据库环境
可扩展性强 可轻松接入其他数据库或前端界面

🛠️ 应用场景建议

  • 低代码平台:让用户用自然语言查询数据
  • 内部报表工具:非技术人员也能快速获取数据
  • 教学辅助:帮助学生理解 SQL 逻辑
  • 自动化脚本:集成到工作流中,提升效率

📌 总结

通过本次实践,我们展示了如何利用 llm ,结合 SQLite 数据库,构建一个简单却强大的"自然语言转 SQL"系统。整个流程清晰、易于复现,适合初学者上手,也具备实际应用价值。

相关推荐
Bruk.Liu5 小时前
(LangChain 实战14):基于 ChatMessageHistory 自定义实现对话记忆功能
人工智能·python·langchain·agent
无名修道院6 小时前
AI大模型微调-LLM、Token、生成与推理详解
llm·token·ai大模型应用开发
ggabb7 小时前
中国文化速记清单.地名与母亲河.文化名人与经典
sqlite
玄同7659 小时前
从 0 到 1:用 Python 开发 MCP 工具,让 AI 智能体拥有 “超能力”
开发语言·人工智能·python·agent·ai编程·mcp·trae
Elwin Wong10 小时前
浅析OpenClaw:从“贾维斯”梦想看下一代 AI 操作系统的架构演进
人工智能·agent·clawdbot·moltbot·openclaw
猿小羽11 小时前
AIGC 应用工程师(3-5 年)面试题精讲:从基础到实战的系统备战清单
面试·大模型·aigc·agent·rag
DFCED11 小时前
OpenClaw部署实战:5分钟搭建你的专属AI数字员工(附避坑指南)
人工智能·大模型·agent·openclaw
潘锦11 小时前
关于行业 AI Agent 评测的 9 个方面
agent
冻感糕人~11 小时前
收藏备用|小白&程序员必看!AI Agent入门详解(附工业落地实操关联)
大数据·人工智能·架构·大模型·agent·ai大模型·大模型学习
victory043112 小时前
hello_agent第九章总结
人工智能·agent