[大模型]Qwen1.5-7B-Chat 接入 LangChain 搭建知识库助手

Qwen1.5-7B-Chat 接入 LangChain 搭建知识库助手

环境准备

在 autodl 平台中租赁一个 3090 等 24G 显存的显卡机器,如下图所示镜像选择 PyTorch–>2.0.0–>3.8(ubuntu20.04)–>11.8

在这里插入图片描述

接下来打开刚刚租用服务器的 JupyterLab,并且打开其中的终端开始环境配置、模型下载和运行 demo。

pip 换源加速下载并安装依赖包

# 升级pip
python -m pip install --upgrade pip
# 更换 pypi 源加速库的安装
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

pip install modelscope==1.11.0
pip install "transformers>=4.37.0" accelerate tiktoken einops scipy transformers_stream_generator==0.0.4 peft deepspeed
pip install -U huggingface_hub

模型下载

使用 modelscope 中的 snapshot_download 函数下载模型,第一个参数为模型名称,参数 cache_dir 为模型的下载路径。

在 /root/autodl-tmp 路径下新建 model_download.py 文件并在其中输入以下内容,粘贴代码后记得保存文件,如下图所示。并运行 python /root/autodl-tmp/model_download.py 执行下载,模型大小为 14 GB,下载模型大概需要 2 分钟。


import torch
from modelscope import snapshot_download, AutoModel, AutoTokenizer
import os
model_dir = snapshot_download('qwen/Qwen1.5-7B-Chat', cache_dir='/root/autodl-tmp', revision='master')

代码准备

为便捷构建 LLM 应用,我们需要基于本地部署的 Qwen2-LM,自定义一个 LLM 类,将 Qwen2 接入到 LangChain 框架中。完成自定义 LLM 类之后,可以以完全一致的方式调用 LangChain 的接口,而无需考虑底层模型调用的不一致。

基于本地部署的 Qwen2 自定义 LLM 类并不复杂,我们只需从 LangChain.llms.base.LLM 类继承一个子类,并重写构造函数与 _call 函数即可:

from langchain.llms.base import LLM
from typing import Any, List, Optional
from langchain.callbacks.manager import CallbackManagerForLLMRun
from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig, LlamaTokenizerFast
import torch

class Qwen2_LLM(LLM):
    # 基于本地 Qwen2 自定义 LLM 类
    tokenizer: AutoTokenizer = None
    model: AutoModelForCausalLM = None
        
    def __init__(self, mode_name_or_path :str):

        super().__init__()
        print("正在从本地加载模型...")
        self.tokenizer = AutoTokenizer.from_pretrained(mode_name_or_path, use_fast=False)
        self.model = AutoModelForCausalLM.from_pretrained(mode_name_or_path, torch_dtype=torch.bfloat16, device_map="auto")
        self.model.generation_config = GenerationConfig.from_pretrained(mode_name_or_path)
        print("完成本地模型的加载")
        
    def _call(self, prompt : str, stop: Optional[List[str]] = None,
                run_manager: Optional[CallbackManagerForLLMRun] = None,
                **kwargs: Any):

        messages = [{"role": "user", "content": prompt }]
        input_ids = self.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
        model_inputs = self.tokenizer([input_ids], return_tensors="pt").to('cuda')
        generated_ids = self.model.generate(model_inputs.input_ids,max_new_tokens=512)
        generated_ids = [
            output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
        ]
        response = self.tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
        
        return response
    @property
    def _llm_type(self) -> str:
        return "Qwen2_LLM"

在上述类定义中,我们分别重写了构造函数和 _call 函数:对于构造函数,我们在对象实例化的一开始加载本地部署的 Qwen2 模型,从而避免每一次调用都需要重新加载模型带来的时间过长;_call 函数是 LLM 类的核心函数,LangChain 会调用该函数来调用 LLM,在该函数中,我们调用已实例化模型的 chat 方法,从而实现对模型的调用并返回调用结果。

在整体项目中,我们将上述代码封装为 LLM.py,后续将直接从该文件中引入自定义的 LLM 类。

调用

然后就可以像使用任何其他的langchain大模型功能一样使用了。

from LLM import Qwen2_LLM
llm = Qwen2_LLM(mode_name_or_path = "/root/autodl-tmp/qwen/Qwen1.5-7B-Chat")
llm("你是谁")

在这里插入图片描述

