🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

QQ 桥接 cheems135/dsh-qq-bridge

DeepSeek Harness
cheems1358 天前有提交已提供中文文档扫描:含敏感能力

QQ(NapCat / OneBot 11)桥接 DeepSeek Harness,让你在 QQ 里和 harness 聊天,还带完整管理面板

32.8/100
综合分
4
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add cheems135/dsh-qq-bridge
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
dsh 原生插件 · platform
装得上吗
本站尚未做安装检查
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 8 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 256 处,展示前 50 条)
  • 写入本地文件
    index.js:213
    mkdirSync(dirname(file), { recursive: true });
  • 写入本地文件
    index.js:216
    if (bytes > 2 * 1024 * 1024) writeFileSync(file, '');
  • 读取本地文件
    index.js:218
    bytes = statSync(file).size;
  • 写入本地文件
    index.js:223
    appendFileSync(file, line);
  • 读取本地文件
    index.js:811
    if(existsSync(quietReloadFile))unlinkSync(quietReloadFile);
  • 删除本地文件
    index.js:811
    if(existsSync(quietReloadFile))unlinkSync(quietReloadFile);
  • 读取本地文件
    index.js:903
    if (!existsSync(file)) return { version: 1, chats: {} };
  • 读取本地文件
    index.js:904
    const parsed = JSON.parse(readFileSync(file, 'utf8'));
  • 写入本地文件
    index.js:919
    mkdirSync(dirname(cfg.stateFile), { recursive: true });
  • 写入本地文件
    index.js:921
    writeFileSync(tmp, JSON.stringify(state, null, 2));
  • 写入本地文件
    index.js:922
    renameSync(tmp, cfg.stateFile);
  • 读取本地文件
    index.js:969
    try{const parsed=JSON.parse(readFileSync(personaImageManifest,'utf8'));for(const[id,item]of Object.entries(parsed||{}))if(/^[a-zA-Z0-9_-]{1,100}$/.tes
  • 读取本地文件
    index.js:972
    function personaImageInfo(id){const entry=personaImages[id];return entry&&existsSync(join(personaImageDir,entry.file))?{...entry,personaId:id}:null;}
  • 删除本地文件
    index.js:988
    if(before&&before.file!==next?.file&&!Object.values(updated).some(e=>e.file===before.file))try{unlinkSync(join(personaImageDir,before.file));}catch{}
  • 删除本地文件
    index.js:1249
    unlinkSync(startupScriptPath);
  • 删除本地文件
    index.js:1742
    unlinkSync(join(voiceDir, name));
  • 删除本地文件
    index.js:1749
    unlinkSync(join(messagesDir, name));
  • 删除本地文件递归
    index.js:1773
    rmSync(from, { recursive: true, force: true });
  • 发起网络请求
    index.js:1824
    const response = await fetch(`${base}/search?q=${encoded}&format=json&language=zh-CN`, {
  • 发起网络请求
    index.js:1839
    const response = await fetch(
  • 请求外部主机api.duckduckgo.com
    index.js:1853
    const response = await fetch(`https://api.duckduckgo.com/?q=${encoded}&format=json&no_html=1&skip_disambig=1`, {
  • 发起网络请求
    index.js:1853
    const response = await fetch(`https://api.duckduckgo.com/?q=${encoded}&format=json&no_html=1&skip_disambig=1`, {
  • 发起网络请求
    index.js:1868
    const response = await fetch(template.replace(/ q /g, encoded), { signal: AbortSignal.timeout(15000) });
  • 执行外部命令固定命令
    index.js:1906
    const child = spawn('powershell.exe', ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-EncodedCommand', encoded], {
  • 执行外部命令来自配置/变量
    index.js:1943
    const child = spawn(python, ['-c', script, text, voice, file, prosody.rate||'+0%',prosody.pitch||'+0Hz',prosody.volume||'+0%'], {
  • 发起网络请求
    index.js:1996
    const response = await fetch(url, { signal: AbortSignal.timeout(60000) });
  • 发起网络请求
    index.js:2109
    const response = await fetch(url, { signal: AbortSignal.timeout(15000), redirect: 'follow' });
  • 请求外部主机api.siliconflow.cn
    index.js:2866
    const response = await fetch('https://api.siliconflow.cn/v1/images/generations', {
  • 执行外部命令来自配置/变量
    index.js:2900
    spawnSync(pythonExe(), [cropper, file], { windowsHide: true, stdio: 'ignore', timeout: 20000 });
  • 执行外部命令固定命令
    index.js:4327
    child = spawn('cmd.exe', ['/d', '/s', '/c', '""' + launcher + '" -q ' + qq + ' < nul"'], {
  • 执行外部命令固定命令
    index.js:4333
    child = spawn('powershell.exe', ['-NoLogo', '-NoProfile', '-ExecutionPolicy', 'Bypass', '-Command', command], {
  • 执行外部命令固定命令
    index.js:4417
    const result = spawnSync('powershell.exe', ['-NoLogo', '-NonInteractive', '-NoProfile', '-Command', script], {
  • 请求外部主机api.siliconflow.cn
    index.js:4976
    const response = await fetch('https://api.siliconflow.cn/v1/audio/transcriptions', {
  • 读取本地文件
    video-reader.js:20
    function status(){const c=getConfig()||{};return{available:!!c.ffmpegPath&&existsSync(c.ffmpegPath),maxBytes:MAX_BYTES,maxFrames:4,source:'ffmpeg-loca
  • 读取本地文件
    video-reader.js:36
    const file=await getPlatformFile(id);if(!file||!existsSync(file))throw Error('NapCat 没有返回已下载的视频');
  • 读取本地文件
    video-reader.js:37
    if(statSync(file).size>MAX_BYTES)throw Error('视频超过 32MB');bytes=readFileSync(file);
  • 读取本地文件
    video-reader.js:37
    if(statSync(file).size>MAX_BYTES)throw Error('视频超过 32MB');bytes=readFileSync(file);
  • 写入本地文件
    video-reader.js:41
    dir=join(getCacheDir(),'videos','sample-'+randomUUID());mkdirSync(dir,{recursive:true});const input=join(dir,'input.mp4');owned.push(input);writeFileS
  • 写入本地文件
    video-reader.js:41
    dir=join(getCacheDir(),'videos','sample-'+randomUUID());mkdirSync(dir,{recursive:true});const input=join(dir,'input.mp4');owned.push(input);writeFileS
  • 读取本地文件
    video-reader.js:53
    if(statSync(file).size>2*1024*1024)throw Error('视频帧过大');
  • 读取本地文件
    video-reader.js:54
    frames.push({at:Math.round(times[i]*10)/10,part:{type:'image',mediaType:'image/jpeg',name:'video-frame-'+i,data:readFileSync(file).toString('base64')}
  • 删除本地文件
    video-reader.js:58
    for(const file of owned)try{unlinkSync(file);}catch{}
  • 删除本地文件
    video-reader.js:59
    if(dir)try{rmdirSync(dir);}catch{}
  • 读取本地文件
    humanism-adapter.js:26
    function status(){const r=runtime();let version='';try{version=JSON.parse(readFileSync(join(r.humanismPackagePath,'package.json'),'utf8')).version||''
  • 读取本地文件
    humanism-adapter.js:26
    function status(){const r=runtime();let version='';try{version=JSON.parse(readFileSync(join(r.humanismPackagePath,'package.json'),'utf8')).version||''
  • 发起网络请求
    bridge-features.js:121
    const req=transport.request(u,{method:'GET',agent:false,signal,headers:{'user-agent':'DSH-IM-Bridge/1.8 LinkReader','accept':'text/html,application/xh
  • 发起网络请求
    napcat-login-client.js:51
    request = (parsed.protocol === 'https:' ? https : http).request(parsed, {
  • 发起网络请求
    vendor/minisearch.js:394
    fetch(key, initial) {
  • 发起网络请求
    vendor/minisearch.js:1763
    const indexData = this._index.fetch(term, createMap);
  • 发起网络请求
    vendor/minisearch.js:1783
    const indexData = this._index.fetch(term, createMap);
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
涉及外部主机:api.duckduckgo.com、api.siliconflow.cn

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
dsh-im-bridge · QQ ⇄ DeepSeek Harness 把 DeepSeek Harness 接到 QQ 上:用 NapCat(OneBot 11)当网关,你的 DSH 会话就是她的脑子,QQ 是她的嘴。附带一套完整的管理面板,人设、白名单、表情包、语音、记忆、模型全部可视化配置。 她在 QQ 里跟你聊天时,背后是一个真正的 DSH Session —— 同一套人设、同一套记忆、同一套工具能力,只是把出口从浏览器换成了 QQ。 它是什么 - 双向桥接:NapCat 的 WebSocket → 桥接 → sessionController 创建/续聊 DSH 会话 → 回复拆成多条发回 QQ - 像人一样说话:回复按 ||| 或空行拆成多个气泡,间隔 0.6–2.8 秒,模拟打字节奏 - 一个面板管全部:18 个页面、5 个分组(工作台 / 消息中心 / 角色与互动 / 素材与表达 / 系统设置) 这次更新(v1.19) - 图像生成:硅基流动(Kolors)与 RunningHub(工作流 / AI App)两种后端,参数与 Key 在面板里配
展开完整文档(README 剩余 1 节)
dsh-im-bridge · QQ ⇄ DeepSeek Harness

把 DeepSeek Harness 接到 QQ 上:用 NapCat(OneBot 11)当网关,你的 DSH 会话就是她的脑子,QQ 是她的嘴。附带一套完整的管理面板,人设、白名单、表情包、语音、记忆、模型全部可视化配置。

她在 QQ 里跟你聊天时,背后是一个真正的 DSH Session —— 同一套人设、同一套记忆、同一套工具能力,只是把出口从浏览器换成了 QQ。

它是什么

- 双向桥接:NapCat 的 WebSocket → 桥接 → sessionController 创建/续聊 DSH 会话 → 回复拆成多条发回 QQ
- 像人一样说话:回复按 ||| 或空行拆成多个气泡,间隔 0.6–2.8 秒,模拟打字节奏
- 一个面板管全部:18 个页面、5 个分组(工作台 / 消息中心 / 角色与互动 / 素材与表达 / 系统设置)

这次更新(v1.19)

- 图像生成:硅基流动(Kolors)与 RunningHub(工作流 / AI App)两种后端,参数与 Key 在面板里配
- 语音重做:引擎扩到甜妹(edge-tts)/ MiniMax / Breeze TTS 2(官方或自建 vLLM-Omni)/ 自定义 HTTP / SAPI,并新增语音消息转文字(硅基流动 SenseVoice)
- 多模态输入:收到的视频会抽帧看画面,链接会抓正文,都带读取状态标注
- 更像人:情绪系统、生活记忆与日历、说完补一句、沉默追问、号主钱包感知
- 上下文与学习:生图 / 语音 / 检索前先回看最近几条消息,减少指代错位;从对话里攒「语言与知识观察」,只作证据、不训练权重
- 运维:登录页可扫码登录 / 登出 / 重启 NapCat,新增备份导出与合并恢复、工具页与日志页
- 面板重构:从平铺 10 页改成 5 组 18 页,角色档案可按联系人或群单独配置

⚠ 风险声明(务必先读)

本插件通过 NapCat 接管真实 QQ 账号,属于非官方自动化,存在被风控、限制甚至封号的风险。

- 风险随行为强度上升:频繁改资料、自动发说说、主动给多人发消息属于高危操作
- 建议先用小号;自主行为的每日额度尽量调低;出现验证码或异常登录提示立刻停用
- 账号被封、内容发错、被他人投诉等后果由使用者自行承担

自主行为

她不只是被动回复,还能按规则自己做决定:

- 主动找人:某个会话超过 2 小时没动静 → 搭一句(每日上限可配)
- 发 QQ 空间:饭点 / 下班 / 深夜,有额度时发一条生活化说说(走 cookie + g_tk,非官方接口)
- 改个性签名:心情不等同签名时改一句(每日上限可配)

实现上分两层:代码按规则判断该不该动,模型只负责写内容,所以行为可预测、可测试。面板「自主」页有总开关、每类动作开关、每日额度、活跃时段、最小间隔、最近动作日志和「紧急停止」。

- 「想法」页:每次回复后她会复盘「我当时在想什么」,加上自主决策的理由,形成一条思考时间线
- 「模拟一天」:按五个时间点各判断一次(不执行),30 秒看出她一天会不会动
- 内容底线:发送前过敏感词表 + 长度上限 + 禁止链接

功能

聊天与人格

- 内置一套人设预设(whale 日常口语),可直接在面板里改文本,保存即生效
- 多套自定义人设:名字 + 提示词,支持导入导出;「角色档案」可给单个联系人或群指定人设、模型与音色
- 「底层性格」:排在所有人设之前的一层通用规则(情绪安抚、按时间问候、看图不描述画面),可编辑
- 情绪系统:心情随对话和事件变化、会衰减,并影响下一轮的说话方式
- AI 生成人设:一句描述 → 模型写出提示词并入库
- 试聊预览:不经过 QQ,直接用人设提示词问一次模型,看她的语气对不对

记忆

- 按轮数自动压缩:聊到 N 轮就把最近对话压成一小段「给以后的自己看」的记忆,然后换新会话,记忆带进新会话
- 本地全文检索(MiniSearch)按需召回,不上传、不依赖外部记忆服务
- 生活记忆与日历:她会记得今天大概在做什么,并按日期归档
- 记忆文件和缓存目录都可以挪位置,换路径不丢配置
- 面板里能看到每条记忆的生成时间,可单独重压或清除

素材:表情包与照片

- 本地表情库:上传、分组(勾选批量分组)、启用/停用
- 她会自己在合适的时候发图(情绪词触发),也会用 [表情包:名字] 精确指定
- [表情包:搜 关键词]:手边没有合适的图时联网搜图、下载、发出去
- 「素材采集」页:按关键词、网页或参考图找新素材,可批量入库
- 「照片来源」页:搜图或生成,设定她的外观与照片偏好

语音

- [语音] 标记 → 合成语音消息;面板可试听、对比不同音色
- 引擎:甜妹(edge-tts,免费)/ MiniMax(情绪增强)/ Breeze TTS 2(官方 API 或自建 vLLM-Omni)/ 自定义 HTTP TTS(GPT-SoVITS、CosyVoice 之类返回音频字节即可)/ Windows SAPI 兜底
- 听语音:你发的语音消息会转成文字再进 prompt(硅基流动 SenseVoice,需要在设置里填同样的 Key)

图像生成

- 两种后端:硅基流动(默认 Kwai-Kolors/Kolors)与 RunningHub(跑工作流或 AI App,可上传参考图)
- 参数:尺寸、步数、CFG、种子、去水印,Key 与工作流 ID 都在面板「图像生成」页
- 生成结果直接作为消息发回,也可以给她当参考形象

视频与链接

- 收到 QQ 视频会抽几张带时间点的画面,回答只依据真正读到的画面,读不到的部分会说明
- 收到的链接会抓正文再回答,抓取失败会标注「未读取」

查资料

- [查:词] → 桥接去查 → 用她的口吻转述
- 搜索引擎可选:DSH 自带 / 维基百科 API / DuckDuckGo API / 自建 SearXNG / 自定义 URL 模板;主引擎失败自动回退
- 以「查一下 X」开头的消息会直接触发查询,不经过模型

号主模式

- 指定一个或多个号主 QQ,号主说话时她会获得额外权限:
- [发送:QQ号|内容] 给白名单里某人发消息
- [群发:内容] 群发
- [定时:分钟|QQ号|内容] 定时发送(最长 24 小时)
- 代发内容会在发送前清洗掉「号主让我转告」这类归属信息,对方看到的就是她在说话
- 三项权限可分别关闭;目标必须在白名单内
- 号主余额 / 额度低于阈值时她可以提一句,非号主看不到金额

模型与成本

- 智力档位:省 / 标准 / 高 / 最高(对应 off / low / high / max thinking 深度),切换会重开会话
- 也可以直接在 QQ 里发 /档位 max 切换
- 每个会话可单独指定模型,其余跟随全局
- 面板按 DeepSeek 峰谷价实时记花费,能看到今日累计与单轮成本

运维

- 连接页:扫码登录、登出、重启 NapCat、查看连接与自恢复状态
- 监听页:收发记录,按对话分组、按方向筛选、每 2 秒自动刷新、消息图片可直接看
- 存储:日志/监听历史/语音/表情包可以整体迁到别的盘,占用按类统计,支持一键清理
- 备份:导出人设、记忆与素材;恢复前先预览再合并
- 日志页:运行记录与错误堆栈
- 本地快速登录:面板点一下拉起 NapCat(隐藏窗口、无需 UAC),可选「开机自动登录」
- 连接可随时停用(保留配置),恢复后自动重连

安装

前置:

1. 已装 DeepSeek Harness(本插件作为 bundle 加载)
2. 已装 NapCat,并在 NapCat 里开启 WebSocket 服务端(记下端口和 token)
3. 一个能登录的 QQ 小号

安装本插件(在 DSH 的插件管理里):

dsh plugin --profile <你的 profile> add /path/to/this/repo

装好后打开 设置 → QQ 桥接,按面板引导:

1. 填 WebSocket 地址和 token(默认 ws://127.0.0.1:3001)
2. 「联系人」页把自己的 QQ 加进白名单,并设为号主
3. 「连接」页点「本地快速登录」拉起 NapCat(或用已有的 NapCat)
4. 发一条消息,看到回复就通了

配置

cordis.patch.yml 里的 config 是初始配置;面板改过之后以 profile 的 settings.json 为准。

| 键 | 说明 |
| wsUrl | NapCat 的 OneBot 11 WebSocket 地址 |
| accessToken | NapCat 里设置的 token,没有就留空 |
| allowUsers | 允许私聊的 QQ 号;留空谁都不理 |
| allowGroups / groupRequireAt | 允许的群;群里是否必须 @ |
| cwd | 会话工作目录,省略则用 DSH 当前目录 |
| agentPreset | 新人设用哪个 preset |
| presetRev | 人设文本改了要 +1,才会换新会话 |
| model | Session 级模型路由(provider / model) |
| maxReplyChars | 单条消息上限,超过拆条 |
| greeting | 上线后主动打招呼的内容,留空不发 |
| proactive | 主动找你的频率、时段与每日上限 |
| silence | 你不吭声时她追问的间隔与次数 |
| afterthought | 说完隔一会儿再补一句的概率与间隔 |
| selfTest / selfTestPrompt | 用临时会话自检一次,结果写日志 |

面板里还能配:图像生成与语音引擎、语音识别 Key、搜索引擎、情绪与生活记忆、号主与权限、记忆压缩与存放位置、缓存位置、开机自启。

环境变量

| 变量 | 作用 |
| DSH_PRESET_DIR | 「查看/编辑预设人设文本」从哪个目录找 *-preset/cordis.patch.yml;不设则该项不可用(其它功能不受影响) |
| DSH_IM_PYTHON | edge-tts / 图片后处理用的 Python 解释器;不设则用 PATH 里的 python |

QQ 里能用的指令

| 指令 | 作用 |
| /new | 结束当前会话,下条消息开新会话(丢上下文,保留记忆) |
| /cancel | 中止当前正在跑的一轮 |
| /帮助 | 列出号主能在聊天里改的设置 |
| /档位 省\|标准\|高\|最高 | 切智力档位并重开会话 |
| /语音 on\|off、/表情 on\|off、/主动 on\|off | 开关语音、表情包、主动找你 |
| /白名单 加\|删 QQ号 | 增删私聊白名单 |
| /搜索 host\|wikipedia\|ddg\|searx | 切换搜索引擎 |
| /记忆 压缩\|清除 | 立即压缩或清空记忆 |
| /状态 | 看一眼连接、档位、人设与会话状态 |
| [表情包:名字] / [表情包:搜 关键词] | 发表情包 / 联网找图 |
| [语音] … | 合成语音发出来 |
| [查:词] | 查资料再用她的话答 |

([发送:…] / [群发:…] / [定时:…] 仅号主可用。)

已知限制

- 一次只连一个机器人账号:多账号是切换,不是同时在线
- 部分能力是 Windows 向的:隐藏启动 NapCat、开机自启、SAPI 兜底音色;其它平台能跑但用不了这几项
- 语音识别与图像生成要填第三方 Key(硅基流动 / RunningHub),不填就只有本地能力
- 视频只看抽样画面、不解析音轨;没抽到的地方她会说不知道
- 记忆是「总结 + 本地检索」,不是向量库;压过头的细节找不回来

安全

- 白名单为空时她不理任何人,这是默认状态
- 号主指令的目标必须白名单内,否则直接拒绝并记日志
- 面板路由挂在 DSH 的本地 Web 服务上,只监听本机
- 第三方 Key 保存在本机 profile 的 settings.json 里,不会随面板接口回传明文

DeepSeek Harness 的 QQ(NapCat / OneBot 11)桥接插件。它把 DSH 会话变成 QQ 聊天伙伴:人设预设、按联系人配置的配置档、情绪状态、支持全文召回的本地记忆、带分组和网络图片搜索的表情包库、图片来源、TTS 语音消息(edge-tts / MiniMax / Breeze / 自定义 HTTP / SAPI),外加对收到语音的语音转文字、通过 SiliconFlow 或 RunningHub 生成图片、抽帧视频画面、可插拔引擎的网络查询、仅限主人的中继命令,以及 18 页管理面板,带实时监控、备份和成本追踪。

把它作为 DSH bundle 安装,指向你的 NapCat WebSocket,把自己加入白名单——然后就能从 QQ 和你的 harness 对话了。

License

MIT
预览分享卡片长什么样 ↓cheems135/dsh-qq-bridge
分享 · DeepSeek Harness Hub
cheems135/dsh-qq-bridge

QQ(NapCat / OneBot 11)桥接 DeepSeek Harness,让你在 QQ 里和 harness 聊天,还带完整管理面板

回到顶部