1. 为什么要在 aider 里绕一层 TaoToken 统一 Key
aider 是一个跑在终端里的 AI 结对编程工具,你给它一个仓库路径,它就能读文件、改代码、跑 git 提交。它默认支持 ollama 本地模型,直接aider --model ollama/qwen2.5-coder:latest就能连上本机的 ollama 服务。这个链路在单机、单模型时很舒服,但一旦你同时用多个模型、多个项目、多台机器,问题就来了:每个项目里散落着不同的 base_url、不同的 key、不同的模型名,换台机器就得重新配一遍,本地模型和云端模型的调用方式还不一样。
我试过把 ollama 的地址硬编码在 shell 里,结果换了个终端窗口就失效,团队里别人 clone 下来也跑不通。后来我把调用链路统一收口到 TaoToken 的 API 通道上:aider 只认一个统一的 Key 和一个统一的 base_url,至于后面路由到 ollama 本地模型还是别的模型,交给配置层决定。这样做的价值在于,本地模型调用链路变得可复现——同一份config.toml和settings.json骨架,换机器、换项目、换模型都只需要改一个字段。
这篇面向的是在终端里用 aider 写代码的本地开发者,尤其是那些既想用 ollama 跑本地模型、又想让配置可版本化、可复制的人。下面会给出可直接复制的config.toml与settings.json片段,然后一步步验证模型连通,最后把常见的报错挨个排掉。核心检索词就三个:aider、ollama、本地模型,全文围绕它们展开。
2. TaoToken 前置:拿到统一 Key 与 API 通道
在动 aider 的配置之前,先把 TaoToken 这边的入口准备好。你需要的是一个 API Key 和一个 base_url,aider 通过 OpenAI 兼容协议去调它,再由它路由到你指定的模型。
第一步,打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,注册并登录。登录后进控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console ,在 API Keys 页面创建一个新的 Key。创建时给它起个能认出来的名字,比如aider-local,方便以后区分是哪个工具在用。Key 只在创建时完整显示一次,复制下来存到安全的地方。
第二步,确认 API 通道地址。aider 走 OpenAI 兼容接口,base_url 填https://taotoken.net/api,注意这个地址不带任何查询参数。Key 就是上一步复制的那串。
第三步,确认你要路由到的 ollama 模型名。在本地终端先跑一下ollama list,看看已经拉了哪些模型。比如输出里有qwen2.5-coder:latest,那模型名就是它。TaoToken 侧对模型名的映射规则,可以在接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc 里查到,确认你本地模型对应的调用名。
如果你还没装 ollama,先去 ollama 官网装好,然后ollama pull qwen2.5-coder:latest把模型拉下来。确认ollama serve在跑,默认监听127.0.0.1:11434。这一步是本地模型能通的前提,别跳过。
注意:TaoToken 的 Key 不要写进会提交到 git 的文件里。下面配置里我会用环境变量占位,实际值放本地。
3. 可复制配置:config.toml 与 settings.json 骨架
aider 的配置分两层:~/.aider.conf.yml或项目里的.aider.conf.yml管 aider 自身行为,config.toml和settings.json更多是给周边工具链和编辑器插件用的骨架。这里按标题要求,给出config.toml与settings.json两份可复制片段,再配合 aider 的启动参数把链路串起来。
先看config.toml。放在项目根目录,或者放到~/.config/aider/config.toml作为全局默认:
# config.toml # aider 通过 OpenAI 兼容通道接入 TaoToken,再路由到 ollama 本地模型 [llm] provider = "openai" base_url = "https://taotoken.net/api" api_key_env = "TAOTOKEN_API_KEY" model = "ollama/qwen2.5-coder:latest" [llm.params] temperature = 0.2 timeout = 120 [project] repo = "." auto_commits = true dirty_commits = false这里几个字段的作用:provider固定openai,因为 aider 用 OpenAI 兼容协议;base_url指向 TaoToken 的 API 通道;api_key_env告诉 aider 从环境变量TAOTOKEN_API_KEY读 Key,避免明文;model写你要路由的 ollama 模型名。temperature调低一点,写代码时输出更稳。
再看settings.json,这份主要给编辑器插件或包装脚本读,字段和上面保持语义一致:
{ "aider": { "provider": "openai", "baseUrl": "https://taotoken.net/api", "apiKeyEnv": "TAOTOKEN_API_KEY", "model": "ollama/qwen2.5-coder:latest", "extraArgs": ["--no-auto-commits", "--yes-always"] }, "ollama": { "host": "http://127.0.0.1:11434", "model": "qwen2.5-coder:latest" } }ollama.host这一段是给本地 ollama 服务留的锚点,方便你确认本地服务地址;真正走 TaoToken 通道时,aider 请求的是baseUrl,由 TaoToken 侧完成到 ollama 的路由。两份配置里的模型名要一致,否则排查时会分不清是哪一层出的问题。
设置环境变量,把 Key 注入进去。Linux/macOS:
export TAOTOKEN_API_KEY="你的Key"Windows PowerShell:
$env:TAOTOKEN_API_KEY="你的Key"想持久化就写进~/.bashrc或系统环境变量面板。这一步做完,配置层就齐了。
4. 启动 aider 并验证模型连通
配置就位后,进项目目录启动 aider。先确认 ollama 在跑:
ollama serve另开一个终端,cd 到你的代码仓库:
cd ~/projects/my-app aider --config config.toml如果 aider 没自动读到config.toml,显式指定路径。启动后 aider 会打印它当前用的模型和 base_url,检查这两行是不是你配的值。确认无误后,在 aider 交互界面里发一条最简单的请求:
/add main.py 这个文件里有没有明显的边界条件遗漏?aider 会把main.py加进上下文,然后向 TaoToken 通道发请求,通道再路由到 ollama 的qwen2.5-coder:latest。如果本地模型正常,几秒到几十秒内会返回分析结果,终端里能看到流式输出。第一次调用因为要加载模型,会慢一些,后面就快了。
想更直接地验证通道本身,可以绕过 aider,用 curl 打一发:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "ollama/qwen2.5-coder:latest", "messages": [{"role": "user", "content": "用一句话说明快速排序的平均复杂度"}] }'返回里有choices[0].message.content就说明通道和模型都通。这一步能把问题定位在 aider 层还是通道层:curl 通、aider 不通,就是 aider 配置问题;curl 也不通,就是 Key、base_url 或模型名的问题。
验证通过后,回到 aider 里正常干活。常用动作:/add FileName.py加文件进上下文,/drop FileName.py移除,/diff看改动,/run跑命令。这些和用官方 ollama 直连时一样,区别只是请求先经过 TaoToken 通道。
5. 本篇常见错排查
配置链路一长,报错点就多。下面按我踩过的顺序列几个高频问题。
报错一:AuthenticationError: Invalid API key。九成是环境变量没生效。先echo $TAOTOKEN_API_KEY看有没有值,Windows 用echo $env:TAOTOKEN_API_KEY。如果为空,说明 export 没执行或写错了文件。另一个可能是 Key 复制时带了空格或换行,重新复制一次。确认 Key 有效可以回控制台 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys 看这个 Key 的状态。
报错二:Connection refused或Failed to connect to 127.0.0.1:11434。这是 ollama 本地服务没起来。跑ollama serve,或者检查ollama list能不能正常输出。如果 ollama 装在别的机器上,ollama.host要改成对应地址,同时确认那台机器的防火墙放行了 11434。
报错三:Model not found: ollama/qwen2.5-coder:latest。模型名对不上。先在本地ollama list确认模型确实存在,名字要一字不差,包括 tag。然后确认 TaoToken 侧对模型名的映射规则,接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc 里有说明。本地叫qwen2.5-coder:latest,通道侧可能要求写成ollama/qwen2.5-coder:latest,前缀别漏。
报错四:aider 启动后模型显示成默认的 gpt-4 之类。说明config.toml没被读到。检查文件路径,aider 默认读当前目录的.aider.conf.yml,config.toml需要--config显式指定。或者把配置写进.aider.conf.yml,格式换成 YAML。
报错五:请求超时。本地模型首次加载慢,timeout调大到 180 或 300。如果一直超时,看 ollama 那边的日志,可能是显存不够导致模型加载失败。换个更小的模型试试,比如qwen2.5-coder:7b。
报错六:返回内容乱码或截断。多半是temperature或max_tokens设置问题。把temperature降到 0.1 到 0.3,max_tokens设大一点。也可能是通道侧对长上下文有限制,把上下文里的文件减一减,用/drop移除不相关的。
排查时记住一个原则:先 curl 验证通道,再验证 aider 配置,最后看 ollama 本地服务。三层分开测,比一股脑改配置快得多。
6. 把链路固定下来,长期用 Coding Plan
配置跑通之后,建议把config.toml和settings.json提交到项目仓库(Key 用环境变量占位,别提交真实值),这样团队里任何人 clone 下来,设一下环境变量就能复现同一条本地模型调用链路。模型名、base_url、超时这些参数都版本化了,换模型只改一个字段。
如果你不只是偶尔用 aider,而是长期在终端里做编码、跑 Agent 任务,可以看下 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan ,它更适合高频、长会话的场景。日常想快速验证某个模型对话效果,用模型对话 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_content=model 页面直接试就行。接入过程中遇到通道或 Key 的问题,回接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc 对照检查,比在终端里瞎猜快。
最后留一个我常用的习惯:每次换模型或换机器,先跑一遍第 4 节那条 curl,确认通道通,再启动 aider。这一步花十秒,能省掉后面半小时的排查。