文档

文档

Factory Droid

Droid 的自定义模型是一个 JSON 数组,包含三个必填字段。最容易被误解的是 baseUrl,因为正确格式取决于你选择的三种提供商值中的哪一种。

在 ~/.factory/settings.json 中添加 customModels 条目 — model、baseUrl 和 provider — 让 Droid 使用任何支持 Anthropic Messages 或 OpenAI Chat Completions 的端点。

~/.factory/settings.json → customModels
// ~/.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 参考。
此配置根据下方日期时 Factory 自己的文档整理而成。Kunavo 尚未使用 Droid CLI 调用其端点——没有运行会话、流式轮次或工具往返调用;这一点也适用于这个系列中的所有客户端。发布配置页面不等于经过测试。Factory 也明确说明了相应限制:按其说法,只有通过官方 API 调用的 Anthropic 和 OpenAI 模型才“经过全面测试和基准评测”。下方的 curl 可以让你在十秒内自行确认;客户端的行为则需由你和 Factory 确认。
可以省略 authMode。Factory 说明的默认值 provider-default 会将凭据放在 x-api-key 中,而 Kunavo 的 Messages 端点也接受该请求头和 Authorization: Bearer。如果你想明确使用 bearer 格式,Factory 文档指出 authMode: "bearer" 适用于 provider: "anthropic",这里也同样可用。
还没有密钥?创建 Kunavo 账户,创建一个密钥(以 sk-kn- 开头),并充值 $10 起——调用费用从该余额中扣除,失败的调用不会收费。随后,控制台会打开 Factory Droid 设置页面。

分步操作

  1. 在 /app/keys 创建密钥并复制;密钥只会显示一次。在启动 Droid 的 shell 中将其导出为 KUNAVO_API_KEY,这样密钥本身就不会写入设置文件。
  2. 打开 ~/.factory/settings.json(如果文件不存在就创建),并添加上方的 customModels 数组。Factory 明确要求三个字段:model、baseUrl 和 provider;displayName 是在选择器中显示的标签。
  3. 检查 provider 的拼写。它必须与 anthropic、openai 或 generic-chat-completion-api 中的一项完全一致;Factory 的故障排查部分指出,拼写错误会导致其 "Invalid provider" 错误。
  4. 在 CLI 中运行 /model。你的条目会显示在 Factory 自有模型下方的单独 Custom models 区域中,并以你设置的 displayName 为标签。Factory 会监视设置文件,因此保存即可,无需重启。
  5. 给它一个需要读取并编辑文件的任务,而不是打招呼。Droid 几乎所有操作都依赖工具调用,而普通聊天轮次无法检验这一点。然后运行 /cost,Factory 会在此处报告缓存命中率——Kunavo 原生提供 Anthropic 的 cache_control 标记;Factory 自己也指出,在通用 Chat Completions 服务商中,缓存“因服务商而异,无法保证”。

已于 2026年9月21日 对照 Factory 的自定义模型(BYOK)页面 检查。第三方设置会发生变化;如果这里的字段名称不再与你看到的内容一致,应以该页面为准,而不是本页。

这是简要版本。完整教程——包括模型选择、真实会话成本和失败模式——见 Factory Droid 费用指南。

调试客户端前先验证

一个请求即可确定故障来自端点、密钥还是配置文件。如果返回 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 的美元,格式为输入 / 输出。

模型 IDKunavo 输入 / 输出它在 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 条目
计费方式是从预付余额中按 token 扣费,无月费——参见 计费。对于重复上下文——这正是编辑器或聊天客户端发送内容的大部分——提示缓存对账单的影响大于模型选择。

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,说明端点和密钥都正常,问题出在设置文件中。