首页 > 其他分享 >【大模型本地知识库搭建】ChatGLM3,M3E,FastGPT,One-API_fastgpt m3e

【大模型本地知识库搭建】ChatGLM3,M3E,FastGPT,One-API_fastgpt m3e

时间:2024-07-31 10:53:56浏览次数:16  
标签:FastGPT AI 模型 ChatGLM3 fastgpt API docker

目录

引言

一、ChatGLM3大模型本地部署

二、部署M3E模型

三、部署One-API

四、部署FastGPT

引言

    本文技术路线为:利用ChatGLM3-6b作为基座大模型,M3E作为向量模型,基于FastGPT建立用户知识库,One-API做统一API接口管理。 其中ChatGLM3和M3E模型都是在windows下部署的,FastGPT和One-API是在Linux下部署。

    在私有化和客制化大模型庞大需求推动下,除了从大模型的全量训练和微调这两个模型改动层面上,在大模型外添加一个知识库也是一种解决思路。因为,一方面重新训练模型需要相当多的资源和专业知识,另一方面大模型本身具有**知识延迟问题**和**幻想问题。**

  • 知识延迟问题是训练大模型需要一定的时间,从而训练数据就不可能具有实时性,而且相当耗费资源。

  • 幻想问题问题则由于LLM采用的概率模型,即预测生成下一个字符概率是多少,所有或多或少的它在生成结果的时候都有定的可能出现错误。

    目前比较好的方式就是利用大模型极强的语义理解能力,给大模型外挂一个知识库或者搜索引擎去解决这两个问题。基于知识库的定制化服务是独立于大模型的,知识库可以理解为一个用于提示引导大模型,和提供客户特有知识的工具。 
    
    

