agentleFS
endearqbendearqb/endearqb-skills/skills/endearqb-community-profiler/SKILL.md

community-profiler

Skill19 starsChanged 6 months agoMITView on GitHub

技术讨论群成员画像与评估 Skill。当用户提供群聊记录(文本粘贴、截图、JSON/CSV 均可)并要求分析成员、给成员打分、评估社区健康度、 找出核心贡献者/潜水者/活跃用户/KOL、生成成员影响力排名、识别僵尸用户、分析群运营健康度、总结群聊内容等时,必须触发本 Skill。 适用场景:运营决策(KOL筛选、低价值成员风险评估)、个人研究(社区生态分析)、团队协作管理(成员贡献评估)。 触发关键词:群画像、成员分析、社区分析、影响力评估、活跃度分析、群运营分析、KOL识别、技术贡献者分析、群聊记录分析、僵尸用户、聊天总结。 即使用户只说"帮我分析一下这个群"或"看看谁最活跃"或"总结一下群里聊了什么",也应触发本 Skill。

The file

Files
SKILL.md

Community Profiler v4.1.0 — 技术社区成员画像与评估

概述

将群聊记录解析为结构化成员画像,支持三种使用场景:

  • 运营决策:KOL 筛选、低价值成员风险评分
  • 个人研究:社区生态与知识流动分析
  • 团队协作:成员贡献与角色识别

输出架构(JSON + Viewer 分离)

本技能采用 数据与视图分离 架构:

输出文件

  1. report.json — AI 分析结果的唯一结构化输出(必须)
  2. viewer.html — 从 assets/viewer.html 复制到输出目录的独立可视化查看器(自动)
  3. report.md — 文字分析报告(仅用户明确要求时)
  4. assets/ — 抓取的链接/图片内容(有外部资源时)

输出流程(严格按此顺序)

Step A:分析群聊 → 生成 report.json → 保存到输出目录
Step B:从技能 assets/ 复制 viewer.html 到输出目录(与 report.json 同级)
Step C:使用 present_files 将 viewer.html(第一个)和 report.json 呈现给用户

关键命令序列

# 1. 创建输出目录
OUTPUT_DIR="/mnt/user-data/outputs/groupchat/$(date +%Y-%m-%d_%H%M%S)"
mkdir -p "$OUTPUT_DIR"

# 2. 保存 report.json(由 AI 分析生成,用 create_file 写入)
# → $OUTPUT_DIR/report.json

# 3. 复制 viewer.html 到输出目录
cp /mnt/skills/user/community-profiler/assets/viewer.html "$OUTPUT_DIR/viewer.html"

# 4. 通过 present_files 呈现给用户
# present_files(["$OUTPUT_DIR/viewer.html", "$OUTPUT_DIR/report.json"])

⚠️ 重要:viewer.html 和 report.json 必须在同一目录下。viewer.html 通过 fetch('./report.json') 自动加载数据。

所有文件保存至 groupchat/YYYY-MM-DD_HHMMSS/(按分析时间戳新建)。


Step 0:规模判断与预处理策略

首先判断消息量级,选择对应工作流:

规模消息数策略
小型< 200 条全量分析,一次性输出
中型200-1000 条分块分析(每块200条),subagent 资产抓取与主分析并行
大型> 1000 条分块分析 + 向用户报告进度,HTML 启用虚拟滚动

0.1 广告/垃圾信息过滤

标记为 spam,不计入评分:

  • 营销话术(购买/优惠/引流)
  • 同一人 3 条内容相似度 > 80%
  • 连续 5 条以上纯表情包
  • 短链 + 邀请码格式

0.2 Bot 识别排除

排除昵称含 Bot/助手/机器人/通知/公告 或发言模式高度规律的账号,单独列出。

0.3 无时间戳处理

无时间戳时:时序子项跳过,权重自动切换:

  • 有时间戳:活跃度20% · 内容质量30% · 互动影响25% · 专业权威15% · 社区粘性10%
  • 无时间戳:活跃度15% · 内容质量35% · 互动影响30% · 专业权威20% · 社区粘性0%

Step 1:解析输入

格式处理
微信/TG/Slack/Discord 导出文本解析时间戳、昵称、消息
截图OCR 后按文本处理
JSON / CSV直接读取字段映射
多文件/分段粘贴合并去重

字段缺失时:说明缺失内容,继续最佳估计,不中止。


Step 2:外部资源抓取(Subagent 并行)

与主分析流程并行执行,不阻塞成员评分。

