首页/新闻资讯/正文详情

LLM 工具调用三件套:Function Call、MCP 协议与 A2A 协议配置 TaoToken 实战

发布时间:2026/9/25 12:52:36 来源:云帆数科 栏目:资讯中心
LLM 工具调用三件套:Function Call、MCP 协议与 A2A 协议配置 TaoToken 实战
1. 先理清三件套到底各管什么Function Call、MCP 协议、A2A 协议经常被放在一起讲但很多人第一次接触时会混淆它们是不是互相替代的关系其实不是。你可以把它们理解成三个不同层级的“插头标准”。Function Call 解决的是“单个模型怎么调用一个函数”。模型本身不执行代码它只输出一段结构化 JSON告诉外部程序“我要调用 get_weather参数是北京”。真正执行的是你的后端代码。这是最基础的一层OpenAI、Anthropic、Mistral 等主流模型都支持。MCP 协议解决的是“模型应用怎么标准化地连接外部工具和数据源”。以前每接一个数据库、每接一个文件系统都要写一套自定义适配代码。MCP 把这个过程标准化成客户端-服务器架构主机应用通过 MCP 客户端连接 MCP 服务器用 JSON-RPC 2.0 通信。它管的是“上下文和工具的接入”。A2A 协议解决的是“多个 Agent 之间怎么互相发现和协作”。一个 Agent 可能擅长搜索另一个擅长筛选简历A2A 让它们通过 Agent Card 互相认识、通过 Task 分配工作、通过 Artifact 交付结果。它管的是“Agent 之间的通信”。三者协作边界可以用一句话概括Function Call 是模型的手MCP 是模型的工具箱接口A2A 是模型之间的对讲机。你完全可以在一个系统里同时用到三者——模型用 Function Call 触发操作应用层用 MCP 接工具多 Agent 协作用 A2A 通信。这篇要做的是用 TaoToken 作为统一的 Key 和 API 通道把这三层都跑通。TaoToken 提供统一的 API 入口你不需要为每个模型单独配 Key也不需要为每个协议单独搭通道。下面从环境准备开始一步步给出可复制的配置骨架和验证动作。2. TaoToken 前置统一 Key 与通道准备在配置任何协议之前先把 TaoToken 的接入信息准备好。这一步不复杂但顺序不能乱。首先到官网注册并登录https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。登录后进入控制台找到 API Keys 页面创建一个新的 Key。建议按用途命名比如llm-toolcall-dev方便后续排查问题时定位。创建完成后你会拿到一个以sk-开头的 Key。这个 Key 就是后续所有协议配置里统一使用的凭证。TaoToken 的 API 入口是https://taotoken.net/api注意这个地址在代码里不要加 UTM 参数保持干净。注意Key 只显示一次创建后立即复制到安全的地方。如果泄露了在控制台删除重建即可。接下来确认你要用的模型。TaoToken 支持多种模型通道Function Call 场景建议选支持工具调用的模型。你可以在模型对话页面先做一次简单测试确认 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 。环境变量建议这样设置后面所有配置都引用它export TAOTOKEN_API_KEYsk-你的Key export TAOTOKEN_BASE_URLhttps://taotoken.net/apiWindows 下用set或 PowerShell 的$env:语法。设置完可以用echo $TAOTOKEN_API_KEY确认一下。3. 可复制配置settings.json 与 config.toml 骨架这一节给出两个配置文件的完整骨架。settings.json用于 MCP 客户端侧的工具注册config.toml用于 A2A Agent 的声明与通道配置。两者都通过 TaoToken 统一走 API。3.1 settings.jsonMCP 工具注册骨架这个文件放在你的 MCP 主机应用配置目录下。不同客户端路径不同Claude Desktop 一般在~/Library/Application Support/Claude/claude_desktop_config.json其他 IDE 插件各有约定。核心结构一致{ mcpServers: { taotoken-filesystem: { command: npx, args: [ -y, modelcontextprotocol/server-filesystem, /Users/yourname/workspace ], env: { TAOTOKEN_API_KEY: sk-你的Key, TAOTOKEN_BASE_URL: https://taotoken.net/api } }, taotoken-fetch: { command: npx, args: [ -y, modelcontextprotocol/server-fetch ], env: { TAOTOKEN_API_KEY: sk-你的Key, TAOTOKEN_BASE_URL: https://taotoken.net/api } } } }这里注册了两个 MCP 服务器filesystem 用于文件读写fetch 用于网络请求。每个服务器都通过env注入 TaoToken 的 Key 和 Base URL。这样 MCP 服务器在需要调用模型能力时统一走 TaoToken 通道。如果你用的是支持 Function Call 的客户端还需要在同一个文件里声明工具 schema。以天气查询为例{ tools: [ { type: function, function: { name: get_current_weather, description: 获取指定城市的当前天气, parameters: { type: object, properties: { location: { type: string, description: 城市名称如 Beijing }, unit: { type: string, enum: [celsius, fahrenheit], default: celsius } }, required: [location] } } } ] }这个 schema 告诉模型有哪些函数可用、参数是什么格式。模型收到用户提问后会输出类似{name: get_current_weather, arguments: {location: Beijing}}的结构化 JSON你的后端解析后执行实际调用。3.2 config.tomlA2A Agent 声明骨架A2A 协议的核心是 Agent Card它描述一个 Agent 的能力、认证方式和支持的交互格式。下面是一个 TOML 格式的配置骨架用于声明一个旅行规划 Agent[agent] name travel-planner description 根据用户偏好规划行程并协调其他 Agent version 0.1.0 url https://your-domain.com/a2a/travel-planner [agent.provider] organization YourOrg url https://your-domain.com [agent.capabilities] streaming true push_notifications false [agent.authentication] schemes [bearer] credentials TAOTOKEN_API_KEY [agent.skills] [[agent.skills.items]] id plan-itinerary name 行程规划 description 根据目的地和天数生成行程 input_modes [text] output_modes [text, artifact] [[agent.skills.items]] id coordinate-weather name 天气协调 description 调用天气 Agent 获取目的地天气 input_modes [text] output_modes [text] [taotoken] base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY model claude-sonnet这个配置声明了一个具备两个技能的 Agent行程规划和天气协调。[taotoken]段指定了该 Agent 调用模型时使用的通道。A2A 通信本身走 HTTP/SSE/JSON-RPC但 Agent 内部需要调用 LLM 时统一走 TaoToken。提示Agent Card 通常需要暴露一个/.well-known/agent.json端点其他 Agent 通过这个端点发现你的能力。生产环境记得加认证。4. 验证请求从 Function Call 到 A2A 的连通性测试配置写完后不要急着写业务逻辑先做连通性验证。分三步走先验 Function Call再验 MCP最后验 A2A。4.1 验证 Function Call 通道用 curl 直接测试 TaoToken 的 Function Call 能力curl -s https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet, messages: [ {role: user, content: 北京天气怎么样} ], tools: [ { type: function, function: { name: get_current_weather, description: 获取指定城市的当前天气, parameters: { type: object, properties: { location: {type: string} }, required: [location] } } } ], tool_choice: auto }预期返回的 JSON 里choices[0].message.tool_calls应该包含一个函数调用请求function.name是get_current_weatherarguments里包含{location: Beijing}。如果返回的是普通文本而不是 tool_calls说明模型或通道不支持 Function Call需要换模型或检查配置。4.2 验证 MCP 服务器连通性MCP 服务器启动后用 JSON-RPC 格式发一个初始化请求echo {jsonrpc:2.0,id:1,method:initialize,params:{protocolVersion:2024-11-05,capabilities:{},clientInfo:{name:test,version:1.0}}} | npx -y modelcontextprotocol/server-filesystem /tmp如果服务器正常会返回包含serverInfo和capabilities的 JSON。接着测试tools/list方法echo {jsonrpc:2.0,id:2,method:tools/list,params:{}} | npx -y modelcontextprotocol/server-filesystem /tmp返回的result.tools数组里应该列出该服务器提供的所有工具。如果这一步通了说明 MCP 客户端-服务器链路正常。4.3 验证 A2A Agent Card 可发现启动你的 A2A Agent 后用 curl 请求 Agent Cardcurl -s https://your-domain.com/.well-known/agent.json | jq .预期返回的 JSON 包含name、description、skills、capabilities等字段。然后用 A2A 的tasks/send方法发一个测试任务curl -s https://your-domain.com/a2a/travel-planner \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { jsonrpc: 2.0, id: task-001, method: tasks/send, params: { id: task-001, message: { role: user, parts: [{type: text, text: 帮我规划北京三日游}] } } }如果返回的result.status.state是submitted或working说明 A2A 任务接收正常。后续可以通过tasks/get轮询状态或通过 SSE 接收流式更新。5. 本篇常见错排查配置过程中最容易踩的坑集中在几个地方这里按出现频率排列。第一个坑Key 没传进 MCP 服务器的 env。很多人只在 shell 里 export 了 Key但 MCP 服务器是独立进程启动的不会继承 shell 环境变量。必须在settings.json的env段显式传入。验证方法在 MCP 服务器代码里打印process.env.TAOTOKEN_API_KEY看是否有值。第二个坑Base URL 带了多余路径。TaoToken 的 API 入口是https://taotoken.net/api有些客户端会自动拼接/v1/chat/completions有些需要你手动写全。如果遇到 404先检查最终请求的完整 URL 是什么。建议在客户端开启请求日志。第三个坑Function Call 的 tool_choice 设置不对。tool_choice: auto让模型自己决定是否调用函数tool_choice: {type: function, function: {name: xxx}}强制调用指定函数。如果你希望模型必须调用某个函数用后者。如果模型返回了文本而不是 tool_calls先检查tool_choice和模型是否支持。第四个坑A2A 的 Agent Card 路径不对。A2A 规范约定 Agent Card 放在/.well-known/agent.json但有些实现放在/agent.json或/a2a/agent.json。发现不了 Agent 时先确认对方请求的路径和你暴露的路径是否一致。第五个坑MCP 服务器权限问题。filesystem 服务器需要指定允许访问的目录如果目录不存在或没有读写权限服务器会启动失败。用ls -la确认目录存在用chmod确认权限。第六个坑A2A 任务状态轮询超时。A2A 支持长时间运行任务但客户端默认超时可能很短。如果任务状态一直是working检查客户端超时设置或者改用 SSE 流式接收更新。6. 接入文档与后续动作三件套跑通后下一步是根据你的实际场景做扩展。如果你主要做工具接入和排障建议先把 API Keys 管理和接入文档过一遍确保 Key 轮换和权限控制有章法。API Keys 入口https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。如果你更关注模型本身的工具调用能力验证直接在模型对话页面测试不同模型的 Function Call 表现是最快的https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。如果你打算长期做编码类 Agent 或多 Agent 协作开发Coding Plan 提供了针对代码场景优化的通道配置可以减少你在通道调试上的时间https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。最后说一个实际经验Function Call、MCP、A2A 这三层不要一次性全上。先把 Function Call 跑通确认模型能正确输出结构化调用请求再加 MCP把工具接入标准化最后才考虑 A2A 的多 Agent 协作。每层都单独验证通过后再叠加排查问题时才能快速定位是哪一层出了状况。配置文件和验证命令都在上面了直接复制改改就能用。

