2025-12-06 10:13:38 +08:00
|
|
|
|
package redis
|
|
|
|
|
|
|
|
|
|
|
|
// SendStreamMessage 发送到 Redis Stream 的消息结构
|
|
|
|
|
|
type SendStreamMessage struct {
|
|
|
|
|
|
UserId string `json:"user_id"` // 用户ID
|
|
|
|
|
|
Content string `json:"content"` // 消息内容
|
|
|
|
|
|
Timestamp int64 `json:"timestamp"` // 时间戳(秒)
|
|
|
|
|
|
MessageId string `json:"message_id"` // 消息唯一ID
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ToMap 转换为 map[string]interface{} 用于 Stream 存储
|
|
|
|
|
|
func (m *SendStreamMessage) ToMap() map[string]interface{} {
|
|
|
|
|
|
return map[string]interface{}{
|
|
|
|
|
|
"user_id": m.UserId,
|
|
|
|
|
|
"content": m.Content,
|
|
|
|
|
|
"timestamp": m.Timestamp,
|
|
|
|
|
|
"message_id": m.MessageId,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// BatchStreamMessage 批量消息结构
|
|
|
|
|
|
type BatchStreamMessage struct {
|
|
|
|
|
|
UserId string `json:"user_id"` // 用户ID
|
|
|
|
|
|
Content string `json:"content"` // 消息内容
|
|
|
|
|
|
Timestamp int64 `json:"timestamp"` // 时间戳(秒)
|
|
|
|
|
|
BatchId string `json:"batch_id"` // 批次ID
|
|
|
|
|
|
Index int `json:"index"` // 批次内序号
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ToMap 转换为 map[string]interface{} 用于 Stream 存储
|
|
|
|
|
|
func (m *BatchStreamMessage) ToMap() map[string]interface{} {
|
|
|
|
|
|
return map[string]interface{}{
|
|
|
|
|
|
"user_id": m.UserId,
|
|
|
|
|
|
"content": m.Content,
|
|
|
|
|
|
"timestamp": m.Timestamp,
|
|
|
|
|
|
"batch_id": m.BatchId,
|
|
|
|
|
|
"index": m.Index,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-12-06 18:04:29 +08:00
|
|
|
|
|
|
|
|
|
|
// ResponseStreamMessage RAGFlow 响应消息结构(写入结果 Stream)
|
|
|
|
|
|
type ResponseStreamMessage struct {
|
|
|
|
|
|
UserId string `json:"user_id"` // 用户ID
|
|
|
|
|
|
Platform string `json:"platform"` // 平台标识
|
|
|
|
|
|
Question string `json:"question"` // 用户问题
|
|
|
|
|
|
Content string `json:"content"` // RAGFlow 回复内容
|
|
|
|
|
|
SessionId string `json:"session_id"` // RAGFlow Session ID
|
|
|
|
|
|
Timestamp int64 `json:"timestamp"` // 时间戳(秒)
|
|
|
|
|
|
MessageId string `json:"message_id"` // 原始消息ID
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ToMap 转换为 map[string]interface{} 用于 Stream 存储
|
|
|
|
|
|
func (m *ResponseStreamMessage) ToMap() map[string]interface{} {
|
|
|
|
|
|
return map[string]interface{}{
|
|
|
|
|
|
"user_id": m.UserId,
|
|
|
|
|
|
"platform": m.Platform,
|
|
|
|
|
|
"question": m.Question,
|
|
|
|
|
|
"content": m.Content,
|
|
|
|
|
|
"session_id": m.SessionId,
|
|
|
|
|
|
"timestamp": m.Timestamp,
|
|
|
|
|
|
"message_id": m.MessageId,
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// FollowUpMessage 追问消息结构(RabbitMQ 延时队列)
|
|
|
|
|
|
type FollowUpMessage struct {
|
|
|
|
|
|
UserId string `json:"user_id"` // 用户ID
|
|
|
|
|
|
Platform string `json:"platform"` // 平台标识
|
|
|
|
|
|
Content string `json:"content"` // 追问内容
|
|
|
|
|
|
FollowUpType int `json:"follow_up_type"` // 追问类型:1=30s, 2=60s, 3=180s
|
|
|
|
|
|
Timestamp int64 `json:"timestamp"` // 发送时间戳
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 追问话术常量
|
|
|
|
|
|
const (
|
|
|
|
|
|
FollowUpType1 = 1 // 30秒追问
|
|
|
|
|
|
FollowUpType2 = 2 // 60秒追问
|
|
|
|
|
|
FollowUpType3 = 3 // 180秒追问
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
// 追问话术内容
|
|
|
|
|
|
var FollowUpContents = map[int]string{
|
|
|
|
|
|
FollowUpType1: "还有其他问题吗?",
|
|
|
|
|
|
FollowUpType2: "如果需要帮助,随时告诉我~",
|
|
|
|
|
|
FollowUpType3: "我一直在线,有问题随时找我~",
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 追问延时时间(秒)
|
|
|
|
|
|
var FollowUpDelays = map[int]int{
|
|
|
|
|
|
FollowUpType1: 30,
|
|
|
|
|
|
FollowUpType2: 60,
|
|
|
|
|
|
FollowUpType3: 180,
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// ArchiveMessage 会话归档消息结构(RabbitMQ 延时队列)
|
|
|
|
|
|
type ArchiveMessage struct {
|
|
|
|
|
|
UserId string `json:"user_id"` // 用户ID
|
|
|
|
|
|
Platform string `json:"platform"` // 平台标识
|
|
|
|
|
|
SessionId string `json:"session_id"` // RAGFlow Session ID
|
|
|
|
|
|
Timestamp int64 `json:"timestamp"` // 发送时间戳
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 归档延时时间(秒)
|
|
|
|
|
|
const ArchiveDelaySeconds = 3600 // 60分钟
|