Function Calling、MCP、Skills 到底怎么选?Agent 模型通道改走 TaoToken 再跑流程验证
在把 MCP Server 接到 Claude Code,或者写 SKILL.md 让模型按固定流程执行时,很多人先怀疑协议、schema 或权限,却忽略了模型通道本身是否可用。TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 提供模型通道的 Key 和 Base URL,但它不替代 Function Calling、MCP 或 Skills 的工作。请求如果打到错误 Base URL、Key 没生效,Function Calling 不会返回 tool_calls,Skills 的 load_skill 也不会被触发。先把 TaoToken 的 Key 和 Base URL 配好,再去区分 Function Calling、MCP、Skills 的选型,会少走很多弯路。API 地址填 https://taotoken.net/api,注意不带 /v1,也不加 UTM。接下来用天气查询 tool_calls 和 SKILL.md 加载流程做验证,看请求能否通、tool_calls 能否正常返回。
一、原问题与场景:Function Calling、MCP、Skills 不是同一层,SKILL.md 跑不通先查模型通道
Function Calling、MCP、Skills 经常被放在一起讨论,但它们并不是互相替代的三个工具。更准确地说,Function Calling 是模型侧的原子能力:模型把用户的自然语言意图转换成结构化的函数调用,典型表现就是返回带 tool_calls 的 JSON。MCP 解决的是异构系统接驳问题:它提供一套标准化协议,让 LLM 或 Agent 客户端能以统一方式连接外部数据源和已有系统。Skills 更偏流程编排:用文字、Markdown、脚本和资源文件定义任务流程,再通过 Function Calling 去加载 SKILL.md,让模型按文档里的步骤执行。
这三者的选型并不复杂。简单 API 调用优先用 Function Calling,比如查天气、算汇率、查订单状态。需要接已有系统时用 MCP,比如接公司知识库、Jira、数据库、GitHub、Slack 这类已经存在的服务。面对强流程任务时用 Skills,比如发版、合规检查、代码审查、数据分析 SOP。真正容易踩坑的地方在于:无论你选哪一种,只要涉及模型决策,就会产生模型请求,而模型请求本身要消耗 Token。原文讲了概念和选型,但没有给模型通道的准备步骤。接 MCP Server 或写 SKILL.md 跑流程时,如果模型通道没配好,就会出现请求超时、401、404、tool_calls 不返回、SKILL.md 不加载等现象。
如果你用 Claude Code 或 Codex 做 MCP、Skill 实验,需要把模型通道单独配好。Claude Code 关注 settings.json 里的 ANTHROPIC_* 变量,Codex 关注 config.toml 里的 model_provider 和 base_url。以 TaoToken 为例,Base URL 填 https://taotoken.net/api,Key 用刚创建的 YOUR_API_KEY。TaoToken 只提供模型通道的 Key 和 Base URL,不替代 Function Calling、MCP 或 Skills 本身。MCP Server 仍然要你自己接,SKILL.md 仍然要你自己写,tools schema 仍然要你自己定义。把模型通道准备好之后,再跑原文里的天气查询 tool_calls JSON 或 SKILL.md 加载流程,验证请求能通、tool_calls 能正常返回。
二、TaoToken 前置:只提供模型通道的 Key 与 Base URL
TaoToken 在这类实验里的角色很明确:提供模型请求所需的 Key 和 Base URL。它不是 MCP Server,也不是 Skills 运行时,更不是 Function Calling 的实现方。你需要先到官网注册并创建 Key:
官网注册入口:
https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
创建 Key 后,在支持 Function Calling 的客户端里填入:
- Base URL:https://taotoken.net/api
- API Key:YOUR_API_KEY
- 模型 ID:按你在 TaoToken 控制台实际可用的模型填写,本文用 MODEL_ID 代指
注意两个细节。第一,Base URL 不要写成 https://taotoken.net/api/v1,很多 OpenAI 兼容客户端会自动拼接 /v1/chat/completions,你多写一层会导致路径重复,出现 404。第二,Base URL 不要带 UTM 参数,UTM 用于网页跳转统计,不适合作为 API 基础地址。Key 则使用你在控制台新建的那一个,不要继续用示例里的 YOUR_API_KEY。
如果你只是验证 Function Calling,可以在通用 OpenAI 兼容客户端里设置环境变量。如果你用 Claude Code 做 MCP、Skill 实验,就改 settings.json 中的 ANTHROPIC_* 配置。如果你用 Codex,就改 config.toml。Cline、CC Switch 或其他支持自定义 Base URL 的客户端,逻辑相同:找到模型提供商设置,把 Base URL 指向 https://taotoken.net/api,把 API Key 换成刚创建的 Key。TaoToken 不替代编辑器,也不替代 Agent 框架,它只负责让模型请求有可用的通道。
三、可复制配置:settings.json、config.toml 与 SKILL.md 示例
先给通用环境变量配置。很多支持 Function Calling 的 SDK 和 CLI 都会读取 OPENAI_BASE_URL 与 OPENAI_API_KEY:
export OPENAI_BASE_URL="https://taotoken.net/api" export OPENAI_API_KEY="YOUR_API_KEY"请求时用${OPENAI_BASE_URL}/v1/chat/completions,也就是 https://taotoken.net/api/v1/chat/completions。Base URL 本身仍然保持不带 /v1。
如果你用 Claude Code 做 MCP 和 Skill 实验,可参考~/.claude/settings.json:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_MODEL": "MODEL_ID" } }如果当前 Claude Code 版本读取的是ANTHROPIC_API_KEY,就把变量名替换成对应名称,值仍然是刚创建的 Key。JSON 文件不要写注释,变量名大小写也不要改错。改完后重启 Claude Code,避免旧环境变量被缓存。
如果你用 Codex,可参考~/.codex/config.toml:
model = "MODEL_ID" model_provider = "taotoken" [model_providers.taotoken] name = "TaoToken" base_url = "https://taotoken.net/api" env_key = "TAOTOKEN_API_KEY"然后设置环境变量:
export TAOTOKEN_API_KEY="YOUR_API_KEY"这里base_url同样不带 /v1,不加 UTM。model_provider和[model_providers.taotoken]的名称要一致,否则 Codex 可能找不到供应商配置。
Skills 实验需要准备一个 SKILL.md。它的 front matter 里name和description很关键,因为模型会依据这些元数据判断是否加载。下面是一个天气报告 Skill 示例:
--- name: weather-report description: 当用户询问某个城市某天天气时,按固定流程调用 get_weather 并生成简短报告 --- # weather-report 执行流程: 1. 从用户问题中提取城市和日期。 2. 调用 get_weather,参数为 city 和 date。 3. 如果缺少城市或日期,先向用户追问。 4. 拿到工具结果后,输出城市、日期、温度、天气和一条出行建议。当用户问“杭州明天天气怎么样”时,支持 Skills 的客户端会把 Skill 元数据放进上下文。模型判断需要该 Skill 后,会通过 Function Calling 调用类似load_skill(skill_name)的函数,把 SKILL.md 内容加载进当前上下文。之后模型再按文档步骤调用get_weather。整个过程依赖 Function Calling,而 Function Calling 的模型请求走的就是你刚配好的 TaoToken 通道。
MCP 实验同理。MCP Server 的注册方式取决于客户端,比如在 Claude Code 的 MCP 配置里声明 server 命令、参数和环境变量。但 MCP 只负责客户端与外部系统之间的 JSON-RPC 接驳,模型侧仍然要能返回 tool_calls。如果模型通道不通,MCP Server 即使启动成功,Agent 也无法完成工具调用。
四、验证请求:天气 tool_calls JSON 与 SKILL.md 加载结果
先验证 Function Calling。用 cURL 发一个带 tools 的请求:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $OPENAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "MODEL_ID", "messages": [ {"role": "user", "content": "帮我查一下杭州明天的天气"} ], "tools": [ { "type": "function", "function": { "name": "get_weather", "description": "查询指定城市指定日期的天气", "parameters": { "type": "object", "properties": { "city": {"type": "string", "description": "城市名"}, "date": {"type": "string", "description": "日期,如 tomorrow 或 2025-01-01"} }, "required": ["city", "date"] } } } ], "tool_choice": "auto" }'如果模型通道正常,并且模型支持 Function Calling,响应里应该出现tool_calls,而不是一段纯自然语言。期望结果类似:
{ "choices": [ { "message": { "role": "assistant", "content": null, "tool_calls": [ { "id": "call_weather_001", "type": "function", "function": { "name": "get_weather", "arguments": "{\"city\":\"杭州\",\"date\":\"tomorrow\"}" } } ] }, "finish_reason": "tool_calls" } ] }看到finish_reason为tool_calls,function.name为get_weather,就说明模型已经正确输出结构化调用。接下来你的应用要解析function.arguments,执行真实天气查询,再把结果以role: "tool"和对应tool_call_id回填给模型。模型收到工具结果后,才会生成最终回答。
再验证 SKILL.md 加载流程。你可以把 tools 里加入load_skill:
{ "type": "function", "function": { "name": "load_skill", "description": "按名称加载 SKILL.md,用于执行固定流程", "parameters": { "type": "object", "properties": { "skill_name": {"type": "string"} }, "required": ["skill_name"] } } }当用户请求匹配weather-report的 description 时,期望模型返回:
{ "tool_calls": [ { "id": "call_skill_001", "type": "function", "function": { "name": "load_skill", "arguments": "{\"skill_name\":\"weather-report\"}" } } ], "finish_reason": "tool_calls" }客户端解析后读取 SKILL.md,把内容注入上下文。如果 SKILL.md 里定义了get_weather调用步骤,后续模型还会继续输出天气查询的 tool_calls。成功标志是:请求能通、tool_calls 正常返回、SKILL.md 能被加载、后续工具调用能按流程继续。选型仍然照原文:简单 API 用 Function Calling,接既有系统用 MCP,强流程任务用 Skills。
五、本篇常见错排查:Base URL、tool_calls、skills 加载失败
第一,Base URL 多写 /v1。配置里应填 https://taotoken.net/api,请求路径由客户端拼接。如果填成 https://taotoken.net/api/v1,再拼一次 /v1/chat/completions,就会出现重复路径和 404。
第二,Key 没有替换。YOUR_API_KEY只是占位符,必须换成 TaoToken 控制台新建的 Key。401 或 invalid api key 通常先查这里。
第三,Claude Code settings.json 语法错误。JSON 不支持注释和尾逗号,ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN等变量名要按客户端版本文档写。改完要重启客户端。
第四,Codex config.toml 中 provider 名称不一致。model_provider = "taotoken"必须对应[model_providers.taotoken]。env_key指定的环境变量也要提前 export。
第五,模型通道没带 tools。Function Calling 需要请求体里有 tools 定义。没有 tools 时,模型可能只返回自然语言,不会出现 tool_calls。
第六,工具结果回填错误。执行完函数后,回填消息要用role: "tool",并带上原来的tool_call_id。如果当成普通 user 消息回填,模型可能无法继续流程。
第七,SKILL.md 的 description 太模糊。描述里要写清触发条件,例如“当用户询问某城市某天天气时”。如果描述太泛,模型可能不触发load_skill。
第八,MCP Server 启动成功但模型通道不通。MCP 只解决客户端到外部系统的接驳,模型请求仍要经过 TaoToken 或其他模型通道。MCP Server 日志正常,不代表 tool_calls 会正常返回。
第九,Base URL 带 UTM。API 基础地址不要带utm_source、utm_content等参数,网页官网链接可以带,API 地址保持干净。
第十,客户端缓存旧配置。环境变量、settings.json、config.toml 改完后,最好重启 Claude Code、Codex、Cline 或 CC Switch,再发一次天气 tool_calls 验证请求。
六、CTA:按排障、验证模型与长期 Agent 分流
如果你的问题集中在 settings.json、config.toml、CC Switch、Cline 或 MCP/Skills 接入排障,先检查 API Key 和接入文档。API Keys 页面:
https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite
接入文档入口:
https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite
如果你只是先验证模型能否正常返回 tool_calls、SKILL.md 能否触发加载,去模型对话里发一条带工具的测试请求:
https://taotoken.net/console/chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite
如果你准备把 MCP、Skills 放进长期编码或 Agent 工作流,关注 Coding Plan:
https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite
还没有 Key 的话,从官网注册并创建:
https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=
拿到 Key 后,把 Base URL 填成 https://taotoken.net/api,Key 填 YOUR_API_KEY 对应的实际值,再跑一遍天气查询 tool_calls JSON 或 SKILL.md 加载流程。选型不变:简单 API 用 Function Calling,接既有系统用 MCP,强流程任务用 Skills。TaoToken 只负责模型通道,Function Calling、MCP、Skills 的实验和流程仍然由你的客户端、MCP Server 与 SKILL.md 共同完成。