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名字,选择类型。

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

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

相关推荐
飞Link2 分钟前
智能体时代的“紧箍咒”:深度解析 Agent 治理架构与 AI 杀伤开关
人工智能·架构
飞Link7 分钟前
2000 亿砸向算力:字节跳动 AI 基建跨越,后端与运维的“万亿 Token”生死战
运维·人工智能
zhangfeng113320 分钟前
小龙虾 wordbuddy 安装浏览器控制器 agent-browser npm install -g agent-browse
前端·人工智能·npm·node.js
阿里云大数据AI技术20 分钟前
一条 SQL 生成广告:Hologres 如何实现素材生成到投放分析一体化
人工智能·sql
liudanzhengxi28 分钟前
GitSubmodule避坑全攻略
人工智能·新人首发
用户4252108006030 分钟前
Claude Code Linux 服务器部署与配置
人工智能
OJAC11133 分钟前
学过Python却不敢投AI岗,他最后拿下12K offer
人工智能
Bigger33 分钟前
因为看不懂小棉袄的画,我写了个 AI 程序帮我“翻译”她的世界
前端·人工智能·ai编程
CeshirenTester36 分钟前
LangChain的工具调用 vs 原生Skill API:性能差在哪儿?
java·人工智能·langchain
爱问的艾文1 小时前
八周带你手搓AI应用-第二周-让AI更像人-第1天-流式输出改造
人工智能