数据集成 使用教程
数据集成(GenAI Toolbox)让 AI 模型能够直接访问和查询数据库。本教程将手把手教你如何配置和使用这一功能。
架构说明(2026-05 起)
工具在 Sira 后端进程内执行(不再依赖独立的 toolbox 容器),保存即生效,没有"部署"步骤。
什么是 数据集成?
数据集成 为 AI 提供了结构化数据访问能力:
用户问题 → AI Agent → 进程内数据工具 → 数据库查询 → 返回结果核心价值:
- ✅ AI 可以理解自然语言并选用预定义的查询工具
- ✅ 支持多种数据库(MySQL、PostgreSQL、MongoDB 等)
- ✅ 可视化配置,无需编写代码
- ✅ 工具保存即生效,无需部署
五分钟快速开始
步骤 1:创建数据源
- 进入 数据集成 → 数据源管理
- 点击 创建数据源
配置示例:MySQL 销售数据库
名称: sales_db
显示名称: 销售数据库
类型: MySQL
连接配置:
主机: localhost
端口: 3306
数据库: sales
用户名: sales_user
密码: ********- 点击 测试连接 确保连接成功
- 保存数据源
步骤 2:创建工具
- 进入 数据集成 → 工具管理
- 点击 创建工具
工具是一段参数化的查询(不是"一组表 + 描述")。先选数据源,再选工具类型(kind),对话框会按 kind 动态渲染字段(SQL 类显示 SQL 语句框,Cypher 类显示 Cypher 框)。
配置示例:查询销售数据
名称(name): query_sales_data
显示名称: 查询本月销售额
数据源(source_id): sales_db(选择刚创建的数据源)
工具类型(kind): sql # 该数据源支持的类型里选
描述(description): 统计指定月份的订单总额,给 AI 看,决定何时调用
statement: |
SELECT SUM(amount) AS total
FROM orders
WHERE created_at >= :start_date AND created_at < :end_date
AND status = 'paid'
parameters: # 列表式,每条含 名称/类型/必填/描述
- name: start_date
type: string
required: true # 必填开关(影响"仅必填"自动生成)
description: 月初日期 YYYY-MM-DD
- name: end_date
type: string
required: true
description: 下月初日期 YYYY-MM-DD- 保存工具
步骤 3:创建工具集
- 进入 数据集成 → 工具集管理
- 点击 创建工具集
名称: sales_toolset
显示名称: 销售分析工具集
描述: 用于销售数据分析和报表生成
包含工具:
- query_sales_data ✓- 保存工具集
步骤 4:关联到 Agent
- 进入 Agent System → Agents
- 编辑或创建一个 Agent
- 在 工具配置 部分,选择 GenAI 工具集
- 勾选
sales_toolset - 保存 Agent
步骤 5:测试效果
创建一个 Application 并测试:
用户: "本月销售额是多少?"
AI: "正在查询销售数据..."
[调用 query_sales_data 工具]
"本月销售额为 500 万元"
用户: "TOP 10 畅销产品是哪些?"
AI: [查询 products 和 orders 表]
"TOP 10 畅销产品:
1. iPhone 15 Pro - 销量 1200
2. MacBook Air - 销量 800
..."详细配置指南
一、数据源配置
支持的数据库类型
| 数据库 | 类型标识 | 默认端口 | 说明 |
|---|---|---|---|
| MySQL | mysql | 3306 | 最常用的关系型数据库 |
| PostgreSQL | postgresql | 5432 | 功能强大的开源数据库 |
| MongoDB | mongodb | 27017 | NoSQL 文档数据库 |
| BigQuery | bigquery | - | Google 云端数仓 |
MySQL 数据源配置
类型: MySQL
连接配置:
主机: db.example.com
端口: 3306
数据库: production
用户名: app_user
密码: ********
高级选项:
SSL: 启用
连接池大小: 10
超时时间: 30秒连接字符串格式:
mysql://username:password@host:port/databasePostgreSQL 数据源配置
类型: PostgreSQL
连接配置:
主机: pg.example.com
端口: 5432
数据库: analytics
用户名: analyst
密码: ********
Schema: public
高级选项:
SSL Mode: require
连接池大小: 10连接字符串格式:
postgresql://username:password@host:port/databaseMongoDB 数据源配置
类型: MongoDB
连接配置:
主机: mongo.example.com
端口: 27017
数据库: app_db
用户名: app_user
密码: ********
认证数据库: admin
高级选项:
副本集: rs0
读偏好: secondary连接字符串格式:
mongodb://username:password@host:port/database?authSource=adminBigQuery 数据源配置
类型: BigQuery
连接配置:
项目ID: my-project
数据集: analytics
服务账号密钥: [上传 JSON 密钥文件]
高级选项:
位置: asia-east1
查询超时: 60秒二、工具配置
工具的核心是 kind(工具类型)+ statement(查询语句)+ parameters(参数)。一个工具 = 一段你预先写好、审过的参数化查询。AI 只能填参数,不能改 SQL —— 这正是收紧攻击面的关键。
描述要清晰
description 是 AI 判断"何时调用此工具"的唯一依据,要写清楚做什么、何时用、参数含义:
✅ 好的描述:
description: 统计指定月份的已支付订单总额。用户问"本月销售额""X 月营收"时调用。参数 start_date/end_date 为月初/下月初日期。
❌ 差的描述:
description: 查询销售一个工具一段 statement
把多表 JOIN 写进 statement,参数用占位符(:name 或 $1,随 kind 而定):
工具名称: regional_sales
kind: sql
description: 按地区统计指定日期之后的销售额
statement: |
SELECT
r.region_name,
SUM(oi.quantity * p.price) AS total_sales
FROM orders o
JOIN order_items oi ON o.order_id = oi.order_id
JOIN products p ON oi.product_id = p.product_id
JOIN customers c ON o.customer_id = c.customer_id
JOIN regions r ON c.region_id = r.region_id
WHERE o.created_at >= :since
GROUP BY r.region_name
ORDER BY total_sales DESC
parameters:
- name: since
type: string
required: true
description: 起始日期 YYYY-MM-DD注意:AI 不会自己拼 JOIN。复杂查询由你在
statement里写好;AI 负责选对工具、填对参数。
收紧权限
- 数据源用只读账号连接,从源头限制可访问的表
- 复杂 / 跨表逻辑封装进视图(VIEW),工具只查视图
- 敏感表(users / payments / admin_logs)不要给 AI 配查询工具
三、工具集配置
按业务场景组织
场景 1:销售分析工具集
工具集名称: sales_analytics
包含工具:
- query_sales_data(查询销售数据)
- query_customer_data(查询客户数据)
- query_product_data(查询产品数据)场景 2:运营监控工具集
工具集名称: ops_monitoring
包含工具:
- query_system_logs(查询系统日志)
- query_performance_metrics(查询性能指标)
- query_error_logs(查询错误日志)场景 3:财务报表工具集
工具集名称: financial_reports
包含工具:
- query_revenue_data(查询收入数据)
- query_expense_data(查询支出数据)
- query_profit_data(查询利润数据)工具集权限管理
工具集: sales_analytics
权限配置:
允许角色:
- 销售经理
- 数据分析师
- 高管
禁止角色:
- 普通员工
- 实习生四、Agent 集成
创建数据分析 Agent
Agent 配置:
名称: sales_analyst
显示名称: 销售数据分析师
模型: gpt-4o
系统提示词: |
你是专业的销售数据分析师。
【你的能力】
- 查询销售数据库
- 生成SQL查询语句
- 分析销售趋势
- 制作数据报表
【查询规则】
1. 始终验证查询的合理性
2. 对大数据量查询进行分页
3. 解释查询结果的含义
4. 提供数据洞察和建议
【输出格式】
- 先说明查询的内容
- 展示查询结果
- 给出分析和建议
工具配置:
GenAI 工具集:
- sales_toolset ✓结合其他工具
Agent 配置:
名称: comprehensive_analyst
工具配置:
GenAI 工具集:
- sales_toolset ✓
MCP 工具:
- WebSearch(补充市场信息)
- ChartGenerator(生成图表)
知识库:
- 销售政策知识库这样 Agent 可以:
- 查询数据库获取数据
- 搜索网络补充信息
- 生成可视化图表
- 参考知识库政策
实战案例
案例 1:销售数据分析助手
业务需求
销售团队需要快速查询:
- 每日销售额
- TOP 产品排行
- 地区销售分布
- 客户购买分析
配置步骤
1. 创建数据源
名称: sales_db
类型: MySQL
数据库: sales_production2. 创建工具(每段查询一个工具)
工具: daily_sales # kind: sql, statement 写好"按日汇总销售额"
工具: top_products # kind: sql, statement 写好"TOP N 畅销产品"
工具: regional_sales # kind: sql, statement 写好"按地区统计"(含 JOIN)3. 创建工具集
工具集: sales_analytics
工具: [sales_query_tool]4. 创建 Agent
Agent: sales_assistant
模型: gpt-4o
工具集: sales_analytics
提示词: "你是销售数据分析专家..."5. 创建 Application
Application: 企微销售助手
平台: 企业微信 AI Bot
Orchestrator: sales_single(Single 模式)
Agent: sales_assistant使用效果
员工: "今天销售额多少?"
AI: "正在查询今日销售数据..."
[查询 orders 表 WHERE DATE(created_at) = CURDATE()]
"今日销售额:85.6 万元
订单数:342 笔
平均客单价:2,503 元"
员工: "本周 TOP 5 畅销产品是哪些?"
AI: [JOIN orders, order_items, products]
"本周 TOP 5 畅销产品:
1. 📱 iPhone 15 Pro
销量:156 台
销售额:18.7 万元
2. 💻 MacBook Air M3
销量:89 台
销售额:10.2 万元
3. ⌚ Apple Watch Series 9
销量:203 台
销售额:6.1 万元
4. 🎧 AirPods Pro 2
销量:324 台
销售额:7.3 万元
5. 📱 iPad Air
销量:67 台
销售额:3.8 万元"
员工: "华东地区本月表现如何?"
AI: [JOIN orders, customers, regions]
"华东地区本月表现:
📊 销售数据:
- 销售额:326 万元
- 订单数:1,285 笔
- 客户数:892 人
📈 同比增长:
- 销售额增长:+18.5%
- 订单数增长:+12.3%
🏆 表现最好的城市:
1. 上海:156 万元
2. 杭州:89 万元
3. 南京:81 万元"案例 2:客服知识库 + 数据查询
业务需求
客服需要:
- 回答产品问题(知识库)
- 查询订单状态(数据库)
- 查询物流信息(数据库)
配置方案
Orchestrator: Supervisor 模式
Supervisor Agent: 客服主管
Workers:
- FAQ Agent(知识库问答)
- Order Query Agent(订单查询,使用 GenAI Toolbox)
- Logistics Agent(物流查询,使用 GenAI Toolbox)配置详情
Supervisor Agent:
系统提示词: |
你是客服主管,负责分配客户问题。
【可用客服】
- FAQ Agent: 回答产品问题、售前咨询
- Order Query Agent: 查询订单状态、金额、详情
- Logistics Agent: 查询物流信息、配送进度
【分配规则】
- 产品问题 → FAQ Agent
- 订单问题 → Order Query Agent
- 物流问题 → Logistics Agent
Order Query Agent:
工具集: order_toolset
表: orders, order_items, products
Logistics Agent:
工具集: logistics_toolset
表: shipments, tracking_info使用效果
客户: "你们的笔记本保修多久?"
→ Supervisor 分配给 FAQ Agent
→ 知识库回答: "笔记本保修 1 年,可延保至 3 年"
客户: "我的订单 #12345 什么状态?"
→ Supervisor 分配给 Order Query Agent
→ 查询数据库:
"订单 #12345 状态:
- 状态:已发货
- 下单时间:2024-01-15 10:30
- 发货时间:2024-01-15 16:20
- 预计送达:明天下午"
客户: "物流信息在哪里查?"
→ Supervisor 分配给 Logistics Agent
→ 查询 tracking_info:
"您的包裹 [运单号: SF1234567890]
当前位置:上海分拨中心
最新动态:正在派件中
预计今日 18:00 前送达"案例 3:运营数据大屏
业务需求
运营团队需要实时数据大屏:
- 实时 GMV
- 订单数
- 用户数
- 热门产品
配置方案
创建专门的数据接口 Agent
Agent: data_api_agent
模型: gpt-3.5-turbo(成本优化)
工具集: real_time_data_toolset
表:
- orders
- users
- products
- page_views
系统提示词: |
你是数据接口服务,以 JSON 格式返回数据。
【查询类型】
- gmv: 今日 GMV
- orders: 今日订单数
- users: 今日新增用户
- hot_products: 热门产品 TOP 10
【输出格式】
严格返回 JSON,不要其他文字。API 调用
// 前端调用
const response = await fetch('/api/agent-system/chat', {
method: 'POST',
body: JSON.stringify({
message: 'gmv',
application_id: 'data_api_app'
})
});
const data = await response.json();
// { "gmv": 8560000, "orders": 342, "average": 25029 }大屏展示
// 定时刷新
setInterval(async () => {
const gmv = await queryAgent('gmv');
const orders = await queryAgent('orders');
const users = await queryAgent('users');
updateDashboard({ gmv, orders, users });
}, 5000); // 每 5 秒刷新最佳实践
1. 数据源管理
环境隔离
开发环境:
数据源: dev_sales_db
主机: dev-db.internal
测试环境:
数据源: test_sales_db
主机: test-db.internal
生产环境:
数据源: prod_sales_db
主机: prod-db.internal只读账号
-- 创建只读用户
CREATE USER 'genai_readonly'@'%' IDENTIFIED BY 'strong_password';
-- 只授予 SELECT 权限
GRANT SELECT ON sales.* TO 'genai_readonly'@'%';
-- 禁止写入
REVOKE INSERT, UPDATE, DELETE ON sales.* FROM 'genai_readonly'@'%';连接池配置
连接池大小: 10
最小空闲连接: 2
最大等待时间: 30秒
空闲超时: 10分钟2. 工具设计
单一职责原则
✅ 好的设计:
工具1: sales_data_tool(只查销售数据)
工具2: customer_data_tool(只查客户数据)
工具3: product_data_tool(只查产品数据)
❌ 不好的设计:
工具: all_data_tool(查所有数据)
→ AI 难以选择,性能差工具描述详细
description 写清楚"做什么 / 何时调用 / 参数含义",AI 才选得准:
✅ 好的工具描述:
description: |
查询单个订单的状态与明细。
何时调用:用户问"我的订单 #X 到哪了""订单状态"等。
参数:order_id(必填)为订单号。
返回:状态 / 下单时间 / 发货时间 / 预计送达。
❌ 差的工具描述:
description: 查订单限制查询范围
工具配置:
允许查询:
- 最近 1 年数据
- 最多返回 1000 条
禁止查询:
- 超过 3 年的历史数据
- 敏感字段(密码、支付信息)3. Agent 提示词
数据分析 Agent 提示词模板
系统提示词: |
你是专业的数据分析师,擅长使用 SQL 查询数据并提供业务洞察。
【工作流程】
1. 理解用户问题
2. 确定需要查询的表和字段
3. 生成 SQL 查询
4. 解释查询结果
5. 提供数据洞察和建议
【查询规则】
- 时间范围:默认查询最近 30 天
- 大数据量:超过 1000 条进行分页
- 敏感字段:不查询密码、手机号等
【输出格式】
1️⃣ 查询说明:解释要查什么
2️⃣ 查询结果:展示数据(表格或列表)
3️⃣ 数据分析:洞察和建议
【示例】
用户问:"本月销售额多少?"
回答:
1️⃣ 正在查询本月(2024-01)的销售数据...
2️⃣ 查询结果:
- 销售额:500 万元
- 订单数:2,300 笔
- 平均客单价:2,174 元
3️⃣ 数据分析:
- 本月销售额比上月增长 15%
- 建议:继续保持促销力度4. 安全建议
数据权限控制
Level 1 - 普通员工:
只能查询:
- 自己的订单
- 公开的产品信息
Level 2 - 销售经理:
可以查询:
- 所有订单
- 客户信息(脱敏)
- 销售报表
Level 3 - 高管:
可以查询:
- 所有数据
- 财务报表
- 敏感信息SQL 注入防护
系统自动防护:
- ✅ 使用参数化查询
- ✅ 过滤特殊字符
- ✅ 限制查询复杂度
- ✅ 查询超时控制(30 秒)
数据脱敏
敏感字段自动脱敏:
- 手机号: 138****5678
- 邮箱: abc***@example.com
- 身份证: 310***********12345. 性能优化
查询优化
-- ✅ 好的查询(使用索引)
SELECT * FROM orders
WHERE created_at >= '2024-01-01'
AND status = 'paid'
LIMIT 100;
-- ❌ 差的查询(全表扫描)
SELECT * FROM orders
WHERE YEAR(created_at) = 2024;结果缓存
缓存策略:
- 缓存常用查询结果
- TTL: 5 分钟
- 使用 Redis 存储分页查询
大数据量查询自动分页:
- 每页 100 条
- 最多返回 1000 条
- 提示用户缩小查询范围故障排查
常见问题
1. 数据源连接失败
症状:
错误: 无法连接到数据库排查步骤:
检查连接信息
bash# 测试数据库连接 mysql -h db.example.com -u user -p database检查网络
bash# 测试网络连通性 ping db.example.com telnet db.example.com 3306检查防火墙
- 确保数据库端口开放
- 检查安全组规则
检查用户权限
sql-- 查看用户权限 SHOW GRANTS FOR 'user'@'host';
2. 查询超时
症状:
错误: 查询超时(30秒)解决方案:
优化查询
sql-- 添加索引 CREATE INDEX idx_created_at ON orders(created_at); CREATE INDEX idx_status ON orders(status);缩小查询范围
sql-- 限制时间范围 WHERE created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)增加超时时间
yaml查询配置: 超时时间: 60秒
3. AI 不调用工具
症状: AI 直接回答而不查询数据库
原因:
- Agent 没有关联工具集
- 提示词不明确
- 问题表述不清
解决方案:
检查工具集关联
yamlAgent 配置: 工具配置: GenAI 工具集: ✓ sales_toolset优化提示词
yaml系统提示词: | 你必须使用工具查询数据库,不要凭记忆回答。 当用户问数据相关问题时: 1. 先使用工具查询 2. 然后根据查询结果回答明确问题
❌ "销售怎么样?"(太模糊) ✅ "本月销售额是多少?"(明确)
4. 查询结果不准确
症状: 返回的数据与预期不符
排查:
检查 SQL 语句
- 查看日志中的实际 SQL
- 在数据库中手动执行验证
检查工具的 statement 与参数
yaml确保: - statement 里的字段名 / 表名正确 - 参数占位符与 parameters 列表一一对应 - 参数的 required(必填)设置正确优化提示词
yaml添加查询示例: 当用户问"本月销售额"时: SELECT SUM(amount) FROM orders WHERE created_at >= DATE_FORMAT(NOW(), '%Y-%m-01') AND status = 'paid'
高级用法
1. 多数据源聚合查询
场景:同时查询 MySQL 和 MongoDB
工具集: multi_source_analytics
工具1: mysql_sales_tool
数据源: mysql_sales_db
表: orders, products
工具2: mongo_user_tool
数据源: mongodb_user_db
集合: users, behaviorsAgent 自动聚合:
用户: "销售额最高的用户画像是怎样的?"
AI 执行:
1. 从 MySQL 查询销售额 TOP 用户
2. 从 MongoDB 查询这些用户的行为数据
3. 综合分析用户画像2. 定时报表生成
配置定时任务:
定时任务:
名称: 每日销售报表
触发时间: 每天 09:00
执行:
Application: data_reporter
消息: "生成昨日销售报表"
输出:
- 发送到企业微信
- 保存到文件系统3. 数据导出
配置导出 Agent:
Agent: data_exporter
工具集: export_toolset
提示词: |
你负责导出数据。
【导出格式】
- CSV: 大量数据导出
- Excel: 带格式的报表
- JSON: API 对接
【导出限制】
- 单次最多 10000 条
- 文件大小不超过 50MB4. 数据可视化
结合图表工具:
Agent: visual_analyst
工具配置:
GenAI 工具集: analytics_toolset
MCP 工具: ChartGenerator
工作流程:
1. 查询数据(GenAI Toolbox)
2. 生成图表(ChartGenerator)
3. 解读分析结果成本优化
1. 模型选择
场景建议:
简单查询: gpt-3.5-turbo(成本低)
复杂分析: gpt-4o(效果好)
高并发场景: deepseek-chat(性价比高)成本对比:
| 模型 | 输入成本 | 输出成本 | 适用场景 |
|---|---|---|---|
| gpt-3.5-turbo | $0.5/1M | $1.5/1M | 简单查询 |
| gpt-4o | $2.5/1M | $10/1M | 复杂分析 |
| deepseek-chat | $0.14/1M | $0.28/1M | 高频使用 |
2. 提示词优化
✅ 精简提示词:
"查询本月销售额"
❌ 冗长提示词:
"请你帮我查询一下我们公司本月的销售额情况,
包括总销售额、订单数量、平均客单价等详细信息,
并且给出与上月的对比分析..."3. 缓存策略
缓存配置:
常用查询: 5 分钟
实时数据: 不缓存
历史数据: 1 小时下一步
学完本教程后,你可以:
💡 提示:
- 从简单的单表查询开始
- 逐步增加复杂度
- 重点优化表描述和提示词
- 注意数据安全和权限控制
需要帮助?
- 📖 GenAI Toolbox 完整文档
- 📖 Agent 使用教程
- 💬 技术支持:support@sira.ai
