Hoshimi

配置文件

config.json 的位置、修改方式和每一个键:类型、默认值、含义、校验规则,以及每项修改何时生效。

Hoshimi 的全部设置和渠道账号都保存在数据目录中的一个 JSON 文件 config.json 里。网页界面的 设置 和 渠道 页、hoshimi config 命令和管理 API 改的都是这同一个文件。大多数情况下不需要手动编辑它;本页是给需要直接查看或修改它的人准备的完整参考。

文件在哪里

hoshimi config path

即使文件还不存在,这条命令也会打印它将要写入的绝对路径。所有命令和网页界面都使用这个文件,与当前工作目录无关。

系统默认位置
Linux~/.local/share/hoshimi/config.json,设置了 XDG_DATA_HOME 时为 $XDG_DATA_HOME/hoshimi/config.json
macOS~/Library/Application Support/hoshimi/config.json
Windows%APPDATA%\hoshimi\config.json

设置环境变量 HOSHIMI_DATA_DIR 可以把整个数据目录搬到别处,配置文件始终是 <数据目录>/config.json。文件不存在时全部使用默认值。数据目录里的其他文件见数据目录与迁移。

三种修改方式

方式何时生效适合
网页界面 设置、渠道 页,或 PATCH /api/v1/settings保存后立即作用于正在运行的网关(监听地址和端口除外)日常使用
hoshimi config set下次启动服务器时脚本、无界面的服务器
直接编辑 config.json下次启动服务器时批量修改、粘贴账号

编辑文件前先停止服务器

运行中的服务器不会重新读取 config.json,而是在每次保存设置、登录或续期凭据时,把内存中的配置整体写回文件。服务器运行期间用编辑器或 hoshimi config set 做的修改,会在下一次这类写入时被覆盖。手动修改前先停止 hoshimi serve,改完再启动。

最小示例

{
  "server": {
    "access_token": "your-tool-access-key",
    "model_api_key": "your-model-api-key"
  },
  "providers": {
    "nvidia": {"accounts": [{"id": "nvidia-1", "api_key": "your-provider-api-key"}]}
  }
}

只需要写和默认值不同的键。上面的密钥都是占位符。仓库里的 config.example.json 列出了各渠道账号的字段形状,其中的凭据是演示值,不能直接使用。

结构

顶层键内容
server监听地址、密钥、限制、定时任务
security允许的网段、主机名、来源
network全局上游网络策略
playgroundPlayground 与内置工具
providers每个渠道的开关、账号和选项

Hoshimi 不认识的顶层键和字段在读取时被忽略,并且在下一次保存时被丢弃,不要在文件里存放自己的备注字段。

server

