文档 · 指南
让 AstrBot 用任意模型
AstrBot(AstrBotDevs/AstrBot)是一个聊天机器人框架,把大模型接到 QQ、Telegram、Discord、飞书等平台。它的所有设置都在一个文件里:data/cmd_config.json。magpie 在这里加一个 OpenAI 兼容的 magpie 模型源,为 magpie 里的每个模型加一项,并把你选的那个设为 AstrBot 的默认对话模型。于是你的机器人能用 magpie 里的任何模型:DeepSeek、GLM、Kimi、Qwen、OpenAI 或 Anthropic Key,或 ChatGPT、Copilot 订阅,不用在 AstrBot 的 WebUI 里一个个填 Key。
接入 AstrBot
- 先启动一次 AstrBotAstrBot 第一次启动时写出
data/cmd_config.json。需要 4.10 或更新的版本(有provider_sources的那种配置)。 - 在 magpie 里添加供应商在 供应商 页添加 API Key,或登录一个订阅。
- 在 AstrBot 那一行选模型在 Agent 页给 AstrBot 选一个 magpie 模型。
- 重启 AstrBotAstrBot 只在启动时读配置,重启后机器人就用上新模型。
magpie astrbot deepseek/deepseek-v4-pro # 然后重启 AstrBot
magpie 按这个顺序找 AstrBot 的根目录:环境变量 ASTRBOT_ROOT;桌面版的 ~/.astrbot;你在主目录、~/astrbot 或 ~/AstrBot 里运行过 astrbot init(README 和源码克隆默认放在那里)。AstrBot 在别的文件夹里运行时,用 ASTRBOT_ROOT 指向它再启动 magpie。
cmd_config.json 里写了什么
从 4.10 起,AstrBot 把一个对话供应商拆成两张表:provider_sources 是端点和 Key,provider 里每一项是某个源的一个模型。magpie 加一个 id 为 magpie 的源(OpenAI Compatible,指向网关的 /v1,带一个标明 AstrBot 的 Key,所以它的请求在 magpie 的用量里算在 AstrBot 名下),再为每个模型加一项 magpie/<供应商>/<模型>,并把 agent_runner.config.model.provider_id 设为你选的那个(更早的配置文件里是 provider_settings.default_provider_id)。
///data/cmd_config.json { "provider_sources": [ …, {"id": "magpie", "provider": "openai", "type": "openai_chat_completion", "provider_type": "chat_completion", "enable": true, "key": ["…"], "api_base": "http://127.0.0.1:3425/v1", …} ], "provider": [ …, {"id": "magpie/deepseek/deepseek-v4-pro", "provider_source_id": "magpie", "model": "deepseek/deepseek-v4-pro", "modalities": ["text", "tool_use"], "max_context_tokens": …} ], "agent_runner": {"runner_type": "local", "config": {"model": {"provider_id": "magpie/deepseek/deepseek-v4-pro"}}} }
每个模型都标了 tool_use:没有它,AstrBot 会把工具调用去掉,而网关不管哪个模型都能转发工具调用。图片按 magpie 知道的这个模型能不能看图来标。magpie 不知道上下文窗口时写 0,AstrBot 会自己去查。
为什么要重启
AstrBot 启动时把整个文件读进内存,之后它的 WebUI 每次保存设置都会把整个文件写回去。所以 magpie 改完要重启 AstrBot;如果在重启之前在 WebUI 里保存了任何设置,就会盖掉 magpie 的改动。magpie 的检查会发现 magpie 的源不见了,提示你重新接入。
agent_runner.runner_type 不是 local 时(交给外部的 Agent 运行器),AstrBot 不问它的对话模型,magpie 的检查也会说出来。
你自己的设置
magpie 第一次写之前,把文件复制为 cmd_config.json.before-magpie。你自己的源和模型逐字节不动;你在 WebUI 里对 magpie 那几项的修改(源的 timeout 或 proxy、关掉某个模型、它的 extra body)也会保留。你用 /provider 给某个会话单独选的模型存在 AstrBot 自己的数据库里,那是你的,不受影响。AstrBot 写文件带 UTF-8 BOM,magpie 也保留它。
Docker 里的 AstrBot
Docker 里的 AstrBot 不是 magpie 能接的:它的 data 目录是一个 magpie 不知道的卷,而且本机回环地址上的网关不是容器里的回环地址。
切回
在 magpie 里把那一行切回默认,magpie 拿掉 magpie 的源和模型,并把默认对话模型还原成接入前的那个;如果你之后在 AstrBot 里自己换过默认模型,就保持你的选择。也可以直接选一个你自己的模型,magpie 的模型先留在列表里,直到断开。改完同样要重启 AstrBot。
magpie astrbot default # 然后重启 AstrBot
常见问题
AstrBot 能用 DeepSeek、GLM、Kimi 或 Qwen 吗?
能。magpie 在 cmd_config.json 里加一个 OpenAI 兼容的 magpie 源,为 magpie 里的每个模型加一项,并把你选的那个设为默认对话模型。重启 AstrBot 后生效。
为什么换了模型机器人还在用旧的?
AstrBot 只在启动时读 cmd_config.json,重启 AstrBot 即可。重启前别在 WebUI 里保存设置,否则会盖掉 magpie 的改动。
magpie 的源不见了怎么办?
多半是 AstrBot 的 WebUI 保存时把整个文件写了回去。在 magpie 里重新接入一次,然后重启 AstrBot。
Docker 部署的 AstrBot 能用吗?
magpie 不会自动接:它不知道容器的数据卷,本机的回环地址也不是容器的。
更多 Agent 用同样的模型:让 nanobot 用任意模型、让 QwenPaw 用任意模型、让 OpenClaw 用任意模型、通过 magpie 在 Cherry Studio 里用所有模型。遇到报错?见 常见错误排查,或到 Discord 提问。