☰
muselab 自托管 AI 工作台:基于 Claude Agent SDK 的本地部署与配置实践
2026/10/17 14:43:06 网站建设 项目流程

1. 为什么我要把 AI 工作台搬回自己机器

我平时写代码、查资料、整理方案,几乎每个环节都在和不同的大模型打交道。用得越久越发现一个尴尬的事:豆包一个会话、GPT 一个会话、Claude 一个会话,每个会话都只解决一个孤立问题。上周聊过的架构思路,这周想接着改,得翻半天历史记录;家里的事、工作的事、投资的事全散落在不同窗口里,模型永远只看到我当下敲进去的那几百字。

这就是 muselab 想解决的问题。它是一个基于 Claude Agent SDK 构建的自托管 AI 工作台,核心思路是把 Agent 拆成三块:context(上下文)、harness(执行框架)、model(模型)。context 用文件区域来纳管,你的背景、项目文档、笔记都沉淀成文件,结构清晰;harness 用 Claude Agent SDK,这是目前公认比较成熟的 Agent 执行框架之一;model 则支持 Claude 以及 DeepSeek、GLM、Qwen、Kimi 等主流国产模型,随时切换。

适合谁来用?如果你是一个开发者,手头有台能跑 Node 的机器(本地笔记本、家里的 NAS、一台小服务器都行),希望有一个私有的、多端同步的、能把上下文沉淀下来的 AI 工作台,那 muselab 值得你花半小时部署一下。它自带文件管理区、Markdown/HTML 预览区、AI 对话区,还支持定时任务、消息排队、全局模糊搜索、多主题切换。部署完之后,你在电脑上开的会话,出门用手机浏览器接着聊,上下文完全同步。

这篇就按我实际部署的流程走一遍:环境准备、配置写入、启动服务、用 TaoToken 统一 Key 打通模型调用、最后验证工作台能正常响应。每一步都给可复制的命令和配置,你跟着敲就行。

2. 部署前的环境准备与 TaoToken 通道配置

muselab 是一个 web 服务,跑起来需要 Node 环境。我实测下来,Node 20 LTS 比较稳,18 也能跑但个别依赖会警告。先确认版本:

node -v # 期望输出 v20.x.x 或更高 npm -v

如果版本太低,用 nvm 切一下最省事:

nvm install 20 nvm use 20

接着把项目拉下来。muselab 的仓库在 GitHub 上,直接 clone:

git clone https://github.com/hesorchen/muselab.git cd muselab npm install

npm install这一步会装 Claude Agent SDK 相关的依赖,网络正常的话两三分钟能完。装完先别急着启动,因为工作台要调用模型,得先把模型通道配好。

这里就是关键了。muselab 基于 Claude Agent SDK,默认走 Anthropic 的接口协议。如果你直接用官方通道,需要处理账号和额度问题;而如果你想统一管理 Key、灵活切换模型,用 TaoToken 这类统一 API 通道会更省心。它的作用是给你一个兼容 Anthropic 协议的 Base URL 和一把 Key,你在 muselab 里填上,就能通过这个通道调用背后的模型。

先去 TaoToken 控制台拿 Key。打开 https://taotoken.net/api-keys ,登录后创建一个 API Key,复制出来备用。注意这个 Key 只在创建时完整显示一次,先存到安全的地方。

然后确认你要用的模型 ID。TaoToken 的模型列表在文档里有,Claude 系列、国产模型都有对应的 ID。我这次演示用 Claude 的模型 ID,你按自己订阅的来。

环境变量这块,muselab 支持通过.env文件读取。在项目根目录建一个.env:

touch .env

写入下面这几行。ANTHROPIC_BASE_URL指向 TaoToken 的 API 地址,ANTHROPIC_API_KEY填你刚拿到的 Key,ANTHROPIC_MODEL填模型 ID:

ANTHROPIC_BASE_URL=https://taotoken.net/api ANTHROPIC_API_KEY=sk-你的Key粘贴在这里 ANTHROPIC_MODEL=claude-sonnet-4-20250514

注意:.env里不要有多余空格,Key 前后别带引号,否则容易出 401。写完用cat .env检查一遍。

