# 测试脚本使用说明 ## 概述 `test_conversation.py` 是一个自动化测试脚本,用于测试 Life Echo 的完整对话流程,包括: - 用户注册/登录 - WebSocket 多轮对话 - 回忆录状态检查 - 章节生成验证 ## 前置条件 ### 1. 环境准备 ```bash cd api # 安装依赖 pip install -r requirements.txt # 确保 httpx 已安装(测试脚本需要) pip install httpx ``` ### 2. 配置文件 确保 `.env` 文件包含以下配置: ```env # LLM 配置(必需) DEEPSEEK_API_KEY=your-api-key DEEPSEEK_BASE_URL=https://api.deepseek.com DEEPSEEK_MODEL=deepseek-chat # JWT 配置(必需) SECRET_KEY=your-secret-key ALGORITHM=HS256 ACCESS_TOKEN_EXPIRE_MINUTES=120 # 数据库(使用 PostgreSQL,与线上一致) DATABASE_URL=postgresql://postgres:postgres@localhost:5432/life_echo ``` ### 3. 启动服务器 在一个终端窗口中启动服务器: ```bash cd api uvicorn main:app --reload --host 0.0.0.0 --port 8000 ``` 验证服务器运行: ```bash curl http://localhost:8000/health # 预期返回: {"status":"ok"} ``` ## 运行测试 ### 基本用法 在另一个终端窗口中运行: ```bash cd api python test_conversation.py ``` ## 测试流程 脚本会自动执行以下步骤: ### 1. 用户注册 - 生成随机手机号进行注册 - 获取 JWT access_token ### 2. 查看初始状态 - 调用 `/api/memoir-state` 获取初始回忆录状态 - 显示当前阶段(默认 `childhood`) ### 3. 多轮对话(7轮) - 建立 WebSocket 连接 - 发送预设的对话内容(涵盖童年和教育阶段) - 接收 Agent 回复(支持多条消息) ### 4. 结束对话 - 发送 `end_conversation` 消息 - 等待对话结束确认 ### 5. 检查结果(等待60秒后台处理) - 查看回忆录状态(slots 填充情况) - 查看生成的章节列表 - 显示回忆录完整内容 ## 输出示例 ``` ============================================================ 🎭 Life Echo 多轮对话测试 ⏰ 开始时间: 2026-01-21 22:07:22 ============================================================ 📝 注册用户: 138c41775d5 ✅ 注册成功! 🔑 Token: eyJhbGciOiJIUzI1NiIsInR5cCI6Ik... 📋 初始回忆录状态: 当前阶段: childhood 🔗 连接 WebSocket: 2f83d622-6391-46fb-8caa-b7237bf9e26b ✅ 连接成功: connect ============================================================ 📤 第 1 轮对话 ============================================================ 👤 用户: 我出生在南方一个小镇,小时候跟奶奶住在一起。 🤖 Agent: 那个小镇听起来很温馨。 🤖 Agent: 和奶奶一起住的时候,你印象最深的是什么? ... (更多对话) ============================================================ 📊 检查结果 ============================================================ ⏳ 等待后台处理完成... 等待中... 10秒 等待中... 20秒 ... 📋 回忆录状态: 当前阶段: education 已完成阶段: ['childhood'] childhood 已填充: ['place', 'people', 'emotion'] - place: 在南方一个小镇长大... - people: 跟奶奶关系很好... 📚 生成的章节: 🆕 [childhood] 奶奶院子里的夏天 🆕 [education] 第一次离开家的少年 📖 回忆录信息: 标题: 我的回忆录 总字数: 0 有更新: 是 ============================================================ 📜 回忆录完整内容 ============================================================ ────────────────────────────────────────────────────────────── 【奶奶院子里的夏天】 ────────────────────────────────────────────────────────────── 我出生在南方一个小镇,小时候跟奶奶住在一起。奶奶家有个小院子... ============================================================ ⏰ 结束时间: 2026-01-21 22:09:30 ============================================================ ``` ## 自定义测试内容 修改 `test_conversation.py` 中的 `CONVERSATION_MESSAGES` 列表来测试不同的对话场景: ```python CONVERSATION_MESSAGES = [ # 童年阶段 "我出生在南方一个小镇,小时候跟奶奶住在一起。", "奶奶家有个小院子,夏天的时候我们经常坐在院子里乘凉。", # 教育阶段 "后来我去城里上学了,那是我第一次离开家。", # 事业阶段 "大学毕业后我进了一家互联网公司...", # ... 添加更多对话 ] ``` ## 常见问题 ### Q: 测试超时失败? A: 后台 LLM 调用可能较慢,请检查: 1. 网络连接是否正常 2. API Key 是否有效 3. 可以增加等待时间(修改 `check_results` 中的等待逻辑) ### Q: 章节未生成? A: 检查以下情况: 1. 查看服务器日志是否有错误 2. 后台处理有 5 秒去抖延迟 + LLM 调用时间,需要等待 ### Q: Agent 回复包含括号注释? A: 这是 LLM 的问题,已在 prompt 中明确禁止。如果仍然出现,可以: 1. 检查 `agents/prompts/conversation_prompts.py` 中的禁止规则 2. 考虑在后处理中过滤 ## 相关文件 - `test_conversation.py` - 测试脚本 - `docs/文字交流模式说明.md` - API 接口说明 - `docs/WebSocket测试文档.md` - WebSocket 详细测试文档