一起看langchain-chatchat代码 - 不同模型类的引入方法


前言

了解了langchain-chatchat代码的必备知识之后,我们看代码轻松了许多,从这一期开始,我们正式开始看langchain-chatchat的代码。这一篇我们要讲的是langchain-chatchat是如何找到并实例化模型类的


一、疑惑的地方

一般我们都不会太去关注 ① 的代码,觉得只是取配置文件的信息,就直接往下走到 ②
在这里插入图片描述
进入②的函数,在如下的地方就会产生两个疑惑:
1)这个worker_class 到底是什么,是字符串吗?
2) 为什么它可以直接传值,变成一个 worker对象呢
在这里插入图片描述

二、回退之前的代码

1. 回退到run_model_worker

这个worker_class 只能是通过 下图 ① 产生的
在这里插入图片描述

2. 进入 get_model_worker_config

我们可以看到worker_class 是通过getattr(model_workers, provider) 产生的。
在这里插入图片描述
provider 之前的文章里介绍过,它来自配置文件 里的对应模型配置的 provider属性
在这里插入图片描述
那前面的 model_workers呢?
可以看到,它来自下面这句话

from server import model_workers

它是model_workers模块

3. getattr(model_workers, provider) 到底怎么运作的

我们可以写一段代码来测试下

if __name__ == "__main__":


    import server.model_workers as model_workers

    model = getattr(model_workers, "QwenWorker")
    # 获取model的类名
    print(model.__name__)

放到langchain-chatchat的根目录里,用debug模式运行它
第一步:可以看到 引入的model_workers模块实际上包含了它目录下面全部的类
在这里插入图片描述
第二步:可以看到通过 getattr 筛选了 QwenWorker这个类
在这里插入图片描述

4. 解析

1) 在model_workers模块下有一个 init.py 程序,它的代码是这样。

.base 里的 . 指的是 当前目录 也就是 当前目录里的 base.py 文件。以下以此类推。
那为什么其他的都是 明确类名,.base 引入的是 * 呢,因为base.py 里有多个类

通过import server.model_workers as model_workers得到一个包含多个类的实例的模块。因为文件特别多,所以我们能感觉到代码有一段时间的延迟

from .base import *
from .zhipu import ChatGLMWorker
from .minimax import MiniMaxWorker
from .xinghuo import XingHuoWorker
from .qianfan import QianFanWorker
from .fangzhou import FangZhouWorker
from .qwen import QwenWorker
from .baichuan import BaiChuanWorker
from .azure import AzureWorker
from .tiangong import TianGongWorker
from .gemini import GeminiWorker

2)getattr(model_workers, “QwenWorker”) 获取 属性名为 QwenWorker的实例


总结

现在我们就能看懂这段代码了。我们看代码的时候可以更细节一些,遇到不明白的函数和流程最好不要囫囵吞枣的绕过去了。可以查查资料,弄明白。

对了还要补一小段。下面这种写法会在 pop之后,键"a"就被删掉了。langchain-chatchat特别喜欢用这个写法。所以如果还想往其他函数传kwargs ,我们就要特别注意是不是在上一个函数里被pop掉了

