2026/9/12 16:22:08

Aider 提示模型超出 token 限制时如何减少输入和输出 token

Aider 提示模型超出 token 限制时如何减少输入和输出 token Aider 提示模型超出 token 限制时如何减少输入和输出 token【免费下载链接】aideraider is AI pair programming in your terminal项目地址: https://gitcode.com/GitHub_Trending/ai/aider当你在 aider 中向模型提交修改请求时如果模型返回的响应显示超出了 token 限制aider 会直接报告一个 token limit 错误其中包含输入/输出 token 计数和建议的应对动作。这篇文章讲清楚这类错误长什么样、如何区分是输入context window问题还是输出output limit问题以及 aider 文档给出的具体减少 token 的操作/tokens、/drop、/clear、--map-tokens、infinite output 模型等。适用于已经在终端使用 aider 与 LLM 协作改代码、并实际遇到过 hit a token limit 报错的场景。识别 token limit 错误先看是输入还是输出超了Aider 本身从不强制执行token 限制它只是转报 API provider 返回的限制错误并且 aider 报告的 token 计数是估算值。报错信息会分别列出输入、输出和总 token 的用量下面是 token limits 文档 给出的文档示例数值仅为示例你的实际报错数字会不同Model gpt-3.5-turbo has hit a token limit! Input tokens: 768 of 16385 Output tokens: 4096 of 4096 -- exceeded output limit! Total tokens: 4864 of 16385 To reduce output tokens: - Ask for smaller changes in each request. - Break your code into smaller source files. - Try using a stronger model like DeepSeek V3 or Sonnet that can return diffs.根据超出的那一行判断走哪条排查路径Input tokens 逼近或超过 context window最常见的原因是给模型发了太多数据加进 chat 的文件过多、仓库映射太大、聊天历史太长。GPT-4o 和 Sonnet 这类强模型 context window 较大这种错误通常只出现在较弱的模型上。Output tokens 达到上限多数模型的输出上限很小文档指出常见低至 4k tokens。当你要求 aider 做影响很多代码的大改动时模型在回传全部改动的过程中就会撞上输出上限。减少输入 token先查用量再逐层裁剪输入侧的排查按文档给出的顺序操作即可每个命令都在 aider 的聊天界面内直接输入/tokens报告当前聊天上下文各部分占用的 token 数先定位 token 主要花在哪加入的文件、repo map、聊天历史。/ls列出 aider 已知的所有文件并标出哪些文件当前在 chat session 里。用它确认有哪些不该在 chat 中的文件。/drop把不再需要的文件移出 chat session腾出上下文空间。文档的建议是只保留 aider 需要编辑的文件其余相关文件会通过 repo map 自动带入不必手动加。/clear清空聊天历史。历史消息累积也是输入 token 的主要来源之一。把代码拆成更小的源文件文档将其列为输入、输出两侧的通用手段文件越小单次编辑需要发送的内容越少。另外两个与输入 token 直接相关的配置点--map-tokens控制 repo map 的 token 预算默认 1k tokens。Repository map 文档 说明 aider 会在该预算内动态裁剪 repo map未加任何文件到 chat 时映射会适当扩大。如果你的输入 token 里 repo map 占比偏高调整这个值可以改变映射规模。如果提示中模型是 aider 不认识的模型比如自建 API 提供的名字aider 可能不知道它的 context window 大小。可以在 home 目录、git 仓库根目录或启动 aider 的当前目录下创建.aider.model.metadata.json或用--model-metadata-file filename指定文件按 Advanced model settings 文档给出的格式登记max_tokens、max_input_tokens、max_output_tokens等字段模型名使用带provider/前缀的完整名。不过文档同时提示大多数情况下 aider 关于未知 context window 的警告可以安全忽略因为 aider 不强制限制 token。完成上述操作后用/tokens复查用量是否回落到 context window 之内再重新发起请求看是否还会报同样的错。避免输出 token 上限缩小单次改动或换支持 prefill 的模型输出侧文档给出了四条对策每次请求只要求较小的改动ask for smaller changes in each request。把代码拆成更小的源文件减少单次需要回传的编辑量。换用能返回 diff 的强模型文档点名 gpt-4o、sonnet、DeepSeek V3 这类diff 编辑格式比整文件重写回传的内容少得多。使用支持 infinite output 的模型。Aider 对支持 prefill 的模型可以绕过输出上限当模型回复在输出上限处被截断时aider 自动用已生成的部分响应作为 prefill 发起下一次请求让模型从断点继续且这个过程可重复。判断当前模型是否启用了 infinite output看 aider 启动时的 announcement 行支持 prefill 的模型会显示 infinite output 字样文档示例如下同样是文档示例Aider v0.58.0 Main model: claude-3-5-sonnet-20241022 with diff edit format, prompt cache, infinite output支持 prefill 的模型清单在 infinite output 文档中列出如 claude 系列、deepseek 系列、部分 mistral/openrouter 模型等。如果 announcement 里没有 infinite output说明当前模型走的是固定输出上限只能靠前三种办法。输入输出都正常但仍报错排查 API 代理和本地模型服务文档指出token limit 错误有时并非你的会话内容太大而是由不规范的 API 代理服务器或托管本地模型的 API 服务的 bug 引起的。Aider 直连主流 LLM 提供商的云 API 时经过充分测试本地模型则以 Ollama 配合最好。文档建议的验证方法绕过代理直接用推荐的某个云 API 跑一次 aider看 token limit 问题是否消失。消失即可定位到代理层。如果你用的是 Ollama 本地模型还有一个高频坑Ollama 文档 说明 Ollama 默认 context window 只有 2k tokens对 aider 来说太小而且超出部分会被静默丢弃。Aider 默认会把 Ollama 的 context window 设为本次请求大小 8k tokens 回复空间以避免静默丢数据如果想固定窗口大小可以在.aider.model.settings.yml里配置文档示例- name: ollama/qwen2.5-coder:32b-instruct-fp16 extra_params: num_ctx: 65536示例中模型名和num_ctx值照抄自文档按你实际使用的模型替换name。限制与边界aider 报告的 token 计数是估算值且 aider 只报告、不强制 token 限制所以不要期望它提前拦截请求。上面所有裁剪手段/drop、/clear、拆文件、--map-tokens针对的是输入侧输出侧如果模型不支持 prefill最终只能缩小单次改动规模或换模型。如果按上述路径仍无法解决token limits 文档的 More help 部分指向 GitHub issues 和 Discord报告问题时附上 aider 版本和所用 LLM 模型启动时的 announcement 行可以一并提供。【免费下载链接】aideraider is AI pair programming in your terminal项目地址: https://gitcode.com/GitHub_Trending/ai/aider创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考