键类型默认值含义
server.host字符串"127.0.0.1"监听地址。绑定非回环地址(如 0.0.0.0)时必须同时设置 server.access_token 和 security.allow_cidrs,见访问控制
server.port整数 0–6553510600第一个尝试的端口。被占用时依次尝试后面的端口(见 strict_port);0 让系统任选一个空闲端口
server.strict_port布尔falsetrue 时端口被占用就启动失败,而不是换端口。hoshimi serve --strict-port/--no-strict-port 可临时覆盖
server.access_token字符串或 null未设置工具访问密钥:保护管理接口 /api/*、/docs 和 /openapi.json,也是网页界面的登录密钥。空字符串等同未设置
server.model_api_key字符串或 null未设置模型 API 密钥:独立保护外部模型接口 /v1/*。空字符串等同未设置
server.default_model字符串或 null未设置请求没有带 model 时使用的模型(provider/model 或模型 id)
server.max_body_bytes正整数16777216(16 MiB)请求体大小上限。会被校验并显示在设置中,但当前版本的请求处理并不读取它
server.max_account_retries整数 ≥ 13一次请求最多尝试同一渠道中的几个账号,见模型与账号行为。小于 1 的值按 1 处理
server.auto_refresh布尔true定时续期即将过期的凭据(每 30 分钟一轮)。false 时只能手动续期
server.auto_checkin布尔true每天定时为各站点签到领取免费额度。false 时只能手动签到
server.check_updates布尔true启动时和之后每天向 PyPI 查询是否有新版本,结果显示在 概览 页。false 时不发出这个请求
server.stats_keep_days整数 ≥ 190每一条调用记录在 hoshimi.db 中保留的天数。每小时和每日汇总不受影响,见用量统计

定时任务与 hoshimi serve 的参数

续期和签到的定时器只在服务器启动时开启,运行中关掉开关不会停止已经在运行的定时器。另外,hoshimi serve 启动时会用 --refresh/--no-refresh 和 --checkin/--no-checkin 的值(默认都是开启)覆盖 server.auto_refresh 和 server.auto_checkin。要关闭它们,启动时加上 --no-refresh 或 --no-checkin。

security

键类型默认值含义
security.allow_cidrs字符串列表[]允许连接的客户端网段或 IP(如 192.168.1.0/24、10.0.0.5)。本机回环地址始终允许;列表为空时只允许本机
security.allow_hosts字符串列表[]允许的 Host 名称。会保存并显示在设置中,但当前版本的请求检查不读取它
security.allow_origins字符串列表[]允许发起写操作和跨域请求的浏览器来源,如 https://app.example.com;* 表示任意来源。需要先设置 server.access_token

这三个键也接受单数写法 allow_cidr、allow_host、allow_origin,值也可以是一个用逗号分隔的字符串。保存时统一写成复数形式的列表。各项检查的细节见访问控制。

network

键类型默认值含义
network.mode"auto"、"direct" 或 "proxy""auto"auto 读取 HTTP_PROXY 等环境变量;direct 不走代理;proxy 使用 network.proxy
network.proxy字符串或 nullnullHTTP(S) 或 SOCKS5 代理地址,proxy 模式下必填
network.system_proxy布尔false仅 Windows:auto 模式下没有环境变量代理时使用系统代理

network 里不能出现其他键。每个渠道可以在 providers.<id>.options.network 中单独覆盖这条策略,见网络与代理。

playground

键类型默认值含义
playground.system_prompt字符串""作为 Playground 每个对话的第一条消息发送;空则不发送
playground.title_model字符串""新对话收到第一条回复后,用来为它命名的模型;空则使用对话自己的模型
playground.vision_model字符串"auto"为不能读图的模型描述图片:auto 选第一个可用且能读图的模型,off 直接略去图片,其他值是一个模型 id。空字符串按 auto 处理
playground.tools字符串列表[]新对话默认开启的内置工具:read、apply_patch、shell、terminal、web_search、web_fetch。每个对话可以在输入框中单独开关
playground.workspace字符串""工具的工作目录,支持 ~;空则为 <数据目录>/workspace
playground.approval"ask"、"auto" 或 "full""ask"工具何时先询问:ask 在运行命令、修改文件和访问工作区外的内容前询问;auto 只在读写工作区外的文件时询问;full 从不询问。空字符串按 ask 处理
playground.max_steps整数 1–50050一条回复最多进行几轮工具调用,最后一轮必须作答
playground.search_url字符串""web_search 使用的 SearXNG 地址(需开启其 JSON 格式),必须以 http:// 或 https:// 开头;空则使用 DuckDuckGo
playground.auto_compact布尔值true对话接近模型上下文窗口时自动压缩;被拒绝为过长的请求无论如何都会压缩
playground.compact_threshold数字 0.5–0.950.85对话达到窗口的多大比例时压缩;剩余空间不足以容纳回复时会更早压缩
playground.compact_model字符串""撰写压缩总结的模型;空则使用对话自身的模型

工具在本机运行

shell、terminal 和 apply_patch 以运行 Hoshimi 的用户身份在本机执行命令、修改文件,没有沙箱。只开启需要的工具,并保持询问。详见 Playground 工具。

providers

providers 以渠道 id 为键,每个渠道有三个字段:

键类型默认值含义
providers.<id>.enabled布尔truefalse 完全关闭这个渠道。免账号渠道(opencode、kilo)不需要任何配置就会启用,要关掉它们就写 "enabled": false
providers.<id>.accounts对象列表[]这个渠道的账号,字段因渠道而异,见渠道
providers.<id>.options对象{}渠道级选项,因渠道而异

规则:

  • 不认识的渠道 id 被忽略。
  • 一个启用但没有账号的渠道不会运行,免账号渠道除外。
  • 网页上的 登录、添加账号 和 hoshimi login 会把账号写进这里,并自动把渠道设为启用;对同一身份重新登录会替换原账号而不是再加一个。

账号中 Hoshimi 通用读取的字段:

字段含义
id账号 id,显示在界面、用量统计和日志中。缺省时为 <渠道>-<序号>
refresh_token有它的账号才会被定时续期
expires_at过期时间(毫秒或秒级 Unix 时间戳,数字或字符串均可)。也接受 expire_time,或 ISO 时间格式的 expiry。没有记录过期时间的可续期账号每轮都会续期
models部分渠道(如 agg)用它声明这个账号提供哪些模型

渠道选项中通用的:

选项含义
options.network这个渠道自己的网络策略,缺省为 {"mode": "inherit"}(继承全局),见网络与代理
options.client_profile(仅 cline)Cline 的登录方式:sdk(默认,设备码授权)或 extension(浏览器授权,本地回调端口 48801–48811)。新登录的账号会记下当时使用的方式,修改只影响之后的登录

各渠道专有的账号字段和选项(如 agg 的 base_url、preset、model_specs)见渠道下的各页。

校验

保存(网页、API、hoshimi config set)和启动(hoshimi serve、hoshimi check)前都会整体校验,不通过时文件保持原样。可能的错误:

错误信息原因
server.port must be between 0 and 65535端口超出范围
server.max_body_bytes must be positive.请求体上限不是正数
server.stats_keep_days must be at least 1. / must be a whole number of days保留天数小于 1 或不是整数
server.access_token must be a string or null密钥不是字符串
server.strict_port must be true or false、server.check_updates must be true or false不是布尔值
network.mode must be auto, direct or proxy (inherit for providers)模式拼错;inherit 只能用于渠道
network.proxy is required in proxy modeproxy 模式没有代理地址
network.proxy must be a valid HTTP(S) or SOCKS5 proxy URL代理地址格式不对
unknown network optionnetwork 里有多余的键
cline client_profile must be sdk or extensionCline 登录方式拼错
playground.tools: unknown tool '…'工具名拼错
playground.approval must be ask, auto or full.询问模式拼错
playground.max_steps must be between 1 and 500.轮数超出范围
playground.search_url must be an http(s) address.SearXNG 地址不是 http(s)
playground.compact_threshold must be between 0.5 and 0.95.压缩阈值超出范围
security.allow_origins requires server.access_token …设置了允许的来源却没有工具访问密钥
Refusing to bind a non-loopback host without both security.allow_cidrs and server.access_token. …监听非回环地址却缺少网段白名单或工具访问密钥

config.json 本身不是合法的 JSON(或不是一个 JSON 对象)时,服务器拒绝启动,并先把原文件复制为 config.json.corrupt-<UTC 时间>,错误信息中会给出副本的路径。修好或删除 config.json 后再启动。

何时生效

通过网页或管理 API 保存时:

设置生效时间
server.host、server.port、server.strict_port重启服务器后。设置 页顶部会提示需要重启
server.access_token、server.model_api_key、security.allow_cidrs、server.default_model立即
security.allow_origins来源检查立即生效;浏览器跨域所需的 CORS 响应头使用启动时的列表,修改后需重启
network、providers.*立即作用于新请求;只有输入发生变化的渠道会被重建,正在进行的流式回复在原连接上完成
server.max_account_retries下一次重建账号池时(任一渠道的账号或选项变化),或重启后
server.stats_keep_days下一次清理时(随新记录触发,最多每分钟一次)
server.check_updates立即
server.auto_refresh、server.auto_checkin见上文的说明
playground.*下一条消息起

通过 hoshimi config set 或编辑文件修改的,都要重启服务器才生效。

用命令行查看和修改

hoshimi config path                                   # 配置文件路径
hoshimi config show                                   # 完整配置,凭据显示为 ***
hoshimi config show --json
hoshimi config get server.port
hoshimi config set server.port 10601
hoshimi config set server.default_model "<provider>/<model>"
hoshimi config set security.allow_cidrs '["192.168.1.0/24"]'
hoshimi config set network '{"mode": "proxy", "proxy": "http://127.0.0.1:7890"}'
hoshimi config set providers.kilo.enabled false
hoshimi config set server.access_token null           # 清除
hoshimi check                                         # 校验配置并列出将要启用的渠道
  • 键用点分隔,值能按 JSON 解析的就按 JSON 解析(数字、true/false、列表、对象),否则作为字符串。null(或 none)清除一个值。
  • 写入前整体校验,所以互相依赖的键要一次写完。例如切换到代理模式时,把整个 network 对象一起设置,单独设置 network.mode proxy 会因缺少代理地址而被拒绝。
  • show 和 get 把访问密钥、账号凭据和代理地址显示为 ***。get 读的是文件中实际写着的值,文件里没有的键会报 Unknown setting。
  • 改完要重启服务器。完整的命令参考见命令一览。

文件的写入方式

每次保存都先写入同目录下的临时文件再原子替换,避免写到一半的文件。文件中有明文刷新令牌,保存后会尽量把权限设为仅所有者可读写(0600),在不支持权限位的文件系统(Windows、部分网络挂载)上跳过。把它当作凭据文件对待,不要分享填好的配置。

本页目录