IT评测·应用市场-qidao123.com技术社区

标题: 【DataLoom】智能问数 - 自然语言与数据库交互 [打印本页]

作者: 反转基因福娃    时间: 7 天前
标题: 【DataLoom】智能问数 - 自然语言与数据库交互
探索DataLoom的智能问数功能:简化数据库查询

在数据驱动的决议订定中,数据库查询是获取洞察的关键步骤。但是,传统的数据库查询方法往往复杂且技能性强,这限定了非技能用户的利用。DataLoom的智能问数功能正是为了解决这一问题而设计的。本文将详细介绍这一功能,并展示其背后的代码实现。
DataLoom简介

DataLoom是一个创新的数据管理平台,旨在通过提供直观的界面和强盛的后端处置惩罚能力,简化数据查询和分析过程。我们的目标是让数据查询变得简单,让每个人都能轻松地从数据中获取洞察。
智能问数功能



智能问数是DataLoom的核心功能之一,它答应用户通过自然语言输入查询请求,系统会自动将其转换为SQL语句并实验。这一功能极大地降低了技能门槛,使得即使是没有数据库配景的用户也能快速获取所需数据。
核心流程图


核心代码

ChatForSQLRequest类

  1. @Data
  2. public class ChatForSQLRequest {
  3.    
  4.     /**
  5.      * 模型Id
  6.      */
  7.     private Long chatId;
  8.     /**
  9.      * 询问的数据
  10.      */
  11.     private String question;
  12. }
复制代码
这是一个简单的Java Bean类,用于封装用户请求智能问数时发送的数据。它包含两个属性:chatId(模子Id)和question(询问的数据)。
userChatForSQL方法

  1. public void userChatForSQL(ChatForSQLRequest chatForSQLRequest, User loginUser) {
  2.    
  3.     Long chatId = chatForSQLRequest.getChatId();
  4.     String question = chatForSQLRequest.getQuestion();
  5.     // 1. 获取模型ID
  6.     Chat chat = chatService.getById(chatId);
  7.     ThrowUtils.throwIf(chat == null, ErrorCode.PARAMS_ERROR, "不存在该助手");
  8.     // 2. 获取数据源所有的元数据
  9.     Long datasourceId = chat.getDatasourceId();
  10.     List<AskAIWithDataTablesAndFieldsRequest> dataTablesAndFieldsRequests = getAskAIWithDataTablesAndFieldsRequests(loginUser, datasourceId);
  11.     // 3. 构造请求AI的输入
  12.     String input = buildAskAISQLInput(dataTablesAndFieldsRequests, question);
  13.     // 4. 持久化消息
  14.     ChatHistory user_q = new ChatHistory();
  15.     user_q.setChatRole(ChatHistoryRoleEnum.USER.getValue());
  16.     user_q.setChatId(chatId);
  17.     user_q.setModelId(chat.getModelId());
  18.     user_q.setContent(question);
  19.     chatHistoryService.save(user_q);
  20.     // 5. 利用webSocket发送消息通知开始
  21.     AskSQLWebSocketMsgVO askSQLWebSocketMsgVO = new AskSQLWebSocketMsgVO();
  22.     askSQLWebSocketMsgVO.setType("start");
  23.     askSQLWebSocket.sendOneMessage(loginUser.getId(), askSQLWebSocketMsgVO);
  24.     // 6. 询问AI,获取返回的SQL
  25.     String sql = aiManager.doAskSQLWithKimi(input, LIMIT_RECORDS);
  26.     // 7. 执行SQL,并得到返回的结果
  27.     QueryAICustomSQLVO queryAICustomSQLVO = null;
  28.     try {
  29.    
  30.         queryAICustomSQLVO = buildUserChatForSqlVO(datasourceId, sql);
  31.     } catch (Exception e) {
  32.     // 防止异常发生,前端还继续等待接收数据
  33.         if (e instanceof SQLException) {
  34.     // 记录异常
  35.             queryAICustomSQLVO = new QueryAICustomSQLVO();
  36.             queryAICustomSQLVO
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4