去重与优先级

  • 按 URL/图片 hash 去重,只抓取一次,累计 share_count
  • 优先:技术文章/文档/仓库/被 ≥3 人提及的链接
  • 低优先:社交主页、电商页

失败处理

原因标注
403/401failed_403
超时 >10sfailed_timeout
付费墙failed_paywall
404dead_link

保存结构

assets/
├── index.json       # 资产清单
├── articles/        # 文章摘要(.md)
├── images/          # 重要图片
└── repos/           # 仓库信息

Step 3:五维画像评分

💡 权重扩展点:所有权重集中于 Step 0.3,后续迭代可在此添加自定义逻辑。

维度一:活跃度

= min(100, 发言数/全体中位数×50 + 活跃天数占比×30[无时间戳=0] + 跨话题参与度×20)

发言 < 3 条上限 30。

维度二:内容质量(抽样最多20条)

子维度高分信号满分
技术深度原理/源码/架构25
信息密度干货多、信息量高25
原创性个人观点、独立分析25
表达清晰度逻辑清晰、易读25

发言 < 5 条标注 sample_insufficient。

维度三:互动影响力

原始分 = 被@数×3 + 引发回复数×2 + 主动回复数×1
→ 归一化到 0-100

维度四:专业权威

以下信号各 +20,上限 100: ✅ 解答技术问题被采纳 ✅ 给出可执行代码/方案 ✅ 纠正错误信息 ✅ 被他人引用认可 ✅ 分享资源 share_count ≥ 3

维度五:社区粘性(无时间戳时跳过)

= 连续活跃周数/总周数×50 + 跨话题参与数/总话题数×50

Step 4:角色分类

角色判定
🎯 核心贡献者综合≥70,内容质量≥70,权威≥60
🔧 问题解决者权威≥70,回复他人占互动>60%
📢 信息传播者活跃高,原创性<40,链接/转发>50%
❓ 优质提问者引发回复前25%,权威<40
👀 潜水观察者活跃<20,发言<5条
😄 氛围组活跃高,内容质量<40,水文为主
🌱 新人成长者发言少但提问多、积极互动
⚠️ 低贡献风险活跃<10,内容质量<20,无有效互动

Step 5:聊天内容总结

在完成成员评分后,对全量消息进行一次内容层面的分析,输出到 JSON 的 content_summary 字段。

5.1 核心议题摘要

识别 3-8 个主要话题线程,每个包含:

  • 议题标题(10字以内)
  • 简述(2-3句,覆盖主要观点)
  • 参与者列表
  • 议题热度(参与人数 + 消息数)

5.2 精华发言精选

选取 5-10 条最有价值的发言,标准:

  • 引发 ≥3 条回复
  • 包含可操作的技术方案
  • 提出了有洞察力的问题或反驳
  • 被他人引用或认可

每条保留原文(不改写)+ 发言人 + 价值标注。

5.3 共识与分歧

  • 共识:多人达成一致的观点(≥3人明确认同)
  • 分歧:存在明确对立观点的议题,列出双方核心论点

5.4 行动项 / 待办

提取群内有人明确提出的计划、建议、邀约等,格式:

- [提出人] 行动内容 (对象:涉及人)

Step 6:运营决策支持

A. KOL 筛选

输出 kol_candidates,包含推荐理由和适用场景。

B. 低价值成员风险评分

只输出风险评分(0-100)和风险因素,不输出清退名单。

  • high(≥70)/ medium(40-69)/ low(<40)

C. 团队协作

  • 知识覆盖矩阵(covered/weak/gap)
  • 核心-外围三层分层
  • 互动断层识别

Step 7:输出 report.json

完整 JSON 结构

