mirror of
https://github.com/labring/FastGPT.git
synced 2026-02-27 01:02:22 +08:00
doc (#6419)
This commit is contained in:
@@ -71,4 +71,8 @@ import FastGPTLink from '@/components/docs/linkFastGPT'; #FastGPT跳转链接组
|
||||
|
||||
### 增加顶层导航栏
|
||||
|
||||
1. 在 `FastGPT/document/app/[lang]/docs/layout.tsx` 文件中新增导航。
|
||||
1. 在 `FastGPT/document/app/[lang]/docs/layout.tsx` 文件中新增导航。
|
||||
|
||||
### 重定向
|
||||
|
||||
在`FastGPT/document/components/docs/not-found.tsx`文件中新增重定向规则。
|
||||
@@ -63,9 +63,9 @@
|
||||
pre,
|
||||
code {
|
||||
border-radius: 16px;
|
||||
background: #F5F6F7;
|
||||
background: #f5f6f7;
|
||||
font-family: Alef;
|
||||
font-size: 1.0rem;
|
||||
font-size: 1rem;
|
||||
font-weight: 400;
|
||||
line-height: 16px;
|
||||
letter-spacing: 0.48px;
|
||||
@@ -87,7 +87,7 @@ div[role='tabpanel'] figure:has(+ p) pre code {
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 24px 0 24px 24px ;
|
||||
padding: 24px 30px 24px 24px;
|
||||
}
|
||||
|
||||
pre code {
|
||||
@@ -118,33 +118,33 @@ code span {
|
||||
margin: 0 0.2em;
|
||||
color: #272727;
|
||||
background: #f5f6f7;
|
||||
font-family: "PingFang SC";
|
||||
font-family: 'PingFang SC';
|
||||
font-size: 14px;
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
line-height: 180%;
|
||||
line-height: 180%;
|
||||
letter-spacing: 0.056px;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.dark :not(pre) > code {
|
||||
color: #E6E6E6 !important;
|
||||
color: #e6e6e6 !important;
|
||||
background: #282828 !important;
|
||||
}
|
||||
|
||||
div[role="tablist"] ~ div:has(figure, p, ul) {
|
||||
div[role='tablist'] ~ div:has(figure, p, ul) {
|
||||
border-radius: 0 !important;
|
||||
border: solid 1.5px #e5e5e5;
|
||||
border-radius: 0.75rem !important;
|
||||
}
|
||||
|
||||
.dark div[role="tablist"] ~ div:has(figure, p, ul) {
|
||||
.dark div[role='tablist'] ~ div:has(figure, p, ul) {
|
||||
border: solid 1.5px #535353;
|
||||
}
|
||||
|
||||
.dark div[role="tablist"] {
|
||||
background-color: #1E1E1E;
|
||||
.dark div[role='tablist'] {
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
|
||||
/* 代码块下方的滚动条样式 */
|
||||
@@ -153,31 +153,31 @@ div.bg-fd-secondary:has(pre) {
|
||||
}
|
||||
|
||||
.dark div.bg-fd-secondary:has(pre) {
|
||||
background-color: #1E1E1E;
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
|
||||
div.bg-fd-secondary:has(pre)::-webkit-scrollbar-track {
|
||||
background: #e8e8e8;
|
||||
background: #e8e8e8;
|
||||
}
|
||||
|
||||
div.bg-fd-secondary:has(pre)::-webkit-scrollbar-thumb {
|
||||
background: #b0b0b0;
|
||||
background: #b0b0b0;
|
||||
}
|
||||
|
||||
div.bg-fd-secondary:has(pre)::-webkit-scrollbar-thumb:hover {
|
||||
background: #909090;
|
||||
background: #909090;
|
||||
}
|
||||
|
||||
.dark div.bg-fd-secondary:has(pre)::-webkit-scrollbar-track {
|
||||
background: #1a1a1a;
|
||||
background: #1a1a1a;
|
||||
}
|
||||
|
||||
.dark div.bg-fd-secondary:has(pre)::-webkit-scrollbar-thumb {
|
||||
background: #404040;
|
||||
background: #404040;
|
||||
}
|
||||
|
||||
.dark div.bg-fd-secondary:has(pre)::-webkit-scrollbar-thumb:hover {
|
||||
background: #606060;
|
||||
background: #606060;
|
||||
}
|
||||
|
||||
/* 代码块中的滚动条样式优化 */
|
||||
@@ -265,8 +265,8 @@ div[data-state='open'].fixed.inset-0.z-50 {
|
||||
}
|
||||
|
||||
/* 复制按钮容器和按钮样式 */
|
||||
div[class*="bg-fd-card"]:has(button[aria-label='Copy Text']),
|
||||
div[class*="bg-fd-card"]:has(button[aria-label='Copied Text']) {
|
||||
div[class*='bg-fd-card']:has(button[aria-label='Copy Text']),
|
||||
div[class*='bg-fd-card']:has(button[aria-label='Copied Text']) {
|
||||
right: 26px;
|
||||
top: 24px;
|
||||
display: flex;
|
||||
@@ -305,7 +305,7 @@ button[aria-label='Copy Text']::before {
|
||||
background-image: url('../public/icons/copy.svg');
|
||||
width: 26px;
|
||||
height: 26px;
|
||||
transition: filter 0.2s ease;
|
||||
transition: filter 0.2s ease;
|
||||
}
|
||||
|
||||
/* 鼠标悬停时使复制图标颜色变深 */
|
||||
@@ -419,13 +419,13 @@ div[data-rmiz-modal-overlay='visible'] {
|
||||
--color-fd-background: #000000;
|
||||
--color-fd-foreground: hsl(220, 60%, 94.5%);
|
||||
--color-fd-muted: hsl(220, 50%, 10%);
|
||||
--color-fd-muted-foreground: #B0B0B0;
|
||||
--color-fd-muted-foreground: #b0b0b0;
|
||||
--color-fd-popover: hsl(220, 50%, 10%);
|
||||
--color-fd-popover-foreground: hsl(220, 60%, 94.5%);
|
||||
--color-fd-card: hsla(220, 56%, 15%, 0.4);
|
||||
--color-fd-card-foreground: hsl(220, 60%, 94.5%);
|
||||
--color-fd-border: hsla(220, 50%, 50%, 0.2);
|
||||
--color-fd-primary: #C2D3FF; /* 文本高亮色 */
|
||||
--color-fd-primary: #c2d3ff; /* 文本高亮色 */
|
||||
--color-fd-primary-foreground: hsl(0, 0%, 9%);
|
||||
--color-fd-secondary: hsl(220, 50%, 20%);
|
||||
--color-fd-secondary-foreground: hsl(220, 80%, 90%);
|
||||
@@ -443,36 +443,35 @@ button[data-search-full] {
|
||||
}
|
||||
|
||||
.dark\:text-blue-400:where(.dark, .dark *) {
|
||||
color: #C2D3FF;
|
||||
color: #c2d3ff;
|
||||
background-color: #434548;
|
||||
}
|
||||
|
||||
|
||||
.dark div[role="tabpanel"].bg-fd-background {
|
||||
background-color: #1E1E1E;
|
||||
.dark div[role='tabpanel'].bg-fd-background {
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
|
||||
div[role="tabpanel"].bg-fd-background {
|
||||
background-color: #F7F7F8;
|
||||
div[role='tabpanel'].bg-fd-background {
|
||||
background-color: #f7f7f8;
|
||||
}
|
||||
|
||||
div[role="tabpanel"].bg-fd-background > div > ul {
|
||||
div[role='tabpanel'].bg-fd-background > div > ul {
|
||||
margin: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 10px;
|
||||
}
|
||||
|
||||
.dark div[role="tabpanel"].bg-fd-background > div > ul {
|
||||
.dark div[role='tabpanel'].bg-fd-background > div > ul {
|
||||
margin: 0;
|
||||
background-color: #1E1E1E;
|
||||
background-color: #1e1e1e;
|
||||
}
|
||||
|
||||
div[role="tabpanel"].bg-fd-background > div > ul > li {
|
||||
div[role='tabpanel'].bg-fd-background > div > ul > li {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
button[role="tab"] {
|
||||
button[role='tab'] {
|
||||
padding-top: 16px;
|
||||
padding-bottom: 16px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,8 @@ const prefixMap: Record<string, string> = {
|
||||
'/docs/FAQ': '/docs/faq',
|
||||
'/docs/guide': '/docs/introduction/guide',
|
||||
'/docs/shopping_cart': '/docs/introduction/shopping_cart',
|
||||
'/docs/agreement': '/docs/protocol'
|
||||
'/docs/agreement': '/docs/protocol',
|
||||
'/docs/introduction/development/openapi': '/docs/introduction/openapi'
|
||||
};
|
||||
|
||||
const fallbackRedirect = '/docs/introduction';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: Docker Compose 快速部署
|
||||
title: Docker 快速部署
|
||||
description: 使用 Docker Compose 快速部署 FastGPT
|
||||
---
|
||||
|
||||
@@ -9,8 +9,6 @@ import { Alert } from '@/components/docs/Alert';
|
||||
|
||||
1. 基础的网络知识:端口,防火墙……
|
||||
2. Docker 和 Docker Compose 基础知识
|
||||
3. 大模型相关接口和参数
|
||||
4. RAG 相关知识:向量模型,向量数据库,向量检索
|
||||
|
||||
## 部署架构图
|
||||
|
||||
@@ -119,149 +117,68 @@ brew install orbstack
|
||||
|
||||
## 开始部署
|
||||
|
||||
### 1. 获取 `docker-compose.yml` 和 `config.json` 配置文件
|
||||
### 1. 获取配置文件
|
||||
|
||||
#### 方法一:使用脚本部署
|
||||
#### 方法一:使用交互式脚本部署
|
||||
|
||||
<Tabs items={['PgVector版本','Oceanbase版本','Milvus版本','Zilliz版本','SeekDB版本']}>
|
||||
<Tab value="PgVector版本">
|
||||
国内镜像(阿里云)
|
||||
需要在 Linux/MacOS/Windows WSL 环境下执行,引导用户选择部署环境、向量库版本,IP地址等。
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=cn --vector=pg
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh)
|
||||
```
|
||||
|
||||
非国内镜像(dockhub, ghcr)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=global --vector=pg
|
||||
```
|
||||
需要在 Linux/MacOS/Windows WSL 环境下执行
|
||||
</Tab>
|
||||
|
||||
<Tab value="Oceanbase版本">
|
||||
国内镜像(阿里云)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=cn --vector=oceanbase
|
||||
```
|
||||
|
||||
非国内镜像(dockhub, ghcr)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=global --vector=oceanbase
|
||||
```
|
||||
需要在 Linux/MacOS/Windows WSL 环境下执行
|
||||
</Tab>
|
||||
<Tab value="Milvus版本">
|
||||
国内镜像(阿里云)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=cn --vector=milvus
|
||||
```
|
||||
|
||||
非国内镜像(dockhub, ghcr)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=global --vector=milvus
|
||||
```
|
||||
需要在 Linux/MacOS/Windows WSL 环境下执行
|
||||
</Tab>
|
||||
<Tab value="Zilliz版本">
|
||||
国内镜像(阿里云)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=cn --vector=zilliz
|
||||
```
|
||||
|
||||
非国内镜像(dockhub, ghcr)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=global --vector=zilliz
|
||||
```
|
||||
需要在 Linux/MacOS/Windows WSL 环境下执行
|
||||
|
||||
zilliz 还需要获取密钥,参考 [部署 Zilliz 版本获取账号和密钥](#部署-zilliz-版本获取账号和密钥)
|
||||
</Tab>
|
||||
<Tab value="SeekDB版本">
|
||||
国内镜像(阿里云)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=cn --vector=seekdb
|
||||
```
|
||||
|
||||
非国内镜像(dockhub, ghcr)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=global --vector=seekdb
|
||||
```
|
||||
需要在 Linux/MacOS/Windows WSL 环境下执行
|
||||
|
||||
<Alert icon="🤖" context="success">
|
||||
|
||||
SeekDB 使用 MySQL 协议,兼容 OceanBase 的所有特性:
|
||||
- 端口:3306(默认)
|
||||
- 连接字符串格式:`mysql://root%40tenantname:password@host:3306/database`
|
||||
- 环境变量:`SEEKDB_URL`
|
||||
|
||||
</Alert>
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
#### 方法二:手动下载部署
|
||||
如果部署环境为非 *nix 环境或无法访问外网,需要手动下载 `docker-compose.yml` 进行部署
|
||||
|
||||
选择并下载您的 `docker-compose.yml` 文件
|
||||
- Pgvector
|
||||
1. 下载 `docker-compose.yml` 文件:
|
||||
|
||||
<details>
|
||||
<summary>点击展开查看不同数据库的 docker-compose 配置文件下载地址</summary>
|
||||
|
||||
- **Pgvector**
|
||||
- 中国大陆地区镜像源(阿里云):[docker-compose.pg.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.pg.yml)
|
||||
- 全球镜像源(dockerhub, ghcr):[docker-compose.pg.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.pg.yml)
|
||||
- Oceanbase
|
||||
- **Oceanbase**
|
||||
- 中国大陆地区镜像源(阿里云):[docker-compose.ob.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.ob.yml)
|
||||
- 全球镜像源(dockerhub, ghcr):[docker-compose.ob.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.ob.yml)
|
||||
- Milvus
|
||||
- **Milvus**
|
||||
- 中国大陆地区镜像源(阿里云):[docker-compose.milvus.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.milvus.yml)
|
||||
- 全球镜像源(dockerhub, ghcr):[docker-compose.milvus.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.milvus.yml)
|
||||
- Zilliz
|
||||
- **Zilliz**
|
||||
- 中国大陆地区镜像源(阿里云):[docker-compose.zilliz.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.zilliz.yml)
|
||||
- 全球镜像源(dockerhub, ghcr):[docker-compose.zilliz.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.zilliz.yml)
|
||||
- SeekDB
|
||||
- **SeekDB**
|
||||
- 中国大陆地区镜像源(阿里云):[docker-compose.seekdb.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.seekdb.yml)
|
||||
- 全球镜像源(dockerhub, ghcr):[docker-compose.seekdb.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.seekdb.yml)
|
||||
|
||||
2. 下载 `config.json` 文件:
|
||||
- [config.json](https://doc.fastgpt.cn/deploy/config/config.json)
|
||||
|
||||
</details>
|
||||
|
||||
下载 config.json 文件
|
||||
- [config.json](https://doc.fastgpt.cn/deploy/config/config.json)
|
||||
|
||||
<Alert icon="🤖" context="success">
|
||||
### 2. 修改环境变量
|
||||
|
||||
所有 `docker-compose.yml` 配置文件中 `MongoDB` 为 5.x,需要用到AVX指令集,部分 CPU 不支持,需手动更改其镜像版本为 4.4.24\*\*(需要自己在docker hub下载,阿里云镜像没做备份)
|
||||
1. 按照您的需求自行修改环境变量,建议在生产环境修改账号密码等。
|
||||
2. 对于 Zilliz 版本 还需要获取密钥,参考 [部署 Zilliz 版本获取账号和密钥](#部署-zilliz-版本获取账号和密钥)
|
||||
|
||||
</Alert>
|
||||
|
||||
### 2. 开放外网端口/配置域名
|
||||
|
||||
以下两个端口必须被访问到:
|
||||
|
||||
1. 指向 3000 端口(FastGPT 主服务)
|
||||
2. 指向 9000 端口(S3 服务)
|
||||
|
||||
### 3. 修改环境变量
|
||||
|
||||
1. 修改`STORAGE_EXTERNAL_ENDPOINT`变量,改成客户端和FastGPT 服务均可访问的地址。
|
||||
|
||||
**重要:**
|
||||
|
||||
> 填入的地址不可为`127.0.0.1`或者`localhost`等本地回环地址,可填 Docker 部署时的宿主机本地IP,但是需要把宿主机固定为静态 IP;或者统一为一个固定域名;目的是为了避免对象存储签名 URL 时,签发与上传的 URL 不一致导致的 403 错误。
|
||||
>
|
||||
> 具体查看 [对象存储配置及常见问题](/docs/introduction/development/object-storage)
|
||||
|
||||
2. 按照您的需求自行修改环境变量,建议在生产环境修改账号密码等。
|
||||
3. 对于 Zilliz 版本 还需要获取密钥,参考 [部署 Zilliz 版本获取账号和密钥](#部署-zilliz-版本获取账号和密钥)
|
||||
|
||||
### 4. 修改 config.json 配置文件
|
||||
### 3. 修改 config.json 配置文件
|
||||
|
||||
修改`config.json`文件中的`mcpServerProxyEndpoint`值,设置成`mcp server`的公网可访问地址,yml 文件中默认给出了映射到 3005 端口,如通过 IP 访问,则可能是:`120.172.2.10:3005`。
|
||||
|
||||
### 5. 启动容器
|
||||
|
||||
### 3. 开放外网端口/配置域名
|
||||
|
||||
以下端口必须被访问到:
|
||||
|
||||
1. 3000 端口(FastGPT 主服务)
|
||||
2. 9000 端口(S3 服务)
|
||||
1. 3005 端口(FastGPT SSE MCP server 服务)
|
||||
|
||||
### 6. 启动容器
|
||||
|
||||
在 docker-compose.yml 同级目录下执行。请确保`docker-compose`版本最好在2.17以上,否则可能无法执行自动化命令。
|
||||
|
||||
@@ -270,19 +187,19 @@ bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=global --ve
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### 6. 访问 FastGPT
|
||||
### 7. 访问 FastGPT
|
||||
|
||||
可通过第二步开放的端口/域名访问 FastGPT。
|
||||
登录用户名为 `root`,密码为`docker-compose.yml`环境变量里设置的 `DEFAULT_ROOT_PSW`。
|
||||
每次重启容器,都会自动初始化 root 用户,密码为 `1234`(与环境变量中的`DEFAULT_ROOT_PSW`一致)。
|
||||
|
||||
### 7. 配置模型
|
||||
### 8. 配置模型
|
||||
|
||||
- 首次登录FastGPT后,系统会提示未配置`语言模型`和`索引模型`,并自动跳转模型配置页面。系统必须至少有这两类模型才能正常使用。
|
||||
- 如果系统未正常跳转,可以在`账号-模型提供商`页面,进行模型配置。[点击查看相关教程](/docs/introduction/development/modelConfig/ai-proxy)
|
||||
- 目前已知可能问题:首次进入系统后,整个浏览器 tab 无法响应。此时需要删除该tab,重新打开一次即可。
|
||||
|
||||
### 8. 安装系统插件
|
||||
### 9. 安装系统插件
|
||||
|
||||
从 V4.14.0 版本开始,fastgpt-plugin 镜像仅提供运行环境,不再预装系统插件,所有 FastGPT 系统需手动安装系统插件。
|
||||
|
||||
@@ -302,6 +219,16 @@ docker-compose up -d
|
||||
| 0.5.x | >= 4.14.6 |
|
||||
| < 0.5.0 | < 4.14.5 |
|
||||
|
||||
### S3 无法正常连接
|
||||
|
||||
|
||||
检查`STORAGE_EXTERNAL_ENDPOINT`变量,需设置成客户端和 FastGPT 服务均可访问的地址。
|
||||
|
||||
**重要:**
|
||||
|
||||
> 填入的地址不可为`127.0.0.1`或者`localhost`等本地回环地址,可填 Docker 部署时的宿主机本地IP,但是需要把宿主机固定为静态 IP;或者统一为一个固定域名;目的是为了避免对象存储签名 URL 时,签发与上传的 URL 不一致导致的 403 错误。
|
||||
>
|
||||
> 具体查看 [对象存储配置及常见问题](/docs/introduction/development/object-storage)
|
||||
|
||||
### 登录系统后,浏览器无法响应
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: 快速开始本地开发
|
||||
title: 开始本地开发
|
||||
description: 对 FastGPT 进行开发调试
|
||||
---
|
||||
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
"pages": [
|
||||
"quick-start",
|
||||
"sealos",
|
||||
"intro",
|
||||
"docker",
|
||||
"faq",
|
||||
"intro",
|
||||
"configuration",
|
||||
"object-storage",
|
||||
"faq",
|
||||
"signoz",
|
||||
"modelConfig",
|
||||
"custom-models",
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
---
|
||||
title: 快速了解 FastGPT
|
||||
description: FastGPT 的能力与优势
|
||||
---
|
||||
|
||||
import { Alert } from '@/components/docs/Alert';
|
||||
|
||||
FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,将智能对话与可视化编排完美结合,让 AI 应用开发变得简单自然。无论您是开发者还是业务人员,都能轻松打造专属的 AI 应用。
|
||||
|
||||
<Alert icon="🤖" context="success">
|
||||
快速开始体验
|
||||
- 海外版:[https://fastgpt.io](https://fastgpt.io)
|
||||
- 国内版:[https://fastgpt.cn](https://fastgpt.cn)
|
||||
</Alert>
|
||||
|
||||
| | |
|
||||
| --------------------- | --------------------------------- |
|
||||
|  |  |
|
||||
|
||||
# FastGPT 的优势
|
||||
## 1. 简单灵活,像搭积木一样简单 🧱
|
||||
像搭乐高一样简单有趣,FastGPT 提供丰富的功能模块,通过简单拖拽就能搭建出个性化的 AI 应用,零代码也能实现复杂的业务流程。
|
||||
## 2. 让数据更智能 🧠
|
||||
FastGPT 提供完整的数据智能化解决方案,从数据导入、预处理到知识匹配,再到智能问答,全流程自动化。配合可视化的工作流设计,轻松打造专业级 AI 应用。
|
||||
## 3. 开源开放,易于集成 🔗
|
||||
FastGPT 基于 Apache 2.0 协议开源,支持二次开发。通过标准 API 即可快速接入,无需修改源码。支持 ChatGPT、Claude、DeepSeek 和文心一言等主流模型,持续迭代优化,始终保持产品活力。
|
||||
|
||||
---
|
||||
|
||||
# FastGPT 能做什么
|
||||
## 1. 全能知识库
|
||||
可轻松导入各式各样的文档及数据,能自动对其开展知识结构化处理工作。同时,具备支持多轮上下文理解的智能问答功能,还可为用户带来持续优化的知识库管理体验。
|
||||

|
||||
|
||||
## 2. 可视化工作流
|
||||
FastGPT直观的拖拽式界面设计,可零代码搭建复杂业务流程。还拥有丰富的功能节点组件,能应对多种业务需求,有着灵活的流程编排能力,按需定制业务流程。
|
||||

|
||||
|
||||
## 3. 数据智能解析
|
||||
FastGPT知识库系统对导入数据的处理极为灵活,可以智能处理PDF文档的复杂结构,保留图片、表格和LaTeX公式,自动识别扫描文件,并将内容结构化为清晰的Markdown格式。同时支持图片自动标注和索引,让视觉内容可被理解和检索,确保知识在AI问答中能被完整、准确地呈现和应用。
|
||||
|
||||

|
||||
|
||||
## 4. 工作流编排
|
||||
基于 Flow 模块的工作流编排,可以帮助你设计更加复杂的问答流程。例如查询数据库、查询库存、预约实验室等。
|
||||
|
||||

|
||||
|
||||
## 5. 强大的 API 集成
|
||||
FastGPT 完全对齐 OpenAI 官方接口,支持一键接入企业微信、公众号、飞书、钉钉等平台,让 AI 能力轻松融入您的业务场景。
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
# 核心特性
|
||||
|
||||
- 开箱即用的知识库系统
|
||||
- 可视化的低代码工作流编排
|
||||
- 支持主流大模型
|
||||
- 简单易用的 API 接口
|
||||
- 灵活的数据处理能力
|
||||
|
||||
---
|
||||
|
||||
# 知识库核心流程图
|
||||
|
||||

|
||||
@@ -7,9 +7,9 @@
|
||||
"cloud",
|
||||
"commercial",
|
||||
"development",
|
||||
"openapi",
|
||||
"---功能介绍---",
|
||||
"...guide"
|
||||
"...guide",
|
||||
"openapi"
|
||||
],
|
||||
"order": 1
|
||||
}
|
||||
|
||||
@@ -148,7 +148,7 @@ curl --location --request POST '{{host}}/shareAuth/start' \
|
||||
|
||||
该接口无规定返回值。
|
||||
|
||||
响应值与[chat 接口格式相同](/docs/introduction/development/openapi/intro/#响应),仅多了一个`token`。
|
||||
响应值与[chat 接口格式相同](/docs/introduction/openapi/intro/#响应),仅多了一个`token`。
|
||||
|
||||
重点关注:`totalPoints`(总消耗AI积分),`token`(Token消耗总数)
|
||||
|
||||
|
||||
@@ -3,7 +3,6 @@ title: FastGPT Toc
|
||||
description: FastGPT Toc
|
||||
---
|
||||
|
||||
- [/en/docs/introduction/index](/en/docs/introduction/index)
|
||||
- [/en/docs/protocol/open-source](/en/docs/protocol/open-source)
|
||||
- [/en/docs/protocol/privacy](/en/docs/protocol/privacy)
|
||||
- [/en/docs/protocol/terms](/en/docs/protocol/terms)
|
||||
|
||||
@@ -30,7 +30,7 @@ SIGNOZ_STORE_LEVEL=
|
||||
# 新增以下 6 个变量
|
||||
LOG_ENABLE_CONSOLE=true # 是否开启控制台打印
|
||||
LOG_CONSOLE_LEVEL=debug # 控制台打印最低日志等级
|
||||
LOG_ENABLE_OTEL=true # 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL=false # 是否开启 OTEL 日志收集
|
||||
LOG_OTEL_LEVEL=info # OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_SERVICE_NAME=fastgpt-client # 传递给 OTLP 收集器的服务名称
|
||||
LOG_OTEL_URL=http://localhost:4318/v1/logs # 你的 OTLP 收集器的地址,不要把 /v1/logs 遗漏了
|
||||
|
||||
@@ -23,7 +23,7 @@ curl --location --request POST 'https://{{host}}/api/admin/initv464' \
|
||||
## V4.6.4 功能介绍
|
||||
|
||||
1. 重写 - 分享链接身份逻辑,采用 localID 记录用户的ID。
|
||||
2. 商业版新增 - 分享链接 SSO 方案,通过`身份鉴权`地址,仅需`3个接口`即可完全接入已有用户系统。具体参考[分享链接身份鉴权](/docs/introduction/development/openapi/share/)
|
||||
2. 商业版新增 - 分享链接 SSO 方案,通过`身份鉴权`地址,仅需`3个接口`即可完全接入已有用户系统。具体参考[分享链接身份鉴权](/docs/introduction/openapi/share/)
|
||||
3. 新增 - 分享链接更多嵌入方式提示,更多DIY方式。
|
||||
4. 优化 - 历史记录模块。弃用旧的历史记录模块,直接在对应地方填写数值即可。
|
||||
5. 调整 - 知识库搜索模块 topk 逻辑,采用 MaxToken 计算,兼容不同长度的文本块
|
||||
|
||||
@@ -24,7 +24,7 @@ curl --location --request POST 'https://{{host}}/api/admin/initv467' \
|
||||
|
||||
1. 修改了知识库UI及新的导入交互方式。
|
||||
2. 优化知识库和对话的数据索引。
|
||||
3. 知识库 openAPI,支持通过 [API 操作知识库](/docs/introduction/development/openapi/dataset)。
|
||||
3. 知识库 openAPI,支持通过 [API 操作知识库](/docs/introduction/openapi/dataset)。
|
||||
4. 新增 - 输入框变量提示。输入 `{` 号后将会获得可用变量提示。根据社区针对高级编排的反馈,我们计划于 2 月份的版本中,优化变量内容,支持模块的局部变量以及更多全局变量写入。
|
||||
5. 优化 - 切换团队后会保存记录,下次登录时优先登录该团队。
|
||||
6. 修复 - API 对话时,chatId 冲突问题。
|
||||
|
||||
@@ -27,7 +27,7 @@ curl --location --request POST 'https://{{host}}/api/admin/initv469' \
|
||||
|
||||
## 外部接口更新
|
||||
|
||||
1. 由于计费系统变更,[分享链接对话上报接口](/docs/introduction/development/openapi/share/#5-编写对话结果上报接口可选)需要做一些调整,price字段被totalPoints字段取代。inputToken和outputToken不再提供,只提供`token`字段(总token数量)。
|
||||
1. 由于计费系统变更,[分享链接对话上报接口](/docs/introduction/openapi/share/#5-编写对话结果上报接口可选)需要做一些调整,price字段被totalPoints字段取代。inputToken和outputToken不再提供,只提供`token`字段(总token数量)。
|
||||
|
||||
## V4.6.9 更新说明
|
||||
|
||||
|
||||
@@ -163,7 +163,7 @@ curl --location --request POST 'https://{{host}}/api/admin/initv490' \
|
||||
1. 弃用 - 之前私有化部署的自定义文件解析方案,请同步更新到最新的配置方案。[点击查看 PDF 增强解析配置](/docs/introduction/development/configuration/#使用-doc2x-解析-pdf-文件)
|
||||
2. 弃用 - 弃用旧版本地文件上传 API:/api/core/dataset/collection/create/file(以前仅商业版可用的 API,该接口已放切换成:/api/core/dataset/collection/create/localFile)
|
||||
3. 停止维护,即将弃用 - 外部文件库相关 API,可通过 API 文件库替代。
|
||||
4. API更新 - 上传文件至知识库、创建连接集合、API 文件库、推送分块数据等带有 `trainingType` 字段的接口,`trainingType`字段未来仅支持`chunk`和`QA`两种模式。增强索引模式将设置单独字段:`autoIndexes`,目前仍有适配旧版`trainingType=auto`代码,但请尽快变更成新接口类型。具体可见:[知识库 OpenAPI 文档](/docs/introduction/development/openapi/dataset.md)
|
||||
4. API更新 - 上传文件至知识库、创建连接集合、API 文件库、推送分块数据等带有 `trainingType` 字段的接口,`trainingType`字段未来仅支持`chunk`和`QA`两种模式。增强索引模式将设置单独字段:`autoIndexes`,目前仍有适配旧版`trainingType=auto`代码,但请尽快变更成新接口类型。具体可见:[知识库 OpenAPI 文档](/docs/introduction/openapi/dataset.md)
|
||||
|
||||
## 🚀 新增内容
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ description: FastGPT V4.9.2 更新说明
|
||||
|
||||
## 重要更新
|
||||
|
||||
- 知识库导入数据 API 变更,增加`chunkSettingMode`,`chunkSplitMode`,`indexSize`可选参数,具体可参考 [知识库导入数据 API](/docs/introduction/development/openapi/dataset) 文档。
|
||||
- 知识库导入数据 API 变更,增加`chunkSettingMode`,`chunkSplitMode`,`indexSize`可选参数,具体可参考 [知识库导入数据 API](/docs/introduction/openapi/dataset) 文档。
|
||||
|
||||
## 🚀 新增内容
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ description: 通过 API 访问 FastGPT 应用
|
||||
|
||||
import { Alert } from '@/components/docs/Alert';
|
||||
|
||||
在 FastGPT 中,你可以为每一个应用创建多个 API 密钥,用于访问应用的 API 接口。每个密钥仅能访问一个应用。完整的接口可以[查看应用对话接口](/docs/introduction/development/openapi/intro)。
|
||||
在 FastGPT 中,你可以为每一个应用创建多个 API 密钥,用于访问应用的 API 接口。每个密钥仅能访问一个应用。完整的接口可以[查看应用对话接口](/docs/introduction/openapi/intro)。
|
||||
|
||||
## 获取 API 密钥
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"document/content/docs/introduction/development/custom-models/xinference.mdx": "2025-08-05T23:20:39+08:00",
|
||||
"document/content/docs/introduction/development/design/dataset.mdx": "2025-07-23T21:35:03+08:00",
|
||||
"document/content/docs/introduction/development/design/design_plugin.mdx": "2025-11-06T14:47:55+08:00",
|
||||
"document/content/docs/introduction/development/docker.mdx": "2026-02-11T13:31:15+08:00",
|
||||
"document/content/docs/introduction/development/docker.mdx": "2026-02-12T16:37:50+08:00",
|
||||
"document/content/docs/introduction/development/faq.mdx": "2025-08-12T22:22:18+08:00",
|
||||
"document/content/docs/introduction/development/intro.mdx": "2025-09-29T11:34:11+08:00",
|
||||
"document/content/docs/introduction/development/migration/docker_db.mdx": "2025-07-23T21:35:03+08:00",
|
||||
@@ -36,7 +36,7 @@
|
||||
"document/content/docs/introduction/development/proxy/nginx.mdx": "2025-07-23T21:35:03+08:00",
|
||||
"document/content/docs/introduction/development/quick-start.mdx": "2025-10-21T11:58:25+08:00",
|
||||
"document/content/docs/introduction/development/sealos.mdx": "2025-11-11T14:05:02+08:00",
|
||||
"document/content/docs/introduction/development/signoz.mdx": "2026-02-12T11:32:33+08:00",
|
||||
"document/content/docs/introduction/development/signoz.mdx": "2026-02-12T16:37:50+08:00",
|
||||
"document/content/docs/introduction/guide/DialogBoxes/htmlRendering.mdx": "2025-07-23T21:35:03+08:00",
|
||||
"document/content/docs/introduction/guide/DialogBoxes/quoteList.mdx": "2025-07-23T21:35:03+08:00",
|
||||
"document/content/docs/introduction/guide/admin/sso.mdx": "2026-01-05T20:53:39+08:00",
|
||||
@@ -88,14 +88,13 @@
|
||||
"document/content/docs/introduction/guide/team_permissions/customDomain.mdx": "2025-12-10T20:07:05+08:00",
|
||||
"document/content/docs/introduction/guide/team_permissions/invitation_link.mdx": "2025-07-23T21:35:03+08:00",
|
||||
"document/content/docs/introduction/guide/team_permissions/team_roles_permissions.mdx": "2025-07-23T21:35:03+08:00",
|
||||
"document/content/docs/introduction/index.en.mdx": "2025-07-23T21:35:03+08:00",
|
||||
"document/content/docs/introduction/index.mdx": "2025-09-29T11:34:11+08:00",
|
||||
"document/content/docs/introduction/openapi/app.mdx": "2026-02-11T13:31:15+08:00",
|
||||
"document/content/docs/introduction/openapi/chat.mdx": "2026-02-11T13:31:15+08:00",
|
||||
"document/content/docs/introduction/openapi/dataset.mdx": "2026-02-11T13:31:15+08:00",
|
||||
"document/content/docs/introduction/openapi/intro.mdx": "2026-02-11T13:31:15+08:00",
|
||||
"document/content/docs/introduction/openapi/share.mdx": "2026-02-11T13:31:15+08:00",
|
||||
"document/content/docs/introduction/openapi/swagger.mdx": "2026-02-11T13:31:15+08:00",
|
||||
"document/content/docs/introduction/openapi/app.mdx": "2026-02-12T16:37:50+08:00",
|
||||
"document/content/docs/introduction/openapi/chat.mdx": "2026-02-12T16:37:50+08:00",
|
||||
"document/content/docs/introduction/openapi/dataset.mdx": "2026-02-12T16:37:50+08:00",
|
||||
"document/content/docs/introduction/openapi/intro.mdx": "2026-02-12T16:37:50+08:00",
|
||||
"document/content/docs/introduction/openapi/share.mdx": "2026-02-12T16:37:50+08:00",
|
||||
"document/content/docs/introduction/openapi/swagger.mdx": "2026-02-12T16:37:50+08:00",
|
||||
"document/content/docs/protocol/index.mdx": "2025-07-30T15:38:30+08:00",
|
||||
"document/content/docs/protocol/open-source.en.mdx": "2025-08-05T23:20:39+08:00",
|
||||
"document/content/docs/protocol/open-source.mdx": "2025-08-05T23:20:39+08:00",
|
||||
@@ -103,8 +102,7 @@
|
||||
"document/content/docs/protocol/privacy.mdx": "2025-12-15T23:36:54+08:00",
|
||||
"document/content/docs/protocol/terms.en.mdx": "2025-12-15T23:36:54+08:00",
|
||||
"document/content/docs/protocol/terms.mdx": "2025-12-15T23:36:54+08:00",
|
||||
"document/content/docs/toc.en.mdx": "2025-08-04T13:42:36+08:00",
|
||||
"document/content/docs/toc.mdx": "2026-02-11T13:31:15+08:00",
|
||||
"document/content/docs/toc.mdx": "2026-02-12T16:37:50+08:00",
|
||||
"document/content/docs/upgrading/4-10/4100.mdx": "2025-08-02T19:38:37+08:00",
|
||||
"document/content/docs/upgrading/4-10/4101.mdx": "2025-09-08T20:07:20+08:00",
|
||||
"document/content/docs/upgrading/4-11/4110.mdx": "2025-08-05T23:20:39+08:00",
|
||||
@@ -124,8 +122,8 @@
|
||||
"document/content/docs/upgrading/4-14/4144.mdx": "2026-02-04T14:27:58+08:00",
|
||||
"document/content/docs/upgrading/4-14/4145.mdx": "2026-01-18T23:59:15+08:00",
|
||||
"document/content/docs/upgrading/4-14/41451.mdx": "2026-01-20T11:53:27+08:00",
|
||||
"document/content/docs/upgrading/4-14/4146.mdx": "2026-02-09T10:22:42+08:00",
|
||||
"document/content/docs/upgrading/4-14/4147.mdx": "2026-02-12T11:32:33+08:00",
|
||||
"document/content/docs/upgrading/4-14/4146.mdx": "2026-02-12T16:37:50+08:00",
|
||||
"document/content/docs/upgrading/4-14/4147.mdx": "2026-02-12T16:37:50+08:00",
|
||||
"document/content/docs/upgrading/4-8/40.mdx": "2025-08-02T19:38:37+08:00",
|
||||
"document/content/docs/upgrading/4-8/41.mdx": "2025-08-02T19:38:37+08:00",
|
||||
"document/content/docs/upgrading/4-8/42.mdx": "2025-08-02T19:38:37+08:00",
|
||||
|
||||
@@ -216,8 +216,19 @@ services:
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 控制台打印最低日志等级
|
||||
LOG_CONSOLE_LEVEL: debug
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
# 传递给 OTLP 收集器的服务名称
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-client
|
||||
# 你的 OTLP 收集器的地址,不要把 /v1/logs 遗漏了
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
@@ -259,6 +270,17 @@ services:
|
||||
SERVICE_REQUEST_MAX_CONTENT_LENGTH: 10
|
||||
# 最大 API 请求体大小
|
||||
MAX_API_SIZE: 10
|
||||
# Log 配置
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-plugin
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
|
||||
@@ -193,8 +193,19 @@ services:
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 控制台打印最低日志等级
|
||||
LOG_CONSOLE_LEVEL: debug
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
# 传递给 OTLP 收集器的服务名称
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-client
|
||||
# 你的 OTLP 收集器的地址,不要把 /v1/logs 遗漏了
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
@@ -236,6 +247,17 @@ services:
|
||||
SERVICE_REQUEST_MAX_CONTENT_LENGTH: 10
|
||||
# 最大 API 请求体大小
|
||||
MAX_API_SIZE: 10
|
||||
# Log 配置
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-plugin
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
|
||||
@@ -174,8 +174,19 @@ services:
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 控制台打印最低日志等级
|
||||
LOG_CONSOLE_LEVEL: debug
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
# 传递给 OTLP 收集器的服务名称
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-client
|
||||
# 你的 OTLP 收集器的地址,不要把 /v1/logs 遗漏了
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
@@ -217,6 +228,17 @@ services:
|
||||
SERVICE_REQUEST_MAX_CONTENT_LENGTH: 10
|
||||
# 最大 API 请求体大小
|
||||
MAX_API_SIZE: 10
|
||||
# Log 配置
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-plugin
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
|
||||
@@ -180,8 +180,19 @@ services:
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 控制台打印最低日志等级
|
||||
LOG_CONSOLE_LEVEL: debug
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
# 传递给 OTLP 收集器的服务名称
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-client
|
||||
# 你的 OTLP 收集器的地址,不要把 /v1/logs 遗漏了
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
@@ -223,6 +234,17 @@ services:
|
||||
SERVICE_REQUEST_MAX_CONTENT_LENGTH: 10
|
||||
# 最大 API 请求体大小
|
||||
MAX_API_SIZE: 10
|
||||
# Log 配置
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-plugin
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
|
||||
@@ -157,8 +157,19 @@ services:
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 控制台打印最低日志等级
|
||||
LOG_CONSOLE_LEVEL: debug
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
# 传递给 OTLP 收集器的服务名称
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-client
|
||||
# 你的 OTLP 收集器的地址,不要把 /v1/logs 遗漏了
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
@@ -200,6 +211,17 @@ services:
|
||||
SERVICE_REQUEST_MAX_CONTENT_LENGTH: 10
|
||||
# 最大 API 请求体大小
|
||||
MAX_API_SIZE: 10
|
||||
# Log 配置
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-plugin
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
|
||||
@@ -216,8 +216,19 @@ services:
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 控制台打印最低日志等级
|
||||
LOG_CONSOLE_LEVEL: debug
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
# 传递给 OTLP 收集器的服务名称
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-client
|
||||
# 你的 OTLP 收集器的地址,不要把 /v1/logs 遗漏了
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
@@ -259,6 +270,17 @@ services:
|
||||
SERVICE_REQUEST_MAX_CONTENT_LENGTH: 10
|
||||
# 最大 API 请求体大小
|
||||
MAX_API_SIZE: 10
|
||||
# Log 配置
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-plugin
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
|
||||
@@ -193,8 +193,19 @@ services:
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 控制台打印最低日志等级
|
||||
LOG_CONSOLE_LEVEL: debug
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
# 传递给 OTLP 收集器的服务名称
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-client
|
||||
# 你的 OTLP 收集器的地址,不要把 /v1/logs 遗漏了
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
@@ -236,6 +247,17 @@ services:
|
||||
SERVICE_REQUEST_MAX_CONTENT_LENGTH: 10
|
||||
# 最大 API 请求体大小
|
||||
MAX_API_SIZE: 10
|
||||
# Log 配置
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-plugin
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
|
||||
@@ -174,8 +174,19 @@ services:
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 控制台打印最低日志等级
|
||||
LOG_CONSOLE_LEVEL: debug
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
# 传递给 OTLP 收集器的服务名称
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-client
|
||||
# 你的 OTLP 收集器的地址,不要把 /v1/logs 遗漏了
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
@@ -217,6 +228,17 @@ services:
|
||||
SERVICE_REQUEST_MAX_CONTENT_LENGTH: 10
|
||||
# 最大 API 请求体大小
|
||||
MAX_API_SIZE: 10
|
||||
# Log 配置
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-plugin
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
|
||||
@@ -180,8 +180,19 @@ services:
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 控制台打印最低日志等级
|
||||
LOG_CONSOLE_LEVEL: debug
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
# 传递给 OTLP 收集器的服务名称
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-client
|
||||
# 你的 OTLP 收集器的地址,不要把 /v1/logs 遗漏了
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
@@ -223,6 +234,17 @@ services:
|
||||
SERVICE_REQUEST_MAX_CONTENT_LENGTH: 10
|
||||
# 最大 API 请求体大小
|
||||
MAX_API_SIZE: 10
|
||||
# Log 配置
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-plugin
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
|
||||
@@ -157,8 +157,19 @@ services:
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 控制台打印最低日志等级
|
||||
LOG_CONSOLE_LEVEL: debug
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
# 传递给 OTLP 收集器的服务名称
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-client
|
||||
# 你的 OTLP 收集器的地址,不要把 /v1/logs 遗漏了
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
@@ -200,6 +211,17 @@ services:
|
||||
SERVICE_REQUEST_MAX_CONTENT_LENGTH: 10
|
||||
# 最大 API 请求体大小
|
||||
MAX_API_SIZE: 10
|
||||
# Log 配置
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
# 是否开启控制台打印
|
||||
LOG_ENABLE_CONSOLE: true
|
||||
# 是否开启 OTEL 日志收集
|
||||
LOG_ENABLE_OTEL: false
|
||||
# OTEL 日志收集的最低日志等级
|
||||
LOG_OTEL_LEVEL: info
|
||||
LOG_OTEL_SERVICE_NAME: fastgpt-plugin
|
||||
LOG_OTEL_URL: http://localhost:4318/v1/logs
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
|
||||
@@ -1,171 +1,264 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# param:
|
||||
# --region=cn 中国大陆
|
||||
# --region=global 全球(默认)
|
||||
# --vector=pg pg 版本(默认)
|
||||
# --vector=milvus milvus 版本
|
||||
# --vector=zilliz zilliz 版本
|
||||
# --vector=oceanbase oceanbase 版本
|
||||
|
||||
# 默认参数
|
||||
REGION="global"
|
||||
VECTOR="pg"
|
||||
# ========== Radio 选择器 ==========
|
||||
# 使用方向键 ↑↓ 选择,回车确认
|
||||
radio_select() {
|
||||
local title="$1"
|
||||
shift
|
||||
local options=("$@")
|
||||
local selected=0
|
||||
local count=${#options[@]}
|
||||
|
||||
# 解析参数
|
||||
for arg in "$@"; do
|
||||
case $arg in
|
||||
--region=*)
|
||||
REGION="${arg#*=}"
|
||||
shift
|
||||
;;
|
||||
--vector=*)
|
||||
VECTOR="${arg#*=}"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 检查参数合法性
|
||||
VALID_VECTOR=("pg" "milvus" "zilliz" "oceanbase")
|
||||
VECTOR_VALID=false
|
||||
for v in "${VALID_VECTOR[@]}"; do
|
||||
if [[ "$VECTOR" == "$v" ]]; then
|
||||
VECTOR_VALID=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if ! $VECTOR_VALID; then
|
||||
echo "Error: Invalid --vector parameter: $VECTOR"
|
||||
echo "Available options: pg, milvus, zilliz, oceanbase"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$REGION" != "global" && "$REGION" != "cn" ]]; then
|
||||
echo "Error: Invalid --region parameter: $REGION"
|
||||
echo "Available options: global, cn"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
echo 'Vector Database:' $VECTOR
|
||||
echo 'Docker Image Registry: ' $REGION
|
||||
read -p "Confirm? (y/n)" confirm
|
||||
if [ "$confirm" != "y" ]; then
|
||||
echo "Canceled"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 'Downloading Docker Compose YAML file'
|
||||
# get the yml file, url:
|
||||
# region=cn https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.[vector].yml
|
||||
# region=global https://doc.fastgpt.io/deploy/docker/global/docker-compose.[vector].yml
|
||||
|
||||
# 构建下载链接
|
||||
if [ "$REGION" == "cn" ]; then
|
||||
YML_URL="https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.${VECTOR}.yml"
|
||||
else
|
||||
YML_URL="https://doc.fastgpt.io/deploy/docker/global/docker-compose.${VECTOR}.yml"
|
||||
fi
|
||||
|
||||
# 下载 YAML 文件
|
||||
curl -O "$YML_URL"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: Failed to download YAML file from $YML_URL"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Downloaded docker-compose.${VECTOR}.yml from $YML_URL"
|
||||
|
||||
# download config.json file
|
||||
|
||||
if [ "$REGION" == "cn" ]; then
|
||||
CONFIG="https://doc.fastgpt.cn/deploy/config/config.json"
|
||||
else
|
||||
CONFIG="https://doc.fastgpt.io/deploy/config/config.json"
|
||||
fi
|
||||
|
||||
# 下载 config.json 文件
|
||||
curl -O "$CONFIG"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: Failed to download config.json file from $CONFIG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Downloaded config.json from $CONFIG"
|
||||
|
||||
mv docker-compose.${VECTOR}.yml docker-compose.yml
|
||||
|
||||
# 自动处理 S3 外部地址
|
||||
echo ""
|
||||
echo "Detecting available IP addresses for S3 external endpoint..."
|
||||
|
||||
# 使用 ifconfig 获取所有 IPv4 地址(排除 127.0.0.1)
|
||||
IP_LIST=()
|
||||
while IFS= read -r line; do
|
||||
IP_LIST+=("$line")
|
||||
done < <(ifconfig 2>/dev/null | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1')
|
||||
|
||||
# 显示所有检测到的 IP 地址供用户选择
|
||||
if [ ${#IP_LIST[@]} -gt 0 ]; then
|
||||
echo "Available IP addresses:"
|
||||
for i in "${!IP_LIST[@]}"; do
|
||||
echo " [$((i+1))] ${IP_LIST[$i]}"
|
||||
done
|
||||
echo " [0] Enter custom IP or domain"
|
||||
echo ""
|
||||
echo "$title"
|
||||
|
||||
read -p "Select IP address (1-${#IP_LIST[@]}, 0 for custom, Enter for #1): " ip_choice
|
||||
# 绘制选项
|
||||
for i in "${!options[@]}"; do
|
||||
if [ $i -eq $selected ]; then
|
||||
printf " \033[36m●\033[0m %s\n" "${options[$i]}"
|
||||
else
|
||||
printf " ○ %s\n" "${options[$i]}"
|
||||
fi
|
||||
done
|
||||
|
||||
# 默认选择第一个
|
||||
if [ -z "$ip_choice" ]; then
|
||||
ip_choice=1
|
||||
fi
|
||||
# 隐藏光标
|
||||
tput civis 2>/dev/null
|
||||
|
||||
if [ "$ip_choice" == "0" ]; then
|
||||
read -p "Enter your custom IP address or domain: " LOCAL_IP
|
||||
elif [ "$ip_choice" -ge 1 ] 2>/dev/null && [ "$ip_choice" -le ${#IP_LIST[@]} ] 2>/dev/null; then
|
||||
LOCAL_IP="${IP_LIST[$((ip_choice-1))]}"
|
||||
else
|
||||
echo "Invalid selection, using first IP: ${IP_LIST[0]}"
|
||||
LOCAL_IP="${IP_LIST[0]}"
|
||||
fi
|
||||
else
|
||||
echo "Could not detect any IP address"
|
||||
read -p "Enter your IP address or domain for S3 external endpoint: " LOCAL_IP
|
||||
while true; do
|
||||
read -rsn1 key
|
||||
case "$key" in
|
||||
$'\x1b')
|
||||
read -rsn2 arrow
|
||||
case "$arrow" in
|
||||
'[A') ((selected > 0)) && ((selected--)) ;;
|
||||
'[B') ((selected < count - 1)) && ((selected++)) ;;
|
||||
esac
|
||||
;;
|
||||
'') break ;;
|
||||
esac
|
||||
|
||||
# 光标上移并重绘
|
||||
printf "\033[%dA" "$count"
|
||||
for i in "${!options[@]}"; do
|
||||
printf "\033[K"
|
||||
if [ $i -eq $selected ]; then
|
||||
printf " \033[36m●\033[0m %s\n" "${options[$i]}"
|
||||
else
|
||||
printf " ○ %s\n" "${options[$i]}"
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
# 恢复光标
|
||||
tput cnorm 2>/dev/null
|
||||
RADIO_RESULT=$selected
|
||||
}
|
||||
|
||||
# 确保退出时恢复光标
|
||||
trap 'tput cnorm 2>/dev/null; exit' INT TERM
|
||||
|
||||
# ========== 1. 选择镜像源 ==========
|
||||
radio_select "请选择镜像源 (↑↓ 选择, 回车确认):" "阿里云 (中国大陆)" "GitHub (全球)"
|
||||
case $RADIO_RESULT in
|
||||
1) REGION="global" ;;
|
||||
*) REGION="cn" ;;
|
||||
esac
|
||||
|
||||
# ========== 2. 选择向量数据库 ==========
|
||||
radio_select "请选择向量数据库 (↑↓ 选择, 回车确认):" "PostgreSQL + pgvector" "Milvus" "Zilliz" "OceanBase" "SeekDB"
|
||||
case $RADIO_RESULT in
|
||||
1) VECTOR="milvus" ;;
|
||||
2) VECTOR="zilliz" ;;
|
||||
3) VECTOR="oceanbase" ;;
|
||||
4) VECTOR="seekdb" ;;
|
||||
*) VECTOR="pg" ;;
|
||||
esac
|
||||
|
||||
# ========== 3. 检测可用 IP ==========
|
||||
IP_LIST=()
|
||||
if command -v ip &>/dev/null; then
|
||||
for ip in $(ip -4 addr show 2>/dev/null | awk '/inet / {split($2,a,"/"); print a[1]}' | grep -v '127.0.0.1'); do
|
||||
IP_LIST+=("$ip")
|
||||
done
|
||||
elif command -v ifconfig &>/dev/null; then
|
||||
for ip in $(ifconfig 2>/dev/null | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'); do
|
||||
IP_LIST+=("$ip")
|
||||
done
|
||||
fi
|
||||
|
||||
# 替换 docker-compose.yml 中 192.168.0.2 为选定的地址
|
||||
if [ -n "$LOCAL_IP" ]; then
|
||||
echo "Replacing 192.168.0.2 with $LOCAL_IP in docker-compose.yml..."
|
||||
# 地址选择函数
|
||||
# 参数: $1=标题, $2=端口
|
||||
# 设置 SELECTED_ADDR 和 SELECTED_CUSTOM (true=手动输入, false=列表选择)
|
||||
select_address() {
|
||||
local title="$1"
|
||||
local port="$2"
|
||||
SELECTED_CUSTOM=false
|
||||
if [ ${#IP_LIST[@]} -gt 0 ]; then
|
||||
# 构建带完整地址的选项列表
|
||||
local opts=()
|
||||
for ip in "${IP_LIST[@]}"; do
|
||||
opts+=("http://$ip:$port")
|
||||
done
|
||||
opts+=("其他 (手动输入)")
|
||||
|
||||
# 根据操作系统选择 sed 命令
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
# macOS
|
||||
sed -i '' "s/192\.168\.0\.2/$LOCAL_IP/g" docker-compose.yml
|
||||
radio_select "$title" "${opts[@]}"
|
||||
if [ $RADIO_RESULT -eq ${#IP_LIST[@]} ]; then
|
||||
echo ""
|
||||
read -p "请输入完整地址 (如 http://domain:port): " SELECTED_ADDR
|
||||
SELECTED_CUSTOM=true
|
||||
else
|
||||
SELECTED_ADDR="${IP_LIST[$RADIO_RESULT]}"
|
||||
fi
|
||||
else
|
||||
# Linux
|
||||
sed -i "s/192\.168\.0\.2/$LOCAL_IP/g" docker-compose.yml
|
||||
echo ""
|
||||
echo "未检测到可用 IP 地址"
|
||||
read -p "请输入完整地址 (如 http://domain:port): " SELECTED_ADDR
|
||||
SELECTED_CUSTOM=true
|
||||
fi
|
||||
}
|
||||
|
||||
# ========== 4. 选择 S3 访问地址 (端口 9000) ==========
|
||||
select_address "请选择 S3 访问地址 - 客户端和容器均需可访问 (↑↓ 选择, 回车确认):" 9000
|
||||
S3_ADDR="$SELECTED_ADDR"
|
||||
S3_CUSTOM=$SELECTED_CUSTOM
|
||||
|
||||
# ========== 5. 选择 SSE MCP 访问地址 (端口 3005) ==========
|
||||
select_address "请选择 SSE MCP 访问地址 - 客户端和容器均需可访问 (↑↓ 选择, 回车确认):" 3005
|
||||
MCP_ADDR="$SELECTED_ADDR"
|
||||
MCP_CUSTOM=$SELECTED_CUSTOM
|
||||
|
||||
# ========== 确认配置 ==========
|
||||
REGION_LABEL="阿里云 (中国大陆)"
|
||||
if [ "$REGION" == "global" ]; then
|
||||
REGION_LABEL="GitHub (全球)"
|
||||
fi
|
||||
|
||||
# 构建显示地址
|
||||
if [ -n "$S3_ADDR" ]; then
|
||||
if $S3_CUSTOM; then
|
||||
S3_DISPLAY="$S3_ADDR"
|
||||
else
|
||||
S3_DISPLAY="http://$S3_ADDR:9000"
|
||||
fi
|
||||
else
|
||||
S3_DISPLAY="未设置"
|
||||
fi
|
||||
|
||||
if [ -n "$MCP_ADDR" ]; then
|
||||
if $MCP_CUSTOM; then
|
||||
MCP_DISPLAY="$MCP_ADDR"
|
||||
else
|
||||
MCP_DISPLAY="http://$MCP_ADDR:3005"
|
||||
fi
|
||||
else
|
||||
MCP_DISPLAY="未设置"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=============================="
|
||||
echo " 镜像源: $REGION_LABEL"
|
||||
echo " 向量数据库: $VECTOR"
|
||||
echo " S3 地址: $S3_DISPLAY"
|
||||
echo " MCP 地址: $MCP_DISPLAY"
|
||||
echo "=============================="
|
||||
echo ""
|
||||
read -p "确认以上配置? (y/n) [y]: " confirm
|
||||
if [ "$confirm" == "n" ]; then
|
||||
echo "已取消"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# ========== 下载文件 ==========
|
||||
echo ""
|
||||
echo "正在下载配置文件..."
|
||||
|
||||
# 构建下载链接(处理 global 下 zilliz 文件名差异)
|
||||
VECTOR_FILE="$VECTOR"
|
||||
if [ "$REGION" == "global" ] && [ "$VECTOR" == "zilliz" ]; then
|
||||
VECTOR_FILE="ziliiz"
|
||||
fi
|
||||
|
||||
if [ "$REGION" == "cn" ]; then
|
||||
BASE_URL="https://doc.fastgpt.cn/deploy"
|
||||
YML_URL="${BASE_URL}/docker/cn/docker-compose.${VECTOR_FILE}.yml"
|
||||
else
|
||||
BASE_URL="https://doc.fastgpt.io/deploy"
|
||||
YML_URL="${BASE_URL}/docker/global/docker-compose.${VECTOR_FILE}.yml"
|
||||
fi
|
||||
|
||||
CONFIG_URL="${BASE_URL}/config/config.json"
|
||||
|
||||
# 下载 docker-compose YAML
|
||||
curl -fsSL -O "$YML_URL"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "错误: 下载 YAML 文件失败: $YML_URL"
|
||||
exit 1
|
||||
fi
|
||||
mv "docker-compose.${VECTOR_FILE}.yml" docker-compose.yml
|
||||
echo "已下载 docker-compose.yml"
|
||||
|
||||
# 下载 config.json
|
||||
curl -fsSL -O "$CONFIG_URL"
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "错误: 下载 config.json 失败: $CONFIG_URL"
|
||||
exit 1
|
||||
fi
|
||||
echo "已下载 config.json"
|
||||
|
||||
# ========== 替换 S3 访问地址 ==========
|
||||
if [ -n "$S3_ADDR" ]; then
|
||||
if $S3_CUSTOM; then
|
||||
# 自定义输入:提取主机部分替换 docker-compose 中的 IP
|
||||
S3_HOST="${S3_ADDR#http://}"
|
||||
S3_HOST="${S3_HOST#https://}"
|
||||
S3_HOST="${S3_HOST%%:*}"
|
||||
S3_HOST="${S3_HOST%%/*}"
|
||||
else
|
||||
S3_HOST="$S3_ADDR"
|
||||
fi
|
||||
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
sed -i '' "s/192\.168\.0\.2/$S3_HOST/g" docker-compose.yml
|
||||
else
|
||||
sed -i "s/192\.168\.0\.2/$S3_HOST/g" docker-compose.yml
|
||||
fi
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "Successfully updated S3 external endpoint to: http://$LOCAL_IP:9000"
|
||||
echo "已更新 S3 访问地址为: $S3_DISPLAY"
|
||||
else
|
||||
echo "Warning: Failed to replace IP address. Please manually edit docker-compose.yml"
|
||||
echo "警告: 替换 S3 地址失败,请手动编辑 docker-compose.yml 中的 192.168.0.2"
|
||||
fi
|
||||
else
|
||||
echo "Warning: No IP address provided. Please manually edit docker-compose.yml to replace 192.168.0.2"
|
||||
echo "警告: 未设置 S3 地址,请手动编辑 docker-compose.yml 中的 192.168.0.2"
|
||||
fi
|
||||
|
||||
# ========== 替换 MCP 访问地址 ==========
|
||||
if [ -n "$MCP_ADDR" ]; then
|
||||
if $MCP_CUSTOM; then
|
||||
MCP_ENDPOINT="$MCP_ADDR"
|
||||
else
|
||||
MCP_ENDPOINT="http://$MCP_ADDR:3005"
|
||||
fi
|
||||
|
||||
if [[ "$OSTYPE" == "darwin"* ]]; then
|
||||
sed -i '' "s|\"mcpServerProxyEndpoint\": \"\"|\"mcpServerProxyEndpoint\": \"$MCP_ENDPOINT\"|g" config.json
|
||||
else
|
||||
sed -i "s|\"mcpServerProxyEndpoint\": \"\"|\"mcpServerProxyEndpoint\": \"$MCP_ENDPOINT\"|g" config.json
|
||||
fi
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "已更新 MCP 访问地址为: $MCP_ENDPOINT"
|
||||
else
|
||||
echo "警告: 替换 MCP 地址失败,请手动编辑 config.json 中的 mcpServerProxyEndpoint"
|
||||
fi
|
||||
else
|
||||
echo "警告: 未设置 MCP 地址,请手动编辑 config.json 中的 mcpServerProxyEndpoint"
|
||||
fi
|
||||
|
||||
# ========== 完成 ==========
|
||||
echo ""
|
||||
echo "Installation success! What's next:"
|
||||
echo "1. Edit the yml file: vim docker-compose.yml"
|
||||
echo "2. start the service: docker compose up -d"
|
||||
echo "3. stop the service: docker compose down"
|
||||
echo "4. restart the service: docker compose restart"
|
||||
echo "For more information, please visit https://doc.fastgpt.cn/docs/introduction/development/docker"
|
||||
echo "安装完成! 后续操作:"
|
||||
echo " 1. 编辑配置: vim docker-compose.yml"
|
||||
echo " 2. 启动服务: docker compose up -d"
|
||||
echo ""
|
||||
echo "详细文档: https://doc.fastgpt.cn/docs/introduction/development/docker"
|
||||
|
||||
Reference in New Issue
Block a user