ollama+fastgpt搭建本地私有AI大模型智能体工作流(AI Agent Flow)qwen2.5-0.5b

ollama

Ollama是一个开源的 LLM(大型语言模型)服务工具,用于简化在本地运行大语言模型,降低使用大语言模型的门槛,使得大模型的开发者、研究人员和爱好者能够在本地环境快速实验、管理和部署最新大语言模型,包括如Llama 3、Phi 3、Mistral、Gemma等开源的大型语言模型。

Ollama目前支持以下大语言模型:https://ollama.com/library

因此,Ollama与Llama的关系:Llama是大语言模型,而Ollama是大语言模型(不限于Llama模型)便捷的管理和运维工具

1、安装ollama

Ollama提供了MacOS、Linux和Windows操作系统的安装包,大家可根据自己的操作系统,下载安装即可:

安装前,提前配置环境变量,配置模型下载路径

2、下载模型

接下来是下载模型,这里通过一个小模型进行举例,让大家都可以在本地进行运行

我这里选择了qwen2.5-0.5b模型

https://ollama.com/library/qwen2.5-coder:0.5b

复制完成后进入cmd,并开始下载模型,将复制的模型 粘贴并回车。

上图为拉取进度,完成后会自动进行编译,然后本地cmd方式即可进行对话。

启动完毕,其实我们已经有了一个控制台聊天界面,可以通过控制台与qwen2.5-coder:0.5b聊天了

通过list命令进行查看

c 复制代码
ollama list

如果我们不想要这个模型了,也可以通过命令行删除模型文件:

c 复制代码
ollama rm qwen2.5-coder:0.5b

3、Ollama大模型 Web 可视化聊天界面(可选)

如果想通过ollama原生的ui进行使用,部署Ollama大模型 Web 可视化聊天界面

控制台聊天对话界面体验总归是不太好,接下来部署 Web 可视化聊天界面。

首先,下载ollama-webuiWeb 工程代码:

c 复制代码
git clone https://github.com/ollama-webui/ollama-webui-lite

然后切换ollama-webui代码的目录:

c 复制代码
cd ollama-webui-lite

设置 Node.js 工具包镜像源,以接下来下载 Node.js 的依赖包更加快速:

c 复制代码
npm config set registry http://mirrors.cloud.tencent.com/npm/

安装 Node.js 依赖的工具包:

c 复制代码
npm install

最后,启动 Web 可视化界面:

c 复制代码
npm run dev


4、ollama API

Ollama API结果返回

c 复制代码
curl http://localhost:11434/api/generate -d '{
  "model": "Llama-3-8B",
  "prompt":"为什么天空是蓝色的?"
}'

Ollama API聊天对话

c 复制代码
curl http://localhost:11434/api/generate -d '{
  "model": "Llama-3-8B",
  "prompt":"为什么天空是蓝色的?"
}'

经过以上步骤本地大模型以安装完成,接下来我们通过dockerdesktop进行搭建fastgpt。

ollama docker版

Docker安装Ollama

Ollama现在已经支持Docker安装,极大的简化了服务器用户部署难度,这里我们使用docker compose工具来运行Ollama,先新建一个docker-compose.yaml,内容如下:

然后输入命令docker compose up -d或者docker-compose up -d运行,运行后访问:http://IP:11434,看到提示Ollama is running就说明成功了,如下图:

使用Ollama部署大模型

Ollama安装完毕后,还需要继续下载大模型,支持的大模型可以在Ollama官网找到:https://ollama.com/library。Ollama默认没有提供WEB界面,需要通过命令行来使用,先输入命令进入容器:

c 复制代码
docker exec -it ollama /bin/bash

进入容器后,去上面官网找到你想要下载的大模型,比如我们下载一个阿里千问2的模型,命令如下:

c 复制代码
ollama run qwen2

模型下载并运行完毕后可以通过命令行方式进行对话,如下图:

one-API介绍

OneAPI 是一个 API 管理和分发系统,支持几乎所有主流 API 服务。OneAPI 通过简单的配置允许使用一个 API 密钥调用不同的服务,实现服务的高效管理和分发。

OpenAI 接口管理 & 分发系统,支持 Azure、Anthropic Claude、Google PaLM 2 & Gemini、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360 智脑以及腾讯混元,可用于二次分发管理 key,仅单可执行文件,已打包好 Docker 镜像,一键部署,开箱即用. OpenAI key management & redistribution system, using a single API for all LLMs, and features an English UI.

官方提供了一键部署的 docker-compose 方案,部署完成后,访问 http://localhost:3000/ 并使用初始账号(用户名为 root,密码为 123456)登录,登录后根据提示修改密码。

Fastgpt

1、部署fastgpt到dockerdesktop

Fastgpt开源项目地址:https://github.com/labring/FastGPT

https://doc.fastgpt.cn/docs/development/docker/

官方步骤已经写的非常详细,这里主要贴一下最关键的两个文件

