欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 大模型系列-fastgpt,ollama搭建本地知识库

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

2024/10/25 9:38:15 来源:https://blog.csdn.net/qq122716072/article/details/142095270  浏览:    关键词:大模型系列-fastgpt,ollama搭建本地知识库

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

      • 1. 安装fastgpt,oneapi
      • 2. 安装ollama运行大模型
        • 2.1. 安装ollama
        • 2.2. ollama下载模型
      • 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
  1. 修改docker-compose.yml里面的内容
# 数据库的默认账号和密码仅首次运行时设置有效
# 如果修改了账号密码,记得改数据库和项目连接参数,别只改一处~
# 该配置文件只是给快速启动,测试使用。正式使用,记得务必修改账号密码,以及调整合适的知识库参数,共享内存等。
# 如何无法访问 dockerhub 和 git,可以用阿里云(阿里云没有arm包)version: '3.3'
services:# dbpg:# image: pgvector/pgvector:0.7.0-pg15 # docker hubimage: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.7.0 # 阿里云container_name: pg# restart: alwaysports: # 生产环境建议不要暴露- 5432:5432networks:- fastgptenvironment:# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果- POSTGRES_USER=root- POSTGRES_PASSWORD=root- POSTGRES_DB=postgresvolumes:- ./pg/data:/var/lib/postgresql/datamongo:# image: mongo:5.0.18 # dockerhubimage: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云# image: mongo:4.4.29 # cpu不支持AVX时候使用container_name: mongo# restart: alwaysports:- 27017:27017networks:- fastgptcommand: mongod --keyFile /data/mongodb.key --replSet rs0environment:- MONGO_INITDB_ROOT_USERNAME=root- MONGO_INITDB_ROOT_PASSWORD=rootvolumes:- ./mongo/data:/data/dbentrypoint:- bash- -c- |openssl rand -base64 128 > /data/mongodb.keychmod 400 /data/mongodb.keychown 999:999 /data/mongodb.keyecho 'const isInited = rs.status().ok === 1if(!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; doecho "Waiting for MongoDB to start..."sleep 2done# 执行初始化副本集的脚本mongo -u root -p root --authenticationDatabase admin /data/initReplicaSet.js# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程wait $$!# fastgptsandbox:container_name: sandbox# image: ghcr.io/labring/fastgpt-sandbox:latest # gitimage: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:latest # 阿里云networks:- fastgpt# restart: alwaysfastgpt:container_name: fastgpt# image: ghcr.io/labring/fastgpt:v4.8.9 # gitimage: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.9 # 阿里云ports:- 3000:3000networks:- fastgptdepends_on:- mongo- pg- sandbox# restart: alwaysenvironment:# 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=warnvolumes:- ./config.json:/app/data/config.json# oneapimysql:# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mysql:8.0.36 # 阿里云image: mysql:8.0.32container_name: mysql# restart: alwaysports:- 3306:3306networks:- fastgptcommand: --default-authentication-plugin=mysql_native_passwordenvironment:# 默认root密码,仅首次运行有效MYSQL_ROOT_PASSWORD: rootMYSQL_DATABASE: oneapivolumes:- ./mysql:/var/lib/mysqloneapi:container_name: oneapi# image: ghcr.io/songquanpeng/one-api:v0.6.7image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云ports:- 3001:3000depends_on:- mysqlnetworks:- fastgpt# restart: alwaysenvironment:# 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=rootvolumes:- ./oneapi:/data
networks:fastgpt:
  1. 启动容器
docker-compose up -d
  1. 登录oneapi
    可以通过ip:3001访问OneAPI,默认账号为root密码为123456
  2. 登录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 threadingm3e = 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.jsoninput_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_textsentences = 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 APIresponse = {"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 threadthreading.Thread(target=app.run, kwargs={"use_reloader": False,"debug":True,"host": "0.0.0.0"}).start()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com