首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Fastgpt学习(1)- 本地化部署(以MacOS为例)

  • 25-02-18 10:01
  • 4303
  • 12744
blog.csdn.net

1.认识fastgpt

2.私有化部署

  • MongoDB:用于存储除了向量外的各类数据
  • PostgreSQL/Milvus:存储向量数据
  • OneAPI: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过 OneAPI 测试校验)
(1)前置工作

Docker环境、网络

(2)开始部署

本地创建文件夹命名为fastgpt,在该文件夹下创建config.json 和 docker-compose.yml 文件。

内容如下:

  1. // 已使用 json5 进行解析,会自动去掉注释,无需手动去除
  2. {
  3. "feConfigs": {
  4. "lafEnv": "https://laf.dev" // laf环境。 https://laf.run (杭州阿里云) ,或者私有化的laf环境。如果使用 Laf openapi 功能,需要最新版的 laf 。
  5. },
  6. "systemEnv": {
  7. "vectorMaxProcess": 15,
  8. "qaMaxProcess": 15,
  9. "pgHNSWEfSearch": 100 // 向量搜索参数。越大,搜索越精确,但是速度越慢。设置为100,有99%+精度。
  10. },
  11. "llmModels": [
  12. {
  13. "model": "gpt-4o-mini", // 模型名(对应OneAPI中渠道的模型名)
  14. "name": "gpt-4o-mini", // 模型别名
  15. "avatar": "/imgs/model/openai.svg", // 模型的logo
  16. "maxContext": 125000, // 最大上下文
  17. "maxResponse": 16000, // 最大回复
  18. "quoteMaxToken": 120000, // 最大引用内容
  19. "maxTemperature": 1.2, // 最大温度
  20. "charsPointsPrice": 0, // n积分/1k token(商业版)
  21. "censor": false, // 是否开启敏感校验(商业版)
  22. "vision": true, // 是否支持图片输入
  23. "datasetProcess": true, // 是否设置为文本理解模型(QA),务必保证至少有一个为true,否则知识库会报错
  24. "usedInClassify": true, // 是否用于问题分类(务必保证至少有一个为true)
  25. "usedInExtractFields": true, // 是否用于内容提取(务必保证至少有一个为true)
  26. "usedInToolCall": true, // 是否用于工具调用(务必保证至少有一个为true)
  27. "usedInQueryExtension": true, // 是否用于问题优化(务必保证至少有一个为true)
  28. "toolChoice": true, // 是否支持工具选择(分类,内容提取,工具调用会用到。目前只有gpt支持)
  29. "functionCall": false, // 是否支持函数调用(分类,内容提取,工具调用会用到。会优先使用 toolChoice,如果为false,则使用 functionCall,如果仍为 false,则使用提示词模式)
  30. "customCQPrompt": "", // 自定义文本分类提示词(不支持工具和函数调用的模型
  31. "customExtractPrompt": "", // 自定义内容提取提示词
  32. "defaultSystemChatPrompt": "", // 对话默认携带的系统提示词
  33. "defaultConfig": {}, // 请求API时,挟带一些默认配置(比如 GLM4 的 top_p)
  34. "fieldMap": {} // 字段映射(o1 模型需要把 max_tokens 映射为 max_completion_tokens)
  35. },
  36. {
  37. "model": "gpt-4o",
  38. "name": "gpt-4o",
  39. "avatar": "/imgs/model/openai.svg",
  40. "maxContext": 125000,
  41. "maxResponse": 4000,
  42. "quoteMaxToken": 120000,
  43. "maxTemperature": 1.2,
  44. "charsPointsPrice": 0,
  45. "censor": false,
  46. "vision": true,
  47. "datasetProcess": true,
  48. "usedInClassify": true,
  49. "usedInExtractFields": true,
  50. "usedInToolCall": true,
  51. "usedInQueryExtension": true,
  52. "toolChoice": true,
  53. "functionCall": false,
  54. "customCQPrompt": "",
  55. "customExtractPrompt": "",
  56. "defaultSystemChatPrompt": "",
  57. "defaultConfig": {},
  58. "fieldMap": {}
  59. },
  60. {
  61. "model": "o1-mini",
  62. "name": "o1-mini",
  63. "avatar": "/imgs/model/openai.svg",
  64. "maxContext": 125000,
  65. "maxResponse": 4000,
  66. "quoteMaxToken": 120000,
  67. "maxTemperature": 1.2,
  68. "charsPointsPrice": 0,
  69. "censor": false,
  70. "vision": false,
  71. "datasetProcess": true,
  72. "usedInClassify": true,
  73. "usedInExtractFields": true,
  74. "usedInToolCall": true,
  75. "usedInQueryExtension": true,
  76. "toolChoice": false,
  77. "functionCall": false,
  78. "customCQPrompt": "",
  79. "customExtractPrompt": "",
  80. "defaultSystemChatPrompt": "",
  81. "defaultConfig": {
  82. "temperature": 1,
  83. "stream": false
  84. },
  85. "fieldMap": {
  86. "max_tokens": "max_completion_tokens"
  87. }
  88. },
  89. {
  90. "model": "o1-preview",
  91. "name": "o1-preview",
  92. "avatar": "/imgs/model/openai.svg",
  93. "maxContext": 125000,
  94. "maxResponse": 4000,
  95. "quoteMaxToken": 120000,
  96. "maxTemperature": 1.2,
  97. "charsPointsPrice": 0,
  98. "censor": false,
  99. "vision": false,
  100. "datasetProcess": true,
  101. "usedInClassify": true,
  102. "usedInExtractFields": true,
  103. "usedInToolCall": true,
  104. "usedInQueryExtension": true,
  105. "toolChoice": false,
  106. "functionCall": false,
  107. "customCQPrompt": "",
  108. "customExtractPrompt": "",
  109. "defaultSystemChatPrompt": "",
  110. "defaultConfig": {
  111. "temperature": 1,
  112. "stream": false
  113. },
  114. "fieldMap": {
  115. "max_tokens": "max_completion_tokens"
  116. }
  117. }
  118. ],
  119. "vectorModels": [
  120. {
  121. "model": "text-embedding-ada-002", // 模型名(与OneAPI对应)
  122. "name": "Embedding-2", // 模型展示名
  123. "avatar": "/imgs/model/openai.svg", // logo
  124. "charsPointsPrice": 0, // n积分/1k token
  125. "defaultToken": 700, // 默认文本分割时候的 token
  126. "maxToken": 3000, // 最大 token
  127. "weight": 100, // 优先训练权重
  128. "defaultConfig": {}, // 自定义额外参数。例如,如果希望使用 embedding3-large 的话,可以传入 dimensions:1024,来返回1024维度的向量。(目前必须小于1536维度)
  129. "dbConfig": {}, // 存储时的额外参数(非对称向量模型时候需要用到)
  130. "queryConfig": {} // 参训时的额外参数
  131. },
  132. {
  133. "model": "text-embedding-3-large",
  134. "name": "text-embedding-3-large",
  135. "avatar": "/imgs/model/openai.svg",
  136. "charsPointsPrice": 0,
  137. "defaultToken": 512,
  138. "maxToken": 3000,
  139. "weight": 100,
  140. "defaultConfig": {
  141. "dimensions": 1024
  142. }
  143. },
  144. {
  145. "model": "text-embedding-3-small",
  146. "name": "text-embedding-3-small",
  147. "avatar": "/imgs/model/openai.svg",
  148. "charsPointsPrice": 0,
  149. "defaultToken": 512,
  150. "maxToken": 3000,
  151. "weight": 100
  152. }
  153. ],
  154. "reRankModels": [],
  155. "audioSpeechModels": [
  156. {
  157. "model": "tts-1",
  158. "name": "OpenAI TTS1",
  159. "charsPointsPrice": 0,
  160. "voices": [
  161. { "label": "Alloy", "value": "alloy", "bufferId": "openai-Alloy" },
  162. { "label": "Echo", "value": "echo", "bufferId": "openai-Echo" },
  163. { "label": "Fable", "value": "fable", "bufferId": "openai-Fable" },
  164. { "label": "Onyx", "value": "onyx", "bufferId": "openai-Onyx" },
  165. { "label": "Nova", "value": "nova", "bufferId": "openai-Nova" },
  166. { "label": "Shimmer", "value": "shimmer", "bufferId": "openai-Shimmer" }
  167. ]
  168. }
  169. ],
  170. "whisperModel": {
  171. "model": "whisper-1",
  172. "name": "Whisper1",
  173. "charsPointsPrice": 0
  174. }
  175. }
  1. # 数据库的默认账号和密码仅首次运行时设置有效
  2. # 如果修改了账号密码,记得改数据库和项目连接参数,别只改一处~
  3. # 该配置文件只是给快速启动,测试使用。正式使用,记得务必修改账号密码,以及调整合适的知识库参数,共享内存等。
  4. # 如何无法访问 dockerhub 和 git,可以用阿里云(阿里云没有arm包)
  5. version: '3.3'
  6. services:
  7. # db
  8. pg:
  9. image: pgvector/pgvector:0.7.0-pg15 # docker hub
  10. # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.7.0 # 阿里云
  11. container_name: pg
  12. restart: always
  13. ports: # 生产环境建议不要暴露
  14. - 5432:5432
  15. networks:
  16. - fastgpt
  17. environment:
  18. # 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
  19. - POSTGRES_USER=username
  20. - POSTGRES_PASSWORD=password
  21. - POSTGRES_DB=postgres
  22. volumes:
  23. - ./pg/data:/var/lib/postgresql/data
  24. mongo:
  25. image: mongo:5.0.18 # dockerhub
  26. # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云
  27. # image: mongo:4.4.29 # cpu不支持AVX时候使用
  28. container_name: mongo
  29. restart: always
  30. ports:
  31. - 27017:27017
  32. networks:
  33. - fastgpt
  34. command: mongod --keyFile /data/mongodb.key --replSet rs0
  35. environment:
  36. - MONGO_INITDB_ROOT_USERNAME=myusername
  37. - MONGO_INITDB_ROOT_PASSWORD=mypassword
  38. volumes:
  39. - ./mongo/data:/data/db
  40. entrypoint:
  41. - bash
  42. - -c
  43. - |
  44. openssl rand -base64 128 > /data/mongodb.key
  45. chmod 400 /data/mongodb.key
  46. chown 999:999 /data/mongodb.key
  47. echo 'const isInited = rs.status().ok === 1
  48. if(!isInited){
  49. rs.initiate({
  50. _id: "rs0",
  51. members: [
  52. { _id: 0, host: "mongo:27017" }
  53. ]
  54. })
  55. }' > /data/initReplicaSet.js
  56. # 启动MongoDB服务
  57. exec docker-entrypoint.sh "$$@" &
  58. # 等待MongoDB服务启动
  59. until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')" > /dev/null 2>&1; do
  60. echo "Waiting for MongoDB to start..."
  61. sleep 2
  62. done
  63. # 执行初始化副本集的脚本
  64. mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
  65. # 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
  66. wait $$!
  67. # fastgpt
  68. sandbox:
  69. container_name: sandbox
  70. image: ghcr.io/labring/fastgpt-sandbox:latest # git
  71. # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:latest # 阿里云
  72. networks:
  73. - fastgpt
  74. restart: always
  75. fastgpt:
  76. container_name: fastgpt
  77. image: ghcr.io/labring/fastgpt:v4.8.9 # git
  78. # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.9 # 阿里云
  79. ports:
  80. - 3020:3000
  81. networks:
  82. - fastgpt
  83. depends_on:
  84. - mongo
  85. - pg
  86. - sandbox
  87. restart: always
  88. environment:
  89. # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
  90. - DEFAULT_ROOT_PSW=1234
  91. # AI模型的API地址哦。务必加 /v1。这里默认填写了OneApi的访问地址。
  92. - OPENAI_BASE_URL=http://oneapi:3000/v1
  93. # AI模型的API Key。(这里默认填写了OneAPI的快速默认key,测试通后,务必及时修改)
  94. - CHAT_API_KEY=sk-fastgpt
  95. # 数据库最大连接数
  96. - DB_MAX_LINK=30
  97. # 登录凭证密钥
  98. - TOKEN_KEY=any
  99. # root的密钥,常用于升级时候的初始化请求
  100. - ROOT_KEY=root_key
  101. # 文件阅读加密
  102. - FILE_TOKEN_KEY=filetoken
  103. # MongoDB 连接参数. 用户名myusername,密码mypassword。
  104. - MONGODB_URI=mongodb://myusername:mypassword@mongo:27017/fastgpt?authSource=admin
  105. # pg 连接参数
  106. - PG_URL=postgresql://username:password@pg:5432/postgres
  107. # sandbox 地址
  108. - SANDBOX_URL=http://sandbox:3000
  109. # 日志等级: debug, info, warn, error
  110. - LOG_LEVEL=info
  111. - STORE_LOG_LEVEL=warn
  112. volumes:
  113. - ./config.json:/app/data/config.json
  114. # oneapi
  115. mysql:
  116. # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mysql:8.0.36 # 阿里云
  117. image: mysql:8.0.36
  118. container_name: mysql
  119. restart: always
  120. ports:
  121. - 3306:3306
  122. networks:
  123. - fastgpt
  124. command: --default-authentication-plugin=mysql_native_password
  125. environment:
  126. # 默认root密码,仅首次运行有效
  127. MYSQL_ROOT_PASSWORD: oneapimmysql
  128. MYSQL_DATABASE: oneapi
  129. volumes:
  130. - ./mysql:/var/lib/mysql
  131. oneapi:
  132. container_name: oneapi
  133. image: ghcr.io/songquanpeng/one-api:v0.6.7
  134. # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云
  135. ports:
  136. - 3001:3000
  137. depends_on:
  138. - mysql
  139. networks:
  140. - fastgpt
  141. restart: always
  142. environment:
  143. # mysql 连接参数
  144. - SQL_DSN=root:oneapimmysql@tcp(mysql:3306)/oneapi
  145. # 登录凭证加密密钥
  146. - SESSION_SECRET=oneapikey
  147. # 内存缓存
  148. - MEMORY_CACHE_ENABLED=true
  149. # 启动聚合更新,减少数据交互频率
  150. - BATCH_UPDATE_ENABLED=true
  151. # 聚合更新时长
  152. - BATCH_UPDATE_INTERVAL=10
  153. # 初始化的 root 密钥(建议部署完后更改,否则容易泄露)
  154. - INITIAL_ROOT_TOKEN=fastgpt
  155. volumes:
  156. - ./oneapi:/data
  157. networks:
  158. fastgpt:

