找回密码
 立即注册
首页 业界区 业界 AgentScope深入分析-LLM&MCP

AgentScope深入分析-LLM&MCP

济曝喊 2 小时前
能力之源:模型、MCP 与工具系统核心解析

请关注公众号【碳硅化合物AI】
摘要

智能体需要与外部世界交互,这离不开模型、工具和 MCP(Model Context Protocol)的支持。AgentScope 通过统一的接口设计,让智能体能够无缝使用不同的模型提供商、执行各种工具函数,以及集成 MCP 服务。本文将深入分析 ChatModelBase 的模型无关设计、Toolkit 的工具管理机制,以及 MCP 协议的集成方式。通过阅读本文,你会理解框架如何实现"一次编程,适配所有模型",工具如何被注册和执行,以及 MCP 如何扩展智能体的能力边界。
1.png

入口类与类关系

模型系统的类层次

AgentScope 通过 ChatModelBase 抽象接口实现了模型无关设计:
2.png

工具系统的类层次

工具系统由 Toolkit 统一管理:
3.png

关键代码:ChatModelBase 接口

让我们看看模型基类是如何定义的:
  1. class ChatModelBase:
  2.     """Base class for chat models."""
  3.     model_name: str
  4.     """The model name"""
  5.     stream: bool
  6.     """Is the model output streaming or not"""
  7.     def __init__(
  8.         self,
  9.         model_name: str,
  10.         stream: bool,
  11.     ) -> None:
  12.         """Initialize the chat model base class."""
  13.         self.model_name = model_name
  14.         self.stream = stream
  15.     @abstractmethod
  16.     async def __call__(
  17.         self,
  18.         *args: Any,
  19.         **kwargs: Any,
  20.     ) -> ChatResponse | AsyncGenerator[ChatResponse, None]:
  21.         pass
  22.     def _validate_tool_choice(
  23.         self,
  24.         tool_choice: str,
  25.         tools: list[dict] | None,
  26.     ) -> None:
  27.         """Validate tool_choice parameter."""
  28.         # 验证工具选择参数的有效性
  29.         # ...
复制代码
这个接口非常简洁,只定义了核心方法。所有模型提供商都实现这个接口,这样智能体就可以无缝切换不同的模型。
关键流程分析

模型调用流程

模型调用的流程相对直接,但支持流式和非流式两种模式:
4.png

工具执行流程

工具执行是 ReAct 模式中的关键环节:
5.png

MCP 工具调用流程

MCP 协议的集成让 AgentScope 可以使用外部服务:
6.png

关键技术点

1. 模型无关设计的实现

这是 AgentScope 的一个核心设计理念。通过 ChatModelBase 抽象接口,所有模型提供商都实现相同的接口:
  1. @abstractmethod
  2. async def __call__(
  3.     self,
  4.     *args: Any,
  5.     **kwargs: Any,
  6. ) -> ChatResponse | AsyncGenerator[ChatResponse, None]:
  7.     pass
复制代码
这样,当你写代码时:
  1. # 可以轻松切换模型
  2. model = DashScopeChatModel(...)  # 或 OpenAIChatModel、GeminiChatModel 等
  3. agent = ReActAgent(model=model, ...)
复制代码
智能体的其他代码完全不需要改变。这种设计让框架具有极强的灵活性。
2. 异步调用和流式处理

AgentScope 1.0 完全拥抱异步编程。模型调用、工具执行都支持异步和流式:
  1. # 流式调用模型
  2. async for chunk in model(messages):
  3.     # 处理每个 chunk
  4.     print(chunk.content)
  5. # 流式执行工具
  6. async for chunk in toolkit.call_tool_function(tool_call):
  7.     # 处理工具执行结果
  8.     print(chunk.content)
复制代码
这种设计让框架能够:

  • 实时显示生成内容(流式输出)
  • 高效处理并发请求
  • 支持长时间运行的工具
3. MCP 协议的集成

MCP(Model Context Protocol)是一个标准协议,让智能体能够使用外部服务。AgentScope 通过 MCPClientBase 抽象接口支持 MCP:
  1. async def get_callable_function(
  2.     self,
  3.     func_name: str,
  4.     wrap_tool_result: bool = True,
  5. ) -> Callable:
  6.     """Get a tool function by its name."""
  7.     if self._tools is None:
  8.         await self.list_tools()
  9.    
  10.     target_tool = None
  11.     for tool in self._tools:
  12.         if tool.name == func_name:
  13.             target_tool = tool
  14.             break
  15.    
  16.     if target_tool is None:
  17.         raise ValueError(f"Tool '{func_name}' not found in the MCP server")
  18.    
  19.     return MCPToolFunction(
  20.         mcp_name=self.name,
  21.         tool=target_tool,
  22.         wrap_tool_result=wrap_tool_result,
  23.         client_gen=self.get_client,
  24.     )
复制代码
这个设计非常巧妙:

  • 无状态客户端:每次工具调用都创建新的会话,避免状态污染
  • 统一接口:MCP 工具和普通工具使用相同的接口
  • 细粒度控制:可以获取单个工具函数,也可以批量注册
4. 工具的执行和结果处理

Toolkit 的工具执行机制支持多种场景:
  1. async def call_tool_function(
  2.     self,
  3.     tool_call: ToolUseBlock,
  4. ) -> AsyncGenerator[ToolResponse, None]:
  5.     """Execute the tool function by the ToolUseBlock."""
  6.     # 检查工具是否存在
  7.     if tool_call["name"] not in self.tools:
  8.         return _object_wrapper(
  9.             ToolResponse(content=[TextBlock(...)]),
  10.             None,
  11.         )
  12.    
  13.     # 获取工具函数
  14.     tool_func = self.tools[tool_call["name"]]
  15.    
  16.     # 检查工具组是否激活
  17.     if (
  18.         tool_func.group != "basic"
  19.         and not self.groups[tool_func.group].active
  20.     ):
  21.         return _object_wrapper(
  22.             ToolResponse(content=[TextBlock(...)]),
  23.             None,
  24.         )
  25.    
  26.     # 准备参数并执行
  27.     # ...
复制代码
工具执行支持:

  • 同步/异步工具:自动包装同步工具为异步
  • 流式/非流式返回:统一返回 AsyncGenerator[ToolResponse, None]
  • 错误处理:自动捕获异常并返回错误信息
  • 工具分组:支持按组激活/停用工具
总结

模型、MCP 和工具系统是 AgentScope 框架中让智能体具备"能力"的三个核心系统:

  • 模型系统:通过统一的接口实现模型无关,让智能体可以无缝切换不同的模型提供商
  • 工具系统:通过 Toolkit 统一管理工具,支持分组、流式执行、错误处理等高级特性
  • MCP 系统:通过标准协议集成外部服务,扩展智能体的能力边界
这三个系统的设计都体现了 AgentScope 的核心理念:模块化、透明、可扩展。在下一篇文章中,我们会分析 Pipeline 和消息系统的实现,这些组件负责多智能体的协调和通信。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册