Nanobot与MySQL数据库集成:实现智能数据查询与分析

📅 发布时间:2026/7/5 2:26:40 👁️ 浏览次数:
Nanobot与MySQL数据库集成:实现智能数据查询与分析
Nanobot与MySQL数据库集成实现智能数据查询与分析1. 引言在日常工作中我们经常需要从数据库中查询和分析数据。传统的方式需要编写复杂的SQL语句对于非技术人员来说门槛较高。Nanobot作为一款轻量级AI助手通过与MySQL数据库的集成可以让用户用自然语言直接查询数据大大降低了数据使用的门槛。想象一下这样的场景销售人员想快速了解本周的销售情况只需问一句帮我查下这周的销售TOP10产品就能立即获得结果而不需要找技术人员帮忙写SQL。这种体验不仅提升了效率也让数据真正成为了每个人都能使用的工具。本文将带你一步步实现Nanobot与MySQL的集成让你也能搭建自己的智能数据查询助手。2. 环境准备与快速部署2.1 安装Nanobot首先确保你的系统已经安装了Python 3.8然后通过pip安装Nanobotpip install nanobot-ai或者从源码安装以获得最新功能git clone https://github.com/HKUDS/nanobot.git cd nanobot pip install -e .2.2 MySQL数据库准备确保你有一个可用的MySQL数据库实例。如果没有可以使用Docker快速启动一个docker run --name mysql-nanobot -e MYSQL_ROOT_PASSWORDyour_password -e MYSQL_DATABASEnanobot_db -p 3306:3306 -d mysql:8.0创建示例数据表CREATE TABLE sales_data ( id INT AUTO_INCREMENT PRIMARY KEY, product_name VARCHAR(100), sale_date DATE, quantity INT, amount DECIMAL(10,2), region VARCHAR(50) ); INSERT INTO sales_data (product_name, sale_date, quantity, amount, region) VALUES (笔记本电脑, 2024-01-15, 10, 50000.00, 华北), (智能手机, 2024-01-15, 25, 75000.00, 华东), (平板电脑, 2024-01-16, 15, 45000.00, 华南), (智能手表, 2024-01-16, 30, 60000.00, 华北), (耳机, 2024-01-17, 50, 25000.00, 华东);3. 数据库连接配置3.1 配置MySQL连接编辑Nanobot的配置文件~/.nanobot/config.json添加数据库连接信息{ providers: { openrouter: { apiKey: your_openrouter_api_key } }, database: { mysql: { host: localhost, port: 3306, user: root, password: your_password, database: nanobot_db, enable: true } }, agents: { defaults: { model: anthropic/claude-sonnet } } }3.2 测试数据库连接创建一个简单的测试脚本来验证连接是否正常import mysql.connector from mysql.connector import Error def test_mysql_connection(): try: connection mysql.connector.connect( hostlocalhost, databasenanobot_db, userroot, passwordyour_password ) if connection.is_connected(): print(MySQL数据库连接成功) cursor connection.cursor() cursor.execute(SELECT COUNT(*) FROM sales_data) result cursor.fetchone() print(f销售数据表中有 {result[0]} 条记录) except Error as e: print(f连接错误: {e}) finally: if connection.is_connected(): cursor.close() connection.close() test_mysql_connection()4. 实现智能数据查询功能4.1 创建数据库查询工具在Nanobot中创建一个专门的数据库查询工具# nanobot/tools/mysql_query.py import mysql.connector from mysql.connector import Error import pandas as pd from .base import tool tool def query_sales_data(query_type: str, timeframe: str None, region: str None) - str: 查询销售数据 Args: query_type: 查询类型如 summary, top_products, regional timeframe: 时间范围如 this_week, this_month region: 地区如 华北, 华东 try: connection mysql.connector.connect( hostlocalhost, databasenanobot_db, userroot, passwordyour_password ) if query_type summary: sql SELECT SUM(quantity) as total_quantity, SUM(amount) as total_amount FROM sales_data if timeframe this_week: sql WHERE sale_date CURDATE() - INTERVAL 7 DAY elif query_type top_products: sql SELECT product_name, SUM(quantity) as total_quantity, SUM(amount) as total_amount FROM sales_data GROUP BY product_name ORDER BY total_amount DESC LIMIT 10 elif query_type regional: sql fSELECT region, SUM(quantity) as total_quantity, SUM(amount) as total_amount FROM sales_data WHERE region {region} GROUP BY region df pd.read_sql(sql, connection) return df.to_string() except Error as e: return f查询错误: {str(e)} finally: if connection.is_connected(): connection.close()4.2 自然语言到SQL的转换创建一个更智能的查询工具能够理解自然语言并转换为SQLtool def natural_language_query(user_query: str) - str: 根据自然语言查询数据库 Args: user_query: 用户自然语言查询如查询这周的销售总额 # 这里可以集成LLM来解析自然语言并生成SQL # 简化版基于关键词匹配 query_mapping { 销售总额: SELECT SUM(amount) as total_sales FROM sales_data, 本周销售: SELECT SUM(amount) as weekly_sales FROM sales_data WHERE sale_date CURDATE() - INTERVAL 7 DAY, 产品排名: SELECT product_name, SUM(amount) as sales FROM sales_data GROUP BY product_name ORDER BY sales DESC LIMIT 10 } for keyword, sql in query_mapping.items(): if keyword in user_query: return execute_sql_query(sql) return 抱歉我暂时无法理解这个查询。请尝试询问销售总额、产品排名等信息。 def execute_sql_query(sql: str) - str: try: connection mysql.connector.connect( hostlocalhost, databasenanobot_db, userroot, passwordyour_password ) df pd.read_sql(sql, connection) return format_query_results(df) except Error as e: return f查询执行错误: {str(e)} def format_query_results(df) - str: 格式化查询结果为易读的文本 if df.empty: return 没有找到相关数据 result [] for _, row in df.iterrows(): if total_sales in df.columns: result.append(f销售总额: {row[total_sales]:,.2f}元) elif weekly_sales in df.columns: result.append(f本周销售额: {row[weekly_sales]:,.2f}元) else: result.append(str(row.to_dict())) return \n.join(result)5. 实际应用案例5.1 销售数据分析场景让我们看一个完整的销售数据分析示例# 完整的销售分析工具 tool def comprehensive_sales_analysis(timeframe: str this_month) - str: 执行全面的销售分析 Args: timeframe: 时间范围如 this_week, this_month analysis_results [] # 总销售额 total_sales_sql fSELECT SUM(amount) as total_sales FROM sales_data WHERE sale_date CURDATE() - INTERVAL 30 DAY total_sales execute_sql_query(total_sales_sql) analysis_results.append(f 总销售额: {total_sales}) # 地区分布 regional_sql SELECT region, SUM(amount) as region_sales FROM sales_data GROUP BY region ORDER BY region_sales DESC regional_data execute_sql_query(regional_sql) analysis_results.append( 地区销售分布:) analysis_results.append(regional_data) # 热销产品 top_products_sql SELECT product_name, SUM(quantity) as total_quantity, SUM(amount) as total_sales FROM sales_data GROUP BY product_name ORDER BY total_sales DESC LIMIT 5 top_products execute_sql_query(top_products_sql) analysis_results.append( 热销产品TOP5:) analysis_results.append(top_products) return \n\n.join(analysis_results)5.2 交互式查询示例现在你可以通过Nanobot进行自然语言查询# 启动Nanobot交互模式 nanobot agent # 然后尝试以下查询 # 显示这周的销售情况 # 哪个产品卖得最好 # 华北地区的销售数据6. 安全性与最佳实践6.1 数据库安全配置确保数据库连接的安全性def get_secure_connection(): 获取安全的数据库连接 config { host: localhost, database: nanobot_db, user: nanobot_user, # 使用专用用户非root password: strong_password_123, ssl_disabled: False, connection_timeout: 30, pool_size: 5 # 使用连接池 } return mysql.connector.connect(**config)6.2 SQL注入防护始终使用参数化查询来防止SQL注入tool def safe_query_product_sales(product_name: str) - str: 安全地查询特定产品的销售数据 sql SELECT * FROM sales_data WHERE product_name %s try: connection get_secure_connection() cursor connection.cursor() cursor.execute(sql, (product_name,)) results cursor.fetchall() return format_results(results) except Error as e: return f查询错误: {str(e)}7. 总结通过本文的实践我们成功将Nanobot与MySQL数据库集成实现了智能数据查询和分析功能。这种集成让非技术人员也能轻松查询和分析数据大大提升了工作效率。实际使用下来这套方案的部署和配置都比较简单基本上按照步骤来就能顺利完成。查询效果对于日常的数据分析需求已经足够用了生成的结果也比较直观易懂。如果你正在考虑为团队搭建一个智能数据查询工具建议先从简单的查询场景开始逐步扩展功能。可以先从销售数据、用户数据等核心业务数据入手让团队成员先体验自然语言查询的便利性再根据反馈逐步完善。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。