探索 MCP 与 Function Calling:大模型智能体系统的优化之道
在构建大模型驱动的智能体(Agent)系统时,Function Calling 是让模型调用外部工具的核心机制。然而,随着工具数量增长、模型种类增多,传统 Function Calling 逐渐暴露出上下文爆炸、跨模型兼容性差等问题。MCP(Model Context Protocol) 应运而生,它通过按需加载、分层调用等机制,在不改变模型能力的前提下,为智能体系统提供了更高效、更统一的基础设施。本教程将系统解析两者的差异与联系,并详细拆解 MCP 的优化原理与实现流程。
一、Function Calling 的上下文爆炸风险与解决方案
核心问题: 每次调用模型时,所有函数的定义(functions 或 tools)都会被注入到 system message 中,占用上下文窗口并按输入 token 计费。OpenAI 官方明确说明:
“functions 会被注入到 system message 中,因此它们会占用上下文并按输入 token 计费;如果遇到上下文极限,应当减少函数数量或精简参数描述。”
只要所有输入 token(系统提示 + 函数列表 + 对话历史 + 用户提问)之和 没有超过 所选模型的最大上下文窗口,就不会触发 context_length_exceeded 错误;反之就会报错。
哪些场景下上下文容易“爆”?
- 函数描述写得尤为冗长(例如:将完整 OpenAPI schema 逐字段贴进去);
- 对话历史很长且未做截断;
- 一次性把所有函数都塞给中小窗口模型。
解决方案: 精简函数描述、对历史对话进行摘要或截断、根据用户意图动态筛选需要暴露的函数——这正是 MCP 的核心思路之一。
