feat: 优化MCP工具调用体验并集成通用适配器
- 静默检查MCP工具可用性,支持提示词注入调用mcp - 集成UniversalMCPAdapter,支持自动API能力检测和智能降级 - 新增MCP适配器配置项,增强系统兼容性和健壮性
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
"""MCP适配器基类"""
|
||||
|
||||
from abc import ABC, abstractmethod
|
||||
from enum import Enum
|
||||
from typing import Dict, Any, List, Optional
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
class AdapterType(Enum):
|
||||
"""适配器类型"""
|
||||
FUNCTION_CALLING = "function_calling" # 标准Function Calling
|
||||
PROMPT_INJECTION = "prompt_injection" # 提示词注入
|
||||
REACT = "react" # ReAct模式
|
||||
XML = "xml" # XML标记
|
||||
|
||||
|
||||
@dataclass
|
||||
class ToolCallResult:
|
||||
"""工具调用结果"""
|
||||
tool_calls: List[Dict[str, Any]] # 解析出的工具调用
|
||||
raw_response: str # 原始AI响应
|
||||
has_tool_calls: bool # 是否包含工具调用
|
||||
needs_continuation: bool = False # 是否需要继续对话
|
||||
|
||||
|
||||
class BaseMCPAdapter(ABC):
|
||||
"""MCP适配器基类"""
|
||||
|
||||
def __init__(self):
|
||||
self.adapter_type: AdapterType = AdapterType.PROMPT_INJECTION
|
||||
|
||||
@abstractmethod
|
||||
def format_tools_for_prompt(
|
||||
self,
|
||||
tools: List[Dict[str, Any]],
|
||||
user_message: str
|
||||
) -> str:
|
||||
"""
|
||||
将工具列表格式化为提示词
|
||||
|
||||
Args:
|
||||
tools: MCP工具列表
|
||||
user_message: 用户消息
|
||||
|
||||
Returns:
|
||||
格式化后的提示词
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def parse_tool_calls(self, ai_response: str) -> ToolCallResult:
|
||||
"""
|
||||
从AI响应中解析工具调用
|
||||
|
||||
Args:
|
||||
ai_response: AI的原始响应
|
||||
|
||||
Returns:
|
||||
解析结果
|
||||
"""
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def build_continuation_prompt(
|
||||
self,
|
||||
original_message: str,
|
||||
ai_response: str,
|
||||
tool_results: List[Dict[str, Any]]
|
||||
) -> str:
|
||||
"""
|
||||
构建包含工具结果的继续对话提示词
|
||||
|
||||
Args:
|
||||
original_message: 原始用户消息
|
||||
ai_response: AI响应
|
||||
tool_results: 工具执行结果
|
||||
|
||||
Returns:
|
||||
继续对话的提示词
|
||||
"""
|
||||
pass
|
||||
|
||||
def supports_native_tools(self) -> bool:
|
||||
"""是否支持原生工具调用(如Function Calling)"""
|
||||
return False
|
||||
|
||||
def get_adapter_type(self) -> AdapterType:
|
||||
"""获取适配器类型"""
|
||||
return self.adapter_type
|
||||
Reference in New Issue
Block a user