Files
holy-python/skills/holy-crab/SKILL.md

243 lines
7.7 KiB
Markdown
Raw Normal View History

2026-08-04 14:02:45 +08:00
---
name: holy-crab
description: "Holy蟹搜索监测平台 — 当用户需要查询/分析小红书问一问任务结果、榜单数据、产品详情、评论情感时使用此技能。包含结果查询、榜单摘要、产品分析、情感统计等完整处理流程。"
---
# Holy蟹搜索监测 · AI 数据访问技能
## 概述
Holy CrabHoly蟹是一个基于小红书问一问 API 的搜索监测平台。
爬虫结果经 `extract_wenyiwen.py` 清洗后,以标准结构化格式存储。
**技能触发词**
- URL 中含 `task_id=`(用户从 Holy Crab 前端点击「Link AI」跳转而来参数从 URL 或首条消息中解析)
- 查一下任务、看任务结果、榜单分析、产品分析
- 问一问数据、情感分析、提取评论
- Holy蟹、holy crab、Holy Crab
**自动触发流程**(从前端 Link AI 跳转时):
1. 从 URL 参数或首条用户消息中提取 `task_id`
2. 自动调用 `python3 scripts/query_tasks.py <task_id>` 获取任务数据
3. 若有 `task_name`/`keywords`/`mode` 参数,合并到报告上下文中
4. 生成完整分析报告
---
## 快速开始
### 第 1 步:获取会话 CookieauthCode 方式)
Holy Crab 后端使用钉钉 OAuthAI 只需用户的 authCode 就能换出 session token**全程不需要浏览器 Cookie**。
#### 自动流程(推荐):
```bash
bash scripts/get-cookie.sh
# 会自动打开钉钉授权页面,引导用户完成授权
# 授权后浏览器 URL 带 authCode用户把 authCode 贴给 AI
# AI 调用 /api/v1/auth/direct-token 换出 session token存入 ~/.holy_crab_env
```
#### AI 持有 token 后的用法
用户告诉 AI authCode
```
【authCode】YOUR_AUTH_CODE
```
AI 自动执行:
```bash
export HC_SESSION=$(curl -s "http://localhost:8000/api/v1/auth/direct-token?authCode=YOUR_AUTH_CODE" | python3 -c "import sys,json; print(json.load(sys.stdin)['data']['token'])")
```
后续所有请求自动带 Cookie无需用户再次操作。
```bash
# 先确保后端正在运行,然后执行:
bash ~/.qclaw/skills/holy-crab/scripts/get-cookie.sh
# 成功后会输出:✅ Cookie 已写入 ~/.holy_crab_cookie
```
> **如果自动方式失败**(后端未启动或网络不通),改为手动方式:
> 1. 在浏览器中登录 Holy Crab 前端
> 2. 打开浏览器 DevTools → Application → Cookies复制 `hc_session` 的值
> 3. 写入文件:`echo "你的cookie值" > ~/.holy_crab_cookie`
### 第 2 步:查询任务列表
```bash
python3 ~/.qclaw/skills/holy-crab/scripts/query_tasks.py
# 输出任务ID | 名称 | 关键词 | 状态 | 进度 | 创建时间
```
### 第 3 步:获取任务详情(含 extracted 数据)
```bash
python3 ~/.qclaw/skills/holy-crab/scripts/query_task.py <任务ID>
```
返回示例(`result.extracted` 部分):
```json
{
"schema_version": "1.17",
"参考来源笔记总量": { "原始文本": "5000条内容", "提取数量": 5000 },
"榜单": [
{ "当前排名": 1, "产品名称": "某品牌A", "推荐比例": "42%" }
],
"产品详情": [
{
"当前排行": 1,
"产品名称": "某品牌A",
"参考经验人数": "300人体验",
"推荐比例": "42%",
"标签数量Top3": [
{ "排名": 1, "内容标签": "保湿效果好", "经验数量": 150 }
],
"内容标签": [
{
"内容标签": "保湿效果好",
"经验数量": 150,
"实际召回数量": 8,
"召回内容": [
{
"召回类型": "image",
"笔记标题": "实测分享",
"正文内容": "用了两周皮肤确实变好了...",
"字数": 120,
"点赞数量": 234,
"收藏数量": 56,
"笔记链接": "http://xhslink.com/..."
},
{
"召回类型": "comment",
"评论内容": "真的好用!",
"所属笔记点赞数量": 234,
"发布时间": "2026-07-20 14:30:00"
}
]
}
]
}
],
"普通筛选标签": ["成分党", "敏感肌"],
"提取警告": []
}
```
### 第 4 步:调用处理函数
```bash
# 榜单摘要
python3 ~/.qclaw/skills/holy-crab/scripts/process_data.py summarize <任务ID>
# 情感统计(从召回内容中提取 comment 类型)
python3 ~/.qclaw/skills/holy-crab/scripts/process_data.py sentiment <任务ID>
# 产品对比
python3 ~/.qclaw/skills/holy-crab/scripts/process_data.py compare <任务ID>
```
---
## API 参考
### 基础信息
| 项目 | 值 |
|------|-----|
| 后端地址 | `http://localhost:8000`(本地)或 `http://<服务器IP>:8000` |
| API 前缀 | `/api/v1` |
| 认证方式 | Session Cookie`hc_session` |
### 核心接口
#### GET /api/v1/tasks
任务列表(支持 `?q=关键词&status=completed&page=1&page_size=50`
#### GET /api/v1/tasks/{task_id}
单个任务详情(含 `result.extracted`
#### GET /api/v1/tasks/{task_id}/files
任务文件列表
---
## result.extracted 数据解读
### 顶层字段
| 字段 | 类型 | 说明 |
|------|------|------|
| `schema_version` | string | 数据版本,当前 `1.17` |
| `参考来源笔记总量` | object | brand_info 中解析的笔记总数 |
| `榜单` | array | 推荐产品排名列表 |
| `产品详情` | array | 各产品的详细标签和召回内容 |
| `普通筛选标签` | array | 普通命中关键词列表 |
| `提取元数据` | object | 包含 `召回统计``包含召回明细` |
| `提取警告` | array | 解析过程中的警告信息 |
### 榜单元素
```json
{ "当前排名": 1, "产品名称": "某品牌", "推荐比例": "42%" }
```
### 产品详情元素
| 字段 | 说明 |
|------|------|
| `当前排行` | 在榜单中的排名 |
| `产品名称` | 产品名称 |
| `参考经验人数` | 原始文本,如 "300人体验" |
| `推荐比例` | 在问一问中的推荐占比 |
| `标签数量Top3` | 按经验数量排序的前3个标签 |
| `内容标签` | 全部内容标签,含召回内容 |
### 召回内容类型
| `召回类型` | 含义 | 额外字段 |
|-----------|------|---------|
| `image` | 图文笔记 | `笔记标题``正文内容``字数``点赞数量``收藏数量``评论数量``笔记链接` |
| `video` | 视频笔记 | 同 image + `视频时长` |
| `comment` | 评论召回 | `评论内容``所属笔记点赞数量``发布时间` |
### 情感统计(需 AI 自行计算)
`产品详情[].内容标签[].召回内容[]` 中筛选 `召回类型 == "comment"` 的条目,
统计 `情感分类` 字段(正面/负面/中性)。
> **注意**`情感分类` 字段需要通过 AI 语义分析补充,原始清洗数据中不含此字段。
> AI 应读取 `评论内容`,判断情感后补充统计。
---
## 认证机制详解
Holy Crab 使用钉钉 OAuth + Cookie 会话:
1. 用户访问 `/api/v1/auth/dingtalk/login` → 跳转到钉钉授权
2. 钉钉回调 `/api/v1/auth/dingtalk/callback` → 设置 `hc_session` Cookie
3. 后续请求携带该 Cookie 访问所有 `/api/v1/*` 接口
**AI 获取 Cookie 的方法**(按优先级):
1. **环境变量**`HC_SESSION=xxx`(最优先)
2. **Cookie 文件**`~/.holy_crab_cookie`
3. **直接提示用户**提供 Cookie
```bash
# 设置环境变量方式
export HC_SESSION="用户提供的cookie值"
```
---
## 错误处理
| 错误信息 | 含义 | 处理方式 |
|---------|------|---------|
| `请先通过钉钉授权登录` | Cookie 无效或过期 | 提示用户重新登录后端或刷新 Cookie |
| `任务不存在` | task_id 有误 | 检查任务 ID 是否正确 |
| `服务器内部错误` | 后端异常 | 检查后端服务是否运行 |
| `提取警告` 数组有内容 | 数据解析有部分问题 | 查看 warning 字段了解详情 |