daren/apps/chat/chat.md
2025-05-23 20:35:52 +08:00

470 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Chat 模块接口文档
## 概述
Chat 模块提供了一组 API用于创建和管理对话。这包括创建新对话、发送消息、接收回答、查询历史记录等功能。所有接口都基于 REST 风格设计。
## 认证
除特殊说明外,所有接口都需要认证。请在请求头中添加认证信息:
```
Authorization: Bearer <jwt_token>
```
```
Authorization: Token <token>
```
## REST API接口列表
### 1. 创建会话
创建一个新的对话会话。
- **URL**: `/api/chat-history/create_conversation/`
- **方法**: `POST`
- **认证**: 不需要认证
- **响应**:
```json
{
"code": 200,
"message": "会话创建成功",
"data": {
"conversation_id": "uuid-string"
}
}
```
### 2. 发送消息并接收回答
发送用户问题并获取 AI 回答。
- **URL**: `/api/chat-history/`
- **方法**: `POST`
- **参数**:
| 参数名 | 类型 | 必填 | 描述 |
|-------|------|------|------|
| conversation_id | string | 是 | 会话 ID |
| question | string | 是 | 用户问题 |
| title | string | 否 | 会话标题,默认为 "New chat" |
| stream | boolean | 否 | 是否使用流式响应,默认为 true |
- **响应** (非流式):
```json
{
"code": 200,
"message": "成功",
"data": {
"id": "记录ID",
"conversation_id": "会话ID",
"title": "会话标题",
"role": "assistant",
"content": "AI回答内容",
"created_at": "创建时间"
}
}
```
- **响应** (流式):
返回 `text/event-stream` 类型的响应,包含多个 data 事件:
```
data: {"code": 200, "message": "开始流式传输", "data": {"id": "记录ID", "conversation_id": "会话ID", "content": "", "is_end": false}}
data: {"code": 200, "message": "partial", "data": {"id": "记录ID", "conversation_id": "会话ID", "title": "标题", "content": "部分内容", "is_end": false}}
...
data: {"code": 200, "message": "完成", "data": {"id": "记录ID", "conversation_id": "会话ID", "title": "标题", "role": "assistant", "content": "完整内容", "created_at": "时间", "is_end": true}}
```
### 3. 获取对话列表
获取用户的所有对话列表。
- **URL**: `/api/chat-history/`
- **方法**: `GET`
- **参数**:
| 参数名 | 类型 | 必填 | 描述 |
|-------|------|------|------|
| page | integer | 否 | 页码,默认为 1 |
| page_size | integer | 否 | 每页条数,默认为 10 |
- **响应**:
```json
{
"code": 200,
"message": "获取成功",
"data": {
"total": 总记录数,
"page": 当前页码,
"page_size": 每页条数,
"results": [
{
"conversation_id": "会话ID",
"message_count": 消息数量,
"last_message": "最后一条消息内容",
"last_time": "最后更新时间"
}
]
}
}
```
### 4. 获取对话详情
获取特定对话的所有消息。
- **URL**: `/api/chat-history/conversation_detail/`
- **方法**: `GET`
- **参数**:
| 参数名 | 类型 | 必填 | 描述 |
|-------|------|------|------|
| conversation_id | string | 是 | 会话 ID |
- **响应**:
```json
{
"code": 200,
"message": "获取成功",
"data": {
"conversation_id": "会话ID",
"title": "会话标题",
"created_at": "创建时间",
"messages": [
{
"id": "消息ID",
"role": "用户角色(user/assistant)",
"content": "消息内容",
"created_at": "创建时间"
}
]
}
}
```
### 5. 搜索聊天记录
根据关键词搜索聊天记录。
- **URL**: `/api/chat-history/search/`
- **方法**: `GET`
- **参数**:
| 参数名 | 类型 | 必填 | 描述 |
|-------|------|------|------|
| keyword | string | 否 | 搜索关键词 |
| start_date | string | 否 | 开始日期,格式为 YYYY-MM-DD |
| end_date | string | 否 | 结束日期,格式为 YYYY-MM-DD |
| page | integer | 否 | 页码,默认为 1 |
| page_size | integer | 否 | 每页条数,默认为 10 |
- **响应**:
```json
{
"code": 200,
"message": "搜索成功",
"data": {
"total": 总记录数,
"page": 当前页码,
"page_size": 每页条数,
"results": [
{
"id": "记录ID",
"conversation_id": "会话ID",
"role": "角色",
"content": "内容",
"created_at": "创建时间",
"metadata": {},
"highlights": {
"content": "高亮后的内容"
}
}
]
}
}
```
### 6. 删除会话
删除整个会话及其所有消息。
- **URL**: `/api/chat-history/delete_conversation/`
- **方法**: `DELETE`
- **参数**:
| 参数名 | 类型 | 必填 | 描述 |
|-------|------|------|------|
| conversation_id | string | 是 | 要删除的会话 ID |
- **响应**:
```json
{
"code": 200,
"message": "删除成功",
"data": {
"conversation_id": "会话ID",
"deleted_count": 删除的消息数量
}
}
```
### 7. 更新消息内容
更新单条消息的内容。
- **URL**: `/api/chat-history/{id}/`
- **方法**: `PUT``PATCH`
- **参数**:
| 参数名 | 类型 | 必填 | 描述 |
|-------|------|------|------|
| content | string | 否 | 更新的消息内容 |
| metadata | object | 否 | 更新的元数据 |
- **响应**:
```json
{
"code": 200,
"message": "更新成功",
"data": {
"id": "记录ID",
"conversation_id": "会话ID",
"role": "角色",
"content": "更新后的内容",
"metadata": {},
"updated_at": "更新时间"
}
}
```
### 8. 删除单条消息
删除单条消息(软删除)。
- **URL**: `/api/chat-history/{id}/`
- **方法**: `DELETE`
- **响应**:
```json
{
"code": 200,
"message": "删除成功",
"data": null
}
```
### 9. 更新会话标题
设置或更新会话的标题。
- **URL**: `/api/chat-history/generate-conversation-title/`
- **方法**: `GET`
- **参数**:
| 参数名 | 类型 | 必填 | 描述 |
|-------|------|------|------|
| conversation_id | string | 是 | 会话 ID |
| title | string | 是 | 新标题 |
- **响应**:
```json
{
"code": 200,
"message": "更新会话标题成功",
"data": {
"conversation_id": "会话ID",
"title": "新标题"
}
}
```
### 10. 获取可用知识库
获取系统中可用的知识库列表。
- **URL**: `/api/chat-history/available_datasets/`
- **方法**: `GET`
- **响应**:
```json
{
"code": 200,
"message": "获取成功",
"data": []
}
```
### 11. 根据ID获取达人信息
根据达人ID获取单个达人的详细信息。
- **URL**: `/api/chat-history/get_creator_by_id/`
- **方法**: `GET`
- **参数**:
| 参数名 | 类型 | 必填 | 描述 |
|-------|------|------|------|
| id | integer | 是 | 达人ID |
- **响应**:
```json
{
"code": 200,
"message": "获取成功",
"data": {
"id": 1,
"name": "Michelle",
"avatar_url": "http://example.com/avatar.jpg",
"category": "Clothing & Accessories",
"mcn": "--",
"pricing": "$100/video",
"collab": ["SUNLINK", "ARZOPA"]
}
}
```
- **错误响应**:
缺少参数时:
```json
{
"code": 400,
"message": "缺少必要参数: id",
"data": null
}
```
达人不存在时:
```json
{
"code": 404,
"message": "未找到该达人信息",
"data": null
}
```
## WebSocket API
除了REST API之外Chat模块还提供了WebSocket接口用于实时流式获取对话回答。
### 1. 建立WebSocket连接
- **URL**: `ws://yourdomain:port/ws/chat/stream/?token=<your_token>`
- **认证**: 需要在URL参数中提供token
- **说明**: token是用户的认证token即登录接口获取的token通过UserToken模型验证
- **获取token**: 通过API登录接口获取token
```
POST /api/user/login/
{
"email": "用户邮箱",
"password": "用户密码"
}
```
成功登录后响应将返回token字段值
### 2. 发送消息
连接建立后可以向WebSocket发送JSON格式的消息
```json
{
"conversation_id": "会话ID",
"question": "用户问题"
}
```
### 3. 接收响应
WebSocket会返回以下JSON格式的消息
1. 开始流式传输:
```json
{
"code": 200,
"message": "开始流式传输",
"data": {
"id": "记录ID",
"conversation_id": "会话ID",
"content": "",
"is_end": false
}
}
```
2. 部分内容:
```json
{
"code": 200,
"message": "partial",
"data": {
"id": "记录ID",
"conversation_id": "会话ID",
"content": "部分内容",
"is_end": false
}
}
```
3. 完成响应:
```json
{
"code": 200,
"message": "完成",
"data": {
"id": "记录ID",
"conversation_id": "会话ID",
"title": "会话标题",
"role": "assistant",
"content": "完整内容",
"created_at": "时间",
"is_end": true
}
}
```
4. 错误响应:
```json
{
"code": 500,
"message": "错误信息",
"data": {
"is_end": true
}
}
```
## 错误响应
所有接口在出错时都会返回类似的错误响应结构:
```json
{
"code": 错误代码,
"message": "错误描述",
"data": null
}
```
常见错误代码:
- 400: 请求参数错误
- 401: 未认证或认证失败
- 404: 资源不存在
- 500: 服务器内部错误