​​MCP协议:Agent交互的未来标准化之路​​

简介: 本文深入解析AI Agent核心能力——工具调用的工作机制,通过构建购物助手实例,详解Agent循环、行动类设计、安全防护与架构优化,并展望MCP协议在标准化交互中的应用前景。

本文较长,建议点赞收藏,以免遗失。

我们都知道,AI Agent的核心价值在于其与外部世界交互的能力,而这通过工具调用实现。传统LLM仅作为“大脑”处理文本生成和推理,而Agent则通过工具充当“感官”和“四肢”,执行实际任务(如查询天气、控制设备)。今天我们将深入解析“工具/函数调用”这一基石是如何工作的?

18812cab0f361b96f25936e2785ccde7.png

一、核心概念:Agent循环与工具调用机制

AI Agent的核心逻辑基于一个循环结构:接收指令、思考、调用工具、观察结果,并重复直至任务完成。以下Python伪代码展示了其极简实现:

def agent_loop(llm, user_prompt):
    message = user_prompt
    while True:
        output, tool_calls = llm(message)  # LLM思考并决定工具调用
        if tool_calls:
            message = [handle_tool_call(tc) for tc in tool_calls]  # 调用工具并获取结果
        else:
            message = user_input()  # 与用户交互

此循环模拟人类使用工具的过程:LLM分析输入,识别需调用的外部函数(如API),生成结构化参数(JSON格式),由外部系统执行后返回结果。

image.png

图示LLM如何将自然语言(如“找一件衬衫”)转化为函数调用(如search_products),强调结构化参数传递(非LLM直接执行函数)。

二、构建一个购物助手Agent

为了方便大家更好的理解,我将以购物助手Agent实例,为大家演示工具调用的完整实现,核心是决策框架、行动类和OpenAI集成。

1. ​​Agent基础框架​​

Agent通过run函数处理用户输入:检测恶意意图、决定行动、执行并返回结果。类结构如下(移除注释和冗余,保留核心属性):

class ShoppingAgent:
    def __init__(self):
        self.client = OpenAI()

    def run(self, user_message: str, conversation_history: List[dict]) -> str:
        if self.is_intent_malicious(user_message):
            return "Sorry! I cannot process this request."
        action = self.decide_next_action(user_message, conversation_history)
        return action.execute()

    def decide_next_action(self, user_message: str, conversation_history: List[dict]):
        response = self.client.chat.completions.create(
            model="gpt-4-turbo-preview",
            messages=[{"role": "system", "content": SYSTEM_PROMPT}, *conversation_history, {"role": "user", "content": user_message}],
            tools=[SEARCH_SCHEMA, PRODUCT_DETAILS_SCHEMA, CLARIFY_SCHEMA]
        )
        tool_call = response.choices[0].message.tool_calls[0]
        function_args = eval(tool_call.function.arguments)
        if tool_call.function.name == "search_products":
            return Search(**function_args)
        elif tool_call.function.name == "get_product_details":
            return GetProductDetails(**function_args)
        elif tool_call.function.name == "clarify_request":
            return Clarify(**function_args)

    def is_intent_malicious(self, message: str) -> bool:
        suspicious_patterns = ["ignore previous instructions", "ignore above instructions", "disregard previous", "forget above", "system prompt", "new role", "act as", "ignore all previous commands"]
        return any(pattern in message.lower() for pattern in suspicious_patterns)

2. ​​行动类与工具Schema​​

行动类将LLM决策转化为具体操作。每个类对应一个工具,并定义execute方法调用外部API:

  • Search: 基于关键词检索产品(如用户输入“找笔记本”)。
  • GetProductDetails: 获取特定产品详情(需产品ID)。
  • Clarify: 当请求模糊时要求用户澄清。

函数Schema(JSON格式)指导LLM生成结构化调用。例如,SEARCH_SCHEMA定义:

{
    "name": "search_products",
    "description": "Search for products using keywords",
    "parameters": {
        "type": "object",
        "properties": {"keywords": {"type": "array", "items": {"type": "string"}, "description": "Keywords to search for"}},
        "required": ["keywords"]
    }
}

系统提示(SYSTEM_PROMPT)约束LLM行为:

You are a shopping assistant. Use these functions:
1. search_products: When user wants to find products (e.g., "show me shirts")
2. get_product_details: When user asks about a specific product ID (e.g., "tell me about product p1")
3. clarify_request: When user's request is unclear

3. ​​对话流程示例​​

典型交互中,Agent基于对话历史动态决策。例如:用户查询“笔记本”触发Search,后续“详细说明产品p1”调用GetProductDetails。

image.png

图示展示对话序列:用户输入被转化为工具调用,结果返回给用户,形成连贯体验。

三、安全防护:限制行动空间与输入清理

由于工具的调用,有可能引入风险(如提示注入攻击),必须通过硬编码限制和输入清理缓解:

  • ​​限制行动空间​​:Agent仅允许调用预定义函数(如Search、GetProductDetails),避免eval动态执行(高安全风险)。
  • ​​输入清理​​:结合拒绝列表(denylisting)检测恶意模式(如“ignore previous instructions”)。进阶方案可集成LLM-based过滤器。 安全机制确保Agent在低风险场景先验证,再扩展到敏感操作。

四、优化:减少样板代码与架构演进

硬编码Schema导致冗余。使用instructor库(Pydantic集成)可简化:

  • 定义行动类为Pydantic模型(如Search、GetProductDetails)。
  • NextActionResponse自动序列化为OpenAI Schema,减少重复。
