修复网页对话并接入 SearXNG 搜索

This commit is contained in:
ylhan
2026-09-16 11:17:41 +08:00
parent c3d2c7f3a8
commit 719fc13e48
13 changed files with 840 additions and 52 deletions
+18 -2
View File
@@ -28,7 +28,9 @@ app/ 助手本体(部署到服务器)
│ ├── stt.py sherpa-onnx 流式 Zipformer(CPU)
│ ├── tts.py 本地 vits-zh-ll(sherpa-onnx)
│ └── remote_tts.py Qwen3-TTS 远端服务适配(当前主用)
└── tests/ 5 个测试脚本,全部无需硬件
└── tests/ 回归与真实服务验收脚本
deploy/searxng/ 私有联网搜索服务(仅监听服务器回环地址)
services/
├── tts_server.py Qwen3-TTS 服务(跑在 ~/tts-qwen,独立 venv)
@@ -52,13 +54,27 @@ cd ~/ai-companion
.venv/bin/python app/tests/test_memory.py # 28 项
.venv/bin/python app/tests/test_identity.py # 17 项
.venv/bin/python app/tests/test_engine_e2e.py # 16 项,端到端
.venv/bin/python app/tests/test_transport.py # 3 项,媒体时钟/VAD/静音判定
.venv/bin/python app/tests/test_transport.py # 4 项,媒体时钟/VAD/静音/RTVI文本
.venv/bin/python app/tests/test_search.py # 12 项,搜索 API/工具回灌/TTS 链路过滤
```
端到端测试**不需要麦克风、音箱、摄像头、ESP32**——
这是"服务器即助手"架构的直接好处:链路可以在任何有 CPU 的地方验证,
硬件到货后再接最后一段。跑完会把合成音频写到 `out/`,可以人工试听。
## 联网搜索
DeepSeek 负责判断何时需要实时资料,`app/search.py` 提供 `web_search` 工具并调用
服务器本机的 SearXNG。工具结果回灌模型后再生成最终回答;网页保留来源 URL,TTS
只朗读正文。SearXNG 仅绑定 `127.0.0.1:18080`,配置见 `deploy/searxng/`。
服务器实测 DuckDuckGo、Brave、Wikipedia 超时,当前启用 360 搜索和搜狗;Bing
保留但暂时返回空结果。真实服务验收:
```bash
.venv/bin/python app/tests/test_search_live.py
```
## 设计上几个刻意的选择
**接口按最坏情况设计。** `MemoryStore` 全是 async、可超时、可失败,