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

做网站需要的信息上海金山网站建设公司

做网站需要的信息,上海金山网站建设公司,做阀门销售在哪个网站上做好,dedecms下载站文章目录前言在BaseFactory基础上再抽一部分逻辑单例逻辑大模型逻辑以通义千问为例构建大模型工厂自定义大模型工厂前言 在前面的文章中,我们尝试了结构和客户端的构建,接下来我们就开始新的尝试:创建ChatOpenAI实例。 在BaseFactory基础上再…

文章目录

  • 前言
  • 在BaseFactory基础上再抽一部分逻辑
    • 单例逻辑
    • 大模型逻辑
  • 以通义千问为例构建大模型工厂
  • 自定义大模型工厂

前言

在前面的文章中,我们尝试了结构和客户端的构建,接下来我们就开始新的尝试:创建ChatOpenAI实例。

在BaseFactory基础上再抽一部分逻辑

在上一篇文章中,我们完成了基类BaseFactory,并实现了ClientFactory的单例。接下来,我们进一步在BaseFactory的基础上实现ChatOpenAI的实例化。

既然ClientFactory是全局唯一的,那我们也将ChatOpenAI的工厂也定义为全局唯一的。虽然这样会使得项目始终保存每一个工厂的实例,但是起码来说,比起反复创建又销毁,这样还是稍微简单一点。

既然所有的内容都是相同的,我们不妨再将一些逻辑抽离出来。比如,工厂构造的单例逻辑和构建大模型的逻辑。

单例逻辑

我们首先将单例逻辑抽离出来。

他们都使用了一个_instance和一个_instance_lock方法,所以把这部分抽离出来:

from pydantic import BaseModel, Field
class BaseFactory(BaseModel):base_url: str = Field(..., description="API Base URL")api_key: str = Field(..., description="API Key")timeout: float = Field(60.0, description="API Timeout")# ---------- 单例相关 ----------_instance: ClassVar[Optional["ClientFactory"]] = None_instance_lock: ClassVar[Lock] = Lock()# ===== 单例入口 =====@classmethoddef get_instance(cls, **kwargs) -> "ClientFactory":"""双重检查锁的线程安全单例"""if cls._instance is None:with cls._instance_lock:if cls._instance is None:cls._instance = cls(**kwargs)return cls._instance

看上去没啥问题。

P.S.:

根据这篇文章的描述,类方法get_instance虽然定义在了父类,但是子类继承之后,所传入的cls实际上就成了子类。所以,如果父类有这个方法,子类方法同样会按照父类的逻辑实现单例。非常的方便。

大模型逻辑

大模型相对来说更简单一些。既然已经传入了base_urlapi_keytimeout,那么基本上也就能够确定一系列的ChatOpenAI对象了。剩下的参数我们就放到build方法中,让build去创建对应的对象就好了。

但是呢,build方法如果放在BaseFactory中,那么BaseFactory的功能也就太多了,这看起来不太好。我们直接继承一个新的:

from httpx import Client
from langchain_openai.chat_models.base import ChatOpenAI
class BaseLLMFactory(BaseFactory):def build(self,model: str,temperature: float = 0.7,max_tokens: int = 256,client: Client = None) -> ChatOpenAI:return ChatOpenAI(model=model,temperature=temperature,max_tokens=max_tokens,client=client)

看着不错。当然,你也可以将client设置为必填或者在方法中检测并报错,这都是比较细节的小问题了。

以通义千问为例构建大模型工厂

BaseLLMFactory的基础上,我们就可以进一步确定一些具体厂商的大模型啦。比如说,我们创建一个千问大模型的类:

class TongyiFactory(BaseLLMFactory):...

是的,没错,他什么逻辑都不需要,定义出来就够用了。

我们尝试着使用一下:

import streamlit as st
from langchain_openai.chat_models.base import ChatOpenAIfrom factory.client import Clientllm: ChatOpenAI = TongyiFactory.get_instance(base_url=st.secrets["DASH_URL"],api_key=st.secrets["DASH_KEY"],_client=ClientFactory.get_instance(base_url=st.secrets["DASH_URL"],api_key=st.secrets["DASH_KEY"],timeout=st.secrets["DASH_TIMEOUT"],).client(),
).build(model="qwen-max",
)

看着好像有那么一点不太像python,甚至有点像Java

那我们再换个写法:

client = ClientFactory.get_instance(base_url=st.secrets["DASH_URL"],api_key=st.secrets["DASH_KEY"],timeout=st.secrets["DASH_TIMEOUT"],
).client()
llm: ChatOpenAI = TongyiFactory.get_instance(base_url=client.base_url,api_key=client.api_key,_client = client,
).build()

嗯……总之,挑你喜欢的方案就行。

自定义大模型工厂

既然通义千问可以,我自定义的行不行?

比如说,现在我在华为昇腾的卡上部署了一个DeepSeek-R1-Dstill-Llama-70B模型,于是我就用这样的模型再配一个工厂:

class DeepSeekFactory(BaseLLMFactory):...

同样的,定义出来就够用了。

试一下:

import streamlit as st
from langchain_openai.chat_models.base import ChatOpenAIfrom factory.client import ClientFactoryllm: ChatOpenAI = DeepSeekFactory.get_instance(base_url=st.secrets["deepseek_url"],api_key=st.secrets["deepseek_api_key"],_client = ClientFactory.get_instance(base_url=st.secrets["deepseek_url"],api_key=st.secrets["deepseek_api_key"],timeout=st.secrets["deepseek_timeout"],).client()
).build(model="DeepSeek-70B",temperature=0.7,max_tokens=4096,
)

然后就可以开心的使用了。

当然,你完全可以自己定义的时候将一些参数配死,这样的话build过程也就更简单了。

http://www.dtcms.com/a/444043.html

相关文章:

  • 网站空间计算遵义网络科技有限公司
  • 苏州网站建设熊掌号如何给网页命名
  • 动易网站模版的制作济南专业制作网站
  • 电商网站设计 页面转化率基金会网站建设方案
  • 重庆网站建设设计公司圣弘建设股份有限公司网站
  • k8s-RBAC鉴权
  • 摄影网站建设需求分析网站建设系统下载
  • 额尔古纳网站建设价格品牌推广岗位
  • 自己做的网站套dedecms教程最便宜服装网站建设
  • 网站建设有哪些环节wordpress 页面静态化
  • 有个蓝色章鱼做标志的网站自己会网站开发如何赚钱
  • 台州网站建站怎样做网贷网站
  • 网站方案制作的培训网络营销是什么?
  • 苍南规划建设局网站公司信息化网站建设实施方案
  • 网站设计与制作是网页吗直播网站开发价格
  • 上海外贸网站建设公司上海静安网站建设
  • 百度网站地图提交做h5动画的素材网站
  • 云虚拟主机建设网站一定要域名深圳网站建设罗湖
  • 咨询服务类网站建设优化方案英语必修三
  • 网站logo设计标准网站详情一般是什么公司做
  • conda命令速查
  • 用flash做的网站欣赏宁波网络推广运营公司电话
  • 网站的后台登录注册怎么做平台型网站建设方案
  • 深圳做微商网站公司WordPress不同尺寸图片
  • 重庆最好的网站建设公司外贸网站建设 蚂蚁 深圳
  • 手机网站设计案例吉林省吉林市为什么名字一样
  • 做网站用php还是html好建设部网站公示
  • 烟台北京网站建设公司wordpress企业模板主题
  • 河南网站网站建设个人网页设计师
  • 淮安做网站的公司一起做网站17杭州女装