必须主动截断messages数组实现滑动窗口,模型无状态;先保留system消息,再取history末N×2条并确保user-assistant交替,且至少含system+1条user;CherryStudio支持自动压缩或自定义JSON策略。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在火山引擎API中实现只保留最近几轮对话,必须主动截断messages数组长度,不能依赖服务端自动裁剪;模型本身不维护状态,所有历史控制权完全在客户端代码里。
手动实现滑动窗口逻辑
第一步:确定窗口大小N(例如保留最近5轮对话,即10条消息:5次user + 5次assistant,不含system)。
第二步:组装完整messages时,先保留system消息(索引0),再取history数组的最后N*2条,确保严格user→assistant交替。若history总条数≤N*2,则全量保留。
第三步:用slice方法截取——【必须保证截取后至少包含system + 一条user,否则会触发400错误】。示例代码:const trimmed = [messages[0], ...messages.slice(-N * 2)]。
这一步操作起来很简单,直接把文件拖进去就行。但要注意:如果history里最后一条是user而没有对应assistant回复(比如用户刚发问、AI还没响应),截取时不能丢掉这条user,否则上下文断裂,AI会无法理解当前问题。
用CherryStudio控制台配置自动截断
方法一:启用内置滑动窗口开关
登录CherryStudio控制台 → 进入「模型服务」→ 找到已部署的DeepSeek或Doubao模型 → 点击「配置管理」→ 开启「对话历史自动压缩」→ 设置「最大轮数」为3/5/10(单位:用户-AI交互对)→ 保存。
方法二:自定义压缩策略(需开通高级版)
在配置项中填入JSON格式的压缩规则:{"strategy":"sliding_window","max_turns":5,"keep_system":true}。该策略会在每次请求前由CherryStudio中间层自动处理messages数组,无需修改业务代码。
【注意:此功能仅对通过CherryStudio网关转发的请求生效,直连ark.cn-beijing.volces.com的请求不受影响】。
避免token超限的硬性截断
当单次请求可能突破模型上下文上限(如DeepSeek-R1支持128K token),需按字符数而非轮数截断。
① 用JSON.stringify(messages).length粗略估算当前token消耗(1字符≈1 token,误差
② 设定安全阈值(如110000),从messages末尾开始逐条删除,优先删最早的一对user+assistant;
③ 每删一对后重新计算长度,直到低于阈值;
④ 【system消息绝对不可删除,否则模型将失去角色设定,输出不可控】。


















