网站前置审批文件,四川有那些网站建设公司,哪里培训做网站,百度指数人群画像怎么看能力之源#xff1a;模型、MCP 与工具系统核心解析
请关注公众号【碳硅化合物AI】
摘要
智能体需要与外部世界交互#xff0c;这离不开模型、工具和 MCP#xff08;Model Context Protocol#xff09;的支持。AgentScope 通过统一的接口设计#xff0c;让智能体能够无缝…能力之源模型、MCP 与工具系统核心解析请关注公众号【碳硅化合物AI】摘要智能体需要与外部世界交互这离不开模型、工具和 MCPModel Context Protocol的支持。AgentScope 通过统一的接口设计让智能体能够无缝使用不同的模型提供商、执行各种工具函数以及集成 MCP 服务。本文将深入分析 ChatModelBase 的模型无关设计、Toolkit 的工具管理机制以及 MCP 协议的集成方式。通过阅读本文你会理解框架如何实现一次编程适配所有模型工具如何被注册和执行以及 MCP 如何扩展智能体的能力边界。入口类与类关系模型系统的类层次AgentScope 通过ChatModelBase抽象接口实现了模型无关设计工具系统的类层次工具系统由 Toolkit 统一管理关键代码ChatModelBase 接口让我们看看模型基类是如何定义的class ChatModelBase: Base class for chat models. model_name: str The model name stream: bool Is the model output streaming or not def __init__( self, model_name: str, stream: bool, ) - None: Initialize the chat model base class. self.model_name model_name self.stream stream abstractmethod async def __call__( self, *args: Any, **kwargs: Any, ) - ChatResponse | AsyncGenerator[ChatResponse, None]: pass def _validate_tool_choice( self, tool_choice: str, tools: list[dict] | None, ) - None: Validate tool_choice parameter. # 验证工具选择参数的有效性 # ...这个接口非常简洁只定义了核心方法。所有模型提供商都实现这个接口这样智能体就可以无缝切换不同的模型。关键流程分析模型调用流程模型调用的流程相对直接但支持流式和非流式两种模式工具执行流程工具执行是 ReAct 模式中的关键环节MCP 工具调用流程MCP 协议的集成让 AgentScope 可以使用外部服务关键技术点1. 模型无关设计的实现这是 AgentScope 的一个核心设计理念。通过ChatModelBase抽象接口所有模型提供商都实现相同的接口abstractmethod async def __call__( self, *args: Any, **kwargs: Any, ) - ChatResponse | AsyncGenerator[ChatResponse, None]: pass这样当你写代码时# 可以轻松切换模型modelDashScopeChatModel(...)# 或 OpenAIChatModel、GeminiChatModel 等agentReActAgent(modelmodel,...)智能体的其他代码完全不需要改变。这种设计让框架具有极强的灵活性。2. 异步调用和流式处理AgentScope 1.0 完全拥抱异步编程。模型调用、工具执行都支持异步和流式# 流式调用模型asyncforchunkinmodel(messages):# 处理每个 chunkprint(chunk.content)# 流式执行工具asyncforchunkintoolkit.call_tool_function(tool_call):# 处理工具执行结果print(chunk.content)这种设计让框架能够实时显示生成内容流式输出高效处理并发请求支持长时间运行的工具3. MCP 协议的集成MCPModel Context Protocol是一个标准协议让智能体能够使用外部服务。AgentScope 通过MCPClientBase抽象接口支持 MCPasync def get_callable_function( self, func_name: str, wrap_tool_result: bool True, ) - Callable: Get a tool function by its name. if self._tools is None: await self.list_tools() target_tool None for tool in self._tools: if tool.name func_name: target_tool tool break if target_tool is None: raise ValueError(fTool {func_name} not found in the MCP server) return MCPToolFunction( mcp_nameself.name, tooltarget_tool, wrap_tool_resultwrap_tool_result, client_genself.get_client, )这个设计非常巧妙无状态客户端每次工具调用都创建新的会话避免状态污染统一接口MCP 工具和普通工具使用相同的接口细粒度控制可以获取单个工具函数也可以批量注册4. 工具的执行和结果处理Toolkit 的工具执行机制支持多种场景async def call_tool_function( self, tool_call: ToolUseBlock, ) - AsyncGenerator[ToolResponse, None]: Execute the tool function by the ToolUseBlock. # 检查工具是否存在 if tool_call[name] not in self.tools: return _object_wrapper( ToolResponse(content[TextBlock(...)]), None, ) # 获取工具函数 tool_func self.tools[tool_call[name]] # 检查工具组是否激活 if ( tool_func.group ! basic and not self.groups[tool_func.group].active ): return _object_wrapper( ToolResponse(content[TextBlock(...)]), None, ) # 准备参数并执行 # ...工具执行支持同步/异步工具自动包装同步工具为异步流式/非流式返回统一返回AsyncGenerator[ToolResponse, None]错误处理自动捕获异常并返回错误信息工具分组支持按组激活/停用工具总结模型、MCP 和工具系统是 AgentScope 框架中让智能体具备能力的三个核心系统模型系统通过统一的接口实现模型无关让智能体可以无缝切换不同的模型提供商工具系统通过 Toolkit 统一管理工具支持分组、流式执行、错误处理等高级特性MCP 系统通过标准协议集成外部服务扩展智能体的能力边界这三个系统的设计都体现了 AgentScope 的核心理念模块化、透明、可扩展。在下一篇文章中我们会分析 Pipeline 和消息系统的实现这些组件负责多智能体的协调和通信。