2 changed files with 18 additions and 189 deletions
@ -1,180 +0,0 @@ |
|||
# 简化消息格式 |
|||
|
|||
## 概述 |
|||
|
|||
为了简化前后端的消息通信,我们将原来的多种消息类型统一为简单的 `type` 和 `content` 格式。 |
|||
|
|||
## 消息格式 |
|||
|
|||
所有消息都遵循以下统一格式: |
|||
|
|||
```json |
|||
{ |
|||
"type": "消息类型", |
|||
"content": "消息内容", |
|||
"timestamp": 时间戳, |
|||
"metadata": {} |
|||
} |
|||
``` |
|||
|
|||
## 消息类型 |
|||
|
|||
### 1. start - 开始消息 |
|||
- **用途**: 表示查询或操作的开始 |
|||
- **示例**: |
|||
```json |
|||
{ |
|||
"type": "start", |
|||
"content": "开始处理查询: 请写一篇关于Milvus向量数据库的报告" |
|||
} |
|||
``` |
|||
|
|||
### 2. info - 信息消息 |
|||
- **用途**: 表示处理过程中的信息、状态更新、迭代信息等 |
|||
- **示例**: |
|||
```json |
|||
{ |
|||
"type": "info", |
|||
"content": "iteration 1: 正在搜索相关文档..." |
|||
} |
|||
``` |
|||
|
|||
### 3. answer - 答案消息 |
|||
- **用途**: 表示最终答案或重要结果 |
|||
- **示例**: |
|||
```json |
|||
{ |
|||
"type": "answer", |
|||
"content": "Milvus的详细报告: ..." |
|||
} |
|||
``` |
|||
|
|||
### 4. complete - 完成消息 |
|||
- **用途**: 表示操作完成 |
|||
- **示例**: |
|||
```json |
|||
{ |
|||
"type": "complete", |
|||
"content": "查询完成" |
|||
} |
|||
``` |
|||
|
|||
### 5. error - 错误消息 |
|||
- **用途**: 表示错误信息 |
|||
- **示例**: |
|||
```json |
|||
{ |
|||
"type": "error", |
|||
"content": "查询失败: 无法连接到数据库" |
|||
} |
|||
``` |
|||
|
|||
## 使用示例 |
|||
|
|||
### 后端使用 |
|||
|
|||
```python |
|||
from deepsearcher.utils.message_stream import ( |
|||
send_start, send_info, send_answer, send_complete, send_error |
|||
) |
|||
|
|||
# 发送开始消息 |
|||
send_start("开始处理查询: 请写一篇关于Milvus的报告") |
|||
|
|||
# 发送信息消息 |
|||
send_info("iteration 1: 正在搜索相关文档...") |
|||
send_info("找到5个相关文档片段") |
|||
|
|||
# 发送答案消息 |
|||
send_answer("Milvus的详细报告: ...") |
|||
|
|||
# 发送完成消息 |
|||
send_complete("查询完成") |
|||
|
|||
# 发送错误消息 |
|||
send_error("查询失败: 无法连接到数据库") |
|||
``` |
|||
|
|||
### 前端处理 |
|||
|
|||
```javascript |
|||
// 处理消息流 |
|||
function handleStreamMessage(data) { |
|||
const message = JSON.parse(data); |
|||
|
|||
switch (message.type) { |
|||
case 'start': |
|||
console.log('开始:', message.content); |
|||
break; |
|||
case 'info': |
|||
console.log('信息:', message.content); |
|||
break; |
|||
case 'answer': |
|||
console.log('答案:', message.content); |
|||
break; |
|||
case 'complete': |
|||
console.log('完成:', message.content); |
|||
break; |
|||
case 'error': |
|||
console.error('错误:', message.content); |
|||
break; |
|||
} |
|||
} |
|||
``` |
|||
|
|||
## 优势 |
|||
|
|||
1. **简化格式**: 统一的消息格式,易于理解和处理 |
|||
2. **类型清晰**: 5种基本类型覆盖所有使用场景 |
|||
3. **易于扩展**: 可以轻松添加新的消息类型 |
|||
4. **前端友好**: 前端处理逻辑更加简单 |
|||
5. **调试方便**: 消息格式清晰,便于调试和日志记录 |
|||
|
|||
## 迁移说明 |
|||
|
|||
### 从旧格式迁移 |
|||
|
|||
| 旧类型 | 新类型 | 说明 | |
|||
|--------|--------|------| |
|||
| `search` | `info` | 搜索相关信息 | |
|||
| `think` | `info` | 思考过程信息 | |
|||
| `answer` | `answer` | 保持不变 | |
|||
| `complete` | `complete` | 保持不变 | |
|||
| `query_start` | `start` | 查询开始 | |
|||
| `query_error` | `error` | 查询错误 | |
|||
| `stream_error` | `error` | 流错误 | |
|||
|
|||
### 代码更新 |
|||
|
|||
所有使用旧消息类型的代码都需要更新: |
|||
|
|||
```python |
|||
# 旧代码 |
|||
send_search("搜索内容...") |
|||
send_think("思考内容...") |
|||
|
|||
# 新代码 |
|||
send_info("搜索内容...") |
|||
send_info("思考内容...") |
|||
``` |
|||
|
|||
## 测试 |
|||
|
|||
可以使用以下方式测试消息格式: |
|||
|
|||
```python |
|||
from deepsearcher.utils.message_stream import get_message_stream |
|||
|
|||
# 获取消息流实例 |
|||
message_stream = get_message_stream() |
|||
|
|||
# 获取所有消息 |
|||
messages = message_stream.get_messages_as_dicts() |
|||
|
|||
# 验证格式 |
|||
for msg in messages: |
|||
assert 'type' in msg |
|||
assert 'content' in msg |
|||
assert 'timestamp' in msg |
|||
print(f"类型: {msg['type']}, 内容: {msg['content']}") |
|||
``` |
Loading…
Reference in new issue