文档
mini-SWE-agent
mini 没有 base-URL 环境变量,也没有可供点击的设置项。端点配置只有四行 YAML,由 mini 直接交给 litellm——此外还需要价格注册表,因为 mini 的单次运行预算无法计算没有费率信息的 token 成本。
mini-SWE-agent 没有基础 URL 环境变量 — 端点写在 YAML 配置的 model.model_kwargs.api_base 下,mini 会将其直接传给 litellm.completion。
# 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 解析。openai/ 路径是否会针对 Kunavo 的 /v1/chat/completions 协商原生工具调用(这是 mini v2 的默认设置);以及该接口是否会处理 mini 自动附加到 Claude 命名 ID 上的 cache_control 标记。下方的 curl 可以让你在十秒内确认;其余情况需要你先进行一次简短的试运行。sk-kn- 开头),并充值 $10 起——调用费用从该余额中扣除,失败的调用不会收费。随后,控制台会打开 mini-SWE-agent 设置页面。分步操作
- 在
/app/keys创建密钥并复制——它只会显示一次。 - 先安装并运行一次,以创建所需路径:
pip install mini-swe-agent,然后运行mini。首次运行会显示其.env和 agent 配置文件的位置,并提供mini-extra config setup。 - 将密钥放在 litellm 会读取的位置:
export OPENAI_API_KEY=sk-kn-...,或使用mini-extra config set OPENAI_API_KEY sk-kn-...将其持久保存。mini 指出,“环境变量的优先级高于.env文件中设置的变量”,这通常就是刚更改的密钥看起来没有更新的原因。 - 将上面的 YAML 保存为
kunavo.yaml,放在其他 agent 配置文件旁边,并添加下方章节中的价格注册表——否则运行会因成本计算错误而停止,而不是因为回答质量差而停止。 - 使用
mini -c kunavo.yaml启动,或使用mini -c kunavo.yaml -m openai/claude-haiku-4-5为单次运行指定其他 ID。mini 会以confirm模式启动,每条命令都需要你批准——首次使用新端点时,这通常是稳妥的默认选项。 - 给它一个真正会运行命令的任务,而不是打招呼。mini 的 v2 默认使用原生工具调用,其内置提示词要求“每个回复都必须至少使用一次 ‘bash’ 工具来执行命令”——因此,只有一次真正的工具往返调用才能说明这组配置是否有效。如果工具调用返回空内容或格式错误,mini 仍提供旧版文本解析路径:
mini -c mini_textbased.yaml,或在你自己的文件中设置model_class: litellm_textbased。
已于 2026年9月21日 对照 mini-SWE-agent 的本地模型指南 检查。第三方设置会发生变化;如果这里的字段名称不再与你看到的内容一致,应以该页面为准,而不是本页。
调试客户端前先验证
一个请求即可确定故障来自端点、密钥还是配置文件。如果返回 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 的美元,格式为输入 / 输出。
| 模型 ID | Kunavo 输入 / 输出 | 它在 mini-SWE-agent 中的位置 |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | 适用于日常会话的默认 ID——mini 每一步都会重新发送上下文,因此费用主要来自这里 |
claude-opus-5 | $3.50 / $17.50 | 一次选错计划代价高昂的运行;应搭配较低的 cost_ |
claude-haiku-4-5 | $0.70 / $3.50 | 针对大量任务的批量运行,以及任何以 yolo 模式运行的循环 |
gpt-5-6-sol | $2.00 / $12.00 | 在同一个 api_base 后使用第二个模型系列——更改 model_name 并添加一条注册表条目 |
此处不可或缺的成本跟踪
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 的每令牌格式:
{
"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"
}
}- 模型名称会按大小写敏感的方式进行精确匹配,而 mini 的示例要求条目使用不带服务商前缀的名称作为键——因此这里应为
claude-sonnet-5,尽管配置中写的是openai/claude-sonnet-5。 litellm_provider必须同时与前缀和custom_llm_provider一致。mini 的警告说得很明确:“如果使用custom_llm_provider,或在模型名称前加上服务商前缀(例如openai/…),那么此项也必须与配置中的litellm_provider一致!”- 路径也可以通过
LITELLM_MODEL_REGISTRY_PATH提供,而不是使用配置键——这对批处理运行器很有用,例如LITELLM_MODEL_REGISTRY_PATH=kunavo-registry.json mini-extra swebench … - 这些费率是预算输入值,不是账单。实际扣费以 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 命令可以确认端点和密钥;其余情况可通过在确认模式下进行一次简短的首次运行来验证。