Skip to content

数据集成 使用教程

数据集成(GenAI Toolbox)让 AI 模型能够直接访问和查询数据库。本教程将手把手教你如何配置和使用这一功能。

架构说明(2026-05 起)

工具在 Sira 后端进程内执行(不再依赖独立的 toolbox 容器),保存即生效,没有"部署"步骤

什么是 数据集成

数据集成 为 AI 提供了结构化数据访问能力:

用户问题 → AI Agent → 进程内数据工具 → 数据库查询 → 返回结果

核心价值

  • ✅ AI 可以理解自然语言并选用预定义的查询工具
  • ✅ 支持多种数据库(MySQL、PostgreSQL、MongoDB 等)
  • ✅ 可视化配置,无需编写代码
  • ✅ 工具保存即生效,无需部署

五分钟快速开始

步骤 1:创建数据源

  1. 进入 数据集成数据源管理
  2. 点击 创建数据源

配置示例:MySQL 销售数据库

yaml
名称: sales_db
显示名称: 销售数据库
类型: MySQL
连接配置:
  主机: localhost
  端口: 3306
  数据库: sales
  用户名: sales_user
  密码: ********
  1. 点击 测试连接 确保连接成功
  2. 保存数据源

步骤 2:创建工具

  1. 进入 数据集成工具管理
  2. 点击 创建工具

工具是一段参数化的查询(不是"一组表 + 描述")。先选数据源,再选工具类型(kind),对话框会按 kind 动态渲染字段(SQL 类显示 SQL 语句框,Cypher 类显示 Cypher 框)。

配置示例:查询销售数据

