
OpenClaw 跑 AKShareTavily 的 Agentic Workflow核心不是写多少个技能而是让 Agent/Harness 在长会话里稳定调用模型。你要做的是一个收盘后自动执行的 A 股投研智能体akshare-data 拉行情tavily-search 搜新闻stock-watcher 盯自选股self-improving-agent 做复盘。多工具编排会让模型请求变密如果 Key 分散在技能、环境变量和配置文件中很容易出现 401、404、429。把 Key 统一成 TaoTokenBase URL 填 https://taotoken.net/apiOpenClaw 就能把长会话里的模型消耗收口到一个入口。适合谁已经装好 OpenClaw、想用本地技能跑投研简报但被模型 Key 配错卡住的人。下面按可跟做的顺序拆。1. 原问题与场景OpenClaw 长会话 Agent 为什么会被 Key 拖垮1.1 收盘后自动工作流的真实链路一个能跑的 A 股投研 Agent通常不是在聊天框里问一句“今天怎么样”而是由 Harness 按顺序调工具。收盘后触发第一层任务akshare-data 去拉全市场指数、自选股日线、成交额和资金流tavily-search 去检索当天财经要闻、行业政策、公司公告stock-watcher 再把自选股里的涨跌幅、量能异动标记出来最后模型把结构化数据和新闻摘要揉成一份简报通过飞书或本地文件发出去。这条链路里模型不是只出现一次。akshare-data 返回大段 JSON 后模型要读tavily-search 返回标题和摘要后模型要判断相关性stock-watcher 发现异动后模型要解释可能原因self-improving-agent 还会在报告生成后做一次反思。一次收盘任务下来十几到几十次模型调用很常见。长会话加上多工具最怕的不是模型不够聪明而是中途某个技能拿错 Key整个 cron 任务白跑。1.2 Key 分散时长会话会在哪一步断最常见的情况是你一开始只在 OpenClaw 主配置里填了一个模型 Key后来装 tavily-search 时又填了 Tavily 自己的 Key再后来装 stock-watcher它内部调用 LLM 做摘要你又填了一个旧 Keyself-improving-agent 读的是另一个环境变量。表面上看每个技能都能单独跑一旦放进同一个 Agent 编排就会出现“前半段正常后半段 401”。比如 stock-watcher 在 14:55 扫到一只自选股放量准备调用模型生成异动解释结果它读到的还是几天前失效的 Key。Harness 层看到工具失败可能重试两次后直接终止飞书只收到半截报告。你以为是 AKShare 数据源不稳定实际是模型通道没有统一。把 OpenClaw 的模型调用统一走 TaoTokenBase URL 固定成https://taotoken.net/api这类问题会少很多。2. TaoToken 前置给 OpenClaw 的 Harness 一个统一模型入口2.1 TaoToken 在 OpenClaw 里的角色TaoToken 在这里不是“再装一个技能”而是给 OpenClaw 提供一个 OpenAI 兼容的模型入口。OpenClaw 的 Agent 在长会话里需要反复请求模型TaoToken 把模型访问收口到一个 API Key 和一个 Base URL。你不需要让 akshare-data 一套 Key、tavily-search 一套 Key、stock-watcher 再一套 Key而是让所有需要 LLM 的技能都引用同一个环境变量。打开官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。登录后进入 API Keys 页面创建 Key复制sk-开头的那串字符。如果你只是先验证模型能不能通可以去模型对话页面发一句“只回复 ok”如果你准备长期跑 Agent、定时任务和 coding workflow可以看 Coding Plan。接入排障和参数细节优先看接入文档。注意Key 不要写进公开仓库也不要贴在 SOUL.md、skill 源码或飞书机器人配置里。OpenClaw 本地运行时优先放~/.openclaw/.env。2.2 创建 Key 与确认 Base URL创建 Key 的入口建议直接用https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentcsdn_rewriteutm_campaignrewrite 。进去后新建一个 Key命名成openclaw-agent之类方便后面轮换。复制后先放本地文本里等会儿写入环境变量。Base URL 必须确认成https://taotoken.net/api不要自己加/v1也不要在后面加斜杠。OpenClaw 或 OpenAI 兼容 SDK 通常会自动补/v1/chat/completions。如果你填成https://taotoken.net/api/v1有些版本会拼成/api/v1/v1/chat/completions然后报 404。接入文档在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentcsdn_rewriteutm_campaignrewrite 。3. 可复制配置在 OpenClaw 里把模型通道切到 TaoToken3.1 环境变量写法先进入 OpenClaw 配置目录备份旧文件。下面命令适用于 Linux、macOS 和 Windows WSL 环境。原生 Windows 可以在 PowerShell 里对应设置用户环境变量但路径仍是%USERPROFILE%\.openclaw。cd ~/.openclaw cp config.yaml config.yaml.bak cp .env .env.bak 2/dev/null || true把 TaoToken Key 写入.envcat .env EOF TAOTOKEN_API_KEYsk-你的TaoTokenKey OPENCLAW_LLM_BASE_URLhttps://taotoken.net/api OPENCLAW_LLM_API_KEY${TAOTOKEN_API_KEY} OPENCLAW_LLM_MODELgpt-4o-mini EOF这里的OPENCLAW_LLM_MODEL只是示例实际模型名以你在 TaoToken 控制台或模型对话页面看到的可用模型为准。不要凭记忆写一个不存在的模型名否则 OpenClaw 会在第一次工具调用后报模型不存在。3.2 config.yaml 写法然后修改~/.openclaw/config.yaml把 LLM 段指向 TaoToken。不同 OpenClaw 版本字段名可能略有差异核心是 provider、base_url、api_key、model 四项。llm: provider: openai-compatible base_url: https://taotoken.net/api api_key: ${OPENCLAW_LLM_API_KEY} model: gpt-4o-mini timeout: 120 max_retries: 2 max_concurrency: 2provider选openai-compatible因为 TaoToken 走 OpenAI 风格接口。timeout建议先给 120 秒长会话里工具返回内容多太短容易误判超时。max_concurrency不要开太高收盘后多个技能同时触发模型请求时并发过高容易撞到限流。max_retries给 2 次即可再多会拖长整个 cron 任务。3.3 技能侧统一引用接下来检查 akshare-data、tavily-search、stock-watcher、self-improving-agent 是否各自带了 LLM 配置。如果某个技能目录下有.env或config.yaml单独写死了 Key把它改成引用同一个变量# 在技能目录里查找旧的 Key 或 Base URL grep -R API_KEY\|BASE_URL\|OPENAI ~/.openclaw/skills/akshare-data \ ~/.openclaw/skills/tavily-search \ ~/.openclaw/skills/stock-watcher \ ~/.openclaw/skills/self-improving-agent 2/dev/null发现旧值后统一替换成api_key: ${OPENCLAW_LLM_API_KEY} base_url: https://taotoken.net/apiTavily Search 自己的TAVILY_API_KEY仍然保留它负责搜索不负责大模型推理。别把 Tavily Key 和 TaoToken Key 混在一起。改完后重启网关openclaw gateway restart openclaw config get llm如果openclaw config get llm输出里能看到base_url: https://taotoken.net/api说明 Harness 层已经读到新配置。4. 验证请求与成功结果先 curl再跑最小 Agent4.1 用 curl 验证 TaoToken Key在跑完整工作流之前先用一条 curl 确认 Key、Base URL、模型名三者匹配。这样能把错误范围缩小到 API 层而不是 OpenClaw 编排层。curl -sS https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: gpt-4o-mini, messages: [{role: user, content: 只回复 ok}], max_tokens: 16 }如果返回 JSON 里出现choices并且内容接近ok说明模型通道已经通。如果返回 401优先查 Key 是否复制完整、是否在 TaoToken 后台被禁用。如果返回 404优先查 Base URL 是不是多写了/v1。如果返回 429说明当前 Key 或并发触发了限流先把max_concurrency降到 1。4.2 跑最小 OpenClaw AgentAPI 通后用 OpenClaw 跑一个最小任务只调两个工具确认长会话里的模型调用也走 TaoToken。openclaw agent run A-Share-Investment-Agent \ --prompt 调用 akshare-data 查询 600519 最近5个交易日收盘价再调用 tavily-search 检索一条相关新闻最后用两行输出执行后观察日志。成功时日志里会出现类似字段provideropenai-compatible base_urlhttps://taotoken.net/api toolakshare-data statusok tooltavily-search statusok agent A-Share-Investment-Agent statuscompleted如果工具调用顺序正常但模型输出为空通常是max_tokens太小或模型名不对。如果 akshare-data 成功、tavily-search 成功但最后汇总时报 401说明技能侧还在读旧 Key回到 3.3 节重新清理。4.3 成功结果长什么样一个稳定的每日工作流最后应该能输出类似结构第一段写市场温度比如指数涨跌、成交额变化第二段写自选股异动比如哪只放量、哪只跌破均线第三段写情报摘要比如当天新闻里与持仓相关的两条第四段写风险提示只提示风险不写买卖指令。你可以在SOUL.md里把步骤写清楚但不要写具体股票推荐。# A-Share Daily Agent ## 身份 你是本地投研助手只做信息聚合与风险提示不给买卖指令。 ## 每日收盘后流程 1. akshare-data 拉取自选股日线与成交量。 2. tavily-search 检索当日财经要闻。 3. stock-watcher 标记涨跌幅或量能异动。 4. 汇总为三段市场温度、自选异动、风险提示。 5. 通过飞书 webhook 发送。这份 SOUL.md 只定义任务顺序不绑定模型 Key。模型 Key 由 OpenClaw 的全局 LLM 配置统一提供这样 self-improving-agent 在反思时也会走同一个 TaoToken 通道。cron 可以放在收盘后0 16 * * 1-5 /usr/local/bin/openclaw agent run A-Share-Investment-AgentWindows 任务计划程序里对应执行openclaw agent run A-Share-Investment-Agent触发时间设成工作日 16:05 左右给数据源留几分钟更新时间。5. 本篇常见错排查401、404、429 与技能抢 Key5.1 常见报错对照表现象可能原因处理401 invalid api keyKey 复制带空格或技能读了旧 Key重新在 API Keys 页面生成检查Authorization: Bearer404 /v1/chat/completionsBase URL 填成https://taotoken.net或多了/v1统一填https://taotoken.net/api429 rate limit长会话并发太高或多个技能同时请求降低max_concurrency增加重试退避model not found模型名与控制台可用列表不一致去模型对话页面确认模型名工具成功但汇总失败技能侧单独写死了旧 LLM Key清理技能目录.env统一引用${OPENCLAW_LLM_API_KEY}配置改了但不生效没重启 gateway或.env有多份重复值重启后执行openclaw config get llm5.2 排查命令先跑 OpenClaw 自检openclaw doctor再全局搜索旧 Key 和旧 Base URLgrep -R TAVILY_API_KEY\|OPENCLAW_LLM\|OPENAI_API_KEY\|BASE_URL \ ~/.openclaw/.env \ ~/.openclaw/config.yaml \ ~/.openclaw/skills 2/dev/null如果发现同一个变量出现多次保留最新 TaoToken 值删掉旧值。尤其是OPENAI_API_KEY、OPENAI_BASE_URL这类通用变量很多技能会优先读它们。你可以在技能配置里显式覆盖成OPENCLAW_LLM_API_KEY和https://taotoken.net/api减少优先级混乱。排障和接入优先看 API Keys 与接入文档https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentcsdn_rewriteutm_campaignrewrite 和 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentcsdn_rewriteutm_campaignrewrite 。验证模型直接去模型对话https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentcsdn_rewriteutm_campaignrewrite 。6. 语义一致 CTA把 Key 统一到 TaoToken让 Agent 跑完闭环当你把 OpenClaw 的 LLM 配置统一成 TaoToken长会话里的模型调用就不再散落在各个技能里。akshare-data 负责采集tavily-search 负责情报stock-watcher 负责异动self-improving-agent 负责复盘Harness 负责编排模型通道只认一个 Base URLhttps://taotoken.net/api。后面再装新技能也只需要引用OPENCLAW_LLM_API_KEY不用重新改一遍所有配置文件。如果你要验证模型是否可用先去模型对话页面发一句测试https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentcsdn_rewriteutm_campaignrewrite 。如果你准备长期跑 coding 或 Agent 工作流可以看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcsdn_rewriteutm_campaignrewrite 。需要管理 Key、查看用量或轮换密钥走 Consolehttps://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentcsdn_rewriteutm_campaignrewrite 。Claude Code 或 Anthropic 风格接入参考https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentcsdn_rewriteutm_campaignrewrite 。我试过把每日任务拆成“先 curl 验 Key再openclaw gateway restart最后openclaw agent run A-Share-Investment-Agent --dry-run看工具顺序”这三步。只要 curl 返回正常、config 里 base_url 是https://taotoken.net/api、技能目录没有旧 Key收盘后的数据采集、新闻检索、异动分析和飞书发送就能串成一条完整链路。接下来你可以先跑最小 Agent再把 cron 时间放到 16:05观察日志里是否还有 401 或 404。