相关推荐

Claude Code 调试与错误处理:TaoToken 统一 Key 下的 settings.json 配置与排错骨架
Claude Code 调试与错误处理:TaoToken 统一 Key 下的 settings.json 配置与排错骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 12:52:36

CITECT数据库说明:SCADA历史存储与SQL Server集成实战
CITECT数据库说明:SCADA历史存储与SQL Server集成实战

简介:这份文档资料聚焦CitectSCADA Reports内嵌历史数据库,面向自动化、SCADA系统集成与工业数据管理方向的工程师及技术人员,帮助理解如何借助冗余SCADA连接器与MS SQL Server 2005实现高可靠的历史数据存储与保护。资源包共1个doc文件&… · 2026/9/25 12:52:30

LibreChat自托管部署实战:统一管理OpenAI、Claude与Gemini
LibreChat自托管部署实战:统一管理OpenAI、Claude与Gemini

老实说,我一开始并没有把 LibreChat 当回事。当时手头有 ChatGPT Plus、Claude Pro,还有各种 API 额度,每个平台来回切换,聊天记录散落在五六个地方,想回头找一段对话比翻聊天记录还痛苦。后来为了给接口写调试工具&am… · 2026/9/25 12:52:30

SSE平台C语言刷题指南:指针、字符串与边界避坑
SSE平台C语言刷题指南:指针、字符串与边界避坑

