资讯动态

大模型开发者必备:Function Calling与MCP协议深度解析,建议收藏!

发布时间:2026/9/29 20:39:06 来源:尧图企业网站定制
1. 从 Function Calling 到 MCPAI Agent 工具调用到底难在哪如果你正在做大模型应用大概率绕不开一个核心问题模型本身只会“说”不会“做”。Function Calling 解决的是让模型把自然语言转成结构化 API 调用MCP 协议解决的是让模型真正操作本地文件、数据库、远程服务。两者一个管“信息补充”一个管“动作执行”合起来才是完整的 AI Agent 工具调用链路。但落到工程上很多开发者卡在三个地方第一Function Calling 的函数注册、参数校验、结果回填流程写得很散换个模型就要重写一遍第二MCP Server 的配置格式不统一Claude Desktop、Cursor、Cline 各有一套 settings.json 或 config.toml复制来复制去容易漏字段第三API Key 和 Base URL 分散在多个工具里调试时根本不知道请求打到了哪个通道。这篇内容就围绕这条落地路径展开先讲清楚 Function Calling 和 MCP 各自负责什么再给出一套统一的 Key/API 通道配置骨架最后交付可复制的 settings.json 与 config.toml 片段并给出连通性验证动作。适合已经写过一两个 Agent demo、准备把工具调用接入真实工程的开发者。2. 前置准备统一 Key 与 API 通道的配置骨架在写任何 Function Calling 或 MCP 配置之前先把“通道”这件事定下来。所谓通道就是模型请求统一走哪个 Base URL、用哪个 Key、走什么协议。如果每个工具各配一套后面排查连通性问题会非常痛苦。我试过把模型对话、Coding Plan、API Keys 管理分开配置结果 MCP Server 调用的模型和主对话模型不是同一个通道返回格式对不上。后来统一成一套所有模型请求走同一个 API 入口Key 在控制台统一生成MCP 和 Function Calling 共用这个通道。具体操作上你可以先到控制台创建 API Key然后拿到两个关键值Base URLhttps://taotoken.net/apiAPI Key在控制台生成的 sk- 开头字符串这两个值后面会出现在 settings.json 和 config.toml 里。注意 Base URL 不要带多余路径MCP 客户端和 OpenAI 兼容 SDK 对路径拼接方式不一样带错会直接 404。提示如果你用的是 Claude Code 或 Anthropic 风格的客户端接入文档里有对应的 endpoint 说明不要直接套 OpenAI 的/v1/chat/completions。3. 可复制配置settings.json 与 config.toml 片段下面给两份配置一份给支持 JSON 配置的 MCP 客户端比如 Cline、Roo Code 这类一份给用 TOML 的客户端比如某些 CLI Agent。两份配置的核心字段一致command、args、env其中 env 里放 API Key 和 Base URL。3.1 settings.jsonMCP Server 注册与 Function Calling 通道{ mcpServers: { local-tools: { command: npx, args: [-y, modelcontextprotocol/server-filesystem, /Users/yourname/project], env: { API_KEY: sk-your-key-here, BASE_URL: https://taotoken.net/api, MODEL: claude-sonnet-4-20250514 } } }, functionCalling: { endpoint: https://taotoken.net/api/v1/chat/completions, apiKey: sk-your-key-here, tools: [ { type: function, function: { name: get_weather, description: 获取指定城市和日期的天气信息, parameters: { type: object, properties: { location: { type: string, description: 城市名称例如 北京、上海 }, date: { type: string, description: 日期格式为 YYYY-MM-DD } }, required: [location] } } } ] } }这份配置里mcpServers负责注册本地 MCP ServerfunctionCalling负责声明 Function Calling 的工具 schema。两者共用同一个BASE_URL和API_KEY这样模型推理时不会出现“MCP 走一个通道、Function Calling 走另一个通道”的错位。3.2 config.tomlCLI Agent 的通道与模型配置[api] base_url https://taotoken.net/api api_key sk-your-key-here model claude-sonnet-4-20250514 timeout 60 [mcp] enabled true servers [local-tools] [mcp.servers.local-tools] command npx args [-y, modelcontextprotocol/server-filesystem, ./workspace] env { API_KEY sk-your-key-here, BASE_URL https://taotoken.net/api } [function_calling] enabled true tool_choice auto parallel_tool_calls trueTOML 这份更适合命令行 Agent字段名和 JSON 略有差异但语义一致。tool_choice auto表示让模型自己决定是否调用工具parallel_tool_calls true允许一次返回多个工具调用适合需要同时查天气和查日程的场景。注意args里的路径要写绝对路径或相对于 Agent 工作目录的路径写错会导致 MCP Server 启动失败但报错信息往往只显示“connection closed”不容易定位。4. 验证请求确认 Function Calling 与 MCP 都通了配置写完不算完必须做连通性验证。分两步先验 Function Calling再验 MCP。4.1 验证 Function Calling 是否返回结构化调用用 curl 直接打一次请求看模型是否返回tool_calls字段curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-your-key-here \ -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: { location: {type: string}, date: {type: string} }, required: [location] } } }], tool_choice: auto }如果返回体里出现tool_calls数组并且arguments里包含{location: 北京}说明 Function Calling 通道正常。如果返回的是普通文本回答检查tools字段是否拼写正确、tool_choice是否被客户端覆盖。4.2 验证 MCP Server 是否成功挂载在 Agent 客户端里执行一条需要读文件的指令比如“列出 workspace 目录下的文件”。如果 MCP Server 正常模型会调用 filesystem 工具并返回文件列表如果失败客户端日志里会出现MCP server local-tools failed to start或ENOENT。常见成功标志客户端状态栏显示 MCP 已连接工具列表里能看到read_file、list_directory等工具名。这时候再让模型“读取 config.toml 并总结内容”如果它能正确读出文件内容说明 MCP 的本地数据源访问链路完整。5. 本篇常见错排查5.1 报错401 Unauthorized或invalid api key先检查 Key 是否复制完整sk- 开头后面有没有漏字符。再检查 Base URL 是否写成了https://taotoken.net/api/带尾斜杠某些客户端会把尾斜杠和/v1拼成//v1导致鉴权失败。统一写成https://taotoken.net/api不带尾斜杠。5.2 MCP Server 启动后立刻退出多数是command或args写错。npx后面跟的包名要确认存在路径参数要确认目录真实存在。可以在终端里手动执行一遍npx -y modelcontextprotocol/server-filesystem ./workspace看是否报错。如果手动能跑通、客户端里跑不通检查客户端是否继承了正确的环境变量。5.3 Function Calling 返回参数类型不对模型有时会把date返回成2025-10-02有时返回成今天。这不是通道问题是 schema 描述不够明确。在description里写清楚格式要求比如“日期格式为 YYYY-MM-DD不要返回自然语言”。如果还是不稳定可以在服务端做一层参数校验和兜底转换。5.4 MCP 工具调用结果模型不消费有些客户端把 MCP 返回结果直接透传给模型但格式不是模型期望的toolrole 消息。检查客户端版本确认它支持 MCP 结果回填。如果用的是自研 Agent需要手动把 MCP 返回的 content 包装成{role: tool, content: ...}再发给模型。6. 接入路径与后续动作把上面的配置跑通之后你手里就有了一套统一的通道骨架Function Calling 负责信息补充MCP 负责真实操作两者共用同一个 API Key 和 Base URL。接下来如果要长期做编码类 Agent可以到 Coding Plan 页面看长期套餐如果只是验证模型对话和工具调用是否正常模型对话入口可以直接试Key 的管理和重新生成在 API Keys 页面Claude Code 和 Anthropic 风格的接入细节在接入文档里有单独说明。建议先把settings.json里的local-tools换成一个你真实需要的 MCP Server比如数据库查询或 Git 操作然后跑一次完整链路用户提问 → 模型判断调用工具 → MCP 执行 → 结果回填 → 模型生成最终回答。这条链路通了后面加工具只是复制配置的事。

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

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

免费获取报价 →
↑