【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]