(将fastgpt的ports修改为3020:3000)

对于该配置文件下载时存在三个版本,如何选择依据下图:

(3)下载镜像
docker-compose up -d     # 一次性启动所有服务,若本地没有该服务镜像则会先下载
(4)安装ollama

Ollama是管理和运行大型语言模型的开源工具。其功能特点包括:可在本地运行大型语言模型,保障数据隐私与安全;支持多种模型管理,方便用户按需拉取切换;轻量级,对系统资源要求相对合理,能在多种设备运行;具有简单的命令行界面,易于使用。在应用场景方面,对开发者而言,能在本地快速搭建测试环境,提高开发效率;对普通用户来说,可用于个人创作任务并确保数据安全,是一款功能实用且易用的工具。

ollama安装地址 | ollama仓库地址

ollama常用命令:

  1. ollama pull :用于从 Ollama 的模型库中拉取指定名称的模型到本地
  2. ollama list:该命令会列出已经下载到本地的所有模型
  3. ollama run :启动指定名称的模型

(5)安装M3E
  1. # 1.拉取镜像
  2. 只有amd64架构:docker pull registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api:latest
  3. # 2.启动镜像(2种方式根据实际情况选择)
  4. # 使用CPU运行
  5. docker run -d --name m3e -p 6100:6008 registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api
  6. # nvida-docker 使用GPU
  7. docker run -d --name m3e -p 6100:6008 --gpus all registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api

