文档

文档

mini-SWE-agent

mini 没有 base-URL 环境变量,也没有可供点击的设置项。端点配置只有四行 YAML,由 mini 直接交给 litellm——此外还需要价格注册表,因为 mini 的单次运行预算无法计算没有费率信息的 token 成本。

mini-SWE-agent 没有基础 URL 环境变量 — 端点写在 YAML 配置的 model.model_kwargs.api_base 下,mini 会将其直接传给 litellm.completion。

kunavo.yaml · mini -c kunavo.yaml
# mini has no base-URL environment variable and no settings UI. The endpoint
# goes in an agent config file, under model.model_kwargs — which mini's docs
# describe as "directly passed to litellm.completion".
model:
  model_name: "openai/claude-sonnet-5"
  model_kwargs:
    custom_llm_provider: "openai"
    api_base: "https://api.kunavo.com/v1"   # keep the /v1
  litellm_model_registry: "kunavo-registry.json"   # see "Cost tracking" below

# The key does not live in this file. With custom_llm_provider: "openai",
# litellm reads OPENAI_API_KEY, and mini documents two ways to set it:
#
#   export OPENAI_API_KEY=sk-kn-...          # environment, wins over .env
#   mini-extra config set OPENAI_API_KEY sk-kn-...   # mini's own .env
#
# Then run it:  mini -c kunavo.yaml
# Or make it the default:  mini-extra config set MSWEA_MINI_CONFIG_PATH kunavo.yaml
请保留 /v1——mini 没有用一句话说明这一点,因此以下是能确定规则的依据。mini 从不读取该值:其文档指出,model_kwargs 会“直接传递给 litellm.completion”,并将调用展示为 litellm.completion(model=model_name, messages=messages, **model_kwargs)。因此,规则由 litellm 决定;mini 唯一给出的具体 api_base 示例带有该后缀——其 vLLM 示例中的 http://localhost:8000/v1;而 litellm 自己的 OpenAI 兼容页面则建议,若请求返回 Not Found,请“确保你的 api_base 具有 /v1 后缀”。Kilo Code 和 Aider 也使用相同格式;Anthropic 风格的客户端和 goose 则使用不带路径的源站地址。
模型名称中的 openai/ 前缀和 custom_llm_provider 作用相同;mini 自己的示例只使用后者——单独用任一个都可以,也可以同时使用,但无论采用哪种方式,都必须与价格注册表中的 litellm_provider 匹配。此前缀表示的是传输协议,而非供应商:在 openai/ 下使用 Claude ID 是预期的组合,因为该 ID 会由端点解析,而不是由 litellm 解析。
此配置依据下方日期查阅的 mini 官方文档整理。Kunavo 尚未使用 mini-SWE-agent 调用其端点——没有会话、流式轮次或工具往返;本系列的其他客户端也都没有经过测试。发布配置页面不等于兼容性测试。以下两点尚未确定:litellm 的 openai/ 路径是否会针对 Kunavo 的 /v1/chat/completions 协商原生工具调用(这是 mini v2 的默认设置);以及该接口是否会处理 mini 自动附加到 Claude 命名 ID 上的 cache_control 标记。下方的 curl 可以让你在十秒内确认;其余情况需要你先进行一次简短的试运行。
Kunavo 不提供嵌入、文本转语音或语音转文本模型,因此此端点只响应聊天补全请求,不处理其他请求。mini 只会请求聊天补全——它只有一个工具 bash——但如果外围脚本会为代码库建立索引或转录内容,这些调用仍会使用它们原有的服务商密钥。
还没有密钥?创建 Kunavo 账户,创建一个密钥(以 sk-kn- 开头),并充值 $10 起——调用费用从该余额中扣除,失败的调用不会收费。随后,控制台会打开 mini-SWE-agent 设置页面。