class NextActionResponse(OpenAISchema):
    next_action: Union[Search, GetProductDetails, Clarify] = Field(description="The next action for agent to take.")

重构后,decide_next_action更简洁:

response = self.client.chat.completions.create(...)
return NextActionResponse.from_response(response).next_action

五、函数调用与MCP协议

工具调用(Tool Calling)是通用术语,涵盖函数执行和扩展能力(如代码解释器)。Model Context Protocol (MCP) 标准化外部交互:

  • ​​MCP架构​​:服务器暴露工具API,客户端管理通信,宿主(Agent)动态发现和调用工具。

image.png

图示展示MCP组件:Agent(宿主)通过MCP客户端调用服务器工具(如/invoke/search_products),实现松耦合和可扩展性,避免硬编码限制。

ps:由于文章篇幅有限,关于MCP客户端调用的核心技术,我之前也整理了一份5W字很详细的技术文档,粉丝朋友自行领取:《MCP技术详解》

总结

工具调用是AI Agent的核心能力,使其超越纯文本生成,实现现实世界任务。然而,需平衡灵活性与安全:

  • ​​潜力​​:替代传统规则引擎(避免组合爆炸问题),支持上下文感知决策。
  • ​​风险​​:提示注入需多层防护(如拒绝列表和LLM验证)。

最后建议从低风险应用入手,逐步迭代安全机制。未来,MCP等协议将推动Agent生态系统标准化,赋能复杂场景(如动态API集成)。好了,今天的分享就到这里,点个小红心,我们下期见。

目录
相关文章
|
存储 测试技术 API
魔搭Agent体验升级!支持编辑已发布的Agent、新增tool说明书等
魔搭Agent作为开源版GPTs,可以零代码DIY一个具备丰富功能的chat bot,今天上线了一个新版本优化了相关体验,来看!
|
人工智能 API 定位技术
MCP全方位扫盲
MCP(Model Context Protocol)是由Anthropic提出的协议,旨在标准化大模型与外部数据源和工具的通信方式。其核心架构包括MCP Client(客户端)和MCP Server(服务端),通过标准化接口实现解耦,支持不同LLM无缝调用工具。相比传统方法,MCP简化了Prompt工程,减少定制代码,提升复用性。实际场景中,如天气查询或支付处理,MCP可智能调用对应工具,优化用户体验。MCP的核心价值在于标准化通信、统一工具描述及动态兼容性,成为大模型与外部服务的智能桥梁。
|
5月前
|
人工智能 运维 监控
AI Agent开发指南:从模板到生产环境的完整路径
本文详解AI Agent开发四步法:1)用AgentRun模板快速验证(编程/电商/舆情等场景);2)低代码/高代码双模式定制;3)功能、性能、安全三重测试;4)一键部署+监控告警。阿里云函数计算提供全链路支持,助企业高效落地AI Agent。
|
9月前
|
JSON 人工智能 API
从对话到Agent:大模型工具调用能力的量化评测
大模型向Agent进化,工具调用是关键。本文介绍EvalScope评测框架,通过双重验证机制,量化评估模型“会不会用、能不能用好”工具,助力开发者打造可靠AI应用。
1116 4
|
人工智能 边缘计算 API
AI协作的四大支柱:协议详解与应用场景全解析​
本文深入解析Agentic AI协议的四大核心协议——MCP、A2A、ACP与ANP,涵盖技术特性、应用场景及选型指南,助你掌握多代理协作系统构建要点。
1135 6
|
10月前
|
人工智能 NoSQL Java
Spring AI 进阶之路03:集成RAG构建高效知识库
本文介绍如何在Spring Boot中集成RAG(检索增强生成)技术,通过Redis向量数据库为大模型外挂私域知识库。手把手实现文档上传、切分、向量化存储,并构建支持普通对话与知识库问答双模式的智能聊天机器人,解决大模型对私有信息无知的问题,助力打造企业级AI应用。
2590 1
|
机器学习/深度学习 人工智能 API
AI 发展 && MCP
AI发展——计算机视觉、ChatGPT、Sora、DeepSeek、生成式AI。什么是MCP,Prompt、LLM、Function Call、Agent、MCP是什么,各自区别;MCP如何工作,MCP架构、MCP Server工作原理,Cursor如何使用MCP,自定义MCP Server
1847 46
|
9月前
|
人工智能 前端开发 API
【cursor】前后端分离项目下的AI跨工程管理方案
针对前后端分离项目中AI编辑器难以跨工程协作的问题,提出通过统一文件夹管理方案,将前端与后端项目置于同一根目录下,利用AI编辑器打开根目录并结合@引用功能,实现对前后端代码的联合理解与开发,提升联调效率与代码生成准确性。
1910 0
|
人工智能 Java API
MCP客户端调用看这一篇就够了(Java版)
本文详细介绍了MCP(Model Context Protocol)客户端的开发方法,包括在没有MCP时的痛点、MCP的作用以及如何通过Spring-AI框架和原生SDK调用MCP服务。文章首先分析了MCP协议的必要性,接着分别讲解了Spring-AI框架和自研SDK的使用方式,涵盖配置LLM接口、工具注入、动态封装工具等步骤,并提供了代码示例。此外,还记录了开发过程中遇到的问题及解决办法,如版本冲突、服务连接超时等。最后,文章探讨了框架与原生SDK的选择,认为框架适合快速构建应用,而原生SDK更适合平台级开发,强调了两者结合使用的价值。
14846 33
MCP客户端调用看这一篇就够了(Java版)

热门文章

最新文章