【第二周】RAG与Agent实战04:OpenAI库附带历史消息调用模型

【第二周】RAG与Agent实战04:OpenAI库附带历史消息调用模型

在构建智能对话系统(Chatbot)、RAG(检索增强生成)或 Agent(智能体) 时,上下文记忆(Context Memory)

是核心能力之一。模型本身是无状态的,它不知道您上一句说了什么,除非您显式地将历史对话记录传递给它们。

OpenAI 兼容接口(如阿里云 DashScope)的

参数设计得非常巧妙,它是一个列表(List),天然支持传入多条历史消息。本文将演示如何通过维护这个列表,实现具备”记忆力”的多轮对话。

大语言模型(LLM)本质上是基于概率预测下一个 token 的。如果没有历史信息,每一次请求对模型来说都是”初次见面”。

通过传入历史消息,我们可以实现:

  1. 指代消解:用户说”它多少钱?”,模型知道”它”指的是上一轮提到的商品。
  2. 逻辑推理:用户先说”A有2个苹果”,后说”B有3个苹果”,最后问”一共几个?”,模型能结合前文计算。
  3. 风格一致性:保持对话的人设和语气贯穿始终。

参数是一个字典列表,每个字典代表一条消息,包含 (角色)和 (内容)。

三种关键角色

角色 (Role) 作用 示例场景 system 系统指令 。设定助手的行为准则、人设、回答风格。通常放在列表最开头,权重最高。 “你是一个数学专家,回答要简洁。” user 用户输入。代表用户的提问、指令或提供的信息。 “小明有2条狗。” assistant 助手回复。代表模型之前的回答。将其回填到列表中,相当于告诉模型:”刚才我是这么回答的”。 “好的,记住了。”

📌 关键点 :要实现多轮对话,只需将之前的 提问和 回答按时间顺序依次加入 列表即可。


以下代码演示了一个经典的”累加推理”场景。我们将多轮对话历史硬编码在列表中,观察模型如何结合上下文回答问题。

🔍 代码运行逻辑解析

  1. System Prompt:首先告诉模型”回答要简洁”,这会影响后续所有输出的风格。
  2. History Injection
    • 用户说”小明有2条狗” -> 模型回”好的”。
    • 用户说”小红有3条猫” -> Agent 智能体 模型回”好的”。
    • 关键点 :我们将这两组问答都放入了 列表。
  3. Final Query :最后用户问”共有多少条宠物 ?”。
    • 模型会扫描整个列表。
    • 它发现第一条信息提到”2条狗”。
    • 它发现第二条信息提到”3条“(与问题无关,忽略)。
    • 结论:模型会回答”2条”。

🎯 测试建议:您可以尝试修改最后一句提问为”共有多少只宠物?”,模型应该会回答”5只”(2狗+3猫),证明它真正理解了上下文。


上面的例子是静态的(写死的列表)。在实际的聊天机器人应用中,我们需要动态地往列表里添加消息。

简易聊天循环示例

动态维护的关键点

  1. Append User : 每次用户说话后,立即 。
  2. Call Model : 发送整个 列表。
  3. Append Assistant : 收到模型回复后,必须 。如果不做这一步,模型就会”失忆”,不知道刚才自己说了什么。

1. Token 长度限制

列表不能无限增长。每个模型都有最大上下文窗口(Context Window),例如 8k, 32k, 128k tokens。

  • 风险:如果列表太长,超过限制,API 会报错。
  • 对策 :当对话过长时,需要实施滑动窗口策略 (只保留最近 N 轮对话)或摘要策略(用模型总结之前的对话)。

2. System Prompt 的位置

虽然大多数模型对位置不敏感,但最佳实践是将 角色始终放在列表的第一个位置,以确保指令的全局有效性。

3. 数据清洗

在将用户输入加入 之前,最好进行简单的清洗(如去除多余空白、过滤敏感词),以保证上下文质量。


通过灵活运用 列表,我们可以赋予无状态的大模型以”记忆”。

  • 基础用法 :按顺序填入 , , 消息。
  • 核心价值:实现指代理解、逻辑推理和人设保持。
  • 工程落地 :在代码中使用列表 操作动态维护对话历史。

掌握这一技术,是开发 RAG 系统和自主 Agent 的基石。下一步,您可以尝试结合向量数据库,将外部知识库作为”长期记忆”注入到 中!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/284333.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月15日 下午1:52
下一篇 2026年3月15日 下午1:52


相关推荐

关注全栈程序员社区公众号