一、ChatGLM3大模型本地部署

    详细的步骤可参考这篇文章:[【ChatGLM3大模型本地部署】](https://blog.csdn.net/Bowen_Ding_/article/details/137078656 "【ChatGLM3大模型本地部署】")。这小节对ChatGLM3-6b的API调用方式进行补充。在openai\_api\_demo/api\_server.py 中修改本地大模型权重和向量模型地址,(向量模型可先不设置,本文使用的是M3E模型)。

# set LLM path
MODEL_PATH = os.environ.get('MODEL_PATH', 'D:/workplaces/github_workplace/ChatGLM3/models/chatglm3-6b/')
TOKENIZER_PATH = os.environ.get("TOKENIZER_PATH", MODEL_PATH)

# set Embedding Model path
EMBEDDING_PATH = os.environ.get('EMBEDDING_PATH', 'D:/workplaces/github_workplace/M3E/m3e-base/')

----------------

if __name__ == "__main__":
    # Load LLM
    tokenizer = AutoTokenizer.from_pretrained(TOKENIZER_PATH, trust_remote_code=True)
    model = AutoModel.from_pretrained(MODEL_PATH, trust_remote_code=True, device_map="cuda").eval()

    # load Embedding
    embedding_model = SentenceTransformer(EMBEDDING_PATH, device="cuda")
    uvicorn.run(app, host='0.0.0.0', port=8000, workers=1)

使用python api_server.py启动后使用postman工具进行测试。

api_server.py启动后监听8000端口

Postman工具使用post方式进行测试

ChatGLM3返回报文

测试请求体:

{
  "model": "string",
  "messages": [
    {
      "role": "user",
      "content": "你是谁?",
      "name": "string",
      "function_call": {
        "name": "string",
        "arguments": "string"
      }
    }
  ],
  "temperature": 0.8,
  "top_p": 0.8,
  "max_tokens": 0,
  "stream": false,
  "functions": {},
  "repetition_penalty": 1.1
}

二、部署M3E模型

M3E 是 Moka Massive Mixed Embedding 的缩写,其中:

  • Moka,此模型由 MokaAI 训练,开源和评测,训练脚本使用 uniem ,评测 BenchMark 使用 MTEB-zh

  • Massive,此模型通过千万级 (2200w+) 的中文句对数据集进行训练

  • Mixed,此模型支持中英双语的同质文本相似度计算,异质文本检索等功能,未来还会支持代码检索

  • Embedding,此模型是文本嵌入模型,可以将自然语言转换成稠密的向量

    M3E模型使用场景主要是中文,少量英文的情况,多语言使用场景,并且不介意数据隐私的话,建议使用 openai text-embedding-ada-002。

项目地址:moka-ai/m3e-base · Hugging Face,把项目拉下来即可使用。把项目地址在ChatGLM中openai_api_demo/api_server.py相应修改。

三、部署One-API

One-API使用Docker进行快速部署,One-API和FastGPT建议使用Linux系统进行部署,本文采用虚拟机安装了CentOS进行部署。

先安装Docker,Docker部署命令:

# 安装 Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable --now docker
# 安装 docker-compose
curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 验证安装
docker -v
docker-compose -v

One-API部署命令:

由于FastGPT也是使用3000端口,这里One-API改用3080端口。

 
docker run --name one-api -d --restart always -p 3080:3000 -e TZ=Asia/Shanghai -v /home/data/one-api:/data justsong/one-api

利用docker ps查看One-API是否启动

启动后在本地浏览器打开One-API,地址为本地IP地址+3080端口,登录页初始账号为root,密码123456。

One-API登录界面

由于是本地部署的模型,需要在“渠道”里配置ChatGLM大模型M3E向量模型的地址。其中Base URL是能访问大模型的地址,密钥是自定义的,可以随意填写。

配置大模型渠道

配置M3E模型渠道

配置好后测试两个模型是否可以调用,点击测试按钮即可。

测试响应

设置令牌,后面在配置FastGPT时会用到。

配置令牌

四、部署FastGPT

    FastGPT 是一个基于大语言模型的知识库问答系统,它为大模型的私有知识库提供便捷的数据处理、和不同模型调用等功能。

FastGPT功能结构示意图

先来了解下 FastGPT 是如何进行知识库检索的。首先了解几个基本概念:

  • 向量:将人类直观的语言(文字、图片、视频等)转成计算机可识别的语言(数组)。
  • 向量相似度:两个向量之间可以进行计算,得到一个相似度,即代表:两个语言相似的程度。
  • 语言大模型的一些特点:上下文理解、总结和推理。

结合上述 3 个概念,便有了 “向量搜索 + 大模型 = 知识库问答” 的公式。下图是 FastGPT V3 中知识库问答功能的完整逻辑:

FastGPT本文在Linux系统下使用Docker进行部署,目前这也是官方推荐的部署方式,官网介绍链接

依次执行下面命令,创建 FastGPT 文件并拉取docker-compose.ymlconfig.json,执行完后目录下会有 2 个文件。

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

接下来修改docker-compose.yml文件:

主要修改fastgpt/environment下的OPENAI_BASE_URLCHAT_API_KEY

前者填入One-API的地址和端口号,后者填写设置好的令牌口令。数据库的账号密码可以后面再重新设定。


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


同时修改config.json文件:

主要修改“llmModels”键值对中“model”和“name”的名字和其它需要的配置,如果不用其它的模型,保留这样一个字典就行,同时也要修改一下向量模型 "vectorModels"的“model”和“name”。

{
  "systemEnv": {
    "vectorMaxProcess": 15,
    "qaMaxProcess": 15,
    "pgHNSWEfSearch": 100 // 向量搜索参数。越大,搜索越精确,但是速度越慢。设置为100,有99%+精度。
  },
  "llmModels": [
    {
      "model": "chatglm3-6B", // 模型名
      "name": "chatglm3-6B", // 别名
      "maxContext": 16000, // 最大上下文
      "maxResponse": 4000, // 最大回复
      "quoteMaxToken": 13000, // 最大引用内容
      "maxTemperature": 1.2, // 最大温度
      "charsPointsPrice": 0,
      "censor": false,
      "vision": false, // 是否支持图片输入
      "datasetProcess": true, // 是否设置为知识库处理模型(QA),务必保证至少有一个为true,否则知识库会报错
      "usedInClassify": true, // 是否用于问题分类(务必保证至少有一个为true)
      "usedInExtractFields": true, // 是否用于内容提取(务必保证至少有一个为true)
      "usedInToolCall": true, // 是否用于工具调用(务必保证至少有一个为true)
      "usedInQueryExtension": true, // 是否用于问题优化(务必保证至少有一个为true)
      "toolChoice": true, // 是否支持工具选择(分类,内容提取,工具调用会用到。目前只有gpt支持)
      "functionCall": false, // 是否支持函数调用(分类,内容提取,工具调用会用到。会优先使用 toolChoice,如果为false,则使用 functionCall,如果仍为 false,则使用提示词模式)
      "customCQPrompt": "", // 自定义文本分类提示词(不支持工具和函数调用的模型
      "customExtractPrompt": "", // 自定义内容提取提示词
      "defaultSystemChatPrompt": "", // 对话默认携带的系统提示词
      "defaultConfig":{}  // LLM默认配置,可以针对不同模型设置特殊值(比如 GLM4 的 top_p
    },
  ],
  "vectorModels": [
    {
      "model": "m3e",
      "name": "m3e",
      "charsPointsPrice": 0,
      "defaultToken": 700,
      "maxToken": 3000,
      "weight": 100,
      "defaultConfig":{}  // 默认配置。例如,如果希望使用 embedding3-large 的话,可以传入 dimensions:1024,来返回1024维度的向量。(目前必须小于1536维度)
    }
  ],
  "reRankModels": [],
  "audioSpeechModels": [
    {
      "model": "tts-1",
      "name": "OpenAI TTS1",
      "charsPointsPrice": 0,
      "voices": [
        { "label": "Alloy", "value": "alloy", "bufferId": "openai-Alloy" },
        { "label": "Echo", "value": "echo", "bufferId": "openai-Echo" },
        { "label": "Fable", "value": "fable", "bufferId": "openai-Fable" },
        { "label": "Onyx", "value": "onyx", "bufferId": "openai-Onyx" },
        { "label": "Nova", "value": "nova", "bufferId": "openai-Nova" },
        { "label": "Shimmer", "value": "shimmer", "bufferId": "openai-Shimmer" }
      ]
    }
  ],
  "whisperModel": {
    "model": "whisper-1",
    "name": "Whisper1",
    "charsPointsPrice": 0
  }
}

修改后启动容器:

在 docker-compose.yml 同级目录下执行。同时确保docker-compose版本最好在2.17以上,否则可能无法执行自动化命令。

# 启动容器
docker-compose pull
docker-compose up -d


用docker ps查看是否正常启动

若oneapi没正常启动

# 等待10s,OneAPI第一次总是要重启几次才能连上Mysql
sleep 10
# 重启一次oneapi(由于OneAPI的默认Key有点问题,不重启的话会提示找不到渠道,临时手动重启一次解决,等待作者修复)
docker restart oneapi

正常启动后在浏览器上访问fastgpt,本地ip:3000端口。

账号root,初始密码1234。创建应用后即可测试是否正常使用本地部署的大模型。

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

本文转自 https://blog.csdn.net/weixin_59191169/article/details/140556836?spm=1001.2014.3001.5501,如有侵权,请联系删除。

标签:FastGPT,AI,模型,ChatGLM3,fastgpt,API,docker
From: https://blog.csdn.net/chengxuyuanyy/article/details/140817179

相关文章

  • RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anythi
    RAG+AI工作流+Agent:LLM框架该如何选择,全面对比MaxKB、Dify、FastGPT、RagFlow、Anything-LLM,以及更多推荐1.MaxKBMaxKB=MaxKnowledgeBase,是一款基于LLM大语言模型的开源知识库问答系统,旨在成为企业的最强大脑。它能够帮助企业高效地管理知识,并提供智能问答功能。想象一......
  • AI知识库这事儿FastGPT是专业的
    在搭建AI知识库这事儿上,有不少成熟的框架,我推荐使用FastGPT。这篇文章笔者就使用过的两款平台做个比较,FastGPT和百度千帆平台。1.为什么要搭建知识库随着企业的运营,企业的私有数据越来越多(结构化、半结构化、非结构化的数据)。这么多数据,我们不可能都记在大脑里,就算老员工能记住......
  • 玩转大模型之三(FastGPT+OneAPI本地部署)
    一、服务器服务器:一台Linux16核32GIP:10.33.19.16基础环境:Docker、Docker-Compose二、FastGPT安装首先下载docker-compose.yml和config.json两个文件mkdirfastgptcdfastgptcurl-Ohttps://raw.githubusercontent.com/labring/FastGPT/main/projects/app/data/......
  • 【机器学习】FastGPT 知识库搜索测试功能解析
    本文以FastGPT知识库的搜索测试功能为入口,分析FastGPT的知识检索流程。一、搜索功能介绍1.1整体介绍搜索测试功能包含三种类型:语义检索、全文检索、混合检索。语义检索:使用向量进行文本相关性查询,即调用向量数据库根据向量的相似性检索;全文检索:使用传统的全文检索,适......
  • RAG 案框架(Qanything、RAGFlow、FastGPT、智谱RAG)对比
    各家的技术方案有道的QAnything亮点在:rerankRAGFLow亮点在:数据处理+index智谱AI亮点在文档解析、切片、query改写及recall模型的微调FastGPT优点:灵活性更高下面分别按照模块比较各框架的却别功能模块QAnythingRAGFLowFastGPT智谱AI知识处理模块pdf文件解析是......
  • [本科项目实训] ChatGLM3 与 ChatGLM4 简述
    ChatGLM3-6B简述ChatGLM3-6B是ChatGLM系列最新一代的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B引入了如下特性:更强大的基础模型:ChatGLM3-6B的基础模型ChatGLM3-6B-Base采用了更多样的训练数据、更充分的训练步数和更合理的......
  • 开发查询订单信息fastGPT智能体工作流 将工作流接入到人工客服系统
    我在抖音上发布了视频https://www.douyin.com/video/7382446337482099977下面是主要内容介绍【视频标题:】开发查询订单信息fastGPT智能体工作流将工作流接入到人工客服系统#智能体#FastGPT#客服系统-----------【视频行业分类:】<3C数码>-----------【视频文案】:我们使用fa......
  • Ubuntu安装chatGLM3-6b
    目录概述安装Anaconda3原文链接下载Anaconda3安装Anaconda3执行bash安装提示“conda:未找到命令”的解决办法anaconda3常用命令添加/更换conda清华源下载chatglm3-6b模型下载chatglm3壳子概述本文主要介绍如何在Ubuntu上安装ChatGLM3-6b模型。只有6B模型支持functi......
  • 聊聊ChatGLM3多用户并发API调用的问题
    转载请备注出处:https://www.cnblogs.com/zhiyong-ITNote背景目前在公司内部4张A10的GPU服务器上部署了ChatGLM3开源模型;然后部署了官方默认的web_demo、api_demo两种模式;重新设计了前端,支持H5和安卓两个客户端调用。但却发现了不能并发访问的问题。问题现象在安卓与H5同时调......
  • 开源模型应用落地-chatglm3-6b模型小试-入门篇(二)
       一、前言   刚开始接触AI时,您可能会感到困惑,因为面对众多开源模型的选择,不知道应该选择哪个模型,也不知道如何调用最基本的模型。但是不用担心,我将陪伴您一起逐步入门,解决这些问题。   在信息时代,我们可以轻松地通过互联网获取大量的理论知识和概念。然而,仅仅......