admin 管理员组

文章数量: 1184232

AI对话系统表设计分析

根据您的描述和DeepSeek官网的交互模式,我来分析一下当前的表设计问题并提供改进建议。

当前表设计的问题

  1. 概念混淆:当前AIConversation表混合了两个概念 - 对话会话(session)和单个消息交互(conversation turn)
  2. 缺少对话标题:确实缺少对话的名称/标题字段
  3. 层级关系不明确session_idconversation_id的关系不清晰

概念澄清

在AI对话系统中通常有两种层级:

  1. 会话(Session):代表一个完整的对话窗口/选项卡,包含多个交互轮次

    • 例如:DeepSeek中你新建一个"Python编程问题"对话
    • 有标题、创建时间等元数据
    • 可以包含多个消息交互
  2. 交互轮次(Conversation Turn):单次用户提问和AI回复的配对

    • 例如:在"Python编程问题"会话中你问"如何写快速排序",AI回复代码

改进建议

应该将表拆分为两个,明确层级关系:

from django.db import models

class AISession(models.Model):
    """代表一个完整的对话会话"""
    session_id = models.CharField(max_length=100, unique=True, primary_key=True)
    user_id = models.IntegerField(db_index=True)
    title = models.CharField(max_length=200, default="新对话")  # 对话框名称
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    is_active = models.BooleanField(default=True)
    
    class Meta:
        ordering = ['-updated_at']

class AIMessage(models.Model):
    """代表会话中的单次交互(用户消息+AI回复)"""
    message_id = models.CharField(max_length=100, unique=True, primary_key=True)
    session = models.ForeignKey(AISession, on_delete=models.CASCADE, related_name='messages')
    user_id = models.IntegerField(db_index=True)
    
    # 消息内容
    prompt = models.TextField()  # 用户输入
    response = models.TextField()  # AI回复
    
    # 状态
    status = models.SmallIntegerField(
        choices=[(0, '处理中'), (1, '成功'), (2, '失败')],
        default=0
    )
    
    # 元数据
    created_at = models.DateTimeField(auto_now_add=True)
    prompt_tokens = models.IntegerField(default=0)
    response_tokens = models.IntegerField(default=0)
    
    class Meta:
        ordering = ['created_at']

设计说明

  1. AISession表

    • 存储对话会话的元数据
    • 包含用户可见的title字段
    • 通过updated_at实现最近对话排序
  2. AIMessage表

    • 存储每次具体的交互
    • 通过外键关联到所属会话
    • 包含完整的请求/响应内容和状态
  3. ID关系

    • 一个session_id对应多个message_id
    • 在DeepSeek官网示例中,浏览器地址栏中的ID应该是session_id

使用示例

# 创建新会话
session = AISession.objects.create(
    session_id="sess_123",
    user_id=1,
    title="Python问题讨论"
)

# 添加消息
AIMessage.objects.create(
    message_id="msg_001",
    session=session,
    user_id=1,
    prompt="如何写快速排序?",
    response="以下是Python实现的快速排序代码...",
    status=1
)

这种设计更清晰地反映了AI对话系统的实际数据模型,也更容易实现常见的功能如对话列表、历史消息加载等。

本文标签: 消息 方案 AI