在使用 OpenAI、Claude、Gemini 等大语言模型 API 构建对话系统时,开发者普遍面临成本不断上升的挑战。无论是基于检索增强生成(RAG)的应用还是独立的对话系统,这些系统都需要维护对话历史以确保上下文的连贯性,类似于 ChatGPT 对历史对话的记忆机制。

这种历史记忆机制虽然提升了对话质量,但同时导致了 Token 消耗的指数级增长。本文提出一种内存高效算法,通过智能化的内存管理策略,将 Token 使用量减少高达 40%,从而显著降低 LLM 推理的运营成本。
该方法的核心原理基于一个关键洞察:LLM 并非需要对每次用户输入都生成回复,而应当区分用户的信息陈述和实际查询请求,仅在后者情况下生成响应。
下图展示了内存高效算法与传统方法的性能对比:

随着对话轮次的增加,两种方法的 Token 消耗差异呈现持续扩大的趋势。内存高效算法的 Token 增长保持相对稳定,图中红线的峰值对应 LLM 生成响应的时刻,其他数据点则表示知识库更新操作。
随着对话深度的增加,这种差异将愈发显著,详细的比较分析将在后续章节中展示。
环境准备与依赖库配置
实现本方案需要导入以下核心库,这些库在大语言模型应用开发中较为常见:
问题分析:Token 消耗的根本原因
本文采用 NebiusAI API 作为演示平台,该 API 基于 OpenAI 接口标准,提供开源 LLM 的访问能力。开发者可根据需要选择其他 LLM 服务提供商,但需确保响应中包含 Token 使用统计信息以便进行分析。
首先,我们初始化 LLM 客户端并配置基础的系统消息:
为了深入理解 Token 消耗模式,我们实现一个集成聊天历史功能的函数。该函数在每次查询后输出 LLM 响应和详细的 Token 使用统计信息:
使用 LLaMA 3.2 1B 模型进行测试,观察典型的用户交互模式:
输出结果显示了 Token 消耗的累积效应:
关键观察:第二条消息"谁是最佳射手?"依赖于前一条消息的上下文,否则 LLM 无法确定用户询问的具体运动项目和时间范围。第二条消息的提示 Token 总数为 130(包含 50 个先前用户 Token + 64 个先前回复 Token + 16 个当前查询 Token)。
这一现象揭示了传统对话系统的核心问题:对话深度与 Token 消耗呈正相关关系,随着交互轮次的增加,每次调用所需的 Token 数量持续累积。
下图展示了在儿童故事创建场景中的 Token 消耗模式,该场景特别适合展示历史上下文的重要性:

数据表明,提示 Token 随每条消息快速递增,到第 10 条消息时已包含前 9 条消息的完整上下文。这种累积效应是导致成本快速上升的根本原因。
内存高效算法的设计原理
针对上述问题,我们提出内存高效策略作为解决方案。该策略旨在通过智能化的 Token 管理机制减少不必要的计算开销。
算法的工作流程如下图所示:

内存系统的核心逻辑包含以下步骤:
- 用户向 AI 系统发送消息
- 系统接收并分析消息类型:陈述或查询
- 根据消息类型执行相应的处理流程
对于陈述类型的消息,系统执行以下操作:从消息中提取关键事实信息,在内存存储中检索语义相似的现有信息,基于相似度分析决定操作类型(添加新信息、更新现有信息或无操作),将处理结果存储到内存系统中。
对于查询类型的消息,系统执行以下操作:根据查询内容在内存存储中搜索相关信息,结合查询和检索到的信息生成上下文相关的响应,将最终答案返回给用户。
该方法的核心创新在于认识到并非所有用户输入都需要 LLM 生成响应。大多数情况下,用户的输入是需要存储的陈述性信息,只有相关的陈述内容才应在响应生成时被检索和使用。这种方法不仅减少了 LLM 的内存占用,还显著提高了交互效率。
应用场景设计
为了验证算法的实际效果,我们选择营销活动策略场景作为测试用例。该场景贴近实际应用需求,模拟了 RAG 或独立聊天机器人处理营销活动相关查询的真实情况。
测试对话脚本定义如下:
这些对话体现了实际应用中常见的交互模式:陈述与查询的交替进行。陈述消息为 LLM 提供上下文信息以改进响应质量,而查询消息则期望获得基于已提供信息的定制化回复。
传统方法的基准测试
在实施内存高效算法之前,我们需要建立传统方法的性能基准。通过脚本化对话模拟 10 轮交互,记录每轮的输入和响应数据:
测试结果显示最后一轮对话(第 10 条消息)的 Token 使用情况:
输出结果表明传统方法的 Token 消耗程度:
仅在 10 轮对话后,最后一条消息的提示 Token 就超过了 4000,这对于相对简短的对话序列而言是相当高的消耗水平。
下图可视化展示了这种不断增长的历史累积效应:

