From 76cef92cb2f0b229468d90a3129e8c102ae1ff18 Mon Sep 17 00:00:00 2001 From: hrz <1710360675@qq.com> Date: Tue, 27 Oct 2026 21:09:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E6=80=A7=E8=83=BD=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E5=92=8C=E5=A3=B0=E7=BA=B9=E8=AF=86=E5=88=AB=E4=B8=A4?= =?UTF-8?q?=E4=BB=BD=E6=96=87=E6=A1=A3=E9=87=8C=E8=B7=9F=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=AF=B9=E4=B8=8D=E4=B8=8A=E7=9A=84=E5=8D=81=E4=BA=8C=E5=A4=84?= =?UTF-8?q?=20(#3502)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 修正两份操作文档里跟代码对不上的地方 性能测试那份把配置路径写错、没提要先装依赖,步骤里少了非流式语音合成,流式语音合成要配哪些供应器也没写;声纹识别那份的重启命令指向两个不同的编排文件,有两句话连写三遍,编号也乱了,示例漏了相似度阈值。逐条改到跟代码一致。 * 把性能测试文档的说明改得跟代码一致 供应器表里两家的写法与代码相反,改成如实描述;步骤清单补回流式语音识别; 示例里的视觉模型段改成能跑通的形态;声纹文档两个重复的标题改掉一个。 * 性能测试文档的说法跟Linkerai跳过行为对齐 它没配就整项跳过,不再算进报错后跳过那一类。与#3510的行为对齐。 * 性能测试文档改对缺供应器时的记法 不是跳过,是报错后记成失败,结果表里多一行。带守卫的那几家才是整项跳过。 * 强调易错处 --- docs/performance_tester.md | 49 ++++++++++++++++++++++++++++++++-- docs/voiceprint-integration.md | 14 +++++++--- 2 files changed, 57 insertions(+), 6 deletions(-) diff --git a/docs/performance_tester.md b/docs/performance_tester.md index 899e54e4d..1dadfad73 100644 --- a/docs/performance_tester.md +++ b/docs/performance_tester.md @@ -1,8 +1,15 @@ # 语音识别、流式语音识别、大语言模型、非流式语音合成、流式语音合成、视觉模型的性能测试工具使用指南 +0.先装依赖(在仓库根目录执行) +``` +cd main/xiaozhi-server +pip install -r requirements.txt +``` +测试脚本要 import `yaml`、`aiohttp`、`tabulate`,少一个都起不来。`tabulate` 不在 requirements.txt 里,是 `edge-tts` 间接带进来的。 + 1.在main/xiaozhi-server目录下创建data目录 2.在data目录下创建.config.yaml文件 -3.在.data/config.yaml中,写入你的语音识别、大语言模型、流式语音合成、视觉模型的参数 +3.在data/.config.yaml中,写入你的语音识别、流式语音识别、大语言模型、非流式语音合成、流式语音合成、视觉模型的参数 例如: ``` LLM: @@ -16,12 +23,50 @@ LLM: api_key: 你的chat-glm web key TTS: + EdgeTTS: + # 定义TTS API类型 + type: edge + voice: zh-CN-XiaoxiaoNeural VLLM: + ChatGLMVLLM: + # 定义视觉模型API类型 + type: openai + # glm-4v-flash 是智谱的视觉模型,需要在智谱平台申请api_key + model_name: glm-4v-flash + url: https://open.bigmodel.cn/api/paas/v4/ + api_key: 你的api_key ASR: + FunASR: + type: fun_local + model_dir: models/SenseVoiceSmall + language: auto ``` 4.在main/xiaozhi-server目录下运行performance_tester.py: ``` python performance_tester.py -``` \ No newline at end of file +``` + +## 几点说明 + +- 脚本第一行提示的 `docs/performance_tester.md` 就是本文档,它在仓库根目录的 `docs/` 下;脚本本身在 `main/xiaozhi-server/` 目录里跑,两处不是一个目录。 +- LLM、VLLM、非流式语音合成这三项会把 `config.yaml` 和 `data/.config.yaml` 两份配置合并起来再遍历,所以实际会测**所有配好 api_key 的供应器**,不只是你在 `.config.yaml` 里写的那一个;api_key 还是占位符的会被跳过。 +- 非流式的语音识别这一项读配置的方式和别的不一样:它自己扫 `data/` 目录下的 `*.config.yaml`,只取其中的 `ASR` 段,**不会**用 `config.yaml` 里的默认值。想测语音识别,就得把供应器写进 `data/.config.yaml`。 +- 流式语音识别读的是合并后的配置,固定测 `DoubaoStreamASR`、`Qwen3ASRFlash`、`XunfeiStreamASR` 这三家。`config.yaml` 里这三项带的 key 是占位符,要在 `data/.config.yaml` 的 `ASR` 段里填上自己的 key 才会测出延迟。 +- 视觉模型的配置写在 `data/.config.yaml` 的 `VLLM:` 段里,这段**不能只写一个空键**:写空的话合并后整段是空的,这项测试会直接跳过、什么都不测。 +- 流式语音合成一次会跑这些供应器: + +| 供应器 | 说明 | +|---|---| +| `AliyunStreamTTS` | 阿里云流式 TTS,无条件调用 | +| `HuoshanDoubleStreamTTS` | 火山引擎流式 TTS,无条件调用 | +| `PaddleSpeechTTS` | PaddleSpeech 流式 TTS,无条件调用 | +| `IndexStreamTTS` | IndexStream 流式 TTS,无条件调用 | +| `LinkeraiTTS` | `config.yaml` 的 TTS 段里没有这个供应器,默认不测、整项跳过;要测得自己在 `.config.yaml` 里补上 | +| `AliBLTTS` | 阿里百炼流式 TTS,默认就会测:判断读的是合并后的配置,`config.yaml` 里本来就带着这一项 | +| `XunFeiTTS` | 讯飞流式 TTS,同上,默认就会测 | + +`AliBLTTS` 和 `XunFeiTTS` 这两项默认带的 key 是占位符,不在 `.config.yaml` 里换成自己的 key 就会报失败;想直接跳过,把这两项在 `.config.yaml` 里写成空的(键名下面不填内容)就行。 + +标了「无条件调用」的这几个(`AliyunStreamTTS`、`HuoshanDoubleStreamTTS`、`PaddleSpeechTTS`、`IndexStreamTTS`),供应器缺失或被清空时,那一项会报错,错误被测试方法内部的异常处理吃掉,这一项被记成失败 —— 结果表里会多出一行失败记录,但不影响其它项。带守卫的那几家(`AliBLTTS`、`XunFeiTTS`、`LinkeraiTTS`)是整项跳过:没配就不报错、结果表里也不会有这一行。 diff --git a/docs/voiceprint-integration.md b/docs/voiceprint-integration.md index 5b974a3b9..8dd0e1c41 100644 --- a/docs/voiceprint-integration.md +++ b/docs/voiceprint-integration.md @@ -16,7 +16,7 @@ 点击它,下载本项目源码压缩包。下载到你电脑后,解压它,此时它的名字可能叫`voiceprint-api-main` 你需要把它重命名成`voiceprint-api`。 -## 第二步, 创建数据库和表 +## 第二步, 确认 MySQL 能访问 声纹识别需要依赖`mysql`数据库。如果你之前已经部署`智控台`,说明你已经安装了`mysql`。你可以共用它。 @@ -39,7 +39,7 @@ telnet 127.0.0.1 3306 networks: - default expose: - - "3306:3306" + - 3306 ``` 修改后 @@ -58,8 +58,9 @@ telnet 127.0.0.1 3306 # 进入你docker-compose_all.yml所在的文件夹,例如我的是xiaozhi-server cd xiaozhi-server docker compose -f docker-compose_all.yml down -docker compose -f docker-compose.yml up -d +docker compose -f docker-compose_all.yml up -d ``` +数据库服务`xiaozhi-esp32-server-db`在`docker-compose_all.yml`里,最小化的`docker-compose.yml`只有服务本身,所以两条命令都用`docker-compose_all.yml`。 启动完后,在宿主机再使用`telnet`命令,看看能不能正常访问`mysql`的`3306`端口。 ``` @@ -171,6 +172,8 @@ http://192.168.1.25:8005/voiceprint/health?key=abcd 然后搜索参数`server.voice_print`,此时,它的值应该是`null`值。 点击修改按钮,把上一步得来的`声纹接口地址`粘贴到`参数值`里。然后保存。 +声纹识别的相似度阈值是另一个系统参数`server.voiceprint_similarity_threshold`(默认0.4,范围0.0-1.0,数值越高越严格),要调整就在同一个`参数管理`页面里改。 + 如果能保存成功,说明一切顺利,你可以去智能体查看效果了。如果不成功,说明智控台无法访问声纹识别,很大概率是网络防火墙,或者没有填写正确的局域网ip。 ## 第二步 设置智能体记忆模式 @@ -186,7 +189,7 @@ http://192.168.1.25:8005/voiceprint/health?key=abcd 在智控台,`智能体管理`页面,在智能体的面板里,有一个`声纹识别`按钮,点击它。在底部有一个`新增按钮`。就可以对某个人说的话进行声纹注册。 在弹出的框里,`描述`这个属性建议填写上,可以是这个人的职业、性格、爱好。方便智能体对说话人进行分析和了解。 -## 第三步 和你的智能体聊天 +## 第五步 验证效果 将你的设备通电,问它,你知道我是谁吗?如果他能回答得出,说明声纹识别功能正常。 @@ -205,6 +208,9 @@ voiceprint: - "test1,张三,张三是一个程序员" - "test2,李四,李四是一个产品经理" - "test3,王五,王五是一个设计师" + # 声纹识别相似度阈值,范围0.0-1.0,默认0.4 + # 数值越高越严格,减少误识别但可能增加拒识率 + similarity_threshold: 0.4 ``` 把上一步得来的 `声纹接口地址` 粘贴到 `url` 里。然后保存。