Back to home@tyx6661234

dsh-community-listening

面向 DeepSeek Harness (DSH) 的社交评论研究插件

Stars
1
Language
TypeScript
Created
Aug 26, 2026
Updated
Aug 26, 2026
GitHub repo

Introduction

dsh-community-listening

面向 DeepSeek Harness (DSH) 的社交评论研究插件。它提供平台内容发现、公开评论采集、语料管理、情感分析、近似去重、主题聚类和 Markdown 报告导出能力。

dsh-community-listening 是一个标准 DSH bundle:只注入官方 tools service,可运行在普通 DSH profile 与 DSH Desktop profile 中。它不依赖 Electron、Desktop 私有 service、launcher bootstrap 或内部 shim。

功能

  • 覆盖知乎、B 站、小红书、微博、抖音、快手、牛客和百度贴吧的评论采集。
  • 为 B 站、小红书、微博、抖音、快手提供内容发现工具;抖音还支持读取用户近期作品。
  • 将搜索结果和评论按主题保存为 JSONL 语料,并按 URL 与内容去重。
  • 提供语料统计、词典/LLM 情感分析、SimHash 近似去重、embedding 或关键词主题聚类、报告导出。
  • 对各平台维护独立的节流、冷却和通道健康状态;主通道失败时会在可用范围内自动降级。

支持范围

平台内容发现评论采集浏览器与登录要求
知乎-问题页浏览器;公开页面通常可读
B 站视频搜索视频页可匿名;可选 Cookie 改善 API 可用性
小红书笔记搜索笔记页需要用户自己的登录态和有效 xsec_token
微博帖子搜索详情页浏览器;可用性取决于页面和平台状态
抖音视频搜索、用户作品视频页浏览器;可用性取决于页面和平台状态
快手视频搜索视频页浏览器;公开页面通常可读
牛客-讨论帖浏览器;公开页面通常可读
百度贴吧-帖子页浏览器;公开页面通常可读

对于其他网页,collect_comments 会尝试通过浏览器提取已加载的评论内容,但不保证适配效果。

前置条件

  • Node.js >= 20
  • 可用的 DSH 或 DSH Desktop 环境。
  • 已安装并可从 PATH 调用的 BrowserSkill CLI(bsk)。浏览器型采集依赖它连接用户的浏览器会话。

插件可在无浏览器连接时尝试拉起本机 Chrome;也可以关闭此行为,或指定浏览器可执行文件和 profile。使用需要登录的平台时,请只使用自己有权使用的浏览器 profile。

安装

一键安装(公开发布后)

dsh plugin --profile <name> add dsh-community-listening

<name> 替换为目标 DSH 或 DSH Desktop profile 的名称。安装后重启该 profile 即可加载插件。

源码部署

克隆仓库、构建 bundle,再从本地目录安装:

git clone https://github.com/tyx6661234/dsh-community-listening.git
cd dsh-community-listening
pnpm install --frozen-lockfile
pnpm build
dsh plugin --profile <name> add .

同一 bundle 可以安装到普通 DSH profile 或 DSH Desktop profile,不需要维护两套插件包。

本地开发

pnpm install
pnpm build

开发依赖仅用于构建和验证;发布包会保留 DSH 运行时所需的 peer dependencies,而不会把宿主运行时打进 bundle。

快速开始

在进行连续采集前,先查看平台状态:

crawler_status()

搜索内容时传入 topic 会将发现结果写入该主题的语料目录:

collect_bilibili_search({
  keyword: "机械键盘",
  topic: "mechanical-keyboards"
})

对搜索结果中的 URL 采集评论:

collect_comments({
  url: "<video-or-post-url>",
  topic: "mechanical-keyboards"
})

之后可以统计、分析并导出报告:

corpus_stats({ topic: "mechanical-keyboards" })
mine_sentiment({ topic: "mechanical-keyboards" })
dedupe_similar({ topic: "mechanical-keyboards" })
cluster_topics({ topic: "mechanical-keyboards" })
export_report({ topic: "mechanical-keyboards", report: "# Research report\n..." })

cluster_topics 读取主题下的 articlepage 语料;评论情感分析则读取 comment 语料。也可以直接通过各工具的 items 参数分析未落盘的文本。

工具

采集与状态

工具用途
crawler_status(platform?)只读查看通道、最近结果、降级状态、冷却时间和历史趋势。
collect_comments(url, max_expand?, topic?)按 URL 路由至平台适配器并采集评论;支持 topic 自动落盘。
collect_bilibili_search(keyword, topic?, limit?)发现 B 站视频。
collect_xhs_search(keyword, topic?, limit?)发现小红书笔记,并尽力提供可用 token 信息。
collect_weibo_search(keyword, topic?, limit?)发现微博帖子。
collect_douyin_search(keyword, topic?, limit?, sort_type?, publish_time?)发现抖音视频。
collect_douyin_user(userUrl, topic?, limit?)读取一个抖音用户的近期作品。
collect_kuaishou_search(keyword, topic?, limit?)发现快手视频。

采集结果会带上 backendfallbacksdegraded 等字段。degraded: true 表示插件已从首选通道切换到兜底通道,不必然表示没有拿到结果。

语料与分析

工具用途
save_corpus(topic, items, kind?)手动追加文本到主题语料。
corpus_stats(topic)统计语料数量、类型、来源策略和最近采集时间。
corpus_read(topic, kind?, limit?, offset?)分页读取语料原文。
mine_sentiment(topic?, items?)评论情感分桶与证据摘要;可选 LLM 校准。
dedupe_similar(topic?, items?, threshold?)通过 SimHash 识别近似重复文本。
cluster_topics(topic?, items?, k?)使用 embedding 或关键词聚类整理主题。
export_report(topic, report, overwrite?)导出 Markdown 报告。

