使用fastgpt高效搭建本地离线大语言模型(Chatglm2)问答平台

官网的接入本地模型的流程,写的太笼统且分散了,踩了无数坑,在阿里云上ubuntu20部署好了,以下是流程。

系统:ubuntu20(22也是一致的)

网络:需要魔法

cuda环境:cuda12.0

一、安装基本环境

1、安装git和git-lfs

apt install git
apt install git-lfs

2、安装docker以及docker-compose

apt update

#安装先决条件安装允许apt通过HTTPS使用仓库的软件包
apt install apt-transport-https ca-certificates curl software-properties-common

#安装Docker的密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

#添加Docker仓库
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

#更新数据库
apt update

#使用刚刚添加的库安装Docker
apt-cache policy docker-ce

#安装docker
apt install docker-ce

#启动docker
systemctl enable docker

systemctl start docker

#安装docker-compose
curl -L "https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

docker-compose version

3、在本地安装miniconda3或者python

 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
chmod +x Miniconda3-latest-Linux-x86_64.sh
./Miniconda3-latest-Linux-x86_64.sh
source ~/.bashrc
conda --version

4、拉取相关的代码和模型

git clone https://github.com/THUDM/chatglm2-6b
git clone https://huggingface.co/moka-ai/m3e-large
git clone https://github.com/labring/FastGPT
git clone https://github.com/songquanpeng/one-api

cd chatglm2-6b && git lfs install && git lfs pull
cd m3e-large && git lfs install && git lfs pull

5、安装python环境

pip install torch==2.0.1+cu117 torchvision==0.15.2+cu117 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu117 

cd chatglm2-6b
pip install -r requirements.txt

cd /Fastgpt/files/models/ChatGLM2 #注释掉requirements.txt里面的torch
pip install -r requirements.txt

二、启动本地模型

#可以修改openai_api.py里面的模型权重路径,不修改的话是自己下载官方的,需要科学的环境
cd FastGPT/files/models/ChatGLM2

python openai_api.py

可能会在知识库回答中出现问题,可以修改openai_api.py

#添加这个函数
def merge_content(messages):
    merged_messages = []
    system_content = ""
    for message in messages:
        if message.role == "system":
            system_content += message.content
        else:
            if system_content:
                merged_messages.append(ChatMessage(
                    role="system", content=system_content))
                system_content = ""
            merged_messages.append(message)
    if system_content:
        merged_messages.append(ChatMessage(
            role="system", content=system_content))
    return merged_messages
    
#原始代码,不用管,为了定位到需要修改的地方:
query = request.messages[-1].content
prev_messages = request.messages[:-1]

#添加prev_messages = merge_content(prev_messages)

调用接口

curl --location --request POST 'http://localhost:6006/v1/embeddings' \
--header 'Authorization: Bearer sk-aaabbbcccdddeeefffggghhhiiijjjkkk' \
--header 'Content-Type: application/json' \
--data-raw '{
  "model": "m3e",
  "input": ["hello world"]
}'


curl --location --request POST 'http://localhost:6006/v1/chat/completions' \
--header 'Authorization: Bearer sk-aaabbbcccdddeeefffggghhhiiijjjkkk' \
--header 'Content-Type: application/json' \
--data-raw '{
  "model": "chatglm2",
  "messages": [{"role": "user", "content": "Hello!"}]
}'

 

三、启动OneAPI

docker配置本地代理,需要先开启科学上网环境

配置 Docker 代理创建目录mkdir -p /etc/systemd/system/docker.service.d

vim  /etc/systemd/system/docker.service.d/http-proxy.conf

在http-proxy.conf文件中添加如下:

                [Service]

                Environment="HTTP_PROXY=http://192.168.253.2:7890"

                Environment="HTTPS_PROXY=http://192.168.253.2:7890"

#直接运行这行命令,docker会自动下载justsong/one-api镜像
docker run --name one-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v /home/data:/data justsong/one-api
 

 通过http://localhost:3000/ root/123456 登录OneAPI,将模型接入到OneAPI 