<think>好的,用户的问题是关于如何在本地部署Qwen2.5-VL 3B模型并将其集成到Dify平台。我需要先理解用户的需求,然后根据提供的引用资料和已有的知识来组织回答。 首先,用户提到的Qwen2.5-VL 3B模型,应该是一个视觉语言模型,支持多模态输入。本地部署可能需要使用Ollama这样的工具,因为引用中提到了使用Ollama部署Qwen2.57B)模型[^2][^3]。而Dify是一个用于构建和部署AI应用的开源平台,用户想将模型接入其中,可能需要通过API的方式。 接下来,我需要考虑步骤。根据引用资料,部署Qwen2.5的步骤包括安装Ollama、下载模型、启动服务,然后部署Dify并配置模型接入。但Qwen2.5-VL 3B可能有一些不同,需要确认是否有对应的Ollama支持。如果Ollama不支持,可能需要其他方法,比如直接使用模型的API或转换模型格式。 然后,检查引用中的信息。引用[2]提到用Ollama部署Qwen2.57B),所以可能同样适用于3B版本。但需要确认模型是否在Ollama的模型库中存在。如果不存在,可能需要用户自己创建Modelfile,或者从Hugging Face等平台下载并转换。 另外,Dify的部署步骤在引用[2]和[3]中都有提到,需要安装Dify社区版,配置环境变量,然后启动服务。接入模型时,需要在Dify中添加自定义模型,指向本地Ollama的API端点,比如http://localhost:11434/v1。 可能需要注意的地方包括模型是否支持视觉输入,因为Qwen2.5-VL是视觉语言模型,而Dify的默认配置可能只处理文本。这时候可能需要额外的配置来处理多模态数据,或者确保Dify的版本支持多模态输入。 用户的问题中还提到“实现与Dify平台的集成”,所以需要说明如何在Dify中添加模型,可能需要进入系统设置,填写模型名称和API端点,并测试连接是否成功。 总结步骤应该是:1. 部署Qwen2.5-VL 3B模型到本地,使用Ollama或直接运行;2. 部署Dify平台;3. 在Dify中配置模型API端点;4. 测试集成效果。同时,需要提醒用户注意资源要求,比如GPU显存,以及可能的依赖安装问题。 还需要生成相关问题,比如性能优化、多模态处理、私有化部署的其他方法等,这些可以基于引用中的内容扩展,例如引用[1]提到的模型对比,引用[2][3]中的部署步骤。</think>### 分步指南:本地部署 Qwen2.5-VL 3B 模型并接入 Dify 平台 #### 一、部署 Qwen2.5-VL 3B 模型 1. **环境准备** - 操作系统:建议使用 Linux(Ubuntu 20.04+)或 macOS - 硬件要求:至少 8GB 显存的 NVIDIA GPU,16GB 内存 - 安装依赖: ```bash # 安装 NVIDIA 驱动和 CUDA Toolkit sudo apt install nvidia-driver-535 cuda-12.2 # 安装 Python 3.10+ sudo apt install python3.10 python3-pip ``` 2. **通过 Ollama 部署(推荐)** ```bash # 安装 Ollama curl -fsSL https://ollama.com/install.sh | sh # 下载 Qwen2.5-VL 3B 模型(需确认模型已发布在 Ollama 库) ollama pull qwen2.5-vl-3b # 启动模型服务 ollama serve ``` - 验证 API 端点:浏览器访问 `http://localhost:11434` 显示 Ollama 版本信息[^3] 3. **原生部署(备用方案)** ```bash git clone https://github.com/QwenLM/Qwen-VL cd Qwen-VL pip install -r requirements.txt # 下载模型文件(需申请权限) wget https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL-3B-Chat.zip # 启动 FastAPI 服务 python openai_api.py --model-path ./Qwen-VL-3B-Chat --server-name 0.0.0.0 ``` #### 二、部署 Dify 平台 1. **Docker 部署** ```bash git clone https://github.com/langgenius/dify cd dify/docker # 修改 .env 文件配置 echo "OLLAMA_API_URL=http://localhost:11434" >> .env docker-compose up -d ``` - 访问 `http://localhost:8080` 进入 Dify 控制台[^2] 2. **模型接入配置** - 进入 Dify 控制台 → 设置 → 模型供应商 - 添加自定义模型: ``` 供应商名称:Qwen2.5-VL-3B API 端点:http://localhost:11434/v1(Ollama)或 http://localhost:8000/v1(原生部署) API 密钥:留空(本地部署无需鉴权) ``` #### 三、多模态支持配置 1. **文件预处理设置** ```yaml # 修改 dify 的 docker-compose.yml services: worker: environment: - SUPPORTED_FILE_EXTS=.png,.jpg,.pdf ``` 2. **测试视觉问答** ```python # 通过 Dify API 发送多模态请求 import requests response = requests.post( "http://localhost:8080/v1/chat/completions", json={ "model": "qwen2.5-vl-3b", "messages": [{ "role": "user", "content": [ {"type": "text", "text": "描述这张图片"}, {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}} ] }] } ) ``` #### 四、验证部署 1. **功能测试** - 在 Dify 创建包含图片上传功能的应用程序 - 上传测试图片并验证模型响应是否包含视觉内容分析 2. **性能调优** ```bash # 调整 Ollama 运行参数 OLLAMA_NUM_GPU=1 ollama serve # 修改 Dify 的批处理参数 echo "INFERENCE_BATCH_SIZE=4" >> .env ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FL1623863129

你的打赏是我写文章最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值