最近在SSE平台上刷哈工大的C语言编程练习,刷到第30题左右正好卡在一个很有意思的节点上。这套题单看每个知识点都不难,但串起来之后对代码习惯的要求一下子就上来了。很多人第一周还在享受printf的快乐,第二周就被字符串输入、指针传参整得怀… · 2026/9/25 13:25:24

16G显存也能跑通Qwen 7B LoRA微调:显存优化与实战全流程
16G显存也能跑通Qwen 7B LoRA微调:显存优化与实战全流程

我手里这张 16G 显存的卡,在服务器机箱里躺了快两周,一直被当成纯推理卡用——跑跑 Qwen 7B 的量化版还行,一聊到微调就心虚。全参微调 7B,光权重、梯度、优化器状态加起来就要上百 GB,16G 想都不用想。但换一条路&… · 2026/9/25 13:25:24

酒店管理系统数据库设计:表结构、事务与并发控制实践
酒店管理系统数据库设计:表结构、事务与并发控制实践

简介:一份面向数据库课程设计的酒店管理系统(客房管理)Java 项目,适合正在完成数据库实训作业的学生或需要快速验证客房业务数据建模的开发者参考。资源围绕客房、客户、订单、入住与退房等核心数据实体,完整演示了从关… · 2026/9/25 13:25:17

