Hello folks,我是 Luga,今天我们来聊一下人工智能应用场景落地 - 如何为 LLM 集成选择合适的策略?
众所周知,大型语言模型(LLMs)已经彻底改变了企业自动化、客户交互以及决策制定的方式,其强大的语言生成能力为各行业带来了前所未有的机遇。然而,要充分发挥 LLMs 的潜力,仅仅部署一个预训练模型是远远不够的。企业需要在实际应用中将 LLMs 无缝集成到现有系统中,确保其在释放创造力的同时,能够保持输出的可控性;在提供灵活性的同时,兼顾结构的严谨性;在推动创新的同时,确保系统的稳定性和可靠性。
然而,这种集成并非易事。LLMs 的输出通常具有一定的随机性和不可预测性,如何在满足业务需求的同时对其进行有效控制和结构化,成为企业在实际部署中面临的最大挑战之一。
随着技术的发展,两种主流的解决方案逐渐浮现:函数调用(Function-Calling)和模型上下文协议(Model Context Protocol,简称 MCP)。这两种方法虽然都旨在提升 LLMs 的可预测性和生产就绪状态,但它们在设计理念、实现方式和适用场景上有着显著差异。深入理解这些差异,不仅有助于企业在集成 LLM s时做出明智的技术选择,还能为构建更高效、更可靠的智能系统奠定基础。
—01 —
如何理解 Function Calling ?
众所周知,LLMs 本质上是一种生成式技术,其核心优势在于能够生成富有创意且高度契合上下文的输出。这种特性使得 LLMs 在诸多任务中表现出色,例如,进行生成代码片段,或是参与开放式的对话互动。无论是用于提升工作效率还是优化用户体验, LLMs 的创造力都展现了巨大的潜力。
然而,在企业环境中,这种生成能力却往往是一把双刃剑。企业通常需要的是可预测、结构化的输出,以确保其与特定的业务流程、监管要求或品牌规范保持一致,而 LLMs 的自由生成特性可能难以完全满足这些需求。
那么,该如何理解“函数调用(Function-Calling)”?
本质上而言,无码可以一句话概括:为特定任务提供结构化输出。
通常而言,函数调用是一种广受欢迎的 LLM 集成方法,其核心在于通过定义明确的函数签名,约束模型生成符合预设接口的结构化响应。通过这种方式,LLMs 的输出可以被精确地引导,从而更轻松地融入现有的企业系统,满足业务场景对一致性和规范化的要求。
作为一种更直接的机制,通常嵌入在大型语言模型(LLM)内部,Function Calling 用于在模型生成响应时动态调用外部函数或 API。其主要涉及如下组件:
以下是一个 OpenAI 函数调用的 JSON 定义示例,用于获取指定地点的当前天气信息,具体可参考如下:
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定地点的当前天气信息",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市名称,例如:香港、台北"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "温度单位"
}
},
"required": ["location"]
}
}
}
在实际的业务场景中,在函数调用的框架下,开发者首先需要创建一组具有明确输入和输出参数的函数。当用户与 LLM 进行交互时,模型会根据用户的输入内容,智能地识别出需要调用的函数,并生成符合该函数预期格式的响应。例如,函数可能要求返回一个特定的数据类型(如字符串或 JSON 对象),而 LLM 则被限制在这一范围内生成输出。
因此,此种方法特别适合那些需要精确、结构化数据的任务,例如数据提取、分类或外部 API 调用等相关场景。
—02 —
如何理解 Model Context Protocol (MCP) ?
尽管函数调用(Function-Calling)在处理结构化任务时表现出色,但模型上下文协议(Model Context Protocol,简称 MCP)则采用了完全不同的设计思路。
作为一种分层式技术,通过系统性地组织上下文和提示,MCP 为大型语言模型(LLM)提供更加灵活且可控的交互方式。相较于函数调用的刚性约束,MCP 更擅长处理复杂、多步骤的对话场景,尤其是在需要维持上下文连贯性和动态适应用户需求的场景中,其优势尤为明显。
通常情况下,MCP 的设计更偏向于模块化和分布式系统,强调清晰的流程控制和中间状态管理。其主要涉及如下核心组件:
以下是一个使用 MCP 框架实现的简易服务器示例,用于获取指定地点的天气信息,具体代码可参考如下:
from mcp import MCPServer, Tool, Parameter
# 初始化MCP服务器
server = MCPServer()
@server.tool
class WeatherTool(Tool):
"""用于获取指定地点天气信息的工具"""
@server.function
def get_weather(self, location: Parameter(description="城市名称"),
unit: Parameter(description="温度单位", default="celsius")):
"""获取指定地点的当前天气"""
# 调用天气API的实现(此处为模拟数据)
return {"temperature": 22, "condition": "晴天", "humidity": 45}
# 启动服务器
server.start()
在实际的场景中,MCP 的核心在于通过分层的方式分解和组织交互过程。每一层上下文都为 LLM 提供了特定的指令、约束条件或背景信息,从而在模型生成响应时,既能保持其创造性,又能确保输出与业务目标高度契合。
具体来说,MCP 的每一层可能包含不同的信息模块,例如任务目标、用户背景、业务规则或历史对话记录。模型在生成响应时,会综合考虑所有上下文层的信息,确保输出的准确性和相关性。这种分层设计不仅为模型的行为提供了清晰的引导,还避免了过度限制其生成能力,使得 LLM 能够在复杂场景中展现更高的灵活性和智能性。
—03 —
MCP & Function Calling 设计理念差异性解析
1、MCP 设计理念:模块化、分布式与可控的智能任务执行框架
2、Function Calling 设计理念:集成化、模型驱动与轻量级的功能扩展方案
—04 —
MCP vs Function Calling,该如何选 ?
函数调用(Function-Calling)和模型上下文协议(MCP)作为两种主流的大型语言模型(LLM)集成方法,各有其独特的应用场景和优势。它们并非互相替代,而是互为补充,能够在不同的业务需求和技术环境中发挥各自的价值。理解两者的适用场景,不仅有助于企业在 LLM 集成时做出明智的选择,还能为构建高效、可靠的智能系统提供清晰的指导方向。
那么,在实际的业务场景中,如何决策呢?
以下是关于如何选择 Function-Calling 或 MCP 的详细建议,并探讨如何结合两者以实现更优的解决方案。
1、使用 Function-Calling 的场景
Function-Calling 以其结构化和高效的特点,成为许多特定任务的首选方法。以下是其适用的典型场景,具体可参考:
典型案例:
在上述这些场景中,Function-Calling 能够以较低的开发成本和较高的可控性,快速满足业务需求。
2、使用 MCP 的场景
相比之下,MCP 以其灵活性和上下文管理能力,更适合复杂、多步骤的交互场景。以下是其适用的典型场景:
典型案例:
在上述的这些类似场景中,MCP 的灵活性和上下文感知能力能够显著提升交互质量,满足复杂业务需求。
然而,在实际的业务场景中,可能面临某些复杂的应用,单独使用 Function-Calling 或 MCP 可能无法完全满足需求。此时,结合两种方法可以充分发挥它们的优势,同时弥补各自的局限性,形成更强大的混合解决方案。
例如,在一个客户支持系统中,可以通过以下方式结合两者:
Function-Calling 用于工单分类:利用 Function-Calling 的结构化特点,快速将用户提交的工单分类为“账单问题”或“技术支持”,确保分类结果的准确性和一致性。
而 MCP 用于后续问答和上下文管理:在工单分类后,用户可能会提出进一步的问题(如“如何解决账单问题?”)。此时,MCP 可以通过分层上下文管理,追踪之前的对话内容,生成连贯且个性化的回答,同时确保响应符合品牌规范。
这种混合方法能够在不同阶段发挥各自的优势:Function-Calling 确保了关键任务的效率和可控性,而 MCP 则增强了对话的灵活性和上下文连贯性。通过合理设计,开发者可以在系统架构中无缝集成这两种方法,例如在函数调用完成后将结果传递给 MCP 的上下文层,用于后续处理。
综上所述,Function-Calling 和 MCP 各有其擅长的领域,选择哪种方法取决于具体的业务需求和技术目标。
如果任务需要高度结构化的输出和快速集成,Function-Calling 是更优的选择;如果任务涉及复杂交互、长时间上下文管理或需要在创造力与控制力之间取得平衡,MCP 则更具优势。而在一些综合性场景中,结合两者可以实现更高的效率和灵活性,为 LLM 的实际应用提供更全面的解决方案。企业在选择时,应充分评估任务的复杂性、系统架构的兼容性以及对可控性和创造力的需求,以确保最终方案能够最大化地满足业务目标。
今天的解析就到这里,欲了解更多关于 Function-Calling 和 MCP 相关技术的深入剖析,最佳实践以及相关技术前沿,敬请关注我们的微信公众号:架构驿站,获取更多独家技术洞察!
Happy Coding ~
Reference :
[1] https://zenn.dev/taku_sid/articles/20250408_function_comparison?redirected=1
[2] https://www.linkedin.cn/incareer/pulse/llm-function-calling-vs-mcp-server-basics-ganesh-ghag-3tyjf
Adiós !
··································
对云原生网关 Traefik 技术感兴趣的朋友们,可以了解一下我的新书,感谢支持!
Hello folks,我是 Luga,Traefik Ambassador,Jakarta EE Ambassador, 一个 15 年+ 技术老司机,从 IT 屌丝折腾到码畜,最后到“酱油“架构师。如果你喜欢技术,不喜欢呻吟,那么恭喜你,来对地方了,关注我,共同学习、进步、超越~