1. Docker 里跑 Ollama,为什么还要接 TaoToken
很多开发者第一次在 Docker 里跑 Ollama 时,都会经历一个很爽的时刻:docker run一条命令,本地就多了一个能对话、能补全、能当 embedding 用的模型服务。但爽完之后,问题马上来了——你手头不止一个工具。VS Code 插件、命令行脚本、自己写的小 Agent、团队里别人用的客户端,它们各自要配一套 API 地址和 Key。Ollama 本地是http://localhost:11434,云端又是另一套地址和密钥,配置散落在各个工具里,改一次要翻五六个文件。
这篇要解决的就是这个混用场景:Docker 部署 Ollama 负责本地推理,TaoToken 统一 Key/API 通道负责把云端模型和本地模型收敛到一套调用入口,再给出一份可复制的config.toml配置骨架,让工具链只认一个地址、一个 Key。适合谁?适合已经在本地跑模型、又想同时用云端能力,但不想每个工具都单独维护配置的开发者。
核心检索词先摆清楚:Docker 部署 Ollama 是什么、能做什么、适合谁。Ollama 是一个把模型下载、加载、推理打包成简单命令的运行时,Docker 部署让它和宿主机环境隔离,升级、迁移都干净。TaoToken 在这里扮演的是统一 API 通道的角色,把不同来源的模型调用收敛成一套 Key 和地址。两者结合,你就能在本地推理和云端 API 之间自由切换,而工具侧几乎不用改。
我试过把本地 Ollama 和云端通道混着用,最大的坑不是模型本身,而是配置漂移:今天这个工具指向 11434,明天那个工具指向另一个地址,最后自己都记不清哪个 Key 对应哪个服务。所以下面会先把通道这层理清楚,再落到具体配置。
2. TaoToken 前置:把统一 Key 和通道准备好
在动 Docker 之前,先把 TaoToken 这层准备好,不然后面配置写完发现没地方验证。你需要的是两样东西:一个 API Key,和一个统一的 API 地址。地址是https://taotoken.net/api,Key 在控制台里创建。
具体动作:打开控制台,进入 API Keys 页面,新建一个 Key,复制出来先存到安全的地方。这个 Key 就是你后面所有工具共用的那一把,不用给每个工具单独发。创建入口在这里:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite
如果你后面打算长期用编码类工具或者 Agent 工作流,可以顺手看一下 Coding Plan,它更适合高频、长会话的场景:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite
接入文档建议在配置前扫一眼,尤其是请求路径和鉴权头的写法,避免后面 401 排查半天:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
这里要强调一个概念:TaoToken 是统一通道,不是让你放弃本地 Ollama。本地 Ollama 继续跑你的私有模型、离线模型,TaoToken 负责把云端模型和统一鉴权接进来。两者是并行的,不是替代关系。你可以在同一个工具里,一部分请求走本地,一部分走通道,靠配置区分。
注意:Key 只创建一次就够,不要每个工具复制一份。统一 Key 的意义就在于收敛,复制多了又回到配置漂移的老路。
3. Docker 部署 Ollama 与 config.toml 配置骨架
先上 Docker 部分。Ollama 官方镜像可以直接拉,跑起来之后默认监听 11434。下面这条命令把模型数据挂到宿主机,容器删了模型还在:
docker run -d \ --name ollama \ -p 11434:11434 \ -v ollama_data:/root/.ollama \ --restart unless-stopped \ ollama/ollama:latest跑起来之后进容器拉一个模型,比如:
docker exec -it ollama ollama pull qwen2.5:7b验证本地服务是否活着:
curl http://localhost:11434/api/tags返回模型列表就说明本地这层通了。接下来是重点:config.toml配置骨架。不同工具的配置字段名不完全一样,但结构大同小异,核心是「provider 地址 + Key + 模型名」。下面给一份通用骨架,你可以按自己工具的实际字段名微调:
# 统一通道配置骨架 [providers.taotoken] base_url = "https://taotoken.net/api" api_key = "sk-你的TaoTokenKey" # 云端模型走这里 [providers.ollama_local] base_url = "http://localhost:11434" api_key = "ollama" # 本地模型走这里,Ollama 默认不校验 Key,占位即可 [defaults] provider = "taotoken" model = "你的默认模型名" [routing] # 需要本地推理时切到 ollama_local local_provider = "ollama_local" local_model = "qwen2.5:7b"这份骨架的关键点有三个。第一,base_url一定要带/api,TaoToken 的接口路径在/api下,漏了会 404。第二,本地 Ollama 的api_key随便填,它默认不校验,但很多工具要求字段非空,填ollama就行。第三,routing段是给你自己看的约定,实际切换靠工具侧选择 provider,不是所有工具都支持自动路由,别指望配置文件自己会切。
如果你用的是支持多 provider 的客户端,把上面两段 provider 都填进去,然后在界面里选。如果工具只认一个base_url,那就把base_url指向 TaoToken,本地模型通过 TaoToken 的通道去调——前提是通道侧支持你需要的本地模型映射,这点以接入文档为准。
配置写完先别急着跑业务,下一步做连通性验证。
4. 验证请求:确认本地与通道都通
验证分两步,先本地后通道,别混在一起查,不然出错不知道是哪层的问题。
本地 Ollama 验证,直接用 curl 打生成接口:
curl http://localhost:11434/api/generate -d '{ "model": "qwen2.5:7b", "prompt": "用一句话说明什么是容器", "stream": false }'返回里有response字段就说明本地推理链路完整。如果卡住不动,多半是模型没拉下来,或者容器内存不够,先docker logs ollama看日志。
通道验证,用你的 Key 打 TaoToken 的接口。具体路径以接入文档为准,下面给一个通用形态:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoTokenKey" \ -H "Content-Type: application/json" \ -d '{ "model": "你的模型名", "messages": [{"role": "user", "content": "连通性测试"}] }'返回正常结构就说明通道这层通了。如果返回 401,检查 Key 有没有复制全、有没有多余空格;返回 404,检查路径是不是漏了/api或者多了/v1之外的前缀;返回 429,说明触发了频率限制,等一会儿再试。
两步都通之后,再回到你的工具里跑一次真实请求。这时候如果工具报错,问题基本就在工具的配置字段映射上,而不是服务本身。你可以用模型对话页面快速验证模型是否可用:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite
提示:验证顺序永远是「先 curl 后工具」。curl 通了工具不通,是配置问题;curl 都不通,是服务或 Key 问题。这个顺序能省掉大量来回排查。
5. 本篇常见错排查
错误一:connection refused打本地 11434。容器没起来,或者端口没映射。先docker ps看容器状态,再docker logs ollama看启动日志。如果是 Mac 上用 Docker Desktop,确认端口映射写的是-p 11434:11434,不是只写容器内端口。
错误二:通道返回 401。九成是 Key 问题。检查三件事:Key 有没有复制完整、请求头是不是Authorization: Bearer、Key 前面有没有混入空格或换行。如果 Key 是在环境变量里读的,确认变量真的被加载了,很多工具不会报「变量为空」,只会报 401。
错误三:404 找不到路径。TaoToken 的接口在/api下,base_url写成https://taotoken.net就会 404。正确写法是https://taotoken.net/api。有些工具会自动拼/v1/chat/completions,那就确认最终拼出来的路径和文档一致。
错误四:本地模型名写错。Ollama 的模型名带 tag,比如qwen2.5:7b,只写qwen2.5可能拉不到。先用ollama list看本地实际有哪些,再填进配置。
错误五:容器重启后模型没了。没挂 volume。上面命令里的-v ollama_data:/root/.ollama就是干这个的,漏了的话容器一删模型全丢,重新拉要等很久。
错误六:工具里配了 TaoToken 却调不到本地模型。这是预期行为,不是 bug。统一通道和本地 Ollama 是两个 provider,工具侧要显式切换。如果你的工具不支持多 provider,那就只能二选一,或者用支持路由的中间层。
排查时记住一个原则:每层单独验证,别跳步。本地一层、通道一层、工具一层,逐层确认,比一上来就怀疑最上层高效得多。
6. 把调用链路固定下来
配置和验证都跑通之后,建议把这份config.toml纳入版本管理,但 Key 不要提交,用环境变量注入。这样团队里其他人拉下来,填自己的 Key 就能用,provider 结构不用改。
长期编码或 Agent 场景,建议把 Coding Plan 用起来,长会话和高频调用下更稳:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite
需要新建或轮换 Key 时,回到控制台操作:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite
接入细节以文档为准,遇到字段名对不上先查文档再改配置:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
最后留一个实用习惯:每次改完配置,先跑一遍第 4 节的两条 curl,再进工具。这个动作花不了一分钟,但能帮你把「配置问题」和「服务问题」彻底分开,省下的排查时间远不止一分钟。