2026-01-21 22:31:03 +01:00
|
|
|
|
# 测试脚本使用说明
|
|
|
|
|
|
|
|
|
|
|
|
## 概述
|
|
|
|
|
|
|
|
|
|
|
|
`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
|
|
|
|
|
|
|
2026-02-12 13:33:19 +08:00
|
|
|
|
# 数据库(使用 PostgreSQL,与线上一致)
|
|
|
|
|
|
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/life_echo
|
2026-01-21 22:31:03 +01:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 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 详细测试文档
|