测试是否安装成功:

  1. curl --location 'http://localhost:6100/v1/embeddings' \
  2. --header 'Content-Type: application/json' \
  3. --header 'Authorization: Bearer sk-aaabbbcccdddeeefffggghhhiiijjjkkk' \
  4. --data '{
  5. "model": "m3e",
  6. "input": [
  7. "laf是什么"
  8. ]
  9. }'


 

Windows下 PowerShell 中发起下面请求代码测试: 

  1. $headers = @{
  2. "Content-Type" = "application/json"
  3. "Authorization" = "Bearer sk-aaabbbcccdddeeefffggghhhiiijjjkkk"
  4. }
  5. $body = @{
  6. "model" = "m3e"
  7. "input" = @("laf是什么")
  8. } | ConvertTo-Json
  9. Invoke-WebRequest -Uri "http://localhost:6100/v1/embeddings" -Method POST -Headers $headers -Body $body


 

(6)通过one-api配置国内大模型(以qwen)

根据设定的端口,在浏览器内输入localhost:3001,默认账号为root密码为123456

(端口号在docker-compose.yml文件中查看)

在渠道中配置 通义千问和M3E。

a. 通义千问配置

b. M3E配置

密钥默认设置为: sk-aaabbbcccdddeeefffggghhhiiijjjkkk