AI出海实战:从算力选型到Agent生态的完整路径
AI出海实战:从算力选型到Agent生态的完整路径

1. 从算力到生态:AI出海这件事到底在聊什么2025年过了一半多,圈子里聊AI出海的话题明显变了味。前两年大家见面第一句是“你手里有几张卡”,现在变成“你的Agent跑通闭环了吗”。这个转变背后其实是一条很清晰的产业逻辑线:算力曾… · 2026/9/25 13:25:17

SpringBoot2+Vue3+MySQL8.0健康信息管理系统源码拆解
SpringBoot2+Vue3+MySQL8.0健康信息管理系统源码拆解

如果你接手过校园类管理系统的开发,应该知道师生健康信息这种需求看着简单,真做起来坑不少。数据维度多,学生、教师、班级、学院、健康档案、每日体温上报、异常预警全都搅在一起,还得兼容学生端填报和管理端统计两套完全不同的操… · 2026/9/25 13:25:17

企业级AI平台WorkBuddy Enterprise:Agent编排与CodeBuddy协同落地实践
企业级AI平台WorkBuddy Enterprise:Agent编排与CodeBuddy协同落地实践

1. 从零理解 WorkBuddy Enterprise 的定位与核心价值1.1 这个平台到底解决什么问题企业级 AI 平台这个概念这两年铺天盖地,但真正落到日常研发场景里,很多团队遇到的痛点其实非常具体:代码补全工具各自为战、Agent 能力散落在不同工具里、知识… · 2026/9/25 13:25:11

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码