# DataTalk **Repository Path**: elfbobo_admin_admin/data-talk ## Basic Information - **Project Name**: DataTalk - **Description**: DataTalk 是一个基于自然语言处理的数据库交互系统,允许用户通过自然语言查询数据库信息。该系统结合了AI大模型、WebSocket实时通信和数据库操作,提供直观的数据库查询体验。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-01-14 - **Last Updated**: 2026-01-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DataTalk - 数据库自然语言查询系统 ## 项目概述 DataTalk 是一个基于自然语言处理的数据库交互系统,允许用户通过自然语言查询数据库信息。该系统结合了AI大模型、WebSocket实时通信和数据库操作,提供直观的数据库查询体验。 ### 主要功能 - **自然语言数据库查询**: 用户可以通过自然语言描述来查询数据库信息 - **实时操作反馈**: 通过WebSocket提供数据库操作的实时进度反馈 - **智能数据库管理**: 支持数据库切换、表结构查询、数据检索等功能 - **多协议支持**: 同时支持HTTP REST API和WebSocket两种交互方式 ## 技术栈 ### 核心框架 - **Solon Framework 3.8.1-SNAPSHOT**: 轻量级Java应用开发框架 - **Java 25**: 最新Java版本运行环境 ### AI与大模型集成 - **Solon AI Agent**: 提供AI代理能力 - **ReAct Agent模式**: 支持推理-行动循环的智能代理 - **DeepSeek API**: 默认集成的AI大模型服务 ### 数据库相关 - **MySQL Connector 5.1.49**: MySQL数据库连接驱动 - **HikariCP**: 高性能数据库连接池 - **Solon Data SQLUtils**: SQL工具类库 ### 实时通信 - **SocketD WebSocket**: 基于WebSocket的实时双向通信 - **JSON序列化**: 使用Snack4进行数据序列化 ### 其他依赖 - **Lombok**: 简化Java代码编写 - **Logback**: 日志记录框架 - **JUnit 5**: 单元测试框架 ## 项目结构 ``` src/ ├── main/ │ ├── java/com/hongwei/db/ │ │ ├── config/ # 配置类 │ │ │ └── DbChatConfig.java # AI聊天配置和Agent构建 │ │ ├── service/ # 业务服务层 │ │ │ └── DbAgentService.java # 数据库代理服务 │ │ ├── tool/ # 工具类 │ │ │ └── DbTool.java # 数据库操作工具类 │ │ ├── ws/ # WebSocket相关 │ │ │ ├── server/ # WebSocket服务器 │ │ │ │ ├── ServerLifecycle.java # 服务器生命周期管理 │ │ │ │ └── SimpleListen.java # WebSocket监听器 │ │ │ └── WebSocketMessenger.java # WebSocket消息推送工具 │ │ ├── App.java # 应用主入口 │ │ └── AskController.java # HTTP控制器 │ └── resources/ │ └── app.yml # 应用配置文件 └── test/java/features/ # 测试代码 ├── DemoClient.java # WebSocket客户端测试 ├── DemoServer.java # WebSocket服务器测试 └── HelloTest.java # HTTP接口测试 ``` ## 环境要求 ### 系统环境 - **操作系统**: Windows/Linux/macOS - **Java版本**: Java 25 或更高版本 - **Maven**: 3.6+ 版本 ### 外部依赖 - **MySQL数据库**: 5.7+ 版本 - **网络连接**: 访问AI大模型API所需的网络连接 ## 安装和部署 ### 1. 克隆项目 ```bash git clone <项目地址> cd DataTalk ``` ### 2. 配置环境 编辑 `src/main/resources/app.yml` 文件,配置数据库连接和AI服务: ```yaml # 数据库配置 solon.dataSources: chatDb!: class: "com.zaxxer.hikari.HikariDataSource" jdbcUrl: "jdbc:mysql://localhost:3306/your_database" driverClassName: "com.mysql.jdbc.Driver" username: "your_username" password: "your_password" # AI服务配置 solon.ai.chat: demo: apiUrl: "https://api.deepseek.com/v1/chat/completions" model: "deepseek-chat" apiKey: "your_api_key" ``` ### 3. 构建项目 ```bash mvn clean package ``` ### 4. 运行应用 ```bash java -jar target/DataTalk.jar ``` 或者使用Maven运行: ```bash mvn solon:run ``` ## 使用方法 ### HTTP API 方式 #### 基本查询 ```bash curl "http://localhost:8080/askDbQs?qs=查询用户表中的所有数据" ``` #### 常见查询示例 ```bash # 查询数据库列表 curl "http://localhost:8080/askDbQs?qs=有哪些数据库?" # 切换数据库 curl "http://localhost:8080/askDbQs?qs=切换到test_db数据库" # 查询表结构 curl "http://localhost:8080/askDbQs?qs=test_db数据库的users表结构是什么?" # 数据查询 curl "http://localhost:8080/askDbQs?qs=查询users表中年龄大于30的用户" ``` ### WebSocket 方式 #### 连接示例 ```javascript const ws = new WebSocket('ws://localhost:8602'); ws.onopen = function() { console.log('连接已建立'); // 发送查询请求 ws.send(JSON.stringify({ content: "查询users表的所有数据" })); }; ws.onmessage = function(event) { const data = JSON.parse(event.data); console.log('收到响应:', data); }; ``` ## 配置说明 ### app.yml 配置详解 #### 服务器配置 ```yaml server.port: 8080 # HTTP服务端口 ``` #### 应用基本信息 ```yaml solon.app: name: 'demo-app' # 应用名称 group: 'demo' # 应用分组 ``` #### 日志配置 ```yaml solon.logging: appender: console: level: DEBUG # 控制台日志级别 file: level: INFO # 文件日志级别 ``` #### 数据库配置 ```yaml solon.dataSources: chatDb!: # 数据源名称 class: "com.zaxxer.hikari.HikariDataSource" jdbcUrl: "jdbc:mysql://host:port/database" driverClassName: "com.mysql.jdbc.Driver" username: "username" password: "password" ``` #### AI服务配置 ```yaml solon.ai.chat: demo: apiUrl: "AI服务API地址" model: "使用的模型名称" apiKey: "API密钥" ``` ## 核心组件功能说明 ### 1. DbAgentService (数据库代理服务) 负责处理用户的自然语言查询请求,协调AI Agent和数据库工具的交互。 **主要方法**: - `askQs(String qs, String sessionId)`: 处理数据库查询请求 ### 2. DbTool (数据库工具类) 提供具体的数据库操作功能,被AI Agent调用执行实际的数据库操作。 **主要功能**: - `showDatabases()`: 显示所有数据库 - `getDbDriver()`: 获取数据库驱动信息 - `dataBasesExists()`: 检查数据库存在性 - `tableExists()`: 检查表存在性 - `showColumns()`: 显示表结构 - `setDefaultDb()`: 设置默认数据库 - `getDefaultDb()`: 获取默认数据库 - `executeQuery()`: 执行SQL查询 ### 3. WebSocketMessenger (WebSocket消息推送) 负责向客户端推送数据库操作的实时执行日志和进度信息。 **主要方法**: - `sendStart()`: 发送开始执行消息 - `sendProgress()`: 发送执行进度消息 - `sendComplete()`: 发送执行完成消息 - `sendError()`: 发送错误消息 ### 4. WebSocket服务器组件 - **ServerLifecycle**: 管理WebSocket服务器的生命周期 - **SimpleListen**: 处理WebSocket连接和消息 ### 5. DbChatConfig (AI配置) 配置AI聊天模型和ReAct Agent,整合数据库工具到AI代理中。 ## 测试说明 ### 运行单元测试 ```bash mvn test ``` ### 测试示例 #### HTTP接口测试 ```java @Test public void testDatabaseQuery() throws IOException { String result = path("/askDbQs?qs=查询用户表结构").get(); assertNotNull(result); System.out.println(result); } ``` #### WebSocket测试 项目提供了DemoClient和DemoServer测试类,可以直接运行测试WebSocket通信功能。 ## API参考 ### HTTP Endpoints | 方法 | 路径 | 参数 | 描述 | |------|------|------|------| | GET | `/askDbQs` | qs (查询语句) | 自然语言数据库查询 | ### WebSocket Events | 事件名 | 类型 | 描述 | |--------|------|------| | `chatResp` | 响应 | AI查询结果响应 | | `executionLog` | 日志 | 数据库执行日志 | ## 错误处理 系统提供完善的错误处理机制: - 数据库连接异常 - SQL执行错误 - AI服务调用失败 - WebSocket连接异常 所有错误都会通过相应的渠道反馈给用户。 ## 性能优化建议 1. **连接池配置**: 根据并发需求调整HikariCP连接池大小 2. **缓存策略**: 对频繁查询的结果考虑增加缓存 3. **SQL优化**: 监控慢查询并优化SQL语句 4. **AI调用**: 合理控制AI API调用频率和超时时间 ## 安全注意事项 1. **数据库安全**: 确保数据库连接使用最小权限原则 2. **API密钥保护**: 妥善保管AI服务API密钥 3. **输入验证**: 对用户输入进行适当验证和清理 4. **网络安全**: 在生产环境中使用HTTPS和WSS协议 ## 故障排除 ### 常见问题 1. **数据库连接失败** - 检查数据库服务是否运行 - 验证连接参数配置 - 确认网络连通性 2. **AI服务调用失败** - 检查API密钥有效性 - 验证网络连接 - 查看API服务状态 3. **WebSocket连接问题** - 确认端口未被占用 - 检查防火墙设置 - 验证客户端连接地址 ## 贡献指南 欢迎提交Issue和Pull Request来改进项目。 ## 许可证 本项目采用MIT许可证。 ## 联系方式 如有问题或建议,请联系项目维护者。