起因

之前公司的业务人员,经常会拿几个excel给我,希望我帮他们做些过滤。而我一般的操作都是,把excel导入到数据库不同的表中。通过sql进行关联查询,并过滤出结果。再导出excel给他们。因为处理的多了,所以想着做成一个工具,节省导入导出数据库的操作。

现在集成大模型可以自然语言转换SQL进行数据查询

地址如下,大家可以体验下:点它-->数据核心表格应用

使用说明

登录

点击登录按钮输入账号密码进行登录如果没有账号自动创建账号

上传Excel

登录左侧区域上传文件

编写查询语句

编写查询语句执行弹出窗口选择相关可以看到结果

修改SQL

生成SQL满意可以直接修改SQL执行

硬货

以下是主要代码,这里使用Rust语言

方法逻辑如下获取前端参数根据table id 获取对应定义调用大模型生成sql最后根据获取sql,检索结果返回

pub async fn nature_search(claims: Claims, Json(po): Json<NatureSearchPO>) -> Json<CommonResult<NatureSearchRetPO>> {
    let mut ret = NatureSearchRetPO::default();
    let schema = claims.get_schema();
    // 获取table定义
    let ddls :Vec<String> = search_ddl(&po.table_ids,schema.as_str()).await;

    // 调用sqlcoder 获取sql
    let sql = get_sql(&po.text,&ddls).await;
    info!("sql: {}", sql);
    // 执行sql
    let vs:Vec<Value> = exec_sql(&sql, schema.as_str()).await;
    ret.sql = sql;
    ret.data = vs;
    Json(CommonResult::success(ret))
}

get_sql方法,接收用户输入DDL调用大模型获取sql

async fn get_sql(text: &String, ddls: &Vec<String>) -> String {
    let ddl_str = ddls.join("\n");
    let question = format!("## Task\r\nGenerate a SQL query to answer the following question:\r\n`{text}`\r\n\r\n### Database Schema\r\nThe query will run on a database with the following schema:\r\n{ddl_str}\n\r\n\r\n### Context\r\n\r\n### SQL\r\nGiven the database schema, here is the SQL query that answers `{text}`:\r\n```sql");
    let sql = crate::data::services::llm::llm_sqlcoder::get_sql_from_sqlcoder(&question).await.unwrap();
    sql
}

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