Files
smartmate/backend/model/agent.go
LoveLosita f9d52e0c5e Version: 0.4.1.dev.260304
feat: 💬 新增对话创建与上下文记忆机制

* 新增对话的创建与使用功能,实现会话级上下文隔离
* 实现上下文保存与传递机制,使模型具备持续对话记忆能力
* 引入滑动窗口策略控制上下文规模
* 当前窗口大小限制为 20 条消息,超过后自动丢弃最早消息以控制上下文长度

docs: 📝 更新示例配置文件

* 更新示例配置文件,新增 `agent` 相关配置信息
* 明确 Agent 模块运行所需参数,方便本地部署与环境初始化

undo: ⚠️ Agent 上下文读取性能待优化

* 当前测试中模型响应速度偏慢
* 计划后续将上下文暂存至缓存层,以减少读取与拼接开销并提升响应速度
2026-03-04 19:56:08 +08:00

57 lines
3.2 KiB
Go
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.
package model
import "time"
type UserSendMessageRequest struct {
ConversationID string `json:"conversation_id,omitempty"` // 可选,指定对话 ID
Message string `json:"message" binding:"required"`
Model string `json:"model,omitempty"` // 可选,指定使用的模型
}
type SSEResponse struct {
Event string `json:"event"` // 事件类型,如 "message"、"error" 等
ID int `json:"id,omitempty"` // SSE 的 id 字段
Retry int64 `json:"retry,omitempty"` // SSE 的 retry 字段(毫秒)
Data SSEMessageData `json:"data"` // 事件数据
}
type SSEMessageData struct {
Step int `json:"step,omitempty"`
Message string `json:"message,omitempty"`
}
type AgentChat struct {
ID int64 `gorm:"column:id;primaryKey;autoIncrement;comment:自增ID"`
ChatID string `gorm:"column:chat_id;type:varchar(36);not null;uniqueIndex:uk_chat_id;comment:会话IDUUID格式"`
UserID int `gorm:"column:user_id;not null;index:idx_user_last,priority:1;index:idx_user_status,priority:1;comment:所属用户"`
Title *string `gorm:"column:title;type:varchar(255);comment:会话标题"`
SystemPrompt *string `gorm:"column:system_prompt;type:text;comment:可选:系统提示词/会话级上下文"`
Model *string `gorm:"column:model;type:varchar(100);comment:可选:使用的模型标识"`
MessageCount int `gorm:"column:message_count;not null;default:0;comment:消息数(可冗余)"`
TokensTotal int `gorm:"column:tokens_total;not null;default:0;comment:累计消耗(可冗余)"`
LastMessageAt *time.Time `gorm:"column:last_message_at;comment:最后一条消息时间"`
Status string `gorm:"column:status;type:varchar(32);not null;default:active;index:idx_user_status,priority:2;comment:active/archived"`
CreatedAt *time.Time `gorm:"column:created_at;autoCreateTime"`
UpdatedAt *time.Time `gorm:"column:updated_at;autoUpdateTime"`
DeletedAt *time.Time `gorm:"column:deleted_at;comment:软删除"`
// 关联:一个会话有多条消息
Chats []ChatHistory `gorm:"foreignKey:ChatID;references:ChatID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
}
func (AgentChat) TableName() string { return "agent_chats" }
type ChatHistory struct {
ID int `gorm:"column:id;primaryKey;autoIncrement"`
ChatID string `gorm:"column:chat_id;type:varchar(36);not null;index:idx_user_chat,priority:2;index:idx_chat_id;comment:对话UUID"`
UserID int `gorm:"column:user_id;not null;index:idx_user_chat,priority:1"`
MessageContent *string `gorm:"column:message_content;type:text;comment:用户或AI的话"`
Role *string `gorm:"column:role;type:varchar(32);comment:user / assistant"`
TokensConsumed int `gorm:"column:tokens_consumed;not null;default:0;comment:单次消耗,用于累加到 users 表"`
CreatedAt *time.Time `gorm:"column:created_at;autoCreateTime"`
// 可选:回挂会话(按 chat_id -> chat_histories.chat_id
ChatHistory AgentChat `gorm:"foreignKey:ChatID;references:ChatID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
}
func (ChatHistory) TableName() string { return "chat_histories" }