docker-compose.yml

c 复制代码
# 数据库的默认账号和密码仅首次运行时设置有效
# 如果修改了账号密码,记得改数据库和项目连接参数,别只改一处~
# 该配置文件只是给快速启动,测试使用。正式使用,记得务必修改账号密码,以及调整合适的知识库参数,共享内存等。
# 如何无法访问 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=username
      - POSTGRES_PASSWORD=password
      - 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=myusername
      - MONGO_INITDB_ROOT_PASSWORD=mypassword
    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 myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')" > /dev/null 2>&1; do
          echo "Waiting for MongoDB to start..."
          sleep 2
        done

        # 执行初始化副本集的脚本
        mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js

        # 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
        wait $$!

  # fastgpt
  sandbox:
    container_name: sandbox
    # image: ghcr.io/labring/fastgpt-sandbox:v4.8.11 # git
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.8.11 # 阿里云
    networks:
      - fastgpt
    restart: always
  fastgpt:
    container_name: fastgpt
    # image: ghcr.io/labring/fastgpt:v4.8.11 # git
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.11 # 阿里云
    ports:
      - 3000:3000
    networks:
      - fastgpt
    depends_on:
      - mongo
      - pg
      - sandbox
    restart: always
    environment:
      # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
      - DEFAULT_ROOT_PSW=1234
      # AI模型的API地址哦。务必加 /v1。这里默认填写了OneApi的访问地址。
      - OPENAI_BASE_URL=http://oneapi:3000/v1
      # AI模型的API Key。(这里默认填写了OneAPI的快速默认key,测试通后,务必及时修改)
      - CHAT_API_KEY=sk-AAK
      # 数据库最大连接数
      - 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
      # sandbox 地址
      - SANDBOX_URL=http://sandbox:3000
      # 前端地址: http://localhost:3000
      - FE_DOMAIN=
      # 日志等级: 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: docker.unsee.tech/mysql:8.0.37
    # image: mysql:8.0.28
    container_name: mysql
    restart: always
    ports:
      - 3306:3306
    networks:
      - fastgpt
    command: --default-authentication-plugin=mysql_native_password
    environment:
      # 默认root密码,仅首次运行有效
      MYSQL_ROOT_PASSWORD: oneapimmysql
      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:oneapimmysql@tcp(mysql:3306)/oneapi
      # 登录凭证加密密钥
      - SESSION_SECRET=oneapikey
      # 内存缓存
      - MEMORY_CACHE_ENABLED=true
      # 启动聚合更新,减少数据交互频率
      - BATCH_UPDATE_ENABLED=true
      # 聚合更新时长
      - BATCH_UPDATE_INTERVAL=10
      # 初始化的 root 密钥(建议部署完后更改,否则容易泄露)
      - INITIAL_ROOT_TOKEN=fastgpt
    volumes:
      - ./oneapi:/data
networks:
  fastgpt:

fastgpt config.json

c 复制代码
// 已使用 json5 进行解析,会自动去掉注释,无需手动去除
{
  "feConfigs": {
    "lafEnv": "https://laf.dev" // laf环境。 https://laf.run (杭州阿里云) ,或者私有化的laf环境。如果使用 Laf openapi 功能,需要最新版的 laf 。
  },
  "systemEnv": {
    "vectorMaxProcess": 15, // 向量处理线程数量
    "qaMaxProcess": 15, // 问答拆分线程数量
    "tokenWorkers": 8, // Token 计算线程保持数,会持续占用内存,不能设置太大。
    "pgHNSWEfSearch": 100 // 向量搜索参数。越大,搜索越精确,但是速度越慢。设置为100,有99%+精度。
  },
  "llmModels": [
    {
      "model": "qwen2.5-coder:0.5b", // 模型名(对应OneAPI中渠道的模型名)
      "name": "qwen", // 模型别名
      "avatar": "/imgs/model/openai.svg", // 模型的logo
      "maxContext": 800, // 最大上下文
      "maxResponse": 16000, // 最大回复
      "quoteMaxToken": 120000, // 最大引用内容
      "maxTemperature": 1.2, // 最大温度
      "charsPointsPrice": 0, // n积分/1k token(商业版)
      "censor": false, // 是否开启敏感校验(商业版)
      "vision": true, // 是否支持图片输入
      "datasetProcess": true, // 是否设置为文本理解模型(QA),务必保证至少有一个为true,否则知识库会报错
      "usedInClassify": true, // 是否用于问题分类(务必保证至少有一个为true)
      "usedInExtractFields": true, // 是否用于内容提取(务必保证至少有一个为true)
      "usedInToolCall": true, // 是否用于工具调用(务必保证至少有一个为true)
      "usedInQueryExtension": true, // 是否用于问题优化(务必保证至少有一个为true)
      "toolChoice": true, // 是否支持工具选择(分类,内容提取,工具调用会用到。)
      "functionCall": false, // 是否支持函数调用(分类,内容提取,工具调用会用到。会优先使用 toolChoice,如果为false,则使用 functionCall,如果仍为 false,则使用提示词模式)
      "customCQPrompt": "", // 自定义文本分类提示词(不支持工具和函数调用的模型
      "customExtractPrompt": "", // 自定义内容提取提示词
      "defaultSystemChatPrompt": "", // 对话默认携带的系统提示词
      "defaultConfig": {}, // 请求API时,挟带一些默认配置(比如 GLM4 的 top_p)
      "fieldMap": {} // 字段映射(o1 模型需要把 max_tokens 映射为 max_completion_tokens)
    }
  ],
  "vectorModels": [
    {
      "model": "text-embedding-ada-002", // 模型名(与OneAPI对应)
      "name": "Embedding-2", // 模型展示名
      "avatar": "/imgs/model/openai.svg", // logo
      "charsPointsPrice": 0, // n积分/1k token
      "defaultToken": 700, // 默认文本分割时候的 token
      "maxToken": 3000, // 最大 token
      "weight": 100, // 优先训练权重
      "defaultConfig": {}, // 自定义额外参数。例如,如果希望使用 embedding3-large 的话,可以传入 dimensions:1024,来返回1024维度的向量。(目前必须小于1536维度)
      "dbConfig": {}, // 存储时的额外参数(非对称向量模型时候需要用到)
      "queryConfig": {} // 参训时的额外参数
    },
    {
      "model": "text-embedding-3-large",
      "name": "text-embedding-3-large",
      "avatar": "/imgs/model/openai.svg",
      "charsPointsPrice": 0,
      "defaultToken": 512,
      "maxToken": 3000,
      "weight": 100,
      "defaultConfig": {
        "dimensions": 1024
      }
    },
    {
      "model": "text-embedding-3-small",
      "name": "text-embedding-3-small",
      "avatar": "/imgs/model/openai.svg",
      "charsPointsPrice": 0,
      "defaultToken": 512,
      "maxToken": 3000,
      "weight": 100
    }
  ],
  "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
  }
}

