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 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
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.comindex.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.cnindex.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.cnindex.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
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
cheems135/dsh-qq-bridge
QQ(NapCat / OneBot 11)桥接 DeepSeek Harness,让你在 QQ 里和 harness 聊天,还带完整管理面板
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,778已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,110已汉化DeepSeek 客户端
70.9
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,031已汉化DSH
70.7