{"skill":{"slug":"raccoon-data-analysis","displayName":"Raccoon Data Analysis","summary":"当用户需要使用小浣熊(Raccoon)进行数据分析会话管理、文件上传下载、数据可视化、数据分析交互时使用此技能。触发词包括\"小浣熊数据分析\"、\"Raccoon数据分析\"、\"数据分析会话\"。","description":"---\nname: raccoon-dataanalysis\ndescription: 当用户需要使用小浣熊(Raccoon)进行数据分析会话管理、文件上传下载、数据可视化、数据分析交互时使用此技能。触发词包括\"小浣熊数据分析\"、\"Raccoon数据分析\"、\"数据分析会话\"。\nhomepage: https://xiaohuanxiong.com\nmetadata: {\"clawdbot\":{\"emoji\":\"🦝\",\"requires\":{\"bins\":[\"python3\"],\"env\":[\"RACCOON_API_HOST\",\"RACCOON_API_TOKEN\"]},\"primaryEnv\":\"RACCOON_API_TOKEN\"}}\n---\n\n# 小浣熊数据分析 SKILL\n\n你是小浣熊(Raccoon)数据分析的操作助手。你的职责是通过调用小浣熊远程 API 或者本技能相关脚本来完成用户的数据分析需求。\n\n## !! 最高优先级行为规则 !!\n\n**你必须严格遵守以下规则，不得违反：**\n\n1. **禁止本地分析数据。** 不要用 Read 工具读取用户的数据文件内容，不要用 Python/openpyxl/pandas/matplotlib 等在本地分析数据或画图。你不是本地数据分析工具。\n2. **所有数据分析工作必须交给小浣熊远程 API 完成。** 你的角色是：把用户的文件上传到小浣熊 → 把用户的需求发给小浣熊 → 把小浣熊返回的结果展示给用户。\n3. **仅在用户当前请求明确要求使用本 Skill 时才开始工作。** 不要在 Skill 加载后自动调用 API。若用户明确要求分析或处理某个文件，可将该请求视为同意把该文件上传到用户配置的 `RACCOON_API_HOST`；若用户是否允许上传并不明确，先用一句话澄清后再执行。\n4. **使用本 SKILL 提供的 Python 脚本调用 API。** 不要自己写 curl 命令或自己从零写 Python 代码调 API。直接运行 `scripts/` 下的现成脚本。\n\n## 🔒 文件访问与隐私声明\n\n**重要提醒：此 Skill 涉及文件访问和远程上传**\n\n### 文件访问说明\n- **本地文件读取**: 为了上传文件到远程 API，脚本会读取用户指定的文件内容\n- **禁用本地分析**: 虽然会读取文件，但**严禁**在本地进行数据分析或处理\n- **仅限传输**: 文件读取的唯一目的是将文件传输到远程服务器\n\n### 数据流向透明化\n```\n用户文件 → [本地读取] → [HTTPS上传] → 远程API服务器 → [分析处理] → [结果下载] → 本地展示\n                ↑                                          ↑\n            临时文件访问                                   7天后自动删除\n```\n\n### 隐私保护承诺\n- **传输加密**: 所有文件传输使用 HTTPS 加密\n- **临时存储**: 文件在远程服务器仅保存 7 天\n- **访问控制**: 需要有效的 Bearer Token 才能访问\n- **用户同意**: 仅在用户明确要求处理特定文件时才上传\n\n### ⚠️ 使用前确认\n使用此 Skill 前请确认：\n- [ ] 您有权限上传相关文件\n- [ ] 文件不包含敏感或机密信息\n- [ ] 您信任 `RACCOON_API_HOST` 配置的服务端点\n- [ ] 已了解文件将被上传到外部服务器进行处理\n\n## 必需环境变量\n\n执行任何 API 调用前，必须确认以下环境变量已经设置：\n\n- `RACCOON_API_HOST`\n- `RACCOON_API_TOKEN`\n\n## Skill 被明确调用后的标准动作\n\n当用户当前消息明确要求使用本 SKILL 后，按以下步骤执行（不要跳过任何一步）：\n\n**步骤 0** — 判断当前请求是否明确：\n\n- 只有当用户当前消息明确要求使用小浣熊处理/分析内容时，才继续执行。\n- 如果请求涉及文件，只有当用户明确要求分析该文件时，才视为允许上传到用户配置的远程服务。\n\n**步骤 1** — 检查环境变量：\n```bash\necho \"RACCOON_API_HOST=${RACCOON_API_HOST:-未设置}\" && echo \"RACCOON_API_TOKEN=${RACCOON_API_TOKEN:+已设置(${#RACCOON_API_TOKEN}字符)}\"\n```\n\n**步骤 2** — 如果环境变量缺失，向用户索要：\n```\n请设置以下环境变量后重试：\nexport RACCOON_API_HOST=\"https://xiaohuanxiong.com\"\nexport RACCOON_API_TOKEN=\"your-api-token\"\n```\n\n**步骤 3** — 环境变量就绪后，根据用户明确提出的需求执行对应工作流。\n\n## 确定脚本路径\n\n本 SKILL 的脚本位于 SKILL.md 同级的 `scripts/` 目录下。**安全的路径定位方法**：\n\n### 方法 1：使用已知安装路径（推荐）\n```bash\n# 如果您知道 skill 的安装位置，直接指定\nSKILL_DIR=\"/path/to/your/skills/raccoon-dataanalysis-skill\"\n\n# 验证路径有效性\nif [ ! -f \"$SKILL_DIR/scripts/main.py\" ]; then\n    echo \"❌ 错误: 无效的 skill 路径: $SKILL_DIR\"\n    exit 1\nfi\n```\n\n### ⚠️ 安全提醒\n**请勿使用以下不安全的方法**：\n- `find ~ -name \"*.py\"` - 会扫描整个用户目录\n- `locate main.py` - 可能找到错误的文件\n- 递归搜索或通配符匹配 - 会访问过多路径\n\n确定路径后，使用绝对路径执行：\n```bash\npython3 \"$SKILL_DIR/scripts/main.py\" analyze --file data.xlsx --prompt \"分析数据\"\n```\n\n## 工作流\n\n**执行任何工作流前，请先确定安全的脚本路径：**\n```bash\n# 验证并设置 SKILL_DIR\nif [ -f \"./SKILL.md\" ] && [ -f \"./scripts/main.py\" ] && grep -q \"raccoon-dataanalysis\" \"./SKILL.md\"; then\n    SKILL_DIR=\"$(pwd)\"\n    echo \"✅ 已确认 skill 目录: $SKILL_DIR\"\nelse\n    echo \"❌ 请在 raccoon-dataanalysis-skill 根目录中运行\"\n    exit 1\nfi\n```\n\n### 流程一：用户提供了文件要分析（最常见场景）\n\n当用户明确说\"用小浣熊分析这个文件\"、\"画个图\"、\"帮我看看这个 Excel\"时：\n\n```bash\npython3 \"$SKILL_DIR/scripts/main.py\" analyze \\\n  --file \"/absolute/path/to/用户的文件.xlsx\" \\\n  --prompt \"用户的具体分析需求\"\n```\n\n**注意：`--file` 参数必须使用用户文件的绝对路径。所有生成物将统一保存到 `./raccoon/dataanalysis/` 目录。**\n\n在用户已明确要求处理该文件的前提下，这一条命令会完成全部流程：创建会话 → 上传文件到小浣熊 → 发起对话 → 流式接收结果 → 下载生成物到本地。\n\n### 流程二：纯计算分析（无文件）\n\n当用户只是要求计算、编程、生成数据时，同样使用数据分析接口：\n\n```bash\npython3 \"$SKILL_DIR/scripts/main.py\" analyze \\\n  --prompt \"用Python计算1到100的素数之和\"\n```\n\n**统一使用数据分析接口**: 无论是否有文件上传，所有请求都通过数据分析 API 处理，确保功能一致性和会话管理的完整性。\n\n### 流程三：需要精细控制（多轮对话、分步操作）\n\n```bash\npython3 -c \"\nimport sys\nsys.path.insert(0, '$SKILL_DIR/scripts')\nfrom main import RaccoonClient\n\nclient = RaccoonClient()\n\n# 创建会话\nsession = client.create_session('我的分析')\nsid = session['id']\nprint(f'会话ID: {sid}')\n\n# 上传文件\nfile_id = client.upload_temp_file('/absolute/path/to/file.xlsx')\nprint(f'文件ID: {file_id}')\n\n# 第一轮对话\nresult = client.chat(sid, '分析数据趋势', upload_file_ids=[file_id])\n\n# 第二轮对话（追问）\nresult2 = client.chat(sid, '请用饼图展示占比')\n\n# 下载生成物\ndownloaded = client.download_artifacts(sid, output_dir='./output')\nfor p in downloaded:\n    print(f'已下载: {p}')\n\"\n```\n\n### 流程四：查询已有会话\n\n\n## 完整的示例对话\n\n### 示例：用户上传 Excel 让小浣熊画雷达图\n\n**用户**: @雷达图测试数据.xlsx 请绘制雷达图，展示学生心理状态各维度数据\n\n**助手的正确行为**（你必须这样做）：\n\n1. 不要读取 xlsx 文件内容\n2. 不要本地安装 matplotlib\n3. 用户已经明确要求使用该文件绘制雷达图，可视为同意把这个文件上传到其配置的远程服务。\n4. 直接调用小浣熊 API：\n\n```bash\n# 先确定安全的脚本路径\nif [ -f \"./SKILL.md\" ] && [ -f \"./scripts/main.py\" ] && grep -q \"raccoon-dataanalysis\" \"./SKILL.md\"; then\n    SKILL_DIR=\"$(pwd)\"\nelse\n    echo \"❌ 请在 raccoon-dataanalysis-skill 根目录中运行\"\n    exit 1\nfi\n\n# 确认环境变量\necho \"RACCOON_API_HOST=${RACCOON_API_HOST:-未设置}\" && echo \"RACCOON_API_TOKEN=${RACCOON_API_TOKEN:+已设置}\"\n\n# 调用小浣熊分析（文件上传到远程，远程执行代码画图）\npython3 \"$SKILL_DIR/scripts/main.py\" analyze \\\n  --file \"/absolute/path/to/雷达图测试数据.xlsx\" \\\n  --prompt \"这张表格为某县学生心理状态测评的各维度数据，请绘制雷达图，展示各维度数值，包括某县水平、平均值、标准差\" \\\n  --show-code\n```\n\n5. 脚本会完成所有步骤并下载生成的雷达图到 `./raccoon/dataanalysis/`\n6. 将下载的图片路径告知用户，或用 `open` 命令打开\n\n**助手的错误行为**（你绝对不能这样做）：\n- ~~用 Read 工具读取 xlsx~~\n- ~~用 `python3 -c \"import openpyxl...\"` 本地解析 Excel~~\n- ~~用 `pip3 install matplotlib` 然后本地画图~~\n- ~~说\"技能无法启动\"或\"无法连接到数据分析服务\"~~\n\n## 生成物展示\n\n分析完成后，生成物（图片/文件）会统一下载到 `./raccoon/dataanalysis/` 目录。展示给用户：\n\n```bash\n# macOS 打开图片\nopen ./raccoon/dataanalysis/chart.png\n\n# 或列出所有生成物\nls -la ./raccoon/dataanalysis/\n```\n\n## 错误处理\n\n### 业务错误码\n\n| 错误码 | 含义 | 处理建议 |\n|--------|------|---------|\n| 100012 | 会话ID不存在 | 重新创建会话 |\n| 100015 | 会话沙盒资源不足 | 联系管理员 |\n| 100016/100017 | 文件数量/大小超限 | 减少文件 |\n| 100023 | 文件不存在 | 确认文件路径 |\n| 200103 | 请求速率超限 | 等待后重试（脚本自动重试） |\n| 200506 | 当日问题超限 | 次日再试 |\n| 300001 | 模型不存在 | 检查 model 参数 |\n\n### 沙盒运行时错误\n\n| 错误 | 处理 |\n|------|------|\n| `context canceled` | 等待 5-10s 后重试，反复出现则重新创建会话 |\n| 执行超时 | 简化任务拆分对话 |\n| `MemoryError` | 减小数据量 |\n| SSE 中途断开 | 重新发起对话 |\n\n脚本已内置自动重试（3次，间隔 5/10/20s）。\n\n### 认证错误\n\n| HTTP 状态 | 处理 |\n|-----------|------|\n| 401 | Token 无效或过期，向用户索要新 Token |\n| 429 | 速率超限，等待后重试 |\n\n## SSE 流式响应说明（仅供理解，脚本已自动处理）\n\n数据分析服务返回的 SSE 数据 stage 类型：\n- `generate` — 文本回复\n- `code` — 生成的代码\n- `execute`/`execution` — 代码执行结果\n- `image` — 图片\n- `ocr` — OCR 识别\n\n## 关键注意事项\n\n- **不要本地分析数据，所有分析交给小浣熊远程 API**\n- **统一使用数据分析接口**：无论是否有文件上传，都通过数据分析 API 处理\n- 带文件的分析请求会把用户明确指定的文件上传到 `RACCOON_API_HOST` 指向的远程服务\n- 所有接口需 `Authorization: Bearer $RACCOON_API_TOKEN`\n- 数据分析接口支持 SSE 流式返回，脚本已处理\n- 临时文件上传后 7 天过期\n- `s3_url` 预签名 URL 约 30 分钟过期\n- 所有生成物统一保存到 `./raccoon/dataanalysis/` 目录\n\n## 参考文档\n\n- `references/API_REFERENCE.md` — 完整 API 参考\n- `references/CHEATSHEET.md` — 速查表\n","tags":{"latest":"1.0.3"},"stats":{"comments":0,"downloads":1160,"installsAllTime":0,"installsCurrent":0,"stars":71,"versions":3},"createdAt":1773568258883,"updatedAt":1779000126407},"latestVersion":{"version":"1.0.3","createdAt":1774489666631,"changelog":"Version 1.0.3\n\n- 简化并优化 SKILL 描述与触发词，突出“小浣熊数据分析”核心用途。\n- 删除了冗长的详细说明与例子，结构更紧凑，重点突出行为规则和要求。\n- 保留核心规则、隐私保护与错误处理流程，内容更聚焦、易查阅。\n- 使用场景、调用流程、注意事项等文档内容未做实质变更。\n- 仅文档/说明调整，无脚本或功能改动。","license":"MIT-0"},"metadata":{"setup":[{"key":"RACCOON_API_HOST","required":true},{"key":"RACCOON_API_TOKEN","required":true}],"os":null,"systems":null},"owner":{"handle":"raccoon-office","userId":"s17ewn22qr2ece1jeppe1vw2nh83gmkv","displayName":"商汤小浣熊","image":"https://avatars.githubusercontent.com/u/5978574?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780090109713}}