2、启动并配置one api模型

访问本地部署好的one api:http://localhost:3001/channel

初始化的 用户名:root 密码:123456

进入后会叫修改密码之类的,完成后点击"渠道",配置你的大语言模型。首次登录进来渠道是空的,需要自己添加自己的大模型。

第一步:先点击 底部"添加新的渠道",然后选择"Ollama"。

第二步:配置本地qwen2.5-coder:0.5b 大模型

查询本地ollama中的模型名称,填入模型的时候用

特别注意,代理地址填写本机IP、localhost、127.0.0.1会失败,使用docker host的方式

c 复制代码
http://host.docker.internal:11434

完成后测试通过,下图中有时间返回,就说明模型链接成功。

oneapi还有最后一步,就是将模型加入到咱们的令牌中,点击顶部"令牌"导航进入。

新建令牌信息 ,并添加qwen2.5-coder:0.5b模型。

3、配置fastgpt的模型(已完成)

进入最开始的fastgpt文件夹。找到config.json,配置llama3模型,位置和代码如下:

完成配置后需要重新启动dockerdesktop里面的oneapi和fastgpt。

最核心的一个地方就是模型名对应OneAPI中渠道的模型名

c 复制代码
"model": "qwen2.5-coder:0.5b", // 模型名(对应OneAPI中渠道的模型名)


4、访问fastgpt

地址:http://localhost:3000/login,默认用户名:root 密码:1234

5、配置应用chat、agent等

输入chat名字,选择类型。

选择一个大模型,配置到你创建的应用中。

完成模型选择后进行 发布,发布后即可在右变边的聊天框中输入信息,进行对话。

相关推荐
今天补充能量了吗13 分钟前
T3 TensorFlow入门实战——天气识别
人工智能·python·tensorflow
埃菲尔铁塔_CV算法1 小时前
条件数:概念、矩阵中的应用及实际工业场景应用
人工智能·python·线性代数·算法·matlab·矩阵
Misnearch1 小时前
sklearn.ensemble
人工智能·python·sklearn
芷芷在学习1 小时前
机器学习(二十五):决策树算法以及决策树和神经网络的对比
人工智能·机器学习
Adunn1 小时前
算法基础 - 最小二乘法(线性拟合)
c++·人工智能·算法·机器学习·自动驾驶·最小二乘法
DevinLGT1 小时前
石英晶体基本特性和等效电路:【图文讲解】
人工智能·单片机·嵌入式硬件
Believe yourself!!!1 小时前
论深度学习训练过程中数据集打乱的重要性
人工智能·深度学习
jimox_ai1 小时前
AI论文写作小助手-积墨论文
人工智能·深度学习
一位小说男主1 小时前
深度学习中的梯度下降算法:详解与实践
人工智能·深度学习·神经网络·算法
HoweChenya2 小时前
【书生大模型实战营】Llamaindex RAG 实践闯关任务
人工智能·python·深度学习