配置

在目标 profile 的插件配置中为 dsh-community-listening 添加 config。以下示例使用默认值;空字符串表示由环境、自动探测或会话目录决定。

- id: dsh-community-listening
  name: dsh-community-listening
  config:
    bskPath: bsk
    bskTimeoutMs: 120000
    maxCollectConcurrency: 3
    envPath: ""
    autoLaunchChrome: true
    chromePath: ""
    chromeProfileDir: ""
    corpusDir: ""
    pacingStateFile: ""
    bilibiliCookie: ""
    siliconflowKey: ""
    siliconflowBaseUrl: ""
    embeddingModel: ""
    bypassProxyHosts: []
    zhihuMaxAnswers: 50
    zhihuMaxAnswerComments: 10
    bilibiliMaxComments: 100
    bilibiliMaxReplyComments: 20
字段默认值与边界说明
bskPathbskBrowserSkill CLI 路径。
bskTimeoutMs1200001000-600000单次 BrowserSkill 命令超时,单位毫秒。
maxCollectConcurrency31-5浏览器型采集的全局并发上限。
envPath可选 .env 文件;空值时只读取进程环境变量。
autoLaunchChrometrue无连接时是否尝试启动本机浏览器。
chromePath / chromeProfileDir覆盖自动探测的浏览器路径或 profile。
corpusDir语料根目录;也可用 DSH_INSIGHT_CORPUS_DIR 设置。
pacingStateFile节流状态文件;也可用 DSH_INSIGHT_PACING_STATE 设置。
bilibiliCookie可选 B 站 Cookie;也可用 BILIBILI_COOKIE 设置。不要提交到仓库。
siliconflowKey / siliconflowBaseUrl / embeddingModel可选 embedding 覆盖;未设置时读取环境或 envPath
bypassProxyHosts[]需要直连的额外域名后缀。
zhihuMaxAnswers501-200知乎问题页最多处理的回答数。
zhihuMaxAnswerComments100-100读取评论的知乎回答数量。
bilibiliMaxComments1001-500B 站主评论与回复的合计上限。
bilibiliMaxReplyComments200-100尝试读取楼中楼的主评论数量。

可选的 LLM 与 embedding 配置支持显式插件配置、进程环境变量和 envPath 中的变量。常用变量包括:

OPENCODE_API_BASE_URL
OPENCODE_API_KEY
OPENCODE_FREE_MODELS
LLM_BASE_URL
OPENAI_API_KEYS
LLM_MODEL_LITE
SILICONFLOW_API_KEY
SILICONFLOW_BASE_URL
EMBEDDING_MODEL

LLM 或 embedding 不可用时,插件会使用规则或关键词路径降级,并在结果中标记相关状态。凭据只应存储在本机受保护的配置或环境中,绝不能提交到 Git、issue 或日志。

运行行为与限制

  • 插件只处理公开可读内容,且只复用用户自己的浏览器登录态。
  • 不破解验证码、不绕过登录墙、不伪造设备身份,也不提供规避平台访问限制的功能。
  • 遇到登录墙、验证码、限流或浏览器不可用时,工具会停止、返回错误或进入冷却;请勿在冷却期间反复重试同一平台。
  • 小红书需要登录态和 xsec_token。搜索结果中没有有效 token 或平台不返回公开内容时,评论采集可能为空或失败。
  • 平台页面、接口、登录策略和访问限制可能随时变化,公开页面可访问不等于持续可采集。
  • 自动降级优先保证任务可观测性:请通过 crawler_status、返回的 backenddegraded 判断当前通道状态。

使用本插件前,请确认你的用途符合目标平台规则、适用法律以及所在组织的数据处理要求。

数据文件

默认情况下,主题数据保存到当前 DSH 会话工作目录下;可通过 corpusDir 指定语料根目录。一个主题的典型结构如下:

<corpus-root>/insight-workspace/<topic>/
  corpus.jsonl     # 搜索结果、页面与评论语料
  analysis.json    # 最近一次分析快照
  report.md        # export_report 导出的报告

节流状态和通道健康状态分别存放在 .pacing.json.crawler-health.json。这些是本地运行状态,不应提交或发布。

根目录中的 agent-skill.json 是供本地 Agent 检索使用的元数据,不是 DSH Desktop manifest,也不替代 package.jsoncordis.patch.yml 的 bundle 声明。

开发与验证

pnpm install --frozen-lockfile
pnpm typecheck
pnpm test
pnpm build
pnpm plugin:check
pnpm pack --dry-run

plugin:check 会验证 bundle 入口、类型入口、patch manifest、发布文件和归档排除规则。提交前还应分别在普通 DSH profile 与 DSH Desktop profile 中完成一次加载和重启 smoke test。

发布

发布前请更新严格的 SemVer 版本号,并确认上述验证全部通过:

pnpm version patch
pnpm install --frozen-lockfile
pnpm typecheck
pnpm test
pnpm build
pnpm plugin:check
pnpm pack --dry-run

确认包内容无误后,再按组织的 npm 发布流程执行公开发布。

贡献

欢迎提交 issue 和 pull request。新增或修改平台适配器时,请:

  • 保持采集逻辑在公开内容和用户授权的浏览器会话范围内。
  • 为 URL 路由、解析、错误与降级行为补充单元测试。
  • 不提交 Cookie、API key、语料、状态文件、浏览器 profile 或本机绝对路径。
  • 在修改发布相关文件后运行 pnpm plugin:checkpnpm pack --dry-run

许可证

MIT。目标平台内容及其使用仍受各平台规则和适用法律约束。