1. WSL2 里 OpenClaw 报 LLM request timed out 到底卡在哪
你在 WSL2 里装好 OpenClaw,openclaw gateway也起来了,结果一对话就甩给你一句LLM request timed out。这个报错最坑的地方在于:它看起来像模型服务挂了,实际上十有八九是 WSL2 的网络层或者 endpoint 配置层出了问题。OpenClaw 本身只是个客户端,它把请求发出去之后等不到响应,超时时间一到就抛这个错,至于请求到底有没有出 WSL2、有没有到目标服务器、目标服务器有没有回包,它一概不告诉你。
所以排查的核心思路是:把「WSL2 能不能出网」和「OpenClaw 的 endpoint 配得对不对」这两件事拆开验证。前者用curl和 DNS 命令测,后者看配置文件里的 Base URL、Key、Model ID 三件套。我试过在同一个 WSL2 实例里,curl能通但 OpenClaw 超时,最后发现是 endpoint 写成了localhost而不是宿主机可达的地址;也遇到过curl直接卡住,那是 WSL2 的 DNS 解析没配好。
这篇按排查顺序走一遍:先确认 WSL2 网络模式,再测 DNS 和连通性,然后改 OpenClaw 的 endpoint 和超时参数,最后用 curl 验证请求真的能拿到响应。每一步都有可复制的命令和配置片段,你照着敲就能定位到底是哪一层断的。
适合谁看:已经在 WSL2 里跑 OpenClaw、被LLM request timed out卡住、想快速区分是网络问题还是配置问题的人。如果你还没装 OpenClaw,这篇的排查逻辑同样适用于任何在 WSL2 里调用远程 LLM API 的工具。
先明确一个概念:WSL2 是一个跑在 Hyper-V 轻量虚拟机里的 Linux 环境,它有自己的虚拟网卡和 IP 段,和 Windows 宿主机的网络是 NAT 关系。这意味着 WSL2 里的localhost指的是 WSL2 自己,不是 Windows;WSL2 访问外网要经过 Windows 的 NAT 转发;Windows 防火墙的入站规则如果没放行,外部请求进不来。这三个特性叠加,就是LLM request timed out的高发区。
2. 先把 TaoToken 的 endpoint 和 Key 准备好
在动 OpenClaw 配置之前,先把要连的目标服务信息确认清楚。TaoToken 的 API 入口是https://taotoken.net/api,这个地址是给程序调用的 Base URL,不要带任何多余路径。你需要准备三样东西:Base URL、API Key、Model ID。
Base URL 就是上面那个https://taotoken.net/api。API Key 需要你去控制台生成,地址是https://taotoken.net/console,登录后在 API Keys 页面创建一个新的 Key,复制出来保存好,这个 Key 只在创建时完整显示一次。Model ID 取决于你要调哪个模型,可以在模型对话页面先试一下,确认模型名称拼写正确。
如果你只是想在浏览器里先验证模型能不能正常回话,可以直接打开https://taotoken.net/models用对话界面测一句,确认账号和模型都没问题,再回到 WSL2 里配 OpenClaw。这一步能帮你排除「账号欠费」「模型名写错」这类和网络无关的问题。
对于长期在 WSL2 里跑编码 Agent 的场景,可以考虑用 Coding Plan,入口在https://taotoken.net/coding-plan,它更适合高频调用。但排查超时的阶段,先用按量调用的 Key 把链路跑通再说。
拿到三件套之后,先别急着写进 OpenClaw 配置。在 WSL2 终端里用 curl 直接打一次 API,看能不能拿到响应。这一步是整个排查的分水岭:curl 通了,问题在 OpenClaw 配置;curl 不通,问题在 WSL2 网络。下一节先讲 WSL2 网络怎么确认和修。
3. WSL2 网络配置与 OpenClaw endpoint 可复制片段
3.1 确认 WSL2 网络模式和 DNS
先在 WSL2 终端里看网络模式。执行:
cat /etc/resolv.conf ip addr show eth0/etc/resolv.conf里的nameserver就是 WSL2 用的 DNS。默认情况下 WSL2 会自动生成这个文件,指向一个虚拟 DNS 地址。如果你发现nameserver是一个不可达的地址,或者curl域名时卡住很久,那就是 DNS 解析问题。
测试 DNS 解析:
nslookup taotoken.net getent hosts taotoken.net如果nslookup超时或返回错误,先修 DNS。可以在/etc/wsl.conf里关掉自动生成 resolv.conf,手动指定:
[network] generateResolvConf = false然后在/etc/resolv.conf里写:
nameserver 223.5.5.5 nameserver 119.29.29.29改完在 Windows 侧执行wsl --shutdown重启 WSL2 生效。注意这个操作会关闭所有 WSL2 实例,先保存工作。
3.2 测 endpoint 连通性
DNS 通了之后,直接 curl 测 API 入口:
curl -v --max-time 15 https://taotoken.net/api-v会打印握手过程,--max-time 15限制 15 秒超时。如果看到Connected to taotoken.net和 TLS 握手信息,说明网络层通了。如果卡在Trying xxx...不动,那是 TCP 层没通,检查 WSL2 的出网和 Windows 防火墙出站规则。
再测一次带鉴权的真实请求:
curl -X POST https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer 你的API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "你的Model_ID", "messages": [{"role": "user", "content": "ping"}], "max_tokens": 16 }'如果这条命令能返回 JSON,说明 endpoint、Key、Model 三件套全对,问题一定在 OpenClaw 的配置或超时参数上。如果返回 401,是 Key 错了;返回 404,是路径或模型名错了;卡住不动,回到网络层继续查。
3.3 OpenClaw 的 endpoint 与超时配置
OpenClaw 的配置文件通常在~/.openclaw/config.json或项目目录下的openclaw.config.json,具体路径看你的安装方式。核心是把 LLM 的 Base URL 指向 TaoToken,并设置合理的超时和重试。
一个可复制的配置片段(JSON 格式):
{ "llm": { "baseUrl": "https://taotoken.net/api", "apiKey": "你的API_KEY", "model": "你的Model_ID", "timeoutMs": 60000, "maxRetries": 3, "retryDelayMs": 2000 } }如果你用的是 TOML 格式的配置:
[llm] base_url = "https://taotoken.net/api" api_key = "你的API_KEY" model = "你的Model_ID" timeout_ms = 60000 max_retries = 3 retry_delay_ms = 2000关键参数说明:timeoutMs默认可能只有 10000 或 30000,对于长回复或者网络抖动的情况太短,建议调到 60000。maxRetries设 3 次,配合retryDelayMs2000 毫秒,能扛住偶发的瞬时超时。注意 Base URL 结尾不要带/v1,OpenClaw 内部会自己拼路径,带了会变成/api/v1/v1/...导致 404。
如果你在 WSL2 里同时用 Claude Code 这类工具,它的配置在~/.claude/settings.json,同样需要 Base URL、Key、Model ID 三件套:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "你的API_KEY", "ANTHROPIC_MODEL": "你的Model_ID" } }Codex 的配置在~/.codex/auth.json,格式类似,把 base URL 和 key 填对即可。这三个工具的排查逻辑完全一致:先 curl 通,再改配置,再重启。
3.4 防火墙入站规则
如果 curl 在 WSL2 里通,但 OpenClaw 的 gateway 端口从 Windows 侧访问不到,或者 OpenClaw 需要监听某个端口被外部调用,那要检查 Windows 防火墙。先看 OpenClaw 用的端口:
sudo netstat -tulpn | grep openclaw如果没装 net-tools:
sudo apt update && sudo apt install -y net-tools拿到端口后,在 Windows 侧按Win+R输入wf.msc打开高级安全防火墙,新建入站规则,选端口类型,填 OpenClaw 的端口号,TCP 协议,允许连接,命名保存。这一步主要影响的是「外部访问 WSL2 内服务」的场景,如果你只是 WSL2 主动往外调 API,出站规则默认是放行的,不需要额外配。
4. 验证请求:从 curl 到 OpenClaw 对话成功
配置改完之后,按顺序验证。第一步,重启 OpenClaw gateway:
openclaw gateway第二步,在另一个 WSL2 终端里再跑一次 curl 确认 endpoint 仍然通:
curl -s -o /dev/null -w "%{http_code}\n" --max-time 15 https://taotoken.net/api返回 200 或 401 都说明网络通(401 只是没带 Key),返回 000 说明连接失败。
第三步,在 OpenClaw 里发一句对话,观察是否还报LLM request timed out。如果成功返回,说明配置生效。如果还超时,看 OpenClaw 的日志输出,通常会打印实际请求的 URL 和超时时间,对照检查 Base URL 有没有拼错。
第四步,如果 OpenClaw 支持详细日志,打开 debug 模式再发一次请求,看它实际请求的完整 URL。常见错误是 Base URL 多写了/v1或者少写了/api,导致请求打到了错误路径。正确的完整请求 URL 应该是https://taotoken.net/api/v1/chat/completions这种形式,OpenClaw 负责拼/v1/chat/completions,你只提供到/api。
验证成功的标志:OpenClaw 对话正常返回内容,日志里没有 timeout 关键字,curl 请求在 1-2 秒内返回。如果 curl 快但 OpenClaw 慢,检查 OpenClaw 的超时参数是不是设得太短,或者它有没有走系统代理。WSL2 里如果设了http_proxy环境变量,OpenClaw 可能会走代理导致超时,用env | grep -i proxy检查并清掉。
5. 本篇常见错排查对照
报错一:LLM request timed out但 curl 能通。这是最常见的情况,说明网络层没问题,问题在 OpenClaw 配置。检查三点:Base URL 是否写成了localhost或127.0.0.1(WSL2 里这指向自己,不是外部服务);Base URL 是否多带了/v1;超时参数是否太短。把 Base URL 改成https://taotoken.net/api,超时调到 60000,重启 gateway。
报错二:401 Unauthorized。Key 错了或者没带上。检查Authorization: Bearer后面的 Key 有没有多余空格,Key 是否已过期或被删除。去https://taotoken.net/api-keys重新生成一个,复制时注意不要漏字符。
报错三:local proxy failed或连接被拒绝。WSL2 里设了代理环境变量,但代理不可达。执行unset http_proxy https_proxy all_proxy清掉,或者在 OpenClaw 配置里显式禁用代理。这个报错和LLM request timed out经常一起出现,因为代理卡住也会导致超时。
报错四:reading choices相关错误。请求发出去了,返回的 JSON 里没有choices字段,通常是模型名写错或者返回了错误结构。用 curl 单独测一次,看返回的完整 JSON,确认model字段拼写和 TaoToken 支持的模型 ID 一致。
报错五:OAuth 相关报错。如果你用的是需要 OAuth 的工具(比如某些 Claude Code 配置),检查 token 是否过期。OAuth 流程和 API Key 不同,需要重新走授权。在 WSL2 里 OAuth 回调可能因为端口映射问题失败,确认回调端口在 Windows 防火墙放行。
报错六:DNS 解析超时。curl卡在Trying之前,nslookup也超时。按 3.1 节改/etc/wsl.conf和/etc/resolv.conf,重启 WSL2。这个问题的典型表现是 curl 域名超时但 curl IP 能通。
排查顺序建议:先 curl 测通不通,再查 DNS,再查防火墙,最后查 OpenClaw 配置。每一步都有明确的成功/失败信号,不要跳步。
6. 把链路跑通之后
链路跑通之后,日常使用中如果偶尔再遇到超时,先看是不是网络抖动,OpenClaw 的重试参数会帮你扛过去。如果频繁超时,把timeoutMs再往上调,或者检查 WSL2 的内存和 CPU 占用,资源紧张时请求处理也会变慢。
需要长期在 WSL2 里跑编码 Agent 的话,Coding Plan 的入口在https://taotoken.net/coding-plan,适合高频调用场景。API Key 管理在https://taotoken.net/api-keys,接入文档在https://taotoken.net/doc,遇到配置问题可以先翻文档对照参数名。模型对话验证在https://taotoken.net/models,改完配置先用对话界面测一句,比直接跑 Agent 更快定位问题。
最后提醒一个容易忽略的点:WSL2 的时钟漂移会导致 TLS 握手失败,表现也是超时。执行date看时间是否准,不准的话在 WSL2 里同步一下。这个坑不常见,但一旦踩到很难往网络配置上想。