SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 更新于 2026-08-23

如何将 Ollama 接入编码代理

配置 Ollama 编码代理只需修改 base URL,但 API key 仍须填写任意值。本文说明端口 11434、Claude Code 的接口差异、Codex 0.13.3 支持,以及上下文长度为何会导致失败。

连接对象

您可以将 Ollama 与编码代理配合使用,连接配置比预期更简单。您只需修改一个基础 URL,并选择一个模型名称。API key 字段仍要求填写值,但本地服务器会忽略该值,因此可以填写任意字符串。

Ollama 监听端口 11434,并同时提供两种请求格式。/v1/chat/completions 是 OpenAI 兼容格式,Ollama 文档说明其中的 key 是必填项,但会被忽略。/v1/messages 是 Anthropic 兼容格式,Claude Code 使用这种格式。您的代理已经支持其中一种格式,因此无需修改其他配置。

这部分配置只需五分钟。最终是否可用,取决于两个几乎没人修改的设置:上下文长度和 keep-alive;同时也取决于是否让模型执行它擅长的工作。这两个设置分别有专门的章节,文末还会说明实际限制。

哪些编码代理接受本地 base URL

测试只有一个问题:工具是否提供 base URL 设置。如果提供,它就可以连接到您的服务器。

Ollama 为 Claude Code、OpenCode、Codex、Cline、Roo Code、Zed、JetBrains IDE 和 VS Code 发布了集成页面。Aider 另行记录了对 Ollama 的支持。这涵盖了截至 August 2026 通常所说的大多数编码代理。它们使用的接口形式并不完全相同,配置失败通常就是因为这一点。

  • 大多数代理需要兼容 OpenAI 的端点。将 base URL 设置为 http://localhost:11434/v1,并提供任意非空的 API key 字符串。
  • Claude Code 完全不接受 OpenAI base URL。它使用 Anthropic Messages API,因此需要将 ANTHROPIC_BASE_URL 设置为 http://localhost:11434;Ollama 在该地址提供 /v1/messages
  • Codex 使用 OpenAI Responses API。Ollama 同样提供 /v1/responses,该支持从版本 0.13.3 开始加入。
  • 如果代理没有 base URL 设置,就无法重定向,因为端点已内置在客户端中。此时应在前面部署转换层,例如 自托管的 LiteLLM 网关,再以客户端要求的接口形式重新提供您的模型。

Ollama 可以为您生成这些配置。ollama launch opencode 会使用您选择的模型和内联配置启动 OpenCode,ollama launch claude 对 Claude Code 执行相同操作,ollama launch droid --config 则只写入配置,不启动工具。

安装 Ollama 并拉取可调用工具的模型

curl -fsSL https://ollama.com/install.sh | sh
systemctl status ollama --no-pager
ollama pull qwen3-coder:30b
ollama ls

安装程序会添加 systemd 单元并启动它,因此 systemctl status ollama 应输出 active (running)。如果没有输出,journalctl -e -u ollama 会打印原因。

模型必须支持工具调用,因为工具调用是 agent 的工作方式。它读取文件、写入补丁、运行测试,然后读取失败信息并重试。无法生成工具调用的模型只会用文字描述修改内容,而不会实际执行修改,agent 也会陷入循环或停止。拉取模型前,请先在 ollama.com 的模型页面上查找 tools 标签。qwen3-coder:30b 带有该标签;截至 2026 年 8 月,该标签需要下载 19 GB,支持 256K 上下文窗口。如果服务器仅使用 CPU 或内存不足,请先阅读VPS 上 Qwen 27B 标签的内存计算,了解在下载前 8 到 64 GB 内存实际能容纳什么。拉取模型后,这些 GB 会占用服务器的根磁盘空间。VPS 的根磁盘通常最紧张,因此磁盘空间耗尽前,建议阅读Ollama 将模型文件保存在哪里,以及如何将其移到其他位置

现在确认服务器实际提供哪些名称:

curl http://localhost:11434/v1/models

响应中的字符串就是 agent 配置必须包含的内容,字符必须完全一致。先检查这些名称,可以解决大多数模型未找到错误。如果尚未安装 Ollama,请参阅更完整的教程:在 VPS 上使用 Ollama 自托管 LLM

将 OpenCode 指向 Ollama

编辑 ~/.config/opencode/opencode.json