yaml
名称(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
  1. 保存工具

步骤 3:创建工具集

  1. 进入 数据集成工具集管理
  2. 点击 创建工具集
yaml
名称: sales_toolset
显示名称: 销售分析工具集
描述: 用于销售数据分析和报表生成

包含工具:
  - query_sales_data ✓
  1. 保存工具集

步骤 4:关联到 Agent

  1. 进入 Agent SystemAgents
  2. 编辑或创建一个 Agent
  3. 工具配置 部分,选择 GenAI 工具集
  4. 勾选 sales_toolset
  5. 保存 Agent

步骤 5:测试效果

创建一个 Application 并测试:

用户: "本月销售额是多少?"
AI: "正在查询销售数据..."
   [调用 query_sales_data 工具]
   "本月销售额为 500 万元"

用户: "TOP 10 畅销产品是哪些?"
AI: [查询 products 和 orders 表]
   "TOP 10 畅销产品:
   1. iPhone 15 Pro - 销量 1200
   2. MacBook Air - 销量 800
   ..."

详细配置指南

一、数据源配置

支持的数据库类型

数据库类型标识默认端口说明
MySQLmysql3306最常用的关系型数据库
PostgreSQLpostgresql5432功能强大的开源数据库
MongoDBmongodb27017NoSQL 文档数据库
BigQuerybigquery-Google 云端数仓

MySQL 数据源配置

yaml
类型: MySQL

连接配置:
  主机: db.example.com
  端口: 3306
  数据库: production
  用户名: app_user
  密码: ********

高级选项:
  SSL: 启用
  连接池大小: 10
  超时时间: 30秒

连接字符串格式

mysql://username:password@host:port/database

PostgreSQL 数据源配置

yaml
类型: PostgreSQL

连接配置:
  主机: pg.example.com
  端口: 5432
  数据库: analytics
  用户名: analyst
  密码: ********
  Schema: public

高级选项:
  SSL Mode: require
  连接池大小: 10

连接字符串格式

postgresql://username:password@host:port/database

MongoDB 数据源配置

yaml
类型: MongoDB

连接配置:
  主机: mongo.example.com
  端口: 27017
  数据库: app_db
  用户名: app_user
  密码: ********
  认证数据库: admin

高级选项:
  副本集: rs0
  读偏好: secondary

连接字符串格式

mongodb://username:password@host:port/database?authSource=admin

BigQuery 数据源配置

yaml
类型: BigQuery

连接配置:
  项目ID: my-project
  数据集: analytics
  服务账号密钥: [上传 JSON 密钥文件]

高级选项:
  位置: asia-east1
  查询超时: 60秒

二、工具配置

工具的核心是 kind(工具类型)+ statement(查询语句)+ parameters(参数)。一个工具 = 一段你预先写好、审过的参数化查询。AI 只能填参数,不能改 SQL —— 这正是收紧攻击面的关键。

描述要清晰

description 是 AI 判断"何时调用此工具"的唯一依据,要写清楚做什么、何时用、参数含义:

yaml
✅ 好的描述:
description: 统计指定月份的已支付订单总额。用户问"本月销售额""X 月营收"时调用。参数 start_date/end_date 为月初/下月初日期。

❌ 差的描述:
description: 查询销售

一个工具一段 statement

把多表 JOIN 写进 statement,参数用占位符(:name$1,随 kind 而定):

yaml
工具名称: 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:销售分析工具集

yaml
工具集名称: sales_analytics
包含工具:
  - query_sales_data(查询销售数据)
  - query_customer_data(查询客户数据)
  - query_product_data(查询产品数据)

场景 2:运营监控工具集

yaml
工具集名称: ops_monitoring
包含工具:
  - query_system_logs(查询系统日志)
  - query_performance_metrics(查询性能指标)
  - query_error_logs(查询错误日志)

场景 3:财务报表工具集

yaml
工具集名称: financial_reports
包含工具:
  - query_revenue_data(查询收入数据)
  - query_expense_data(查询支出数据)
  - query_profit_data(查询利润数据)

工具集权限管理

yaml
工具集: sales_analytics

权限配置:
  允许角色:
    - 销售经理
    - 数据分析师
    - 高管

  禁止角色:
    - 普通员工
    - 实习生

四、Agent 集成

创建数据分析 Agent

yaml
Agent 配置:
  名称: sales_analyst
  显示名称: 销售数据分析师

  模型: gpt-4o

  系统提示词: |
    你是专业的销售数据分析师。

    【你的能力】
    - 查询销售数据库
    - 生成SQL查询语句
    - 分析销售趋势
    - 制作数据报表

    【查询规则】
    1. 始终验证查询的合理性
    2. 对大数据量查询进行分页
    3. 解释查询结果的含义
    4. 提供数据洞察和建议

    【输出格式】
    - 先说明查询的内容
    - 展示查询结果
    - 给出分析和建议

  工具配置:
    GenAI 工具集:
      - sales_toolset ✓

结合其他工具

yaml
Agent 配置:
  名称: comprehensive_analyst

  工具配置:
    GenAI 工具集:
      - sales_toolset ✓

    MCP 工具:
      - WebSearch(补充市场信息)
      - ChartGenerator(生成图表)

    知识库:
      - 销售政策知识库

这样 Agent 可以:

  1. 查询数据库获取数据
  2. 搜索网络补充信息
  3. 生成可视化图表
  4. 参考知识库政策

实战案例

案例 1:销售数据分析助手

业务需求

销售团队需要快速查询:

  • 每日销售额
  • TOP 产品排行
  • 地区销售分布
  • 客户购买分析

配置步骤

1. 创建数据源

yaml
名称: sales_db
类型: MySQL
数据库: sales_production

2. 创建工具(每段查询一个工具)

yaml
工具: daily_sales      # kind: sql, statement 写好"按日汇总销售额"
工具: top_products     # kind: sql, statement 写好"TOP N 畅销产品"
工具: regional_sales   # kind: sql, statement 写好"按地区统计"(含 JOIN)

3. 创建工具集

yaml
工具集: sales_analytics
工具: [sales_query_tool]

4. 创建 Agent

yaml
Agent: sales_assistant
模型: gpt-4o
工具集: sales_analytics
提示词: "你是销售数据分析专家..."

5. 创建 Application

yaml
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 模式

yaml
Supervisor Agent: 客服主管
Workers:
  - FAQ Agent(知识库问答)
  - Order Query Agent(订单查询,使用 GenAI Toolbox)
  - Logistics Agent(物流查询,使用 GenAI Toolbox)

配置详情

yaml
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

yaml
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 调用

javascript
// 前端调用
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 }

大屏展示

javascript
// 定时刷新
setInterval(async () => {
  const gmv = await queryAgent('gmv');
  const orders = await queryAgent('orders');
  const users = await queryAgent('users');

  updateDashboard({ gmv, orders, users });
}, 5000); // 每 5 秒刷新

最佳实践

1. 数据源管理

环境隔离