如果你更习惯用settings.json的方式管理(Claude Agent SDK 支持这种配置),也可以在项目里建一个配置文件,内容等价:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的Key粘贴在这里", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" } }

两种方式选一种就行,别同时写,不然容易互相覆盖。我一般用.env,简单直接。

3. 可复制的启动配置与 muselab 服务拉起

环境变量配好,接下来把 muselab 跑起来。项目用的是常见的 Node 脚本,先看一眼package.json里的 scripts:

cat package.json | grep -A 10 '"scripts"'

一般会有dev、build、start几个。开发模式带热更新,适合调试;生产模式先 build 再 start,适合长期挂着。我本地调试先用 dev:

npm run dev

如果脚本名不一样,按你看到的来。启动后终端会打印监听地址,通常是http://localhost:3000或http://localhost:5173。看到类似下面的输出就说明服务起来了:

ready - started server on 0.0.0.0:3000, url: http://localhost:3000

这时候浏览器打开这个地址,应该能看到 muselab 的界面:左边文件区,中间预览区,右边对话区。

但服务起来不代表模型通道通了。为了让配置更清晰,我把 muselab 的模型接入配置单独整理一份,方便你对照。Claude Agent SDK 读取的是环境变量,所以核心就是那三个值。如果你用的是 Cline、CC Switch 这类工具,配置逻辑是一样的,都是 Base URL + Key + Model ID 三件套。这里给一份完整的settings.json示例,路径放在项目根目录:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的Key粘贴在这里", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514", "ANTHROPIC_SMALL_FAST_MODEL": "claude-haiku-4-20250514" } }

ANTHROPIC_SMALL_FAST_MODEL是给一些轻量任务用的,比如标题生成、意图判断,填一个便宜快的模型能省额度。不填也行,SDK 会用默认值。

如果你想让 muselab 在后台常驻,别用npm run dev,改用生产模式:

npm run build npm run start

build 过程会打包前端资源,第一次跑可能要一两分钟。start 之后服务就稳定了。想让它开机自启,可以用 pm2:

npm install -g pm2 pm2 start npm --name muselab -- run start pm2 save pm2 startup

这样即使你关掉终端,muselab 也还在跑。手机在外面连回家里的机器,就能接着用。

提示:如果你部署在服务器上,记得把监听地址设成0.0.0.0,并且防火墙放行对应端口。本地测试用localhost就行,别急着暴露到公网,先确认功能正常。

配置写完后,重启一次服务让环境变量生效。这一步很多人会忘,改完.env不重启,读到的还是旧值,后面排查半天。

4. 验证模型调用:从对话区到 API 请求

服务跑起来、配置也写好了,现在验证最关键的一环:模型到底通没通。有两种验证方式,一种在界面里点,一种直接打 API,我建议两种都做一遍。

先说界面验证。打开 muselab,在右侧对话区输入一句简单的话,比如「用一句话介绍你自己」。发送后观察:

  • 如果几秒内开始逐字输出,说明通道通了。
  • 如果一直转圈然后报错,看终端日志,通常是 401 或连接失败。
  • 如果秒回一段固定文案,可能是没走到模型,检查是不是命中了本地 mock。

我实测下来,第一次请求会稍慢,因为 SDK 要初始化会话。后面就快了。

再说 API 层验证,这个更直接,能排除界面层的干扰。用 curl 打一次 TaoToken 的接口,确认 Key 和 Base URL 没问题:

curl https://taotoken.net/api/v1/messages \ -H "x-api-key: sk-你的Key粘贴在这里" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "max_tokens": 128, "messages": [ {"role": "user", "content": "回复两个字:通了"} ] }'

如果返回 JSON 里content数组有文本,比如"通了",说明通道完全正常。返回结构大概长这样:

{ "id": "msg_xxx", "type": "message", "role": "assistant", "content": [ {"type": "text", "text": "通了"} ], "model": "claude-sonnet-4-20250514", "stop_reason": "end_turn" }

看到这个,你就可以放心了:Key 有效、Base URL 正确、模型 ID 存在。接下来 muselab 里所有对话都会走这条通道。

再回到 muselab 界面,做一次带上下文的测试。在左边文件区新建一个notes.md,写几行你的项目背景,比如「我在做一个自托管工作台,技术栈是 Node + React」。然后在对话区问「我的项目用什么技术栈」。如果模型能答出 Node + React,说明文件区的上下文确实被 Agent 读到了,context 这一层是通的。