四、启动Fastgpt

修改FastGPT\files\deploy\fastgpt\docker-compose.yml这个文件

FastGPT\files\deploy\fastgpt\docker-compose.yml
  fastgpt:
    container_name: fastgpt
    image: ghcr.io/labring/fastgpt:latest # git
    # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:latest # 阿里云 建议使用
    ports:
      - 3003:3000#需要修改端口号,因为3000已经被OneAPI使用了
    environment:
      # root 密码,用户名为: root
      - DEFAULT_ROOT_PSW=1234
      # 中转地址,如果是用官方号,不需要管
      - OPENAI_BASE_URL=http://47.108.92.86:3000/v1 #OneAPi的地址
      - CHAT_API_KEY=sk-bo0u9bqdXMrNnYNR059d29849f9148268c172505C0Fb2e05

修改FastGPT\files\deploy\fastgpt\config.json文件,添加  

"ChatModels": [
    //已有模型
    {
      "model": "chatglm2-6b-int4",
      "name": "chatglm2",
      "contextMaxToken": 8000,
      "quoteMaxToken": 4000,
      "maxTemperature": 1.2,
      "price": 0,
      "defaultSystem": ""
    }
  ],

"VectorModels": [
    {
      "model": "m3e",
      "name": "M3E(测试使用)",
      "price": 0.0,
      "defaultToken": 500,
      "maxToken": 1800
    }
],

 启动容器

cd FastGPT\files\deploy\fastgpt
docker-compose up -d  #运行
docker-compose restart #重启
docker-compose down #关闭 

 可以看到有四个容器正在运行。进入fastgpt http://localhost:3003/ root/1234,选择知识库和对话引导

搭建完成  

 参考:高效搭建离线大语言模型问答平台:实用指南

            https://doc.fastgpt.run/docs/custom-models/chatglm2/

### 使用 FastGPT 和 DeepSeek 模型搭建本地知识库问答系统 #### 构建环境准备 为了使用 FastGPT 接入 DeepSeek 模型并构建基于本地知识库的问答系统,需先安装必要的依赖项以及配置开发环境。确保已安装 Python 环境,并通过 pip 安装所需包。 ```bash pip install fastgpt deepseek ``` #### 创建项目结构 建立合理的文件夹结构有助于更好地管理项目资源: ``` project/ │── data/ # 存储本地知识库的数据集 │── models/ # 预训练模型和其他辅助工具的位置 └── app.py # 主应用程序入口脚本 ``` #### 加载与预处理数据 利用 FastGPT 提供的功能加载本地知识库中的文档,并对其进行清洗和分词等预处理操作以便后续索引化处理[^1]。 ```python from fastgpt import DataPreprocessor, DocumentLoader loader = DocumentLoader('data/local_kb.txt') documents = loader.load() preprocessor = DataPreprocessor() cleaned_docs = preprocessor.process(documents) ``` #### 初始化 DeepSeek 模型实例 初始化 DeepSeek 的检索增强生成 (RAG) 模型用于理解查询意图并与知识库匹配最相关的片段作为上下文输入给最终的回答生成器。 ```python import deepseek as ds rag_model = ds.RagModel(pretrained='deepset/deberta-v3-base-squad2', device='cuda' if torch.cuda.is_available() else 'cpu') ``` #### 设计对话逻辑 定义一个简单的函数来接收用户的提问请求,调用上述设置好的组件完成整个推理过程返回答案字符串。 ```python def get_answer(question): context = rag_model.retrieve_context(question=question, documents=cleaned_docs)[:5] answer = rag_model.generate_answer( question=question, contexts=context ) return answer ``` #### 启动服务接口 最后一步是将此功能封装成 RESTful API 或者其他形式的服务端点,方便前端应用或其他程序调用来实现交互式体验。 ```python if __name__ == '__main__': from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/ask', methods=['POST']) def ask(): req_data = request.get_json(force=True) user_question = req_data['query'] response = { "answer": get_answer(user_question), } return jsonify(response) app.run(host="0.0.0.0", port=8080) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值