1. 夜间无人值守跑 200 小时TaoToken 接入链路先接对夜间无人值守把 AI Agent 挂在后台跑 200 小时真正难的不是模型会不会答而是凌晨三点遇到429 Too Many Requests、stream disconnected before completion、tool call timeout后进程还 alive、任务却不推进。你如果在复现原文提到的那类 5.7K Star 国产开源 Agent 长跑方案建议先把 TaoToken 的 Key、Base URL 和告警指标接对TaoToken 官网入口见 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentnight_agent_intro 。这篇不从“怎么让 Agent 更聪明”讲起而是按长任务最容易崩的链路讲配置怎么写、启动命令怎么挂、掉线前后日志怎么对照、告警到底盯哪些指标。很多长跑失败并不是模型突然不可用而是几个小问题叠在一起客户端没有正确指向https://taotoken.net/api导致请求打到错误端点API Key 写进代码或提交到仓库半夜被轮换后整条链路失效Claude Code 的settings.json和 Codex 的config.toml混用把ANTHROPIC_*塞给 Codex429 上升后客户端无限重试Token 消耗暴涨任务步数却没有增加流式连接断开进程没有退出日志里只有心跳没有新 checkpoint只看总 Token不看每步 Token、重试请求占比、上下文占比导致费用和稳定性一起失控。所以夜间无人值守的第一原则是先把供应商切换、Key 引用、日志采样、告警分级固定下来再让 Agent 跑长任务。下面给出可直接改的配置片段和排查顺序。2. 写入 API Key 前先在 TaoToken 官网创建 Key并固定 Base URL在改任何配置文件之前先到 TaoToken 官网创建 API Keyhttps://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentnight_agent_key_before_config 。不要直接把 Key 写进start-agent.sh更不要提交到 Git。建议统一放到一个权限为600的环境文件里再由 systemd 或 shell 加载。Base URL 统一填https://taotoken.net/api注意工具配置里的 Base URL 不要加 UTM 参数UTM 只用于官网入口、控制台和文档链接。Key 占位符统一写成YOUR_API_KEY上线前再替换。推荐的环境文件结构mkdir -p ~/.config/taotoken cat ~/.config/taotoken/env EOF # TaoToken 通用变量 export TAOTOKEN_BASE_URLhttps://taotoken.net/api export TAOTOKEN_API_KEYYOUR_API_KEY # Claude Code 专用变量 export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYYOUR_API_KEY EOF chmod 600 ~/.config/taotoken/env source ~/.config/taotoken/env这一步看起来简单但夜间长跑最怕“配置漂移”有人手动导出了旧 Key有人改了~/.bashrc有人用 root 跑服务却没有加载用户环境。建议每次启动前都显式打印一次非敏感配置source ~/.config/taotoken/env echo BASE$ANTHROPIC_BASE_URL echo KEY_SET$([ -n $ANTHROPIC_API_KEY ] echo yes || echo no)不要打印完整 Key。只需要确认 Key 已设置、Base URL 正确即可。3. Claude Code 侧settings.json 与 ANTHROPIC_* 的最小可用配置Claude Code 侧建议使用settings.json或环境变量核心字段是ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY。如果你是在项目级配置可以放到项目下的.claude/settings.json如果是全局配置放到用户配置目录。最小可用片段如下{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: YOUR_API_KEY } }如果不想在 JSON 里写 Key可以只保留 Base URL把 Key 放到环境变量{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api } }然后 shell 中加载export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYYOUR_API_KEY claude夜间无人值守场景下不建议每次手动export。更稳的方式是把环境变量写进~/.config/taotoken/env再让启动脚本source它。这里要特别注意Claude Code 使用ANTHROPIC_*Codex 不要复用这组变量。混用会导致 Codex 侧读到不匹配的鉴权字段表现为 401、403 或直接无响应。Claude Code 长跑时建议同时记录以下字段便于和 TaoToken 控制台用量对齐请求开始时间、结束时间prompt_tokens、completion_tokens、total_tokens是否流式、首 token 时间、最后一个 chunk 时间HTTP 状态码、错误码、重试次数当前任务 step、checkpoint 编号。如果你只想先验证 TaoToken 链路是否通可以先跑一个很短的非无人值守任务source ~/.config/taotoken/env claude -p 返回当前时间并打印 OK确认返回正常后再进入 200 小时长跑压测。不要一上来就用最大并发跑整夜否则第一次 429 就会把日志冲满。4. Codex 侧config.toml 单独声明 TaoToken不要把 ANTHROPIC_* 套过来Codex 侧使用config.toml不要套用 Claude Code 的ANTHROPIC_*。推荐把 TaoToken 作为独立 provider 声明Key 通过环境变量TAOTOKEN_API_KEY读取。示例model_provider taotoken model 你的模型 ID [model_providers.taotoken] name TaoToken base_url https://taotoken.net/api env_key TAOTOKEN_API_KEY wire_api chat然后设置export TAOTOKEN_API_KEYYOUR_API_KEY如果你使用 Codex 的会话或非交互模式建议把启动命令放进脚本并在脚本开头检查变量#!/usr/bin/env bash set -euo pipefail source ~/.config/taotoken/env if [ -z ${TAOTOKEN_API_KEY:-} ]; then echo TAOTOKEN_API_KEY is not set 2 exit 1 fi exec codex --config ~/.codex/config.toml这里的关键点不是命令本身而是隔离Claude Code 的 Key 变量ANTHROPIC_API_KEYCodex 的 Key 变量TAOTOKEN_API_KEY两者共用同一个 Base URLhttps://taotoken.net/api两者不要互相覆盖 env 文件不要把ANTHROPIC_BASE_URL写进 Codex 的config.toml。夜间长跑时Codex 侧同样要记录请求耗时、状态码、重试次数和 Token 消耗。尤其是429、5xx、stream disconnected这三类日志必须进入告警。5. CC Switch 三件套Claude Code、Codex、Key 引用放在可回滚结构里如果你同时使用 Claude Code、Codex 和 CC Switch建议把“三件套”理解成三个可独立回滚的层Claude Code 配置层settings.json或ANTHROPIC_*环境变量只负责 Claude Code。Codex 配置层config.toml与TAOTOKEN_API_KEY只负责 Codex。Key 引用层~/.config/taotoken/env或 secret manager只负责提供YOUR_API_KEY对应真值。不要把所有东西塞进一个全局 shell 脚本。更稳的做法是~/.config/taotoken/ ├── env # 通用 Key 和 Base URL ├── claude.env # Claude Code 专用 ├── codex.env # Codex 专用 └── agent.env # Agent 启动变量示例拆分# claude.env export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYYOUR_API_KEY# codex.env export TAOTOKEN_BASE_URLhttps://taotoken.net/api export TAOTOKEN_API_KEYYOUR_API_KEY然后启动 Agent 时按需加载source ~/.config/taotoken/claude.env source ~/.config/taotoken/codex.env source ~/.config/taotoken/agent.envCC Switch 切换时只改变“当前 active 供应商”不要动态重写所有配置文件。否则半夜自动切换后日志里会出现一半请求走旧配置、一半请求走新配置排查非常痛苦。6. 200 小时无人值守启动命令systemd 与 nohup 两套模板长跑不建议只开一个终端窗口跑nohup。更稳的是 systemd。下面是一套通用模板Agent 具体启动脚本请你替换为自己项目的start-agent.sh。[Unit] DescriptionNightly AI Agent long-run service Afternetwork-online.target Wantsnetwork-online.target [Service] Typesimple WorkingDirectory/opt/night-agent EnvironmentFile/etc/taotoken/agent.env ExecStart/usr/bin/bash -lc /opt/night-agent/start-agent.sh --config /opt/night-agent/config.yaml Restarton-failure RestartSec15 TimeoutStopSec60 KillSignalSIGTERM StandardOutputappend:/var/log/night-agent/agent.out.log StandardErrorappend:/var/log/night-agent/agent.err.log [Install] WantedBymulti-user.target环境文件/etc/taotoken/agent.envANTHROPIC_BASE_URLhttps://taotoken.net/api ANTHROPIC_API_KEYYOUR_API_KEY TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_API_KEYYOUR_API_KEY安装并启动sudo install -d -m 0750 /etc/taotoken /var/log/night-agent sudo chown root:root /etc/taotoken/agent.env sudo chmod 600 /etc/taotoken/agent.env sudo systemctl daemon-reload sudo systemctl enable --now nightly-agent.service sudo systemctl status nightly-agent.service sudo journalctl -u nightly-agent.service -f如果只是临时跑可以用 nohupsource ~/.config/taotoken/env mkdir -p /var/log/night-agent nohup /opt/night-agent/start-agent.sh \ --config /opt/night-agent/config.yaml \ /var/log/night-agent/run.log 21 echo $! | sudo tee /var/run/night-agent.pid夜间无人值守还要加一个“看门狗”脚本每 5 分钟检查一次最后成功请求时间和最后 checkpoint 时间#!/usr/bin/env bash set -euo pipefail LOG/var/log/night-agent/run.log WATCH/var/log/night-agent/watchdog.log last_ok$(grep -E request_ok|checkpoint_saved $LOG | tail -n 1 || true) echo $(date -Is) last_ok${last_ok:-none} $WATCH if [ -z $last_ok ]; then echo $(date -Is) no success marker, keep watching $WATCH fi真正的生产环境建议把这类检查接到 Prometheus、Zabbix 或企业告警系统而不是只写文件。7. TaoToken 侧和本地侧分别告警哪些指标夜间无人值守的核心告警不能只看“进程是否存活”。进程活着但任务不推进是长跑最常见的假健康状态。建议分两层看TaoToken 侧重点看Key 维度调用量、成功率、失败率429、5xx、鉴权失败、超时Token 消耗速率prompt_tokens/min、completion_tokens/min、total_tokens/min模型调用异常是否集中在某个时间段额度余量与异常突增。本地侧重点看进程 PID 是否存活最后一次成功请求距今多久最后 checkpoint 距今多久流式断流率、首 token 时间、chunk 间隔工具调用成功率、失败工具名队列积压、待执行 step 数日志ERROR、WARN每分钟数量每步 Token 是否突增。建议告警分级如下层级指标正常范围预警阈值严重阈值建议动作P0最后成功请求时间 1 分钟 2 分钟 5 分钟检查 Key、Base URL、网络保留日志后重启P0最后 checkpoint 时间 5 分钟 10 分钟 20 分钟判断任务是否卡死先 dump 现场再恢复P0进程心跳连续写入中断 2 次中断 5 次检查进程、线程、文件描述符P1429 比例0% 1% 5%降并发、指数退避、检查 Key 速率P15xx 比例 0.1% 1% 3%重试并观察是否集中出现P1流式断流率 0.5% 1% 3%缩短单次任务记录断流前最后事件P2TTFB P95 2 秒 5 秒 10 秒降并发检查上下文长度P2Token/min基线 ±20%±50%异常突增/突降查重试、上下文压缩、重复请求P2上下文占比 70% 80% 90%触发摘要、切分任务、压缩历史P2工具调用成功率 98% 95% 90%查参数、权限、超时设置P3ERROR/min0-1 5 20提取堆栈关联请求 ID真正要盯的不是一个指标而是“Token 消耗曲线”和“任务推进曲线”是否同步。如果 Token/min 上升但 checkpoint 不变通常是重试或上下文膨胀如果 Token/min 下降最后成功请求也变老通常是连接卡死或限流。8. 掉线前后日志对照表从“看起来还活着”到“实际不推进”下面这张表用于夜间事故复盘。你可以在日志系统里按阶段打标签然后对照排查。阶段典型日志/现象关键指标容易误判的点处置正常长跑heartbeat ok、request_ok、checkpoint_saved、工具调用成功成功率 99%TTFB P95 稳定Token/min 平稳以为一直绿就没问题继续采样保留基线掉线前 10-30 分钟429 Too Many Requests、retrying、rate limit、stream slow429 上升TTFB P95 升高重试请求占比升高只看到“还在重试”没看到任务步数不变降并发指数退避检查 Key 速率掉线前 5 分钟stream disconnected before completion、chunk interval 30s、context near limit断流率升高上下文占比 85%completion token 下降以为模型慢实际连接已不稳压缩上下文缩短单次请求记录最后 chunk 时间掉线瞬间socket hang up、context deadline exceeded、tool call timeout最后成功请求时间变老队列积压上升进程还在误以为服务正常不要立即删日志先抓进程、连接、最后 checkpoint掉线后 1 分钟ECONNRESET、authentication failed、invalid api key、no progress连续失败PID 存活但无成功请求直接重启丢失现场保存日志、ps、ss、当前 step再重启重启恢复reload checkpoint、resume step、request_okcheckpoint 恢复Token/min 回归基线重复执行旧工具调用费用二次消耗做幂等标记避免重复扣费建议在 Agent 里固定打印这几类标记便于 grepheartbeat_ok request_start request_id... request_ok request_id... prompt_tokens... completion_tokens... request_fail request_id... status... error... stream_chunk request_id... chunk_index... gap_ms... tool_call_start step... tool... tool_call_ok step... tool... tool_call_fail step... tool... error... checkpoint_saved step... file...夜间排查顺序建议如下先确认ANTHROPIC_BASE_URL或 Codex 的base_url是否为https://taotoken.net/api。再确认 Key 是否来自 TaoToken 官网创建且没有过期、没有被环境变量覆盖。用最小请求验证 Claude Code 或 Codex 是否能正常返回。观察 10 分钟短压重点看 429、TTFB P95、流式断流率。跑 1 小时检查 checkpoint 是否按预期写入。进入 200 小时长跑按 P0/P1/P2 告警分级调整阈值。掉线后先保现场再重启避免把重复工具调用和 Token 浪费掩盖掉。最后给一个高转化路径。如果你准备把夜间无人值守长跑接到 TaoToken建议按下面顺序走先模型对话验证流式稳定性和返回质量https://taotoken.net/models/detail/chat?utm_sourcetaotoken_aicg_blog_endutm_contentnight_agent_chat长任务、高并发或需要 Coding 场景查看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentnight_agent_coding_plan到控制台创建 API Key替换YOUR_API_KEYhttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentnight_agent_api_keysClaude Code 侧配置可参考官方文档https://taotoken.net/doc/ClaudeCodeAnthropic?utm_sourcetaotoken_aicg_blog_endutm_contentnight_agent_claude_code_doc官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentnight_agent_final把 Base URL 固定为https://taotoken.net/api把 Key 放进独立环境文件把告警盯在最后成功请求、checkpoint、429/5xx、流式断流和 Token/min 上200 小时无人值守才不是“看运气”而是可观测、可回滚、可复盘的工程任务。