NL2SQL 数据分析师

高级
NL2SQLFunction Calling数据分析
在实验室中打开

场景描述

将自然语言转换为 SQL 查询,自动连接数据库获取数据,并生成可视化图表与分析报告。

逻辑流图

1
用户输入自然语言查询(如:"上个月各部门的销售额是多少?")
2
大模型通过 Function Calling 将自然语言解析为 SQL 语句
3
后端执行 SQL 查询数据库(如 PostgreSQL/MySQL)
4
将查询结果返回给大模型
5
大模型根据数据生成分析报告,前端渲染图表

核心 Prompt 模板

你是一个资深的数据分析师。
你的任务是将用户的自然语言问题,转换为可执行的 SQL 查询语句。

【数据库 Schema】
表名:sales
字段:
- id (INT, 主键)
- department (VARCHAR, 部门名称)
- amount (DECIMAL, 销售额)
- sale_date (DATE, 销售日期)

【要求】
1. 只输出 SQL 语句,不要包含任何其他解释。
2. 确保 SQL 语法正确(PostgreSQL)。
3. 如果问题无法用给定的 Schema 回答,请返回 "ERROR: 无法回答"。

【用户问题】
{{user_query}}

核心代码实现 (TypeScript)

import { GoogleGenAI, Type } from "@google/genai";

const ai = new GoogleGenAI({ apiKey: process.env.GEMINI_API_KEY });

// 1. 定义 Function Declaration
const executeSqlDeclaration = {
  name: "execute_sql",
  description: "执行 SQL 查询并返回结果",
  parameters: {
    type: Type.OBJECT,
    properties: {
      query: {
        type: Type.STRING,
        description: "要执行的 SQL 查询语句",
      },
    },
    required: ["query"],
  },
};

// 2. 调用模型
const response = await ai.models.generateContent({
  model: "gemini-3.1-pro-preview",
  contents: "上个月各部门的销售额是多少?",
  config: {
    systemInstruction: "你是一个数据分析师。请使用 execute_sql 工具来查询数据。",
    tools: [{ functionDeclarations: [executeSqlDeclaration] }],
  },
});

// 3. 处理 Function Call
if (response.functionCalls) {
  const call = response.functionCalls[0];
  if (call.name === "execute_sql") {
    const sqlQuery = call.args.query;
    console.log("生成的 SQL:", sqlQuery);
    // TODO: 在真实数据库中执行 sqlQuery
  }
}