场景描述
将自然语言转换为 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
}
}