接管闲鱼抖音消息,用资料库约束 AI 自动回复并支持人工接管
29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/23 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/dongdonga11/dsh-customer-service.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 12 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 64 处,展示前 45 条)
- 写入本地文件lib/index.js:139
try { await mkdir(join(config.dataDir, sub), { recursive: true }) } catch { } - 读取本地文件lib/index.js:337
try { return JSON.parse(await readFile(stateFile, 'utf8')) || { accounts: {} } } catch { return { accounts: {} } } - 写入本地文件lib/index.js:361
await mkdir(config.dataDir, { recursive: true }) - 写入本地文件lib/index.js:362
await writeFile(stateFile, JSON.stringify(st, null, 2), 'utf8') - 发起网络请求lib/client.js:66
const res = await fetch(path, options) - 写入本地文件lib/kernel/store.js:134
await mkdir(this.dataDir, { recursive: true }) - 读取本地文件lib/kernel/store.js:136
const raw = await readFile(this._path('state.json'), 'utf8') - 写入本地文件lib/kernel/store.js:168
await mkdir(dirname(path), { recursive: true }) - 写入本地文件lib/kernel/store.js:169
await writeFile(tmp, JSON.stringify(data, null, 2), 'utf8') - 写入本地文件lib/kernel/store.js:170
await rename(tmp, path) - 读取本地文件lib/kernel/pairing.js:16
try { return readFileSync(p, 'utf8').trim() } catch { return '' } - 写入本地文件lib/kernel/pairing.js:29
mkdirSync(dataDir, { recursive: true }) - 写入本地文件lib/kernel/pairing.js:37
try { writeFileSync(file, legacy, 'utf8') } catch { } - 写入本地文件lib/kernel/pairing.js:42
try { writeFileSync(file, code, 'utf8') } catch { } - 读取本地文件lib/kernel/pairing.js:47
return Boolean(legacyDir) && existsSync(join(legacyDir, 'state.json')) - 读取本地文件lib/kernel/migrate.js:27
if (!existsSync(legacyState)) return { migrated: false, reason: 'no-legacy' } - 读取本地文件lib/kernel/migrate.js:30
if (existsSync(target)) return { migrated: false, reason: 'target-exists' } - 写入本地文件lib/kernel/migrate.js:32
await mkdir(dataDir, { recursive: true }) - 读取本地文件lib/kernel/migrate.js:34
const raw = await readFile(legacyState, 'utf8') - 写入本地文件lib/kernel/migrate.js:41
await copyFile(legacyState, target) - 写入本地文件lib/kernel/migrate.js:43
await writeFile( - 写入本地文件lib/kernel/library.js:113
await mkdir(projectsDir, { recursive: true }) - 读取本地文件lib/kernel/library.js:120
const raw = await readFile(projectsFile, 'utf8') - 写入本地文件lib/kernel/library.js:126
try { await copyFile(projectsFile, `${projectsFile}.corrupt-${Date.now()}`) } catch { } - 写入本地文件lib/kernel/library.js:145
await writeFile(tmp, JSON.stringify(state, null, 2) + '\n', 'utf8') - 写入本地文件lib/kernel/library.js:146
await rename(tmp, projectsFile) - 写入本地文件lib/kernel/library.js:195
await mkdir(filesRoot(pid), { recursive: true }) - 写入本地文件lib/kernel/library.js:224
await mkdir(trash, { recursive: true }) - 读取本地文件lib/kernel/library.js:227
if (existsSync(from)) { try { await rename(from, to) } catch (e) { lg.warn(`项目目录移入回收站失败: ${(e && e.message) || e}`) } } - 读取本地文件lib/kernel/library.js:298
try { names = await readdir(dir) } catch { return [] } - 读取本地文件lib/kernel/library.js:305
try { st = await stat(full) } catch { continue } - 读取本地文件lib/kernel/library.js:326
const st = await stat(full) - 读取本地文件lib/kernel/library.js:330
const buf = await readFile(full) - 删除本地文件lib/kernel/library.js:379
await rm(full, { recursive: st.isDirectory(), force: false }) - 删除本地文件lib/kernel/library.js:402
try { await rm(indexPath(projectId), { force: true }) } catch { } - 读取本地文件lib/platforms/xianyu/tools.js:32
const buf = await readFile(s) - 写入本地文件lib/platforms/xianyu/playbook.js:91
await mkdir(join(knowledgeDir, '.backups'), { recursive: true }) - 读取本地文件lib/platforms/xianyu/playbook.js:100
const text = await readFile(join(knowledgeDir, f), 'utf8') - 读取本地文件lib/platforms/xianyu/playbook.js:148
const exists = existsSync(path) - 读取本地文件lib/platforms/xianyu/playbook.js:149
const current = exists ? await readFile(path, 'utf8') : '' - 写入本地文件lib/platforms/xianyu/playbook.js:155
if (exists) { try { await copyFile(path, backupPath(knowledgeDir, file)) } catch { } } - 写入本地文件lib/platforms/xianyu/playbook.js:157
await writeFile(path, next, 'utf8') - 写入本地文件lib/platforms/xianyu/playbook.js:168
try { await copyFile(path, backupPath(knowledgeDir, file)) } catch { } - 写入本地文件lib/platforms/xianyu/playbook.js:169
await writeFile(path, current.slice(0, first) + replace + current.slice(first + find.length), 'utf8') - 执行外部命令来自配置/变量lib/kernel/shop-mcp.js:107
child = spawn(this.command, this.args, {
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DSH 多平台 AI 客服工作台插件:Chrome 扩展接管闲鱼/抖音已登录页面,本地 WS 桥 + AI 自动回复(闸门+审计)+ 资料库(知识库)
README
由 DeepSeek 最新模型翻译生成dsh-customer-service
给 DeepSeek Harness (DSH) 用的多平台 AI 客服工作台插件:用 Chrome 扩展「寄生」在已登录的电商网页上(闲鱼 / 抖音),本地 WebSocket 桥收发消息, AI 自动回复(带闸门与审计),客服数据独立存储,并内置一个可检索的资料库(知识库)。
界面
以下截图使用虚构的演示数据(示例店铺 / 示例商品),不含任何真实店铺与客户信息。
客服中心:平台 → 账号卡 → 工作台
会话工作台:AI 回复带 AI 标记,人工可随时接管
资料库:项目 = 文档库 + 账号绑定
流程演示:客服中心 → 工作台 → 资料库
这个项目解决什么问题
电商客服的痛点不是「不会回」,而是:
1. 平台消息散落在多个后台,切来切去;
2. 回复要查产品、查店规、查物流,纯手工;
3. 想上 AI,又怕它乱承诺、乱降价、说错话。
这个插件把「平台消息 → 统一工作台 → AI 建议/自动回复 → 人工接管」串成一条本地链路,并且把「AI 能依据什么回答」收进一个可编辑的资料库(知识库),让 AI 只依据你的资料回答,没写的不瞎编。
展开完整文档(README 剩余 1 节)
dsh-customer-service 给 DeepSeek Harness (DSH) 用的多平台 AI 客服工作台插件:用 Chrome 扩展「寄生」在已登录的电商网页上(闲鱼 / 抖音),本地 WebSocket 桥收发消息, AI 自动回复(带闸门与审计),客服数据独立存储,并内置一个可检索的资料库(知识库)。 界面 以下截图使用虚构的演示数据(示例店铺 / 示例商品),不含任何真实店铺与客户信息。 客服中心:平台 → 账号卡 → 工作台 会话工作台:AI 回复带 AI 标记,人工可随时接管 资料库:项目 = 文档库 + 账号绑定 流程演示:客服中心 → 工作台 → 资料库 这个项目解决什么问题 电商客服的痛点不是「不会回」,而是: 1. 平台消息散落在多个后台,切来切去; 2. 回复要查产品、查店规、查物流,纯手工; 3. 想上 AI,又怕它乱承诺、乱降价、说错话。 这个插件把「平台消息 → 统一工作台 → AI 建议/自动回复 → 人工接管」串成一条本地链路,并且把「AI 能依据什么回答」收进一个可编辑的资料库(知识库),让 AI 只依据你的资料回答,没写的不瞎编。 功能 消息链路 - 闲鱼、抖音(含抖音来客)双平台适配器,统一「平台 → 账号卡 → 工作台」界面 - Chrome MV3 扩展接管已登录页面:不碰登录、不存 cookie,所有请求由真人页面发出 - 本地 WebSocket 桥(默认 127.0.0.1:8765/8766)+ 配对码握手,多账号/多浏览器 Profile 各自连接 - 收消息、人工回复、发图、未读/人工接管、风控告警 AI 客服 - AI 自动回复默认关闭,面板显式开启后生效 - 9 道闸门:默认关 / 幂等 / 人工优先 / 静默期 / 最小间隔 / 红线 / 结构化输出 / 回读校验 / 审计 - 每次回复都记录:依据的资料、调用的模型、闸门判定、是否转人工 - 「AI 测试」沙箱:不发送、不落会话、不写审计,可看模型原始输出 资料库(知识库) - 项目 = 资料 + 账号绑定;同一平台多账号可绑不同项目 - Markdown 知识文件,按需检索拼 prompt(关键词检索,零外部依赖) - 每个项目一份 AGENTS.md 规则文件,AI 回复前最先读 - 产品表模板、店规模板、话术模板,支持从 Excel 导入产品 - 面板内可直接编辑/新建/移动文档,外部改文件索引自动重建 闲鱼运营工具(可选,按需启用) - 订单 / 交易 / 商品 / 找品 / 发品 / 读页面 / 万能 mtop - 产品库、客户档案、采集库三套独立存储 - 自动交付(付款后秒发网盘)、曝光体检、话术沉淀 架构 ┌─────────────── 真实浏览器(你已登录账号的 Chrome)───────────────┐ │ goofish.com / douyin.com 页面 │ │ ├─ injected.js(MAIN world)hook 页面 WebSocket,截消息帧 │ │ └─ content.js(隔离世界)转发 + 执行 DOM/mtop 动作 │ │ background.js(MV3 SW):维持到本地桥的 WS、配对、保活 tab │ └───────────────────────────┬──────────────────────────────────────┘ │ ws://127.0.0.1:<port>/ws(配对码握手) ┌───────────────────────────▼──────────────────────────────────────┐ │ DSH 插件(Node,进程内) │ │ lib/kernel/ WS 桥 · 存储 · AI 闸门 · 资料库 · 路由 · 运行时 │ │ lib/platforms/ 闲鱼适配器 / 抖音适配器(帧解析、发送通道、工具)│ │ lib/client.js 侧边栏面板:平台卡 → 账号工作台 → 对话 │ └──────────────────────────────────────────────────────────────────┘ 数据只落本地 $DSH_HOME/dsh-cs/,不写 DSH 会话列表、不上传任何地方。 目录结构 dsh-customer-service/ ├─ lib/ │ ├─ index.js Host 半装配:kernel 启动 + 平台注册 + 路由 + AI 运行时 │ ├─ client.js Browser 半:客服中心面板 │ ├─ kernel/ 公共内核:bridge/store/ai/library/routes/runtime... │ └─ platforms/ │ ├─ xianyu/ 闲鱼适配器(帧解析、发送通道、31 个 mtop 工具、三类存储) │ └─ douyin/ 抖音/来客适配器(protobuf 编解码、来客 DOM 自动化) ├─ extension/ │ ├─ xianyu/ 闲鱼 Chrome MV3 扩展 │ └─ douyin/ 抖音 Chrome MV3 扩展 ├─ docs/ 设计文档、运维手册、知识库模板 ├─ test/ 单元 + 契约 + 端到端桩测试(81 个) └─ cordis.patch.yml DSH 插件配置 快速开始 0. 前置 - Node.js ≥ 22 - 已安装并运行 DeepSeek Harness (DSH)(开发与截图验证环境:0.2.1-rc.2) - Chrome(用来加载扩展并保持账号登录) - 一份可用的 LLM 配置(DSH 里已配好模型) 1. 安装插件 在 DSH 的插件管理器里,以本地 bundle 方式安装本仓库目录(target 指向仓库根目录),或把本目录加入 DSH profile 的依赖。安装后 DSH 侧边栏会出现「客服中心」入口。 插件默认配置见 cordis.patch.yml: - 闲鱼桥端口 8765,抖音桥端口 18766(只装这一个插件的话,可改成 8766) - ai.enabled: false:AI 自动回复默认关闭,需在面板里显式开启 - 数据目录默认 $DSH_HOME/dsh-cs/ 2. 加载扩展 1. Chrome 打开 chrome://extensions,开启右上角「开发者模式」 2. 「加载已解压的扩展程序」→ 选择 extension/xianyu(闲鱼)和/或 extension/douyin(抖音) 3. 在同一个 Chrome 里登录对应平台账号 3. 配对 1. 打开 DSH 客服中心面板,复制配对码(也在 $DSH_HOME/dsh-cs/pair-code-.txt) 2. 点扩展图标 → 填桥地址 127.0.0.1、端口(闲鱼 8765 / 抖音 18766)、配对码 → 保存并连接 3. 扩展徽标显示 ON 即连接成功;打开消息页开始收消息 4. 配置 AI 1. 面板「AI」按钮 → 选模型、开启自动回复(二次确认) 2. 面板「AI 设置」确认读到知识库字数 3. 用「AI 测试」沙箱验证回复质量,再放开自动回复 5. 建资料库 1. 侧边栏「资料库」→ 新建项目(如"示例店铺") 2. 放 Markdown:AGENTS.md(规则)、产品/产品表.md、店规速查.md、话术.md - 模板见 docs/knowledge-templates/ - 产品表可用 scripts/import_products.py 从 Excel 导入 3. 在「客服中心 → 账号卡」绑定项目:AI 回复时按「账号 → 项目」取资料 4. 改文件即生效(约 60s 内或下次检索自动重建索引) 配置 cordis.patch.yml 关键项: | 配置 | 说明 | | ports.xianyu / ports.douyin | 本地桥端口 | | dataDir | 数据目录,空 = $DSH_HOME/dsh-cs | | routePrefix | 面板 HTTP 路由前缀(带鉴权) | | ai.enabled / ai.model | AI 自动回复总开关与模型 | | notify. | 可选 webhook 通知(出单/催货/待评价/风控) | | playbook. | 可选话术沉淀(自动复盘写回 knowledge) | 环境变量(可选): | 变量 | 作用 | | DSH_HOME | DSH 数据根目录 | | DOUYIN_CS_SHOP_MCP | off 关闭店铺 MCP 集成 | | DOUYIN_CS_SHOP_MCP_SCRIPT 等 | 接入自定义 stdio MCP 服务(只读) | 开发与测试 npm test # 81 个测试:内核/契约/适配器/资料库/AI 闸门/端到端桩 node scripts/fake-ext-e2e.mjs # 假扩展端到端联调(不需要真浏览器) 测试零外部依赖,直接 node --test 运行。 安全与合规(请务必阅读) - 本插件只监听本机回环地址,配对码握手,不向任何第三方服务器上报数据; - 扩展不接管登录、不保存账号密码/cookie,只是复用你浏览器里已登录的页面; - 请只用于你自己的账号,不要用于骚扰、刷屏、批量营销或任何违反平台规则的行为; - 插件依赖对平台网页结构与私有协议的适配,属于"非官方客户端"形态,可能违反平台用户协议,使用与分发风险自负;平台改版可能导致功能失效; - 仓库内不包含任何真实店铺数据、账号 ID、密钥或用户信息(示例均为占位)。 已知限制 - 依赖页面结构/私有协议:平台改版后需更新 extension/ 与对应适配器; - 浏览器完全退出时收不到消息(扩展能力边界); - 同一 $DSH_HOME/dsh-cs 只允许一个 DSH 实例写; - 资料库检索目前是关键词检索(无向量检索),超大知识库需要自行拆分。 文档 | 文档 | 内容 | | docs/OPERATIONS.md | 运维手册:日常操作、备份、联调清单 | | docs/KNOWLEDGE-LIBRARY-DESIGN.md | 资料库设计:项目 / 账号绑定 / 检索 | | docs/AGENTS-AND-KNOWLEDGE-RULES.md | AGENTS 规则层与知识口径 | | docs/M3-AI-AND-NOTIFY.md | AI 闸门、自动交付、通知 | | docs/M4-TOOLS.md | 闲鱼工具层清单 | | docs/M1-INTERFACES.md | 内核与适配器接口 | | docs/knowledge-templates/ | 产品表 / 店规 / 话术 模板 | 致谢 - 协议与实现思路参考了作者的早期内部实现(Hermes 插件)与 DSH 官方插件规范; - 感谢 DSH 提供的插件运行时与 UI 扩展点。 License MIT
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
dongdonga11/dsh-customer-service
接管闲鱼抖音消息,用资料库约束 AI 自动回复并支持人工接管
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,928已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4
这是你的仓库?认领条目