简单看看langchain中的一点qwen源码

前言

本文主要是继续深挖Tongyi类,并进一步探究详细的流程。个人理解不够全面,能够为大家给出的解释有限。

导入Tongyi类

Tongyi类是langchain_community.llms中的一个类。实际上,这个类是在langchain_community.llms文件夹下tongyi.py中的一个类,只不过因为langchain_community.llms文件夹下的__init__.py文件追加了一个方法:

def _import_tongyi() -> Type[BaseLLM]:
  from langchain_community.llms.tongyi import Tongyi
  return Tongyi

最终,在一个包含了无数个if-else__getattr__方法中,会根据传入name的值判断执到底执行哪一个大模型的import方法。

这个意思就是说,我们假设现在新开发了一个大模型,叫做Ninedays就当这个叫做九天吧),并存入ninedays.py。我们想要导入这个Ninedays大模型,也就可以通过from langchain_community.llms import Ninedays导入。

导入的过程将首先经过__init__.py方法中的__getattr__方法,用于访问没有直接定义出来的数据。此时,在__getattr__方法中增加:

if name == "Ninedays":
  from langchain_community.llms.ninedays import Ninedays

这个意思就是,我经过__getattr__访问到了Ninedayes这个name,并且通过大量的if-else查询到了这个执行条件,于是开始导入大模型。

这种方法是一种懒加载的实现方法,非常方便。

配置Tongyi类

langchain_community.llms文件夹下的tongyi.py文件中,里面有这么几个属性:

client: Any  #: :meta private:
model_name: str = "qwen-plus"

"""Model name to use."""
model_kwargs: Dict[str, Any] = Field(default_factory=dict)

top_p: float = 0.8
"""Total probability mass of tokens to consider at each step."""

dashscope_api_key: Optional[str] = None
"""Dashscope api key provide by Alibaba Cloud."""

streaming: bool = False
"""Whether to stream the results or not."""

max_retries: int = 10
"""Maximum number of retries to make when generating."""

其中:

  • client并不确定是什么,没有相关定义,但是会按照llm.client.call执行,其中llmTongyi类的实例。
  • model_nameqwen-plus,表示默认的模型名称。
  • model_kwargs是空字典,表示默认的模型参数。
  • top_p是0.8,是model_kwargs中的top_p参数。
  • dashscope_api_key是通义千问的api-key
  • streaming表示最终的输出是否是流式输出。
  • max_retries是10,表示最多允许的重试次数。

我们初始化的过程中,往往也是直接自定义这些参数:

llm = Tongyi(
  dashscope_api_key="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
)

读取api-key

读取的方式有很多种,包括yaml配置、xml配置、txt配置、properties配置乃至数据库配置等等,Python也为每一种配置都有特定的工具库,非常方便。下面仅介绍3种推荐配置方法。

os配置

Tongyi初始化的过程中,会执行一个validate_environment方法,将检查环境是否满足要求:

@root_validator()
def validate_environment(cls, values: Dict) -> Dict:
  """Validate that api key and python package exists in environment."""
  values["dashscope_api_key"] = get_from_dict_or_env(
    values, "dashscope_api_key", "DASHSCOPE_API_KEY"
  )
  try:
    import dashscope
  except ImportError:
    raise ImportError(
      "Could not import dashscope python package. "
      "Please install it with `pip install dashscope`."
    )
  try:
    values["client"] = dashscope.Generation
  except AttributeError:
    raise ValueError(
      "`dashscope` has no `Generation` attribute, this is likely "
      "due to an old version of the dashscope package. Try upgrading it "
      "with `pip install --upgrade dashscope`."
    )
  return values

首先一上来就是执行get_from_dict_or_env,这个方法将会在values中获取dashscope_api_key,如果获取不到,则从os.environ中获取DASHSCOPE_API_KEY

既然知道这个,那就好办了&#

### LangChain4j 中 Qwen 和 vLLM 集成概述 LangChain 是一种用于构建基于大型语言模型的应用程序的框架,支持多种不同的大模型和工具链[^1]。对于 Java 生态中的开发者来说,LangChain4j 提供了一种方式来集成先进的语言模型如 Qwen 及高效的推理引擎如 vLLM。 #### 使用 Qwen 模型 Qwen 属于阿里云推出的大规模预训练模型系列,在自然语言理解和生成方面表现出色。为了在 LangChain4j 应用中使用 Qwen- **引入依赖**:首先需确保项目已添加必要的 Maven 或 Gradle 依赖项以访问 Qwen SDK。 - **配置客户端**:创建并初始化 Qwen 客户端实例,设置好认证信息以便能够顺利调用远程API服务。 ```java // 创建 QwenClient 实例 QwenClient qwenClient = new DefaultQwenClient("<your-access-key-id>", "<your-secret>"); ``` #### 整合 vLLM 推理库 vLLM 能够加速 LLM 的部署过程,并简化其作为微服务运行的操作[^2]。当考虑将其与 LangChain4j 结合时, - **安装 vLLM**:按照官方文档指导完成 Python 环境下的安装工作。 - **启动 HTTP Server**:利用 vLLM 内置命令行工具开启 RESTful API 服务器,监听来自外部请求的数据流。 ```bash # 启动 vLLM server (假设已经设置了环境变量 VLLM_MODEL_PATH) vllm serve --model-path $VLLM_MODEL_PATH --port 8080 ``` #### 构建交互逻辑 借助上述组件之后,下一步就是定义应用程序内部的具体业务流程了。这通常涉及到接收用户输入、解析意图以及最终返回恰当的回答给前端展示层。 ```java public String processUserQuery(String userInput) { // 将用户的查询转发至 Qwen 进行情感分析或其他 NLP 处理... Map<String, Object> payload = new HashMap<>(); payload.put("prompt", userInput); HttpResponse response = qwenClient.post("/api/v1/inference", payload).execute(); JSONObject jsonResponse = JSON.parseObject(response.body().string()); String processedText = jsonResponse.getString("result"); // 如果有必要的话还可以进一步传递给 vLLM 来获取更加复杂的回复内容 return processedText; } ``` 通过这种方式,不仅实现了对本地化资源的有效管理和调度,同时也充分利用到了云端的强大计算能力,为用户提供高质量的服务体验[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ordinary_brony

代码滞销,救救码农

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值