ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

kimi-cli Web Config API 详解:通过 REST 接口读写 config.toml 配置

kimi-cli Web Config API 详解:通过 REST 接口读写 config.toml 配置 kimi-cli Web Config API 详解通过 REST 接口读写 config.toml 配置【免费下载链接】kimi-cliKimi Code CLI is your next CLI agent.项目地址: https://gitcode.com/GitHub_Trending/ki/kimi-clikimi-cli 内置了 Web 服务kimi web其中 Config API 负责把 CLI 的核心配置文件config.toml以 HTTP 接口的形式暴露给前端既可以直接读取/覆盖整份 TOML 原文也可以读取/修改默认模型与 Thinking 模式等全局配置快照。本文以 API 文档中的ConfigToml类型为切入点结合 ConfigApi.md 的端点定义与 config.py 的源码实现讲解这套配置读写接口的数据模型、调用方式、校验逻辑与安全限制读完即可在自己的前端项目中安全地接入 kimi-cli 的配置管理能力。ConfigToml原始 config.toml 内容模型ConfigToml是 Config API 文档中定义的模型它的定位是Raw config.toml content即不经过任何结构化解析、直接透传的 TOML 原文。当 Web 前端需要把配置原样展示给用户编辑例如做一个配置文件编辑器时用的就是这种形态而不是逐字段拆解后的 JSON。文档定义的属性如下属性名类型含义contentstring原始 TOML 文本内容pathstring配置文件在磁盘上的路径对应的 TypeScript 类型示例来自 ConfigToml.mdimport type { ConfigToml } from // TODO: Update the object below with actual values const example { content: null, path: null, } satisfies ConfigToml console.log(example)在实际响应中content是 UTF-8 编码的 TOML 全文path则是get_config_file()解析出的实际路径。从 config.py 可以看到该路径由共享目录与config.toml文件名拼接而成def get_config_file() - Path: Get the configuration file path. return get_share_dir() / config.toml这一模型是GET /api/config/toml的返回类型也是PUT /api/config/toml更新流程所操作的载体。读取配置GET /api/config/tomlConfigApi 中与之对应的端点是getConfigTomlApiConfigTomlGet完整定义见 ConfigApi.md项目内容方法GET /api/config/toml参数无返回ConfigTomlapplication/json成功状态码200服务端实现在 config.pyrouter.get(/toml, summaryGet kimi-cli config.toml) async def get_config_toml(http_request: Request) - ConfigToml: Get kimi-cli config.toml. _ensure_sensitive_apis_allowed(http_request) config_file get_config_file() if not config_file.exists(): return ConfigToml(content, pathstr(config_file)) return ConfigToml(contentconfig_file.read_text(encodingutf-8), pathstr(config_file))值得注意的两个细节文件不存在时返回空字符串而非报错。kimi-cli 采用按需生成默认配置的策略因此前端可以放心地把空content当作尚未初始化配置处理。读取前会先经过_ensure_sensitive_apis_allowed检查见 config.py当应用状态中restrict_sensitive_apis为真时接口直接返回403 Forbidden防止在受限模式下把本机配置暴露出去。更新配置PUT /api/config/toml与读取对称更新接口是updateConfigTomlApiConfigTomlPut项目内容方法PUT /api/config/toml请求体UpdateConfigTomlRequestapplication/json返回UpdateConfigTomlResponseapplication/json状态码200成功、422请求体校验失败请求体模型UpdateConfigTomlRequest只有一个字段content见 UpdateConfigTomlRequest.md即要写入的完整 TOML 文本。响应模型UpdateConfigTomlResponse则包含两个字段见 UpdateConfigTomlResponse.md属性类型含义successboolean更新是否成功errorstring失败时的错误信息成功时为null服务端实现的关键逻辑在 config.pyrouter.put(/toml, summaryUpdate kimi-cli config.toml) async def update_config_toml( request: UpdateConfigTomlRequest, http_request: Request, ) - UpdateConfigTomlResponse: Update kimi-cli config.toml. from kimi_cli.config import load_config_from_string _ensure_sensitive_apis_allowed(http_request) try: # Validate the config first load_config_from_string(request.content) # Write to file config_file get_config_file() config_file.parent.mkdir(parentsTrue, exist_okTrue) config_file.write_text(request.content, encodingutf-8) return UpdateConfigTomlResponse(successTrue) except Exception as e: logger.warning(fFailed to update config.toml: {e}) return UpdateConfigTomlResponse(successFalse, errorstr(e))这段实现揭示了三层设计先校验、后落盘写入前先调用load_config_from_string定义见 config.py做完整校验。该校验函数依次尝试 JSON 与 TOML 两种解析再通过Config.model_validate进行 Pydantic 模型校验——包括providers、models各字段的类型正确性以及Config模型自定义的引用完整性校验例如models中引用的provider必须存在于providers中否则抛出ValueError见 config.py。失败不写盘任何解析或校验异常都会被捕获并返回successfalse与错误信息保证不会把半合法的配置写入磁盘。目录自动创建config_file.parent.mkdir(parentsTrue, exist_okTrue)确保共享目录尚未创建时也能正常写入。因此PUT /api/config/toml实际上等价于原子化的配置替换前端必须提交一份完整且合法的 TOML而不是局部补丁局部修改应走下面介绍的PATCH /api/config/。全局配置快照GET /api/config/ 与 PATCH /api/config/除了原始的 TOML 文本Config API 还提供了一组结构化快照接口用于前端做选择默认模型 / 切换 Thinking 模式这类高频轻量操作。GET /api/config/返回GlobalConfig快照其字段定义见 GlobalConfig.md属性类型含义defaultModelstring当前默认模型 keydefaultThinkingboolean当前默认 Thinking 模式modelsArrayConfigModel所有已配置的模型其中ConfigModel见 ConfigModel.md是面向前端的模型描述比底层LLMModel多出name配置中的模型 key与providerType两个字段并携带maxContextSize、capabilities等前端渲染所需信息。快照由_build_global_config()构建见 config.py它遍历config.models通过derive_model_capabilities(model)推导能力集合并跳过 provider 未注册的模型。PATCH /api/config/则支持增量更新请求体UpdateGlobalConfigRequest见 UpdateGlobalConfigRequest.md包含四个可选字段属性类型含义defaultModelstring新的默认模型 key必须在models中存在defaultThinkingboolean新的默认 Thinking 模式restartRunningSessionsboolean是否重启运行中的会话默认trueforceRestartBusySessionsboolean是否强制重启繁忙会话默认false其服务端逻辑见 config.py在更新后会通过runner.restart_running_workers(reasonconfig_update, force...)重启运行中的工作进程使新配置立即生效并在响应UpdateGlobalConfigResponse中返回restartedSessionIds与skippedBusySessionIds供前端提示用户哪些会话被重启、哪些因繁忙被跳过。这正是文本级整写PUT /toml与语义级增量更新PATCH /两种策略的互补关系。这些字段在 config.toml 中的真实形态要理解ConfigToml.content里到底是什么可以参考 config-files.md 中对config.toml顶层字段的说明字段类型说明default_modelstring默认使用的模型名称必须是models中定义的模型default_thinkingboolean默认是否开启 Thinking 模式默认为falseproviders表各模型提供商配置models表各模型条目引用providers中的提供商一份典型的最小配置片段default_model kimi-for-coding default_thinking false [providers.kimi] api_key ... [models.kimi-for-coding] provider kimi model kimi-for-coding由此可见ConfigToml.content中保存的正是上述结构的完整 TOML 文本而GlobalConfig快照则是这份文本经过load_config()解析、_build_global_config()投影之后的 JSON 视图——两者是同源数据的两种表达。安全边界受限模式下的敏感接口Config API 中的写接口与 TOML 读取接口均被归类为敏感 API。从 app.py 可以看到restrict_sensitive_apis由显式参数与ENV_RESTRICT_SENSITIVE_APIS环境变量共同决定restrict_sensitive_apis ( restrict_sensitive_apis if restrict_sensitive_apis is not None else env_restrict_sensitive ) ... app.state.restrict_sensitive_apis restrict_sensitive_apis当该开关为真时get_config_toml、update_config_toml、update_global_config全部返回403见 config.py。而GET /api/config/只读快照不在受限之列仍可正常访问。这意味着受限模式如公网部署前端可以展示模型列表与默认模型但无法读取或改写配置文件原文本机/局域网模式可以完整使用读写能力实现图形化配置编辑器。前端接入建议综合上述模型与端点在前端接入配置管理功能时推荐按职责分层读取页面加载时调用GET /api/config/获取结构化快照用于渲染需要展示原文时再调用GET /api/config/toml。编辑原文将ConfigToml.content放入编辑器保存时调用PUT /api/config/toml根据响应的success与error提示用户由于服务端先校验后写盘非法 TOML 不会破坏现有配置。快速切换切换默认模型或 Thinking 时调用PATCH /api/config/并展示返回的restartedSessionIds/skippedBusySessionIds告知用户会话重启情况。异常兜底对403响应提示当前模式已禁用敏感配置接口对422提示请求体字段校验失败。整个链路从 API 文档模型ConfigToml/GlobalConfig到服务端实现config.py再到底层配置解析config.py环环相扣文档定义契约FastAPI 路由实现契约load_config_from_string保证契约中的数据永远合法三层共同构成了 kimi-cli Web 配置管理的完整闭环。【免费下载链接】kimi-cliKimi Code CLI is your next CLI agent.项目地址: https://gitcode.com/GitHub_Trending/ki/kimi-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表