Hoshimi

匿名入口

OpenCode Zen 和 Kilo 两个默认开启、无需账号的免费入口:它们提供什么、怎样关闭、怎样加密钥扩大目录,以及协议上的处理和注意事项。

Hoshimi 第一次启动、还没有任何配置时,opencode(OpenCode Zen)和 kilo(Kilo AI)两个渠道就已经可用:它们带一个不含凭据的占位账号,直接向上游的免费模型发请求。在 渠道 页面上,这两个渠道显示 无需账户。

模型能否调用取决于上游当前的模型、额度和服务状态,也可能因网络出口所在地区而不同。本页描述的是适配器的实现方式,不是对上游可用性的承诺。

概览

渠道上游匿名目录加账号后
opencodehttps://opencode.ai/inference实时目录中的免费切片(ID 含 free,以及 big-pickle、space-bunny-free、union-alpha)API 密钥账号使用其鉴权目录
kilohttps://api.kilo.ai/api/gateway实时目录中标记 isFree: true 的聊天模型API 密钥或设备码登录,目录扩大到该账号可见的全部聊天模型

查看当前可用的 ID:

hoshimi models --provider opencode
hoshimi models --provider kilo
curl http://127.0.0.1:10600/v1/models

调用时可以加渠道前缀,例如 opencode/big-pickle、kilo/kilo-auto/free。

关闭匿名入口

匿名入口只能通过 enabled: false 关闭(没有账号也会自动启用):

hoshimi config set providers.kilo.enabled false
hoshimi config set providers.opencode.enabled false

或在 config.json 中写入:

{
  "providers": {
    "opencode": {"enabled": false},
    "kilo": {"enabled": false}
  }
}

在 渠道 页面中关闭渠道开关也是同样的效果。重新开启时把 enabled 改回 true 或删除这一项。

OpenCode Zen(opencode)

匿名使用

未关闭时,opencode 使用一个占位账号(opencode-public)。网关读取上游 /v1/models,只保留免费切片:ID 中以 free 作为独立片段的模型(如 mimo-v2.6-flash-free),以及固定视为免费的 big-pickle、space-bunny-free、union-alpha。新出现的免费 ID 保留上游原样拼写。

实时目录优先。刷新失败时保留上一次成功的目录;只有冷启动且目录不可达时,才使用内置的历史回退列表。

用 API 密钥扩大目录

在 渠道 › OpenCode Zen 中点 添加账号,鉴权方式选 API 密钥;或写入 config.json:

{
  "providers": {
    "opencode": {
      "accounts": [
        {"id": "opencode-key", "api_key": "<OpenCode API key>", "project_id": "<optional project id>"}
      ]
    }
  }
}
  • 有账号后,渠道只使用你配置的账号,匿名占位账号不再加入。账号中没有 api_key 时,该账号按匿名方式发送请求。
  • 第一个账号带密钥时,目录不再只保留免费切片,可用范围仍受密钥权限限制。
  • project_id 作为 x-opencode-project 头发送,默认 global。
  • OpenCode Go 套餐是另一个渠道 opencode-go,见本地与兼容端点。

协议处理

匿名通道参考外部项目 dsh-our-free-model 的 src/upstream.js(快照 f0b979f)实现 v2 协议。这个快照标明移植基线,不表示刚刚对上游做过实测。

  • 请求发往 /inference/v1 下的端点,携带 User-Agent: opencode/latest/2.0.26/cli 和 x-opencode-client: cli,不发送旧的 x-opencode-request。
  • x-opencode-session、x-opencode-session-id、x-session-affinity、x-session-id 四个头取同一个会话 ID。会话 ID 按账号和对话稳定生成(降序编码),来源依次是请求体中的 session_id、conversation_id、user,没有时取第一条用户消息。两个开场白相同的独立对话,请各自发送不同的 session_id。
  • 端点按模型选择:muse-spark-* 走 /v1/responses,union-alpha 走 /v1/messages,其余走 /v1/chat/completions。
  • 匿名请求会声明参考实现中的 read 和 shell 两个工具定义(上游会比对工具描述)。调用方自己的同名但定义不同的工具会改名(如 read_client)后发送,历史记录和强制选择中一致改名,响应中再还原。
  • 这两个注入的工具调用方并不能执行。模型只调用了调用方没有提供的工具时,网关回答它 unsupported call: <name> 并在同一会话中再问一次,最多两轮;模型仍坚持调用时返回 502 错误。调用方看到的只有文本和自己工具的调用。
  • 调用方设置 tool_choice: "none" 时,上游请求中省略该字段,由网关保证不把任何工具调用交给调用方。
  • 带 API 密钥的账号不做以上工具处理,调用方的工具按原样发送。