分步操作

  1. 在 /app/keys 创建密钥并复制——它只会显示一次。
  2. 先安装并运行一次,以创建所需路径:pip install mini-swe-agent,然后运行 mini。首次运行会显示其 .env 和 agent 配置文件的位置,并提供 mini-extra config setup。
  3. 将密钥放在 litellm 会读取的位置:export OPENAI_API_KEY=sk-kn-...,或使用 mini-extra config set OPENAI_API_KEY sk-kn-... 将其持久保存。mini 指出,“环境变量的优先级高于 .env 文件中设置的变量”,这通常就是刚更改的密钥看起来没有更新的原因。
  4. 将上面的 YAML 保存为 kunavo.yaml,放在其他 agent 配置文件旁边,并添加下方章节中的价格注册表——否则运行会因成本计算错误而停止,而不是因为回答质量差而停止。
  5. 使用 mini -c kunavo.yaml 启动,或使用 mini -c kunavo.yaml -m openai/claude-haiku-4-5 为单次运行指定其他 ID。mini 会以 confirm 模式启动,每条命令都需要你批准——首次使用新端点时,这通常是稳妥的默认选项。
  6. 给它一个真正会运行命令的任务,而不是打招呼。mini 的 v2 默认使用原生工具调用,其内置提示词要求“每个回复都必须至少使用一次 ‘bash’ 工具来执行命令”——因此,只有一次真正的工具往返调用才能说明这组配置是否有效。如果工具调用返回空内容或格式错误,mini 仍提供旧版文本解析路径:mini -c mini_textbased.yaml,或在你自己的文件中设置 model_class: litellm_textbased。

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

这是简要版本。完整教程——包括模型选择、真实会话成本和失败模式——见 mini-SWE-agent 与 Claude Code 对比。

调试客户端前先验证

一个请求即可确定故障来自端点、密钥还是配置文件。如果返回 JSON,则相同的基础 URL 和密钥可以在 mini-SWE-agent 中使用。

# 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 的美元,格式为输入 / 输出。

模型 IDKunavo 输入 / 输出它在 mini-SWE-agent 中的位置
claude-sonnet-5$1.40 / $7.00适用于日常会话的默认 ID——mini 每一步都会重新发送上下文,因此费用主要来自这里
claude-opus-5$3.50 / $17.50一次选错计划代价高昂的运行;应搭配较低的 cost_limit,而不是较高的
claude-haiku-4-5$0.70 / $3.50针对大量任务的批量运行,以及任何以 yolo 模式运行的循环
gpt-5-6-sol$2.00 / $12.00在同一个 api_base 后使用第二个模型系列——更改 model_name 并添加一条注册表条目
计费方式是从预付余额中按 token 扣费,无月费——参见 计费。对于重复上下文——这正是编辑器或聊天客户端发送内容的大部分——提示缓存对账单的影响大于模型选择。

此处不可或缺的成本跟踪

mini 随附的 mini.yaml 带有 cost_limit: 3.——以美元计的单次运行上限——此上限由 litellm 的成本计算器强制执行。成本计算器会在其注册表中查找模型 ID 来计算单次运行费用。Kunavo 的 ID 不在该注册表中,因此大多数人首先遇到的不是回答质量差,而是报错:mini 自己的故障排除页面将其显示为 Exception: This model isn't mapped yet. model=…, custom_llm_provider=…。

有两种解决方式,效果并不相同。全局开关 MSWEA_COST_TRACKING="ignore_errors"(或配置文件中的 cost_tracking: "ignore_errors")是移除限制,而非修复问题;mini 将其标为“注意:这可能导致支出失去管理!”另一种方式是告知 litellm 费率,这正是配置块中的 litellm_model_registry 所指向的内容。下列费率为本网站实时目录中的费率,已转换为 litellm 的每令牌格式:

kunavo-registry.json
{
  "claude-sonnet-5": {
    "input_cost_per_token": 0.0000014,
    "output_cost_per_token": 0.000007,
    "litellm_provider": "openai",
    "mode": "chat"
  },
  "claude-opus-5": {
    "input_cost_per_token": 0.0000035,
    "output_cost_per_token": 0.0000175,
    "litellm_provider": "openai",
    "mode": "chat"
  },
  "claude-haiku-4-5": {
    "input_cost_per_token": 0.0000007,
    "output_cost_per_token": 0.0000035,
    "litellm_provider": "openai",
    "mode": "chat"
  }
}
  1. 模型名称会按大小写敏感的方式进行精确匹配,而 mini 的示例要求条目使用不带服务商前缀的名称作为键——因此这里应为 claude-sonnet-5,尽管配置中写的是 openai/claude-sonnet-5。
  2. litellm_provider 必须同时与前缀和 custom_llm_provider 一致。mini 的警告说得很明确:“如果使用 custom_llm_provider,或在模型名称前加上服务商前缀(例如 openai/…),那么此项也必须与配置中的 litellm_provider 一致!”
  3. 路径也可以通过 LITELLM_MODEL_REGISTRY_PATH 提供,而不是使用配置键——这对批处理运行器很有用,例如 LITELLM_MODEL_REGISTRY_PATH=kunavo-registry.json mini-extra swebench …
  4. 这些费率是预算输入值,不是账单。实际扣费以 Kunavo 余额中的记录为准;如果目录费率有变,请重新复制,或直接查看 GET /v1/models。

