大模型系列-fastgpt,ollama搭建本地知识库

大模型系列-fastgpt,ollama搭建本地知识库

      • [1. 安装fastgpt,oneapi](#1. 安装fastgpt,oneapi)
      • [2. 安装ollama运行大模型](#2. 安装ollama运行大模型)
        • [2.1. 安装ollama](#2.1. 安装ollama)
        • [2.2. ollama下载模型](#2.2. ollama下载模型)
      • [3. 安装开源的文本向量模型](#3. 安装开源的文本向量模型)

1. 安装fastgpt,oneapi

  • docker-compose安装
  1. 下载docker-compose.yml,config.json

    mkdir fastgpt
    cd fastgpt
    curl -O https://raw.githubusercontent.com/labring/FastGPT/main/projects/app/data/config.json

    pgvector 版本(测试推荐,简单快捷)

    curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-pgvector.yml

    milvus 版本

    curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-milvus.yml

    zilliz 版本

    curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/files/docker/docker-compose-zilliz.yml

  2. 修改docker-compose.yml里面的内容

    数据库的默认账号和密码仅首次运行时设置有效

    如果修改了账号密码,记得改数据库和项目连接参数,别只改一处~

    该配置文件只是给快速启动,测试使用。正式使用,记得务必修改账号密码,以及调整合适的知识库参数,共享内存等。

    如何无法访问 dockerhub 和 git,可以用阿里云(阿里云没有arm包)

    version: '3.3'
    services:

    db

    pg:
    # image: pgvector/pgvector:0.7.0-pg15 # docker hub
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.7.0 # 阿里云
    container_name: pg
    # restart: always
    ports: # 生产环境建议不要暴露
    - 5432:5432
    networks:
    - fastgpt
    environment:
    # 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
    - POSTGRES_USER=root
    - POSTGRES_PASSWORD=root
    - POSTGRES_DB=postgres
    volumes:
    - ./pg/data:/var/lib/postgresql/data
    mongo:
    # image: mongo:5.0.18 # dockerhub
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云
    # image: mongo:4.4.29 # cpu不支持AVX时候使用
    container_name: mongo
    # restart: always
    ports:
    - 27017:27017
    networks:
    - fastgpt
    command: mongod --keyFile /data/mongodb.key --replSet rs0
    environment:
    - MONGO_INITDB_ROOT_USERNAME=root
    - MONGO_INITDB_ROOT_PASSWORD=root
    volumes:
    - ./mongo/data:/data/db
    entrypoint:
    - bash
    - -c
    - |
    openssl rand -base64 128 > /data/mongodb.key
    chmod 400 /data/mongodb.key
    chown 999:999 /data/mongodb.key
    echo 'const isInited = rs.status().ok === 1
    if(!isInited){
    rs.initiate({
    _id: "rs0",
    members: [
    { _id: 0, host: "mongo:27017" }
    ]
    })
    }' > /data/initReplicaSet.js
    # 启动MongoDB服务
    exec docker-entrypoint.sh "$$@" &

         # 等待MongoDB服务启动
         until mongo -u root -p root --authenticationDatabase admin --eval "print('waited for connection')" > /dev/null 2>&1; do
           echo "Waiting for MongoDB to start..."
           sleep 2
         done
    
         # 执行初始化副本集的脚本
         mongo -u root -p root --authenticationDatabase admin /data/initReplicaSet.js
    
         # 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
         wait $$!
    

    fastgpt

    sandbox:
    container_name: sandbox
    # image: ghcr.io/labring/fastgpt-sandbox:latest # git
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:latest # 阿里云
    networks:
    - fastgpt
    # restart: always
    fastgpt:
    container_name: fastgpt
    # image: ghcr.io/labring/fastgpt:v4.8.9 # git
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.9 # 阿里云
    ports:
    - 3000:3000
    networks:
    - fastgpt
    depends_on:
    - mongo
    - pg
    - sandbox
    # restart: always
    environment:
    # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
    - DEFAULT_ROOT_PSW=root
    # AI模型的API地址哦。务必加 /v1。这里默认填写了OneApi的访问地址。
    - OPENAI_BASE_URL=http://host.docker.internal:3000/v1
    # AI模型的API Key。(这里默认填写了OneAPI的快速默认key,测试通后,务必及时修改)
    - CHAT_API_KEY=sk-1234567890
    # 数据库最大连接数
    - DB_MAX_LINK=30
    # 登录凭证密钥
    - TOKEN_KEY=root
    # root的密钥,常用于升级时候的初始化请求
    - ROOT_KEY=root
    # 文件阅读加密
    - FILE_TOKEN_KEY=filetoken
    # MongoDB 连接参数. 用户名myusername,密码mypassword。
    - MONGODB_URI=mongodb://root:root@mongo:27017/fastgpt?authSource=admin
    # pg 连接参数
    - PG_URL=postgresql://root:root@pg:5432/postgres
    # sandbox 地址
    - SANDBOX_URL=http://localhost:3000
    # 日志等级: debug, info, warn, error
    - LOG_LEVEL=info
    - STORE_LOG_LEVEL=warn
    volumes:
    - ./config.json:/app/data/config.json

    oneapi

    mysql:
    # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mysql:8.0.36 # 阿里云
    image: mysql:8.0.32
    container_name: mysql
    # restart: always
    ports:
    - 3306:3306
    networks:
    - fastgpt
    command: --default-authentication-plugin=mysql_native_password
    environment:
    # 默认root密码,仅首次运行有效
    MYSQL_ROOT_PASSWORD: root
    MYSQL_DATABASE: oneapi
    volumes:
    - ./mysql:/var/lib/mysql
    oneapi:
    container_name: oneapi
    # image: ghcr.io/songquanpeng/one-api:v0.6.7
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云
    ports:
    - 3001:3000
    depends_on:
    - mysql
    networks:
    - fastgpt
    # restart: always
    environment:
    # mysql 连接参数
    - SQL_DSN=root:root@tcp(mysql:3306)/oneapi
    # 登录凭证加密密钥
    - SESSION_SECRET=oneapikey
    # 内存缓存
    - MEMORY_CACHE_ENABLED=true
    # 启动聚合更新,减少数据交互频率
    - BATCH_UPDATE_ENABLED=true
    # 聚合更新时长
    - BATCH_UPDATE_INTERVAL=10
    # 初始化的 root 密钥(建议部署完后更改,否则容易泄露)
    - INITIAL_ROOT_TOKEN=root
    volumes:
    - ./oneapi:/data
    networks:
    fastgpt:

  3. 启动容器

    docker-compose up -d

  4. 登录oneapi
    可以通过ip:3001访问OneAPI,默认账号为root密码为123456

  5. 登录fastgpt
    可以通过ip:3000访问FastGPT,默认账号为root密码为docker-compose.yml环境变量里设置的 DEFAULT_ROOT_PSW

2. 安装ollama运行大模型

参考:Ollama 中文文档

2.1. 安装ollama
docker pull ollama/ollama:latest
docker run -d --gpus=all -v /media/geekplusa/GeekPlusA1/ai/models/llm/models/ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
# 使ollama保持模型加载在内存(显存)中
docker run -d --gpus=all -e OLLAMA_KEEP_ALIVE=-1  -v /media/geekplusa/GeekPlusA1/ai/models/llm/models/ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
2.2. ollama下载模型
  • 运行qwen:7b模型

    docker exec -it ollama ollama run qwen:7b

  • 测试

    curl http://localhost:11434/api/chat -d '{
    "model": "qwen:7b",
    "messages": [
    {
    "role": "user",
    "content": "你是谁?"
    }
    ]
    }'

3. 安装开源的文本向量模型

由于M3E模型不可商用,由可商用模型bge-m3替换,安装

  • 下载bge-small-zh-v1.5模型

    git clone https://www.modelscope.cn/Xorbits/bge-small-zh-v1.5.git
    cd bge-small-zh-v1.5
    wget https://www.modelscope.cn/models/Xorbits/bge-small-zh-v1.5/resolve/master/pytorch_model.bin

  • 启动模型

    from sentence_transformers import SentenceTransformer
    import torch
    from flask import Flask, request, jsonify
    import os
    import threading

    m3e = SentenceTransformer("bge-m3")

    if torch.cuda.is_available():
    m3e=m3e.to("cuda")
    print("现在使用GPU模式运行M3模型")
    else:
    print("现在使用CPU模式运行M3模型")

    print("Enter your authtoken, which can be copied from https://dashboard.ngrok.com/auth")

    conf.get_default().auth_token = getpass.getpass()

    os.environ["FLASK_ENV"] = "development"

    app = Flask(name)

    Define Flask routes

    @app.route("/")
    def index():
    return "这是BGE-M3的API接口,请访问/v1/embeddings 使用POST请求"

    @app.route('/v1/embeddings', methods=['POST'])
    def embeddings():
    data = request.json
    input_text = data.get('input')
    print(f"/v1/embeddings 收到请求,输入文本为:{input_text}")
    model = data.get('model')
    if model is None:
    model = "BAAI/bge-m3"

      if input_text is None:
          return jsonify(error="No input text provided"), 400
      # input can be string or array of strings
      # if isinstance(input_text, str):
      #     sentences = [input_text]
      # elif isinstance(input_text, list):
      #     sentences = input_text
      sentences = input_text if isinstance(input_text, list) else [input_text]
      embeddings = m3e.encode(sentences,convert_to_tensor=True,show_progress_bar=True)
      embeddings = embeddings.tolist()
      data = [{"object": "embedding", "embedding": x, "index": i} for i, x in enumerate(embeddings)]
    
      # Mimic the response structure of the OpenAI API
      response = {
          "object": "list",
          "data": data,
          "model": model,
          "usage": {
              "prompt_tokens": 0,
              "total_tokens": 0
          }
      }
    
      return jsonify(response)
    

    if name == 'main':

      # Start the Flask server in a new thread
      threading.Thread(target=app.run, kwargs={"use_reloader": False,"debug":True,"host": "0.0.0.0"}).start()
    
相关推荐
nfgo28 分钟前
Apollo自动驾驶项目(二:cyber框架分析)
人工智能·自动驾驶·unix
h1771134720534 分钟前
基于区块链的相亲交易系统源码解析
大数据·人工智能·安全·系统架构·交友
HPC_fac1305206781644 分钟前
RTX 4090 系列即将停产,RTX 5090 系列蓄势待发
服务器·人工智能·gpu算力
xuehaisj1 小时前
论文内容分类与检测系统源码分享
人工智能·分类·数据挖掘
大耳朵爱学习2 小时前
大模型预训练的降本增效之路——从信息密度出发
人工智能·深度学习·机器学习·自然语言处理·大模型·llm·大语言模型
loongloongz3 小时前
联合条件概率 以及在语言模型中的应用
人工智能·语言模型·自然语言处理·概率论
lijfrank3 小时前
情感计算领域期刊与会议
人工智能·人机交互
sp_fyf_20243 小时前
计算机人工智能前沿进展-大语言模型方向-2024-09-18
人工智能·语言模型·自然语言处理
sp_fyf_20243 小时前
计算机人工智能前沿进展-大语言模型方向-2024-09-14
人工智能·语言模型·自然语言处理
ybdesire3 小时前
nanoGPT用红楼梦数据从头训练babyGPT-12.32M实现任意问答
人工智能·深度学习·语言模型