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

语音嫁接 Akillll-DuoHe/voice-grafting

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

为本地助手接入听说能力并桥接 QQ 聊天

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

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · platform
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 3 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

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

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

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

读写/删除本地文件发起外部网络请求
查看扫描证据(共 22 处,展示前 22 条)
  • 读取本地文件
    shared/local-memory.mjs:10
    const parse=p=>JSON.parse(readFileSync(p,'utf8').replace(/^ FEFF/,''));
  • 写入本地文件
    shared/local-memory.mjs:13
    this.root=join(cwd,'qq-long-memory');this.now=now;mkdirSync(this.root,{recursive:true});
  • 读取本地文件
    shared/local-memory.mjs:14
    const file=join(this.root,'policy.json');this.policy={...memoryDefaults,...(existsSync(file)?parse(file):{}),...policy};
  • 读取本地文件
    shared/local-memory.mjs:17
    if(!existsSync(file))writeFileSync(file,JSON.stringify(this.policy,null,2),{flag:'wx'});
  • 写入本地文件
    shared/local-memory.mjs:17
    if(!existsSync(file))writeFileSync(file,JSON.stringify(this.policy,null,2),{flag:'wx'});
  • 读取本地文件
    shared/local-memory.mjs:44
    const history=existsSync(file)?parse(file).history??[]:[];
  • 写入本地文件
    shared/local-memory.mjs:90
    const summary=this.summarize(chat),id=randomUUID(),folder=join(this.root,createHash('sha256').update(chat).digest('hex').slice(0,20));mkdirSync(folder
  • 写入本地文件
    shared/local-memory.mjs:91
    const file=join(folder,'summary-'+this.now()+'-'+id+'.json');writeFileSync(file,JSON.stringify({summary,createdAt:this.now()},null,2),{flag:'wx'});
  • 读取本地文件
    shared/reply-preferences.mjs:31
    this.file=file;this.state=existsSync(file)?JSON.parse(readFileSync(file,'utf8').replace(/^ FEFF/,'')):{version:1,chats:{}};
  • 读取本地文件
    shared/reply-preferences.mjs:31
    this.file=file;this.state=existsSync(file)?JSON.parse(readFileSync(file,'utf8').replace(/^ FEFF/,'')):{version:1,chats:{}};
  • 写入本地文件
    shared/reply-preferences.mjs:40
    mkdirSync(dirname(this.file),{recursive:true});const tmp=this.file+'.tmp';writeFileSync(tmp,JSON.stringify(this.state,null,2),{mode:0o600});renameSync
  • 写入本地文件
    shared/reply-preferences.mjs:40
    mkdirSync(dirname(this.file),{recursive:true});const tmp=this.file+'.tmp';writeFileSync(tmp,JSON.stringify(this.state,null,2),{mode:0o600});renameSync
  • 写入本地文件
    shared/reply-preferences.mjs:40
    mkdirSync(dirname(this.file),{recursive:true});const tmp=this.file+'.tmp';writeFileSync(tmp,JSON.stringify(this.state,null,2),{mode:0o600});renameSync
  • 读取本地文件
    shared/song-library.mjs:6
    const read=p=>JSON.parse(readFileSync(p,'utf8').replace(/^ FEFF/,''));
  • 读取本地文件
    shared/song-library.mjs:36
    settings(){if(!existsSync(this.configFile))return null;let config=read(this.configFile);if(config.enabled!==true)return null;return config;}
  • 读取本地文件
    shared/song-library.mjs:47
    state(){if(!existsSync(this.stateFile))return {version:1,chats:{}};const state=read(this.stateFile);if(state.version!==1||!state.chats)throw Error('In
  • 发起网络请求
    shared/song-library.mjs:60
    const request=this.request(text,key);if(!request)return null;if(request.error)return {error:request.error};if(request.action==='list')return {action:'
  • 读取本地文件
    shared/song-library.mjs:94
    const stat=statSync(file);if(!stat.isFile()||stat.size<=0||stat.size>10*1024*1024||stat.size!==clip.playbackBytes)throw Error('Song file size mismatch
  • 读取本地文件
    shared/song-library.mjs:95
    if(hash(readFileSync(file))!==clip.playbackSHA256)throw Error('Song file fingerprint mismatch');
  • 写入本地文件
    shared/song-library.mjs:103
    mkdirSync(dirname(this.stateFile),{recursive:true});writeFileSync(this.stateFile+'.tmp',JSON.stringify(state,null,2),{mode:0o600});renameSync(this.sta
  • 写入本地文件
    shared/song-library.mjs:103
    mkdirSync(dirname(this.stateFile),{recursive:true});writeFileSync(this.stateFile+'.tmp',JSON.stringify(state,null,2),{mode:0o600});renameSync(this.sta
  • 写入本地文件
    shared/song-library.mjs:103
    mkdirSync(dirname(this.stateFile),{recursive:true});writeFileSync(this.stateFile+'.tmp',JSON.stringify(state,null,2),{mode:0o600});renameSync(this.sta
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

给 DeepSeek Harness(DSH)接入本地听说能力,并提供可独立使用的 QQ 桥。源码维护仓:两个离线包的干净源码、安装入口、文档与测试。

README

由 DeepSeek 最新模型翻译生成
语音嫁接 给 DeepSeek Harness(DSH)接入本地听说能力,并提供一个可独立使用的 QQ 桥。这里是后续修复、维护、构建发行包的源码仓。 从这里开始:按顺序拿 | 顺序 | 拿什么 | 在哪 | 大小 | | 1 | 源码与文档(先读一遍) | GitHub | Gitee | 约 3 MB | | 2 | 独立 QQ 桥离线包 | 两个仓的 Release 附件,或 百度网盘(提取码 jjsz) | 73 MB | | 3 | 通用声音包离线包 | 百度网盘(提取码 f9g2) | 25.67 GB | - 声音包整包超过平台单文件上限(GitHub 附件 2 GB、Gitee 单文件 100 MB),只能走网盘;下载后请核对对应 Release 里公布的 SHA256。 - 建议顺序:clone 源码 → 读 项目详细记录与维护总览 和两个产品的 README → 先装 QQ 桥 → 再按需装声音包。两个包都先跑「环境检查.cmd」,再跑「安装配置.cmd」。 - 源码仓不含模型和运行时;不下载离线包就得自己准备 Node/Python 与模型(模型来源见各包 LICENSES.md)。
展开完整文档(README 剩余 1 节)
语音嫁接

给 DeepSeek Harness(DSH)接入本地听说能力,并提供一个可独立使用的 QQ 桥。这里是后续修复、维护、构建发行包的源码仓。

从这里开始:按顺序拿

| 顺序 | 拿什么 | 在哪 | 大小 |
| 1 | 源码与文档(先读一遍) | GitHub | Gitee | 约 3 MB |
| 2 | 独立 QQ 桥离线包 | 两个仓的 Release 附件,或 百度网盘(提取码 jjsz) | 73 MB |
| 3 | 通用声音包离线包 | 百度网盘(提取码 f9g2) | 25.67 GB |

- 声音包整包超过平台单文件上限(GitHub 附件 2 GB、Gitee 单文件 100 MB),只能走网盘;下载后请核对对应 Release 里公布的 SHA256。
- 建议顺序:clone 源码 → 读 项目详细记录与维护总览 和两个产品的 README → 先装 QQ 桥 → 再按需装声音包。两个包都先跑「环境检查.cmd」,再跑「安装配置.cmd」。
- 源码仓不含模型和运行时;不下载离线包就得自己准备 Node/Python 与模型(模型来源见各包 LICENSES.md)。
- 声音包可精简:不唱歌删 models/vevo2,不用备选 TTS 删 models/qwen3-tts-1.7b-base;models/voxcpm2 与 runtime/ 不要删。

先看哪里

- 完整说明入口:项目详细记录与维护总览。
- 总体框架与嫁接原则:两条接入路线、各层职责。
- 声音素材、克隆、训练与唱歌:用了什么,使用者提供什么,如何一步步做。
- 本地记忆与上下文规则:压缩、换会话、检索和预算。
- 版本维护、构建与发布:以后在这里改代码。
- 施工记录与验证状态:已完成什么,哪些还要实测。
- 分发清单与隐私边界:哪些能上传,哪些必须留在本机。
- 视频文案要点:对外讲解的简版提纲。

两个包

| 包 | 用途 | 当前插件版本 |
| 通用声音包 packages/voice | 给已有 DSH/平台桥增加本地 ASR、TTS 和可选歌声转换、训练工具 | 0.3.0 |
| 独立 QQ 桥 packages/qq-bridge | 自备角色 QQ,通过 NapCat / OneBot 接 DSH;可再接通用声音包 | 0.8.0-offline.3 |

不包含虚拟形象和嘴型同步。其他人的平台桥可以接声音服务,但需要按其接口做适配;安装声音包不会自动改写每一种第三方桥。

目录

语音嫁接/ packages/ 两个发行产品的源码、安装入口、依赖说明 shared/ 记忆、点歌、回复偏好的共同源码 scripts/ 同步、检查、测试、构建、版本维护工具 tests/ 无真实账号、无模型推理的回归测试 docs/ 详细记录、原则、维护方法、发行记录 VERSION.json 两个组件的版本表维护.ps1 本机维护入口发行包/ 今天已完成的两个 ZIP 和校验文件(Git 忽略)本地资源/ 干净的模型、便携运行环境、发行基线(Git 忽略)本机私有/ 私人规则和历史施工记录(Git 忽略)构建产物/ 以后生成的候选包(Git 忽略)

本仓公开的“规则”是通用技术规则;角色人设、账号、聊天、参考声线和私人歌曲不进入源码仓或公共发行包。不要把整个根目录直接打包上传。只上传 Git 跟踪的公开文件;大体积离线包通过独立附件发布。

开始维护

在本目录打开 PowerShell:

.\维护.ps1 test .\维护.ps1 check .\维护.ps1 build-code

需要 Node 24.20 或更新版本,以及 Python 3.11 或更新版本。维护入口优先使用本机资源目录中已带的便携解释器;源码仓本身不依赖全局 npm 安装。test 只跑离线测试,不登录 QQ、不调用模型、不生成媒体。

build-code 只验证源码装包,不是完整离线包。真正的完整离线构建使用 build-offline,会从本地资源复制约数十 GB 的依赖和模型。此命令不会启动模型。详细步骤见版本维护文档。

当前基线

2026-11-01 两个 ZIP 保留原始内容,发行清单在 发行历史。本次整理不替换原系统正在运行的部署目录;运行现场与新源码仓之间的关系,记录在本机私有交接文件中。

自有源码按 MIT 授权;第三方桥、模型、运行库各自保留原许可。尤其 Vevo2 权重和 NapCat 有使用、分发限制,不能把整个合集称为无限制商用。详见两个产品的 LICENSES.md。
预览分享卡片长什么样 ↓Akillll-DuoHe/voice-grafting
分享 · DeepSeek Harness Hub
Akillll-DuoHe/voice-grafting

为本地助手接入听说能力并桥接 QQ 聊天

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部