完成请求推送,但组装mes还有问题
This commit is contained in:
318
WEBSOCKET_LOGS_EXAMPLE.md
Normal file
318
WEBSOCKET_LOGS_EXAMPLE.md
Normal file
@@ -0,0 +1,318 @@
|
||||
# WebSocket 链路详细日志示例
|
||||
|
||||
本文档展示了添加详细日志后,WebSocket 链路的完整输出示例。
|
||||
|
||||
## 后端日志输出示例
|
||||
|
||||
### 1. 连接建立
|
||||
|
||||
```
|
||||
================================================================================
|
||||
[WebSocket] 📡 连接建立: 互动小说家/赛博朋克-数据幽灵
|
||||
================================================================================
|
||||
|
||||
INFO: connection open
|
||||
```
|
||||
|
||||
### 2. 接收请求
|
||||
|
||||
```
|
||||
--------------------------------------------------------------------------------
|
||||
[WebSocket] 📨 收到请求:
|
||||
- Floor: 6
|
||||
- Role: 互动小说家
|
||||
- Chat: 赛博朋克-数据幽灵
|
||||
- Stream: True
|
||||
- Message Length: 45
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
[WebSocket] 🌊 进入流式处理模式
|
||||
[StreamChat] 🚀 开始流式处理
|
||||
```
|
||||
|
||||
### 3. 工作流处理
|
||||
|
||||
```
|
||||
################################################################################
|
||||
[ChatWorkflow-Stream] 🚀 开始处理请求
|
||||
- Role: 互动小说家
|
||||
- Chat: 赛博朋克-数据幽灵
|
||||
- Message Length: 45
|
||||
################################################################################
|
||||
|
||||
[ChatWorkflow-Stream] ✅ 已加载角色卡: 互动小说家
|
||||
|
||||
[ChatWorkflow-Stream] 📚 世界书激活结果: 0 个条目
|
||||
|
||||
[ChatWorkflow-Stream] 💬 聊天历史加载结果: 0 条消息
|
||||
|
||||
[ChatWorkflow-Stream] 📝 提示词组装结果: 3 条消息
|
||||
1. [system] 你是一个互动小说家,擅长创作赛博朋克风格的故...
|
||||
2. [user] 请描述一个数据幽灵在夜之城中的冒险...
|
||||
3. [assistant] ...
|
||||
|
||||
[ChatWorkflow-Stream] 🤖 开始流式调用 LLM
|
||||
- Model: gpt-4
|
||||
- Temperature: 1.0
|
||||
- Max Tokens: 30000
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
```
|
||||
|
||||
### 4. LLM 客户端调用
|
||||
|
||||
```
|
||||
[LLMClient] 🔧 创建 ChatOpenAI 实例
|
||||
- Model: gpt-4
|
||||
- API URL: https://api.openai.com/v1
|
||||
- Temperature: 1.0
|
||||
- Max Tokens: 30000
|
||||
|
||||
[LLMClient] 🚀 开始流式请求...
|
||||
```
|
||||
|
||||
### 5. 流式输出进度
|
||||
|
||||
```
|
||||
[ChatWorkflow-Stream] 📊 已接收 20 个 chunks, 当前长度: 156
|
||||
[StreamChat] 📤 已发送 10 个 chunks
|
||||
|
||||
[ChatWorkflow-Stream] 📊 已接收 40 个 chunks, 当前长度: 312
|
||||
[StreamChat] 📤 已发送 20 个 chunks
|
||||
|
||||
[ChatWorkflow-Stream] 📊 已接收 60 个 chunks, 当前长度: 478
|
||||
[StreamChat] 📤 已发送 30 个 chunks
|
||||
```
|
||||
|
||||
### 6. LLM 调用完成
|
||||
|
||||
```
|
||||
[LLMClient] ✅ 流式请求完成
|
||||
- 总 Chunks: 85
|
||||
- 耗时: 3.45秒
|
||||
- Prompt Tokens: 256
|
||||
- Completion Tokens: 512
|
||||
- Total Tokens: 768
|
||||
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
[ChatWorkflow-Stream] ✅ LLM 流式调用完成
|
||||
- 总 Chunks: 85
|
||||
- 内容长度: 680
|
||||
################################################################################
|
||||
|
||||
```
|
||||
|
||||
### 7. 发送响应
|
||||
|
||||
```
|
||||
[StreamChat] ✨ 流式生成成功,总长度: 680
|
||||
|
||||
[StreamChat] 📚 发送世界书激活信息: 0 个条目
|
||||
|
||||
[StreamChat] ✅ 发送完成信号
|
||||
|
||||
[StreamChat] 💾 保存消息到文件...
|
||||
[WebSocket] 消息已保存: 互动小说家/赛博朋克-数据幽灵
|
||||
[StreamChat] ✅ 消息保存完成
|
||||
|
||||
```
|
||||
|
||||
### 8. 连接断开
|
||||
|
||||
```
|
||||
================================================================================
|
||||
[WebSocket] 🔌 连接断开: 互动小说家/赛博朋克-数据幽灵
|
||||
================================================================================
|
||||
```
|
||||
|
||||
## 前端日志输出示例
|
||||
|
||||
### 1. 建立连接
|
||||
|
||||
```javascript
|
||||
================================================================================
|
||||
[WebSocket] 📡 连接已建立
|
||||
- URL: ws://localhost:23337/api/chat/%E4%BA%92%E5%8A%A8%E5%B0%8F%E8%AF%B4%E5%AE%B6/%E8%B5%9B%E5%8D%9A%E6%9C%8B%E5%85%8B-%E6%95%B0%E6%8D%AE%E5%B9%BD%E7%81%B5/ws
|
||||
- Ready State: 1
|
||||
================================================================================
|
||||
```
|
||||
|
||||
### 2. 发送消息
|
||||
|
||||
```javascript
|
||||
--------------------------------------------------------------------------------
|
||||
[WebSocket] 📤 发送消息:
|
||||
- Floor: 6
|
||||
- Role: 互动小说家
|
||||
- Chat: 赛博朋克-数据幽灵
|
||||
- Stream: true
|
||||
- Message Length: 45
|
||||
--------------------------------------------------------------------------------
|
||||
```
|
||||
|
||||
### 3. 接收流式数据
|
||||
|
||||
```javascript
|
||||
[WebSocket] 📊 已接收 10 个 chunks
|
||||
[WebSocket] 📊 已接收 20 个 chunks
|
||||
[WebSocket] 📊 已接收 30 个 chunks
|
||||
```
|
||||
|
||||
### 4. 接收其他消息类型
|
||||
|
||||
```javascript
|
||||
[WebSocket] 📚 收到世界书激活信息: 0 个条目
|
||||
[WebSocket] 📋 收到任务ID信息: {imageWorkflow: "img_xxx", dynamicTable: "tbl_xxx"}
|
||||
```
|
||||
|
||||
### 5. 完成信号
|
||||
|
||||
```javascript
|
||||
[WebSocket] ✅ 收到完成信号
|
||||
- 总 Chunks: 85
|
||||
- 消息长度: 680
|
||||
```
|
||||
|
||||
### 6. 连接关闭
|
||||
|
||||
```javascript
|
||||
================================================================================
|
||||
[WebSocket] 🔌 连接已关闭
|
||||
- Code: 1000
|
||||
- Reason:
|
||||
- Was Clean: true
|
||||
================================================================================
|
||||
```
|
||||
|
||||
## 错误情况日志示例
|
||||
|
||||
### 1. LLM 调用失败
|
||||
|
||||
```
|
||||
[LLMClient] ❌ 流式调用失败: API key is invalid
|
||||
Traceback (most recent call last):
|
||||
File "backend/utils/llm_client.py", line 278, in stream_chat
|
||||
async for chunk in llm.astream(messages):
|
||||
...
|
||||
openai.AuthenticationError: Error code: 401 - {'error': {'message': 'Invalid API key'}}
|
||||
```
|
||||
|
||||
### 2. 工作流处理失败
|
||||
|
||||
```
|
||||
[ChatWorkflow-Stream] ⚠️ 错误: 角色 '不存在的角色' 不存在
|
||||
Traceback (most recent call last):
|
||||
File "backend/services/chat_workflow_service.py", line 765, in process_chat_request_stream
|
||||
return {
|
||||
...
|
||||
```
|
||||
|
||||
### 3. WebSocket 错误
|
||||
|
||||
```
|
||||
================================================================================
|
||||
[WebSocket] ⚠️ 错误: Connection closed unexpectedly
|
||||
================================================================================
|
||||
```
|
||||
|
||||
## 日志级别说明
|
||||
|
||||
### 符号含义
|
||||
|
||||
- 📡 - 连接相关
|
||||
- 📨 - 接收消息
|
||||
- 📤 - 发送消息
|
||||
- 🚀 - 开始处理
|
||||
- ✅ - 成功完成
|
||||
- ❌ - 错误/失败
|
||||
- 📊 - 进度统计
|
||||
- 📚 - 世界书相关
|
||||
- 📋 - 任务相关
|
||||
- 💬 - 聊天历史
|
||||
- 📝 - 提示词
|
||||
- 🤖 - LLM 调用
|
||||
- 💾 - 文件保存
|
||||
- 🔌 - 连接断开
|
||||
- ⚠️ - 警告
|
||||
|
||||
### 分隔符
|
||||
|
||||
- `=` (80个) - 重要事件边界(连接建立/断开)
|
||||
- `-` (80个) - 请求边界
|
||||
- `#` (80个) - 工作流处理边界
|
||||
- `~` (80个) - LLM 调用边界
|
||||
|
||||
## 日志配置建议
|
||||
|
||||
### 开发环境
|
||||
|
||||
在开发环境中,显示所有日志以便调试:
|
||||
|
||||
```python
|
||||
# 保持当前的详细日志输出
|
||||
```
|
||||
|
||||
### 生产环境
|
||||
|
||||
在生产环境中,可以简化日志:
|
||||
|
||||
```python
|
||||
# 只记录关键事件
|
||||
print(f"[WebSocket] 连接建立: {role_name}/{chat_name}")
|
||||
print(f"[WebSocket] 收到请求: floor={request_data.get('floor')}")
|
||||
print(f"[WebSocket] 生成完成,内容长度: {len(content)}")
|
||||
```
|
||||
|
||||
## 日志分析工具
|
||||
|
||||
### 提取关键指标
|
||||
|
||||
```bash
|
||||
# 统计平均响应时间
|
||||
grep "耗时:" logs.txt | awk '{sum += $2; count++} END {print "平均耗时:", sum/count, "秒"}'
|
||||
|
||||
# 统计 Token 使用
|
||||
grep "Total Tokens:" logs.txt | awk '{sum += $3; count++} END {print "平均 Token:", sum/count}'
|
||||
|
||||
# 统计错误率
|
||||
grep "❌" logs.txt | wc -l
|
||||
```
|
||||
|
||||
### 实时监控
|
||||
|
||||
```bash
|
||||
# 实时查看 WebSocket 日志
|
||||
tail -f logs.txt | grep --line-buffered "WebSocket\|StreamChat\|ChatWorkflow\|LLMClient"
|
||||
```
|
||||
|
||||
## 性能优化建议
|
||||
|
||||
基于日志分析:
|
||||
|
||||
1. **如果 LLM 调用耗时过长** (>10秒)
|
||||
- 检查网络连接
|
||||
- 考虑使用更快的模型
|
||||
- 减少 max_tokens
|
||||
|
||||
2. **如果 Chunk 数量过多** (>200)
|
||||
- 检查是否启用了不必要的功能
|
||||
- 优化提示词长度
|
||||
|
||||
3. **如果世界书激活数量过多** (>10)
|
||||
- 检查触发条件是否过于宽松
|
||||
- 优化关键词匹配
|
||||
|
||||
4. **如果聊天历史加载失败**
|
||||
- 检查 CHATS_PATH 配置
|
||||
- 确认文件权限
|
||||
|
||||
## 总结
|
||||
|
||||
通过详细的日志记录,可以:
|
||||
|
||||
1. ✅ 清晰地追踪 WebSocket 的完整链路
|
||||
2. ✅ 快速定位问题所在
|
||||
3. ✅ 分析性能瓶颈
|
||||
4. ✅ 监控系统运行状态
|
||||
5. ✅ 优化用户体验
|
||||
|
||||
建议在开发和测试阶段使用详细日志,在生产环境中根据需要调整日志级别。
|
||||
Reference in New Issue
Block a user