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

第四章:Messaging and Memory

Chapter 4: Messaging and Memory


从配置管理到消息记忆:如何让AI记住对话内容?

在上一章的配置管理中,我们已经能让系统记住所有参数设置。但你是否想过:如果用户连续提问“今天天气如何?”和“明天呢?”,AI如何知道“明天”是接续之前的查询?这就像给指挥官配备一个记忆力超强的副官,专门记录对话历史!本章将介绍如何通过消息与记忆系统让AI记住之前的对话内容,保持上下文连贯。


核心问题:如何让AI记住“之前的对话”?

想象你和朋友聊天时,突然对方忘记你们之前讨论过的内容,这会让人很困扰!对于AI来说:

  • 用户先问:“今天的天气?”
  • 接着问:“明天呢?”

如果AI不知道“明天”是接续“今天”的查询,就无法正确回答。消息记忆系统就像一个智能笔记本,自动记录:
✅ 每个对话参与者的发言
✅ 工具调用的执行结果
✅ 保持对话上下文不超过限制

通过本章学习,我们将实现:
✅ 自动维护对话历史记录
✅ 设置消息数量上限防止内存溢出
✅ 整合工具调用的结果到对话中


核心概念分解

1. 消息结构:对话记录的“标准化格式”

每条消息都有统一格式,包含:

  • 角色:用户、助手、工具(如天气API)
  • 内容:文本或图片(base64编码)
  • 工具调用记录:记录调用了哪个工具
# app/schema.py中的Message类片段
class Message(BaseModel):role: Role          # 发言者身份(用户/助手/工具)content: Optional[str]  # 文本内容tool_calls: Optional[List[ToolCall]]  # 工具调用记录
2. 记忆管理:对话历史的“智能管家”

记忆对象负责:

  • 存储消息列表
  • 限制最多存储100条消息(默认值可配置)
  • 提供添加/清理/获取最近消息的功能
# app/schema.py中的Memory类片段
class Memory(BaseModel):messages: List[Message] = []  # 消息列表max_messages: int = 100       # 最大消息数量def add_message(self, message: Message):self.messages.append(message)if len(self.messages) > self.max_messages:self.messages = self.messages[-self.max_messages:]  # 只保留最新消息
3. 工具调用整合:让工具结果“参与对话”

当调用天气API时,工具调用记录会自动加入对话历史,方便后续分析:

# 示例:添加工具调用消息
tool_call = ToolCall(id="123", function=Function(name="get_weather", arguments="北京"))
memory.add_message(Message.tool_message(content="查询到北京今天25°C",name="天气API",tool_call_id="123"
))

如何用消息记忆解决问题?

场景:用户连续查询天气并获得连贯回答

步骤1:初始化记忆系统
from app.schema import Memory# 创建记忆对象,设置最大消息数为5
memory = Memory(max_messages=5)
步骤2:记录用户提问
# 用户问“今天北京天气?”
memory.add_message(Message.user_message("今天北京天气?"))
步骤3:记录工具调用结果
# 调用天气API获取数据
tool_response = "北京今天25°C,晴"
memory.add_message(Message.tool_message(content=tool_response,name="天气API",tool_call_id="tool_001"
))
步骤4:生成回答并记录
# 助手回复结果
assistant_response = f"今天北京{tool_response}"
memory.add_message(Message.assistant_message(assistant_response))
步骤5:用户继续提问
# 用户接着问“明天呢?”
memory.add_message(Message.user_message("明天呢?"))

此时,记忆中的消息列表会显示完整的对话历史,确保助手能理解“明天”是接续“今天”的查询。


内部实现揭秘:记忆系统的“工作原理”

流程分解(用简单序列图演示)
用户 Memory WeatherAPI 发送"今天北京天气?" 存储用户消息 触发工具调用 返回天气数据 存储工具结果 显示完整对话历史 用户 Memory WeatherAPI
关键代码解析

1. 消息格式化示例

# 将消息转化为字典格式方便传输
message = Message.user_message("你好!")
print(message.to_dict())
# 输出:
# {'role': 'user', 'content': '你好!'}

2. 消息数量限制机制

memory = Memory(max_messages=2)
for i in range(5):memory.add_message(Message.user_message(f"消息{i}"))print(len(memory.messages))  # 输出:2(只保留最后两条消息)

深入理解消息与记忆系统

通过本章,你已掌握:
✅ 消息的标准化存储格式
✅ 记忆对象对对话历史的管理机制
✅ 工具调用记录如何参与对话上下文


小结与展望

通过消息与记忆系统,我们实现了:
✅ 对话历史的完整记录
✅ 动态调整消息存储数量
✅ 工具执行结果与对话的无缝衔接

下一章我们将探讨执行流框架,学习如何让所有组件按照预设流程协同工作——就像给指挥官制定一份详细的作战计划!现在你可以尝试修改代码,让AI在回答时主动引用之前的对话内容了。

http://www.xdnf.cn/news/194761.html

相关文章:

  • C语言中的指针详解
  • RSS‘25|CMU提出统一空中操作框架:以末端执行器为中心,无人机实现高精度遥操作
  • Cursor + Figma-Context-MCP ,让 Cursor 获取 Figma 设计图信息,实现 AI 生成页面的高度还原
  • 力扣面试150题--K 个一组翻转链表
  • 机器人--激光雷达
  • ESG跨境电商怎么样?esg跨境电商有哪些功用?
  • 阅读MySQL实战45讲第11天
  • uniapp打包apk如何实现版本更新
  • Spring MVC异常处理利器:深入理解HandlerExceptionResolver
  • SpringBoot实现接口防刷的5种高效方案详解
  • C#/.NET/.NET Core技术前沿周刊 | 第 36 期(2025年4.21-4.27)
  • AudioSet 音频中文类别
  • 蚂蚁seo蜘蛛池:提升网站收录的秘密武器
  • Nacos源码—1.Nacos服务注册发现分析二
  • 系统思考提升培训效能
  • 100天精通Python挑战总览 | 零基础到应用实战!
  • 安徽地区安全员A证考试中,哪些知识点是高频考点?
  • mysql8.0版本部署+日志清理+rsync备份策略
  • LLaMA-Factory部署以及大模型的训练(细节+新手向)
  • 基于 Java 的实现前端组装查询语句,后端直接执行查询方案,涵盖前端和后端的设计思路
  • Vue组件开发进阶:从通信原理到DOM异步更新实战
  • 在视图中交互 闪退问题
  • 1. 用户之窗
  • 【阿里云大模型高级工程师ACP习题集】2.6.用插件扩展答疑机器人的能力边界
  • IEC 61850标准协议解读 2.基于Java的MMS实现
  • Python爬虫实战:获取猫yan电影网最新热门电影数据并做分析,为51观影做参考
  • ArcGIS arcpy代码工具——根据属性结构表创建shape图层
  • OpenGL----OpenGL纹理与纹理缓存区
  • ICH CTD中ISS的关键内容与作用
  • ubuntu新增磁盘挂载