这些数据将作为评估内存高效算法性能改进的基准参考。
核心技术组件实现
嵌入向量生成与响应处理
在实现内存高效方法之前,需要构建若干辅助函数以提高代码的可维护性和复用性。
首先实现嵌入生成功能,该功能用于计算用户查询与存储内存状态之间的语义相似度:
其次实现 LLM 响应生成功能,负责处理模型响应的生成和 Token 统计:
内存存储架构设计
虽然生产环境中通常采用向量数据库来实现高效的嵌入存储和相似性搜索,但为了保持实现的简洁性和教学目的,我们采用面向对象的设计模式来构建内存管理系统。
内存管理的核心概念包括:内存指用户提供的陈述性信息,这些信息用于增强 LLM 的理解能力而非触发即时响应;这些陈述可能为未来的查询提供重要的上下文信息,LLM 可以从中检索相关内容;为了有效管理这些信息,每个内存条目都需要具备唯一的标识符。
首先定义内存项的类结构:
接下来实现内存存储管理类,提供内存条目的增删查改功能:
该内存存储类实现了四个核心功能:添加新的内存项(如果不存在)、更新现有内存项的内容、根据 ID 检索特定的内存项、使用嵌入向量查找语义相似的内存条目。开发者还可以根据需要添加删除功能来移除未使用的内存,以进一步优化内存使用效率。
输入分类机制
在处理用户输入之前,系统需要准确判断输入的性质:陈述还是查询。这一分类决定了后续的处理流程。我们利用 LLM 的自然语言理解能力来实现这一功能:
该分类函数在生产环境中会对每个用户查询实时执行。为了演示目的,我们对预定义的对话场景进行批量分类处理:
验证分类结果的准确性:
输出显示分类结果:
第一个用户查询被正确分类为"陈述",因为它提供信息而非请求回答,其目的是为 LLM 提供上下文信息。
事实提取机制
确定输入类型后,系统需要执行相应的处理逻辑:对于查询类型的输入,LLM 将生成响应;对于陈述类型的输入,系统需要从中提取关键事实并存储到内存系统中。
事实提取需要一个精心设计的提示模板来指导 LLM 识别和抽取关键信息:
该模板专门针对营销活动场景进行了优化,开发者可以根据具体应用领域调整模板内容以获得更好的提取效果。
实现事实提取的核心函数:
该函数将以 JSON 数组格式返回从陈述中提取的事实。提取的事实随后将与现有内存进行比较,以决定是作为新条目添加还是更新现有条目。
内存更新策略
提取的事实需要与现有内存系统建立适当的关联。系统需要评估新事实与已存储信息的关系,并决定采取相应的操作策略。
定义内存操作决策的提示模板:
该模板指导 LLM 在添加新内存、更新现有内存或忽略冗余信息之间做出决策。
实现内存操作决策的函数:
该函数通过分析新事实与现有内存的相似性,返回结构化的 JSON 响应,明确指定需要执行的操作类型和相关参数。
查询响应的检索机制
当用户提交查询时,系统需要从内存中检索相关信息以辅助 LLM 生成准确的响应。这一过程与检索增强生成(RAG)的机制相似。
实现内存检索和格式化的函数:
该函数根据用户查询的语义相似性检索最相关的内存条目,并将其格式化为结构化的上下文信息,供 LLM 在生成响应时参考。
算法实现与执行
整个内存高效算法的核心逻辑通过主循环实现,该循环处理对话场景中的每条消息,并根据消息类型执行相应的操作:
在生产环境中,该循环会实时处理用户输入,对每条消息执行分类、检索或更新操作,并在必要时生成响应。
算法执行的日志输出展示了工作流程:
从前四轮的执行结果可以观察到:前三个输入被正确识别为陈述类型,系统仅进行了事实提取和内存存储操作,未生成 LLM 响应;第四个输入被识别为查询类型,系统检索了相关内存并生成了基于上下文的响应。这证实了算法能够准确区分不同类型的输入并执行相应的处理逻辑。
性能评估与对比分析
为了量化内存高效算法的性能改进,我们对传统方法和新算法的 Token 使用情况进行了详细的比较分析。
首先构建比较数据的 DataFrame 结构:
在仅包含 10 轮对话的测试中,内存高效算法就实现了高达 40% 的提示 Token 减少。下图展示了两种方法的性能对比:

图中红线代表内存高效算法的 Token 使用模式,仅在用户实际请求响应时(第 4、5、8、9 轮)出现显著的增长,而在其他陈述轮次中,总 Token 数量(提示+完成)保持相对稳定,避免了传统方法中的快速累积现象。
黄色区域表示两种方法之间的差异,随着对话轮次的增加,这一差异呈现持续扩大的趋势。为了进一步验证算法的长期效果,我们进行了 100 轮对话的扩展测试:

在 100 轮对话后,性能差异变得极为显著,内存高效算法实现了超过 60% 的 Token 节省。这种显著的改进直接转化为成本节约,这对于大规模生产环境具有重要的经济价值。
总结
内存高效算法在 Token 使用优化方面展现了显著的性能优势,能够在保持对话质量的同时大幅降低 LLM API 的使用成本。该方法的核心创新在于区分用户输入的类型,并针对不同类型采用差异化的处理策略。
开发者可以基于提供的实现进一步优化算法性能,包括开发更精确的提示模板、增加内存管理功能以提高检索速度和存储效率、集成评估机制以量化响应质量、实现动态内存清理以维护系统性能等方面。
此外,结合响应质量评估技术来比较两种方法的输出质量将为算法的进一步改进提供重要参考。基于这些评估结果,可以持续优化算法的效率和准确性,以适应更广泛的应用场景需求。
未来的研究方向可以包括探索更高效的向量存储和检索机制、开发适应性更强的事实提取算法、以及研究多模态内容的内存管理策略等领域。
作者:Fareed Khan
1064

被折叠的 条评论
为什么被折叠?



