Moltbot(Clawdbot)对接本地大模型完整配置指南
近期,开源AI智能体Moltbot(原名Clawdbot)凭借“可执行、可扩展、本地化”的特性爆火开源圈,GitHub星标快速飙升至95k+,被不少开发者称为“个人开源贾维斯”。不同于传统只能聊天的AI助手,Moltbot具备完整的“手、脚、脑”能力,既能对接云端API,更能适配本地大模型部署,完美解决数据隐私保护与离线使用需求。本文将从Moltbot核心能力、演示效果入手,一步步带你完成从环境搭建到本地大模型对接的全流程配置,新手也能轻松上手。
一、Moltbot(Clawdbot)核心能力与演示效果
1.1 核心能力解析
Moltbot(原Clawdbot)是一款开源个人AI助手框架,核心定位是“连接AI大模型与本地系统的桥梁”,通过Gateway网关架构,实现从自然语言指令到实际任务执行的完整闭环。其核心能力可概括为“手、脚、脑”三大模块,兼顾实用性与扩展性:
“手”——本地执行能力:可直接读写电脑本地文件、执行终端代码、操控命令行,支持批量处理文件、自动化脚本运行等场景,无需手动操作即可完成复杂本地任务。
“脚”——联网交互能力:可自主联网搜索、访问网页并分析内容,支持提取网页关键信息、同步网络数据,打破本地资源限制,实现“在线获取+本地执行”的联动。
“脑”——灵活适配能力:支持对接OpenAI、Qwen、MiniMax、GLM等主流云端API,更能适配本地大模型(如Llama 3、Qwen本地版、GLM4.7等),数据全程在本地流转,兼顾隐私安全与离线使用需求。
除此之外,Moltbot还具备可扩展的技能系统、多渠道交互(Telegram、Slack等)、本地记忆存储等特性,支持自定义Agent和插件开发,面向技术极客、隐私敏感用户和开发者群体,可根据需求灵活定制。
1.2 演示效果展示
本文作为Molbot的入门教程,重点在基于“Moltbot + 本地qwen3-30b-a3b大模型”部署完整运行程序。以下是简单的让Molbot写一篇日记。
二、前置说明与环境准备
2.1 前置说明
-
系统兼容:本文以ubuntu系统为例(macOS、windows流程类似参考官方文档);
-
硬件要求:对接本地大模型需满足基础硬件条件——CPU≥8核、内存≥16GB(推荐32GB),大模型是Nvidia 4090 8卡机器单独部署的;
-
核心依赖:Moltbot运行依赖Node.js环境(版本≥v22.0.0,推荐v22.x或v24.x稳定版),本地大模型需提前部署完成(本文以qwen3-30b-a3b本地版为例);
2.2 环境准备(必做)
2.2.1 部署本地大模型(以qwen3-30b-a3b为例)
-
下载模型:从阿里云ModelScope、Hugging Face等平台下载qwen3-30b-a3b本地模型;
-
部署模型:本文使用gpustack完成本地大模型部署,确保模型可正常运行,并记录模型部署后的本地接口地址(如http://127.0.0.1:8080/v1,后续对接需用到)和apikey(gpustack__xxxxx);
-
测试模型:打开浏览器或终端,访问本地模型接口,发送简单对话指令(如“你好”),若能正常接收响应,说明本地大模型部署成功。
2.2.2 安装Moltbot
从github下载最新源码github.com/moltbot/mol…。下载到ubuntu服务器后解压缩。然后执行下面的安装命令。
执行安装命令时候会弹出下面截图:
按n或其他键则安装结束,按y表示同意继续安装;选择安装模式,
第一个是快速开始,第二个是手动配置,选择第一个回车;然后让你配置一个模型。
列的国内外模型都需要收费的key和认证,本文对接本地大模型,选择最后一个Skip for now。接下来选择channel,
都是国外的app用不了,选择Skip for now;
然后选择技能安装配置都是yes,最后选择安装技能用npm。
然后让你安装 skill,这些技能也可以选择先不安装,后面用到的时候,会自行安装,所以也可以选择 Skip for now 跳过。空格选中复选框,回车下一步。
google和sag的配置都需要外网,选择no,不设置。
然后会看到是否启动 hooks,这里可以把这 3 个都选上,启动下。 至此,初步安装就完成了,会看到屏幕出现访问地址。
在本机curl命令curl http://127.0.0.1:18789/chat
可以看到有结果返回。表示启动正常。但是通过外网ip端口发下无法访问。经过查询官方文档需要打开配置gateway.bind为lan局域网。配置文件的默认位置在~/.clawdbot/clawdbot.json。在配置文件中添加配置。
再次通过服务器ip和端口发下可以访问页面。
接下来在chat页面对话时候发现连接失败报错。
打开Overview测试连接发现右侧提示连接失败,Gateway Token需要填写和配置文件中的gateway.auth.token保持一致,并且设置gateway.controlUi.allowInsecureAuth设置为ture允许http连接。注意此处只是测试环境,生产环境建议开启https安全认证。
到这一步发现能够连接成功,但是对话无返回结果。
2.2.3 修改源码和配置支持本地大模型
找到安装路径下的model.js文件,我服务器的路径为/xxx/moltbot-2026.1.24/dist/agents/pi-embedded-runner。 注释掉原有的if判断添加改造后的代码。
export function resolveModel(provider, modelId, agentDir, cfg) {
const resolvedAgentDir = agentDir ?? resolveClawdbotAgentDir();
const authStorage = discoverAuthStorage(resolvedAgentDir);
const modelRegistry = discoverModels(authStorage, resolvedAgentDir);
const model = modelRegistry.find(provider, modelId);
// if (!model) {
// const providers = cfg?.models?.providers ?? {};
// const inlineModels = buildInlineProviderModels(providers);
// const normalizedProvider = normalizeProviderId(provider);
// const inlineMatch = inlineModels.find((entry) => normalizeProviderId(entry.provider) === normalizedProvider && entry.id === modelId);
// if (inlineMatch) {
// const normalized = normalizeModelCompat(inlineMatch);
// return {
// model: normalized,
// authStorage,
// modelRegistry,
// };
// }
// const providerCfg = providers[provider];
// if (providerCfg || modelId.startsWith("mock-")) {
// const fallbackModel = normalizeModelCompat({
// id: modelId,
// name: modelId,
// api: providerCfg?.api ?? "openai-responses",
// provider,
// reasoning: false,
// input: ["text"],
// cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
// contextWindow: providerCfg?.models?.[0]?.contextWindow ?? DEFAULT_CONTEXT_TOKENS,
// maxTokens: providerCfg?.models?.[0]?.maxTokens ?? DEFAULT_CONTEXT_TOKENS,
// });
// return { model: fallbackModel, authStorage, modelRegistry };
// }
// return {
// error: `Unknown model: ${provider}/${modelId}`,
// authStorage,
// modelRegistry,
// };
// }
// --- Custom Model Fallback Patch Start ---
if (!model) {
const providerCfg = cfg?.models?.providers?.[provider];
if (providerCfg && providerCfg.baseUrl && Array.isArray(providerCfg.models) && providerCfg.models.length > 0) {
// 尝试匹配 modelId,或 fallback 到第一个模型
let matchedModelCfg = providerCfg.models.find(m => m.id === modelId);
if (!matchedModelCfg) {
matchedModelCfg = providerCfg.models[0]; // 默认用第一个
}
const customModel = normalizeModelCompat({
id: matchedModelCfg.id,
name: matchedModelCfg.name || ` $ {provider}/ $ {matchedModelCfg.id}`,
api: providerCfg.api || "openai-completions",
provider: provider,
baseUrl: providerCfg.baseUrl,
reasoning: matchedModelCfg.reasoning ?? false,
input: matchedModelCfg.input || ["text"],
cost: matchedModelCfg.cost || { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
contextWindow: matchedModelCfg.contextWindow || 32768,
maxTokens: matchedModelCfg.maxTokens || 8192,
});
return { model: customModel, authStorage, modelRegistry };
}
}
// --- Custom Model Fallback Patch End ---
return { model: normalizeModelCompat(model), authStorage, modelRegistry };
}
修改~/.clawdbot/clawdbot.json,指定本地大模型。
"agents": {
"defaults": {
"workspace": "/root/clawd",
"maxConcurrent": 4,
"subagents": {
"maxConcurrent": 8
},
"models": {
"myllm/my-custom-model": {}
},
"model": {
"primary": "myllm/qwen3-30b-a3b-instruct-2507"
}
}
},
"models": {
"providers": {
"myllm": {
"api": "openai-completions",
"apiKey": "gpustack_xxxx",
"baseUrl": "http://127.0.0.1:8080/v1",
"models": [
{
"id": "qwen3-30b-a3b-instruct-2507",
"name": "qwen3-30b-a3b-instruct-2507",
"contextWindow": 128000,
"maxTokens": 16384,
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"reasoning": false,
"input": ["text"]
}
]
}
}
到此,在对话页面可以进行正常问答。
附属参考的帖子
- 官网(clawd.bot/)
- github(github.com/moltbot/mol…)
- 官方文档(docs.molt.bot/)
- 对接deepseek(www.nodeseek.com/post-599173…)
看别的帖子还有对接飞书的能力,后面研究跑通了再发帖。 如果有问题可以留言咨询,共同进步。