ai-courseware/eino-project/.trae/documents/智能客服系统技术架构文档.md

459 lines
10 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.

# 智能客服系统技术架构文档
## 1. 架构设计
```mermaid
graph TD
A[前端应用] --> B[Eino Framework后端服务:8302]
B --> C[Ollama模型服务:11434]
B --> D[ChromaDB向量数据库]
B --> E[订单API服务]
B --> F[Coze-Loop监控平台]
B --> G[SQLite数据库]
B --> H[Redis缓存:6379]
subgraph "后端API服务层 (端口8302)"
B
end
subgraph "AI模型层 (localhost:11434)"
C
I[Qwen3:8b 意图识别]
J[Deepseek-v3.1 对话生成]
C --> I
C --> J
end
subgraph "数据存储层"
D
G
H
K[(会话数据 - ./data/)]
L[(知识库文档 - ChromaDB)]
end
subgraph "外部服务层"
E
F
end
```
## 2.Technology Description
* Backend: Eino Framework + Kratos (Web框架)
- Eino Framework: https://github.com/cloudwego/eino (LLM应用开发框架)
- 集成文档: https://www.cloudwego.io/zh/docs/eino/
- Kratos: Go微服务框架提供HTTP/gRPC服务能力
* AI Models: Ollama (qwen3:8b for intent, deepseek-v3.1 for chat - both cloud models)
* Database: SQLite + Redis (Docker) + ChromaDB
* Monitoring: Coze-Loop (simplified)
- Coze-Loop: https://github.com/coze-dev/coze-loop (AI应用监控平台)
* Deployment: Docker containers
* API Port: 8302
## 3. API路由定义
| API路由 | 方法 | 功能说明 | 端口 |
| ---------------------------- | ------ | ---------------- | ---- |
| /api/chat | POST | 聊天消息处理支持SSE流式响应 | 8302 |
| /api/sessions | GET | 获取会话列表 | 8302 |
| /api/sessions | POST | 创建新会话 | 8302 |
| /api/knowledge/upload | POST | 知识库文档上传 | 8302 |
| /api/knowledge/list | GET | 获取知识库文档列表 | 8302 |
| /api/knowledge/{id} | DELETE | 删除知识库文档 | 8302 |
| /api/analytics/conversations | GET | 获取对话统计数据 | 8302 |
| /api/analytics/costs | GET | 获取AI成本统计 | 8302 |
| /api/system/status | GET | 系统健康检查 | 8302 |
## 4. API定义
### 4.1 核心API (最小MVP实现)
聊天对话接口 (端口: 8302)
```
POST /api/chat
```
Request:
| 参数名 | 参数类型 | 是否必需 | 描述 |
| ----------- | ------ | ----- | ------ |
| message | string | true | 用户输入消息 |
| session\_id | string | false | 会话ID |
Response (SSE Stream):
```json
{
"session_id": "default",
"timestamp": "2025-01-15T16:19:07.139531",
"type": "data|process|result|error",
"payload": {
"data_type": "general_chat_stream",
"content": {
"chunk": "我是",
"full_message": "您好!我是您的智能客服助手",
"is_final": false
}
}
}
```
订单查询接口 (Mock数据)
```
POST /api/order/query
```
Request:
| 参数名 | 参数类型 | 是否必需 | 描述 |
| --------- | ------ | ---- | --- |
| order\_id | string | true | 订单号 |
Mock Response:
```json
{
"order_id": "ORD123456",
"status": "已发货",
"need_ai": true,
"details": {
"product": "智能手机",
"amount": 2999.00,
"create_time": "2025-01-10"
}
}
```
知识库上传接口
```
POST /api/knowledge/upload
```
Request:
| 参数名 | 参数类型 | 是否必需 | 描述 |
| ---- | ---- | ---- | ---------- |
| file | file | true | Word/TXT文档 |
Response:
```json
{
"success": true,
"file_id": "kb_001"
}
```
## 5. 服务架构图
```mermaid
graph TD
A[客户端请求] --> B[API网关层]
B --> C[业务逻辑层]
C --> D[AI服务层]
C --> E[数据访问层]
subgraph "Eino Framework + Kratos服务"
B
C
F[意图识别服务]
G[对话管理服务]
H[知识库服务]
I[订单服务]
C --> F
C --> G
C --> H
C --> I
end
subgraph "AI模型服务"
D
J[Ollama服务]
K[模型管理]
D --> J
D --> K
end
subgraph "数据层"
E
L[(ChromaDB)]
M[(会话存储)]
E --> L
E --> M
end
```
## 6. 数据模型
### 6.1 数据模型定义
```mermaid
erDiagram
CHAT_SESSION ||--o{ CHAT_MESSAGE : contains
CHAT_SESSION ||--o{ INTENT_LOG : tracks
CHAT_SESSION ||--o{ AI_COST_LOG : tracks
KNOWLEDGE_BASE ||--o{ DOCUMENT_CHUNK : contains
ORDER_QUERY ||--o{ AI_DIAGNOSIS : may_have
CHAT_SESSION {
string session_id PK
datetime created_at
datetime updated_at
string user_id
json metadata
}
CHAT_MESSAGE {
string message_id PK
string session_id FK
string role
text content
datetime timestamp
string message_type
}
INTENT_LOG {
string log_id PK
string session_id FK
string user_message
string predicted_intent
float confidence_score
datetime timestamp
}
KNOWLEDGE_BASE {
string doc_id PK
string title
text content
datetime created_at
datetime updated_at
json metadata
}
DOCUMENT_CHUNK {
string chunk_id PK
string doc_id FK
text chunk_content
vector embedding
json metadata
}
ORDER_QUERY {
string query_id PK
string session_id FK
string order_id
json order_data
boolean need_ai
datetime timestamp
}
AI_DIAGNOSIS {
string diagnosis_id PK
string query_id FK
text diagnosis_result
string model_used
datetime timestamp
}
AI_COST_LOG {
string cost_id PK
string session_id FK
string model_name
string operation_type
integer input_tokens
integer output_tokens
integer total_tokens
decimal cost_amount
datetime timestamp
}
```
### 6.2 数据定义语言 (最小MVP实现)
聊天会话表 (chat\_sessions)
```sql
CREATE TABLE chat_sessions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id VARCHAR(100) UNIQUE NOT NULL,
title VARCHAR(200),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
消息记录表 (messages)
```sql
CREATE TABLE messages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id VARCHAR(100) NOT NULL,
role VARCHAR(20) NOT NULL CHECK (role IN ('user', 'assistant')),
content TEXT NOT NULL,
intent_type VARCHAR(50),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
AI成本统计表 (ai\_cost\_logs)
```sql
CREATE TABLE ai_cost_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id VARCHAR(100) NOT NULL,
operation_type VARCHAR(50) NOT NULL,
model_name VARCHAR(100) NOT NULL,
input_tokens INTEGER DEFAULT 0,
output_tokens INTEGER DEFAULT 0,
cost_amount DECIMAL(10,6) DEFAULT 0.000000,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
知识库文档表 (knowledge\_documents)
```sql
CREATE TABLE knowledge_documents (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_name VARCHAR(255) NOT NULL,
file_type VARCHAR(20) NOT NULL CHECK (file_type IN ('docx', 'txt')),
content_preview TEXT,
upload_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
status VARCHAR(20) DEFAULT 'completed'
);
```
\-- Mock初始数据
```sql
INSERT INTO knowledge_documents (file_name, file_type, content_preview) VALUES
('产品使用手册.docx', 'docx', '本手册详细介绍了产品的使用方法和注意事项...'),
('常见问题解答.txt', 'txt', 'Q: 如何重置密码A: 请联系客服重置密码...');
INSERT INTO chat_sessions (session_id, title) VALUES
('default', '默认会话');
```
## 7. 部署配置
### 7.1 服务配置信息
**Eino Framework 集成**
- 官方文档: https://www.cloudwego.io/zh/docs/eino/
- 集成方式: 按照官方文档进行 Kratos 项目集成
- 版本要求: 最新稳定版本
**AI 模型服务配置**
- Ollama 服务地址: `http://localhost:11434`
- 可用模型:
- `qwen3:8b` - 用于意图识别
- `deepseek-v3.1` - 用于对话生成
- 模型调用: 通过 Eino Framework 统一调用
**数据存储配置**
- Redis 配置: `localhost:6379` (无密码)
- ChromaDB: Docker 容器部署
- SQLite 数据库: 文件存放在 `./data/` 目录下
**监控配置**
- Coze-Loop: 容器部署方式
- 监控数据: 简化收集,突出监控能力展示
- 集成方式: 轻量级集成,适合示例项目
**端口配置**
- 后端 API 服务: 8302 (无冲突)
- Ollama 服务: 11434
- Redis 服务: 6379
- ChromaDB: 8000 (默认)
### 7.2 Docker 部署架构
```mermaid
graph TD
A[智能客服后端:8302] --> B[Ollama容器:11434]
A --> C[Redis容器:6379]
A --> D[ChromaDB容器:8000]
A --> E[Coze-Loop容器]
A --> F[SQLite文件:./data/]
subgraph "Docker Compose 部署"
B
C
D
E
end
subgraph "本地文件系统"
F
G[知识库文档]
H[会话数据]
end
```
### 7.3 部署步骤
**1. 环境准备**
```bash
# 创建数据目录
mkdir -p ./data
# 启动 Docker 服务
docker-compose up -d redis chromadb coze-loop
```
**2. Eino Framework 集成**
```bash
# 安装 Eino 依赖
go get github.com/cloudwego/eino
# 按照官方文档配置 Kratos 集成
```
**3. 服务启动**
```bash
# 启动后端服务
go run cmd/server/main.go -conf configs/
# 服务健康检查
curl http://localhost:8302/api/system/status
```
### 7.4 配置文件示例
**config.yaml**
```yaml
server:
http:
addr: 0.0.0.0:8302
timeout: 1s
grpc:
addr: 0.0.0.0:9000
timeout: 1s
data:
database:
driver: sqlite3
source: ./data/customer_service.db
redis:
addr: localhost:6379
password: ""
db: 0
ollama:
endpoint: http://localhost:11434
chromadb:
endpoint: http://localhost:8000
coze_loop:
endpoint: http://localhost:8080
api_key: "demo_key"
```