楼主: shadowaver
545 2

[学科前沿] NL2SQL chatBI Wren skill md文件即skill技能配置 [推广有奖]

随心所欲不逾矩

已卖:1253份资源

教授

70%

还不是VIP/贵宾

-

威望
0 级
论坛币
8238 个
通用积分
850.9176
学术水平
18 点
热心指数
22 点
信用等级
13 点
经验
39855 点
帖子
913
精华
0
在线时间
1500 小时
注册时间
2007-9-27
最后登录
2026-9-28

楼主
shadowaver 在职认证  发表于 2026-5-14 16:38:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
---NL2SQL chatBI Wren skill md文件即skill技能配置
name: wrenai
description: |
  WrenAI - Text-to-SQL 与生成式商业智能 (GenBI) 技能。
  当用户想要用自然语言查询数据库、生成 SQL、自动创建图表/报表、或进行数据分析时,使用此技能。
  支持连接到 PostgreSQL、MySQL、BigQuery、Snowflake、ClickHouse 等多种数据源。
  需要用户已部署 WrenAI 服务并配置好数据源。
description_zh: "WrenAI Text-to-SQL 与 GenBI 分析(自然语言查询数据库、生成 SQL、自动可视化)"
description_en: "WrenAI Text-to-SQL & GenBI (natural language DB queries, SQL generation, auto-visualization)"
version: 1.0.0
homepage: https://github.com/Canner/WrenAI
metadata:
  openclaw:
    emoji: 🗄️
    requires:
      env:
        - WRENAI_API_URL
        - WRENAI_API_KEY
    primaryEnv: WRENAI_API_URL
  security:
    credentials_usage: |
      This skill connects to a user-deployed WrenAI instance.
      API URL and Key are only sent to the configured WrenAI service endpoint.
      Database credentials are handled by WrenAI service itself (not by this skill).
    allowed_domains:
      - "${WRENAI_API_URL:-localhost:3000}"
---

# WrenAI Skill

WrenAI - Open-source Text-to-SQL and Generative Business Intelligence (GenBI) system.

## 核心能力

| 功能 | 说明 |
|------|------|
| **Text-to-SQL** | 将自然语言问题转换为 SQL 查询 |
| **自动图表生成** | 根据查询结果自动推荐图表类型 |
| **多数据源支持** | PostgreSQL, MySQL, BigQuery, Snowflake, ClickHouse, Trino 等 |
| **多模型支持** | OpenAI, DeepSeek, 通义千问, Gemini, Claude, Ollama 等 |
| **MDL 语义建模** | 通过 Modeling Definition Language 定义数据语义 |

## 支持的数据源

| 数据源 | 枚举值 |
|--------|--------|
| PostgreSQL | `postgres` |
| MySQL | `mysql` |
| BigQuery | `bigquery` |
| Snowflake | `snowflake` |
| ClickHouse | `clickhouse` |
| MS SQL Server | `mssql` |
| Oracle | `oracle` |
| Trino | `trino` |
| 本地文件 (CSV) | `local_file` |
| S3 文件 | `s3_file` |
| Minio 文件 | `minio_file` |
| GCS 文件 | `gcs_file` |

## 凭证检查

**Credential Check:**

```bash
if [ -n "$WRENAI_API_URL" ] && [ -n "$WRENAI_API_KEY" ]; then
    echo "✅ WrenAI credentials configured"
    echo "   API URL: $WRENAI_API_URL"
else
    echo "⚠️ NO WRENAI CREDENTIALS — setup required"
fi
```

**If ⚠️ NO CREDENTIALS:** Guide the user through setup:

### 前置要求

1. **部署 WrenAI 服务** (二选一):

   **方式 A - Docker Compose (推荐):**
   ```bash
   # 克隆仓库
   git clone https://github.com/Canner/WrenAI.git
   cd WrenAI

   # 启动服务
   docker-compose up -d

   # 访问 http://localhost:3000 配置数据源
   ```

   **方式 B - Kubernetes (生产环境):**
   ```bash
   helm repo add wrenai https://charts.wrenai.cn
   helm install wrenai wrenai/wrenai -n wrenai --create-namespace
   ```

2. **配置环境变量:**

   ```bash
   # 方式 A - 环境变量
   export WRENAI_API_URL="http://localhost:3000/api"
   export WRENAI_API_KEY="your-wrenai-api-key"

   # 方式 B - 配置文件
   mkdir -p ~/.config/wrenai
   echo "WRENAI_API_URL=http://localhost:3000/api" > ~/.config/wrenai/config.env
   echo "WRENAI_API_KEY=your-key" >> ~/.config/wrenai/config.env
   ```