思考级别

以下 ID 使用参考实现中声明的思考菜单;其余 ID 按共享的能力表处理(见模型行为)。

模型级别默认可关闭思考
deepseek-v4.1-flash-freedisabled、low、high、maxhigh是
glm-5.3-flash-freelow、high、maxhigh否
nemotron-3.5-super-vl-freedisabled、minimal、low、medium、high、xhighhigh是
space-bunny-freelow、medium、high、xhigh、maxhigh否

级别通过 reasoning_effort 字段发送。

地区与探测

目录只列出 ID,无法说明当前网络出口能否使用某个模型;muse-spark 系列被标记为与地区相关。opencode 参与默认的可用性探测,可以在 模型 页面或通过 POST /api/v1/probe 实际请求一次来确认,见模型行为。

Kilo(kilo)

匿名使用

未关闭时,kilo 使用占位账号(kilo-public),不带任何凭据请求 Kilo 网关。目录只保留上游标记 isFree: true 的聊天模型(排除嵌入、图像、音频等),付费 ID 不带密钥只会返回 401。冷启动且目录不可达时使用内置的历史回退列表(如 kilo-auto/free、openrouter/free)。

免费池的提示词可能被记录

匿名免费池没有任何凭据保护,免费模型背后的上游可能记录提示词。不要通过它发送敏感内容。

用密钥或设备码登录

有两种方式添加 Kilo 账号:

hoshimi login kilo

终端打印验证链接和验证码(网页界面中点 登录,对话框显示 验证码),在浏览器中确认后账号写入 config.json。Kilo 返回的是长期有效的密钥,不是可续期的 OAuth 令牌,因此不会定时续期。

也可以在 添加账号 中直接填 API 密钥,或写入 config.json:

{
  "providers": {
    "kilo": {
      "accounts": [{"id": "kilo-key", "api_key": "<Kilo API key>"}],
      "options": {"free_only": true}
    }
  }
}
  • 账号接受 api_key、access_token 或 token 中的任一个。
  • 有带凭据的账号时,目录包含该账号可见的全部聊天模型;设置 options.free_only: true 仍只保留免费模型。
  • 和 opencode 一样,有账号后匿名占位账号不再加入;没有凭据的账号按匿名方式请求。

请求处理与思考级别

  • 请求使用 OpenAI Chat Completions;max_completion_tokens 改写为 max_tokens,developer 消息改为 system,工具定义去掉 strict,并移除 store 和 reasoning_effort。
  • 思考级别来自目录行中声明的能力,通过 reasoning: {"effort": ...} 发送,关闭思考时发送 reasoning: {"enabled": false}。
  • stepfun/、liquid/、thinkingmachines/ 前缀的模型要求必须思考,kilo-auto/free 和 openrouter/free 接受参数但仍会思考,它们的菜单中没有关闭选项。

Kilo 不参与默认的可用性探测:匿名目录本身就是免费池的结论。

验证范围

tests/core/test_opencode_lane.py、tests/core/test_pi_free_parity.py 和协议测试覆盖的是本地回归,不能替代从某个网络出口实际请求成功。模型是否可用、地区限制和额度,以上游当前的响应或一次显式探测为准。

本页目录