1. 从「帮我炒股」到飞书日报:OpenClaw Agent 的真实落地场景
很多人第一次听到 OpenClaw 配 TaoToken 做炒股 Agent,脑子里浮现的是「AI 自动下单、躺着赚钱」。先把预期拉回来:这套链路能帮你做的是行情采集、技术面分析、策略汇总、日报推送,它不碰你的交易账户,也不替你做买卖决策。适合谁?适合每天想看一份结构化行情日报、又不想手动翻十几个页面的开发者;适合已经在用 OpenClaw 跑 Agent、想接一个真实数据场景练手的人;也适合想把「多 Agent 协作」从概念跑成闭环的团队。
核心检索词先摆清楚:OpenClaw 是一个支持 Skill 扩展的 Agent 运行框架,TaoToken 提供统一的 Key/API 通道,stock-analyzer 是我们要接入的行情分析 Skill,飞书 Webhook 是最终消息落地的出口。整条链路是:OpenClaw 加载 stock-analyzer Skill → 通过 TaoToken 统一通道调用模型 → 模型输出分析结果 → Agent 组装成日报 → POST 到飞书机器人 Webhook → 你手机收到消息。
我试过把四个角色塞进一个 Skill 里,结果那个 Skill 又呆又慢,分析质量也差。后来拆成采集、分析、策略、播报四段,每段职责单一,输出格式固定,整条链路才稳。这篇就按这个拆法,给你 config.toml 骨架、Skill 配置、飞书 Webhook 参数,以及一次可复现的行情查询验证动作。
2. TaoToken 前置:统一 Key 与 API 通道怎么准备
TaoToken 在这套链路里的角色是「统一入口」。你不用为每个模型、每个 Skill 单独维护一套鉴权,OpenClaw 里所有 Agent 的模型调用都走同一个 API 通道,Key 也只管一份。这对多 Agent 场景特别重要——四个 Agent 如果各自配 Key,轮换和排障会让人崩溃。
先拿到你的 Key。访问控制台创建:
https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=console创建后在 API Keys 页面复制,注意它只完整显示一次:
https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=api-keysAPI 基地址统一用:
https://taotoken.net/api这个地址不加任何 UTM 参数,直接写进配置即可。接入文档在这里,遇到字段疑问先查它:
https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=doc注意:Key 不要硬编码进 Skill 的 Markdown 或提交到 Git。用环境变量注入,OpenClaw 启动时读取。这是最低限度的安全习惯。
如果你后面要跑长期编码或 Agent 常驻任务,可以了解 Coding Plan,它更适合高频调用的场景:
https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding-plan3. 可复制配置:config.toml 与 stock-analyzer Skill 骨架
3.1 config.toml 骨架
OpenClaw 的模型通道配置写在 config.toml 里。下面这份是能直接改用的骨架,重点看[model]和[skills]两段:
# ~/.openclaw/config.toml [model] provider = "taotoken" base_url = "https://taotoken.net/api" api_key = "${TAOTOKEN_API_KEY}" # 从环境变量读取 default_model = "claude-sonnet-4-20250514" timeout_seconds = 120 max_retries = 3 [agent] name = "stock-team" workspace = "./workspace/stock" log_level = "info" [skills] enabled = ["stock-analyzer"] skill_dir = "./skills" [skills.stock-analyzer] schedule = "0 30 9 * * *" # 每天 09:30 触发 timezone = "Asia/Shanghai" feishu_webhook = "${FEISHU_WEBHOOK_URL}" watch_list = ["300750", "603019", "600036", "600519", "002594"]环境变量在启动前导出:
export TAOTOKEN_API_KEY="sk-你的Key" export FEISHU_WEBHOOK_URL="https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx"3.2 stock-analyzer Skill 骨架
Skill 目录结构建议这样组织,四个角色各一个文件,避免单文件膨胀:
skills/stock-analyzer/ ├── SKILL.md ├── collector.md ├── analyst.md ├── strategist.md └── reporter.mdSKILL.md 负责声明协作流程,把四个子角色串起来:
--- name: stock-analyzer description: A股行情采集、技术分析、策略汇总并推送飞书日报 version: 1.0.0 entry: collector pipeline: - collector - analyst - strategist - reporter --- # stock-analyzer ## 协作规则 1. collector 完成后,将结构化行情数据传给 analyst 2. analyst 输出技术面结论,传给 strategist 3. strategist 输出选股与风险建议,传给 reporter 4. reporter 组装日报,POST 到飞书 Webhook ## 安全约束 - 禁止调用任何交易下单接口 - 所有输出必须附带风险提示 - 数据仅用于分析展示,不构成投资建议collector.md 定义采集员的输入输出,关键是输出必须是结构化 JSON,否则下游解析会崩:
--- role: collector input: watch_list output: market_snapshot.json --- # 数据采集员 ## 职责 抓取 watch_list 中标的的行情数据:最新价、涨跌幅、成交量、换手率、均线位置。 ## 输出格式 ```json { "date": "2026-03-22", "index": {"sh": "+0.85%", "cyb": "+0.67%"}, "stocks": [ {"code": "300750", "name": "宁德时代", "price": 0, "change": "0%", "volume": 0} ] }约束
- 数据缺失时字段填 null,不要编造
- 采集失败重试 2 次后上报错误
analyst.md 和 strategist.md 同理,各自声明 `input` 和 `output`。reporter.md 里写飞书推送逻辑: ```markdown --- role: reporter input: strategy_result.json output: feishu_message --- # 日报播报员 ## 职责 将策略结果组装为飞书富文本消息,POST 到 config.toml 中配置的 feishu_webhook。 ## 消息模板 标题: {date} 股票日报 正文:市场概览 + 选股列表 + 技术面 + 风险提示 ## 约束 - 单条消息不超过 4000 字符 - 必须包含「不构成投资建议」声明3.3 飞书 Webhook 参数
飞书自定义机器人的 Webhook 地址形如:
https://open.feishu.cn/open-apis/bot/v2/hook/你的token推送时用 POST,Content-Type 为application/json,最小可用 body:
{ "msg_type": "text", "content": { "text": " 2026-03-22 股票日报\n\n上证 +0.85%,创业板 +0.67%\n\n选股:宁德时代(买入)、中科曙光(买入)\n\n风险提示:仓位控制 60% 以内,不构成投资建议。" } }如果你想要卡片样式,把msg_type换成interactive,content换成卡片 JSON。先用 text 类型跑通,再升级样式,排障会简单很多。
4. 验证请求:一次可复现的行情查询动作
配置写完别急着等定时任务,先手动触发一次,确认整条链路通。用 curl 直接验证 TaoToken 通道是否可用:
curl -X POST "https://taotoken.net/api/v1/messages" \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "max_tokens": 512, "messages": [ {"role": "user", "content": "用一句话分析宁德时代当前技术面,输出JSON格式:{\"trend\":\"\",\"support\":\"\",\"resistance\":\"\"}"} ] }'返回里能看到模型输出,说明 Key 和通道没问题。接着手动跑一次 Skill:
openclaw skill run stock-analyzer --once --verbose--once表示立即执行一次不走定时,--verbose打印每个 Agent 的输入输出。正常的话你会看到四段日志依次出现:collector 输出 JSON、analyst 输出技术面、strategist 输出选股、reporter 推送成功。
飞书那边应该收到一条消息,内容类似:
2026-03-22 股票日报 市场概览:上证 +0.85%,创业板 +0.67%,热点在 AI 算力与新能源。 选股建议: - 宁德时代(买入):放量突破,新能源龙头 - 中科曙光(买入):AI 算力核心标的 - 招商银行(买入):估值修复,波动较小 - 贵州茅台(观望):估值偏高,等回调 - 比亚迪(观望):短期涨幅偏大 技术面:趋势震荡上行,支撑 3200,压力 3300,量能温和放大。 风险提示:仓位控制 60% 以内,注意外资流向。本内容不构成投资建议。收到这条消息,闭环就算跑通了。想单独验证模型对话效果,可以用模型对话页面直接测:
https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=chat5. 本篇常见错排查
5.1 401 Unauthorized:Key 没读到
最常见的原因是环境变量没导出,或者 config.toml 里写的是字面量${TAOTOKEN_API_KEY}但启动进程没继承环境。检查方式:
echo $TAOTOKEN_API_KEY如果为空,说明当前 shell 没导出。写进~/.bashrc或~/.zshrc后重新 source。另外确认 Key 没有多余空格,复制时容易带上换行。
5.2 Skill 加载失败:目录或 frontmatter 问题
报skill not found时,先确认skill_dir路径是绝对路径还是相对路径。相对路径是相对于 OpenClaw 启动目录,不是 config.toml 所在目录。再检查 SKILL.md 的 frontmatter 是否合法,pipeline里的角色名必须和文件名去掉.md后一致,大小写敏感。
5.3 飞书收不到消息:Webhook 或格式问题
先单独测 Webhook:
curl -X POST "$FEISHU_WEBHOOK_URL" \ -H "Content-Type: application/json" \ -d '{"msg_type":"text","content":{"text":"test"}}'返回{"code":0}说明 Webhook 正常,问题在 reporter 的消息组装。常见坑是消息体里带了未转义的换行或引号,导致 JSON 解析失败。用jq校验一下再发:
echo "$MESSAGE_JSON" | jq .5.4 下游 Agent 解析失败:上游输出不是纯 JSON
collector 如果输出了「好的,以下是数据:{...}」这种带前后缀的内容,analyst 解析就会崩。解决办法是在 collector.md 里明确要求「只输出 JSON,不要任何解释文字」,并在 pipeline 里加一层校验。如果模型偶尔不听话,可以在 Skill 里加一个sanitize步骤,用正则提取第一个{到最后一个}之间的内容。
5.5 定时任务不触发:时区或 cron 表达式
0 30 9 * * *是六段式(秒 分 时 日 月 周),表示每天 09:30:00。如果你写的是五段式,OpenClaw 可能按不同解析器处理。另外确认timezone字段生效,否则可能按 UTC 跑,你会在下午才收到日报。
6. 把链路固定下来,然后持续迭代
跑通一次之后,建议先把--once手动模式用几天,观察输出质量再开定时。日报内容不用追求多专业,够用就行——市场概览、选股列表、技术面、风险提示四块齐全,你早上扫一眼就知道今天大概什么情况。
想继续深挖的话,两个方向:一是把 collector 的数据源换成更稳定的接口,减少字段缺失;二是给 strategist 加历史回看,让它参考前几天的判断做连续性分析。长期跑 Agent 任务的话,Coding Plan 在高频调用下更划算:
https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding-plan最后再强调一次那条底线:不要让 Agent 碰交易接口。分析归分析,下单归下单,这两件事之间的墙必须砌死。你给它清晰的策略,它帮你执行分析;你给它模糊的指令,它帮你精准地亏钱。市场明天还在,先把系统跑稳。