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

10 KiB
Raw Permalink Blame History

智能客服系统技术架构文档

1. 架构设计

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

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):

{
  "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:

{
  "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:

{
  "success": true,
  "file_id": "kb_001"
}

5. 服务架构图

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 数据模型定义

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)

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)

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)

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)

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初始数据

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 集成

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 部署架构

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. 环境准备

# 创建数据目录
mkdir -p ./data

# 启动 Docker 服务
docker-compose up -d redis chromadb coze-loop

2. Eino Framework 集成

# 安装 Eino 依赖
go get github.com/cloudwego/eino

# 按照官方文档配置 Kratos 集成

3. 服务启动

# 启动后端服务
go run cmd/server/main.go -conf configs/

# 服务健康检查
curl http://localhost:8302/api/system/status

7.4 配置文件示例

config.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"