kwargs = {"a": 1, "b": 2}
print(kwargs.pop("a"))
<think>好的,我现在需要帮助用户解决如何下载LangChain-Chatchat的源码。首先,用户的问题是关于如何从GitHub下载这个项目的源代码,我需要根据提供的引用信息给出正确的步骤。 首先,查看用户提供的引用内容,特别是引用[1]、[3]和[4]都提到了项目的GitHub地址:https://github.com/chatchat-space/Langchain-Chatchat。所以第一步应该是确认仓库地址的正确性,并指导用户使用git clone命令克隆仓库。引用[3]中提到了具体的安装步骤,包括创建conda环境、克隆仓库、安装依赖等,这些可以作为参考。 接下来,我需要整理下载源码的具体步骤。用户可能需要先安装git,但假设用户已经具备基本的开发环境,如安装了Git和Python。然后,按照引用[3]的流程,克隆仓库的命令是git clone加上仓库URL。这一步需要详细写出,确保用户能正确执行。 另外,引用[3]和[4]提到了安装依赖,但用户的问题只是关于源码下载,所以可能不需要涉及后续的依赖安装步骤。不过,可能需要简要提及后续步骤,让用户知道下载后还需要做什么,但重点放在下载部分。 需要注意用户可能的操作系统环境,如Windows,但git命令在Windows的Git Bash或CMD中同样适用。同时,确保用户了解如何进入克隆后的目录,可能需要cd命令切换目录。 用户可能遇到的问题可能包括网络连接导致克隆失败,或者没有安装git。这时候需要提醒用户检查git安装和网络设置,或者直接下载ZIP文件作为备选方案。例如,在GitHub页面上有一个“Code”按钮,点击后可以选择下载ZIP,这对于不熟悉git的用户可能更友好。 此外,引用[3]中的用户使用的是Windows系统,所以可能需要特别说明在Windows下的操作步骤,比如使用Git Bash或PowerShell来执行命令。同时,提醒用户确保安装了正确版本的Python和其他依赖,但下载源码本身不需要这些,只需要git即可。 最后,需要检查步骤是否清晰,是否覆盖了所有可能的情况,比如git安装、克隆命令、备选下载方式。确保回答结构符合用户的要求,分步骤说明,并引用相关的引用来源,比如引用[1]和[3]中的GitHub链接和步骤。 总结下来,回答应该包括以下几个部分: 1. 确认GitHub仓库地址。 2. 使用git clone命令下载源码。 3. 备选方案:下载ZIP文件。 4. 后续步骤提示(如安装依赖等)。 5. 注意事项,如需要git、网络问题等。 需要确保所有信息准确,引用正确,并且语言简洁明了,帮助用户顺利完成源码下载。</think>### 分步下载 LangChain-Chatchat 源码指南 #### 1. 确认 GitHub 仓库地址 LangChain-Chatchat 的官方开源仓库地址为: https://github.com/chatchat-space/Langchain-Chatchat [^1] #### 2. 使用 Git 克隆源码(推荐方式) **步骤说明:** 1. **安装 Git**(如未安装): 前往 [Git 官网](https://git-scm.com/) 下载并安装适合你操作系统的版本。 2. **执行克隆命令**: 打开终端(Windows 用户可使用 Git Bash 或 PowerShell),输入以下命令: ```bash git clone https://github.com/chatchat-space/Langchain-Chatchat.git ``` 此命令会将仓库完整克隆到当前目录下的 `Langchain-Chatchat` 文件夹中[^3]。 #### 3. 备选方案:直接下载 ZIP 文件 1. **访问 GitHub 页面**: 打开 [LangChain-Chatchat GitHub 仓库](https://github.com/chatchat-space/Langchain-Chatchat)。 2. **点击绿色按钮**: 找到页面右上角的绿色按钮 **`Code`**,点击后选择 **`Download ZIP`**。 3. **解压文件**: 下载完成后解压 ZIP 文件即可获取源码。 --- #### 后续操作建议(非下载必需) 若需运行项目,请参考以下步骤: 1. **创建 Python 虚拟环境**(推荐): ```bash conda create -n Langchain-Chatchat python=3.10 conda activate Langchain-Chatchat ``` 2. **安装依赖**: ```bash cd Langchain-Chatchat # 进入源码目录 pip install -r requirements.txt ``` 具体依赖安装流程可参考引用[^4]。 --- #### 注意事项 - **网络问题**:若克隆速度慢,可尝试配置 Git 代理或使用国内镜像。 - **版本选择**:GitHub 默认下载最新版代码,如需历史版本可在仓库的 **`Releases`** 页面选择。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值