大模型系列-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()
相关推荐
lijianhua_97121 天前
国内某顶级大学内部用的ai自动生成论文的提示词
人工智能
EDPJ1 天前
当图像与文本 “各说各话” —— CLIP 中的模态鸿沟与对象偏向
深度学习·计算机视觉
蔡俊锋1 天前
用AI实现乐高式大型可插拔系统的技术方案
人工智能·ai工程·ai原子能力·ai乐高工程
自然语1 天前
人工智能之数字生命 认知架构白皮书 第7章
人工智能·架构
大熊背1 天前
利用ISP离线模式进行分块LSC校正的方法
人工智能·算法·机器学习
eastyuxiao1 天前
如何在不同的机器上运行多个OpenClaw实例?
人工智能·git·架构·github·php
诸葛务农1 天前
AGI 主要技术路径及核心技术:归一融合及未来之路5
大数据·人工智能
光影少年1 天前
AI Agent智能体开发
人工智能·aigc·ai编程
ai生成式引擎优化技术1 天前
TSPR-WEB-LLM-HIC (TWLH四元结构)AI生成式引擎(GEO)技术白皮书
人工智能
帐篷Li1 天前
9Router:开源AI路由网关的架构设计与技术实现深度解析
人工智能