{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "ollama": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Ollama",
      "options": {
        "baseURL": "http://localhost:11434/v1"
      },
      "models": {
        "qwen3-coder:30b": {
          "name": "qwen3-coder 30b"
        }
      }
    }
  }
}

models 下的键是发送给 Ollama 的模型名称,因此必须与 ollama ls 完全一致。name 字段只是模型选择器中显示的标签。启动 opencode,切换到 Ollama 提供程序,并监控 journalctl -e -u ollama,确认请求已到达您的服务器,而不是发送到其他位置。代理本身的配置请参阅在 VPS 上运行 OpenCode

将 Claude Code 指向 Ollama

export ANTHROPIC_AUTH_TOKEN=ollama
export ANTHROPIC_API_KEY=""
export ANTHROPIC_BASE_URL=http://localhost:11434
claude --model qwen3-coder:30b

ANTHROPIC_API_KEY 会被特意设置为空字符串。环境中如果保留真实密钥,请求就会发送到托管 API,而不是本地推理,最终产生费用且不会使用本地模型。ollama launch claude 会为您完成这些设置。

请了解兼容层不支持哪些功能。它不实现 tool_choice,也不支持提示缓存,并且没有 token 计数端点,因此您看到的 token 数量只是根据模型自身 tokenizer 得出的近似值。Claude Code 还会发送较大的系统提示和工具集,因此所需上下文比聊天客户端更多。关于哪些内容可以迁移、哪些内容无法迁移,请参阅是否可以自行托管 Claude

将 Aider 指向 Ollama

export OLLAMA_API_BASE=http://127.0.0.1:11434
aider --model ollama_chat/qwen3-coder:30b

Aider 文档建议使用 ollama_chat/ 前缀,而不是 ollama/。您还可以在 .aider.model.settings.yml 中为每个模型固定上下文窗口大小。当某个模型需要使用不同于服务器默认值的窗口时,这一功能很有用:

- name: ollama_chat/qwen3-coder:30b
  extra_params:
    num_ctx: 65536

为什么配置正常,结果却一团糟

本节最关键。Ollama 会根据它检测到的 VRAM(GPU 上的视频内存)选择默认上下文长度,并公开了这些默认值:

ChartOllama default context length by available VRAM, documented August 2026
The data behind this chart
[
  {
    "label": "Under 24 GiB VRAM",
    "default_context_tokens": "4,096"
  },
  {
    "label": "24 to 48 GiB VRAM",
    "default_context_tokens": "32,768"
  },
  {
    "label": "48 GiB VRAM or more",
    "default_context_tokens": "262,144"
  }
]

大多数 VPS 方案以及所有仅使用 CPU 的服务器都会落在第一行:4,096 个 token。只有大型 GPU 才能使用最后一行中的 262,144 个 token。

agent 在执行任何操作前就会传递 4096 个 token。系统提示词、工具定义、仓库列表和它打开的第一个文件,加起来已经超过这个大小。接下来发生的事情正是问题所在:系统不会报错。Aider 文档说明,Ollama 会静默丢弃超出上下文窗口的内容。最早的 token 会被移出窗口,因此模型会自信地回答它已经看不到的文件,或者忘记你两步之前给出的指令。大多数关于本地模型“太笨,无法编写代码”的反馈,背后都是这个机制。上下文长度本身也需要单独决定;在确定数值前,建议阅读 每种大小的 num_ctx 会占用多少 KV cache 内存

Ollama 文档称,agent 和编码工具等任务应至少设置为 64000 个 token。在服务器上设置:

sudo systemctl edit ollama.service

在 override 文件中添加以下几行:

[Service]
Environment="OLLAMA_CONTEXT_LENGTH=64000"

然后重新加载并重启:

sudo systemctl daemon-reload
sudo systemctl restart ollama
ollama ps

ollama ps 是检查项。它会输出一个 CONTEXT 列,该数值就是模型实际收到的上下文长度。你的 IDSIZE 会有所不同:

NAME               ID              SIZE     PROCESSOR    CONTEXT    UNTIL
qwen3-coder:30b    a1b2c3d4e5f6    24 GB    100% GPU     64000      4 minutes from now

