feat: 重构异步模型字段并更新依赖

This commit is contained in:
2026-06-08 18:01:54 +08:00
parent ee6677c1f8
commit e1461cf0f0
12 changed files with 219 additions and 335 deletions

View File

@@ -34,7 +34,6 @@ func saveToRedis(ctx context.Context, session *entity.ComposeSession) error {
if err != nil {
return fmt.Errorf("序列化会话数据失败: %w", err)
}
if err = executeRedisCommands(ctx, key, string(b), maxRounds, expireSeconds); err != nil {
return err
}
@@ -50,18 +49,15 @@ func executeRedisCommands(ctx context.Context, key string, value string, maxRoun
if _, err := g.Redis().Do(ctx, "LTRIM", key, 0, maxRounds-1); err != nil {
return fmt.Errorf("裁剪Redis列表失败: %w", err)
}
if _, err := g.Redis().Do(ctx, "EXPIRE", key, expireSeconds); err != nil {
return fmt.Errorf("设置过期时间失败: %w", err)
}
return nil
}
// getFromRedis 从Redis获取会话历史
func getFromRedis(ctx context.Context, sessionId string) ([]map[string]any, error) {
key := formatRedisKey(sessionId)
result, err := g.Redis().Do(ctx, "LRANGE", key, 0, -1)
if err != nil {
return nil, fmt.Errorf("从Redis获取数据失败: %w", err)

View File

@@ -47,15 +47,35 @@ func Callback(ctx context.Context, req *dto.SessionCallbackReq) (*dto.SessionCal
}
// GetHistoryMessages 获取历史信息
func GetHistoryMessages(ctx context.Context, sessionId string) ([]map[string]any, error) {
func GetHistoryMessages(ctx context.Context, sessionId string, nodeId string) ([]map[string]any, error) {
// 1) 获取最大轮次
maxRounds := g.Cfg().MustGet(ctx, "session.maxRounds", 10).Int()
// 2) 从 Redis 获取历史记录
redisHistory, err := GetSessionHistoryForInference(ctx, sessionId)
if err == nil && len(redisHistory) > 0 {
return redisHistory, nil
}
return getHistoryFromDatabase(ctx, sessionId, maxRounds)
// 3) Redis 没有,从数据库查最新 maxRounds
sessions, _, err := dao.ComposeSession.List(ctx, &entity.ComposeSession{
SessionId: sessionId,
NodeId: nodeId,
}, 1, maxRounds)
if err != nil {
return nil, fmt.Errorf("DB获取历史失败: %w", err)
}
// 4) 为空返回报错
if len(sessions) == 0 {
return nil, fmt.Errorf("会话不存在: sessionId=%s nodeId=%s", sessionId, nodeId)
}
// 5) 提取为统一格式
messages := extractMessagesFromSessions(sessions)
// 6) 缓存 Redis 半小时
//_ = CacheSessionHistoryForInference(ctx, sessionId, messages, 30*time.Minute)
return messages, nil
}
// getHistoryFromDatabase 从数据库获取历史记录
@@ -77,12 +97,10 @@ func getHistoryFromDatabase(ctx context.Context, sessionId string, maxRounds int
// extractMessagesFromSessions 从会话列表中提取消息
func extractMessagesFromSessions(sessions []*entity.ComposeSession) []map[string]any {
var messages []map[string]any
for _, session := range sessions {
appendRequestMessages(session.RequestContent, &messages)
appendResponseMessages(session.ResponseContent, &messages)
}
return messages
}