基线:姓名档案修复、疑问句防误写、搜索与传输测试
这是进入 Pipecat Flows 改造前的回滚点。 提交时已核对本地与线上代码 md5 一致(engine.py 7e97bad8、 bot_server.py 1cf543ae),所以这个提交就是当前线上状态。 内容(此前一直在线上运行但未提交的改动): - 姓名档案:用户自报"我叫林"同步写 confirmed 姓名,重连后恢复 - 疑问句防误写:"谁吗"之类的疑问句不再被覆盖成姓名 - 新增 test_profile_memory.py(姓名档案专项回归) - 新增 test_profile_live.py(需要真实 LLM 的现场测试) - 搜索、身份、记忆测试的相应补充 背景:下一步要按 P1-Pipecat Flows Agent化与记忆改造交接.md 渐进引入 Pipecat Flows,交接文档明确要求先保护基线、不得 reset/checkout/覆盖现有改动。此提交即该基线。
This commit is contained in:
@@ -51,11 +51,12 @@ p0/ P0 阶段的验证与基准脚本(保留用于复现
|
||||
# 服务器上(完整)
|
||||
cd ~/ai-companion
|
||||
.venv/bin/python app/tests/test_llm.py # 27 项
|
||||
.venv/bin/python app/tests/test_memory.py # 28 项
|
||||
.venv/bin/python app/tests/test_identity.py # 17 项
|
||||
.venv/bin/python app/tests/test_memory.py # 30 项
|
||||
.venv/bin/python app/tests/test_identity.py # 19 项
|
||||
.venv/bin/python app/tests/test_engine_e2e.py # 16 项,端到端
|
||||
.venv/bin/python app/tests/test_transport.py # 4 项,媒体时钟/VAD/静音/RTVI文本
|
||||
.venv/bin/python app/tests/test_search.py # 12 项,搜索 API/工具回灌/TTS 链路过滤
|
||||
.venv/bin/python app/tests/test_profile_memory.py # 22 项,自报姓名/断开重连/疑问句防误写
|
||||
```
|
||||
|
||||
端到端测试**不需要麦克风、音箱、摄像头、ESP32**——
|
||||
@@ -85,11 +86,17 @@ DeepSeek 负责判断何时需要实时资料,`app/search.py` 提供 `web_sear
|
||||
`track_id`(画面里的一个目标)互不冒充。人脸认出来**不等于**确认对方在说话——
|
||||
所以人脸只产生"建议",不自动切换身份。做错的后果是路人经过就把你的私人记忆念出来。
|
||||
|
||||
**内部 ID 与用户称呼分开。** `u_ylhan` 只用于数据库隔离,绝不是姓名。用户明确说
|
||||
“我叫林”时,会同步写入 `users.display_name` 和一条 confirmed 姓名记忆;新连接创建
|
||||
引擎时从档案恢复称呼。自报姓名只用于个性化,不提升身份信任等级。
|
||||
|
||||
**记忆查询强制带 `owner_user_id`。** 没有"按 memory_id 单独取"的口子:
|
||||
猜到 id 就能读别人的记忆,是这类系统最容易犯的错。删除同理,必须同时匹配 owner。
|
||||
|
||||
**自动抽取的记忆是"候选",默认不参与检索。** 只有用户显式"记住"或工具调用
|
||||
写入的才是"已确认"。对应方案 §8 的"模型推测不当作确认事实"。
|
||||
**自动抽取的记忆是"候选",默认不参与检索。** 当前只有自报姓名走同步 confirmed
|
||||
档案路径;“记住/我喜欢/我习惯”等通用规则仍统一写成 candidate,而且尚无候选确认/
|
||||
晋升入口。因此除姓名外,内容可能已经落库却不会参与后续回答。这是下一阶段必须补齐
|
||||
的功能,不应把“数据库里有记录”误报为“助手已经会使用这条记忆”。
|
||||
|
||||
**异步任务绑定创建时的身份。** 回复后写记忆的任务在创建时捕获 `user_id`,
|
||||
不读"当前用户"——否则用户在这几百毫秒内切了身份,这条记忆会写到别人名下。
|
||||
@@ -122,6 +129,25 @@ Pipecat 管传输、帧与 RTVI,自有 `ConversationEngine` 管会话语义。
|
||||
|
||||
完整记录见代码仓库外的 `P0-Pipecat传输层实验报告.md`(在 Obsidian 笔记库里)。
|
||||
|
||||
### 当前打断边界(2026-09-16)
|
||||
|
||||
当前 `SimpleVAD` 是实验性的 RMS 能量判定:阈值 350、最短语音 300ms、尾静音
|
||||
700ms。它能切分话段和触发下一轮,但不是完整的 barge-in。助手推送音频时检测到
|
||||
用户声音目前只记日志;只有等话段结束,或收到外部 `InterruptionFrame`,才会取消
|
||||
当前异步轮次。浏览器播放器虽有清空能力,服务端尚未把“用户开始说话”可靠地转换为
|
||||
取消生成、清空服务端输出和清空客户端缓冲三个动作。现有测试只证明任务可取消,
|
||||
未证明声学打断端到端闭环。
|
||||
|
||||
### 下一阶段 Agent 方向:Pipecat Flows
|
||||
|
||||
已决定不整体迁移 OpenClaw、Agno、LangGraph 或 LiveKit Agents,而是在现有 Pipecat
|
||||
实时链路上渐进引入 `pipecat-ai-flows`。目标是把 `web_search`、`remember`、
|
||||
`search_memory`、`forget` 等能力变成受策略约束的工具,同时保留现有
|
||||
`MemoryStore`、身份隔离和低延迟语音链路。Flows 与当前自有 `ConversationEngine`
|
||||
的接口并不直接兼容,必须先做独立兼容性实验,再通过 feature flag 灰度迁移;不得
|
||||
直接重写已部署链路。实施交接见笔记库
|
||||
`P1-Pipecat Flows Agent化与记忆改造交接.md`。
|
||||
|
||||
### 实验挖出的 10 个坑
|
||||
|
||||
每个都表现为"什么都没发生",极难排查:
|
||||
|
||||
Reference in New Issue
Block a user