应在服务器上设置,而不是在 agent 中设置,原因有两个。OpenAI chat completions schema 没有上下文长度字段,因此兼容 OpenAI 的客户端无法请求该值。并且该设置按服务器生效,因此所有连接到此服务器的 agent 都会继承它。输出长度有自己的上限。与上下文长度不同,它会通过兼容端点传递,因此当回复在补丁中途停止时,应使用 num_predict 以及与之对应的 max_tokens 字段。如果某个模型需要不同的窗口,可以使用 Modelfile 将设置固化到模型副本中:

FROM qwen3-coder:30b
PARAMETER num_ctx 65536
ollama create qwen3-coder-64k -f Modelfile

上下文并不是免费的。窗口越长,所需内存越多,因此请监控 PROCESSOR 列。100% GPU 才是目标值。模型的一部分内容溢出到 CPU 后,token 速率会大幅下降,agent 循环将无法正常使用;测量本地 LLM 的每秒 token 数可以帮助你找到服务器的实际上限。在购买服务器前评估机器规格,请参阅编码 agent VPS 需要多少 RAM 和 CPU

在请求之间保持模型加载

默认情况下,Ollama 会在模型处理完最后一个请求 5 分钟后将其卸载。这适合聊天框,但不适合代理工作。您暂停查看差异,计时器耗尽,下一次请求就会从磁盘重新加载数十 GB 的权重,直到第一个 token 出现前都没有响应。这看起来像是服务挂起。

OLLAMA_KEEP_ALIVE 接受持续时间字符串,例如 10m24h;也接受表示秒数的普通数字、用于无限保持模型加载的 -1,以及用于立即卸载模型的 0。将其与上下文长度放在一起设置:

[Service]
Environment="OLLAMA_CONTEXT_LENGTH=64000"
Environment="OLLAMA_KEEP_ALIVE=-1"

keep_alive 请求字段仅存在于 Ollama 原生的 /api/generate/api/chat 端点,不适用于兼容性端点,因此代理无法为每个请求单独设置该字段。环境变量是您唯一可用的控制方式。需要释放内存时,ollama stop qwen3-coder:30b 会卸载模型,但不会停止服务器。如果希望该设置在重启后仍然生效,或希望权衡全天将权重保留在内存中与释放这些内存之间的取舍,请参阅 让 Ollama 模型保持加载在内存中

在单独的服务器上运行 Ollama

Ollama 绑定到 localhost。要从另一台计算机访问它,请在同一个 systemd override 中设置 OLLAMA_HOST=0.0.0.0:11434,然后重启服务。

仅在私有网络中执行此操作。Ollama 文档说明,本地 API 不需要身份验证。因此,如果端口 11434 对互联网开放,任何人都可以使用您的硬件,并读取代理发送的所有内容。有两种安全方案。将绑定地址保留为 localhost,然后从笔记本电脑通过 SSH 转发端口:

ssh -N -L 11434:localhost:11434 you@your-vps

您的代理继续指向 http://localhost:11434/v1,完全无需感知这一变化。另一种方案是使用 VPN,让 Ollama 绑定到 VPN 地址,而不是 0.0.0.0。如果多个人或多个代理要共用一台服务器,Ollama 的调度器并不是为这种负载设计的;Ollama 与 vLLM 的对比说明了吞吐量差异从何处开始造成影响。

本地代码模型在哪些方面占优,在哪些方面不占优

由您自行托管的模型驱动的代理,并不能在所有任务上替代前沿 API。它在以下四类工作中具有明显优势。

  • 批量机械式修改。每次修改都很小,并且可以检查。例如,在整个代码仓库中重命名、添加类型提示、编写文档字符串、翻译注释。模型可以运行数小时,而费用不会增加。
  • 不能离开本地硬件的工作。例如,受保密协议约束的客户端代码,或不允许发送给第三方的内部代码仓库。
  • 离线和物理隔离的计算机。这类环境根本没有可调用的托管 API。
  • 成本可预测。服务器成本支付完毕后,代理即使循环消耗 token,也不会产生额外费用;这与按用量计费的 API 正好相反。GPU VPS 与 API token 达到成本平衡的位置中给出了计算过程。

它在长流程、多步骤任务上处于劣势。“找出这个测试失败的原因、修复根因、更新调用方”需要连续执行许多正确的工具调用,并且整个历史记录都要保留在上下文中。在配置一般的服务器上,8B 到 14B 范围内的模型可能会生成格式错误的工具调用,或者在几轮交互后丢失计划。您花在引导模型上的时间,可能比手动完成任务还多。这不是可以通过编写更好的提示来解决的问题,而是模型容量的问题。

