完整实现 Swarm 多智能体协作系统
- 新增 CLIPluginAdapter 统一接口 (backend/app/core/agent_adapter.py) - 新增 LLM 服务层,支持 Anthropic/OpenAI/DeepSeek/Ollama (backend/app/services/llm_service.py) - 新增 Agent 执行引擎,支持文件锁自动管理 (backend/app/services/agent_executor.py) - 新增 NativeLLMAgent 原生 LLM 适配器 (backend/app/adapters/native_llm_agent.py) - 新增进程管理器 (backend/app/services/process_manager.py) - 新增 Agent 控制 API (backend/app/routers/agents_control.py) - 新增 WebSocket 实时通信 (backend/app/routers/websocket.py) - 更新前端 AgentsPage,支持启动/停止 Agent - 测试通过:Agent 启动、批量操作、栅栏同步 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
58
backend/app/utils/singleton.py
Normal file
58
backend/app/utils/singleton.py
Normal file
@@ -0,0 +1,58 @@
|
||||
"""
|
||||
单例模式工具模块 - 统一管理全局服务实例
|
||||
"""
|
||||
|
||||
from typing import TypeVar, Type, Dict, Callable, Optional
|
||||
|
||||
T = TypeVar('T')
|
||||
|
||||
|
||||
class SingletonRegistry:
|
||||
"""单例注册表 - 统一管理所有服务实例"""
|
||||
|
||||
_instances: Dict[str, object] = {}
|
||||
_factories: Dict[str, Callable[[], object]] = {}
|
||||
|
||||
@classmethod
|
||||
def register(cls, name: str, factory: Callable[[], T]) -> None:
|
||||
"""注册服务工厂函数"""
|
||||
cls._factories[name] = factory
|
||||
|
||||
@classmethod
|
||||
def get(cls, name: str, instance_type: Type[T]) -> T:
|
||||
"""获取或创建服务实例"""
|
||||
if name not in cls._instances:
|
||||
if name not in cls._factories:
|
||||
raise KeyError(f"未注册的服务: {name}")
|
||||
cls._instances[name] = cls._factories[name]()
|
||||
return cls._instances[name]
|
||||
|
||||
@classmethod
|
||||
def reset(cls, name: Optional[str] = None) -> None:
|
||||
"""重置服务实例(用于测试)"""
|
||||
if name:
|
||||
cls._instances.pop(name, None)
|
||||
else:
|
||||
cls._instances.clear()
|
||||
|
||||
|
||||
def singleton_factory(factory: Callable[[], T]) -> Callable[[], T]:
|
||||
"""
|
||||
单例工厂装饰器
|
||||
|
||||
用法:
|
||||
@singleton_factory
|
||||
def get_service():
|
||||
return Service()
|
||||
|
||||
service = get_service() # 始终返回同一实例
|
||||
"""
|
||||
instance: Optional[T] = None
|
||||
|
||||
def wrapper() -> T:
|
||||
nonlocal instance
|
||||
if instance is None:
|
||||
instance = factory()
|
||||
return instance
|
||||
|
||||
return wrapper
|
||||
Reference in New Issue
Block a user