这一步很关键,因为 muselab 的核心卖点就是「完整用户上下文」。文件区不是摆设,它是 Agent 的 context 来源。你沉淀的文件越多,Agent 越懂你。

5. 常见报错排查:401、连接失败与模型不响应

部署过程中最容易卡在几个固定报错上,我把踩过的坑列一下,你对照着查。

401 Unauthorized / invalid api key

这是最高频的。原因通常有三个:Key 复制时带了空格或换行;.env里 Key 被引号包住;Key 本身失效或额度用完。排查方法:先cat .env看原始内容,确认没有多余字符;再用上面那条 curl 单独测 Key,如果 curl 也 401,那就是 Key 的问题,去控制台重新生成一个。注意.env修改后必须重启服务。

local proxy failed / connection refused

这个报错说明 muselab 尝试连 Base URL 但连不上。检查ANTHROPIC_BASE_URL是不是写成了https://taotoken.net/api/带尾斜杠,有些 SDK 对尾斜杠敏感,去掉试试。另外确认你的机器能正常访问外网,公司内网可能有出口限制。如果是在 Docker 里跑,注意容器内的网络和宿主机不一样,localhost指向容器自己,要用宿主机的实际地址。

reading 'choices' of undefined

这个报错一般出现在用 OpenAI 兼容协议去调 Anthropic 接口,或者反过来。muselab 基于 Claude Agent SDK,走的是 Anthropic 的/v1/messages协议,返回结构里是content不是choices。如果你看到choices相关报错,说明请求打到了 OpenAI 格式的端点。检查 Base URL 是不是写成了 OpenAI 的路径,改回https://taotoken.net/api。

OAuth / authentication_error

有些工具会尝试用 OAuth 流程登录,但自托管场景下我们用 API Key 就够了。如果日志里出现 OAuth 相关跳转,说明配置里混入了订阅登录的逻辑。清掉相关配置,只保留ANTHROPIC_API_KEY这一种认证方式。

模型不响应 / 一直 pending

服务起来了,请求发出去了,但迟迟没返回。先看终端日志有没有报错;再看是不是模型 ID 写错了,比如把claude-sonnet-4-20250514写成了别的。模型 ID 必须和通道支持的完全一致。另外max_tokens设太小也可能导致输出被截断,看起来像没响应。

端口被占用

npm run dev报EADDRINUSE,说明端口被别的进程占了。换端口:

PORT=3001 npm run dev

或者找到占用进程杀掉。这个不算大问题,但第一次遇到容易懵。

排查的核心思路就一条:先确认 Key 和 Base URL 在 curl 层面是通的,再去看 muselab 的配置。curl 通了,问题就在应用层;curl 不通,问题在通道层。分层排查能省很多时间。

6. 把工作台用起来:接入文档与后续扩展

muselab 跑通之后,日常使用其实很自然。左边文件区放你的项目文档、笔记、待办,中间预览区直接渲染 Markdown 和 HTML,右边对话区随时问。因为 Agent 能看到文件区的全部内容,你不需要每次重复背景,它会自己读。

如果你想让模型调用更稳定、Key 管理更集中,TaoToken 的接入文档在 https://taotoken.net/doc ,里面有各语言的调用示例和模型列表。想先体验一下模型对话效果,可以直接开 https://taotoken.net/chat 试试。长期做编码和 Agent 任务的话,Coding Plan 会更划算,地址是 https://taotoken.net/coding-plan 。

我自己的用法是:把 muselab 挂在家里的小主机上,pm2 常驻,手机和电脑都通过浏览器访问。出门在外想到一个点子,手机打开就能接着之前的会话聊,上下文一点不丢。文件区沉淀的东西越来越多之后,Agent 确实越来越懂我在做什么,这种「上下文复利」是散落在各个 chatbot 里永远得不到的。

最后留一个小技巧:定期把重要的会话结论手动整理进文件区,别让它只留在对话历史里。对话是流动的,文件是沉淀的。muselab 的设计初衷就是让上下文变成资产,你越认真对待文件区,它回报你的越多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询