当前位置: 首页 > news >正文

单例模式管理模型客户端的几种实现方式

 

使用大模型的时候,模型客户端只需要创建一个,这就要用到单例模式。

 

1. 使用类变量存储实例

通过类变量保存唯一的实例对象,确保全局只有一个实例。

class ModelClientManager:_instance = None  # 类变量,用于存储唯一实例def __new__(cls):if cls._instance is None:cls._instance = super().__new__(cls)cls._instance.client = cls._create_model_client()return cls._instance@staticmethoddef _create_model_client():# 创建模型客户端的逻辑return OpenAIChatCompletionClient(model=os.getenv("MODEL", "glm-4.7"),base_url=os.getenv("BASE_URL", "https://open.bigmodel.cn/api/paas/v4/"),api_key=os.getenv("API_KEY"),)def get_client(self):return self.client

  

说明:

  • __new__ 方法控制实例的创建过程,确保只创建一次
  • _create_model_client 是静态方法,用于初始化模型客户端
  • cls._instance.client = cls._create_model_client(),表示为这个新实例初始化 client 属性,值为 _create_model_client() 方法创建的模型客户端

 

 

2. 线程安全的单例实现

如果需要支持多线程环境,可以引入锁机制保证线程安全。

import threadingclass ThreadSafeModelClientManager:_instance = None_lock = threading.Lock()  # 线程锁def __new__(cls):if cls._instance is None:with cls._lock:if cls._instance is None:cls._instance = super().__new__(cls)cls._instance.client = cls._create_model_client()return cls._instance@staticmethoddef _create_model_client():return OpenAIChatCompletionClient(model=os.getenv("MODEL", "glm-4.7"),base_url=os.getenv("BASE_URL", "https://open.bigmodel.cn/api/paas/v4/"),api_key=os.getenv("API_KEY"),)def get_client(self):return self.client

  

说明:

  • 使用 threading.Lock() 确保在多线程环境下实例创建的原子性。

 

3. 装饰器实现单例

通过装饰器简化单例模式的实现

def singleton(cls):instances = {}def get_instance(*args, **kwargs):if cls not in instances:instances[cls] = cls(*args, **kwargs)return instances[cls]return get_instance@singleton
class DecoratorModelClientManager:def __init__(self):self.client = self._create_model_client()@staticmethoddef _create_model_client():return OpenAIChatCompletionClient(model=os.getenv("MODEL", "glm-4.7"),base_url=os.getenv("BASE_URL", "https://open.bigmodel.cn/api/paas/v4/"),api_key=os.getenv("API_KEY"),)def get_client(self):return self.client

  

说明:

  • 装饰器 singleton 统一管理实例的创建和访问。
  • 适用于希望以更简洁方式实现单例的场景。

 

4. 模块级单例

将实例定义在模块级别,天然具备单例特性。

# model_client_manager.py
import os
from autogen_ext.models.openai import OpenAIChatCompletionClientclass ModelClientManager:def __init__(self):self.client = self._create_model_client()@staticmethoddef _create_model_client():return OpenAIChatCompletionClient(model=os.getenv("MODEL", "glm-4.7"),base_url=os.getenv("BASE_URL", "https://open.bigmodel.cn/api/paas/v4/"),api_key=os.getenv("API_KEY"),)def get_client(self):return self.client# 模块级单例实例
model_client = ModelClientManager()

  

说明:

  • 在模块中直接创建实例 manager,其他模块导入时共享同一实例。
  • 简单直观,适合小型项目或无需复杂控制的场景。

 

5. 使用示例

无论采用哪种方式,调用时均通过单例获取客户端:

# 获取模型客户端
client = ModelClientManager().get_client()
# 或者(模块级单例)
from model_client_manager import model_client
client = model_client.get_client()

 

http://www.jsqmd.com/news/358778/

相关文章:

  • OpenClaw 最新保姆级飞书对接指南教程 搭建属于你的 AI 助手
  • 4.6 显存和缓存
  • Flutter for OpenHarmony:音律尺 - 基于Flutter的Web友好型节拍器开发与节奏可视化实现
  • Flutter for OpenHarmony:跨平台虚拟标尺实现指南 - 从屏幕测量原理到完整开发实践
  • Typora绘制-甘特图
  • Flutter for OpenHarmony:语桥 - 基于Flutter的离线多语言短语速查工具实现与国际化设计理念
  • 20. new关键字
  • Flutter for OpenHarmony:绿氧 - 基于Flutter的呼吸训练应用开发实践与身心交互设计
  • 2026年2月ppt免费生成平台权威推荐,智能生成效率与效果深度解析! - 品牌鉴赏师
  • Flutter for OpenHarmony:日迹 - 用 Flutter 打造极简习惯打卡日历的实现与设计哲学
  • Docker Desktop
  • Delphi接收从文件管理器拖放过来的文件名
  • python Uvicorn库,深度解析
  • Calico API:Kubernetes容器网络与安全的核心API定义库
  • 北京上门回收老旧古书店铺科普推荐 2家正规机构,丰宝斋支持全国上门变现 - 品牌排行榜单
  • 2026-02-08 大模型集成小模型技术研究综述
  • Claude Code初体验记录
  • 杜绝压价乱象,京城亚南酒业规范北京五粮液老酒回收市场 - 品牌排行榜单
  • 导师又让重写?8个降AI率平台深度测评与推荐
  • python asyncpg库,深度解析
  • 小程序毕设项目:基于springboot+小程序的社区GO团购活动小程序的设计与实现(源码+文档,讲解、调试运行,定制等)
  • 小程序计算机毕设之基于SpringBoot的社区线上团购系统基于springboot+小程序的社区GO团购活动小程序的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • Python Pydantic库深度解析
  • 实测才敢推!专科生专属降AIGC网站 —— 千笔
  • python Redis库,深度解析
  • python SQLAlchemy 库,深度解析
  • 高频方波电压注入零低速IPMSM无感控制算法仿真,在估计的d轴注入高频方波电压来估计转子位置
  • 【计算机毕业设计案例】基于springboot+小程序的社区GO团购活动小程序的设计与实现商品发布、拼团下单、统一配送、社区自提(程序+文档+讲解+定制)
  • 别再瞎找了!10个降AI率网站深度测评与推荐,研究生必备
  • 计算机毕业设计springboot艺术教培机构学员信息管理系统 基于SpringBoot的艺术培训中心学员综合管理平台 SpringBoot框架下的艺术教育学校学员教务管理系统