3. **获取 API Key:**
   - 登录 WrenAI Web UI (默认 http://localhost:3000)
   - 进入 Settings → API Keys → 创建新 Key

---

## API 调用模板

### 基础配置

```bash
# 读取配置
WRENAI_API_URL="${WRENAI_API_URL:-http://localhost:3000}"
WRENAI_API_KEY="${WRENAI_API_KEY:-}"

# 通用请求头
HEADERS="-H 'Content-Type: application/json'"
[ -n "$WRENAI_API_KEY" ] && HEADERS="$HEADERS -H 'Authorization: Bearer $WRENAI_API_KEY'"
```

### API 端点参考

| 功能 | 方法 | 端点 | 说明 |
|------|------|------|------|
| 发送问题 | POST | `/v1/ask` | Text-to-SQL 主接口 |
| 查询状态 | GET | `/v1/ask/{task_id}` | 获取查询任务状态 |
| 获取结果 | GET | `/v1/ask/{task_id}/result` | 获取查询结果 |
| 获取图表 | GET | `/v1/ask/{task_id}/chart` | 获取推荐的图表配置 |
| 获取历史 | GET | `/v1/history` | 获取问答历史 |
| 数据源列表 | GET | `/v1/datasources` | 列出已配置的数据源 |
| MDL 详情 | GET | `/v1/mdl` | 获取语义模型定义 |

---

## 使用场景与示例

### 场景 1: 自然语言查询数据库

**用户意图:** "查询过去7天每天的销售额"

**执行流程:**
1. 确定数据源 (如果没有指定,使用默认数据源)
2. 构造 API 请求
3. 发送问题到 WrenAI
4. 轮询任务状态直到完成
5. 返回 SQL 和结果

**示例调用:**

```bash
# Step 1: 发送问题
TASK_RESP=$(curl -s -X POST "$WRENAI_API_URL/v1/ask" \
  $HEADERS \
  -d '{
    "question": "过去7天每天的销售额是多少?",
    "datasourceId": "postgres_default",
    "language": "zh"
  }')

# 提取 task_id
TASK_ID=$(echo "$TASK_RESP" | jq -r '.taskId // .id // empty')

# Step 2: 轮询状态 (最多等待60秒)
for i in {1..30}; do
  STATUS=$(curl -s "$WRENAI_API_URL/v1/ask/$TASK_ID" \
    $HEADERS | jq -r '.status')

  if [ "$STATUS" = "success" ] || [ "$STATUS" = "completed" ]; then
    echo "查询完成"
    break
  elif [ "$STATUS" = "failed" ]; then
    echo "查询失败"
    exit 1
  fi

  echo "等待查询完成... ($i/30)"
  sleep 2
done

# Step 3: 获取结果
curl -s "$WRENAI_API_URL/v1/ask/$TASK_ID/result" $HEADERS | jq .

# Step 4: 获取图表推荐
curl -s "$WRENAI_API_URL/v1/ask/$TASK_ID/chart" $HEADERS | jq .
```

### 场景 2: 直接执行 SQL 查询

**用户意图:** "直接执行这个 SQL: SELECT * FROM sales LIMIT 10"

**示例调用:**

```bash
curl -s -X POST "$WRENAI_API_URL/v1/query" \
  $HEADERS \
  -d '{
    "sql": "SELECT * FROM sales LIMIT 10",
    "datasourceId": "postgres_default"
  }' | jq .
```

### 场景 3: 获取已配置的数据源

```bash
curl -s "$WRENAI_API_URL/v1/datasources" $HEADERS | jq .
```

### 场景 4: 获取语义模型 (MDL)

```bash
curl -s "$WRENAI_API_URL/v1/mdl" $HEADERS | jq .
```

### 场景 5: 获取问答历史

```bash
# 获取最近20条记录
curl -s "$WRENAI_API_URL/v1/history?limit=20" $HEADERS | jq .

# 按数据源筛选
curl -s "$WRENAI_API_URL/v1/history?datasourceId=postgres_default&limit=20" \
  $HEADERS | jq .
```

---

## 错误处理

### HTTP 状态码

| 状态码 | 含义 | 处理方式 |
|--------|------|----------|
| 200 | 成功 | 解析响应体 |
| 400 | 请求参数错误 | 检查 question 格式和数据源 ID |
| 401 | 未认证 | 检查 WRENAI_API_KEY 配置 |
| 403 | 无权限 | 检查数据源访问权限 |
| 404 | 资源不存在 | 检查 task_id 或 datasourceId |
| 422 | 验证错误 | 检查 SQL 语法 |
| 500 | 服务器错误 | 重试或检查 WrenAI 服务状态 |

### 常见错误处理示例

```bash
# 错误处理模板
RESP=$(curl -s -w "\n%{http_code}" -X POST "$WRENAI_API_URL/v1/ask" \
  $HEADERS -d '{"question":"..."}')

HTTP_CODE=$(echo "$RESP" | tail -n1)
BODY=$(echo "$RESP" | head -n-1)

if [ "$HTTP_CODE" = "200" ]; then
  echo "成功: $BODY" | jq .
else
  echo "错误 ($HTTP_CODE): $BODY" | jq .
fi
```

### WrenAI 服务健康检查

```bash
# 检查服务状态
curl -s "$WRENAI_API_URL/health" | jq .

# 检查 LLM 连接
curl -s "$WRENAI_API_URL/v1/status/llm" | jq .

# 检查数据源连接
curl -s "$WRENAI_API_URL/v1/status/datasources" | jq .
```

---

## 配置提示

### 支持的 LLM 提供商

在 WrenAI Web UI 中配置或通过环境变量:

```bash
# OpenAI
export WRENAI_LLM_PROVIDER=openai
export OPENAI_API_KEY=sk-...

# DeepSeek
export WRENAI_LLM_PROVIDER=deepseek
export DEEPSEEK_API_KEY=sk-...

# 阿里通义千问
export WRENAI_LLM_PROVIDER=qwen
export DASHSCOPE_API_KEY=sk-...

# 本地 Ollama
export WRENAI_LLM_PROVIDER=ollama
export OLLAMA_BASE_URL=http://localhost:11434
```

### 多租户配置

```bash
# 组织 ID (用于多租户场景)
export WRENAI_ORG_ID=your-org-id

# 在请求中指定
curl -s -X POST "$WRENAI_API_URL/v1/ask" \
  -H "X-Org-ID: your-org-id" \
  -H "Authorization: Bearer $WRENAI_API_KEY" \
  -d '{"question":"..."}'
```

---

## 响应格式参考

### 成功响应 (Ask)

```json
{
  "taskId": "uuid-string",
  "status": "pending",
  "question": "过去7天每天的销售额是多少?",
  "createdAt": "2025-01-15T10:30:00Z"
}
```

### 成功响应 (Result)

```json
{
  "sql": "SELECT DATE(created_at) AS day, SUM(amount) AS total\nFROM sales\nWHERE created_at >= CURRENT_DATE - INTERVAL '7 days'\nGROUP BY DATE(created_at)\nORDER BY day",
  "columns": ["day", "total"],
  "data": [
    {"day": "2025-01-08", "total": 15000.00},
    {"day": "2025-01-09", "total": 18200.00},
    {"day": "2025-01-10", "total": 21000.00}
  ],
  "summary": "过去7天每日销售额数据显示,1月10日达到最高21000元"
}
```

### 图表配置响应 (Chart)

```json
{
  "chartType": "line",
  "config": {
    "xAxis": {"field": "day", "label": "日期"},
    "yAxis": {"field": "total", "label": "销售额", "unit": "元"},
    "title": "过去7天每日销售额趋势"
  },
  "reasoning": "选择折线图是因为时间序列数据适合展示趋势变化"
}
```

---

## 限制与注意事项

1. **查询超时:** 默认超时 60 秒,超长查询可能被截断
2. **结果行数:** 默认限制 1000 行,可通过参数调整
3. **SQL 验证:** 某些环境启用了 SQL 语法验证,复杂查询可能被拒绝
4. **数据源连接:** 确保数据源网络可达,WrenAI 服务能访问目标数据库
5. **API 限流:** 高频调用可能触发限流,建议添加适当延迟

---

## 更多信息

- **官方文档:** https://docs.wrenai.cn/
- **GitHub:** https://github.com/Canner/WrenAI
- **API 参考:** https://wrenai.readme.io/reference/welcome
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Skill Kill chat Ill hat NL2SQL chatBI Wren skill md文件即skill技能配置

shadowaver@163.com
QQ 540722048

沙发
HappyAndy_Lo 发表于 2026-5-18 09:26:22

藤椅
albertwishedu 发表于 2026-5-18 09:38:11

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-9-28 17:11