Files
MuMuAINovel/backend/app/mcp/adapters/base.py
T
xiamuceer 69e3e46c96 feat: 优化MCP工具调用体验并集成通用适配器
- 静默检查MCP工具可用性,支持提示词注入调用mcp
- 集成UniversalMCPAdapter,支持自动API能力检测和智能降级
- 新增MCP适配器配置项,增强系统兼容性和健壮性
2025-11-24 11:30:27 +08:00

89 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""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