docs: update design docs for general chat

This commit is contained in:
AI Clinical Dev Team
2025-10-12 10:08:27 +08:00
parent 4ea14dc66d
commit 2a4f59b08b
3 changed files with 868 additions and 4 deletions

View File

@@ -910,6 +910,112 @@ Response: 200 OK
---
### 9. 通用对话模块(智能问答)
**功能**: 提供无项目、无智能体概念的纯AI对话功能支持可选的@知识库引用
#### 9.1 发送消息(流式输出)
```http
POST /api/v1/chat/stream
Content-Type: application/json
Request:
{
"content": "",
"modelType": "deepseek-v3",
"knowledgeBaseIds": ["kb-uuid-1", "kb-uuid-2"], //
"conversationId": "conv-uuid" //
}
Response: 200 OK (Server-Sent Events)
Content-Type: text/event-stream
data: {"content":"","usage":null}
data: {"content":"","usage":null}
data: {"content":"","usage":null}
data: {"content":"","usage":null}
...
data: [DONE]
```
**参数说明:**
- `content` - 用户消息内容(必填)
- `modelType` - 使用的模型必填deepseek-v3 | qwen3-72b | gemini-pro
- `knowledgeBaseIds` - 知识库ID数组可选
- `conversationId` - 对话ID可选新对话时不传
**响应说明:**
- 使用SSEServer-Sent Events流式返回
- 每个chunk包含`content`(增量内容)、`usage`token统计
- 最后发送 `data: [DONE]` 表示完成
---
#### 9.2 获取对话列表
```http
GET /api/v1/chat/conversations
Authorization: Bearer {token}
Response: 200 OK
{
"success": true,
"data": [
{
"id": "conv-uuid",
"userId": "user-uuid",
"title": "",
"modelName": "deepseek-v3",
"createdAt": "2025-10-11T10:00:00.000Z",
"updatedAt": "2025-10-11T10:30:00.000Z"
}
]
}
```
**响应说明:**
-`updatedAt` 降序排序
- 最多返回50条
- 不包括已删除的对话deleted_at != null
---
#### 9.3 删除对话
```http
DELETE /api/v1/chat/conversations/:id
Authorization: Bearer {token}
Response: 200 OK
{
"success": true,
"message": ""
}
```
**说明:**
- 软删除,设置 `deleted_at` 字段
- 级联删除所有消息
- 不可恢复
---
### 通用对话 vs 项目对话
| 特性 | 通用对话(/chat | 项目对话(/conversations |
|------|------------------|---------------------------|
| **概念** | 无项目/智能体 | 基于项目和智能体 |
| **使用场景** | 快速提问、知识库问答 | 结构化研究流程 |
| **上下文** | 纯对话历史 | 项目背景 + 智能体角色 + 对话历史 |
| **知识库** | 可选@引用 | 可选@引用 |
| **System Prompt** | 通用AI助手 | 专业智能体角色 |
| **数据表** | general_conversations | conversations |
---
## 错误处理
### 错误代码规范

View File

@@ -44,10 +44,20 @@
└──────┬──────┘
│ 1:N
├─────────────────┐
│ │
▼ ▼
┌─────────────┐ ┌──────────────┐
├──────────────────────
├──────────────────┐ │
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌──────────────┐ ┌──────────────────────┐
│ Projects │ │ Knowledge │ │ General │
│ │ │ Bases │ │ Conversations ⭐ │
└──────┬──────┘ └──────┬───────┘ └──────┬───────────────┘
│ │ │
│ 1:N │ 1:N │ 1:N
▼ ▼ ▼
┌─────────────┐ ┌──────────────┐ ┌──────────────────────┐
│Conversations│ │ Documents │ │ General Messages ⭐ │
│ Projects │ │KnowledgeBases│
└──────┬──────┘ └──────┬───────┘
│ │
@@ -399,6 +409,113 @@ COMMENT ON TABLE admin_logs IS '管理员操作日志表,用于审计';
---
### 8. general_conversations - 通用对话表
**用途:** 存储智能问答的对话记录(无需项目和智能体)
```sql
CREATE TABLE general_conversations (
id VARCHAR(36) PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id VARCHAR(36) NOT NULL,
-- 对话信息
title VARCHAR(255) NOT NULL,
model_name VARCHAR(50), -- 主要使用的模型
-- 时间戳
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
deleted_at TIMESTAMP, -- 软删除
-- 外键
CONSTRAINT fk_general_conversations_users FOREIGN KEY (user_id)
REFERENCES users(id) ON DELETE CASCADE
);
-- 索引
CREATE INDEX idx_general_conversations_user_id ON general_conversations(user_id);
CREATE INDEX idx_general_conversations_created_at ON general_conversations(created_at);
CREATE INDEX idx_general_conversations_updated_at ON general_conversations(updated_at);
-- 注释
COMMENT ON TABLE general_conversations IS '通用对话表,用于智能问答功能';
```
**字段说明:**
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | VARCHAR(36) | 对话ID | PRIMARY KEY, UUID |
| user_id | VARCHAR(36) | 用户ID | NOT NULL, FK → users |
| title | VARCHAR(255) | 对话标题(自动生成) | NOT NULL |
| model_name | VARCHAR(50) | 主要使用的模型 | - |
| created_at | TIMESTAMP | 创建时间 | DEFAULT NOW() |
| updated_at | TIMESTAMP | 最后更新时间 | DEFAULT NOW() |
| deleted_at | TIMESTAMP | 删除时间(软删除) | - |
---
### 9. general_messages - 通用消息表
**用途:** 存储智能问答的消息记录
```sql
CREATE TABLE general_messages (
id VARCHAR(36) PRIMARY KEY DEFAULT uuid_generate_v4(),
conversation_id VARCHAR(36) NOT NULL,
-- 消息内容
role VARCHAR(20) NOT NULL, -- user / assistant
content TEXT NOT NULL,
-- AI响应信息
model VARCHAR(50), -- 使用的具体模型
tokens INTEGER, -- token消耗
metadata JSONB, -- 扩展信息如knowledgeBaseIds、usage等
-- 时间戳
created_at TIMESTAMP DEFAULT NOW(),
-- 外键
CONSTRAINT fk_general_messages_conversations FOREIGN KEY (conversation_id)
REFERENCES general_conversations(id) ON DELETE CASCADE
);
-- 索引
CREATE INDEX idx_general_messages_conversation_id ON general_messages(conversation_id);
CREATE INDEX idx_general_messages_created_at ON general_messages(created_at);
-- 注释
COMMENT ON TABLE general_messages IS '通用消息表,用于智能问答功能';
```
**字段说明:**
| 字段 | 类型 | 说明 | 约束 |
|------|------|------|------|
| id | VARCHAR(36) | 消息ID | PRIMARY KEY, UUID |
| conversation_id | VARCHAR(36) | 对话ID | NOT NULL, FK → general_conversations |
| role | VARCHAR(20) | 角色user/assistant | NOT NULL |
| content | TEXT | 消息内容 | NOT NULL |
| model | VARCHAR(50) | 使用的模型 | - |
| tokens | INTEGER | token消耗 | - |
| metadata | JSONB | 元数据知识库IDs、使用统计等 | - |
| created_at | TIMESTAMP | 创建时间 | DEFAULT NOW() |
**metadata结构示例**
```json
{
"knowledgeBaseIds": ["kb-uuid-1", "kb-uuid-2"],
"usage": {
"promptTokens": 150,
"completionTokens": 200,
"totalTokens": 350
}
}
```
---
## 索引设计
### 主要索引
@@ -415,6 +532,9 @@ COMMENT ON TABLE admin_logs IS '管理员操作日志表,用于审计';
| knowledge_bases | user_id | INDEX | 查询用户的知识库 |
| documents | kb_id | INDEX | 查询知识库的文档 |
| documents | status | INDEX | 筛选处理状态 |
| general_conversations | user_id | INDEX | 查询用户的通用对话 |
| general_conversations | created_at | INDEX | 按时间排序 |
| general_messages | conversation_id | INDEX | 查询对话消息 |
### 复合索引(如需优化性能可添加)