#!/usr/bin/env python3 """用生产记忆库和真实 LLM 验证当前用户称呼,不加载 STT/TTS。""" from __future__ import annotations import asyncio import sys from pathlib import Path import numpy as np ROOT = Path(__file__).resolve().parent.parent.parent sys.path.insert(0, str(ROOT)) from app.config import AppConfig # noqa: E402 from app.engine import ConversationEngine, EventKind # noqa: E402 from app.identity import ManualIdentityProvider # noqa: E402 from app.llm import FallbackProvider, create_provider # noqa: E402 from app.memory import SQLiteMemoryStore # noqa: E402 class SilentTTS: sample_rate = 16000 def synthesize(self, _text): return np.zeros(0, dtype=np.float32) async def main() -> int: cfg = AppConfig.load() cfg.search.enabled = False cfg.memory.auto_extract_enabled = False memory = SQLiteMemoryStore(cfg.memory.db_path) await memory.open() llm = FallbackProvider( create_provider(cfg.llm), create_provider(cfg.llm_fallback)) engine = ConversationEngine( cfg, llm, memory, ManualIdentityProvider(), SilentTTS()) try: await engine.start_session(user_id=cfg.default_user_id) loaded_name = engine.identity.current().display_name reply_parts = [] async for event in engine.respond_to_text("我是谁?请只说我的称呼。"): if event.kind == EventKind.RESPONSE_DELTA: reply_parts.append(event.text) reply = "".join(reply_parts).strip() if loaded_name != "林": raise AssertionError(f"档案称呼未恢复:{loaded_name!r}") if "林" not in reply or cfg.default_user_id in reply: raise AssertionError(f"回答未正确使用称呼:{reply!r}") print(f"恢复称呼: {loaded_name}") print(f"真实回答: {reply}") print("生产记忆 + 真实 LLM 验收:PASS") return 0 finally: await engine.end_session() await memory.close() await llm.aclose() if __name__ == "__main__": raise SystemExit(asyncio.run(main()))