文档
twinny
twinny 不需要基础 URL。它要求填写协议、主机名、端口和 API 路径;对于聊天,该路径就是 API 基础路径。因此填写 https、api.kunavo.com 和 /v1,并将端口留空。
twinny 没有基础 URL 字段 — Add provider → OpenAI-compatible server,然后填写 Protocol https、Hostname api.kunavo.com、Port 留空、API path /v1,其聊天面板即可使用你的密钥。
Label Kunavo
Type Chat
Provider OpenAI-compatible server
Hostname api.kunavo.com
Port (leave blank — "Blank means the protocol's default")
Protocol https
API path /v1
Model name claude-sonnet-5
FIM template (Autocomplete only — not part of a Chat provider)
API key sk-kn-.../v1,而不是 /v1/chat/completions。twinny 的提供商表格用一句话说明了这一点——“对于聊天,路径就是 API 基础路径;twinny 会附加 /chat/completions”——因此路径若已包含路由,就会生成 /v1/chat/completions/chat/completions 并返回 404。这里没有一个容易填错的统一基础 URL 字段,不过同一张表格还提供了一个快捷方式:将 https://api.kunavo.com/v1 粘贴到 Hostname,系统就会“拆分为协议、主机、端口和路径”。sk-kn- 开头),并充值 $10 起——调用费用从该余额中扣除,失败的调用不会收费。随后,控制台会打开 twinny 设置页面。分步操作
- 在
/app/keys创建密钥并复制——它只会显示一次。 - 点击侧边栏顶部的机器人图标,打开 Providers 选项卡;也可以从命令面板运行 Manage twinny providers。
- Add provider → 在 On your machine 下选择
OpenAI-compatible server,即通用预设。该预设默认指向localhost:8080。 - 将 Protocol 设为
https,将 Hostname 设为api.kunavo.com,清空 Port,并将 API path 设为/v1。Type 保持为Chat。 - 将密钥粘贴到 API key 字段中——twinny 会将其作为
Authorization: Bearer发送。然后设置 Model name,可以手动输入,也可以使用 Choose from the server's models,因为 Kunavo 支持GET /v1/models。 - 点击 Test provider,然后点击 Use this provider 将其设为当前聊天提供商。若要添加第二个模型,请使用 Copy 复制该行,而不必重新输入四个端点字段。
已于 2026年9月21日 对照 twinny 的“Other local servers”页面 检查。第三方设置会发生变化;如果这里的字段名称不再与你看到的内容一致,应以该页面为准,而不是本页。
调试客户端前先验证
一个请求即可确定故障来自端点、密钥还是配置文件。如果返回 JSON,则相同的基础 URL 和密钥可以在 twinny 中使用。
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."字段中应填写哪个模型 ID
每个文本模型都可通过模型 ID 访问——实时列表见 GET /v1/models,包含价格的目录见模型页面。费率单位为每 1M token 的美元,格式为输入 / 输出。
| 模型 ID | Kunavo 输入 / 输出 | 它在 twinny 中的位置 |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | 聊天面板、行内编辑和代码审查——适合作为日常默认模型 |
claude-haiku-4-5 | $0.70 / $3.50 | 提交消息、终端助手和代码操作;在这些场景中,调用量影响更大 |
gpt-5-6-terra | $0.70 / $4.20 | 粘贴到聊天中的长文件,以及评审内容显得单薄时来自另一模型系列的第二意见 |
聊天可用,自动补全和索引则不行。
twinny 将工作拆分给三种提供商类型,且每种都需要单独配置——因此“twinny 支持 Kunavo”只对其中一种成立。其他两种并不是你尚未找到的配置选项;它们所需的路由并非 Kunavo 支持的路由。
| 提供商类型 | twinny 发送的内容 | 与 api. |
|---|---|---|
| 聊天 | 向 <API path>/ 发送 OpenAI 格式的 POST 请求 | 可用——上文介绍的就是这种方式。 |
| 自动补全(FIM) | 向 /v1/ 发送原始的中间填充(fill-in-the-middle)提示 | 不可用。Kunavo 没有 /v1/ |
| 嵌入 | 向 /v1/ 发送请求 | 不可用。Kunavo 不提供嵌入模型,因此无法在此构建工作区索引。 |
这两项能力缺失都不会阻止配置,因为 twinny 对每种类型分别保留一个当前提供商,彼此独立。twinny 自己的托管 API 页面称这种拆分是“一种常见配置”:使用小型本地基础模型进行补全,同时使用托管模型进行聊天、评审和编辑。工作区索引也是类似情况——这里不提供嵌入步骤,而 twinny 的文档建议通过 Ollama 使用本地模型,例如 nomic-embed-text。不同模型生成的向量不能混用,因此更换该模型后需要重建索引,而不是更新索引。
常见问题
如何将 twinny 指向自定义 API 端点?
点击 twinny 侧边栏中的机器人图标,打开 Providers 选项卡,选择 Add provider,然后在“On your machine”下选择名为“OpenAI-compatible server”的通用预设。twinny 文档说明,提供商表单接受任意主机名、端口、协议和路径,因此将 Protocol 设为 https,将 Hostname 设为端点的主机名,Port 留空以使用协议默认端口,并将 API path 设为 API 基础路径。将密钥粘贴到 API key 字段中;twinny 会将其作为 Authorization: Bearer 标头发送。然后点击 Test provider——它会发送一个用于该提供商用途的小型请求,并报告请求成功或服务器返回的错误,以及它调用的 URL。
twinny 的 API path 需要填写 /v1 还是 /v1/chat/completions?
对于聊天提供商,应填写 /v1。twinny 的提供商表格说明:“对于聊天,路径就是 API 基础路径;twinny 会附加 /chat/completions”,因此扩展会自行构建完整路由。如果路径中已经包含该部分,最终路径会变成 /v1/chat/completions/chat/completions,返回的将是 404,而不是身份验证错误。同一表单中的自动补全和嵌入使用相反的约定:API path 应填写完整路由,通用预设的默认值分别是 /v1/completions 和 /v1/embeddings。
twinny API 密钥应填在哪里?是否有基础 URL 字段?
密钥应填入提供商的 API key 字段,并作为 Authorization: Bearer 发送;twinny 文档说明,密钥会与提供商一起存储在 VS Code 的存储中,并会在 twinny 日志中脱敏。没有统一的基础 URL 字段——端点由 Protocol、Hostname、Port 和 API path 这几个字段组成。可以使用一个快捷方式:将完整 URL 粘贴到 Hostname 中。文档说明,粘贴 https://my-box:8080/v1 这样的 URL 后,系统会将其拆分为协议、主机、端口和路径。因此,粘贴 https://api.kunavo.com/v1 就能一次填好三个字段。
twinny 的自动补全能否通过 Kunavo 这样的托管网关运行?
不能,原因是缺少路由,而不是设置问题。twinny 的通用 OpenAI 兼容预设会向 /v1/completions 这类路由发送原始的中间填充提示,而 api.kunavo.com 不提供 /v1/completions;模型目录中也没有经过中间填充训练的基础模型或代码模型。请让自动补全继续使用本地服务器——twinny 的常见问题解答建议在 Ollama 上使用 qwen2.5-coder:1.5b-base——并使用托管提供商进行聊天。twinny 将这种组合称为常见配置;由于按类型选择当前提供商,因此无需切换。
Kunavo 能否为 twinny 提供工作区索引功能?
不能。工作区索引会通过 Embeddings 提供商生成文件的嵌入,而 Kunavo 不提供嵌入模型——其模型目录中没有任何模型支持该端点,因此请求会被拒绝,而不会得到响应。twinny 自己的文档建议使用 Ollama 上的 nomic-embed-text 执行此任务;它在你的机器上运行,且独立于聊天提供商。如果以后更换嵌入模型,需要重建索引,因为不同模型生成的向量不能混用。
为什么不能在使用 Kunavo 密钥时选择 twinny 的 OpenAI 或 Anthropic 预设?
因为这些预设发送请求的位置与你设想的不同。twinny 的托管 API 页面说明,聊天请求会通过厂商 SDK 发送到厂商的固定端点,因此主机名、端口和路径字段会被隐藏——你粘贴的密钥会发送到厂商自己的端点,而不是你的网关。通用的“OpenAI-compatible server”预设会保留可编辑的端点字段,因此应使用上文所述的预设。模型 ID 会原样传递给你配置的端点,因此在 OpenAI 兼容提供商中使用 Claude ID 是预期的组合,并不存在不匹配。
Kunavo 测试过 twinny 吗?
没有。Kunavo 没有对该客户端进行过运行时测试;上方配置依据 twinny 自己的文档(于 2026 年 9 月 21 日核查)和 Kunavo 的路由表整理而成。发布配置页面不等同于测试。你可以使用 twinny 的 Test provider 按钮进行免费检查;它会连同服务器的响应一起报告所调用的 URL。再对 /v1/models 执行一次 curl,即可确定故障来自端点、密钥还是表单。