{
  "analysis_meta": {
    "generated_at": "2025-05-14 12:00:00",
    "total_messages": 150,
    "member_count": 12,
    "spam_messages_filtered": 5,
    "has_timestamp": true,
    "weight_mode": "standard",
    "source_format": "wechat_text",
    "bots_excluded": []
  },
  "content_summary": {
    "topics": [
      {
        "title": "议题标题",
        "description": "2-3句描述",
        "participants": ["昵称"],
        "message_count": 12,
        "heat_score": 85
      }
    ],
    "highlights": [
      {
        "sender": "昵称",
        "content": "原文",
        "value_tag": "技术洞察|精准提问|有效解答|引发讨论",
        "replies_triggered": 4
      }
    ],
    "consensus": ["共识观点1", "共识观点2"],
    "disputes": [
      {
        "topic": "争议议题",
        "side_a": { "position": "观点A", "supporters": ["昵称"] },
        "side_b": { "position": "观点B", "supporters": ["昵称"] }
      }
    ],
    "action_items": [
      { "proposer": "昵称", "action": "行动内容", "target": "涉及对象" }
    ]
  },
  "members": [
    {
      "nickname": "成员昵称",
      "scores": {
        "composite": 75,
        "activity": 60,
        "content_quality": 80,
        "interaction_influence": 70,
        "professional_authority": 85,
        "community_stickiness": 50
      },
      "roles": ["🎯 核心贡献者"],
      "churn_risk_level": "low",
      "risk_factors": [],
      "highlights": ["代表性发言原文"],
      "tech_domains": ["Go", "Docker"],
      "stats": {
        "message_count": 25,
        "reply_count": 10,
        "mentioned_count": 5,
        "links_shared": 3,
        "active_days": 7
      }
    }
  ],
  "community_health": {
    "kol_candidates": [
      {
        "nickname": "昵称",
        "composite_score": 85,
        "kol_signals": ["高内容质量", "被多人 @ 引用"],
        "tech_domains": ["AI", "Python"],
        "recommended_for": "技术分享嘉宾"
      }
    ],
    "risk_summary": { "high": 2, "medium": 3, "low": 7 },
    "knowledge_coverage": {
      "领域名": { "level": "covered|weak|gap", "experts": ["昵称"] }
    },
    "core_periphery_layers": {
      "core": ["核心成员"],
      "active": ["活跃成员"],
      "peripheral": ["边缘成员"]
    },
    "topic_clusters": ["话题1", "话题2"],
    "activity_trend": "上升|稳定|下降",
    "top_assets": [
      {
        "title": "资源标题",
        "url": "https://example.com",
        "summary": "资源摘要",
        "share_count": 3,
        "shared_by": ["昵称A", "昵称B"],
        "fetch_status": "success|failed_403|failed_timeout|failed_paywall|dead_link"
      }
    ],
    "health_notes": "社区健康评估文字描述"
  },
  "failed_assets": []
}

top_assets 字段约束

  • top_assets 为空时必须输出 []。
  • top_assets[].shared_by 必须始终是字符串数组;没有可识别分享者时输出 [],不要输出字符串。
  • 抓取失败但仍值得展示的资源可以保留在 top_assets 中,并用非 success 的 fetch_status 标注。
  • failed_assets 保留为原始失败清单,供审计和调试使用;当前 viewer.html 不直接渲染该字段。

Step 8:部署 Viewer 并呈现给用户

完成 report.json 后,必须执行以下操作:

# 复制 viewer.html 到输出目录
cp /mnt/skills/user/community-profiler/assets/viewer.html "$OUTPUT_DIR/viewer.html"

然后使用 present_files 工具呈现文件,viewer.html 优先作为第一个文件:

present_files(["$OUTPUT_DIR/viewer.html", "$OUTPUT_DIR/report.json"])

Viewer 工作原理

assets/viewer.html 是一个独立的可视化报告查看器,直接消费 report.json:

  • 自动加载:通过 fetch('./report.json') 加载同目录的数据文件
  • URL 参数:支持 ?data=路径 指定不同 JSON 文件
  • 文件上传回退:若 fetch 失败,显示文件选择器供手动上传 JSON
  • 主题切换:支持 light/dark 主题切换
  • 导出功能:可重新导出当前加载的 JSON 数据
  • 成员排行:按 members[].scores.composite 排序,展示前三名、完整成员列表和五维雷达图
  • 详情展开:成员列表点击后展开五维评分、代表发言、技术领域、统计数据和风险因素
  • 运营面板:展示 KOL 候选、风险分布、知识覆盖、角色分布、活跃度分布和社区健康结论
  • 资源热榜:展示 community_health.top_assets,其中 shared_by 按数组渲染为分享者列表

⚠️ 不要自行生成 HTML 报告

与 v3 版本不同,不再需要在 AI 输出中生成完整 HTML。viewer.html 是预置的静态资产,只需复制到输出目录即可。AI 只负责生成 report.json 数据。


Step 9:Markdown 报告(可选)

仅用户明确要求时生成,新增"聊天内容总结"章节作为第二节。


边界处理

情况处理
记录 < 10 条提示数据不足,仍输出最佳估计
只有 1-2 人说明无法做比较分析
无时间戳Step 0.3 自动切换
非技术群"专业权威"改"领域权威",向用户说明
时区未知默认 UTC+8
大型记录 > 1000 条启用分块处理,viewer 已内置虚拟滚动

参考文件

  • assets/viewer.html — 独立可视化报告查看器,自动加载并渲染同目录 report.json
  • references/scoring-examples.md — 各维度典型评分案例

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.