反转基因福娃 发表于 昨天 10:05

【DataLoom】智能问数 - 自然语言与数据库交互

探索DataLoom的智能问数功能:简化数据库查询

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

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

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

https://i-blog.csdnimg.cn/direct/532e8f83453e4ab584ad1b3cf0ad1dd0.png
核心代码

ChatForSQLRequest类

@Data
public class ChatForSQLRequest {
   
    /**
   * 模型Id
   */
    private Long chatId;
    /**
   * 询问的数据
   */
    private String question;
}
这是一个简单的Java Bean类,用于封装用户请求智能问数时发送的数据。它包含两个属性:chatId(模子Id)和question(询问的数据)。
userChatForSQL方法

public void userChatForSQL(ChatForSQLRequest chatForSQLRequest, User loginUser) {
   
    Long chatId = chatForSQLRequest.getChatId();
    String question = chatForSQLRequest.getQuestion();
    // 1. 获取模型ID
    Chat chat = chatService.getById(chatId);
    ThrowUtils.throwIf(chat == null, ErrorCode.PARAMS_ERROR, "不存在该助手");
    // 2. 获取数据源所有的元数据
    Long datasourceId = chat.getDatasourceId();
    List<AskAIWithDataTablesAndFieldsRequest> dataTablesAndFieldsRequests = getAskAIWithDataTablesAndFieldsRequests(loginUser, datasourceId);
    // 3. 构造请求AI的输入
    String input = buildAskAISQLInput(dataTablesAndFieldsRequests, question);
    // 4. 持久化消息
    ChatHistory user_q = new ChatHistory();
    user_q.setChatRole(ChatHistoryRoleEnum.USER.getValue());
    user_q.setChatId(chatId);
    user_q.setModelId(chat.getModelId());
    user_q.setContent(question);
    chatHistoryService.save(user_q);
    // 5. 利用webSocket发送消息通知开始
    AskSQLWebSocketMsgVO askSQLWebSocketMsgVO = new AskSQLWebSocketMsgVO();
    askSQLWebSocketMsgVO.setType("start");
    askSQLWebSocket.sendOneMessage(loginUser.getId(), askSQLWebSocketMsgVO);
    // 6. 询问AI,获取返回的SQL
    String sql = aiManager.doAskSQLWithKimi(input, LIMIT_RECORDS);
    // 7. 执行SQL,并得到返回的结果
    QueryAICustomSQLVO queryAICustomSQLVO = null;
    try {
   
      queryAICustomSQLVO = buildUserChatForSqlVO(datasourceId, sql);
    } catch (Exception e) {
    // 防止异常发生,前端还继续等待接收数据
      if (e instanceof SQLException) {
    // 记录异常
            queryAICustomSQLVO = new QueryAICustomSQLVO();
            queryAICustomSQLVO
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【DataLoom】智能问数 - 自然语言与数据库交互