乐于分享
好东西不私藏

每次问 AI,都会把整段聊天重新发送吗?

每次问 AI,都会把整段聊天重新发送吗?

我们和 AI 连续聊十几轮后,它仍然记得前面说过的话。

这很容易让人产生一种错觉:

AI 服务端是不是一直替我保存着这段对话?

又或者:

Hermes 每次请求 DashScope,都会把本地会话文件整个上传一遍?

答案是:都不完全对。

更准确地说:

Hermes 不会把本地会话归档整个上传,但每次请求模型时,通常会重新带上当前需要的聊天上下文。

听起来有点绕?看完下面这张图就明白了。

先说最简单的结论

Hermes 每次调用 DashScope,主要会发送三类内容:

  1. System:告诉 AI 自己是谁、应该遵守什么规则;
  2. 聊天历史:之前的提问、回答和工具结果;
  3. Tools:告诉 AI 当前能使用哪些工具、每个工具怎么调用。

但保存在本地会话文件里的用户 ID、聊天 ID、费用统计、时间、Git 分支等信息,通常不会发给模型。

所以:

重新发送的是“模型理解当前对话所需的上下文”,不是整个本地文件。

为什么要重新发送聊天历史?

多数聊天模型接口本身更像一次“单次问答”。

你发给它什么,它就根据这次收到的内容回答什么。

假设我们这样聊天:

我:我家有一只猫,叫豆包。AI:记住了,它叫豆包。我:它叫什么?

第二次提问时,如果请求里只有“它叫什么”,模型并不知道“它”指谁。

因此,客户端通常需要把前面的内容一起带上:

我家有一只猫,叫豆包。
它叫什么?

模型这才有足够的上下文回答“豆包”。

这就是多轮对话看起来拥有“记忆”的基本原理之一。

如果 AI 中途调用工具呢?

Agent 不只是聊天,还会使用终端、浏览器、文件和其他工具。

例如你问:

“服务器现在在线吗?”

第一次请求时,Hermes 会发送:

System+ 你的问题+ 可用工具列表

模型判断需要检查服务器,于是要求调用工具。

Hermes 执行工具后,还得再调用一次模型。这一次发送的内容会增加:

System+ 你的问题+ 模型刚才发起的工具调用+ 工具执行结果+ 可用工具列表

模型看到结果后,才能组织最终回答。

因此,一条用户消息不一定只产生一次 API 请求。只要中途需要工具,就可能出现第二次、第三次调用。

最后的回答会立刻再发一次吗?

不会。

模型生成最终回答后,Hermes 会先把它保存到本地会话历史。

如果本轮对话到此结束,这条回答不会仅仅因为被保存,就立即再上传一次。

等你提出下一个问题时,它才可能和新的问题一起进入下一次请求。

可以把它理解成:

本轮生成的答案  ↓ 保存到本地下一轮开始  ↓ 作为历史上下文参与请求

本地会话文件里还有什么?

Hermes 的会话归档不仅保存聊天正文,还可能保存:

  • 消息来自 Telegram、CLI 还是其他入口;
  • 用户 ID、聊天 ID 和会话编号;
  • 模型名称和运行配置;
  • API 调用次数和工具调用次数;
  • 输入、输出 Token 和费用统计;
  • 会话开始、结束时间;
  • 本地工作目录和 Git 信息;
  • 用于恢复会话的内部状态。

这些信息对本地管理和排查问题很有用,但它们不是模型理解对话所必需的内容。

Hermes 不会把这个归档对象原封不动地塞进请求体。

除了聊天历史,还有一个容易忽略的大头

很多人只关注 messages,却忽略了 Tools

Tools 不是几个简单的名称。每个工具通常还要附带:

  • 它叫什么;
  • 它能做什么;
  • 需要哪些参数;
  • 哪些参数必填;
  • 参数允许什么格式。

如果 Agent 启用了很多工具,这些完整定义也可能占用不少上下文。

所以一次真实请求的输入,往往可以理解成:

System Prompt+ 聊天历史+ 当前问题+ 完整 Tools 定义+ 本次临时加入的记忆或上下文

这也是为什么一个看起来只有十几个字的问题,输入 Token 却可能很多。

有缓存,是不是就不用重发了?

还是会发。

Prompt Cache 可以让服务端识别重复的前缀,并复用一部分计算。

例如 System 和前几轮聊天内容完全没变,服务端可能不需要每次都从头计算。这样有机会降低延迟或费用。

但要注意:

缓存复用计算,不等于客户端不再发送数据。

从网络请求角度看,稳定的 System、聊天历史和 Tools 仍可能出现在请求体中。

至于能否命中缓存、缓存 Token 如何计费,要看具体模型和供应商规则。

一个容易记住的比喻

可以把每次模型请求想象成给一位临时接手工作的同事发资料包。

你不需要把整台电脑交给他,也不会把所有本地统计表都发过去。

但为了让他接着干,你需要提供:

  • 工作规则:System;
  • 之前发生了什么:聊天历史;
  • 他能调用什么资源:Tools;
  • 刚刚查到了什么:工具结果;
  • 现在要解决什么:当前问题。

每次接手,都要带上足够的资料。资料太多时,再通过压缩和摘要减小体积。

最后记住五句话

  1. Hermes 不会把本地会话归档整个上传给 DashScope。
  2. 每次模型调用通常都会重新发送当前有效的聊天上下文。
  3. System Prompt 和完整 Tools 定义也可能在每次调用中重复出现。
  4. 工具调用会让一条用户消息产生多次模型请求。
  5. Prompt Cache 可以复用计算,但不代表网络请求不再携带这些内容。
理解这五点之后,再看 AI 的输入 Token、上下文长度和缓存费用,就不会觉得奇怪了。