常见问题

如何将 mini-SWE-agent 指向自定义 API 端点?

通过配置文件,而不是环境变量——mini 根本没有 base-URL 变量。在 agent 配置文件中,将 model.model_name 设为你的 ID(可选择加上 openai/ 前缀),然后在 model.model_kwargs 下设置 custom_llm_provider: "openai",并将 api_base 设为端点的基础 URL。mini 的文档解释了这样做为何有效:model_kwargs“会直接传递给 litellm.completion”。使用 `mini -c kunavo.yaml` 选择该文件,或通过 MSWEA_MINI_CONFIG_PATH 将它设为默认配置。对于 Kunavo,基础 URL 为 https://api.kunavo.com/v1。

mini-SWE-agent 从哪里读取 API 密钥?

它会读取与你所选服务商对应的 litellm 密钥变量。设置 custom_llm_provider: "openai" 时,该变量为 OPENAI_API_KEY;你可以在 shell 中导出它,或通过 `mini-extra config set OPENAI_API_KEY <key>` 将其持久保存——此命令会写入 mini 的 .env 文件;mini 指出,环境变量优先于文件中的内容。密钥不是 agent 配置中的字段。如果你参考的是较旧教程,请注意,v2 迁移指南将 MSWEA_MODEL_API_KEY 标为“不再用于覆盖 API 密钥”。

mini-SWE-agent 的 api_base 末尾需要加 /v1 吗?

对于 OpenAI 兼容端点,是的——例如 https://api.kunavo.com/v1,不过 mini 通过示例而非规则来说明这一点。mini 会将 model_kwargs 原样传递给 litellm.completion,因此这一约定来自 litellm;mini 文档中唯一给出的具体 api_base 是其 vLLM 示例中的 http://localhost:8000/v1。litellm 自己的 OpenAI 兼容页面对此有明确说明:如果请求返回 Not Found,请确保 api_base 带有 /v1 后缀。因此,缺少 /v1 会导致 404,而不是身份验证错误。

为什么 mini-SWE-agent 报错“This model isn't mapped yet”?

因为 litellm 无法为该模型 ID 定价,而 mini 的单次运行 cost_limit——随附的 mini.yaml 中为 3. 美元——通过 litellm 的成本计算器强制执行。mini 建议的修复方法是配置模型注册表:使用 litellm 模型价格格式的 JSON 文件,以不带服务商前缀的模型名称作为键,并将 litellm_provider 设为与你配置的 custom_llm_provider 或名称前缀一致的值。在配置中将 litellm_model_registry 指向该文件,或通过环境变量 LITELLM_MODEL_REGISTRY_PATH 指向该文件。设置 MSWEA_COST_TRACKING="ignore_errors" 也可以忽略该错误,但这会移除支出保护措施,而非修复问题。

mini-SWE-agent 可以通过 OpenAI 兼容端点使用 Claude 模型吗?

可以。openai/ 前缀和 custom_llm_provider 指定的是传输协议,而不是供应商:litellm 会将 OpenAI 格式的聊天补全请求发送到你配置的 api_base,并传递模型 ID,因此 Claude ID 会由该端点解析,而不是由 litellm 的服务商列表解析。还有一点 mini 特有的行为值得了解:解析后的模型名称中含有 "anthropic"、"claude"、"sonnet" 或 "opus" 时,mini 会自动添加缓存控制设置,带有 openai/claude-… 前缀的 ID 也符合此条件。

Kunavo 是否已使用 mini-SWE-agent 测试其端点?

没有。2026 年 9 月 21 日核查的是 mini 自己的文档——本文引用的键、它们的顺序以及 api_base 格式均取自该文档。Kunavo 尚未使用 mini 会话调用其端点,也未对此客户端的流式传输、工具往返或成本报告做出任何声明。目前明确有两点尚未确定:litellm 的 openai/ 路径是否会针对聊天补全端点协商原生工具调用(这是 mini 从 v2.0 起的默认设置);以及该端点是否会处理 mini 附加到 Claude 命名 ID 上的 cache_control 标记。本页中的 curl 命令可以确认端点和密钥;其余情况可通过在确认模式下进行一次简短的首次运行来验证。