当前位置: 首页 > 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在回答时主动引用之前的对话内容了。

相关文章:

  • Python 如何操作数据库,让你使用 DeepSeek 开发数据库应用更加快 (Orm Bee)
  • 相机-IMU联合标定:相机标定
  • 大模型(LLMs)加速篇
  • Improving Deep Learning For Airbnb Search
  • 9.学习笔记-springboot(P90-P104)
  • OSCP - Proving Grounds - Wpwn
  • 同步时钟与异步时钟
  • Python 实现的运筹优化系统数学建模详解(动态规划模型)
  • qemu(3) -- qemu-user使用
  • 【Machine Learning Q and AI 读书笔记】- 01 嵌入、潜空间和表征
  • 4.环境变量
  • 对Electron打包的exe文件进行反解析
  • 中级社会工作者工作内容有哪些
  • 【go】go语言slice/map的产生背景,及原理理解
  • 【解决方案】Linux解决CUDA安装过程中GCC版本不兼容
  • LLaMA-Factory部署以及大模型的训练(细节+新手向)
  • C语言高频面试题——局部变量和全局变量可以重名吗?
  • 02《小地图实时》Unity
  • 区块链随学随记
  • 第二章 信息技术发展(2.2 新一代信息技术及应用)
  • 新华每日电讯:从上海街区经济看账面、市面、人面、基本面
  • 第五届全国医院人文管理路演在昆山举办:患者体验才是温度计
  • 中消协发布“五一”消费提示:践行“光盘行动”,抵制餐饮浪费
  • 《奇袭白虎团》原型人物之一赵顺合辞世,享年95岁
  • 凝聚多方力量,中国农科院油菜产业专家团部署单产提升新任务
  • 新加坡选情渐热:播客、短视频各显神通,总理反对身份政治