千问ai api实现多轮对话需手动维护messages列表,必须以system角色开头并严格按user→assistant交替追加,每轮后动态截断至7条且token超限时主动清理历史。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

千问AI API实现多轮对话必须手动维护对话历史并显式传入每次请求,因为API本身无状态、不保存上下文,每次调用都是独立的全新会话。
构建可复用的messages消息列表
第一步是初始化一个空的messages列表,它将承载全部对话轨迹。这个列表必须以system角色开头,明确限定模型行为边界,否则后续所有轮次都可能偏离预期。
执行:创建List
【关键前提】 system消息必须在首轮就写入,且不能缺失或放在user之后——若遗漏,模型将按默认泛化人格响应,后续无法靠追加补救。
这一步操作起来很简单,直接把文件拖进去就行。
逐轮追加用户与助手消息
每轮交互需严格遵循user→assistant→user→assistant的交替顺序,不可跳步、不可重复角色、不可省略任一环节。
方法一:同步模式下,用户输入后构造Message.builder().role("user").content(输入文本).build(),add进messages;收到response后,提取content字段,再以role="assistant"构造新Message并add。
统一LLM网关 - 一个API对接70+AI模型,使用单一API密钥即可调用GPT、Claude、Gemini、Qwen、Deepseek、Grok等主流模型。
方法二:流式响应时,需等待完整output返回后再add assistant消息——【易错点】 不能在流式接收中途就add,否则messages结构错乱,下一轮请求会因角色序列非法被API拒绝。
每次追加后检查messages.size(),若达到7条(含system),立即remove(0),仅保留最近6轮(1个system + 5轮user/assistant对)。
动态截断与token安全控制
Token超限会导致关键历史被无声截断,引发指代失效或指令丢失。必须在每次请求前主动估算并清理。
① 调用DashScope SDK内置tokenizer:Tokenizer tokenizer = new Tokenizer(); int totalTokens = tokenizer.countMessagesTokens(modelName, messages);
② 对比模型最大上下文长度(如qwen-plus为8192),若totalTokens ≥ 7800,从messages头部开始移除最旧的user-assistant对,直到totalTokens ≤ 7500;system消息始终保留。
③ 确认截断后,将本轮新user消息追加至messages末尾,再提交Generation.call()。
不做这一步,当对话超过10轮后,首两轮的系统设定和关键参数大概率被截掉,模型会突然“失忆”并开始自由发挥。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










