编辑器接自定义模型后这笔钱怎么算:和订阅制的成本结构差在哪
自己接模型之后,你买的东西变了:订阅买的是”这个月随便用”的使用权,自接模型买的是”按 token 计量的推理服务”,前者是固定成本,后者是可变成本。 这句话听起来像废话,但它决定了后面所有的算法——固定成本只需要问”值不值”,可变成本必须先能”估得出、看得见、压得下”。而工具配置界面里那几栏跟价格沾边的输入项,是让你填的参数,不是账单本身。
本篇只解决一个问题:自己接模型之后,这笔钱的结构变成了什么样,什么规模下这么做才划算。至于按用量套单价算月成本的通用算法,见 API 用量成本怎么算;订阅制工具本身该怎么选、每月花在订阅上多少合适,见 AI 编程工具成本;已经产生的 token 怎么往下压,见 token 成本优化。这三篇讲的是通用算法、订阅对比和省钱手段,本篇讲的是”接入方式改变之后成本结构本身的变化”。
一、先把两件事分开:接入方式和模型能力
很多人算不清这笔账,是因为把两件不同的事混在一起了。
接入方式说的是:你的编辑器用什么协议、填哪些字段,去找到一个能返回补全结果的服务。绝大多数工具走的是 OpenAI 兼容端点——意思是服务商把自己的接口做成和 OpenAI API 一样的请求/响应格式,你只要把地址换掉、密钥换掉,客户端的代码一行不用改就能说得上话。这就是为什么这类配置绕来绕去都是那几样:以 Cline 与 Roo Code 为例,官方文档里自定义 provider 的必填项就是 Base URL、API Key、模型标识三项。别家未必如此——Kilo Code 新建 provider 时文档还列了 Provider ID、Display name、Provider API、Headers 等项,goose 走的是环境变量,Crush 走的是命令。必填项与字段名各家不同,以官方文档为准。
模型能力说的是:这个模型本身能干什么。它一次能读进多少上下文、支不支持工具调用、能不能看图。这部分跟你怎么接它没关系,是模型自己的属性。
两件事的区别在算钱时会直接冒出来:接入方式基本不产生额外成本(省下的是订阅费),真正产生成本的是模型能力的消耗量——你每次让它读了多少 token、吐了多少 token。
顺带把几个后面要用到的词先说明白:
- 上下文窗口:模型单次请求能容纳的 token 上限,提示词、代码片段、历史对话、工具返回值全挤在这一个额度里。窗口越大,单次能塞的东西越多,单次输入 token 也就越多。
- 原生工具调用(function calling):模型按结构化格式输出”我要调用哪个工具、参数是什么”,客户端解析后去执行。这是 Agent 类工具能读文件、跑命令的基础机制。
- 嵌入与重排:嵌入是把文本转成向量以便做相似度检索,重排是对检索回来的候选结果再排一次序。这两件事通常由专门的小模型做,是跟聊天模型分开计费的另一条支出线。
二、订阅制和自接模型,成本结构差在哪
订阅制的结构很简单:一个月一笔,用多用少都是它。它的成本曲线是一条水平线,你唯一的决策点是”续不续”。
自接模型的结构是三段乘法:请求次数 × 单次 token 量 × 单价。这三项里,单价是服务商定的,你能动的只有前两项。而”单次 token 量”这一项,恰恰是编辑器类工具最容易失控的地方——它会把仓库里的文件、之前几轮的对话、工具返回的结果,一并塞进上下文里发出去。同一句”帮我改下这个函数”,在小项目和大仓库里产生的 token 量可能差一个数量级。
所以两种结构真正的分水岭不是”每月花多少钱”,而是你的用量波动有多大:
- 用量稳定且不高:订阅制的固定成本更省心,账好做,不用管理密钥。
- 用量波动大、有明显的忙闲:自接模型的可变成本更贴合真实消耗,闲的月份自然就便宜。
- 用量非常大且集中:这时要算的不是省不省,而是订阅档位的用量边界够不够——这属于订阅侧的问题,本篇不展开。
- 有非功能性需求(数据必须走内网端点、必须用指定的自建网关、要接特定的推理服务):这时接入方式是硬约束,成本只是顺带的结果。
还有一项常被忽略的成本:自接模型把”确定性”换成了”可控性”。订阅制下你不需要知道 token 是什么,自接之后你得自己维护密钥、自己盯用量、自己判断哪个模型用在哪一步。这部分工时也是成本,只是不出现在账单上。
三、配置里跟”算钱”沾边的那几栏
有几家工具在自定义 provider 里留了跟量纲、跟价格有关的输入项——本篇能核到并写进下表的只有 Cline 与 aider 两家,没有出现在表里的产品不等于没有这类字段,请查各自官方文档。要注意的是:官方文档这一层记的是”有哪些字段”,很多字段并没有逐条说明客户端内部拿它做什么。 下表只写字段名、出现在哪一家、以及你要填的是什么量纲,不替产品定行为。表中所有字段名逐字取自各家官方文档,情况截至 2026-08-07,以官方文档最新版为准。
| 字段名 | 出现在 | 你填进去的是什么量纲 | 本篇能说到什么程度 |
|---|---|---|---|
| Base URL | Cline 的 OpenAI Compatible provider | 服务商给的 API 端点地址 | Cline 文档明确提示这里不会是 https://api.openai.com/v1;其 v0 Quickstart 示例为 https://api.v0.dev/v1(含 /v1),Model ID 为 v0-1.0-md |
| Max Output Tokens | Cline 的 Model Configuration 区 | 输出 token 的数量上限 | 文档列出了这一项名字,未逐条说明客户端拿它做什么;输出侧与输入侧通常分开计价,属通用计量机制而非该文档记载 |
| Context Window size | Cline 的 Model Configuration 区 | 上下文窗口的 token 容量 | 文档列出了这一项名字,未逐条说明客户端拿它做什么,实际行为以官方文档为准 |
| Input Price / Output Price | Cline 的 Model Configuration 区 | 单价 | 文档列出了这两栏名字。按字段语义看它们是让你填单价的输入项,但这是按名字推出来的判断,不是产品行为的断言 |
max_input_tokens / max_output_tokens | aider 的 .aider.model.metadata.json | 上下文上限与输出上限 | aider 文档说明:对它不认识的模型,用这个文件注册上下文上限与价格 |
input_cost_per_token / output_cost_per_token | aider 的 .aider.model.metadata.json | 每 token 单价 | 文档示例里给的数值是官方文档的示例值,不是任何真实模型的报价 |
extra_params | aider 的模型设置 | 透传给 litellm.completion() 的任意参数,含 extra_headers | 文档说明可用特殊模型名 aider/extra_params 让设置对所有模型全局生效 |
aider 的这套文件还有个细节值得记住:.aider.model.settings.yml 可以放在四处——home 目录、git 仓库根目录、启动 aider 的当前目录、以及 --model-settings-file <filename> 指定的自定义路径——按顺序加载、后加载的优先。这意味着团队可以在仓库根放一份共享基线,个人在本地目录覆盖自己那份。
跨产品看,同一件事的字段名各不相同:Cline 界面里叫 Base URL,Continue 的 config.yaml 里叫 apiBase,Zed 的 settings.json 里叫 api_url,goose 用环境变量 OPENAI_HOST(另有 OPENAI_BASE_PATH),Crush 是命令行参数 --base-url。名字不通用,照抄别家的填法就是错的。
四、月成本怎么估:从量到钱
估算的顺序是固定的:先估量,再套价。
第一步,估量。 拿你过去一段时间的真实使用节奏来推:一天大概发起多少次对话式修改,每次大致带多少上下文。如果工具或服务商控制台能看到用量统计,直接用真实数字,比拍脑袋准得多。
第二步,把输入和输出分开。 这是新手最容易漏的一环。输入 token 和输出 token 的单价通常不一样,而编辑器类场景的特点是输入远大于输出——你让它读了半个文件,它可能只改了三行。把两者混成一个数去算,结果会明显失真。
第三步,套单价算月成本。 想快速看一眼量级,可以用本站的 API 月成本估算器:填入月输入/输出 token 用量,自动按各模型单价算出月成本并排序;页面里还附了估算方法、常见低估陷阱与四种降本手段。要说清它的边界——它算的是估算量级,不是账单。真实扣费以服务商控制台为准,任何估算工具都替代不了对账。
第四步,别忘了另一条支出线。 如果你的工具还配了检索类角色,那部分是单独计费的。Continue 的 config.yaml 里,模型的 roles 取值包括 chat、autocomplete、embed、rerank、edit、apply、summarize,默认是 [chat, edit, apply, summarize]。也就是说 embed 和 rerank 要你显式配置——一旦配上,嵌入与重排就成了一条独立于聊天调用的成本线。autocomplete(补全)同理:它触发频率远高于对话,量小价低但次数极多,容易在总账里悄悄占一块。
五、边界与代价:这个做法放弃了什么
自己接模型不是纯赚,它明确放弃了几样东西。
放弃了成本的确定性。 订阅制下你知道这个月花多少,自接之后你只能估。估算和账单之间永远有偏差,偏差的来源可能是某一天在大仓库里跑了一整轮重构。如果你的财务流程要求月度支出可预测,这一条是硬伤。
放弃了”选了就能用”。 模型能力得自己核。Roo Code 官方文档写得很直接:
“Roo Code uses native tool calling exclusively. This is the only supported tool protocol — there is no XML-based fallback.”
这是该产品官方文档的说法,不是本文的断言。它的含义是:所选模型必须支持 OpenAI 兼容的 function calling,不支持原生工具调用的模型用不了。文档建议先查服务商文档确认该模型是否支持工具调用。同类信号在别家也有:Continue 的可选字段里有 capabilities(如 tool_use、image_input),Zed 的 capabilities 对象控制 tools、images、parallel_tool_calls 等能力开关。也就是说,你按单价挑了个便宜模型,它可能根本走不通 Agent 流程——这笔”选型返工”的时间成本要算进去。
放弃了自动化的元数据。 上下文窗口这类数字,好几家都要你手填:Cline 有 Context Window size,Roo Code 有 Context Window,Zed 在 available_models 每项里写 max_tokens,aider 用 .aider.model.metadata.json 里的 max_input_tokens / max_output_tokens。模型列表也一样:Kilo Code 在凭据有效时会从 /v1/models 端点自动拉取,自动检测失败可手动填模型 ID;Zed 要在 available_models 里手写;Continue 在 models 块里手写。手填就意味着服务商那边一改,你这边的数字就旧了,而你不会收到通知。
它明确不管的事: 不管你的密钥安全(这得你自己管)、不管服务商的稳定性、不管账单核对、不管团队里谁花了多少。这些都是自接模型之后新长出来的运维项,跟”省了多少订阅费”完全是两本账。
六、避坑清单
只算输出、不算输入。 为什么会踩:直觉上”生成的内容才是产出”,而输入看不见。怎么避:估算时强制把两个数分开填,编辑器场景默认输入是大头。
忘了自动补全那条线。 为什么会踩:补全是无感触发的,你不会记得自己”用过”它。怎么避:如果配了补全角色,把它当成一条独立的、高频低单价的支出线单独估。
照抄别家的字段填法。 为什么会踩:各家教程满天飞,字段名看着都像 base URL。怎么避:只看你正在用的那个产品的官方文档,apiBase / api_url / Base URL / OPENAI_HOST / --base-url 不是同一个东西。
/v1 加不加拿不准。 为什么会踩:各家文档给的示例形态不一致——Cline 文档的 v0 示例含 /v1,Zed 示例是 https://example.com/v1,Groq 官方 base URL 是 https://api.groq.com/openai/v1,Kilo Code 则明确接受 https://api.provider.com/v1 和 https://api.provider.com/v1/chat/completions 两种形态(文档说明第二种是为端点结构非标准的服务商与自建网关准备的),而 goose 的 OPENAI_HOST 与 OPENAI_BASE_PATH 本身就是拆开两段的设计。怎么避:以你所用产品文档的示例形态为准,不要跨家类推。
把密钥写进配置文件然后提交进仓库。 为什么会踩:配置文件天然想进版本库。怎么避:Zed 文档原话是 “Do not put API keys in settings.json.”,另一页写明 “Provider keys saved through Zed are stored in the system keychain, not in settings.json.”——keychain 指操作系统提供的凭据存储,密钥由系统加密保管,不落在明文文件里。Zed 的另一条路是环境变量,命名规则是 <PROVIDER_NAME>_API_KEY,provider 名为 my-provider 时对应 MY_PROVIDER_API_KEY。Gemini CLI 则支持在 settings.json 里做环境变量插值:写 $VAR_NAME 或 ${VAR_NAME},加载时自动解析成对应环境变量的值——这样配置文件可以进版本库,而真正的密钥留在环境里。
把配置界面里的价格栏当成账单。 为什么会踩:字段名里带 Price,很容易以为它会替你对账。怎么避:把它当成你自己填进去的参考值,账以服务商控制台为准。
估算做完就不再回看。 为什么会踩:估算是一次性动作,用量却在变。怎么避:定一个复核节奏,比如每月拿一次真实用量回填估算模型,看偏差有多大。偏差持续偏高,说明你的上下文管理该改了——具体手段见前面链接的 token 成本优化,配置怎么落地见 编辑器接入自定义 API。
数据来源与核对日期
本篇引用的产品事实全部来自各产品官方文档,核对日期均为 2026-08-07。文档随时可能更新,请以官方文档最新版为准。
- Cline(OpenAI Compatible provider 的必填项与 Model Configuration 字段名、v0 Quickstart 示例):https://docs.cline.bot/provider-config/openai-compatible
- Roo Code(原生工具调用的英文原句、Base URL 与 Context Window 等自定义项):https://roocodeinc.github.io/Roo-Code/providers/openai-compatible
- Kilo Code(Base URL 两种形态、
/v1/models自动拉取模型列表):https://kilo.ai/docs/providers/openai-compatible - Continue(
config.yaml的models块、apiBase、capabilities、roles取值与默认值):https://docs.continue.dev/reference - aider(
.aider.model.settings.yml的四处位置与加载顺序、.aider.model.metadata.json的字段与示例值、extra_params):https://aider.chat/docs/config/adv-model-settings.html - Zed(
api_url、available_models与max_tokens、capabilities、密钥不写进 settings.json 的原话与 keychain 说明、<PROVIDER_NAME>_API_KEY命名规则):https://zed.dev/docs/ai/use-api-access 与 https://zed.dev/docs/ai/configuration - goose(
OPENAI_HOST与OPENAI_BASE_PATH):https://goose-docs.ai/docs/getting-started/providers/ - Crush(自定义 provider 的
--base-url参数):https://raw.githubusercontent.com/charmbracelet/crush/main/README.md - Gemini CLI(
settings.json的环境变量插值$VAR_NAME/${VAR_NAME}):https://google-gemini.github.io/gemini-cli/docs/get-started/configuration.html - Groq(作为 OpenAI 兼容端点实例的 base URL):https://console.groq.com/docs/api-reference
本篇没有写什么,以及为什么:
- 不写任何价格、免费额度、订阅档位与限速数字。 这类数字变动频繁,写下来的当天可能就是旧的,请直接查各服务商官方定价页与文档。文中 aider 那段 JSON 里的单价数值是官方文档的示例值,不是任何真实模型的报价。
- 不写完整模型清单。 各家在售模型持续变动,本篇只在必要处引用官方文档中出现过的示例模型 ID。
- 不写界面长什么样。 上面所有内容都在配置层——字段名、配置文件、环境变量。菜单在哪一级、提示文案是什么、什么时候会校验拦住你,一律以你实际看到的界面为准。
- 不写”某产品没有某功能”。 本篇依据的那几页文档记录里没有出现的项,不等于该产品没有;要确认请查该产品官方文档。
- 不给各家文档或产品排座次。 上面列出的差异都是设计取向的不同,能在各自官方文档里复核,不构成优劣评价。
- 文中关于”编辑器场景通常输入 token 远大于输出""输入与输出单价往往不同""编辑器类工具会把文件内容与历史对话一并拼进上下文""补全类调用的触发频率高于对话”一类说法,属于 OpenAI 兼容协议层与计量方式的通用机制推理,不是任何一家产品文档的记载事实。具体到你所用的产品与服务商,实际拼装策略与计价方式请以其官方文档为准。
- 不替任何产品定内部行为。 上表第四列反复出现”文档列出了这一项名字,未逐条说明客户端拿它做什么”,是因为文档这一层确实只到字段名为止;本篇不据字段名去替产品断言它内部怎么用这个数。
延伸阅读:同一组里的 明明改了配置却没生效、团队统一编辑器模型配置;接完之后照 接完自定义模型别急着干活 逐项过一遍,才算真接通。