当出错代价较高,且您不会逐行检查输出时,本地模型同样处于劣势。应为本地模型安排范围明确、输出可验证的任务;对于不会逐步检查的工作,则继续使用托管模型。

故障模式及你将看到的字符串

curl: (7) Failed to connect to localhost port 11434 after 0 ms: Connection refused 服务器未运行,或 agent 指向了其他主机。运行 systemctl status ollama,然后运行 journalctl -e -u ollama

agent 报告模型不存在。 配置中的名称与服务器提供的名称不匹配。将其与 curl http://localhost:11434/v1/models 进行比较,并从中复制字符串。标签属于名称的一部分,因此,即使已安装相似模型,配置中指定了从未拉取的标签也会失败。

agent 只用文字回答,从不编辑文件。 模型可能不支持工具,也可能是请求及其工具定义已经占满上下文窗口。检查模型页面上的 tools 标签,然后检查 ollama ps 中的 CONTEXT 列。

第一个 token 之前长时间无响应,随后速度正常。 keep-alive 已过期,系统正在重新从磁盘读取权重。设置 OLLAMA_KEEP_ALIVE

模型否定了它刚刚读取的文件内容。 这是上下文截断。ollama ps 通常会显示一个比预期更小的 CONTEXT 值,因为环境变量设置到了你的 shell,而不是 systemd 单元。

所有功能都正常,但速度很慢,并且 PROCESSOR 不是 100% GPU 模型及其上下文无法装入 VRAM。降低上下文长度,或改用更小的模型或更小的量化级别。重新拉取模型前,请阅读q4_K_M、q8_0 和 fp16 各自在内存中的开销,以及实际的质量下降位置,了解降低一个级别可以释放多少空间,以及需要为此牺牲什么。

FAQ

我可以让 Claude Code 连接 Ollama 吗?

可以,但不能使用 OpenAI 兼容 URL。Claude Code 使用 Anthropic Messages API,而 Ollama 在同一 11434 端口的 /v1/messages 提供这种接口格式。导出 ANTHROPIC_BASE_URL=http://localhost:11434ANTHROPIC_AUTH_TOKEN=ollama 和空的 ANTHROPIC_API_KEY,然后使用 claude --model qwen3-coder:30b 启动。ollama launch claude 会为您写入相同的设置。兼容层不实现 tool_choice 或提示缓存,也没有 token 计数端点,因此报告的 token 数量只是近似值。

为什么我的本地模型会回答它看不到的代码?

因为请求已超出上下文窗口,最早的部分会被丢弃,而且不会显示错误。Ollama 会根据检测到的 VRAM 设置默认上下文;当 VRAM 小于 24 GiB 时,默认值为 4,096 tokens,仅 agent 的系统提示和工具定义就会超过该值。在 systemd unit 中设置 OLLAMA_CONTEXT_LENGTH=64000,重启 Ollama,然后确认 ollama psCONTEXT 列显示新值。

在 VPS 上运行编码 agent 应该选择哪个模型?

选择带有 tools 标签且在 64k 上下文窗口下仍能装入内存的最大模型,并优先选择针对代码调优的模型。在 VRAM 充足的 GPU 服务器上,qwen3-coder:30b 通常是常见选择。如果该标签对应的模型对您的服务器来说太大,可以先参考Nemotron 3.5 Lightning 的 RAM 数据和仅使用 CPU 时的速度,再决定是否下载。参数量低于约 14B 时,模型仍可能很好地回答代码问题,但在执行多步骤编辑时失败,因为 agent 任务对工具调用中的细小格式错误非常敏感。请使用您自己代码仓库中的一个真实任务进行测试,不要只使用示例提示。

我需要 GPU 才能在自己的模型上运行编码 agent 吗?

实际上需要。仅使用 CPU 推理可以运行,处理单个问题也没有问题,但 agent 每个任务会发送许多请求,而且每次都会重新读取较长的历史记录。因此,较低的 token 速率会把一个两分钟的任务变成一小时。检查 ollama ps 中的 PROCESSOR 列:任何不是 100% GPU 的值都表示部分模型在 CPU 上运行,token 速率会明显下降。

#ollama#coding-agent#openai-compatible#local-llm#self-hosted-ai