
Xiaohongshu Account Analyzer
- 249 installs
- 316 repo stars
- Updated August 4, 2026
- redfox-data/redfox-community
Use xiaohongshu-account-analyzer for development tasks
About
xiaohongshu-account-analyzer: A skill for development. This provides functionality for development workflows.
- xiaohongshu-account-analyzer
Xiaohongshu Account Analyzer by the numbers
- 249 all-time installs (skills.sh)
- +17 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #1,538 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/redfox-data/redfox-community --skill xiaohongshu-account-analyzerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 249 |
|---|---|
| repo stars | ★ 316 |
| Last updated | August 4, 2026 |
| Repository | redfox-data/redfox-community ↗ |
What it does
Use xiaohongshu-account-analyzer for development tasks
Files
小红书账号诊断
1. 简介
深耕小红书账号分析的诊断师工具 -- 深度拆解小红书账号,基于近 30 天数据输出专业的七维度商业价值分析报告,覆盖账号定位、粉丝画像、选题体系、封面风格、爆文能力、互动规模、更新产能七大维度,并提供相似账号推荐和多账号对比分析。
适用对象:小红书创作者、MCN 运营、品牌方、对账号健康度有诊断需求的个人或团队。
---
2. 功能特性
核心功能:
- 七维度诊断评分 -- 账号定位(10分)、粉丝画像与需求(15分)、选题体系(15分)、封面风格(10分)、爆文能力(15分)、互动规模(20分)、更新产能(15分),满分 100 分
- 生命周期分析 -- 判断账号所处生命周期阶段
- 行动处方生成 -- 基于诊断结果输出可落地的优化建议
- 相似账号推荐 -- 推荐 2-5 个可对比的相似账号
- 多账号对比分析 -- 支持多账号横向对比
- HTML 报告生成 -- 生成可视化诊断报告
特色亮点:
- 反空话规则:所有结论必须有数据支撑 + 落地动作,禁止无具体动作的表述
- WebSearch 背景补全:自动搜索博主昵称、媒体报道、跨平台布局补充信息
- 订阅推送机制:无作品数据时支持 30 分钟后的自动重试推送
- 空值智能隐藏:数据为空时自动隐藏对应模块,不展示 "暂无"
---
3. 一键安装
鉴权
获取 API Key
请前往 红狐hub 获取API KEY
配置 API Key
方案1: 以OpenClaw为例,将REDFOX_API_KEY添加到~/.openclaw/openclaw.json中
{ "env": { "REDFOX_API_KEY": "ak_xxxx..." } }方案2: 终端配置:export REDFOX_API_KEY="ak_xxxx..."
export REDFOX_API_KEY="ak_xxxx..."依赖安装
无需安装第三方依赖,使用 Python 标准库(ssl、urllib.request、json)即可。数据接口:POST https://redfox.hk/story/api/xhsUser/query。
---
4. 使用指南
基础使用
单账号诊断:用户输入小红书号(纯数字或字母数字组合),调用接口查询并生成诊断报告。
python scripts/xiaohongshu_analyzer.py query --user_ids "id1,id2"脚本自动将接口原始数据保存至 output/raw_data.json。
操作流程(严格按顺序执行)
步骤 1:开场白引导 -- 输出欢迎语,引导用户输入小红书号。明确说明:请输入小红书号(纯数字或字母数字组合,非中文昵称)。若用户输入中文昵称,提示用户提供小红书号而非昵称。
步骤 2:输入识别与数据获取 -- 识别用户输入(纯数字或字母数字组合识别为小红书号)并调用接口查询。
步骤 3:WebSearch 背景信息补全:
- 搜索「小红书 + 昵称」补全背景信息
- 搜索「昵称 + 采访/报道」寻找媒体报道
- 搜索抖音 / B 站 / 公众号等跨平台布局
步骤 4:查询结果处理 -- 根据查询类型输出对应响应:
- 未查询到账号:调用数据同步接口
python scripts/xiaohongshu_analyzer.py sync_notes --red_ids "用户输入的账号ID",输出提示并引导订阅推送(30 分钟后),使用calendar_create创建日程。 - 查询到唯一账号:继续生成单账号报告(步骤 5-7)。
- 查询到多个账号:进入多账号对比流程(步骤 5M-7M)。
- 查询到账号但无作品:直接进入订阅流程,用户可选择订阅、仍执行分析或暂不订阅。
步骤 5:诊断报告生成 -- 智能体严格按照 references/report_template.md 模板格式在对话中输出诊断报告。报告结构按 7 个评分维度展开:
- 账号定位(10分):TA 是谁、心智占位、核心身份、价值观锚点、吸引力类型、差异化优势
- 粉丝画像与需求(10分):粉丝构成、核心需求反推、付费意愿评估
- 选题体系(15分):选题方向、表达风格、叙事手法、人格一致性
- 封面风格(10分):视觉特征、信息层级、一致性
- 爆文能力(15分):爆文率、爆文特征分析、爆文列表、放大倍数
- 互动规模(20分):互动量、互动率、收藏率、互动结构、水平衡量
- 更新产能(15分):周更频率、间隔标准差、发布时间分析、水平衡量
空数据模块自动隐藏:爆文数为 0 省略爆文能力;无近期作品省略近期作品;赛道痛点或优势为空省略差异化优势。
综合评分结论规则:
- >= 60 分:必须列 >= 2 个已验证可复用的具体动作
- < 60 分:必须先点明薄弱项对应的具体数据问题,再给对应建议
步骤 6:展示相似账号 -- 从脚本返回数据的 similar_accounts 字段提取 2-5 个相似账号,按格式直接展示:
1. [账号名](https://www.xiaohongshu.com/user/profile/[accountId])
| 粉丝:[followerCount] | 总互动:[总点赞+总收藏] | 活跃评分:[评分]
推荐理由:[基于数据总结值得学习的点]
发文特点:[总结内容特征和策略]
可学之处:[具体可复制的策略]
回复序号可继续分析!步骤 7:生成 HTML 报告并展示:
- 7.1:调用脚本
python scripts/xiaohongshu_analyzer.py build_report_data --account_name "账号名"生成output/report_data.json - 7.2:填充 AI 分析内容到
report_data.json(与对话输出完全一致),数值字段填纯数字(不带 % 和单位),空值留空字符串 "" - 7.3:调用脚本生成 HTML:
python scripts/xiaohongshu_analyzer.py generate_html - 7.4:直接在对话中展示 HTML 文件内容
高级使用
多账号对比流程:
5M. 依次为每个账号输出诊断报告,最后输出对比总结(核心差异、共同问题、发展建议)。 6M. 展示相似账号(同步骤 6)。 7M. 生成多账号 HTML 报告(使用多账号模板):
python scripts/xiaohongshu_analyzer.py build_multi_report_data --account_names "账号1,账号2"- 填充各账号分析内容到
output/multi_report_data.json python scripts/xiaohongshu_analyzer.py generate_multi_html
可选分支:
- 用户提供后台数据:直接使用数据生成报告,无需调用查询接口
- 用户回复序号继续分析相似账号:获取该账号 userId,调用完整诊断流程(步骤 3-7)
常用指令速查
| 场景 | 用户输入 | 预期产出 |
|---|---|---|
| 单账号诊断 | 分析小红书号 26112666886 | 输出七维度诊断报告,推荐相似账号,生成 HTML 报告 |
| 多账号对比 | 帮我对比分析 ID1 和 ID2 | 分别输出各账号诊断报告 + 横向对比总结 + 生成对比 HTML |
| 分析相似账号 | 回复序号 "1" 选择相似账号 | 对选中的相似账号进行完整诊断分析 |
| 订阅更新 | 账号无作品数据时回复 "订阅" | 30 分钟后自动推送诊断报告 |
---
5. 使用场景
1. 个人创作者自诊:输入自己的小红书号,获取七维度评分和针对性优化建议,发现定位模糊、选题迷茫等真实问题。 2. MCN 机构批量评估:输入多个签约博主的小红书号,多账号对比分析,识别潜力账号和需要重点扶持的账号。 3. 品牌方筛选合作达人:对候选达人进行账号诊断,评估其商业价值、粉丝质量和内容能力,辅助投放决策。 4. 竞品账号分析:输入竞品小红书号,获取完整的账号画像和 SWOT 分析,发现可借鉴的策略和可追赶的机会点。
---
6. 项目架构
目录结构
xiaohongshu-account-analyzer/
├── SKILL.md # 本文件
├── scripts/
│ ├── xiaohongshu_analyzer.py # query查询数据,build_report_data生成模板,generate_html生成报告
│ ├── html_generator.py # HTML报告生成逻辑,模板替换、字段填充、条件移除
│ └── html_checker.py # HTML数据完整性检查与修复
├── references/
│ ├── report_template.md # 诊断报告输出模板(生成报告前必须先读取)
│ ├── api_guide.md # 接口字段和评分逻辑说明
│ └── workflow_guide.md # 开场白、查询结果、相似账号展示、评分体系和数据填写指南
├── assets/
│ ├── report_template.html # 单账号HTML格式报告模板
│ ├── report_data_template.json # 单账号报告数据模板
│ ├── multi_report_template.html # 多账号对比HTML格式报告模板
│ └── multi_report_data_template.json # 多账号报告数据模板
└── output/
├── raw_data.json # 接口原始数据
├── report_data.json # 单账号报告数据
└── multi_report_data.json # 多账号报告数据技术栈
| 技术 | 用途 |
|---|---|
| Python 标准库 | HTTP 请求与数据解析 |
| 红狐 API | 小红书账号数据来源 |
| WebSearch | 博主背景信息补全 |
| HTML / CSS | 可视化诊断报告渲染 |
核心模块说明
- xiaohongshu_analyzer.py:主脚本,包含 query(查询数据保存 raw_data.json)、sync_notes(数据同步)、build_report_data(生成 report_data.json 模板)、generate_html / generate_multi_html(生成 HTML 报告)子命令。
- html_generator.py:HTML 报告生成逻辑,包含模板替换、字段填充、条件移除等功能。
- html_checker.py:HTML 数据完整性检查与修复,检测缺失字段并填充默认值。
资源索引
| 文件 | 用途 |
|---|---|
| scripts/xiaohongshu_analyzer.py | query查询数据保存raw_data.json,build_report_data生成report_data.json模板,generate_html生成HTML报告 |
| scripts/html_generator.py | HTML报告生成逻辑 |
| scripts/html_checker.py | HTML数据完整性检查与修复 |
| references/report_template.md | 生成报告前必须先读取此模板 |
| references/api_guide.md | 理解接口字段和评分逻辑时读取 |
| references/workflow_guide.md | 处理开场白、查询结果、相似账号展示、评分体系和数据填写时读取 |
| assets/report_template.html | 单账号HTML格式报告模板 |
| assets/report_data_template.json | 单账号报告数据模板 |
| assets/multi_report_template.html | 多账号对比HTML格式报告模板 |
| assets/multi_report_data_template.json | 多账号报告数据模板 |
---
7. 常见问答
安装
Q: 需要安装什么依赖? A: 无需安装第三方依赖,使用 Python 标准库即可。
Q: 如何配置 API Key? A: 请前往 红狐hub 获取 API KEY,通过环境变量 REDFOX_API_KEY 配置。
使用
Q: 分析基于多久的数据? A: 基于近 30 天数据,确保数据时效性。
Q: 输入什么格式的小红书号? A: 小红书号是名称下方的纯数字或字母数字组合(如 Esther1218、26112666886),非中文昵称。
Q: 查询不到账号怎么办? A: 系统会引导数据同步并支持 30 分钟后自动推送诊断报告。
Q: 无作品数据怎么办? A: 系统会提示用户等待更新并引导订阅提醒,也可选择 "仍然执行分析" 继续输出报告。
Q: 多账号对比输出的格式是什么? A: 依次输出每个账号的诊断报告,然后输出对比总结(核心差异、共同问题、发展建议),各按账号分别展示。
故障排除
Q: HTML 报告与对话内容不一致? A: 步骤 7 填充 report_data.json 时,AI 分析内容必须与对话中输出的诊断报告完全一致。HTML 只是将对话中的分析报告进行更美观的输出。
Q: 报告格式不正确? A: 诊断报告必须严格按照 references/report_template.md 格式输出。空值字段直接隐藏对应模块,不展示 "暂无"。
{
"header": {
"数据获取时间": ""
},
"accounts": [
{
"header": {
"账号名": "",
"账号标识": "",
"头像": "",
"数据获取时间": ""
},
"scores": {
"综合评分": "",
"账号定位得分": "",
"账号定位满分": "10",
"账号定位简述原因": "",
"粉丝画像与需求得分": "",
"粉丝画像与需求满分": "15",
"粉丝画像与需求简述原因": "",
"选题体系得分": "",
"选题体系满分": "15",
"选题体系简述原因": "",
"封面风格得分": "",
"封面风格满分": "10",
"封面风格简述原因": "",
"爆文能力得分": "",
"爆文能力满分": "15",
"爆文能力简述原因": "",
"互动规模得分": "",
"互动规模满分": "20",
"互动规模简述原因": "",
"更新产能得分": "",
"更新产能满分": "15",
"更新产能简述原因": ""
},
"conclusion": {
"综合诊断结论内容": "",
"可借鉴的优点": "",
"可成长的地方": ""
},
"positioning": {
"TA是谁": "",
"心智占位": "",
"核心身份": "",
"价值观锚点": "",
"吸引力类型": "",
"赛道痛点": "",
"你的优势": "",
"可强化": ""
},
"interactive_scale": {
"近30天互动量": "",
"互动率": "",
"收藏率": "",
"互动结构_点赞占比": "",
"互动结构_收藏占比": "",
"类型判断": ""
},
"update_rhythm": {
"近30天发作品数": "",
"周更频率": "",
"间隔标准差": "",
"频率分析": ""
},
"viral": {
"爆文率": "",
"爆文数": "",
"标题规律": "",
"爆文放大倍数": "",
"爆文放大倍数判断": ""
},
"action": {
"问题归因1": "",
"问题归因2": "",
"具体动作1": "",
"具体动作2": "",
"具体动作3": ""
},
"works": [
{"title": "", "date": "", "likes": "", "url": ""}
]
}
],
"comparison": {
"核心差异": [
{"账号名": "", "内容": ""}
],
"共同问题": [
""
],
"发展建议": [
{"账号名": "", "内容": ""}
]
}
}
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="no-referrer">
<title>多账号对比诊断报告</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif; background: #FFF5F5; color: #333; line-height: 1.6; }
.container { max-width: 720px; margin: 0 auto; padding: 20px; }
.report-header { background: linear-gradient(135deg, #FF2442, #FF6B81); color: #fff; border-radius: 12px; padding: 28px 24px; text-align: center; margin-bottom: 20px; }
.report-header h1 { font-size: 22px; font-weight: 600; margin-bottom: 6px; }
.report-header .subtitle { font-size: 13px; opacity: 0.85; margin-bottom: 4px; }
.report-header .data-time { font-size: 12px; opacity: 0.7; }
.section { background: #fff; border-radius: 12px; padding: 20px 24px; margin-bottom: 16px; box-shadow: 0 2px 12px rgba(255,36,66,0.06); }
.section-title { font-size: 16px; font-weight: 600; color: #FF2442; margin-bottom: 14px; padding-bottom: 8px; border-bottom: 2px solid #FDE8EC; display: flex; align-items: center; gap: 6px; }
.section-title .emoji { font-size: 18px; }
.compare-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.compare-table th { background: #FFF0F3; color: #FF2442; font-weight: 500; padding: 8px 10px; text-align: center; }
.compare-table th:first-child { text-align: left; width: 90px; }
.compare-table td { padding: 8px 10px; border-bottom: 1px solid #F5F5F5; text-align: center; font-size: 13px; }
.compare-table td:first-child { text-align: left; color: #999; }
.compare-table .best { color: #FF2442; font-weight: 600; }
.compare-table .avatar-cell img { width: 32px; height: 32px; border-radius: 50%; object-fit: cover; }
.account-detail { background: #fff; border-radius: 12px; margin-bottom: 16px; box-shadow: 0 2px 12px rgba(255,36,66,0.06); overflow: hidden; }
.account-detail-header { background: linear-gradient(135deg, #FFF0F3, #FFF5F7); padding: 14px 20px; display: flex; align-items: center; gap: 10px; border-bottom: 2px solid #FDE8EC; }
.account-detail-header img { width: 36px; height: 36px; border-radius: 50%; object-fit: cover; }
.account-detail-header .name { font-size: 15px; font-weight: 600; color: #FF2442; }
.account-detail-header .tag { background: #FF2442; color: #fff; font-size: 11px; padding: 1px 8px; border-radius: 8px; margin-left: 6px; }
.account-detail-header .score { margin-left: auto; font-size: 14px; font-weight: 600; color: #FF2442; }
.account-detail-body { padding: 16px 20px; }
.info-row { display: flex; justify-content: space-between; padding: 6px 0; font-size: 14px; }
.info-row .label { color: #999; }
.info-row .value { color: #333; font-weight: 500; }
.score-bars { display: flex; flex-direction: column; gap: 8px; margin: 10px 0; }
.score-bar-item { display: flex; align-items: center; gap: 8px; }
.score-bar-item .icon { width: 22px; text-align: center; font-size: 13px; }
.score-bar-item .name { width: 56px; font-size: 12px; color: #666; flex-shrink: 0; }
.score-bar-item .bar-bg { flex: 1; height: 6px; background: #FDE8EC; border-radius: 3px; overflow: hidden; }
.score-bar-item .bar-fill { height: 100%; background: linear-gradient(90deg, #FF2442, #FF6B81); border-radius: 3px; }
.score-bar-item .val { width: 46px; font-size: 12px; color: #FF2442; font-weight: 600; text-align: right; flex-shrink: 0; }
.point-list { list-style: none; padding: 0; }
.point-list li { position: relative; padding: 4px 0 4px 16px; font-size: 13px; color: #555; }
.point-list li::before { content: ""; position: absolute; left: 0; top: 11px; width: 5px; height: 5px; border-radius: 50%; background: #FF2442; }
.tag-list { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0; }
.tag { background: #FFF0F3; color: #FF2442; font-size: 11px; padding: 2px 10px; border-radius: 10px; }
.star-row { color: #FAAD14; font-size: 13px; letter-spacing: 2px; margin-bottom: 6px; }
.action-item { background: #FAFAFA; border-left: 3px solid #FF2442; padding: 8px 12px; margin-bottom: 6px; border-radius: 0 6px 6px 0; font-size: 13px; }
.action-item strong { color: #FF2442; }
.problem-item { background: #FFF0F0; border-radius: 6px; padding: 8px 12px; margin: 4px 0; font-size: 13px; color: #FF4D4F; }
.goal-table { width: 100%; border-collapse: collapse; font-size: 12px; margin-top: 8px; }
.goal-table th { background: #FFF0F3; color: #FF2442; font-weight: 500; padding: 6px 10px; text-align: left; }
.goal-table td { padding: 6px 10px; border-bottom: 1px solid #F5F5F5; }
.goal-table .target { color: #FF2442; font-weight: 600; }
.works-table { width: 100%; border-collapse: collapse; font-size: 12px; }
.works-table th { background: #FFF0F3; color: #FF2442; font-weight: 500; padding: 6px 8px; text-align: left; }
.works-table td { padding: 6px 8px; border-bottom: 1px solid #F5F5F5; }
.works-table a { color: #FF2442; text-decoration: none; }
.similar-accounts { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 8px; }
.similar-card { background: #FAFAFA; border-radius: 8px; padding: 10px; width: calc(50% - 5px); display: flex; gap: 8px; align-items: center; }
.similar-card img { width: 36px; height: 36px; border-radius: 50%; object-fit: cover; }
.similar-card .info { flex: 1; min-width: 0; }
.similar-card .name { font-size: 12px; font-weight: 500; color: #333; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.similar-card .fans { font-size: 11px; color: #999; }
.conclusion { background: linear-gradient(135deg, #FFF0F3, #FFF5F7); border-radius: 8px; padding: 14px; margin-bottom: 10px; }
.conclusion .type-tag { display: inline-block; background: #FF2442; color: #fff; font-size: 11px; padding: 1px 8px; border-radius: 8px; margin-bottom: 6px; }
.conclusion p { font-size: 13px; color: #555; line-height: 1.8; }
.summary-module { border-radius: 8px; padding: 14px 16px; margin-bottom: 10px; }
.summary-module:last-child { margin-bottom: 0; }
.summary-module .module-title { font-size: 14px; font-weight: 600; margin-bottom: 8px; display: flex; align-items: center; gap: 6px; }
.summary-module .module-title .icon { font-size: 15px; }
.summary-module p { font-size: 13px; color: #555; line-height: 1.8; margin: 0; }
.summary-diff { background: #FFF7E6; border-left: 3px solid #FAAD14; }
.summary-diff .module-title { color: #D48806; }
.summary-common { background: #F6FFED; border-left: 3px solid #52C41A; }
.summary-common .module-title { color: #389E0D; }
.summary-advice { background: linear-gradient(135deg, #FFF0F3, #FFF5F7); border-left: 3px solid #FF2442; }
.summary-advice .module-title { color: #FF2442; }
.download-tip { background: #FFF0F3; border-radius: 8px; padding: 12px 16px; margin-top: 16px; text-align: center; font-size: 13px; color: #FF2442; }
.footer { text-align: center; padding: 20px; font-size: 12px; color: #ccc; }
.export-btn { position: fixed; top: 16px; right: 16px; z-index: 9999; padding: 8px 18px; background: linear-gradient(135deg, #FF2442, #FF6B81); color: #fff; border: none; border-radius: 8px; font-size: 13px; font-weight: 500; cursor: pointer; letter-spacing: 1px; box-shadow: 0 2px 8px rgba(255,36,66,0.3); }
.export-btn:hover { opacity: 0.9; }
.export-btn:active { opacity: 0.8; }
</style>
</head>
<body>
<div class="container" id="report-content">
<!-- 报告头部 -->
<div class="report-header">
<h1>多账号对比诊断报告</h1>
<div class="subtitle">{{账号数量}}个账号横向对比</div>
<div class="data-time">数据获取时间:{{数据获取时间}}</div>
</div>
<!-- 对比总览 -->
<div class="section">
<div class="section-title"><span class="emoji">📊</span> 对比总览</div>
<table class="compare-table">
<tr><th>指标</th>{{对比表头}}</tr>
{{对比表格行}}
</table>
</div>
<!-- 对比总结 - 按账号展示 -->
<div class="section">
<div class="section-title"><span class="emoji">💡</span> 对比总结</div>
{{对比总结_核心差异}}
{{对比总结_共同问题}}
{{对比总结_发展建议}}
</div>
<!-- 各账号详情 -->
{{各账号详情}}
<!-- 下载提示 -->
<div class="download-tip">
报告已生成为HTML文件,可直接下载保存
</div>
<div class="footer">
报告由AI基于数据和算法生成,仅供参考
</div>
</div>
<!-- 图片导出按钮 -->
<button class="export-btn" id="exportBtn" onclick="exportImage()">导出报告图片</button>
<script src="https://cdn.jsdelivr.net/npm/html2canvas@1.4.1/dist/html2canvas.min.js"></script>
<script>
function exportImage() {
var btn = document.getElementById('exportBtn');
var content = document.getElementById('report-content');
btn.style.display = 'none';
if (typeof html2canvas === 'function') {
html2canvas(content, {
scale: 2,
backgroundColor: '#FFF5F5',
useCORS: true,
logging: false
}).then(function(canvas) {
var link = document.createElement('a');
link.download = (document.title || '多账号对比诊断报告') + '.png';
link.href = canvas.toDataURL('image/png');
link.click();
btn.style.display = 'block';
}).catch(function() {
fallbackPrint();
btn.style.display = 'block';
});
} else {
fallbackPrint();
btn.style.display = 'block';
}
}
function fallbackPrint() {
try { window.print(); } catch(e) { alert('导出失败,请使用浏览器截图功能保存报告图片'); }
}
</script>
</body>
</html>
{
"header": {
"账号名": "",
"账号标识": "",
"数据获取时间": ""
},
"scores": {
"综合评分": "",
"账号定位得分": "",
"账号定位满分": "10",
"账号定位简述原因": "",
"粉丝画像与需求得分": "",
"粉丝画像与需求满分": "15",
"粉丝画像与需求简述原因": "",
"选题体系得分": "",
"选题体系满分": "15",
"选题体系简述原因": "",
"封面风格得分": "",
"封面风格满分": "10",
"封面风格简述原因": "",
"爆文能力得分": "",
"爆文能力满分": "15",
"爆文能力简述原因": "",
"互动规模得分": "",
"互动规模满分": "20",
"互动规模简述原因": "",
"更新产能得分": "",
"更新产能满分": "15",
"更新产能简述原因": ""
},
"conclusion": {
"综合诊断结论内容": "",
"可借鉴的优点": "",
"可成长的地方": ""
},
"positioning": {
"TA是谁": "",
"心智占位": "",
"核心身份": "",
"价值观锚点": "",
"吸引力类型": "",
"赛道痛点": "",
"你的优势": "",
"可强化": "",
"显示可强化": true
},
"fans_insight": {
"粉丝构成": "",
"核心需求反推": [
{"画像特征": "", "推断需求": "", "内容匹配度": ""},
{"画像特征": "", "推断需求": "", "内容匹配度": ""},
{"画像特征": "", "推断需求": "", "内容匹配度": ""}
]
},
"topic_system": {
"选题方向": "",
"表达风格": "",
"叙事手法": "",
"人格一致性": ""
},
"cover_style": {
"视觉特征": "",
"信息层级": "",
"一致性": ""
},
"viral": {
"爆文率": "",
"爆文数": "",
"近7天发作品数": "",
"爆文标准": "",
"标题规律": "",
"爆文内容规律": "",
"情绪特点": "",
"爆文列表": [
{"标题": "", "发布时间": "", "互动数": "", "超标准倍数": ""},
{"标题": "", "发布时间": "", "互动数": "", "超标准倍数": ""}
],
"非爆文平均互动": "",
"爆文放大倍数": "",
"爆文放大倍数判断": ""
},
"interactive_scale": {
"近30天互动量": "",
"总收藏数": "",
"官方等级": "",
"互动率": "",
"收藏率": "",
"互动结构_点赞占比": "",
"互动结构_收藏占比": "",
"类型判断": "",
"水平衡量_互动数等级": "",
"水平衡量_互动数中位数参考": "",
"水平衡量_互动数优秀值参考": "",
"水平衡量_收藏数等级": "",
"水平衡量_收藏数中位数参考": "",
"水平衡量_收藏数优秀值参考": ""
},
"update_rhythm": {
"近30天发作品数": "",
"周更频率": "",
"频率分析": "",
"水平衡量_周更频率等级": "",
"水平衡量_周更频率中位数参考": "",
"水平衡量_周更频率优秀值参考": ""
},
"action": {
"问题归因1": "",
"问题归因2": "",
"具体动作1": "",
"具体动作2": "",
"具体动作3": "",
"反常识发现1": "",
"反常识发现2": ""
},
"works": [
{"title": "", "date": "", "likes": "", "url": ""}
],
"similar_accounts": [
{
"账号名称": "",
"账号链接": "",
"粉丝数": 0,
"总互动": 0,
"推荐理由": "",
"发文特点": "",
"可学之处": ""
}
]
}
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{账号名}}-账号诊断报告</title>
<style>
* { margin:0; padding:0; box-sizing:border-box; }
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: #F5F5F5; color: #333; line-height:1.6; }
.container { max-width:800px; margin:0 auto; padding:16px; }
.card { background:#fff; border-radius:12px; padding:20px; margin-bottom:14px; box-shadow:0 1px 4px rgba(0,0,0,0.06); }
.header { text-align:center; padding:24px 0 12px; }
.header h1 { font-size:22px; font-weight:700; color:#222; }
.header .score { font-size:48px; font-weight:800; color:#FF2442; margin:8px 0; }
.header .score-label { font-size:14px; color:#999; }
.header .data-time { font-size:12px; color:#bbb; margin-top:4px; }
.score-table { width:100%; border-collapse:collapse; margin:12px 0; font-size:13px; }
.score-table th { background:#FFF0F2; color:#FF2442; font-weight:600; padding:8px 10px; text-align:left; border-bottom:1px solid #FFE4E8; }
.score-table td { padding:7px 10px; border-bottom:1px solid #F5F5F5; }
.score-table tr:last-child td { border-bottom:none; }
.score-table .score-val { font-weight:700; color:#FF2442; }
.score-table .max-val { color:#999; font-size:12px; }
.score-table .reason { color:#666; font-size:12px; }
.section-title { font-size:16px; font-weight:700; margin:18px 0 10px; padding-bottom:6px; border-bottom:2px solid #FF2442; color:#222; }
.section-title .icon { margin-right:6px; }
.sub-title { font-size:14px; font-weight:600; color:#444; margin:12px 0 6px; }
.info-row { display:flex; align-items:baseline; margin:4px 0; font-size:13px; }
.info-row .label { color:#999; min-width:90px; flex-shrink:0; }
.info-row .value { color:#333; font-weight:500; }
.benchmark-text { background:#FAFAFA; border-radius:8px; padding:10px 14px; margin:8px 0; font-size:13px; line-height:1.8; }
.benchmark-text .level-icon { font-weight:700; }
.benchmark-table { width:100%; border-collapse:collapse; margin:8px 0; font-size:13px; }
.benchmark-table th { background:#F8F8F8; padding:6px 10px; text-align:left; border:1px solid #EEE; font-weight:600; }
.benchmark-table td { padding:6px 10px; border:1px solid #EEE; }
.tag { display:inline-block; background:#FFF0F2; color:#FF2442; padding:2px 8px; border-radius:4px; font-size:12px; font-weight:500; margin:2px; }
.advantage-box { background:#FFFBF0; border-left:3px solid #FAAD14; padding:10px 14px; margin:8px 0; border-radius:0 8px 8px 0; font-size:13px; }
.advantage-box .point { margin:4px 0; }
.viral-table { width:100%; border-collapse:collapse; margin:8px 0; font-size:13px; }
.viral-table th { background:#FFF7E6; color:#D48806; padding:6px 10px; text-align:left; border:1px solid #FFE7BA; }
.viral-table td { padding:6px 10px; border:1px solid #FFE7BA; }
.viral-warning { color:#FF4D4F; font-weight:600; font-size:13px; }
.needs-table { width:100%; border-collapse:collapse; margin:8px 0; font-size:13px; }
.needs-table th { background:#F0F5FF; color:#2F54EB; padding:6px 10px; text-align:left; border:1px solid #D6E4FF; }
.needs-table td { padding:6px 10px; border:1px solid #D6E4FF; }
.action-box { background:#FFF7F0; border-radius:10px; padding:16px; margin:10px 0; }
.action-box .action-title { font-weight:700; font-size:14px; color:#FF2442; margin-bottom:8px; }
.action-box .problem-item { background:#FFF0F0; border-radius:6px; padding:8px 12px; margin:4px 0; font-size:13px; color:#FF4D4F; }
.action-box .action-step { margin:4px 0; font-size:13px; padding-left:20px; text-indent:-20px; }
.action-box .success-metric { background:#F6FFED; border-radius:6px; padding:8px 12px; margin:8px 0; font-size:13px; }
.action-box .fallback { background:#FFF2F0; border-radius:6px; padding:8px 12px; margin:8px 0; font-size:13px; color:#FF4D4F; }
.discovery-box { background:#F0F5FF; border-left:3px solid #2F54EB; padding:10px 14px; margin:8px 0; border-radius:0 8px 8px 0; font-size:13px; }
.goal-table { width:100%; border-collapse:collapse; margin:8px 0; font-size:13px; }
.goal-table th { background:#F6FFED; color:#52C41A; padding:6px 10px; text-align:left; border:1px solid #D9F7BE; }
.goal-table td { padding:6px 10px; border:1px solid #D9F7BE; }
.goal-table .current { color:#999; }
.goal-table .target { color:#52C41A; font-weight:600; }
.learn-table { width:100%; border-collapse:collapse; margin:8px 0; font-size:13px; }
.learn-table th { background:#F9F0FF; color:#722ED1; padding:6px 10px; text-align:left; border:1px solid #EFDBFF; }
.learn-table td { padding:6px 10px; border:1px solid #EFDBFF; }
.similar-card { display:inline-flex; align-items:center; background:#FAFAFA; border-radius:8px; padding:10px; margin:6px; width:calc(50% - 16px); }
.similar-card img { width:40px; height:40px; border-radius:50%; margin-right:10px; }
.similar-card .info .name { font-weight:600; font-size:13px; }
.similar-card .info .fans { font-size:11px; color:#999; }
.conclusion-text { font-size:13px; line-height:1.8; color:#555; }
.conclusion-text .highlight { color:#FF2442; font-weight:600; }
.section-divider { border:none; border-top:2px dashed #EEE; margin:18px 0; }
.lifecycle-box { background:#F0F5FF; border-radius:8px; padding:12px 16px; margin:8px 0; }
.lifecycle-box .stage { font-weight:700; color:#2F54EB; font-size:14px; }
.lifecycle-box .chain { font-size:12px; color:#666; margin:6px 0; line-height:1.6; }
.lifecycle-box .turning-point { font-size:12px; color:#555; margin:4px 0; }
.pros-cons { margin:10px 0; font-size:13px; }
.pros-cons .item { margin:4px 0; padding:6px 10px; border-radius:6px; }
.pros-cons .pros { background:#F6FFED; }
.pros-cons .cons { background:#FFF2F0; }
.export-btn { position:fixed; top:16px; right:16px; background:linear-gradient(135deg,#FF2442,#FF6B81); color:#fff; border:none; padding:10px 20px; border-radius:8px; font-size:14px; font-weight:600; cursor:pointer; box-shadow:0 2px 8px rgba(255,36,66,0.3); z-index:1000; transition:all 0.3s; }
.export-btn:hover { transform:translateY(-2px); box-shadow:0 4px 12px rgba(255,36,66,0.4); }
.export-btn:disabled { background:#ccc; cursor:not-allowed; transform:none; box-shadow:none; }
</style>
</head>
<body>
<div class="container">
<!-- 头部 -->
<div class="card header">
<h1>{{账号名}}-账号诊断报告</h1>
<div class="score">{{综合评分}}</div>
<div class="score-label">综合评分 / 100</div>
<div class="data-time">数据获取时间:{{数据获取时间}}</div>
</div>
<!-- 评分表 -->
<div class="card">
<table class="score-table">
<tr><th>维度</th><th>得分</th><th>满分</th><th>评分原因简述</th></tr>
<tr><td>账号定位</td><td class="score-val">{{账号定位得分}}</td><td class="max-val">10</td><td class="reason">{{账号定位简述原因}}</td></tr>
<tr><td>粉丝画像与需求</td><td class="score-val">{{粉丝画像与需求得分}}</td><td class="max-val">15</td><td class="reason">{{粉丝画像与需求简述原因}}</td></tr>
<tr><td>选题体系</td><td class="score-val">{{选题体系得分}}</td><td class="max-val">15</td><td class="reason">{{选题体系简述原因}}</td></tr>
<tr><td>封面风格</td><td class="score-val">{{封面风格得分}}</td><td class="max-val">10</td><td class="reason">{{封面风格简述原因}}</td></tr>
<tr><td>爆文能力</td><td class="score-val">{{爆文能力得分}}</td><td class="max-val">15</td><td class="reason">{{爆文能力简述原因}}</td></tr>
<tr><td>互动规模</td><td class="score-val">{{互动规模得分}}</td><td class="max-val">20</td><td class="reason">{{互动规模简述原因}}</td></tr>
<tr><td>更新产能</td><td class="score-val">{{更新产能得分}}</td><td class="max-val">15</td><td class="reason">{{更新产能简述原因}}</td></tr>
</table>
</div>
<!-- 综合诊断结论 -->
<div class="card">
<div class="section-title"><span class="icon">📋</span>综合诊断结论</div>
<div class="conclusion-text">{{综合诊断结论内容}}</div>
<div class="pros-cons">
<div class="item pros"><strong>可借鉴的优点:</strong>{{可借鉴的优点}}</div>
<div class="item cons"><strong>可成长的地方:</strong>{{可成长的地方}}</div>
</div>
</div>
<hr class="section-divider">
<!-- 账号定位 -->
<div class="card">
<div class="section-title"><span class="icon">🎯</span>账号定位 | {{账号定位得分}}分/10</div>
<div class="info-row"><span class="label">TA是谁:</span><span class="value">{{TA是谁}}</span></div>
<div class="info-row"><span class="label">心智占位:</span><span class="value">{{心智占位}}</span></div>
<div class="info-row"><span class="label">核心身份:</span><span class="value">{{核心身份}}</span></div>
<div class="info-row"><span class="label">价值观锚点:</span><span class="value">{{价值观锚点}}</span></div>
<div class="info-row"><span class="label">吸引力类型:</span><span class="value">{{吸引力类型}}</span></div>
<div class="advantage-box">
<div class="sub-title">差异化优势</div>
<div class="point">赛道痛点:{{赛道痛点}}</div>
<div class="point">你的优势:{{你的优势}}</div>
<!-- SECTION_CAN_ENHANCE_START -->
<div class="point" style="color:#FAAD14; font-weight:600;">可强化:"{{可强化}}"</div>
<!-- SECTION_CAN_ENHANCE_END -->
</div>
</div>
<!-- 粉丝画像与需求 -->
<div class="card">
<div class="section-title"><span class="icon">👥</span>粉丝画像与需求 | {{粉丝画像与需求得分}}分/15</div>
<div class="info-row"><span class="label">粉丝构成:</span><span class="value">{{粉丝构成}}</span></div>
<div class="sub-title">核心需求反推</div>
<table class="needs-table">
<tr><th>画像特征</th><th>推断需求</th><th>内容匹配度</th></tr>
<tr><td>{{核心需求反推[0].画像特征}}</td><td>{{核心需求反推[0].推断需求}}</td><td>{{核心需求反推[0].内容匹配度}}</td></tr>
<tr><td>{{核心需求反推[1].画像特征}}</td><td>{{核心需求反推[1].推断需求}}</td><td>{{核心需求反推[1].内容匹配度}}</td></tr>
<tr><td>{{核心需求反推[2].画像特征}}</td><td>{{核心需求反推[2].推断需求}}</td><td>{{核心需求反推[2].内容匹配度}}</td></tr>
</table>
</div>
<!-- 选题体系 -->
<div class="card">
<div class="section-title"><span class="icon">📝</span>选题体系 | {{选题体系得分}}分/15</div>
<div class="info-row"><span class="label">选题方向:</span><span class="value">{{选题方向}}</span></div>
<div class="info-row"><span class="label">表达风格:</span><span class="value">{{表达风格}}</span></div>
<div class="info-row"><span class="label">叙事手法:</span><span class="value">{{叙事手法}}</span></div>
<div class="info-row"><span class="label">人格一致性:</span><span class="value">{{人格一致性}}</span></div>
</div>
<!-- 封面风格 -->
<div class="card">
<div class="section-title"><span class="icon">🎨</span>封面风格 | {{封面风格得分}}分/10</div>
<div class="info-row"><span class="label">视觉特征:</span><span class="value">{{视觉特征}}</span></div>
<div class="info-row"><span class="label">信息层级:</span><span class="value">{{信息层级}}</span></div>
<div class="info-row"><span class="label">一致性:</span><span class="value">{{一致性}}</span></div>
</div>
<!-- 爆文能力 -->
<!-- SECTION_VIRAL_START -->
<div class="card">
<div class="section-title"><span class="icon">🔥</span>爆文能力 | {{爆文能力得分}}分/15</div>
<div class="info-row"><span class="label">爆文率:</span><span class="value">{{爆文率}}%({{爆文数}}篇)</span></div>
<div class="info-row"><span class="label">爆文标准:</span><span class="value">{{账号标识}}互动>{{爆文标准}}</span></div>
<div class="sub-title">爆文特征分析</div>
<div class="info-row"><span class="label">标题:</span><span class="value">{{标题规律}}</span></div>
<div class="info-row"><span class="label">内容:</span><span class="value">{{爆文内容规律}}</span></div>
<div class="info-row"><span class="label">情绪:</span><span class="value">{{情绪特点}}</span></div>
{{爆文列表表格}}
<div class="info-row"><span class="label">非爆文平均互动:</span><span class="value">{{非爆文平均互动}}</span></div>
<div class="info-row"><span class="label">爆文放大倍数:</span><span class="value viral-warning">{{爆文放大倍数}}倍 → {{爆文放大倍数判断}}</span></div>
</div>
<!-- SECTION_VIRAL_END -->
<!-- 互动规模 -->
<div class="card">
<div class="section-title"><span class="icon">💬</span>互动规模 | {{互动规模得分}}分/20</div>
<div class="info-row"><span class="label">近30天互动量:</span><span class="value">{{近30天互动量}} | {{账号标识}} | 官方等级:{{官方等级}}</span></div>
<div class="info-row"><span class="label">互动率:</span><span class="value">{{互动率}}% = 近30天作品互动量 / 粉丝数 * 100%</span></div>
<div class="info-row"><span class="label">收藏率:</span><span class="value">{{收藏率}}% = 总收藏数 / 总点赞数 * 100%</span></div>
<div class="info-row"><span class="label">互动结构:</span><span class="value">点赞{{互动结构_点赞占比}}% | 收藏{{互动结构_收藏占比}}%</span></div>
<div class="info-row"><span class="label">类型判断:</span><span class="value">{{类型判断}}</span></div>
<div class="sub-title">水平衡量</div>
<table class="benchmark-table">
<tr><th>指标</th><th>当前值</th><th>等级</th><th>中位数参考</th><th>优秀值参考</th></tr>
<tr><td>近30天互动量</td><td>{{近30天互动量}}</td><td>{{水平衡量_互动数等级}}</td><td>{{水平衡量_互动数中位数参考}}</td><td>{{水平衡量_互动数优秀值参考}}</td></tr>
<tr><td>总收藏数</td><td>{{总收藏数}}</td><td>{{水平衡量_收藏数等级}}</td><td>{{水平衡量_收藏数中位数参考}}</td><td>{{水平衡量_收藏数优秀值参考}}</td></tr>
</table>
</div>
<!-- 更新产能 -->
<div class="card">
<div class="section-title"><span class="icon">🚀</span>更新产能 | {{更新产能得分}}分/15</div>
<div class="info-row"><span class="label">近30天:</span><span class="value">{{近30天发作品数}}篇 | 周均{{周更频率}}篇</span></div>
<div class="info-row"><span class="label">频率分析:</span><span class="value">{{频率分析}}</span></div>
<div class="sub-title">水平衡量</div>
<table class="benchmark-table">
<tr><th>指标</th><th>当前值</th><th>等级</th><th>中位数参考</th><th>优秀值参考</th></tr>
<tr><td>周均发布</td><td>{{周更频率}}篇</td><td>{{水平衡量_周更频率等级}}</td><td>{{水平衡量_周更频率中位数参考}}篇</td><td>{{水平衡量_周更频率优秀值参考}}篇</td></tr>
</table>
</div>
<hr class="section-divider">
<!-- 行动处方 -->
<div class="card">
<div class="section-title"><span class="icon">🎯</span>行动处方</div>
<div class="action-box">
<div class="action-title">问题归因:</div>
<div class="problem-item">{{问题归因1}}</div>
<div class="problem-item">{{问题归因2}}</div>
<div style="font-size:13px; font-weight:600; margin:6px 0;">具体动作:</div>
<div class="action-step">1. {{具体动作1}}</div>
<div class="action-step">2. {{具体动作2}}</div>
<div class="action-step">3. {{具体动作3}}</div>
</div>
<div class="sub-title">反常识发现</div>
<div class="discovery-box">
<div>1. {{反常识发现1}}</div>
<div>2. {{反常识发现2}}</div>
</div>
</div>
<!-- 相似账号 -->
<!-- SIMILAR_START -->
<div class="card">
<div class="section-title"><span class="icon">🔍</span>相似账号推荐</div>
{{similar_accounts_cards}}
</div>
<!-- SIMILAR_END -->
</div>
<!-- 悬浮导出按钮 -->
<button id="exportBtn" class="export-btn" onclick="exportImage()">导出图片</button>
</div>
<script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></script>
<script>
function exportImage() {
var btn = document.getElementById('exportBtn');
btn.innerText = '生成中...';
btn.disabled = true;
var container = document.querySelector('.container');
html2canvas(container, {
scale: 2,
useCORS: true,
backgroundColor: '#F5F5F5',
scrollX: 0,
scrollY: 0
}).then(function(canvas) {
var link = document.createElement('a');
link.download = '{{账号名}}-账号诊断报告.png';
link.href = canvas.toDataURL('image/png');
link.click();
btn.innerText = '导出图片';
btn.disabled = false;
}).catch(function(err) {
alert('导出失败,请重试');
btn.innerText = '导出图片';
btn.disabled = false;
});
}
</script>
</body>
</html>
Xiaohongshu Account Diagnostics / xiaohongshu-account-analyzer
Introduction
A Xiaohongshu account analyst who speaks with data — helping you uncover your account's real issues.
Core Value
From unclear positioning to monetization struggles, from topic confusion to update bottlenecks — get a data-backed seven-dimension quantitative score (positioning, followers, topics, covers, viral posts, engagement, output capacity), a diagnostic report benchmarked against industry averages, actionable optimization advice, and similar account recommendations.
Who It's For
- 📱 Xiaohongshu creators — Diagnose account health, find issues, and get optimization direction
- 📦 Content operations — Evaluate commercial value and plan account growth
- 🏢 Brands — Assess influencer partnership value and match ad candidates
- 🔍 Competitor analysis — Compare competitor accounts and shape competitive strategy
Core Capabilities
- Seven-dimension scoring: Account positioning, follower profile, topic system, cover style, viral post ability, engagement scale, update output
- Lifecycle analysis: Assess account stage and growth potential from data
- Action prescriptions: Actionable optimization advice for identified issues
- Similar account recommendations: Recommend 2–5 accounts worth learning from
- Multi-account comparison: Side-by-side comparison with core differences and development advice
- HTML visual report: Diagnostic report exportable as image
---
API Key Acquisition & Security
- This skill requires the environment variable:
REDFOX_API_KEY. REDFOX_API_KEYis provided by RedFoxHub (https://redfox.hk).- Register at RedFoxHub to obtain your
REDFOX_API_KEY. - Configure
REDFOX_API_KEYas a device environment variable before using this skill. - Before providing your key, confirm its source, available scope, validity period, and whether reset/revocation is supported.
- Do not hard-code or expose the key in plaintext in code, prompts, logs, or output files.
---
Usage Guide
Quick phrase reference
| Intent | Example phrase | What you get |
|---|---|---|
| Single account diagnosis | "Analyze Xiaohongshu account 26112666886" | Full seven-dimension diagnostic report |
| Multi-account comparison | "Compare and analyze ID1 and ID2" | Report per account + horizontal comparison summary |
| View similar accounts | Reply with number "1" to select | Full diagnosis for the selected account |
| Real-time data backfill | When account not found, reply "push in 30min" | Triggers real-time collection; report pushed in 30 min |
Input format
⚠️ You must provide the Xiaohongshu account ID (digits or alphanumeric), not a Chinese nickname !alt text
| Valid input | Example |
|---|---|
| Numeric ID | 26112666886 |
| Alphanumeric ID | Esther1218, abc123 |
| ❌ Invalid input | Xiaohongshu blogger, username123 |
---
Sample output
Single account diagnostic report
📊 Overall score: 78/100
| Positioning | Followers | Topics | Covers | Viral posts | Engagement | Output |
|---|---|---|---|---|---|---|
| 8/10 | 12/15 | 11/15 | 7/10 | 12/15 | 16/20 | 12/15 |
---
🎯 Account positioning (8/10) Detailed analysis
👥 Follower profile & needs (12/15) Detailed analysis
📝 Topic system (11/15) Detailed analysis
🖼️ Cover style (7/10) Detailed analysis
🔥 Viral post ability (12/15) Detailed analysis
💬 Engagement scale (16/20) Detailed analysis
⚡ Update output (12/15) Detailed analysis
---
🏥 Action prescription
Based on the diagnosis, suggested optimization directions:
xxxxxxxxxxxxxxxxxxxxxxxxxxx
---
📈 Similar account recommendations
1. [Account name](https://www.xiaohongshu.com/user/profile/xxx) | Followers: 82K | Total engagement: 320K | Activity score: 85 | Why recommended: Similar topic direction, worth learning | Posting traits: Stable practical content output, consistent cover style | What to learn: Fixed update rhythm
2. [Account name](https://www.xiaohongshu.com/user/profile/xxx) | Followers: 156K | Total engagement: 580K | Activity score: 88 | Why recommended: High content quality, strong viral rate | Posting traits: In-depth content, high engagement rate | What to learn: Topic depth and engagement hooks
Reply with a number to continue analysis!
---
⚡ HTML report generated — click to download the full report
---
Multi-account comparison report
Compared accounts: Account A vs Account B
📊 Comparison overview
| Dimension | Account A | Account B | Difference analysis |
|---|---|---|---|
| Overall score | 78 | 72 | Account A performs better overall |
| Followers | 123K | 86K | A leads in follower count |
| Viral rate | 18% | 12% | A has stronger viral ability |
| Weekly updates | 3 posts | 2 posts | A updates more consistently |
---
Core differences
- Account A: Clear positioning, stable practical content output, high viral rate
- Account B: Diverse content but unclear positioning, lower follower stickiness
Shared issues
- Cover style consistency needs improvement
- Topic direction could be more focused
Development advice
- Account A: Keep stable updates, try more in-depth content
- Account B: Clarify positioning, improve content verticality
---
Use Cases
| Scenario | Role | Example question | Benefit |
|---|---|---|---|
| Self-diagnosis | Xiaohongshu creator | "Analyze my account sssss123" | Find issues and get optimization advice |
| Competitor analysis | Content ops | "Analyze this competitor account sssss123" | Understand strengths/weaknesses, plan strategy |
| Influencer evaluation | Brand | "Evaluate this creator sssss123 for partnership" | Decide if suitable for ad collaboration |
| Multi-account compare | Ops team | "Compare accounts sssss123 and sssss456" | Side-by-side comparison for growth strategy |
| Health check | Creator | "Check health of account sssss123" | Quick snapshot of account status |
---
Important data notes
- Account data scope: Million-scale Xiaohongshu account library. Occasionally an account may not be found.
- When account data is missing: Prompt user to accept push; triggers real-time collection. Diagnostic report auto-pushed in 30 minutes.
- Analysis data scope: Based on account data and posts from the past 7 days; daily update with yesterday's incremental data.
- Data lag note: Data cutoff is ingestion time, not real-time; engagement may continue growing after ingestion.
小红书账号诊断 / xiaohongshu-account-analyzer
简介
我是深耕小红书账号分析的诊断师,擅长用数据说话,帮你发现账号的真实问题。
核心价值
从定位模糊到变现困难,从选题迷茫到更新瓶颈,给你一份基于数据的七维度量化评分(定位、粉丝、选题、封面、爆文、互动、产能)、并对标行业平均水平的诊断报告和可落地的运营优化建议和相似账号推荐
适用对象
- 📱 小红书博主 — 诊断账号健康度,发现问题找到优化方向
- 📦 内容运营 — 评估商业价值,制定账号发展规划
- 🏢 品牌方 — 评估达人合作价值,匹配投放候选人
- 🔍 竞品分析 — 对比分析竞品账号,制定竞争策略
核心功能
- 七维度评分诊断:账号定位、粉丝画像、选题体系、封面风格、爆文能力、互动规模、更新产能
- 生命周期分析:基于数据评估账号所处阶段和发展潜力
- 行动处方生成:针对问题给出可落地的优化建议
- 相似账号推荐:推荐 2-5 个可学习的相似账号
- 多账号对比分析:横向对比多个账号,输出核心差异和各自发展建议
- HTML 可视化报告:生成可导出图片的诊断报告
---
密钥获取与安全说明
- 本技能需要使用环境变量:
REDFOX_API_KEY。 REDFOX_API_KEY由 红狐 hub (https://redfox.hk)提供。- 请前往 红狐 hub 注册账号,获取
REDFOX_API_KEY。 - 配置设备环境变量
REDFOX_API_KEY后使用本技能。 - 在提供密钥前,请先确认密钥来源、可用范围、有效期及是否支持重置/撤销。
- 禁止在代码、提示词、日志或输出文件中硬编码/明文暴露密钥。
---
使用指南
常用说法速查
| 意图 | 示例话术 | 效果 |
|---|---|---|
| 单账号诊断 | "分析小红书号 26112666886" | 输出完整七维度诊断报告 |
| 多账号对比 | "帮我对比分析 ID1 和 ID2" | 输出各账号报告+横向对比总结 |
| 查看相似账号 | 回复序号"1"选择相似账号 | 对选中账号进行完整诊断 |
| 实时补齐账号数据 | 未搜到账号时,回复"30min 后推送" | 将触发实时采集,30 分钟后自动推送对应账号的诊断报告 |
输入格式说明
⚠️ 必须提供小红书号(纯数字或字母数字组合),不是中文昵称

| 有效输入 | 示例 |
|---|---|
| 纯数字 ID | 26112666886 |
| 字母数字组合 | Esther1218、abc123 |
| ❌ 无效输入 | 小红书博主、用户名123 |
---
输出示例
单账号诊断报告
📊 综合评分:78/100
| 账号定位 | 粉丝画像 | 选题体系 | 封面风格 | 爆文能力 | 互动规模 | 更新产能 |
|---|---|---|---|---|---|---|
| 8/10 | 12/15 | 11/15 | 7/10 | 12/15 | 16/20 | 12/15 |
---
🎯 账号定位(8/10) 详细分析
👥 粉丝画像与需求(12/15) 详细分析
📝 选题体系(11/15) 详细分析
🖼️ 封面风格(7/10) 详细分析
🔥 爆文能力(12/15) 详细分析
💬 互动规模(16/20) 详细分析
⚡ 更新产能(12/15) 详细分析
---
🏥 行动处方
根据诊断结果,建议以下优化方向:
xxxxxxxxxxxxxxxxxxxxxxxxxxx
---
📈 相似账号推荐
1. [账号名](https://www.xiaohongshu.com/user/profile/xxx) | 粉丝:8.2w | 总互动:32w | 活跃评分:85 | 推荐理由:选题方向相似,值得学习 | 发文特点:干货输出稳定,封面风格统一 | 可学之处:固定更新节奏
2. [账号名](https://www.xiaohongshu.com/user/profile/xxx) | 粉丝:15.6w | 总互动:58w | 活跃评分:88 | 推荐理由:内容质量高,爆文率高 | 发文特点:深度内容为主,互动率高 | 可学之处:选题深度和互动引导
回复序号可继续分析!
---
⚡ HTML 报告已生成,点击下载查看完整报告
---
多账号对比报告
对比账号:账号 A vs 账号 B
📊 对比总览
| 维度 | 账号 A | 账号 B | 差异分析 |
|---|---|---|---|
| 综合评分 | 78 分 | 72 分 | 账号 A 综合表现更优 |
| 粉丝数 | 12.3w | 8.6w | A 粉丝量领先 |
| 爆文率 | 18% | 12% | A 爆文能力更强 |
| 周更频率 | 3 篇 | 2 篇 | A 更新更稳定 |
---
核心差异
- 账号 A:定位清晰,干货输出稳定,爆文率高
- 账号 B:内容多元但定位模糊,粉丝粘性较低
共同问题
- 封面风格一致性有待提升
- 选题方向可以更加聚焦
发展建议
- 账号 A:继续保持稳定更新,尝试更多深度内容
- 账号 B:明确定位方向,提升内容垂直度
---
使用场景
| 场景 | 角色 | 示例问法 | 收益 |
|---|---|---|---|
| 账号自诊断 | 小红书博主 | "帮我分析一下我的账号 sssss123" | 发现问题,获得优化建议 |
| 竞品账号分析 | 内容运营 | "分析一下这个竞品账号 sssss123" | 了解竞品优劣势,制定竞争策略 |
| 达人投放评估 | 品牌方 | "评估一下这个达人 sssss123 的价值" | 判断是否适合投放合作 |
| 多账号对比 | 运营团队 | "对比一下 sssss123 和 sssss456 两个账号" | 横向对比,制定发展策略 |
| 账号健康度检测 | 自媒体人 | "检测一下账号 sssss123 健康度" | 快速了解账号现状 |
---
重要数据说明
- 账号数据范围:百万级小红书账号库。少概率存在无账号数据的情况。
- 无账号数据的处理:搜索时提示用户接收推送,会触发实时采集。30 分钟后自动推送对应账号的诊断报告。
- 分析数据范围:基于账号数据和近 7 天的作品数据进行分析,每日更新昨日增量数据。
- 数据差距说明:数据截止为入库时间,不是实时数据,入库后互动数据可能持续增长
API接口与评分逻辑
接口请求
请求方式:POST 请求地址:https://redfox.hk/story/api/xhsUser/query
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| userIds | Array<String> | 否 | 小红书账号ID列表,与nicknames至少传一个 |
| nicknames | Array<String> | 否 | 小红书账号昵称列表,与userIds至少传一个 |
请求体示例:
{
"userIds": ["26112666886"],
"nicknames": ["小美的生活"]
}接口响应字段
账号数据
| 字段 | 说明 | 示例 |
|---|---|---|
| nickname | 账号名 | "小小希" |
| desc | 简介 | "准八 丨26届生地会考 丨27届中考定期搞福利🥺谢谢支持" |
| redId | 账号ID | "26112666886" |
| fans | 粉丝数 | 4431 |
| level | 官方等级(可为null) | 7 或 null |
| userAttribute | 账号标识 | "素人"/"尾部kol"/"腰部kol"/"头部kol"/"企业"/"品牌" |
| avatar | 头像URL | "https://..." |
| totalWork | 作品总数 | 127 |
| liked | 总点赞数 | 217035 |
| collected | 总收藏数 | 24745 |
| noteCountThirty | 近30天发作品数 | 70 |
| interactiveCountThirty | 近30天作品互动量 | 133547 |
| recentIndex | 周指数 | 827.32 |
| topProvinces | 粉丝省份偏向 | "广东" |
| topAges | 粉丝年龄偏向 | "<18" |
| fansGender | 粉丝性别偏向 | {"male_ratio": "0.13", "female_ratio": "0.87"} |
| gmtCreate | 数据获取时间 | "2025-04-22 10:30:00" |
作品数据(works数组,最多5篇)
| 字段 | 说明 | 示例 |
|---|---|---|
| id | 作品ID | "69e478b70000000021007e7b" |
| title | 作品标题 | "姚译添疯了" |
| createTime | 发布时间(毫秒时间戳) | "1776580791000" |
| likedCount | 点赞数 | 22 |
| collectedCount | 收藏数 | 0 |
| workUrl | 作品链接 | "https://www.xiaohongshu.com/..." |
相似账号数据(similarAccounts数组)
| 字段 | 兼容字段 | 说明 |
|---|---|---|
| redId | accountId, userId | 账号ID |
| nickname | accountName, name | 账号名称 |
| fans | followerCount, fansCount | 粉丝数 |
| liked | totalLikeCount | 总点赞数 |
| interactiveCountThirty | interactiveCountThirty | 总互动数 |
评分计算逻辑
综合评分(100分) = 账号定位(10) + 粉丝画像与需求(15) + 选题体系(15) + 封面风格(10) + 爆文能力(15) + 互动规模(20) + 更新产能(15)
1. 账号定位(10分)
粉丝数>5000的账号(以夸赞为主):
- 基础分6分(满分10)
- 有简介+1分,简介清晰+1分,内容垂直+1分,有差异化定位+1分
- 评分原则:肯定账号已有成就,在差异化优势中指出可优化的方向
粉丝数≤5000的账号:
- 基础分3分(满分10)
- 有简介+1分,简介清晰+2分,内容垂直+2分,有差异化定位+2分
2. 粉丝画像与需求(15分)
| 评估项 | 得分标准 |
|---|---|
| 基础分 | 5分 |
| 收藏率评估 | >30%得3分/>20%得2分/>10%得1分 |
| 粉丝画像集中度 | >70%或<30%得3分/>60%或<40%得2分 |
| 粉丝数规模 | ≥10w得4分/≥5w得3分/≥1w得2分/≥5000得1分 |
3. 选题体系(15分)
核心逻辑:选题方向单一/聚焦是加分项,专注某一赛道深耕是好事
| 评估项 | 得分标准 |
|---|---|
| 基础分 | 5分 |
| 选题方向聚焦度 | 高度聚焦(1-2方向)+4分/较为聚焦(3方向)+3分/有一定聚焦(4方向)+2分 |
| 标签统一度 | 固定栏目≤3个+3分/≤5个+2分/其他+1分 |
| 人格一致性 | 统一+3分/一般+1分/混乱0分 |
4. 封面风格(10分)
粉丝数>5000的账号(以夸赞为主):
- 基础分6分(满分10)
- 视觉特征明显+1分,信息层级清晰+1分,风格一致+2分
- 评分原则:肯定账号视觉呈现,在分析中给出优化建议
粉丝数≤5000的账号:
- 基础分3分(满分10)
- 视觉特征明显+2分,信息层级清晰+2分,风格一致+3分
5. 爆文能力(15分)
爆文标准(基于互动数=点赞+收藏):
| 账号标识 | 爆文标准(互动数) |
|---|---|
| 素人 | >1000 |
| 尾部KOL | >5000 |
| 腰部KOL | >10000 |
| 头部KOL | >20000 |
| 明星 | >20000 |
| 品牌/企业 | >1000 |
评分规则:
- 爆文率(10分):
- 爆文率>=30%:10分
- 爆文率>=20%:8分
- 爆文率>=10%:6分
- 爆文率>=5%:4分
- 爆文率>0%:2分
- 无爆文:1分
- 近30天互动表现(5分):基于互动量/粉丝数比值评估
- 平均互动>爆文标准:5分
- 平均互动>爆文标准50%:3分
- 平均互动>爆文标准20%:2分
- 平均互动<爆文标准20%:1分
6. 互动规模(20分)
互动率 = 近30天作品互动量(点赞+收藏)/ 粉丝数 × 100% 收藏率 = 总收藏数 / 总点赞数 × 100%
评分规则:
- 互动量维度(10分):基于近30天作品互动量
- >优秀值:10分
- >中位数:6分
- 其他:1分
- 收藏量维度(10分):基于总收藏数
- >优秀值:10分
- >中位数:6分
- 其他:1分
水平衡量:对比接口返回的中位数参考和优秀值参考,等级判断为优秀/良好/待提升
7. 更新产能(15分)
| 评估项 | 得分标准 |
|---|---|
| 基础分 | 5分 |
| 周更频率 | ≥5篇得5分/3-4篇得4分/2篇得2分/1篇得1分 |
| 间隔标准差 | <0.5天得5分/0.5-1天得3分/1-2天得1分/>2天得0分 |
评分保底规则
- 粉丝数>5000的账号,评分必须>60分
- 当粉丝>5000且总分<61时,自动提升各维度最低分:
- 账号定位至少5分(满分10)
- 粉丝画像与需求至少8分(满分15)
- 选题体系至少8分(满分15)
- 封面风格至少5分(满分10)
- 爆文能力至少8分(满分15)
- 互动规模至少10分(满分20)
- 更新产能至少8分(满分15)
注意事项
- 脚本根据账号标识动态计算爆文标准
- 爆文判断基于互动数(点赞+收藏),而非仅点赞数
- 作品数据取近30天内的作品
- level、avatar、部分works字段值可为null,脚本已做兼容处理
中位值和优秀值参考数据
说明:以下数据用于账号分析时的水平衡量对比,您可以直接编辑此文件修改参考值。
数据说明
每个粉丝数区间包含两组数据:
- 中位数参考:该粉丝区间的平均水平
- 优秀值参考:该粉丝区间的优秀水平(前1000名)
---
一、0-5k粉丝(素人)
| 统计指标 | 中位数参考 | 优秀值参考 |
|---|---|---|
| 作品总数 | 16.73 | 23.00 |
| 总点赞数 | 362.61 | 31087.00 |
| 总收藏数 | 117.75 | 7368.00 |
| 近30天发作品数 | 3.00 | 12.00 |
| 近30天作品互动量 | 71.65 | 38878.00 |
---
二、5k-5w粉丝(尾部KOL)
| 统计指标 | 中位数参考 | 优秀值参考 |
|---|---|---|
| 作品总数 | 120.30 | 136.50 |
| 总点赞数 | 41604.23 | 329082.00 |
| 总收藏数 | 16201.18 | 82391.50 |
| 近30天发作品数 | 6.00 | 24.00 |
| 近30天作品互动量 | 483.50 | 124263.00 |
---
三、5w-50w粉丝(腰部KOL)
| 统计指标 | 中位数参考 | 优秀值参考 |
|---|---|---|
| 作品总数 | 245.56 | 284.50 |
| 总点赞数 | 398278.10 | 2381874.00 |
| 总收藏数 | 148994.22 | 481938.50 |
| 近30天发作品数 | 7.00 | 19.00 |
| 近30天作品互动量 | 3797.60 | 254721.50 |
---
四、大于50w粉丝(头部KOL)
| 统计指标 | 中位数参考 | 优秀值参考 |
|---|---|---|
| 作品总数 | 428.73 | 485.50 |
| 总点赞数 | 4371187.20 | 7763569.00 |
| 总收藏数 | 1295796.82 | 1654083.00 |
| 近30天发作品数 | 7.00 | 12.00 |
| 近30天作品互动量 | 33700.54 | 251250.50 |
---
编辑说明
1. 直接修改上表中的数值即可 2. 修改后需要同步更新脚本中的 BENCHMARK_DATA 常量 3. 数值保留2位小数即可
字段说明
| 字段 | 含义 |
|---|---|
| 作品总数 | 账号累计发布的作品数量 |
| 总点赞数 | 所有作品获得的点赞总数 |
| 总收藏数 | 所有作品获得的收藏总数 |
| 近30天发作品数 | 近30天内发布的作品数量 |
| 近30天作品互动量 | 近30天作品的点赞+收藏总和 |
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
《{{账号名}}-账号诊断报告》
🏆 综合评分:{{综合评分}}/100
【各维度评分】
| 维度 | 得分 | 满分 | 评分原因简述 |
|---|---|---|---|
| 账号定位 | {{账号定位得分}} | 10 | {{账号定位简述原因}} |
| 粉丝画像与需求 | {{粉丝画像与需求得分}} | 15 | {{粉丝画像与需求简述原因}} |
| 选题体系 | {{选题体系得分}} | 15 | {{选题体系简述原因}} |
| 封面风格 | {{封面风格得分}} | 10 | {{封面风格简述原因}} |
| 爆文能力 | {{爆文能力得分}} | 15 | {{爆文能力简述原因}} |
| 互动规模 | {{互动规模得分}} | 20 | {{互动规模简述原因}} |
| 更新产能 | {{更新产能得分}} | 15 | {{更新产能简述原因}} |
【综合诊断结论】
{{综合诊断结论内容}}
可借鉴的优点:{{可借鉴的优点}}
可成长的地方:{{可成长的地方}}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯【账号定位 | {{账号定位得分}}分/10】
▎TA是谁:{{TA是谁}}
▎心智占位:{{心智占位}}
▎价值观锚点:{{价值观锚点}}
▎吸引力类型:{{吸引力类型}}
▎差异化优势:
- 赛道痛点:{{赛道痛点}}
- 你的优势:{{你的优势}}
- → 可强化:"{{可强化}}"(仅当账号定位得分<8分时展示)
👥【粉丝画像与需求 | {{粉丝画像与需求得分}}分/15】
粉丝构成:{{粉丝数}}粉丝 | {{粉丝构成}}
核心需求反推
| 画像特征 | 推断需求 | 内容匹配度 |
|---|---|---|
| {{核心需求反推[0].画像特征}} | {{核心需求反推[0].推断需求}} | {{核心需求反推[0].内容匹配度}} |
| {{核心需求反推[1].画像特征}} | {{核心需求反推[1].推断需求}} | {{核心需求反推[1].内容匹配度}} |
| {{核心需求反推[2].画像特征}} | {{核心需求反推[2].推断需求}} | {{核心需求反推[2].内容匹配度}} |
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📝【选题体系 | {{选题体系得分}}分/15】
▎选题方向:{{选题方向}}。例如作品《{{选题案例1_标题}}》(互动{{选题案例1_互动数}}),{{选题案例1_分析}}
▎表达风格:{{表达风格}}。例如作品《{{选题案例2_标题}}》(互动{{选题案例2_互动数}}),{{选题案例2_分析}}
▎叙事手法:{{叙事手法}}
▎人格一致性:{{人格一致性}}
📝【封面风格 | {{封面风格得分}}分/10】
▎视觉特征:{{视觉特征}}。例如作品《{{封面案例1_标题}}》(互动{{封面案例1_互动数}}),{{封面案例1_分析}}
▎信息层级:{{信息层级}}。例如作品《{{封面案例2_标题}}》(互动{{封面案例2_互动数}}),{{封面案例2_分析}}
▎一致性:{{一致性}}
🔥【爆文能力 | {{爆文能力得分}}分/15】
爆文率:{{爆文率}}%({{爆文数}}/{{近7天发作品数}}篇)
爆文标准:{{账号标识}}互动>{{爆文标准}}
近7天平均互动:{{近7天平均互动}}
爆文特征分析:
- 标题:{{标题规律}}
- 内容:{{爆文内容规律}}
- 情绪:{{情绪特点}}
| 爆文标题 | 发布时间 | 互动数 | 超标准倍数 |
|---|---|---|---|
| {{爆文列表[0].标题}} | {{爆文列表[0].发布时间}} | {{爆文列表[0].互动数}} | {{爆文列表[0].超标准倍数}} |
| {{爆文列表[1].标题}} | {{爆文列表[1].发布时间}} | {{爆文列表[1].互动数}} | {{爆文列表[1].超标准倍数}} |
💬【互动规模 | {{互动规模得分}}分/20】
近30天互动量:{{近30天互动量}} | {{账号标识}} | 官方等级:{{官方等级}}
互动率:{{互动率}}% = 近30天作品互动量 / 粉丝数 * 100%
收藏率:{{收藏率}}% = 总收藏数 / 总点赞数 * 100%
▎互动结构:点赞{{互动结构_点赞占比}}% | 收藏{{互动结构_收藏占比}}%
▎类型判断:{{类型判断}}
📊 水平衡量
| 指标 | 当前值 | 等级 | 中位数参考 | 优秀值参考 |
|---|---|---|---|---|
| 近30天互动量 | {{近30天互动量}} | {{水平衡量_互动数等级}} | {{水平衡量_互动数中位数参考}} | {{水平衡量_互动数优秀值参考}} |
| 总收藏数 | {{总收藏数}} | {{水平衡量_收藏数等级}} | {{水平衡量_收藏数中位数参考}} | {{水平衡量_收藏数优秀值参考}} |
🚀【更新产能 | {{更新产能得分}}分/15】
近30天:{{近30天发作品数}}篇 | 周均{{周更频率}}篇
▎频率分析:{{频率分析}}
▎发布时间分析:{{发布时间分析}}
📊 水平衡量
| 指标 | 当前值 | 等级 | 中位数参考 | 优秀值参考 |
|---|---|---|---|---|
| 周均发布 | {{周更频率}}篇 | {{水平衡量_周更频率等级}} | {{水平衡量_周更频率中位数参考}}篇 | {{水平衡量_周更频率优秀值参考}}篇 |
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯【行动处方】
问题归因:
- {{问题归因1}}
- {{问题归因2}}
具体动作: 1. {{具体动作1}} 2. {{具体动作2}} 3. {{具体动作3}}
反常识发现
1. {{反常识发现1}} 2. {{反常识发现2}}
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔍【相似账号推荐】
1. {{相似账号1名称}} | 粉丝:{{相似账号1粉丝}} | 总互动:{{相似账号1互动}} | 活跃评分:{{相似账号1活跃}} ✅ 推荐理由:{{相似账号1推荐理由}} 📝 发文特点:{{相似账号1发文特点}} 💡 可学之处:{{相似账号1可学}}
2. {{相似账号2名称}} | 粉丝:{{相似账号2粉丝}} | 总互动:{{相似账号2互动}} | 活跃评分:{{相似账号2活跃}} ✅ 推荐理由:{{相似账号2推荐理由}} 📝 发文特点:{{相似账号2发文特点}} 💡 可学之处:{{相似账号2可学}}
3. {{相似账号3名称}} | 粉丝:{{相似账号3粉丝}} | 总互动:{{相似账号3互动}} | 活跃评分:{{相似账号3活跃}} ✅ 推荐理由:{{相似账号3推荐理由}} 📝 发文特点:{{相似账号3发文特点}} 💡 可学之处:{{相似账号3可学}}
回复序号可继续分析!
通用反空话校验规则(前置)
生成的内容如果出现以下无意义表述直接打回重写:
- 禁止出现:「要做好定位」「要提升内容质量」「要多互动」「要坚持更新」这类没有具体动作、没有数据支撑的表述
- 所有结论/建议必须同时满足3个要求:①有具体数据支撑(自己的历史数据)②有明确可落地的动作 ③有可验证的效果判断标准
各模块内容填充硬约束
1. 综合诊断结论模块
| 分档 | 强制输出要素 |
|---|---|
| >=80分 | 必须列>=2个已验证可复用的具体动作,每个动作绑定数据 |
| <80分 | 必须先点明薄弱项对应的具体数据问题,再给对应建议 |
综合诊断结论格式:
- 一段话概括账号定位、目标用户、核心吸引力、当前阶段
- 可借鉴的优点
- 可成长的地方
2. 账号定位模块
- TA是谁:基于简介+内容+WebSearch的身份判定,一句话概括
- 心智占位:TA在用户心智里占了什么位置?
- 价值观锚点:反复出现的价值判断
- 吸引力类型:从7种类型中选择最匹配的(可组合)
- 差异化优势:赛道痛点+你的优势+可强化方向
3. 粉丝画像与需求模块
- 粉丝构成:格式「粉丝数X | 女性XX% | XX-XX岁占比最高 | XX/XX/XX TOP3」
- 核心需求反推:3行表格(画像特征/推断需求/内容匹配度)
4. 选题体系模块
- 选题方向:基于标题聚类的3-5个方向,结合案例说明
- 表达风格:理性分析/情绪宣泄/故事讲述/清单体/对话体,结合案例说明
- 叙事手法:悬念前置/对比反转/痛点共鸣/身份代入,结合案例说明
- 人格一致性:统一度判断
5. 封面风格模块
- 视觉特征:实拍/插画/文字图/拼图/统一色调,结合案例说明
- 信息层级:标题位置/字体风格/视觉焦点,结合案例说明
- 一致性:高/中/低
6. 爆文能力模块
- 爆文列表:标题/发布时间/互动数/超标准倍数 表格
- 近7天平均互动:评估内容整体传播效果
- 爆文特征分析:标题规律、内容规律、情绪特点
7. 互动规模模块(合并原互动效率)
- 互动率:近30天作品互动量 / 粉丝数
- 收藏率:总收藏数 / 总点赞数
- 互动结构:点赞/收藏占比(接口无分享字段)
- 类型判断:情绪共鸣型/实用价值型
- 水平衡量:互动率+收藏率对比中位数参考/优秀值参考
8. 更新产能模块
- 频率分析:日更/周更节奏判断
- 发布时间分析:集中在什么时段
- 双更日分析:是否存在双更日及效果
- 水平衡量:表格格式(周均发布+间隔标准差)
9. 行动处方模块
- 问题归因:维度-指标(当前值)格式
- 具体动作:3条可量化、有节点、有标准的动作
核心字段说明
| 字段 | 数据来源 | 说明 |
|---|---|---|
| 账号名 | 接口raw_data.nickname | 账号昵称 |
| 账号标识 | 接口raw_data.userAttribute映射 | 映射后的账号标识 |
| 综合评分 | 脚本计算 | 七维度总分(满分100) |
| 各维度满分 | 账号定位10/粉丝画像15/选题体系15/封面风格10/爆文能力15/互动规模20/更新产能15 | 合计100分 |
| 近7天平均互动 | 脚本计算 | 近7天作品平均互动数 |
| 间隔标准差 | 脚本计算 | 发布间隔的稳定性指标 |
指标计算逻辑说明
| 指标 | 计算公式 | 数据来源 |
|---|---|---|
| 互动率 | 近30天作品互动量 / 粉丝数 * 100% | interactiveCountThirty / fans * 100 |
| 收藏率 | 总收藏数 / 总点赞数 * 100% | collected / liked * 100 |
| 爆文率 | 爆文数 / 近7天发作品数 * 100% | viral_count / len(works) * 100 |
| 爆文标准 | 素人1000/尾部KOL 5000/腰部KOL 10000/头部KOL 20000/明星 20000 | 根据账号标识动态计算 |
| 近7天平均互动 | 近7天作品互动数之和 / 近7天作品数 | 基于作品数据计算 |
| 间隔标准差 | 发布间隔的标准差 | 基于作品时间序列计算 |
多账号对比总结
核心差异、共同问题和发展建议均按账号展示:
"comparison": {
"核心差异": [
{"账号名": "账号A", "内容": "该账号的核心差异描述"},
{"账号名": "账号B", "内容": "该账号的核心差异描述"}
],
"共同问题": [
"共同问题1",
"共同问题2"
],
"发展建议": [
{"账号名": "账号A", "内容": "该账号的发展建议"},
{"账号名": "账号B", "内容": "该账号的发展建议"}
]
}小红书账号分析工作流指南
目录
1. 整体流程 2. 评分体系 3. 数据获取与脚本调用 4. 各模块分析指南 5. 水平衡量基准数据 6. 多账号对比
整体流程
步骤1:获取小红书号
- 用户提供小红书号(小红书名称下方的小红书号,非昵称)
- 小红书号获取方式:打开小红书App → 进入个人主页 → 名称下方的"小红书号:xxxxx"
- 不需要输入昵称,用小红书号直接查询
⚠️ 输入识别规则: 当用户输入的内容符合以下任一格式时,应识别为小红书号并直接调用接口查询:
- 纯数字:如
26112666886 - 英文字母+数字组合:如
Esther1218、abc123 - 数字+英文字母组合:如
123abc - 其他字母数字混合格式
错误识别:如果用户输入的是中文昵称(如"我不想再上班"),提示用户提供小红书号而非昵称。
标准开场白(首次交互时输出): "你好!我是小红书账号诊断师,可以帮你深度拆解小红书账号的运营数据和商业价值。 请提供你想分析的小红书号(在小红书App个人主页,名称下方的一串字符,如纯数字或字母数字组合,非昵称)。"
步骤2:查询数据
python scripts/xiaohongshu_analyzer.py query --user_ids "账号ID"- 脚本自动保存
output/raw_data.json - 输出结构化JSON结果,包含评分和指标
⚠️ 账号数据为空处理(未查询到账号):
- 如果脚本返回
status: "error"且提示未查询到账号,说明该账号不在数据库中 - 立即停止后续步骤,执行以下处理:
1. 调用数据同步接口:
python scripts/xiaohongshu_analyzer.py sync_notes --red_ids "用户输入的账号ID"- 同步接口:
https://redfox.hk/story/api/xhsUser/syncUserNotes,参数redId从用户输入中获取
2. 输出提示:
非常抱歉,未查询到该账号。请检查账号id是否有误,若输入准确,可能当前账号粉丝低于1000或者近期发文数据未达到收录标准。
我们将为你实时去采集数据,30min后向您推送新的诊断报告,请问是否接收?
1. 接收推送
2. 暂不接收3. 用户输入编号"1"或回复"接收"后,执行订阅流程: a. 【必须】创建日程任务(使用calendar_create工具):
- summary: 推送xxx账号诊断报告
- dtstart: 当前时间+30分钟(格式YYYYMMDDHHMM)
- description: 重新查询账号数据并推送诊断报告(python scripts/xiaohongshu_analyzer.py query --user_ids <用户输入的账号ID>)
b. 输出提示:「订阅成功!系统将在30分钟后自动向您推送该账号的诊断报告,请耐心等待」 4. 用户输入编号"2"或回复"暂不接收",结束本次分析
⚠️ 作品数据为空处理(直接进入订阅流程):
- 如果查询到账号但
works为空数组,脚本返回query_type: "need_sync"和need_sync字段 - 立即停止后续步骤,不输出分析报告,直接进入订阅流程:
1. 输出提示(xxx为账号昵称):
为您获取作品中,30分钟后会更新数据后可向您推荐,请问是否订阅"xxx"账号?
1. 订阅账号xxx
2. 暂不订阅2. 用户输入编号"1"或回复"订阅"后,执行订阅流程: a. 【必须】创建日程任务(使用calendar_create工具):
- summary: 推送xxx账号诊断报告
- dtstart: 当前时间+30分钟(格式YYYYMMDDHHMM)
- description: 重新查询账号数据并推送诊断报告(python scripts/xiaohongshu_analyzer.py query --user_ids <redId>)
b. 日程创建成功后,调用同步接口:
python scripts/xiaohongshu_analyzer.py sync_notes --red_ids "redId"c. 同步接口:https://redfox.hk/story/api/xhsUser/syncUserNotes,参数 redId 从账号信息中获取 d. 输出提示:「订阅成功!系统将在30分钟后自动向您推送"xxx"账号的诊断报告,请耐心等待」 3. 用户输入编号"2"或回复"仍然执行分析":
- 继续执行分析流程
- 在报告开头提示:「该账号暂未获取到近7天作品」
- 输出完整的分析报告(爆文能力、更新产能等模块显示为"暂无作品数据")
4. 用户输入编号"3"或回复"暂不订阅",结束本次分析
订阅推送机制(智能体执行):
- 使用calendar_create工具创建日程任务
- 日程触发时间:当前时间 + 30分钟(格式YYYYMMDDHHMM)
- 日程触发后无论是否有作品数据都执行分析流程:
1. 重新查询账号数据:python scripts/xiaohongshu_analyzer.py query --user_ids <redId> 2. 如果works为空:
- 在报告开头提示:「该账号已重新同步,但暂未获取到近7天作品数据」
- 继续执行完整的分析流程,输出诊断报告
3. 如果works有数据:
- 正常输出完整的诊断报告
步骤3:WebSearch背景信息补全
获取博主昵称后执行: 1. WebSearch 搜索「小红书 + 昵称」补全背景信息 2. WebSearch 搜索「昵称 + 采访/报道」寻找媒体报道 3. WebSearch 搜索抖音/B站/公众号等跨平台布局
步骤4:在对话中输出诊断报告
基于脚本输出的数据和WebSearch结果,直接在对话中输出七维度诊断报告。
- 格式要求:严格按照
references/report_template.md的格式输出 - 输出位置:直接在对话中输出,不创建markdown文件
步骤5:展示相似账号
诊断报告输出完毕后,直接展示相似账号(无需询问):
- 从脚本返回数据的
similar_accounts字段提取2-5个相似账号 - 按格式展示:账号名称(超链接)+ 粉丝数 + 总互动 + 推荐理由 + 发文特点 + 可学之处
- 最后输出"回复序号可继续分析!"
步骤6:生成HTML报告(在相似账号推荐结束后执行)
⚠️ 注意:此步骤必须在相似账号推荐输出"回复序号可继续分析!"后立即执行,不要阻塞分析报告输出。
⚠️ 核心原则:HTML只是将对话中的分析报告进行更美观的输出,必须与对话输出的内容完全一致,不能有任何差异。
在相似账号推荐输出完毕后,立即执行HTML生成: 1. 保存脚本输出数据:脚本query命令输出的JSON数据保存到 output/report_data.json
- 重要:直接使用脚本输出的数据作为基础,不要手动创建空数据
- 脚本已计算好所有数值字段(评分、互动量、收藏数、水平衡量等)
2. 填充AI分析内容:在脚本输出的数据基础上,填充以下字段(与对话输出一致):
positioning:TA是谁、心智占位、价值观锚点、吸引力类型、赛道痛点、你的优势、可强化fans_profile:核心需求反推、付费意愿评估内容topic_system:选题方向、表达风格、叙事手法、人格一致性、选题分析cover_style:视觉特征、信息层级、一致性、封面分析viral_ability:爆文特征分析、爆文标题分析interactive_scale:类型判断update_rhythm:频率分析similar_accounts:相似账号数据综合诊断结论内容:完整诊断结论action_prescription:行动处方内容
3. 调用脚本生成HTML:
python scripts/xiaohongshu-account-analyzer.py generate_html4. 直接展示HTML:读取生成的HTML文件,直接在对话中展示HTML内容
⚠️ 数据一致性要求(必须严格遵守): 1. 对话输出 = HTML输出:两者必须使用完全相同的数据,HTML中的每个字段值必须与对话输出的内容完全一致 2. 内容一致性:评分、分析文字、数据等所有内容必须与对话输出完全相同 3. 所有字段必填:不能留空(空值填空字符串"",数值填0) 4. 数值不可修改:评分、指标等数值字段直接使用脚本输出 5. 文本由AI填充:TA是谁、心智占位等文本字段由AI基于数据分析填充,但必须与对话输出一致
数值字段格式要求:
收藏率、爆文率、互动率填纯数字,不带%符号近7天发作品数、爆文数、周更频率填纯数字,不带单位- 空值处理:none/null/None/空字符串 必须替换为数字0或空字符串""
生成HTML命令:
python scripts/xiaohongshu_analyzer.py generate_htmlHTML生成流程: 1. 脚本读取 output/report_data.json 2. 使用 _build_replacements 函数将嵌套结构扁平化
- 完整路径:
{{header.账号名}}→ 值 - 短路径:
{{账号名}}→ 值(两种格式都支持) - 数组索引:
{{核心需求反推[0].画像特征}}→ 值
3. 替换HTML模板中的所有 {{xxx}} 占位符 4. 输出HTML文件到 output/账号名_诊断报告.html
⚠️ 如果HTML中出现 `{{xxx}}` 未替换字段,说明:
- report_data.json中缺少该字段
- 字段名与模板不匹配
- 该字段值为空未填充
步骤7:用户回复序号继续分析相似账号
当用户回复序号选择某个相似账号时: 1. 从 similar_accounts 数据中获取该账号的 userId 2. 调用脚本查询该账号详情:
python scripts/xiaohongshu_analyzer.py query --user_ids "userId"3. 执行完整分析流程(同步骤3-6):
- 步骤3:WebSearch补全背景信息
- 步骤4:在对话中输出完整诊断报告
- 步骤5:直接展示相似账号
- 步骤6:生成HTML报告并展示
4. 注意:必须在对话中输出完整诊断报告,不能只输出HTML
评分体系
七维度评分(满分100分)
| 维度 | 满分 | 核心评估点 |
|---|---|---|
| 账号定位 | 10 | 简介完整度、心智占位清晰度、内容垂直度 |
| 粉丝画像与需求 | 15 | 画像集中度、收藏率、粉丝数规模、需求匹配度 |
| 选题体系 | 15 | 选题方向聚焦度、爆文公式有效性、固定栏目 |
| 封面风格 | 10 | 视觉特征统一性、信息层级、一致性 |
| 爆文能力 | 15 | 爆文数量、近7天作品互动数 |
| 互动规模 | 20 | 互动总量、互动率、收藏率、互动结构 |
| 更新产能 | 15 | 周更频率、间隔稳定性、发布时间优化 |
评分计算方式
- 脚本自动计算各维度得分
- 综合评分 = 七维度得分之和
- AI根据数据补充「评分原因简述」
- 评分一致性检查:输出前必须验证七维度评分之和等于总分
账号定位评分规则(粉丝数>5000以夸赞为主)
- 粉丝数>5000的账号:
- 基础分6分(满分10)
- 有简介+1分,简介清晰+1分,内容垂直+1分,有差异化定位+1分
- 评分原则:以夸赞为主,肯定账号已有成就,在差异化优势中指出可优化的方向
- 粉丝数≤5000的账号:
- 基础分3分(满分10)
- 有简介+1分,简介清晰+2分,内容垂直+2分,有差异化定位+2分
封面风格(10分):
- 粉丝数>5000的账号:
- 基础分6分(满分10)
- 视觉特征明显+1分,信息层级清晰+1分,风格一致+2分
- 评分原则:以夸赞为主,肯定账号视觉呈现,在分析中给出优化建议
- 粉丝数≤5000的账号:
- 基础分3分(满分10)
- 视觉特征明显+2分,信息层级清晰+2分,风格一致+3分
评分保底规则
- 粉丝数>5000的账号,评分必须>60分
- 当粉丝>5000且总分<61时,自动提升各维度最低分:
- 账号定位至少5分(满分10)
- 粉丝画像与需求至少8分(满分15)
- 选题体系至少8分(满分15)
- 封面风格至少5分(满分10)
- 爆文能力至少8分(满分15)
- 互动规模至少10分(满分20)
- 更新产能至少8分(满分15)
数据获取与脚本调用
账号标识映射
| 原始值 | 映射值 |
|---|---|
| 明星 | 明星 |
| 品牌/企业 | 品牌/企业 |
| 头部kol/KOL | 头部KOL |
| 腰部kol/KOL | 腰部KOL |
| 尾部kol/KOL | 尾部KOL |
| 素人(含空值) | 素人 |
爆文标准(按账号标识)
| 账号标识 | 爆文标准(点赞数) |
|---|---|
| 素人 | >1000 |
| 尾部KOL | >5000 |
| 腰部KOL | >10000 |
| 头部KOL | >20000 |
| 明星 | >20000 |
| 品牌/企业 | >1000 |
爆文能力评分(15分)
- 爆文数量:10分
- 3篇及以上:10分
- 2篇:8分
- 1篇:5分
- 0篇:1分
- 近30天互动量评估:5分
- 粉丝数>5000的账号(以夸赞为主):
- 互动量>=10000:5分
- 互动量>=5000:4分
- 互动量>=1000:3分
- 互动量>=500:2分
- 互动量<500:1分
- 粉丝数≤5000的账号:
- 互动量>=5000:5分
- 互动量>=1000:4分
- 互动量>=500:3分
- 互动量>=100:2分
- 互动量<100:1分
数值格式化规则
- 粉丝数:<10000直接展示原值,>=10000格式化为w+(如44096→4.4w+,40000→4w+)
- 互动量(近30天互动量、爆文互动数、非爆文平均互动等):<10000直接展示原值,>=10000格式化为w+(如34444→3.4w+)
- 百分比字段(互动率、收藏率、爆文率等):保留1位小数,带%符号
- 评分字段:整数
各模块分析指南
1. 账号定位(10分)
字段说明:
- TA是谁:基于简介+内容+WebSearch的身份判定,一句话概括
- 心智占位:TA在用户心智里占了什么位置?(如"最懂打工人的离职技巧博主")
- 价值观锚点:反复出现的价值判断(如"反PUA""性价比至上")
- 吸引力类型:从7种类型中选择最匹配的(可组合)
- 差异化优势:赛道痛点+你的优势+可强化方向
吸引力类型判定参考(不输出给用户):
| 类型 | 判定特征 |
|---|---|
| 探索者 | 持续尝试新领域,"跟我一起体验" |
| 导师 | 方法论输出,"我教你" |
| 同行者 | 共情陪伴,"我懂你" |
| 叛逆者 | 挑战常规,"凭什么这样" |
| 疗愈者 | 情绪抚慰,"会好起来的" |
| 记录者 | 真实记录,"这就是生活" |
| 审美者 | 美学引领,"这样更好看" |
2. 粉丝画像与需求(15分)
粉丝构成格式:粉丝数X | 女性XX% | XX-XX岁占比最高 | XX/XX/XX TOP3
核心需求反推:3行表格
- 画像特征:从粉丝性别/年龄/地域/职业推断
- 推断需求:基于画像特征的核心需求
- 内容匹配度:高/中/低(当前内容是否满足该需求)
粉丝数规模评估(4分):
- 粉丝数≥10w:4分
- 粉丝数≥5w:3分
- 粉丝数≥1w:2分
- 粉丝数≥5000:1分
3. 选题体系(15分)
核心逻辑:选题方向单一/聚焦是加分项,专注某一赛道深耕是好事
- 选题方向:基于标题聚类的3-5个方向,结合案例说明
- ⚠️ 方向聚焦=加分:选题越聚焦,评分越高
- 高度聚焦(1-2个方向):+4分
- 较为聚焦(3个方向):+3分
- 有一定聚焦(4个方向):+2分
- 表达风格:理性分析/情绪宣泄/故事讲述/清单体/对话体,结合案例说明
- 叙事手法:悬念前置/对比反转/痛点共鸣/身份代入,结合案例说明
- 人格一致性:统一度判断(是否每篇都能看出是同一个人写的)
- 标签统一度:固定栏目/标签数量≤3个→+3分,≤5个→+2分,其他→+1分
- 案例融入分析:
- ⚠️ 必须与评分方向一致:评分高→正向案例,评分低→负面案例
- 将案例融入各分析维度中,不单独列出
- 格式示例:「选题方向聚焦职场吐槽,如《太尴尬了 因为口误被领导白请一顿饭》(互动4.3w+)采用"尴尬+反转"结构,引发用户共鸣」
4. 封面风格(10分)
- 视觉特征:实拍/插画/文字图/拼图/统一色调,结合案例说明
- 信息层级:标题位置/字体风格/视觉焦点,结合案例说明
- 一致性:高/中/低,结合案例说明
- 案例融入分析:
- ⚠️ 必须与评分方向一致:评分高→正向案例,评分低→负面案例
- 将案例融入各分析维度中,不单独列出
- 格式示例:「视觉特征以产品截图为主,如近期作品封面缺少统一的品牌视觉符号,视觉冲击力不足」
5. 爆文能力(15分)
核心指标:
- 爆文率 = 爆文数 / 近7天发作品数 * 100%
- 近30天互动量:评估内容整体传播效果
评分规则:
- 爆文率(10分):
- 爆文率>=30%:10分
- 爆文率>=20%:8分
- 爆文率>=10%:6分
- 爆文率>=5%:4分
- 爆文率>0%:2分
- 无爆文:1分
- 近30天互动表现(5分):基于互动量/粉丝数比值评估
- 平均互动>爆文标准:5分
- 平均互动>爆文标准50%:3分
- 平均互动>爆文标准20%:2分
- 平均互动<爆文标准20%:1分
爆文特征分析维度:
- 标题规律:标题结构、用词模式
- 内容规律:内容类型、评论区特征
- 情绪特点:先压抑后释放/持续高能/平铺直叙
6. 互动规模(20分)
核心指标:
- 近30天互动量
- 近7天互动量
- 互动率 = 近30天作品互动量 / 粉丝数 * 100%
- 收藏率 = 总收藏数 / 总点赞数 * 100%
评分规则:
- 互动量维度(10分):基于近30天作品互动量
- >优秀值:10分
- >中位数:6分
- 其他:1分
- 收藏量维度(10分):基于总收藏数
- >优秀值:10分
- >中位数:6分
- 其他:1分
水平衡量:
- 近30天互动量和总收藏数对比接口返回的中位数参考和优秀值参考
- 等级判断:优秀/良好/待提升(基于当前值与中位数、优秀值的对比)
7. 更新产能(15分)
核心指标:
- 近30天发作品数
- 周更频率 = 近30天发作品数 / 4.3
分析维度:
- 频率分析:日更/周更节奏判断
- 发布时间分析:集中在什么时段,是否契合目标用户
水平衡量(表格格式):
| 指标 | 当前值 | 等级 | 中位数参考 | 优秀值参考 |
|---|---|---|---|---|
| 周均发布 | X篇 | 等级 | 中位数篇 | 优秀值篇 |
8. 行动处方
⚠️ 核心要求:必须基于以上分析总结得出,严禁虚构数据
结构:
- 问题归因:从各维度评分最低的2个问题中提取,格式为"维度-指标(当前值)"
- 具体动作:基于问题归因,给出3条可量化、有节点、有标准的动作
- 可以学:从相似账号中提取可复制策略(仅在使用--with_similar参数时展示)
- 反常识发现:从数据中发现与直觉相反的结论
数据引用要求:
- 互动数/收藏数评价必须展示具体数据:如"收藏率37.0%(中位数参考22.0%,优秀值参考30.0%)"
- 当前值必须来自脚本输出或报告中的实际数据
- 参考值必须来自接口返回的accountAvgList和accountExcellentList
9. 生命周期与综合诊断
生命周期分析融入到综合诊断结论中,不单独列出。
阶段定义(用于综合诊断结论判断):
- 冷启动期:粉丝<1000,互动率极低
- 成长期早期:互动率远超均值,但爆文率不稳定
- 成长期中期:爆文率稳定,粉丝持续增长
- 成熟期:粉丝稳定,变现路径清晰
- 衰退期:互动率下降,更新频率降低
综合诊断结论格式:
- 一段话概括账号定位、目标用户、核心吸引力、当前阶段
- 可借鉴的优点
- 可成长的地方
HTML数据填写规范
核心原则:HTML中的所有内容必须与对话输出的分析内容完全一致,禁止出现空字段或模板占位符。
步骤7.1 数据填写流程
脚本query命令输出的JSON数据保存在output/report_data.json,包含: 1. 自动计算字段(已填充):评分、数值、格式化数据等 2. AI分析字段(空字符串):需要根据对话分析内容填充
AI需要填充的字段清单:
| 模块 | 字段 | 填写说明 |
|---|---|---|
| header | 账号名、账号标识、数据获取时间 | 从脚本数据复制 |
| scores | 各维度得分、简述原因 | 得分从脚本复制,简述原因需填写 |
| conclusion | 综合诊断结论内容、可借鉴的优点、可成长的地方 | 根据分析内容填写 |
| positioning | TA是谁、心智占位、核心身份、价值观锚点、吸引力类型、赛道痛点、你的优势、可强化、显示可强化 | 根据分析内容填写,显示可强化字段必须保留(账号定位>=8分时为false,否则为true) |
| fans_insight | 粉丝构成、核心需求反推数组、收藏率判断、内容类型、粉丝内容匹配度、变现机会 | 根据分析内容填写 |
| topic_system | 选题方向、表达风格、叙事手法、人格一致性、选题案例1_分析、选题案例2_分析 | 根据分析内容填写,案例标题和互动数从脚本数据复制 |
| cover_style | 视觉特征、信息层级、一致性、封面案例1_分析、封面案例2_分析 | 根据分析内容填写,案例标题和互动数从脚本数据复制 |
| viral | 标题规律、爆文内容规律、情绪特点 | 根据分析内容填写 |
| interactive_scale | 类型判断 | 根据分析内容填写 |
| update_rhythm | 频率分析、发布时间分析 | 根据分析内容填写 |
| action | 问题归因数组、具体动作数组、成功指标数组、未达标兜底 | 根据分析内容填写 |
| similar_accounts | 推荐理由、发文特点、可学之处 | 根据分析内容填写 |
数据格式要求
1. 数值字段:纯数字,不带单位
收藏率、爆文率、互动率:纯数字(如37.0)近7天发作品数、爆文数、周更频率:纯数字
2. 文本字段:完整句子,不带Markdown格式
- 直接填入分析内容,不要用Markdown语法
3. 数组字段:JSON数组格式
核心需求反推:3个对象的数组爆文列表:2-3个对象的数组问题归因:1-3个对象的数组具体动作:3个字符串的数组
4. 空值处理:
- 如果某个分析维度无内容,填空字符串
"" - 不要填写"暂无"、"无"等占位文字
填写完成后验证
1. 检查所有{{}}占位符是否已替换 2. 检查HTML内容是否与对话输出一致 3. 检查数值字段格式是否正确
水衡量基准数据
数据来源:接口返回的 accountAvgList(中位数参考)和 accountExcellentList(优秀值参考)
脚本从接口数据中提取以下指标的中位数和优秀值:
- 总点赞数均值、总收藏数均值、粉丝数均值
- 计算互动率和收藏率的参考值:
- 互动率参考 = (点赞数均值 + 收藏数均值) / 粉丝数均值 * 100%
- 收藏率参考 = 收藏数均值 / 点赞数均值 * 100%
多账号对比
水平衡量数据来源:接口返回的 accountAvgList(中位数参考)和 accountExcellentList(优秀值参考)
多账号数据获取
python scripts/xiaohongshu_account_analyzer.py query --user_ids "ID1,ID2,ID3"对比报告结构
- 对比表格:各维度横向对比,最高值高亮
- 核心差异:按账号展示
- 共同问题:共性问题列表
- 发展建议:按账号展示
- 各账号详情:评分条+综合诊断+行动处方
对比总结格式
"comparison": {
"核心差异": [
{"账号名": "账号A", "内容": "差异描述"},
{"账号名": "账号B", "内容": "差异描述"}
],
"共同问题": ["问题1", "问题2"],
"发展建议": [
{"账号名": "账号A", "内容": "建议描述"},
{"账号名": "账号B", "内容": "建议描述"}
]
}#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
HTML完整性检查脚本
用于检查和修复HTML报告中的缺失内容
"""
import argparse
import json
import os
import re
import sys
from datetime import datetime
def generate_default_action(score):
"""根据评分生成默认行动处方"""
try:
score = int(score)
except:
score = 0
if score >= 80:
return '''
<div class="action-title">行动处方</div>
<div class="action-step">1. 保持当前内容策略,持续优化细节</div>
<div class="action-step">2. 关注粉丝反馈,增强互动粘性</div>
<div class="action-step">3. 探索变现路径,提升商业价值</div>
'''
elif score >= 60:
return '''
<div class="action-title">行动处方</div>
<div class="action-step">1. 强化内容垂直度,明确账号定位</div>
<div class="action-step">2. 提升更新频率,保持稳定输出</div>
<div class="action-step">3. 优化封面视觉,提升点击率</div>
'''
else:
return '''
<div class="action-title">行动处方</div>
<div class="action-step">1. 明确账号定位,聚焦垂直领域</div>
<div class="action-step">2. 提升内容质量,增加互动引导</div>
<div class="action-step">3. 保持稳定更新,积累账号权重</div>
'''
def check_and_fix_html_content(html, report_data):
"""检查HTML内容完整性,识别缺失字段并修复
返回: (修复后的html, 缺失字段列表)
"""
missing_fields = []
# 定义关键字段及其默认值
critical_fields = {
# 头部信息
"账号名": report_data.get("header", {}).get("账号名", "未知账号"),
"账号标识": report_data.get("header", {}).get("账号标识", "素人"),
"数据获取时间": report_data.get("header", {}).get("数据获取时间", datetime.now().strftime("%Y-%m-%d %H:%M")),
"综合评分": report_data.get("scores", {}).get("综合评分", "0"),
# 评分字段
"账号定位得分": report_data.get("scores", {}).get("账号定位得分", "0"),
"粉丝画像与需求得分": report_data.get("scores", {}).get("粉丝画像与需求得分", "0"),
"选题体系得分": report_data.get("scores", {}).get("选题体系得分", "0"),
"封面风格得分": report_data.get("scores", {}).get("封面风格得分", "0"),
"爆文能力得分": report_data.get("scores", {}).get("爆文能力得分", "0"),
"互动规模得分": report_data.get("scores", {}).get("互动规模得分", "0"),
"更新产能得分": report_data.get("scores", {}).get("更新产能得分", "0"),
# 简述原因
"账号定位简述原因": report_data.get("scores", {}).get("账号定位简述原因", "账号定位清晰"),
"粉丝画像与需求简述原因": report_data.get("scores", {}).get("粉丝画像与需求简述原因", "粉丝画像较清晰"),
"选题体系简述原因": report_data.get("scores", {}).get("选题体系简述原因", "选题方向明确"),
"封面风格简述原因": report_data.get("scores", {}).get("封面风格简述原因", "封面风格统一"),
"爆文能力简述原因": report_data.get("scores", {}).get("爆文能力简述原因", "爆文表现良好"),
"互动规模简述原因": report_data.get("scores", {}).get("互动规模简述原因", "互动表现良好"),
"更新产能简述原因": report_data.get("scores", {}).get("更新产能简述原因", "更新频率稳定"),
}
# 检查HTML中的关键模块是否有内容
# 1. 检查更新时间
update_time_match = re.search(r'数据获取时间[::]\s*</span>\s*<span class="value">([^<]*)</span>', html)
if update_time_match:
value = update_time_match.group(1).strip()
if not value or value == "":
missing_fields.append("数据获取时间")
fix_value = report_data.get("header", {}).get("数据获取时间", datetime.now().strftime("%Y-%m-%d %H:%M"))
html = html.replace(
f'<span class="value">{value}</span>',
f'<span class="value">{fix_value}</span>',
1
)
# 2. 检查行动处方模块
action_section_match = re.search(r'<div class="action-box">(.*?)</div>\s*</div>', html, re.DOTALL)
if action_section_match:
action_content = action_section_match.group(1)
if "问题归因" in action_content and ("暂无" in action_content or action_content.count("<div") < 3):
missing_fields.append("行动处方")
score = report_data.get("scores", {}).get("综合评分", 0)
default_action = generate_default_action(score)
html = re.sub(
r'(<div class="action-box">).*?(</div>\s*</div>)',
r'\1' + default_action + r'\2',
html,
flags=re.DOTALL
)
# 3. 检查综合诊断结论
conclusion_match = re.search(r'综合诊断结论.*?<div class="conclusion-text">(.*?)</div>', html, re.DOTALL)
if conclusion_match:
conclusion_content = conclusion_match.group(1).strip()
if not conclusion_content or len(conclusion_content) < 20:
missing_fields.append("综合诊断结论")
account_name = report_data.get("header", {}).get("账号名", "该账号")
default_conclusion = f"{account_name}整体运营状况良好,建议持续优化内容质量和互动策略。"
html = re.sub(
r'(<div class="conclusion-text">).*?(</div>)',
rf'\1{default_conclusion}\2',
html,
flags=re.DOTALL
)
# 4. 检查账号定位模块关键字段
positioning_fields = ["TA是谁", "心智占位", "价值观锚点", "吸引力类型"]
for pf in positioning_fields:
pattern = rf'{pf}[::]\s*</span>\s*<span class="value">([^<]*)</span>'
match = re.search(pattern, html)
if match:
value = match.group(1).strip()
if not value:
missing_fields.append(pf)
# 5. 检查粉丝画像模块
fans_profile_match = re.search(r'粉丝构成[::]\s*</span>\s*<span class="value">([^<]*)</span>', html)
if fans_profile_match:
value = fans_profile_match.group(1).strip()
if not value:
missing_fields.append("粉丝构成")
raw = report_data.get("_raw", {})
fans = raw.get("fans", 0)
gender = raw.get("fansGender", {})
female_ratio = gender.get("female_ratio", "0.5")
try:
fix_value = f"{fans}粉丝 | 女性{float(female_ratio)*100:.0f}%"
except:
fix_value = f"{fans}粉丝"
html = html.replace(
f'<span class="value">{value}</span>',
f'<span class="value">{fix_value}</span>',
1
)
# 6. 检查选题体系模块
topic_fields = ["选题方向", "表达风格", "叙事手法"]
for tf in topic_fields:
pattern = rf'{tf}[::]\s*</span>\s*<span class="value">([^<]*)</span>'
match = re.search(pattern, html)
if match:
value = match.group(1).strip()
if not value:
missing_fields.append(tf)
# 7. 检查封面风格模块
cover_fields = ["视觉特征", "信息层级", "一致性"]
for cf in cover_fields:
pattern = rf'{cf}[::]\s*</span>\s*<span class="value">([^<]*)</span>'
match = re.search(pattern, html)
if match:
value = match.group(1).strip()
if not value:
missing_fields.append(cf)
# 8. 检查更新产能模块
update_fields = ["频率分析", "发布时间分析"]
for uf in update_fields:
pattern = rf'{uf}[::]\s*</span>\s*<span class="value">([^<]*)</span>'
match = re.search(pattern, html)
if match:
value = match.group(1).strip()
if not value:
missing_fields.append(uf)
return html, missing_fields
def check_multi_html_content(html, accounts):
"""检查多账号HTML内容完整性
返回: (修复后的html, 缺失字段列表)
"""
missing_fields = []
# 检查每个账号的关键信息
for i, acc in enumerate(accounts):
header = acc.get("header", {})
scores = acc.get("scores", {})
name = header.get("账号名", "")
if not name:
missing_fields.append(f"账号{i+1}-账号名")
total_score = scores.get("综合评分", "")
if not total_score:
missing_fields.append(f"账号{i+1}-综合评分")
# 检查对比总结是否存在
if "核心差异" not in html or len(re.findall(r"核心差异", html)) == 0:
missing_fields.append("核心差异")
default_summary = '''
<div class="comparison-summary">
<div class="section-title">核心差异</div>
<p>各账号在定位、内容策略上存在差异,建议针对性优化。</p>
</div>
'''
html = html.replace('</body>', default_summary + '</body>')
return html, missing_fields
def cmd_check():
"""命令行入口:检查HTML文件"""
parser = argparse.ArgumentParser(description="HTML完整性检查")
parser.add_argument("--html", required=True, help="HTML文件路径")
parser.add_argument("--data", required=True, help="report_data.json路径")
parser.add_argument("--type", choices=["single", "multi"], default="single", help="报告类型")
args = parser.parse_args()
# 读取HTML
if not os.path.exists(args.html):
print(json.dumps({"status": "error", "message": f"HTML文件不存在: {args.html}"}, ensure_ascii=False))
sys.exit(1)
with open(args.html, "r", encoding="utf-8") as f:
html = f.read()
# 读取数据
if not os.path.exists(args.data):
print(json.dumps({"status": "error", "message": f"数据文件不存在: {args.data}"}, ensure_ascii=False))
sys.exit(1)
with open(args.data, "r", encoding="utf-8") as f:
data = json.load(f)
# 执行检查
if args.type == "single":
html, missing_fields = check_and_fix_html_content(html, data)
else:
accounts = data.get("accounts", [data])
html, missing_fields = check_multi_html_content(html, accounts)
# 写回HTML
with open(args.html, "w", encoding="utf-8") as f:
f.write(html)
result = {
"status": "success",
"message": "HTML完整性检查完成",
"missing_fields": missing_fields,
"fixed": len(missing_fields) > 0
}
print(json.dumps(result, ensure_ascii=False))
if __name__ == "__main__":
cmd_check()