Azure AI Studio聊天流上下文超限问题及方案咨询
问题背景
在Azure AI Studio中构建聊天流,目标是执行3次索引查询并让LLM对比差异。但设置top_k=3时,因提示需纳入3个来源数据,触发token超限错误:
chat : OpenAI API hits BadRequestError: Error code: 400 - {'error':
{'message': "This model's maximum context length is 8192 tokens.
However, your messages resulted in 8374 tokens. Please reduce the
length of the messages.", 'type': 'invalid_request_error', 'param':
'messages', 'code': 'context_length_exceeded'}}
当前使用的Prompt模板:
# system: You are a helpful AI assistant This is what you know: 1. Dataset 1 {% for item in dataOne %} text: {{item.text}} {% endfor %}} 2. Dataset 2 {% for item in dataTwo %} text: {{item.text}} {% endfor %}} Considering the past chat history {% for item in chat_history %} # user: {{item.inputs.question}} # assistant: {{item.outputs.answer}} {% endfor %} # user: {{question}} Keep the answer short, brief and concise.
咨询问题:
- 是否有办法绕过该token限制?
- 堆叠两个LLM块是否合理:第一个块的prompt处理数据/文件,第二个块的prompt处理聊天历史?
补充思路:使用具有更高token输入限制的模型。
解答
1. 绕过token限制的可行方案
- 优化检索结果:
- 降低
top_k值,减少单次纳入的检索数据量;或者对检索到的文本做摘要处理,仅保留与当前问题强相关的核心片段,而非全量传入。 - 启用上下文压缩机制,通过轻量模型提炼检索内容,去除冗余信息,压缩token占用。
- 降低
- 精简Prompt与历史:
- 简化系统提示词,去除冗余表述,比如将"This is what you know:"替换为更简洁的"参考以下检索数据:"。
- 对聊天历史做截断或摘要处理:只保留最近几轮关键对话,或用LLM生成历史对话的精简摘要,避免全量传入所有历史内容。
- 切换大上下文模型:
直接更换支持更高token上限的模型,从根源上解决上下文长度限制问题。
2. 堆叠两个LLM块的合理性分析
这种分阶段处理的方案是合理的,能有效拆分上下文压力:
- 第一个LLM块:专注处理3个数据源,生成结构化的核心差异摘要,仅保留关键不同点,大幅压缩数据体积。
- 第二个LLM块:结合这份精简的差异摘要、聊天历史和当前问题,生成最终回答。
- 优势:将大体积的检索数据与聊天历史拆分为两个独立处理阶段,每个阶段的输入token量都能控制在模型限制内,同时保证核心信息不丢失。
- 注意事项:第一个LLM的Prompt要明确指令,比如"对比以下3份数据的核心差异,输出简洁的结构化对比结果,仅保留关键不同点",确保输出足够精简,不给第二个LLM造成新的token压力。
内容的提问来源于stack exchange,提问作者GKecheng
相关产品推荐
相关产品推荐