yaml
开发环境:
  数据源: dev_sales_db
  主机: dev-db.internal

测试环境:
  数据源: test_sales_db
  主机: test-db.internal

生产环境:
  数据源: prod_sales_db
  主机: prod-db.internal

只读账号

sql
-- 创建只读用户
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'@'%';

连接池配置

yaml
连接池大小: 10
最小空闲连接: 2
最大等待时间: 30秒
空闲超时: 10分钟

2. 工具设计

单一职责原则

yaml
✅ 好的设计:
工具1: sales_data_tool(只查销售数据)
工具2: customer_data_tool(只查客户数据)
工具3: product_data_tool(只查产品数据)

❌ 不好的设计:
工具: all_data_tool(查所有数据)
→ AI 难以选择,性能差

工具描述详细

description 写清楚"做什么 / 何时调用 / 参数含义",AI 才选得准:

yaml
✅ 好的工具描述:
description: |
  查询单个订单的状态与明细。
  何时调用:用户问"我的订单 #X 到哪了""订单状态"等。
  参数:order_id(必填)为订单号。
  返回:状态 / 下单时间 / 发货时间 / 预计送达。

❌ 差的工具描述:
description: 查订单

限制查询范围

yaml
工具配置:
  允许查询:
    - 最近 1 年数据
    - 最多返回 1000 条

  禁止查询:
    - 超过 3 年的历史数据
    - 敏感字段(密码、支付信息)

3. Agent 提示词

数据分析 Agent 提示词模板

yaml
系统提示词: |
  你是专业的数据分析师,擅长使用 SQL 查询数据并提供业务洞察。

  【工作流程】
  1. 理解用户问题
  2. 确定需要查询的表和字段
  3. 生成 SQL 查询
  4. 解释查询结果
  5. 提供数据洞察和建议

  【查询规则】
  - 时间范围:默认查询最近 30 天
  - 大数据量:超过 1000 条进行分页
  - 敏感字段:不查询密码、手机号等

  【输出格式】
  1️⃣ 查询说明:解释要查什么
  2️⃣ 查询结果:展示数据(表格或列表)
  3️⃣ 数据分析:洞察和建议

  【示例】
  用户问:"本月销售额多少?"

  回答:
  1️⃣ 正在查询本月(2024-01)的销售数据...

  2️⃣ 查询结果:
  - 销售额:500 万元
  - 订单数:2,300 笔
  - 平均客单价:2,174 元

  3️⃣ 数据分析:
  - 本月销售额比上月增长 15%
  - 建议:继续保持促销力度

4. 安全建议

数据权限控制

yaml
Level 1 - 普通员工:
  只能查询:
    - 自己的订单
    - 公开的产品信息

Level 2 - 销售经理:
  可以查询:
    - 所有订单
    - 客户信息(脱敏)
    - 销售报表

Level 3 - 高管:
  可以查询:
    - 所有数据
    - 财务报表
    - 敏感信息

SQL 注入防护

系统自动防护:

  • ✅ 使用参数化查询
  • ✅ 过滤特殊字符
  • ✅ 限制查询复杂度
  • ✅ 查询超时控制(30 秒)

数据脱敏

yaml
敏感字段自动脱敏:
  - 手机号: 138****5678
  - 邮箱: abc***@example.com
  - 身份证: 310***********1234

5. 性能优化

查询优化

sql
-- ✅ 好的查询(使用索引)
SELECT * FROM orders
WHERE created_at >= '2024-01-01'
AND status = 'paid'
LIMIT 100;

-- ❌ 差的查询(全表扫描)
SELECT * FROM orders
WHERE YEAR(created_at) = 2024;

结果缓存

yaml
缓存策略:
  - 缓存常用查询结果
  - TTL: 5 分钟
  - 使用 Redis 存储

分页查询

yaml
大数据量查询自动分页:
  - 每页 100 条
  - 最多返回 1000 条
  - 提示用户缩小查询范围

故障排查

常见问题

1. 数据源连接失败

症状

错误: 无法连接到数据库

排查步骤

  1. 检查连接信息

    bash
    # 测试数据库连接
    mysql -h db.example.com -u user -p database
  2. 检查网络

    bash
    # 测试网络连通性
    ping db.example.com
    telnet db.example.com 3306
  3. 检查防火墙

    • 确保数据库端口开放
    • 检查安全组规则
  4. 检查用户权限

    sql
    -- 查看用户权限
    SHOW GRANTS FOR 'user'@'host';

