文档
Factory Droid
Droid 的自定义模型是一个 JSON 数组,包含三个必填字段。最容易被误解的是 baseUrl,因为正确格式取决于你选择的三种提供商值中的哪一种。
在 ~/.factory/settings.json 中添加 customModels 条目 — model、baseUrl 和 provider — 让 Droid 使用任何支持 Anthropic Messages 或 OpenAI Chat Completions 的端点。
// ~/.factory/settings.json (Windows: %USERPROFILE%\.factory\settings.json)
{
"customModels": [
{
"model": "claude-sonnet-5",
"displayName": "Sonnet 5 [Kunavo]",
"baseUrl": "https://api.kunavo.com",
"apiKey": "${KUNAVO_API_KEY}",
"provider": "anthropic"
},
{
"model": "gpt-5-6-sol",
"displayName": "GPT-5.6 Sol [Kunavo]",
"baseUrl": "https://api.kunavo.com/v1",
"apiKey": "${KUNAVO_API_KEY}",
"provider": "generic-chat-completion-api"
}
]
}
// Then, in the shell Droid starts from:
// export KUNAVO_API_KEY=sk-kn-...
// ${VAR_NAME} expansion is a settings.json feature. It does NOT apply to the
// legacy ~/.factory/config.json, which Factory still loads and merges./v1 应用于一个条目,而不是另一个。Factory 的文档用表格而不是句子说明了这一点:其 Provider 参考表为 https://api.anthropic.com 提供 provider: "anthropic"(不带路径的根域名),而 https://api.openai.com/v1、https://openrouter.ai/api/v1 和 https://api.groq.com/openai/v1 都使用 /v1 根路径。Droid 会自行追加路由,因此上方 Anthropic 条目应填写不带路径的根域名,而 Chat Completions 条目应填写 /v1。在 Anthropic 条目中加入 /v1 会请求 /v1/v1/messages,导致 404,而不是身份验证失败;请参阅基础 URL 参考。curl 可以让你在十秒内自行确认;客户端的行为则需由你和 Factory 确认。authMode。Factory 说明的默认值 provider-default 会将凭据放在 x-api-key 中,而 Kunavo 的 Messages 端点也接受该请求头和 Authorization: Bearer。如果你想明确使用 bearer 格式,Factory 文档指出 authMode: "bearer" 适用于 provider: "anthropic",这里也同样可用。sk-kn- 开头),并充值 $10 起——调用费用从该余额中扣除,失败的调用不会收费。随后,控制台会打开 Factory Droid 设置页面。分步操作
- 在
/app/keys创建密钥并复制;密钥只会显示一次。在启动 Droid 的 shell 中将其导出为KUNAVO_API_KEY,这样密钥本身就不会写入设置文件。 - 打开
~/.factory/settings.json(如果文件不存在就创建),并添加上方的customModels数组。Factory 明确要求三个字段:model、baseUrl和provider;displayName是在选择器中显示的标签。 - 检查
provider的拼写。它必须与anthropic、openai或generic-chat-completion-api中的一项完全一致;Factory 的故障排查部分指出,拼写错误会导致其"Invalid provider"错误。 - 在 CLI 中运行
/model。你的条目会显示在 Factory 自有模型下方的单独 Custom models 区域中,并以你设置的displayName为标签。Factory 会监视设置文件,因此保存即可,无需重启。 - 给它一个需要读取并编辑文件的任务,而不是打招呼。Droid 几乎所有操作都依赖工具调用,而普通聊天轮次无法检验这一点。然后运行
/cost,Factory 会在此处报告缓存命中率——Kunavo 原生提供 Anthropic 的cache_control标记;Factory 自己也指出,在通用 Chat Completions 服务商中,缓存“因服务商而异,无法保证”。
已于 2026年9月21日 对照 Factory 的自定义模型(BYOK)页面 检查。第三方设置会发生变化;如果这里的字段名称不再与你看到的内容一致,应以该页面为准,而不是本页。
调试客户端前先验证
一个请求即可确定故障来自端点、密钥还是配置文件。如果返回 JSON,则相同的基础 URL 和密钥可以在 Factory Droid 中使用。
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/messages \
-H "Authorization: Bearer sk-kn-..." \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'字段中应填写哪个模型 ID
每个文本模型都可通过模型 ID 访问——实时列表见 GET /v1/models,包含价格的目录见模型页面。费率单位为每 1M token 的美元,格式为输入 / 输出。
| 模型 ID | Kunavo 输入 / 输出 | 它在 Factory Droid 中的位置 |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | 默认工作模型——填入 provider: "anthropic" 条目 |
claude-opus-5 | $3.50 / $17.50 | 计划进行一次选错代价高昂的更改;使用同一个 anthropic 条目 |
claude-haiku-4-5 | $0.70 / $3.50 | 廉价调用和文件分流,适用于数量占主导的场景;使用同一个 anthropic 条目 |
gpt-5-6-sol | $2.00 / $12.00 | 来自另一个系列的第二意见——需要 generic-chat-completion-api 条目 |
Droid 中的自定义模型无法覆盖哪些场景
有三项限制来自 Factory 自己的页面,每一项都会影响你对上述配置的预期,但不影响它是否可用。
- 仅适用于本地界面。 Factory 的 BYOK 页面说明,自定义模型可用于 Droid CLI 和桌面应用,它们会读取本地
settings.json;并且这些模型“不会出现在 Factory 托管的网页或移动平台上”。通过托管产品委派的工作仍会使用由 Factory 计费的推理服务,无论你在此处配置了什么密钥。 - 管理员可以将其关闭。Factory 的企业控件文档介绍了
modelPolicy.allowCustomModels和allowedBaseUrls,它们可以彻底禁用用户 BYOK,或将所有自定义模型限定到一个获准的主机。在受管理的设备上,调试文件之前先检查这一点。 - 套餐费用仍然存在。此处的密钥是额外选项,而非替代方案——Factory 在 BYOK 额度之外收取的费用,以及该额度的具体内容,详见 费用指南;本页面不会重新推算这些信息。
复制其他地方的配置之前,有个容易踩的坑值得了解:Factory 仍会加载旧版 ~/.factory/config.json,其中使用 snake_case 的 custom_models 和 base_url,并将其合并到 settings.json 之下;文档说明,${VAR_NAME} 展开功能在此处不适用。写在该文件中的占位密钥会按字面内容发送。请使用 settings.json。
常见问题
如何为 Factory Droid 添加自定义 API 端点?
编辑 ~/.factory/settings.json(Windows 上为 %USERPROFILE%\.factory\settings.json),并添加一个 customModels 数组。每个条目都需要三个必填字段——model、baseUrl 和 provider——以及可选字段,包括 displayName、apiKey、authMode、maxOutputTokens 和 extraHeaders。这里没有设置表单;JSON 文件就是配置界面。Factory 会监视该文件,因此保存后,在 CLI 中运行 /model,该条目就会显示在单独的“自定义模型”标题下。
Factory Droid 的 baseUrl 末尾需要加 /v1 吗?
这取决于 provider 值;Factory 的文档通过 Provider 参考表给出了明确答案,而不是用一句话说明。Anthropic 一行给出的地址是 https://api.anthropic.com,不带路径,因此 provider 为 "anthropic" 时使用不带路径的源站地址——Kunavo 则使用 https://api.kunavo.com。表中每个 Chat Completions 条目都带有 /v1 根路径(https://api.openai.com/v1、https://openrouter.ai/api/v1),因此 provider 为 "generic-chat-completion-api" 时使用 https://api.kunavo.com/v1。Droid 会自行追加路由,所以 Anthropic 条目中加入 /v1 会生成 /v1/v1/messages,并返回 404,而不是身份验证错误。
通过第三方端点调用 Claude 模型时,应该使用哪个 provider 值?
使用 "anthropic"。Factory 文档列出了三个 provider 值,每个值对应一种网络协议:"anthropic" 对应 /v1/messages 上的 Anthropic Messages API,"openai" 对应 OpenAI Responses API,"generic-chat-completion-api" 对应 OpenAI Chat Completions。该值表示端点使用的协议,而非向谁付费,因此,无论密钥属于哪个账户,只要网关响应 /v1/messages,就使用 "anthropic"。Factory 自己的说明是,除非调用 OpenAI 或 Anthropic 的官方 API,否则应使用 "generic-chat-completion-api";但这指的是可用的协议,如果某个端点同时提供两种协议,你可以自行选择。
为什么 Factory Droid 报告 provider 无效,或跳过了我的自定义模型?
Factory 的故障排查部分列出了三种原因。模型未出现在选择器中,通常是 settings.json 中的 JSON 语法错误,或缺少必填字段——model、baseUrl 或 provider。“Invalid provider”错误表示拼写有误:该值必须准确为 anthropic、openai 或 generic-chat-completion-api。身份验证错误则与密钥或基础 URL 有关;Factory 建议确认基础 URL 与你的 provider 文档一致。先用上面的 curl 命令在客户端之外确认具体原因:如果返回 JSON,说明端点和密钥都正常,问题出在设置文件中。