2026/4/18 13:41:47
网站建设
项目流程
教育类网站源码,网站模板安卓,诗词门户网站,深圳好的品牌策划公司10.5 框架核心功能模块“agent_mcp/core”目录是本项目的核心功能模块#xff0c;实现了项目关键基础功能的实现与管理。负责处理代理身份验证#xff0c;确保系统访问安全#xff1b;进行项目配置管理#xff0c;集中管控各类配置参数#xff1b;还涉及全局层面的相关操…10.5 框架核心功能模块“agent_mcp/core”目录是本项目的核心功能模块实现了项目关键基础功能的实现与管理。负责处理代理身份验证确保系统访问安全进行项目配置管理集中管控各类配置参数还涉及全局层面的相关操作与支持为整个项目的稳定运行和核心功能交互提供底层保障是项目核心逻辑与基础服务的重要集合地。10.5.1 系统配置文件agent_mcp/core/config.py是本项目的核心配置文件负责系统多方面配置管理。例如下面代码的功能是配置应用程序的全局日志系统。原理是先获取根日志记录器并设置日志级别清除已有的处理器避免重复然后根据调试模式等条件分别添加文件处理器调试模式下启用用于将日志写入文件和控制台处理器根据配置决定是否启用带有彩色格式化以增强可读性同时还会对特def setup_logging(): 配置应用程序的全局日志记录。 root_logger logging.getLogger() # 获取根日志记录器 root_logger.setLevel(LOG_LEVEL) # 在根日志记录器上设置级别 # 清除根日志记录器上任何已存在的处理器以避免重复 for handler in root_logger.handlers[:]: root_logger.removeHandler(handler) # 1. 文件处理器仅在调试模式下 debug_mode os.environ.get(MCP_DEBUG, false).lower() true if debug_mode: file_formatter logging.Formatter(LOG_FORMAT_FILE) file_handler logging.FileHandler( LOG_FILE_NAME, modea, encodingutf-8 ) # 追加模式 file_handler.setFormatter(file_formatter) root_logger.addHandler(file_handler) # 2. 控制台处理器带颜色有条件启用 if CONSOLE_LOGGING_ENABLED: console_formatter ColorfulFormatter( LOG_FORMAT_CONSOLE, datefmt%H:%M:%S ) # 控制台使用更简洁的日期格式 console_handler logging.StreamHandler(sys.stdout) console_handler.setFormatter(console_formatter) # 如果需要可过滤控制台中不太重要的消息 # console_handler.setLevel(logging.INFO) # 示例控制台仅显示INFO及以上级别 root_logger.addHandler(console_handler) # 抑制特定库的过度冗长日志同时作用于文件和控制台 logging.getLogger(watchfiles).setLevel(logging.WARNING) # Uvicorn访问日志由Uvicorn的配置处理cli.py中access_logFalse # 但如果需要我们也可以尝试管理其错误日志记录器 logging.getLogger(uvicorn.error).setLevel(logging.WARNING) logging.getLogger(uvicorn).setLevel(logging.WARNING) # 通用uvicorn日志记录器 logging.getLogger(mcp.server.lowlevel.server).propagate ( False # 防止如果它直接记录时出现重复 )10.5.2 身份验证文件agent_mcp/core/auth.py实现了本项目的身份验证功能包括生成安全随机令牌、验证令牌是否有效且具备所需角色以及根据令牌获取对应的代理ID通过操作全局变量来管理和验证系统中代理与管理员的身份权限。def generate_token() - str: 生成一个安全的随机令牌。 return secrets.token_hex(16) def verify_token(token: str, required_role: str agent) - bool: 验证令牌是否有效且具备所需角色。 使用全局变量 g.admin_token 和 g.active_agents。 if not token: # 增加对空/None令牌的检查 return False if required_role admin and token g.admin_token: return True # 仅当active_agents不为None且令牌是其中的键时检查活跃代理 if required_role agent and g.active_agents and token in g.active_agents: return True # 也允许管理员令牌用于代理角色 if required_role agent and token g.admin_token: return True # 管理员可以充当代理 return False def get_agent_id(token: str) - Optional[str]: 从令牌获取代理ID。 使用全局变量 g.admin_token 和 g.active_agents。 if not token: # 增加对空/None令牌的检查 return None if token g.admin_token: return admin # “admin”是用于管理员操作的特殊代理ID # 仅当active_agents不为None且令牌是其中的键时检查活跃代理 if g.active_agents and token in g.active_agents: # 确保代理数据字典包含“agent_id” agent_data g.active_agents[token] if isinstance(agent_data, dict) and agent_id in agent_data: return agent_data[agent_id] return None