06|工具集详解:exec、browser、message 核心工具与 TaoToken 统一调用实践

发布时间:2026/10/1 15:19:38
06|工具集详解:exec、browser、message 核心工具与 TaoToken 统一调用实践 1. 为什么我把 exec、browser、message 拆开又合起来用如果你正在搭 AI 工作流大概率会遇到一个很具体的麻烦模型能聊天但干不了活。让它查个网页它给你一段“你可以打开浏览器访问……”让它跑个脚本它回你一段伪代码让它发通知它说“请手动复制到群里”。exec、browser、message 这三类核心工具就是用来把“能说”变成“能做”的。exec 负责在本机执行 Shell 命令跑脚本、处理文件、调 Git、起服务都靠它browser 负责控制浏览器打开页面、点击按钮、填表单、抓内容message 负责把结果送到飞书、Discord、Slack、钉钉、Telegram 这些地方。三者串起来就是一条“采集 → 处理 → 通知”的自动化链路。适合谁看如果你写过一点 Python 或 Shell想让 AI 帮你把重复操作接起来这篇就是给你准备的。我试过把日报流程从手动 30 分钟压到一条指令触发中间踩的坑基本都在下面。真正麻烦的不是单个工具怎么调而是调用入口太散exec 用一套 Keybrowser 又配一套message 再配一套换模型还得改一遍。所以这篇除了讲三个工具本身还会讲怎么用 TaoToken 统一 Key/API 通道把入口收拢配置片段可以直接复制。2. TaoToken 统一调用入口一个 Key 管住 exec/browser/message 的模型调用先说清楚 TaoToken 在这里的角色。它不是替代 exec、browser、message 这些工具本身而是统一这些工具背后“要调模型”的那一层。exec 要判断命令怎么写、browser 要决定点哪个元素、message 要组织卡片内容这些都需要模型推理如果每个工具各配一个供应商、各存一个 Key维护成本会很高。TaoToken 提供的是统一的 API 通道官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。你只需要在配置里写一次 Base URL 和 Keyexec、browser、message 三条链路都走同一个入口。这样换模型、加额度、排查问题都只在一个地方动。具体操作上先去控制台建 Key。打开 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 在 API Keys 页面创建一个新 Key复制出来。这个 Key 就是后面所有配置里填的那一个。如果你还没决定用哪个模型可以先去模型对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 试一下响应速度和风格确认合适再写进配置。这里有个关键点Base URL 要写成 https://taotoken.net/api 不要带多余的路径后缀。很多 401 报错就是因为把 Base URL 写成了带 /v1 或带具体端点的形式。Key 用刚才复制的那串Model ID 填你在模型对话里验证过的那个名称三者必须成套出现缺一个都会连不上。对于长期跑编码或 Agent 任务的场景可以考虑 Coding Plan入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。它的意义是把额度管理和调用入口进一步收拢适合 exec 频繁起进程、browser 反复抓页面的高频工作流。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 遇到参数不确定时以文档为准。把入口统一之后exec、browser、message 的配置里就只出现一个 Base URL 和一个 Key。下面进入具体配置。3. 可复制配置exec、browser、message 三件套怎么写这一节给的是能直接抄的片段。核心原则是Base URL、Key、Model ID 三件套在每一处都写全不要靠“继承”或“默认值”猜。先看环境变量文件.env放在项目根目录# TaoToken 统一入口 TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_API_KEYsk-你的Key TAOTOKEN_MODEL_ID你的模型ID # exec 相关 EXEC_DEFAULT_TIMEOUT30000 EXEC_WORKDIR/path/to/project # browser 相关 BROWSER_HEADLESStrue BROWSER_PATH/usr/bin/chromium # message 相关 FEISHU_APP_IDcli_xxx FEISHU_APP_SECRETxxx然后是工具集的 JSON 配置文件名用tools.config.json{ provider: { baseUrl: https://taotoken.net/api, apiKey: ${TAOTOKEN_API_KEY}, modelId: ${TAOTOKEN_MODEL_ID} }, tools: { exec: { enabled: true, timeout: 30000, workdir: /path/to/project, security: allowlist }, browser: { enabled: true, headless: true, browserPath: /usr/bin/chromium }, message: { enabled: true, channels: { feishu: { appId: ${FEISHU_APP_ID}, appSecret: ${FEISHU_APP_SECRET} } } } } }如果你用的是 TOML 风格配置等价写法如下[provider] base_url https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} model_id ${TAOTOKEN_MODEL_ID} [tools.exec] enabled true timeout 30000 workdir /path/to/project security allowlist [tools.browser] enabled true headless true browser_path /usr/bin/chromium [tools.message] enabled true注意security allowlist这个值。它表示 exec 只执行白名单里的命令白名单写在AGENTS.md里。这是防止误删文件的第一道闸。白名单片段## Command Allowlist ### Safe Commands - git status, git log, git diff - ls, pwd, cat, grep, find - python, pip install ### Elevated Commands - apt-get, docker ### Blocked Commands - rm -rf / - dd, mkfs配置写完后检查三件事Base URL 是不是https://taotoken.net/apiKey 是不是从控制台复制的那串Model ID 是不是在模型对话里验证过的。三件套齐了再往下走。4. 端到端验证一条命令跑通采集→处理→通知配置对不对跑一次就知道。下面这条链路是browser 打开一个页面抓数据exec 跑脚本处理message 把结果发到飞书。每一步都给可复制的调用。第一步browser 打开页面并抓内容// 打开目标页面 browser(actionnavigate, urlhttps://example.com/list) // 等待页面加载 browser(actionact, selectorbody, kindwait, timeMs2000) // 抓取列表项 browser(actionact, kindevaluate, fn() { const items document.querySelectorAll(.item); return Array.from(items).map(i ({ title: i.querySelector(.title).textContent, value: i.querySelector(.value).textContent })); })第二步把抓到的数据交给 exec 处理。先把上一步返回的 JSON 存成文件再跑脚本# 保存抓取结果 echo [{title:A,value:1},{title:B,value:2}] raw.json # 用 exec 跑处理脚本 exec(commandpython process.py --input raw.json --output report.csv, workdir/path/to/project, timeout60000)process.py里做的是清洗和汇总输出report.csv。这一步验证的是 exec 能不能正确读到文件、能不能在指定 workdir 下执行。第三步message 把结果发出去message(actionsend, channelfeishu, targetoc_xxxxxxxx, message日报已生成, filePath/path/to/project/report.csv)如果三步都返回成功说明 exec、browser、message 三条链路都通了而且它们背后走的是同一个 TaoToken 入口。验证成功的标志是飞书群里收到带附件的消息附件内容和你本地report.csv一致。想单独验证模型通道是否正常可以去模型对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 发一条消息能正常回复就说明 Key 和 Base URL 没问题。如果那边正常、这边报错问题就在工具配置而不是通道。5. 常见报错排查401、local proxy failed、reading choices、OAuth这一节按真实报错来对。遇到问题先看报错原文再对号入座。401 Unauthorized。最常见的原因是 Key 写错或 Base URL 写错。检查.env里的TAOTOKEN_API_KEY是不是从控制台复制的完整串TAOTOKEN_BASE_URL是不是https://taotoken.net/api。如果 Key 没问题去控制台 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 确认这个 Key 还在、额度没用完。三件套里 Model ID 填错有时也会表现成 401一并检查。local proxy failed。这个报错通常出现在 browser 或 exec 起子进程时环境变量没传进去。解决方法是确认.env在项目根目录且工具启动时加载了它。如果用的是 TOML 配置检查api_key ${TAOTOKEN_API_KEY}这种引用有没有被正确展开。手动在终端export TAOTOKEN_API_KEY...再跑一次能通就说明是加载顺序问题。reading choices 相关报错。这类报错一般是模型返回结构不符合预期常见于 Model ID 填了一个不支持当前调用方式的模型。回到模型对话页面确认这个 Model ID 能正常对话再写进配置。如果 exec 和 browser 用的是同一个 Model ID但只有其中一个报错检查那个工具的请求参数里有没有多余的字段。OAuth 相关报错。如果你在接 Claude Code 或类似工具时看到 OAuth 字样说明认证方式选错了。这类场景应该用 API Key 方式Base URL 填https://taotoken.net/apiKey 填控制台创建的 Key不要走 OAuth 流程。接入文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里有对应的配置示例。还有一个容易忽略的exec 报“文件不存在”但文件确实在。这基本是 workdir 没指定对。在 exec 调用里显式写workdir/path/to/project不要依赖默认目录。排查顺序建议先确认三件套Base URL Key Model ID再确认工具自身配置最后看网络和权限。大部分问题在前两步就能定位。6. 把入口收拢之后工作流才真正可维护exec、browser、message 这三个工具单独用都不难难的是它们背后的模型调用入口散落在各处。今天换个模型要改三个地方明天加个额度要登三个后台这种工作流跑不长。用 TaoToken 把 Base URL 和 Key 统一之后配置里只出现一次入口换模型、查额度、排故障都只在一个地方动。如果你还在选模型阶段先去模型对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 试几条真实任务确认响应和风格合适再写进配置。如果准备长期跑编码或 Agent 任务Coding Plan 入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 适合高频调用场景。Key 在控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 创建接入细节以文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 为准。最后给一个实用技巧把.env和tools.config.json一起纳入版本管理时Key 用环境变量引用不要写死。这样换 Key 只改.env一处配置片段可以原样复用。