当前位置: 首页 > news >正文

[Agent可视化] 会话管理 | Redis缓存 | PostgreSQL持久化 | 智能上下文处理

第六章:会话管理系统

欢迎回到Shannon

在上一章关于编排工作流(Go)的学习中,我们了解了如何通过Temporal引擎协调复杂AI项目的执行

但当任务完成后,系统如何记住对话历史

如何让智能体在下次交互时保持上下文连贯?这正是会话管理系统的核心价值。

挑战:AI的记忆能力

设想以下对话场景:

用户:“今天天气怎么样?”
AI:“您想查询哪个城市?”
用户:“巴黎”
AI:“巴黎当前气温22℃,多云”
用户:“那明天呢?”

要让AI正确理解最后一个问题中的"明天"指代巴黎,需要系统具备两种记忆能力:

  1. 短期记忆:记住当前对话中的"巴黎"定位
  2. 长期记忆:记录用户偏好等持久信息

技术架构

1. 双存储引擎设计

存储类型技术栈数据时效性典型数据
短期记忆Redis会话级当前对话历史、临时上下文变量
长期记忆PostgreSQL持久化历史会话归档、token消耗统计

前文传送:

Redis 文档学习_lvy

PostgreSQL运用:[p2p-Magnet] 数据模型(GORM) | DHT爬虫 | 分类器

在这里插入图片描述

2. 会话数据结构

type Session struct {ID         string                 // 会话唯一标识Context    map[string]interface{} // 动态上下文(如用户偏好)History    []Message              // 消息历史记录TokenUsage TokenTracker           // token消耗统计
}type Message struct {Role       string    // "user"或"assistant"Content    string    // 消息内容Tokens     int       // 消耗token数Timestamp  time.Time // 发生时间
}

3. ⭕核心流程

在这里插入图片描述

实战:天气查询场景

1. 初始请求(新建会话)

POST /api/tasks
{"query": "今天天气怎么样","session_id": "weather-001" 
}

系统响应

  • Redis新建会话记录
  • PostgreSQL创建会话元数据
  • 返回响应:“您想查询哪个城市?”

2. 后续请求(会话延续)

POST /api/tasks
{"query": "巴黎","session_id": "weather-001"
}

上下文处理

  1. 从Redis加载完整历史记录:

    {"history": [{"role": "user", "content": "今天天气怎么样"},{"role": "assistant", "content": "您想查询哪个城市?"}]
    }
    
  2. 将"巴黎"存入上下文:

    {"context": {"location": "巴黎"}
    }
    

3. 最终请求(上下文理解)

POST /api/tasks
{"query": "那明天呢","session_id": "weather-001"
}

智能响应

  1. 自动补全为"明天巴黎的天气"
  2. 返回精准查询结果

核心代码

1. 会话管理器(manager.go)

func (m *Manager) GetSession(ctx context.Context, id string) (*Session, error) {// 优先查询本地缓存if sess, ok := m.localCache[id]; ok {return sess, nil}// Redis查询data, err := m.redis.Get(ctx, id).Bytes()if err == redis.Nil {// 新会话持久化if err := m.pg.CreateSession(ctx, id); err != nil {return nil, err}return &Session{ID: id}, nil}// 反序列化会话var sess Sessionif err := json.Unmarshal(data, &sess); err != nil {return nil, err}// 更新本地缓存m.localCache[id] = &sessreturn &sess, nil
}

2. Token统计模块(tracker.go)

  • 实时更新Redis
  • 异步持久化到PostgreSQL
func (t *Tracker) Record(ctx context.Context, sessionID string, usage TokenUsage) error {// 实时更新Redisif err := t.redis.HIncrBy(ctx, fmt.Sprintf("session:%s", sessionID),"tokens_used",usage.Total).Err(); err != nil {return err}// 异步持久化到PostgreSQLgo func() {_ = t.pg.ExecContext(ctx, `INSERT INTO token_usage (session_id, model, tokens) VALUES ($1, $2, $3)`,sessionID, usage.Model, usage.Total)}()return nil
}

3. 上下文处理器(context.go)

func ProcessInput(ctx context.Context, session *Session, input string) (*Session, error) {// 历史消息处理(保留最近50条)session.History = append(session.History, Message{Role:    "user",Content: input,})if len(session.History) > 50 {session.History = session.History[len(session.History)-50:]}// !!!!!!!实体提取(如地点、时间)if entities := extractEntities(input); entities.Location != "" {session.Context["location"] = entities.Location}return session, nil
}

小结

会话管理系统通过:

  • Redis高速缓存:实现毫秒级上下文读取
  • PostgreSQL持久化:保障数据可靠性
  • 智能上下文处理:自动提取关键信息

构建了Shannon平台的记忆中枢,使AI交互具备真正的连贯性。

接下来我们将探索系统的监控能力——可观测性体系。

下一章:可观测性体系

http://www.dtcms.com/a/516316.html

相关文章:

  • [Agent可视化] 编排工作流(Go) | Temporal引擎 | DAG调度器 | ReAct模式实现
  • 自定义时间服务器主机的时间通过ntp.aliyun.com主机同步时间
  • 做移动端网站设计做交通事故的网站
  • 【论文精读】EvalCrafter:文本到视频生成模型的全面评测框架
  • 普林尼与LLM提示词注入:AI安全防线的隐秘挑战
  • 撰写标书很难吗?用AI标书工具写标书,快速输出优质投标方案
  • HTML 实体起始符号详解
  • 什么网站可以做二建的题目贵州安顺建设主管部门网站
  • 海南美容网站建设旅游网站建设的总结
  • 通过npm run XXX命令生成uniapp的pages.json文件
  • HTML教程——1,css
  • H5响应式网站数据app外包公司推荐
  • ubuntu服务器无法识别所有显卡
  • Spring中常用的设计模式
  • 做网站是什么公司wordpress禁止 逍遥
  • 不定高虚拟列表性能优化全解析
  • 怎么免费建立自己的网站平台2018威胁网站检测平台建设
  • Python-封装、继承与重写
  • 新媒体培训班学费多少做网站和优化
  • 网站开发案例pdf工程造价信息价在什么网站查
  • Prometheus(一)—— Prometheus监控系统从入门到实战:理论与部署全指南
  • 使用宝塔面板docker部署https://github.com/imsyy/DailyHotApi项目
  • RHCE作业2
  • 乐云网站建设网站源码分享网
  • 发展历程 网站建设专业提供网站建设服务是什么
  • Katalon Studio AI生成API测试
  • ip生产区
  • 做网站需要了解哪些知识wordpress文章增加字段
  • 要制作一个自己的网站wordpress实时推送 php
  • AWS DMS 任务优化实战:解决 Aurora MySQL 到 Redshift 的数据一致性与性能问题