资讯动态

一文讲懂2026年Agent三件套:A2A、MCP、Skills 配 TaoToken 的 settings.json 骨架

发布时间:2026/9/27 19:40:41 来源:尧图企业网站定制
1. 多 Agent 协作链路里三件套为什么总在 Key 上卡住如果你正在搭多 Agent 协作链路大概率已经踩过这个坑A2A 负责 Agent 之间通信MCP 负责接工具和数据Skills 负责把领域流程封装成可复用模块三套东西各自跑得通但一旦要统一走一个模型通道配置就开始打架。A2A 的 AgentExecutor 里要调模型MCP Server 里的分析工具要调模型Skills 触发的执行步骤里还要调模型结果就是三份 Key、三套 base_url、三种超时策略改一处漏两处。这篇面向正在搭建多 Agent 协作链路的开发者把 A2A 通信、MCP 工具接入、Skills 复用这三件套如何统一走 TaoToken 的 Key/API 通道讲清楚并给出一份可复制的settings.json配置骨架最后用一次端到端调用验证三件套的最小闭环。核心检索词就三个A2A、MCP、Skills加上 TaoToken 的 settings.json 骨架。先说清楚三者定位避免概念混淆。A2A 是横向的 Agent 与 Agent 之间的协作标准解决的是“谁来找谁干活”MCP 是纵向的 Agent 与外部工具/数据之间的标准接口解决的是“怎么调工具”Skills 是内部的知识包把领域流程知识封装成可复用模块解决的是“这件事该怎么做”。三者工作在不同层次是互补而非替代关系。目前最理想的落地结构是多个 Agent 通过 A2A 协作每个 Agent 内部用 Skills 指导自己怎么做通过 MCP 连接需要用到的工具和数据。问题在于这三层里每一层都可能触发模型调用。A2A 的远程 Agent 收到任务后要理解意图MCP 的分析工具要对文本做处理Skills 的生成器要按模板产出内容。如果每层都单独配 Key维护成本会指数级上升。统一走 TaoToken 的 Key/API 通道就是把这三种调用收敛到一份配置里。2. TaoToken 前置一份 Key 打通三件套的调用通道TaoToken 在这里扮演的角色是统一的模型调用入口。你不需要在 A2A 服务端、MCP Server、Skills 执行脚本里分别写三套凭证而是让它们都读同一份settings.json从里面取base_url和api_key。先拿到 Key。访问控制台创建 API Key地址是 https://taotoken.net/console 创建后复制保存后面配置里要用。如果你还没注册官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台里生成 Key 即可。拿到 Key 之后接入文档在 https://taotoken.net/doc 里面写了 base_url 的写法和兼容的调用方式。API 根地址是 https://taotoken.net/api 注意这个地址不带任何查询参数配置时直接用它作为 base_url。这里有个关键点三件套统一走 TaoToken不是让 TaoToken 去替代 A2A 或 MCP 协议本身而是让这三层里所有需要调模型的地方都指向同一个 OpenAI 兼容端点。A2A 的 AgentExecutor 里用 OpenAI SDK 调模型时base_url填 TaoToken 的地址MCP Server 里的分析工具同理Skills 的脚本里如果调模型也读同一份配置。这样你只需要维护一份 Key轮换、限流、计费都在一个地方看。如果你打算长期跑编码类 Agent 或常驻的 Agent 服务可以看下 Coding Plan地址是 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content 适合需要稳定调用额度的场景。只是临时验证模型连通性的话用模型对话页面就够了地址是 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content 。3. 可复制配置settings.json 骨架与三件套接入下面这份settings.json是骨架放在项目根目录三件套的各个组件都从这里读配置。字段命名保持通用你可以按自己项目的加载逻辑调整。{ taotoken: { base_url: https://taotoken.net/api, api_key: sk-你的Key, default_model: claude-sonnet-4-20250514, timeout: 60, max_retries: 2 }, a2a: { host: 127.0.0.1, port: 10001, agent_card_path: /.well-known/agent.json, model_ref: taotoken }, mcp: { transport: stdio, server_script: ./mcp/server.py, model_ref: taotoken }, skills: { root: ./skills, auto_load: true, model_ref: taotoken } }这份骨架的设计思路是taotoken节点是唯一的凭证来源a2a、mcp、skills三个节点都通过model_ref指向它。这样任何一层要调模型都从taotoken节点取base_url和api_key不需要各自硬编码。A2A 服务端接入时AgentExecutor 里初始化模型客户端这样写import json from openai import OpenAI with open(settings.json, r, encodingutf-8) as f: settings json.load(f) cfg settings[taotoken] client OpenAI( api_keycfg[api_key], base_urlcfg[base_url], timeoutcfg[timeout], max_retriescfg[max_retries], )MCP Server 里的分析工具接入方式一致读同一份配置import json import os from openai import OpenAI BASE_DIR os.path.dirname(os.path.abspath(__file__)) with open(os.path.join(BASE_DIR, .., settings.json), r, encodingutf-8) as f: settings json.load(f) cfg settings[taotoken] client OpenAI(api_keycfg[api_key], base_urlcfg[base_url])Skills 的脚本里如果调模型同样读这份配置。Skills 本身是一个文件夹核心是SKILL.md里面用 YAML frontmatter 声明name和description正文写执行步骤。当步骤里需要调模型时脚本从settings.json取配置而不是在脚本里写死 Key。--- name: sentiment-report description: 对新闻文本做情感分析并生成 Markdown 报告。当用户要求分析舆情、生成情感报告时使用。 --- 你是情感分析报告生成器。请严格遵循以下步骤 步骤 1: 读取输入文本。 步骤 2: 调用模型做情感分析输出总体倾向、正面因素、负面因素、影响、结论。 步骤 3: 按 assets/report-template.md 的结构填充内容。 步骤 4: 将完成的报告作为单个 Markdown 文档返回。这样三件套的模型调用都收敛到一份配置改 Key 只改一处。4. 验证请求一次端到端调用跑通最小闭环配置写好后用一次端到端调用验证三件套是否都走通了 TaoToken 通道。验证动作分三步先确认模型通道连通再确认 MCP 工具能调模型最后确认 A2A 任务能触发 Skills 并返回结果。第一步直接验证 TaoToken 通道。用 curl 发一个最小请求curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的Key \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-20250514, messages: [{role: user, content: 回复 ok}], max_tokens: 16 }返回里能看到choices[0].message.content就说明通道通了。如果返回 401检查 Key 是否复制完整返回 404检查 base_url 是否写成了带/v1的完整路径OpenAI SDK 会自动补/v1所以 base_url 填https://taotoken.net/api即可。第二步验证 MCP 工具调模型。启动 MCP Server用客户端连上去调用一个会触发模型的分析工具import asyncio from mcp import ClientSession, StdioServerParameters from mcp.client.stdio import stdio_client async def main(): params StdioServerParameters( commandpython, args[./mcp/server.py], envNone, ) async with stdio_client(params) as (read, write): async with ClientSession(read, write) as session: await session.initialize() tools await session.list_tools() print(可用工具:, [t.name for t in tools.tools]) result await session.call_tool( analyze_sentiment, {text: 这款产品体验很好物流也快。} ) print(工具返回:, result.content[0].text) asyncio.run(main())如果工具返回了报告文件路径说明 MCP Server 里的模型调用走通了 TaoToken 通道。第三步验证 A2A 任务触发 Skills。启动 A2A 服务端用客户端发一条消息观察 Task 状态流转import asyncio import httpx from a2a.client import A2ACardResolver, ClientConfig, create_client from a2a.helpers import new_text_message from a2a.types.a2a_pb2 import Role, SendMessageRequest, Task async def main(): async with httpx.AsyncClient() as http: resolver A2ACardResolver( httpx_clienthttp, base_urlhttp://127.0.0.1:10001, ) card await resolver.get_agent_card() print(读到 Agent Card:, card.name) client await create_client( agentcard, client_configClientConfig(streamingFalse), ) msg new_text_message( text分析这条新闻的情感新产品发布后用户反馈积极。, roleRole.ROLE_USER, ) request SendMessageRequest(messagemsg) async for chunk in client.send_message(request): if isinstance(chunk, Task): print(Task 状态:, chunk.status.state) for artifact in chunk.artifacts: for part in artifact.parts: if part.text: print(Artifact:, part.text) await client.close() asyncio.run(main())成功的结果是Agent Card 能读到Task 状态从WORKING走到COMPLETEDArtifact 里返回了分析结果。这条链路里A2A 负责通信MCP 负责工具调用Skills 负责流程指导三者都通过settings.json里的taotoken节点调模型。5. 本篇常见错排查配置三件套统一走 TaoToken 时报错集中在几个地方逐个说。第一个常见错是401 Unauthorized。原因通常是 Key 没读到或者读到了但带了多余空格。检查settings.json里api_key字段确认没有换行和空格。如果 Key 是从环境变量注入的确认环境变量名和代码里读的一致。另外注意A2A、MCP、Skills 三层如果各自读配置要确认它们读的是同一份文件而不是各自目录下的副本。第二个常见错是404 Not Found。这个多半是base_url写错了。OpenAI SDK 会自动在 base_url 后面补/v1/chat/completions所以 base_url 应该填https://taotoken.net/api不要填成https://taotoken.net/api/v1否则会变成/api/v1/v1/chat/completions。如果你用的是非 OpenAI SDK 的 HTTP 客户端那就需要手动拼完整路径https://taotoken.net/api/v1/chat/completions。第三个常见错是 MCP Server 启动后工具列表为空。检查server.py里mcp.run(transportstdio)是否在__main__里执行以及客户端StdioServerParameters的command和args是否指向正确的 Python 解释器和脚本路径。Windows 下路径用反斜杠时注意转义或者直接用正斜杠。第四个常见错是 A2A 任务卡在INPUT_REQUIRED不继续。这是设计如此不是报错。A2A 的 Task 在需要用户确认时会返回INPUT_REQUIRED状态客户端要带着同一个task_id和context_id再发一条确认消息任务才会继续。如果你在验证时看到这个状态按提示发确认消息即可。第五个常见错是 Skills 不触发。Skills 的触发依赖SKILL.md里 frontmatter 的description字段模型根据 description 判断是否加载该 Skill。如果 description 写得太泛比如只写“处理文档”模型可能匹配不上。把触发条件写具体比如“当用户要求分析舆情、生成情感报告时使用”命中率会高很多。排障时如果涉及 Key 和接入方式优先看接入文档 https://taotoken.net/doc 里面有 base_url 和鉴权的完整说明。需要重新生成 Key 就去 API Keys 页面 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content 。6. 三件套统一通道后的下一步把 A2A、MCP、Skills 的模型调用收敛到一份settings.json之后维护成本会明显下降。接下来可以做的几件事一是把settings.json里的default_model抽成环境变量方便在不同环境切换模型二是给 A2A 的 TaskStore 换成持久化实现避免服务重启后任务状态丢失三是把 Skills 的related_skills字段用起来让 Agent 在解决复杂问题时能沿着技能图谱跳转。如果你还在选模型阶段可以先用模型对话页面 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content 试几个模型确认哪个在 A2A 任务理解和 MCP 工具调用上表现更稳再写进settings.json的default_model。长期跑编码类 Agent 的话Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_campaignrewriteutm_content 的额度更适合常驻服务。最后提醒一个实操细节三件套里如果有多层嵌套调用比如 A2A 任务触发 MCP 工具、MCP 工具又触发 Skills 脚本注意给每层设置合理的超时。settings.json里的timeout是单次模型调用的超时嵌套调用时总耗时是各层之和别让最外层先超时了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