2. 查询超时

症状

错误: 查询超时(30秒)

解决方案

  1. 优化查询

    sql
    -- 添加索引
    CREATE INDEX idx_created_at ON orders(created_at);
    CREATE INDEX idx_status ON orders(status);
  2. 缩小查询范围

    sql
    -- 限制时间范围
    WHERE created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY)
  3. 增加超时时间

    yaml
    查询配置:
      超时时间: 60秒

3. AI 不调用工具

症状: AI 直接回答而不查询数据库

原因

  • Agent 没有关联工具集
  • 提示词不明确
  • 问题表述不清

解决方案

  1. 检查工具集关联

    yaml
    Agent 配置:
      工具配置:
        GenAI 工具集: ✓ sales_toolset
  2. 优化提示词

    yaml
    系统提示词: |
      你必须使用工具查询数据库,不要凭记忆回答。
    
      当用户问数据相关问题时:
      1. 先使用工具查询
      2. 然后根据查询结果回答
  3. 明确问题

    ❌ "销售怎么样?"(太模糊)
    ✅ "本月销售额是多少?"(明确)

4. 查询结果不准确

症状: 返回的数据与预期不符

排查

  1. 检查 SQL 语句

    • 查看日志中的实际 SQL
    • 在数据库中手动执行验证
  2. 检查工具的 statement 与参数

    yaml
    确保:
      - statement 里的字段名 / 表名正确
      - 参数占位符与 parameters 列表一一对应
      - 参数的 required(必填)设置正确
  3. 优化提示词

    yaml
    添加查询示例:
      当用户问"本月销售额"时:
      SELECT SUM(amount) FROM orders
      WHERE created_at >= DATE_FORMAT(NOW(), '%Y-%m-01')
      AND status = 'paid'

高级用法

1. 多数据源聚合查询

场景:同时查询 MySQL 和 MongoDB

yaml
工具集: multi_source_analytics

工具1: mysql_sales_tool
  数据源: mysql_sales_db
: orders, products

工具2: mongo_user_tool
  数据源: mongodb_user_db
  集合: users, behaviors

Agent 自动聚合

用户: "销售额最高的用户画像是怎样的?"

AI 执行:
1. 从 MySQL 查询销售额 TOP 用户
2. 从 MongoDB 查询这些用户的行为数据
3. 综合分析用户画像

2. 定时报表生成

配置定时任务

yaml
定时任务:
  名称: 每日销售报表
  触发时间: 每天 09:00

  执行:
    Application: data_reporter
    消息: "生成昨日销售报表"

  输出:
    - 发送到企业微信
    - 保存到文件系统

3. 数据导出

配置导出 Agent

yaml
Agent: data_exporter
工具集: export_toolset

提示词: |
  你负责导出数据。

  【导出格式】
  - CSV: 大量数据导出
  - Excel: 带格式的报表
  - JSON: API 对接

  【导出限制】
  - 单次最多 10000 条
  - 文件大小不超过 50MB

4. 数据可视化

结合图表工具

yaml
Agent: visual_analyst

工具配置:
  GenAI 工具集: analytics_toolset
  MCP 工具: ChartGenerator

工作流程:
  1. 查询数据(GenAI Toolbox)
  2. 生成图表(ChartGenerator)
  3. 解读分析结果

成本优化

1. 模型选择

yaml
场景建议:
  简单查询: 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. 提示词优化

yaml
✅ 精简提示词:
"查询本月销售额"

❌ 冗长提示词:
"请你帮我查询一下我们公司本月的销售额情况,
包括总销售额、订单数量、平均客单价等详细信息,
并且给出与上月的对比分析..."

3. 缓存策略

yaml
缓存配置:
  常用查询: 5 分钟
  实时数据: 不缓存
  历史数据: 1 小时

下一步

学完本教程后,你可以:

  1. 创建你的第一个数据源
  2. 配置工具和工具集
  3. 集成到 Agent
  4. 查看完整功能文档

💡 提示

  • 从简单的单表查询开始
  • 逐步增加复杂度
  • 重点优化表描述和提示词
  • 注意数据安全和权限控制

需要帮助?

Apache-2.0 Licensed