1. 为什么要在飞书里养一只私域龙虾
OpenClaw 是最近在开发者圈子里讨论度很高的一套 AI 执行式入口,它和普通聊天机器人的区别在于:不只是"能听懂",还能"动手做",比如帮你跑脚本、整理文件、调用工具链。而 Qwen3.5-27B 这个稠密模型在多项基准上表现相当能打,27B 的体量放在两张消费级或专业卡上就能跑起来,非常适合做私域部署。
把这两者结合,再接到飞书群聊里,就得到一个很实用的形态:团队在飞书里 @ 一下机器人,背后是跑在自己机器上的 Qwen3.5-27B,数据不出私域,调用链路自己掌控。这就是本文要做的"私域龙虾助手"。
整条链路分三段:vLLM 把 Qwen3.5-27B 起成 OpenAI 兼容接口;OpenClaw 作为执行入口对接这个接口;飞书作为前端渠道接收消息、回传结果。另外,如果你不想把所有调用都压在本机,或者需要给多个模型/多个项目做统一 Key 管理,可以用 TaoToken 作为统一 API 通道,把私服模型和云端模型放在同一套 Key 体系下调度。下面从部署到验证一步步来。
2. 前置准备:vLLM 起 Qwen3.5-27B 与 TaoToken 统一 Key
2.1 依赖版本对齐
vLLM 对 torch、transformers 的版本比较敏感,建议先固定一套能跑通的组合,避免装到一半报 CUDA 或算子不兼容:
pip install vllm==0.16.1rc1.dev37+g4fec53cfc \ torch==2.10.0+cu129 \ torchvision==0.25.0+cu129 \ transformers==4.57.6 \ modelscope==1.34.0装完用python -c "import vllm, torch; print(vllm.__version__, torch.__version__)"确认版本对得上。如果这里报undefined symbol之类的错,八成是 torch 和 vllm 编译版本不匹配,回退到上面这组即可。
2.2 下载模型权重
用 modelscope 拉权重比直接 git clone 稳,断点续传也友好:
modelscope download --model="Qwen/Qwen3.5-27B" --local_dir Qwen3.5-27B下载完成后目录里应该有config.json、tokenizer.json、若干*.safetensors分片。确认分片数量完整,缺一片启动时会报Error loading safetensors。
2.3 用 vLLM 启动 OpenAI 兼容服务
export CUDA_VISIBLE_DEVICES=0,1 vllm serve "Qwen3.5-27B" \ --host 0.0.0.0 \ --port 8000 \ --dtype bfloat16 \ --tensor-parallel-size 2 \ --cpu-offload-gb 0 \ --gpu-memory-utilization 0.8 \ --api-key token-abc123 \ --enable-prefix-caching \ --reasoning-parser qwen3 \ --enable-auto-tool-choice \ --tool-call-parser qwen3_coder \ --trust-remote-code关键参数对照如下:
| 参数 | 作用 | 建议 |
|---|---|---|
CUDA_VISIBLE_DEVICES | 指定使用的 GPU | 按实际卡号填,双卡填0,1 |
--dtype bfloat16 | 数据精度 | A100/4090 等支持 bf16 的卡用这个 |
--tensor-parallel-size | Tensor 并行数 | 与 GPU 数量一致,双卡填 2 |
--cpu-offload-gb | 卸载到 CPU 内存的权重 | 显存够就填 0,不够再调大,但推理会变慢 |
--gpu-memory-utilization | 显存占用上限 | 0.8 比较稳,留出余量给 KV Cache |
--api-key | 接口鉴权密钥 | 自定义,后面 OpenClaw 要用同一个 |
--enable-prefix-caching | 前缀缓存 | 多轮对话场景建议开 |
--reasoning-parser qwen3 | 推理内容解析 | Qwen3 系列必须指定 |
--tool-call-parser qwen3_coder | 工具调用解析 | 需要 function call 时开 |
启动日志里看到Uvicorn running on http://0.0.0.0:8000就说明服务起来了。显存占用可以用nvidia-smi观察,双卡 27B bf16 大概各占 30GB 上下,具体看卡型。
2.4 TaoToken 统一 Key 的定位
私服模型跑起来后,接口地址是本机的http://127.0.0.1:8000/v1。但实际项目里往往不止一个模型:可能还要调云端更强的模型做兜底,或者多个 Agent 共用一套 Key。这时候用 TaoToken 做统一通道会省事很多——它提供 OpenAI 兼容的 API 入口,把不同来源的模型收敛到一套 Key 和一套调用规范下。
TaoToken 的 API 地址是https://taotoken.net/api,控制台在https://taotoken.net/console,Key 在https://taotoken.net/api-keys生成。如果你只是纯私域、不接外部模型,这一步可以跳过,直接用 vLLM 的本地 Key;如果要做多模型调度,建议在这里建一个 Key,后面 OpenClaw 的 provider 配置里可以同时挂本地和 TaoToken 两个来源。
3. OpenClaw 配置骨架与飞书渠道接入
3.1 安装与初始化
Node 版本要求 >= 22,先确认node -v。然后全局安装:
npm install -g openclaw@latest --registry=https://registry.npmmirror.com openclaw --version初始化用openclaw onboard,交互式向导里几个关键选择:
- 安全提示选
Yes; - 模式选
QuickStart; - Model/auth provider 选
vLLM (Local/self-hosted OpenAI-compatible); - base URL 填
http://127.0.0.1:8000/v1; - API key 填
token-abc123(和 vLLM 启动时一致); - model 填
Qwen3.5-27B; - 渠道先
Skip for now,后面手动加飞书。
向导跑完会自动拉起 Gateway,浏览器打开 UI 页面。如果页面打不开,用openclaw gateway status看状态,没起来就openclaw gateway restart。
3.2 config.toml 骨架
OpenClaw 的配置集中在~/.openclaw/config.toml(Windows 在用户目录下)。核心结构如下,你可以直接对照修改:
[gateway] port = 18789 host = "127.0.0.1" [models] default = "vllm/Qwen3.5-27B" [providers.vllm] type = "openai-compatible" base_url = "http://127.0.0.1:8000/v1" api_key = "token-abc123" models = ["Qwen3.5-27B"] [providers.taotoken] type = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "你的 TaoToken Key" models = ["qwen3.5-27b", "claude-sonnet-4-5"] [channels.feishu] enabled = true app_id = "cli_xxxxxxxx" app_secret = "xxxxxxxxxxxxxxxx" domain = "https://open.feishu.cn" connection_mode = "websocket" chat_policy = "mention"chat_policy = "mention"表示只有 @ 机器人才响应,群里不会刷屏。connection_mode用websocket可以免去公网回调地址的麻烦,本地开发很省事。
3.3 飞书应用权限与事件订阅
到飞书开放平台https://open.feishu.cn/创建企业自建应用,然后按顺序做四件事:
第一,添加机器人能力。在"应用能力"里开启机器人。
第二,开通通讯权限。至少需要im:message、im:message:send_as_bot、im:chat:readonly这几项,否则机器人收不到也发不出消息。
第三,配置事件订阅。在"事件与回调"里选择"使用长连接接收事件",订阅im.message.receive_v1(接收消息)。如果用 websocket 模式,不需要填回调 URL。
第四,发布版本。应用创建后默认是开发版,要在"版本管理与发布"里创建版本并申请发布,管理员审核通过后才生效。审核通过后,在飞书里搜索应用名就能打开机器人。
拿到 App ID 和 App Secret 后,填回上面 config.toml 的[channels.feishu]段。
3.4 安装飞书插件并重启
openclaw plugins install @m1heng-clawd/feishu openclaw gateway restart重启后openclaw gateway status应该显示 feishu 渠道已连接。如果显示未连接,检查 App ID/Secret 是否填错,以及应用是否已发布。
4. 端到端验证:从飞书发消息到模型回复
4.1 先验证 vLLM 接口本身
在接飞书之前,先确认模型服务是通的:
curl http://127.0.0.1:8000/v1/models \ -H "Authorization: Bearer token-abc123"返回里能看到Qwen3.5-27B就对了。再发一条 chat 请求:
curl http://127.0.0.1:8000/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer token-abc123" \ -d '{ "model": "Qwen3.5-27B", "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "用一句话介绍你自己"} ], "chat_template_kwargs": {"enable_thinking": false} }'enable_thinking设为 false 是为了让回复更直接,不输出思考过程。如果这里能拿到正常回复,说明模型侧没问题。
4.2 验证 OpenClaw 到模型
在 OpenClaw 的 UI 页面里直接发一条消息,比如"现在几点",看是否返回。这一步验证的是 OpenClaw 的 provider 配置是否正确。如果报connection refused,检查 vLLM 是否还在跑;如果报401,检查 api_key 是否一致。
4.3 验证飞书全链路
在飞书里把机器人拉进一个群,或者直接私聊,@ 机器人发一句"你好,帮我列三个今天要做的事"。预期结果是:飞书收到消息 → OpenClaw 通过 websocket 拿到事件 → 调用 vLLM 的 Qwen3.5-27B → 返回结果 → 飞书里显示回复。
实测下来,首次响应会慢一些,因为模型要加载 KV Cache,后续多轮会快很多。如果飞书里一直没反应,按下面顺序排查。
5. 本篇常见报错排查
报错一:Error loading safetensors或启动时权重加载失败。多半是模型分片没下全,重新跑一次modelscope download,或者检查磁盘空间是否够。
报错二:CUDA out of memory。把--gpu-memory-utilization从 0.8 降到 0.7,或者给--cpu-offload-gb设一个非零值(比如 8),代价是推理变慢。
报错三:OpenClaw 报provider not found: vllm。config.toml 里[providers.vllm]段名和[models] default里的前缀要一致,vllm/Qwen3.5-27B对应[providers.vllm]。
报错四:飞书机器人不响应。依次检查:应用是否已发布并通过审核;事件订阅是否选了im.message.receive_v1;chat_policy是否设成了mention而你没 @;openclaw gateway status里 feishu 是否 connected。
报错五:飞书回复乱码或截断。检查domain是否填的https://open.feishu.cn,海外版是https://open.larksuite.com,填错会导致鉴权异常。
报错六:TaoToken 通道调用 401。确认 Key 是从https://taotoken.net/api-keys生成的,且 base_url 用的是https://taotoken.net/api,不要多加/v1后缀(具体以接入文档为准,文档在https://taotoken.net/doc)。
6. 后续怎么把这套用顺
跑通之后,有几个方向可以继续打磨。一是把chat_policy从mention改成更细的策略,比如只在特定群里响应;二是给 OpenClaw 配 hooks,把会话上下文存到 memory,这样多轮对话不会断片;三是如果团队里多个项目都要调模型,用 TaoToken 的 Coding Plan 做长期编码和 Agent 场景的额度管理会更清晰,入口在https://taotoken.net/coding-plan。
私域部署最大的好处是数据可控,Qwen3.5-27B 的能力应付日常办公自动化和开发辅助已经够用。真正要花心思的是渠道策略和权限边界——飞书里谁能触发、能触发哪些工具,这些在 config.toml 里提前想清楚,比事后补要省事得多。