1. 为什么要在 WSL 里跑 openclaw discord 这套组合openclaw 是一个把本地命令行能力暴露给聊天平台的桥接工具你可以把它理解成一个“翻译官”一边连着你在 Windows 上跑的各种脚本、模型接口和自动化任务另一边连着 Discord 的频道。你在手机 Discord 里发一句话openclaw 在本机执行完再把结果发回频道。它本身不产生智能真正干活的是你后面接的大模型 API。Discord 在这里扮演的是“遥控器 消息面板”的角色。相比自己写一个 Web 界面Discord 现成的频道、私信、权限、手机推送全都免费还能拉多个 bot 进同一个服务器做多 agent 协同。我试过用两个 openclaw 实例分别扮演开发和测试角色在私有频道里互相丢任务效果比单实例有意思得多。那为什么非要套一层 WSL因为 openclaw 的依赖链在 Linux 下最顺而 Windows 原生跑 Python 虚拟环境、Node 版本管理、文件权限经常出玄学问题。WSL2 给你一个几乎完整的 Linux 内核同时又能直接读写 Windows 盘符是 Windows 用户跑这类工具最省心的路径。Mac 上体验确实更丝滑但如果你手头只有 WindowsWSL 就是最优解。这套链路真正容易翻车的地方有三个一是 WSL 和 Windows 之间的网络隔离localhost 转发偶尔抽风二是 Discord bot token 的权限位没配对bot 进不了频道三是 endpoint 还指向默认地址鉴权失败却报成网络错误。下面我按“装好 → 配好 → 改 endpoint → 验证 → 排障”的顺序走一遍每一步都给可复制的命令和配置。适合谁看手上是 Windows、想用 Discord 远程指挥本地 AI 任务、又不想折腾双系统的开发者。如果你只是想在网页里聊天那不用往下看但如果你想培养一个能长期在线、能接多个模型、能手机遥控的“贾维斯雏形”这套值得搭。2. WSL 内 openclaw 安装与 Discord bot 创建前置2.1 WSL2 环境确认与依赖安装先确认你的 WSL 是 2 代1 代在网络转发上有已知坑。在 Windows PowerShell 里执行wsl --list --verbose看到 VERSION 列是 2 就对了。如果是 1用wsl --set-version 发行版名 2升级。接着进 WSL 终端更新包索引并装基础依赖sudo apt update sudo apt upgrade -y sudo apt install -y python3 python3-pip python3-venv git curl build-essentialopenclaw 对 Python 版本有要求建议 3.10 以上。用python3 --version确认低于 3.10 的话考虑用 deadsnakes PPA 或直接换 Ubuntu 22.04/24.04 发行版。2.2 创建虚拟环境并安装 openclaw强烈建议用 venv 隔离避免污染系统 Pythonmkdir -p ~/openclaw cd ~/openclaw python3 -m venv .venv source .venv/bin/activate pip install --upgrade pip pip install openclaw装完用openclaw --version验证。如果提示命令找不到检查 venv 是否激活命令行前面应该有(.venv)前缀。这一步踩过的坑是有人用sudo pip install装到系统里结果普通用户跑不起来还得清理别这么干。2.3 创建 Discord bot 并拿到 token打开 Discord Developer Portal新建一个 Application进到 Bot 页面点 Add Bot。这里有两个关键开关必须打开否则 bot 收不到消息在 Bot 页面往下找到Privileged Gateway Intents把MESSAGE CONTENT INTENT打开。不开这个bot 只能看到消息事件但读不到内容表现就是“bot 在线但永远不回你”。然后回到 OAuth2 → URL Generator勾选bot和applications.commands权限里至少勾Send Messages、Read Message History、View Channels。生成的邀请链接在浏览器打开把 bot 拉进你的服务器。token 在 Bot 页面点 Reset Token 后复制形如MTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx。这个 token 只显示一次丢了就重置。不要把它提交到 git后面我们用环境变量或配置文件隔离。2.4 把 endpoint 指向 TaoToken 统一通道openclaw 默认会去连某个公共 endpoint但我们要把它改到 TaoToken 的 API 通道这样 Key 和模型路由都统一管理。TaoToken 的 API 地址是https://taotoken.net/api官网在https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end。先去控制台建一个 API Key路径是 API Keys 页面复制出来的 Key 形如sk-开头的一长串。拿到 Key 后openclaw 的配置分两部分Discord 侧填 bot token模型侧填 Base URL Key Model ID。下一节给完整配置片段。3. 可复制的 openclaw 配置文件与 endpoint 改写3.1 配置文件位置与结构openclaw 默认读~/.config/openclaw/config.toml也支持项目目录下的openclaw.toml。我建议用后者方便跟项目一起管理。先建目录和文件cd ~/openclaw touch openclaw.toml3.2 完整 TOML 配置片段下面这份配置把 Discord 接入和 TaoToken endpoint 都写全了路径和字段名按 openclaw 当前版本对齐[discord] bot_token MTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx guild_id 123456789012345678 channel_id 123456789012345679 command_prefix ! allowed_roles [admin, dev] [model] provider openai-compatible base_url https://taotoken.net/api api_key sk-你的TaoToken密钥 model_id claude-3-5-sonnet max_tokens 4096 temperature 0.7 [agent] name openclaw-dev system_prompt 你是一个本地开发助手回答简洁优先给可执行命令。 timeout_seconds 120 [logging] level info file ~/openclaw/logs/openclaw.log三个关键字段解释一下base_url必须是https://taotoken.net/api不要带尾部斜杠也不要写成/v1openclaw 会自己拼路径api_key用 TaoToken 控制台生成的 Keymodel_id填你在 TaoToken 模型列表里看到的 ID比如claude-3-5-sonnet或gpt-4o具体以控制台为准。3.3 用环境变量覆盖敏感字段把 token 和 key 写死在文件里有泄露风险更稳的做法是用环境变量。openclaw 支持${VAR}语法[discord] bot_token ${DISCORD_BOT_TOKEN} [model] base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} model_id claude-3-5-sonnet然后在~/.bashrc里加export DISCORD_BOT_TOKENMTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx export TAOTOKEN_API_KEYsk-你的TaoToken密钥执行source ~/.bashrc生效。这样配置文件可以安全地进 git敏感信息留在本机环境里。3.4 启动 openclaw 并观察日志cd ~/openclaw source .venv/bin/activate openclaw run --config openclaw.toml正常启动会打印类似Discord bot connected as openclaw-dev#1234和Model endpoint: https://taotoken.net/api的日志。如果只看到 Discord 连上但模型那行报错八成是 Key 或 base_url 写错了下一节专门排。4. 连通性验证从 Discord 发消息到模型返回4.1 最小验证发一条测试消息在 Discord 里找到 bot 所在的频道发!ask 用一句话解释什么是 WSL2如果配置正确几秒内 bot 会回复模型生成的内容。这一步验证的是完整链路Discord 事件 → openclaw 接收 → 调 TaoToken endpoint → 模型返回 → 发回 Discord。4.2 用 curl 单独验证 endpoint 是否通如果 Discord 那边没反应先绕过 openclaw直接用 curl 打 TaoToken 的 API确认 Key 和网络没问题curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的TaoToken密钥 \ -H Content-Type: application/json \ -d { model: claude-3-5-sonnet, messages: [{role: user, content: ping}], max_tokens: 16 }返回 JSON 里如果有choices数组且 content 非空说明 endpoint 和 Key 都正常问题在 openclaw 配置或 Discord 侧。如果返回 401是 Key 错了返回 404是 base_url 路径拼错了连接超时是 WSL 网络问题。4.3 验证 Discord bot 权限在频道里发!ping如果 bot 不回先检查三件事bot 是否真的在这个频道用bot名看能不能 到MESSAGE CONTENT INTENT 是否打开channel_id是否填对。channel_id 获取方法Discord 设置里打开开发者模式右键频道 → Copy Channel ID。4.4 验证多实例协同如果你想跑两个 openclaw 实例做多 agent复制一份配置改agent.name和channel_id用不同端口或不同 bot token 启动。两个实例在同一个私有频道里可以互相看到对方消息实现简单的任务分发。注意别让它们无限互相回复加个allowed_roles或消息前缀过滤。5. 常见报错排查清单401、local proxy failed、reading choices、OAuth5.1 401 Unauthorized最常见。curl 直接返回 401说明 TaoToken Key 无效或没带上。检查三点Key 是否复制完整有没有漏字符Header 是否是Authorization: Bearer sk-xxx格式Bearer 后面有空格Key 是否在 TaoToken 控制台被禁用或删除。如果 curl 通但 openclaw 报 401检查配置文件里api_key是否被环境变量正确替换用echo $TAOTOKEN_API_KEY确认。5.2 local proxy failed / connection refused这个报错通常出现在 WSL 里访问 Windows 侧服务或者反过来。如果你在 WSL 里跑 openclawendpoint 是公网地址https://taotoken.net/api一般不会触发。但如果你的配置里 base_url 写成了http://localhost:xxxx指向 Windows 上的某个本地服务就会因为 WSL2 的 NAT 网络隔离而失败。解决办法要么把服务也跑在 WSL 里要么用 Windows 主机在 WSL 里的 IPcat /etc/resolv.conf里的 nameserver要么在 Windows 侧配置端口转发。最省事的还是直接用 TaoToken 这种公网 endpoint绕开跨系统网络问题。5.3 reading choices 相关报错形如KeyError: choices或reading choices的报错说明 openclaw 拿到了响应但结构不对。原因通常是 endpoint 返回了错误 JSON比如{error: {...}}而 openclaw 直接去读choices。先看完整响应体确认是不是 401/404 被吞成了这个错。另一个可能是model_id填了 TaoToken 不支持的模型名返回了错误结构。去 TaoToken 控制台核对可用模型列表。5.4 OAuth / token 过期类报错如果你用的是某些需要 OAuth 流程的模型通道token 会过期。TaoToken 用的是 API Key 模式不存在 OAuth 刷新问题Key 长期有效除非你手动删除。如果看到 OAuth 相关报错检查是不是配置里混入了其他 provider 的字段或者 openclaw 版本太老还在走旧鉴权逻辑。升级到最新版pip install --upgrade openclaw。5.5 bot 在线但不回复按顺序排查MESSAGE CONTENT INTENT 是否开channel_id是否对command_prefix是否和消息匹配allowed_roles是否把你的角色排除了日志里有没有Ignoring message from ...之类的过滤记录。把日志级别调到debug能看到更细的过滤原因。6. 把 Key 和模型路由统一到 TaoToken 的长期用法搭好之后日常维护其实很轻。我的做法是把 openclaw 当成一个常驻服务用 systemd 或 tmux 挂着Discord 手机端随时能发指令。模型侧全部走 TaoToken 的https://taotoken.net/api好处是换模型只改model_id一个字段不用动 Key 和 base_url。TaoToken 控制台在https://taotoken.net/api-keys管理 Key文档在https://taotoken.net/doc模型列表和接入示例都在里面。如果你要长期跑编码类任务或者多 agent 协同可以考虑 Coding Plan额度更划算适合 openclaw 这种会频繁调模型的场景。验证模型连通性的时候用模型对话页面快速试一条比每次都走 Discord 快得多。最后提醒一句token 消耗是真的快尤其是让 agent 自动分析大项目的时候。建议在 openclaw 配置里加max_tokens上限和超时避免一个失控任务把额度烧光。WSL 不跑的时候直接wsl --shutdownbot 下线token 自然就保住了这也是我为什么喜欢把 openclaw 放在 WSL 而不是常驻 Windows 服务里。