尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AI基础概念复习:Function Call、MCP、Skills与A2A的配置骨架与验证

AI基础概念复习:Function Call、MCP、Skills与A2A的配置骨架与验证 1. 从一次 Agent 调试说起四个概念到底卡在哪Function Call、MCP、Skills、A2A 这四个词几乎每个做 AI Agent 的人都会在两周内全部遇到。但真正让人卡住的不是概念本身而是把它们放进同一个工程里时不知道哪一层该配什么、哪一步该验证什么。我见过太多人把 MCP Server 配好了却不知道 Function Call 的 schema 长什么样把 Skills 写成了提示词却以为它在做工具调用听说 A2A 能多 Agent 协作结果连一个 Agent 的 tool 调用都没跑通。这篇不打算再讲一遍“LLM 和 Agent 有什么区别”这种入门对比。我们直接进入工程视角Function Call 是模型输出结构化调用的能力MCP 是把这种调用标准化成可复用服务的协议Skills 是注入到上下文里的领域经验模块A2A 是 Agent 之间互相委派任务的通信层。四者不是替代关系而是从“单次调用”到“工具生态”到“经验复用”再到“多体协作”的递进骨架。下面我会用 TaoToken 作为统一的 Key 和 API 通道把 Cline 和 CC Switch 两个客户端的配置骨架给出来然后逐项验证Function Call 能不能触发、MCP Server 能不能被发现、Skills 能不能被加载、A2A 的 Agent Card 能不能被读取。每一步都有可复制的配置和可观察的结果你跟着做就能确认自己的调用链路到底通没通。2. TaoToken 前置统一 Key 与 API 通道的准备在开始配 Cline 和 CC Switch 之前先把 TaoToken 的 Key 和接入地址准备好。这一步不做后面所有配置都会卡在 401 或连接超时上。TaoToken 在这里的角色是一个统一的 API 通道你不需要为每个模型厂商单独维护一套 Key 和 endpoint而是用同一个 Key 走同一个 base URL后面在 Cline 或 CC Switch 里切换模型时只改模型名不改接入层。这对复习 Function Call 和 MCP 特别有用因为你可以用同一套配置分别验证不同模型对 tool_calls 的支持情况。先到控制台创建 API Keyhttps://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentconsole创建时注意两点一是 Key 只在创建时完整显示一次复制后先存到本地临时文件二是如果你后面要跑 Cline 的 coding 场景建议单独建一个 Key 方便按项目排查调用量。Key 拿到后API 接入地址统一用https://taotoken.net/api这个地址不加 UTM 参数直接作为 base URL 填到客户端里。如果你用的是 OpenAI 兼容模式的客户端base URL 通常填https://taotoken.net/api/v1如果是 Anthropic 兼容模式则按客户端要求填对应的路径。具体以接入文档为准https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc注意不要把 Key 直接写进会提交到 Git 的配置文件里。Cline 的 settings.json 和 CC Switch 的 config.toml 都支持读环境变量后面配置里我会用占位符标出。3. 可复制配置骨架Cline 的 settings.json 与 CC Switch 的 config.toml这一节给出两个客户端的配置骨架。Cline 用 settings.jsonCC Switch 用 config.toml。两份配置都围绕同一个 TaoToken Key 和 API 地址区别在于 Cline 更偏向 VS Code 内的 Agent 编码场景CC Switch 更偏向多模型切换和 Claude Code 类工作流。3.1 Cline 的 settings.json 配置Cline 的配置核心是 API Provider、base URL、API Key 和模型名。如果你要用 Function Call 和 MCP还需要在 Cline 的设置里开启对应能力。下面是一个可复制的最小骨架{ cline.apiProvider: openai, cline.openAiBaseUrl: https://taotoken.net/api/v1, cline.openAiApiKey: ${env:TAOTOKEN_API_KEY}, cline.openAiModelId: claude-sonnet-4-20250514, cline.enableFunctionCalling: true, cline.mcpServers: { filesystem: { command: npx, args: [-y, modelcontextprotocol/server-filesystem, /Users/yourname/projects] } } }这里有几个关键点。cline.apiProvider设为openai表示走 OpenAI 兼容协议TaoToken 的/api/v1正好适配。cline.openAiApiKey用环境变量引用你在终端里export TAOTOKEN_API_KEY你的Key即可。cline.enableFunctionCalling打开后Cline 才会在请求里带上 tools 定义模型返回的 tool_calls 才会被解析。cline.mcpServers里我放了一个 filesystem 的 MCP Server 示例。这个 Server 的作用是让 Agent 能读写你指定目录下的文件。注意 args 里的路径要换成你自己的项目路径不要直接复制。MCP Server 的启动方式是npx所以本机需要有 Node.js 环境。如果你用的是 Claude Code 类工作流Cline 也支持 Anthropic 兼容模式这时 base URL 和模型名要按接入文档调整。配置骨架不变只改 provider 和 URL 路径。3.2 CC Switch 的 config.toml 配置CC Switch 的配置走 TOML 格式核心是定义 provider、API 地址、Key 和模型映射。下面是一个可复制的骨架default_provider taotoken [providers.taotoken] api_base https://taotoken.net/api api_key ${TAOTOKEN_API_KEY} model claude-sonnet-4-20250514 protocol anthropic [providers.taotoken.models] fast claude-haiku-4-20250514 balanced claude-sonnet-4-20250514 strong claude-opus-4-20250514 [mcp_servers.filesystem] command npx args [-y, modelcontextprotocol/server-filesystem, /Users/yourname/projects] [skills] enabled true paths [./skills/code-review.md, ./skills/sql-optimize.md]这份配置里protocol anthropic表示走 Anthropic 兼容协议适合 Claude Code 类客户端。models段做了三档模型映射方便你在不同任务间切换。mcp_servers段和 Cline 里的 MCP 配置逻辑一致只是 TOML 写法。skills段是 CC Switch 加载 Skills 的入口paths 指向本地的 Skill 文件。Skill 文件本身是 Markdown内容是你写的领域指令。比如一个 code-review.md 可以这样写# Code Review Skill 审查代码时按以下顺序检查 1. 安全性是否有硬编码密钥、SQL 注入风险、未校验的输入 2. 性能是否有 N1 查询、不必要的循环、未加索引的查询 3. 可读性命名是否清晰、函数是否过长、注释是否缺失 4. 输出格式按严重程度分级每条给出文件行号和修改建议这个文件被加载后Agent 在审查代码时会按这个流程走而不是随机给建议。这就是 Skills 和普通提示词的区别它是可复用、可版本管理的模块。4. 逐项验证Function Call、MCP、Skills、A2A 的调用链路确认配置写完不代表通了。这一节逐项验证四个概念对应的实际接入点。每个验证都有明确的输入和可观察的输出你照着做就能确认链路是否打通。4.1 验证 Function Call模型是否返回 tool_callsFunction Call 的验证最简单直接用 curl 发一个带 tools 定义的请求看模型返回里有没有tool_calls字段。curl -s https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-20250514, messages: [{role: user, content: 上海今天天气怎么样}], tools: [{ type: function, function: { name: get_weather, description: 获取指定城市的实时天气, parameters: { type: object, properties: { city: {type: string, description: 城市名称} }, required: [city] } } }] }如果 Function Call 链路正常返回的 JSON 里会有一个tool_calls数组里面包含function.name为get_weather、arguments为{city:上海}的结构。如果返回的是普通文本回答说明模型没有触发 Function Call检查两点一是模型名是否支持 tool use二是 tools 定义是否符合 OpenAI 兼容格式。这一步验证的是“模型能不能输出结构化调用指令”。注意模型不会真的去查天气它只输出“我想调用 get_weather参数是上海”。真正执行函数的是你的应用程序这是 Function Call 和 MCP 的分界点。4.2 验证 MCPServer 是否被发现、工具是否可调用MCP 的验证分两步先确认 Server 能启动再确认 Client 能发现工具。在 Cline 里配好mcpServers后打开 Cline 的 MCP 面板看 filesystem Server 是否显示为 connected。如果显示 failed先在终端手动跑一遍启动命令npx -y modelcontextprotocol/server-filesystem /Users/yourname/projects如果这个命令报错说明 Node 环境或包名有问题和 Cline 配置无关。如果命令能跑起来但 Cline 里连不上检查 settings.json 里的路径是否写错、npx 是否在 PATH 里。Server 连上后在 Cline 对话框里输入“列出我项目目录下的文件”观察 Cline 是否调用了 filesystem 工具。如果调用成功你会看到 Cline 显示“正在使用 filesystem 工具”然后返回目录列表。这一步验证的是 MCP 的完整链路Client 发现 Server、读取工具列表、发起调用、Server 执行、结果返回。MCP 和 Function Call 的关系在这里很直观MCP Server 对外暴露的工具最终还是会以 Function Call 的形式发给模型。区别在于Function Call 的工具定义是你手写的MCP 的工具定义是 Server 自动提供的而且可以跨客户端复用。4.3 验证 Skills上下文是否被注入、行为是否改变Skills 的验证靠行为对比。先在不加载 Skill 的情况下让 Agent 审查一段代码记录它的输出风格。然后在 CC Switch 里启用skills.paths指向的 code-review.md重启客户端再让 Agent 审查同一段代码。如果 Skills 生效你会看到输出结构发生变化从随机的建议变成按“安全性、性能、可读性”分层的审查每条带文件行号和修改建议。这个变化说明 Skill 文件的内容被加载到了上下文窗口里改变了 Agent 的思考方式。Skills 不调用外部服务它纯粹是上下文注入。所以验证时不需要看网络请求只看输出行为是否和 Skill 文件里定义的流程一致。如果没变化检查两点一是 Skill 文件路径是否正确二是客户端是否真的支持 Skills 加载。有些客户端把 Skills 叫成“自定义指令”或“系统提示词”本质一样但配置入口不同。4.4 验证 A2AAgent Card 是否可读取、任务是否可委派A2A 的验证比前三个复杂因为它涉及两个 Agent 之间的通信。最小验证方式是起一个支持 A2A 的 Agent暴露它的 Agent Card然后用另一个 Agent 去读取这张名片。Agent Card 是一个 JSON 文件通常挂在/.well-known/agent.json路径下。内容大致如下{ name: research-agent, description: 负责市场调研和数据收集, url: http://localhost:8001, capabilities: [web-search, data-extract], skills: [market-research, competitor-analysis] }验证时先用 curl 读取这张名片curl -s http://localhost:8001/.well-known/agent.json如果能返回完整的 JSON说明 Agent Card 暴露成功。然后在一个编排 Agent 里配置这个远程 Agent 的地址发起一个任务委派观察远程 Agent 是否收到任务并返回结果。这一步验证的是 A2A 的核心链路Agent 发现、任务创建、消息传递、结果返回。A2A 和 MCP 的配合关系在这里体现得很清楚编排 Agent 通过 A2A 把任务委派给研究 Agent研究 Agent 内部通过 MCP 调用搜索工具和数据库。A2A 管 Agent 之间的通信MCP 管 Agent 和工具之间的连接两层各司其职。5. 本篇常见错排查配置和验证过程中有几个错误反复出现。这里按现象、原因、处理方式列出来方便你对照排查。现象一curl 请求返回 401 或 403。原因通常是 Key 没读到或格式不对。检查$TAOTOKEN_API_KEY是否在当前 shell 里 export 过echo $TAOTOKEN_API_KEY看有没有输出。如果 Key 正确但仍 401检查 Authorization 头是不是Bearer开头中间有空格。现象二模型返回普通文本没有 tool_calls。原因可能是模型不支持 tool use或者 tools 定义格式不对。先换一个明确支持 Function Call 的模型名试比如 claude-sonnet 系列。如果换了模型还是不行检查 tools 数组里的type是否为functionparameters是否为合法 JSON Schema。现象三Cline 里 MCP Server 显示 connected但调用工具时报错。原因通常是 Server 的权限或路径问题。比如 filesystem Server 的路径指向了一个不存在的目录或者当前用户没有读写权限。先在终端手动跑 Server 启动命令确认能正常启动再检查路径。现象四Skills 加载后行为没变化。原因可能是 Skill 文件没被真正读取或者客户端不支持 Skills。检查配置文件里的路径是绝对路径还是相对路径相对路径是相对于哪个目录。有些客户端要求 Skill 文件放在特定目录下不是随便指一个路径就能加载。现象五A2A 的 Agent Card 读不到。原因可能是 Agent 没启动、端口不对、或者路径不是/.well-known/agent.json。先用curl http://localhost:端口/确认 Agent 本身在运行再检查 Agent Card 的挂载路径是否符合 A2A 规范。现象六CC Switch 的 config.toml 改了不生效。原因通常是客户端没重启或者配置里有语法错误。TOML 对格式敏感检查引号、括号、缩进。改完配置后完全退出客户端再启动不要只关窗口。6. 继续验证从模型对话到 Coding Plan 的接入路径四个概念的验证做完后你手里应该有一套能跑通的配置Cline 或 CC Switch 通过 TaoToken 的 API 通道连上模型Function Call 能触发MCP Server 能被发现和调用Skills 能改变 Agent 行为A2A 的 Agent Card 能被读取。接下来如果要继续深入有两个方向。一是用模型对话快速验证不同模型对 Function Call 和 tool use 的支持差异同一个 tools 定义分别发给不同模型看返回的 tool_calls 结构是否一致https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel-chat二是如果你要把这套配置用于长期编码或 Agent 工作流可以看 Coding Plan 的接入方式它更适合需要稳定调用量和多模型切换的场景https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding-plan配置骨架和验证动作都在上面了。真正跑通的关键不是记住四个概念的定义而是每一步都有可观察的结果tool_calls 有没有返回、MCP Server 有没有 connected、Skill 加载后输出有没有变化、Agent Card 能不能 curl 到。这些结果对了链路就是通的。
返回列表