c.测试所有渠道

(7)将模型集成进fastgpt

修改config.json文件

  1. "chatModels": [
  2. ...
  3. #新增一个模型配置
  4. {
  5. "model": "qwen2.5:0.5b", // 模型名(对应OneAPI中渠道的模型名)
  6. "name": "qwen", // 模型别名
  7. "avatar": "/imgs/model/openai.svg", // 模型的logo
  8. "maxContext": 8000, // 最大上下文
  9. "maxResponse": 8000, // 最大回复
  10. "quoteMaxToken": 8000, // 最大引用内容
  11. "maxTemperature": 1.2, // 最大温度
  12. "charsPointsPrice": 0, // n积分/1k token(商业版)
  13. "censor": false, // 是否开启敏感校验(商业版)
  14. "vision": true, // 是否支持图片输入
  15. "datasetProcess": true, // 是否设置为文本理解模型(QA),务必保证至少有一个为true,否则知识库会报错
  16. "usedInClassify": true, // 是否用于问题分类(务必保证至少有一个为true)
  17. "usedInExtractFields": true, // 是否用于内容提取(务必保证至少有一个为true)
  18. "usedInToolCall": true, // 是否用于工具调用(务必保证至少有一个为true)
  19. "usedInQueryExtension": true, // 是否用于问题优化(务必保证至少有一个为true)
  20. "toolChoice": true, // 是否支持工具选择(分类,内容提取,工具调用会用到。目前只有gpt支持)
  21. "functionCall": false, // 是否支持函数调用(分类,内容提取,工具调用会用到。会优先使用 toolChoice,如果为false,则使用 functionCall,如果仍为 false,则使用提示词模式)
  22. "customCQPrompt": "", // 自定义文本分类提示词(不支持工具和函数调用的模型
  23. "customExtractPrompt": "", // 自定义内容提取提示词
  24. "defaultSystemChatPrompt": "", // 对话默认携带的系统提示词
  25. "defaultConfig": {}, // 请求API时,挟带一些默认配置(比如 GLM4 的 top_p)
  26. "fieldMap": {} // 字段映射(o1 模型需要把 max_tokens 映射为 max_completion_tokens)
  27. },
  28. ...
  29. ]
  30. # 添加m3e向量模型
  31. "vectorModels": [
  32. ......
  33. {
  34. "model": "m3e",
  35. "name": "m3e",
  36. "avatar": "/imgs/model/openai.svg",
  37. "charsPointsPrice": 0,
  38. "defaultToken": 700,
  39. "maxToken": 3000,
  40. "weight": 100
  41. },
  42. ......
  43. ]

(其中name的值需要与one-api渠道配置中的名称保持一致,model的值需要与模型名称保持一致)

  1. docker-compose down
  2. docker-compose up -d
(8) 测试

访问fastgpt:http://localhost:3020

知识库 - 新建知识库

成功!!

注:本文转载自blog.csdn.net的努力的小Qin的文章"https://blog.csdn.net/m0_37827702/article/details/142855090"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

133
开发工具
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top