Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c603ea8999 | |||
| 97558edad5 | |||
| bfc52cbe11 |
16
Dockerfile
16
Dockerfile
@@ -1,17 +1,27 @@
|
||||
FROM golang:1.21-alpine AS builder
|
||||
FROM golang:1.26-alpine AS builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# 设置 Alpine 国内镜像源
|
||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
|
||||
|
||||
RUN apk add --no-cache gcc musl-dev
|
||||
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
|
||||
# 设置 Go 国内镜像源(多备用源)
|
||||
RUN go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct && \
|
||||
go env -w GOSUMDB=off && \
|
||||
go mod download
|
||||
|
||||
COPY . .
|
||||
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o server ./cmd/server
|
||||
|
||||
FROM alpine:3.19
|
||||
FROM alpine:latest
|
||||
|
||||
# 设置 Alpine 国内镜像源
|
||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
|
||||
|
||||
RUN apk --no-cache add ca-certificates
|
||||
|
||||
|
||||
205
skill.md
205
skill.md
@@ -1,205 +0,0 @@
|
||||
# Chart Skill - 图表生成工具
|
||||
|
||||
## 概述
|
||||
|
||||
用于生成各种类型的图表,返回多种格式以适配不同场景:
|
||||
- **ANSI 格式**:终端彩色显示
|
||||
- **SVG 格式**:Web 内嵌矢量图
|
||||
- **PNG 格式**:位图下载
|
||||
- **Markdown 格式**:Web 对话窗口显示
|
||||
|
||||
## 支持的图表类型
|
||||
|
||||
| 类型 | 说明 |
|
||||
|------|------|
|
||||
| `line` | 折线图 |
|
||||
| `bar` | 柱状图 |
|
||||
| `pie` | 饼图 |
|
||||
| `scatter` | 散点图 |
|
||||
| `bubble` | 气泡图 |
|
||||
| `donut` | 圆环图 |
|
||||
| `mixed` | 混合图(柱状+折线) |
|
||||
| `polar` | 极区图 |
|
||||
| `radar` | 雷达图 |
|
||||
|
||||
## 基本信息
|
||||
|
||||
| 属性 | 值 |
|
||||
|------|-----|
|
||||
| 端点 | `http://localhost:3100/api/v1/chart` |
|
||||
| 方法 | `POST` |
|
||||
| 内容类型 | `application/json` |
|
||||
|
||||
## 请求参数
|
||||
|
||||
### 参数结构
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "bar",
|
||||
"title": "图表标题",
|
||||
"data": {
|
||||
"labels": ["标签1", "标签2", "标签3"],
|
||||
"datasets": [
|
||||
{
|
||||
"name": "数据系列名称",
|
||||
"values": [100, 150, 120],
|
||||
"color": "#4CAF50"
|
||||
}
|
||||
],
|
||||
"options": {
|
||||
"width": 600,
|
||||
"height": 400
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 参数说明
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| `type` | string | 否 | 图表类型,默认 `line` |
|
||||
| `title` | string | 否 | 图表标题 |
|
||||
| `data.labels` | array | 是 | 标签数组 |
|
||||
| `data.datasets` | array | 是 | 数据系列数组 |
|
||||
| `datasets[].name` | string | 否 | 数据系列名称 |
|
||||
| `datasets[].values` | array | **是** | 数值数组 |
|
||||
| `datasets[].color` | string | 否 | 十六进制颜色,如 `#4CAF50` |
|
||||
| `options.width` | integer | 否 | 图表宽度(像素) |
|
||||
| `options.height` | integer | 否 | 图表高度(像素) |
|
||||
|
||||
## 响应字段
|
||||
|
||||
| 字段 | 说明 |
|
||||
|------|------|
|
||||
| `chart_id` | 图表唯一标识 |
|
||||
| `text` | 纯文本描述 |
|
||||
| `ansi` | ANSI 彩色文本(用于终端) |
|
||||
| `svg` | SVG 矢量图代码 |
|
||||
| `png_url` | PNG 图片下载 URL |
|
||||
| `markdown` | Markdown 格式(用于 Web) |
|
||||
|
||||
## 使用示例
|
||||
|
||||
### 示例 1:柱状图
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "bar",
|
||||
"title": "月度销售额",
|
||||
"data": {
|
||||
"labels": ["一月", "二月", "三月", "四月"],
|
||||
"datasets": [
|
||||
{ "name": "销售额", "values": [100, 150, 120, 180], "color": "#4CAF50" }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 示例 2:饼图
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "pie",
|
||||
"title": "市场份额",
|
||||
"data": {
|
||||
"labels": ["苹果", "三星", "华为", "其他"],
|
||||
"datasets": [
|
||||
{ "name": "销量", "values": [35, 25, 20, 20] }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 示例 3:圆环图
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "donut",
|
||||
"title": "预算分配",
|
||||
"data": {
|
||||
"labels": ["人力", "设备", "营销", "研发"],
|
||||
"datasets": [
|
||||
{ "name": "预算", "values": [40, 20, 25, 15], "color": "#2196F3" }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 示例 4:雷达图
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "radar",
|
||||
"title": "员工能力评估",
|
||||
"data": {
|
||||
"labels": ["速度", "力量", "耐力", "智力", "敏捷"],
|
||||
"datasets": [
|
||||
{ "name": "张三", "values": [80, 70, 90, 85, 75] }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 示例 5:气泡图
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "bubble",
|
||||
"title": "产品分析",
|
||||
"data": {
|
||||
"labels": ["产品A", "产品B", "产品C", "产品D"],
|
||||
"datasets": [
|
||||
{ "name": "销量/利润", "values": [100, 250, 150, 300] }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 示例 6:混合图
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "mixed",
|
||||
"title": "销售与目标对比",
|
||||
"data": {
|
||||
"labels": ["一月", "二月", "三月", "四月"],
|
||||
"datasets": [
|
||||
{ "name": "实际", "values": [100, 150, 120, 180] },
|
||||
{ "name": "目标", "values": [120, 140, 130, 160] }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 示例 7:极区图
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "polar",
|
||||
"title": "风向分布",
|
||||
"data": {
|
||||
"labels": ["北", "东北", "东", "东南", "南"],
|
||||
"datasets": [
|
||||
{ "name": "风速", "values": [10, 20, 15, 25, 30] }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 使用场景
|
||||
|
||||
| 场景 | 推荐字段 | 说明 |
|
||||
|------|---------|------|
|
||||
| 终端显示 | `ansi` | 彩色 ASCII 图表 |
|
||||
| Web 内嵌 | `svg` | 内联 SVG 代码 |
|
||||
| Web 展示 | `markdown` | 图片链接 |
|
||||
| 文件下载 | `png_url` | 下载 PNG 文件 |
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 每次请求生成新的图表,图表会缓存在服务器内存中
|
||||
2. 图表数据通过 `datasets[].values` 传递,支持多系列
|
||||
3. 颜色使用十六进制格式,如 `#FF5722`
|
||||
4. 终端使用 ANSI 格式,Web 使用 Markdown 格式
|
||||
72
skills/picoclaw-chart/SKILL.md
Normal file
72
skills/picoclaw-chart/SKILL.md
Normal file
@@ -0,0 +1,72 @@
|
||||
---
|
||||
name: picoclaw-chart
|
||||
description: 生成多种格式的图表(ANSI/SVG/PNG/Markdown)。支持折线图、柱状图、饼图、散点图、气泡图、圆环图、混合图、极区图、雷达图。用于 (1) 终端彩色显示, (2) Web 内嵌矢量图, (3) 位图下载, (4) Markdown 文档嵌入
|
||||
---
|
||||
|
||||
# Chart Skill
|
||||
|
||||
## 快速开始
|
||||
|
||||
```json
|
||||
POST https://aipi.gaomia.site/api/v1/chart
|
||||
{
|
||||
"type": "bar",
|
||||
"title": "月度销售额",
|
||||
"data": {
|
||||
"labels": ["一月", "二月", "三月"],
|
||||
"datasets": [
|
||||
{ "name": "销售额", "values": [100, 150, 120], "color": "#4CAF50" }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
响应:
|
||||
```json
|
||||
{
|
||||
"chart_id": "string",
|
||||
"text": "纯文本描述",
|
||||
"ansi": "ANSI 彩色文本",
|
||||
"svg": "SVG 矢量图",
|
||||
"png_url": "https://aipi.gaomia.site/chart/{id}.png",
|
||||
"markdown": ""
|
||||
}
|
||||
```
|
||||
|
||||
## 图表类型
|
||||
|
||||
| type | 说明 |
|
||||
|------|------|
|
||||
| `line` | 折线图 |
|
||||
| `bar` | 柱状图 |
|
||||
| `pie` | 饼图 |
|
||||
| `scatter` | 散点图 |
|
||||
| `bubble` | 气泡图 |
|
||||
| `donut` | 圆环图 |
|
||||
| `mixed` | 混合图(柱状+折线) |
|
||||
| `polar` | 极区图 |
|
||||
| `radar` | 雷达图 |
|
||||
|
||||
## 输出格式选择
|
||||
|
||||
| 场景 | 使用字段 |
|
||||
|------|----------|
|
||||
| 终端显示 | `ansi` |
|
||||
| Web 内嵌 | `svg` |
|
||||
| Web 展示 | `markdown` |
|
||||
| 文件下载 | `png_url` |
|
||||
|
||||
## 参数参考
|
||||
|
||||
| 字段 | 类型 | 必填 | 默认值 |
|
||||
|------|------|------|--------|
|
||||
| `type` | string | 否 | `line` |
|
||||
| `title` | string | 否 | - |
|
||||
| `data.labels` | array | 是 | - |
|
||||
| `data.datasets[].name` | string | 否 | - |
|
||||
| `data.datasets[].values` | array | **是** | - |
|
||||
| `data.datasets[].color` | string | 否 | `#4CAF50` |
|
||||
| `data.options.width` | int | 否 | 600 |
|
||||
| `data.options.height` | int | 否 | 400 |
|
||||
|
||||
详细 API 文档:见 [CHART_API.md](references/CHART_API.md)
|
||||
160
skills/picoclaw-chart/references/CHART_API.md
Normal file
160
skills/picoclaw-chart/references/CHART_API.md
Normal file
@@ -0,0 +1,160 @@
|
||||
# Chart API 详细文档
|
||||
|
||||
## 端点
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| 地址 | `https://aipi.gaomia.site/api/v1/chart` |
|
||||
| 方法 | `POST` |
|
||||
| Content-Type | `application/json` |
|
||||
|
||||
## 请求结构
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "bar",
|
||||
"title": "图表标题",
|
||||
"data": {
|
||||
"labels": ["标签1", "标签2", "标签3"],
|
||||
"datasets": [
|
||||
{
|
||||
"name": "数据系列名称",
|
||||
"values": [100, 150, 120],
|
||||
"color": "#4CAF50"
|
||||
}
|
||||
],
|
||||
"options": {
|
||||
"width": 600,
|
||||
"height": 400
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 响应结构
|
||||
|
||||
```json
|
||||
{
|
||||
"chart_id": "abc123",
|
||||
"text": "纯文本描述",
|
||||
"ansi": "\u001b[31m红色文本\u001b[0m",
|
||||
"svg": "<svg>...</svg>",
|
||||
"png_url": "https://aipi.gaomia.site/chart/abc123.png",
|
||||
"markdown": ""
|
||||
}
|
||||
```
|
||||
|
||||
## 图表类型示例
|
||||
|
||||
### 柱状图 (bar)
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "bar",
|
||||
"title": "月度销售额",
|
||||
"data": {
|
||||
"labels": ["一月", "二月", "三月", "四月"],
|
||||
"datasets": [
|
||||
{ "name": "销售额", "values": [100, 150, 120, 180], "color": "#4CAF50" }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 饼图 (pie)
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "pie",
|
||||
"title": "市场份额",
|
||||
"data": {
|
||||
"labels": ["苹果", "三星", "华为", "其他"],
|
||||
"datasets": [
|
||||
{ "name": "销量", "values": [35, 25, 20, 20] }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 圆环图 (donut)
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "donut",
|
||||
"title": "预算分配",
|
||||
"data": {
|
||||
"labels": ["人力", "设备", "营销", "研发"],
|
||||
"datasets": [
|
||||
{ "name": "预算", "values": [40, 20, 25, 15], "color": "#2196F3" }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 雷达图 (radar)
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "radar",
|
||||
"title": "员工能力评估",
|
||||
"data": {
|
||||
"labels": ["速度", "力量", "耐力", "智力", "敏捷"],
|
||||
"datasets": [
|
||||
{ "name": "张三", "values": [80, 70, 90, 85, 75] }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 气泡图 (bubble)
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "bubble",
|
||||
"title": "产品分析",
|
||||
"data": {
|
||||
"labels": ["产品A", "产品B", "产品C", "产品D"],
|
||||
"datasets": [
|
||||
{ "name": "销量/利润", "values": [100, 250, 150, 300] }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 混合图 (mixed)
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "mixed",
|
||||
"title": "销售与目标对比",
|
||||
"data": {
|
||||
"labels": ["一月", "二月", "三月", "四月"],
|
||||
"datasets": [
|
||||
{ "name": "实际", "values": [100, 150, 120, 180] },
|
||||
{ "name": "目标", "values": [120, 140, 130, 160] }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 极区图 (polar)
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "polar",
|
||||
"title": "风向分布",
|
||||
"data": {
|
||||
"labels": ["北", "东北", "东", "东南", "南"],
|
||||
"datasets": [
|
||||
{ "name": "风速", "values": [10, 20, 15, 25, 30] }
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 每次请求生<E6B182><E7949F><EFBFBD>新的图表,图表会缓存在服务器内存中
|
||||
2. 图表数据通过 `datasets[].values` 传递,支持多系列
|
||||
3. 颜色使用十六进制格式,如 `#FF5722`
|
||||
4. 终端使用 ANSI 格式,Web 使用 Markdown 格式
|
||||
Reference in New Issue
Block a user