Skip to content

Commit

Permalink
V4.6.6-2 (#673)
Browse files Browse the repository at this point in the history
  • Loading branch information
c121914yu authored Dec 31, 2023
1 parent ccca046 commit 9ccfda4
Show file tree
Hide file tree
Showing 270 changed files with 8,175 additions and 1,288 deletions.
50 changes: 50 additions & 0 deletions .github/workflows/fastgpt-home-image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Build Home page images in Personal warehouse
on:
workflow_dispatch:
push:
paths:
- 'projects/home/**'
branches:
- 'main'
jobs:
build-fastgpt-images:
runs-on: ubuntu-20.04
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
with:
driver-opts: network=host
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Login to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GH_PAT }}
- name: Set DOCKER_REPO_TAGGED based on branch or tag
run: |
echo "DOCKER_REPO_TAGGED=ghcr.io/${{ github.repository_owner }}/fastgpt-home:latest" >> $GITHUB_ENV
- name: Build and publish image for main branch or tag push event
env:
DOCKER_REPO_TAGGED: ${{ env.DOCKER_REPO_TAGGED }}
run: |
docker buildx build \
--build-arg name=home \
--label "org.opencontainers.image.source=https://github.com/${{ github.repository_owner }}/FastGPT" \
--label "org.opencontainers.image.description=fastgpt-home image" \
--push \
--cache-from=type=local,src=/tmp/.buildx-cache \
--cache-to=type=local,dest=/tmp/.buildx-cache \
-t ${DOCKER_REPO_TAGGED} \
-f Dockerfile \
.
3 changes: 2 additions & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ dist
.vscode
**/.DS_Store
node_modules
docSite/
docSite/
*.md
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"typescript.tsdk": "node_modules/typescript/lib",
"prettier.prettierPath": "./node_modules/prettier",
"i18n-ally.localesPaths": [
"projects/app/public/locales"
"projects/app/public/locales",
"projects/home/public/locales"
],
"i18n-ally.enabledParsers": ["json"],
"i18n-ally.keystyle": "nested",
Expand Down
4 changes: 1 addition & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,7 @@ COPY --from=builder /app/projects/$name/package.json ./package.json
# copy woker
COPY --from=workerDeps /app/worker /app/worker
# copy config
COPY ./projects/$name/data/config.json /app/data/config.json
COPY ./projects/$name/data/pluginTemplates /app/data/pluginTemplates
COPY ./projects/$name/data/simpleTemplates /app/data/simpleTemplates
COPY ./projects/$name/data /app/data


ENV NODE_ENV production
Expand Down
Binary file added docSite/assets/imgs/dataset_search_params1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
44 changes: 31 additions & 13 deletions docSite/content/docs/course/data_search.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,32 +9,50 @@ weight: 106

在知识库搜索的方式上,FastGPT提供了三种方式,分别为“语义检索”“增强语义检索”“混合检索”。

![](/imgs/data_search1.png)
![](/imgs/dataset_search_params1.png)

## 语义检索
## 搜索模式

语义检索就是向量检索,同时把用户的问题和知识库内容向量化,然后通过“语义相关度匹配”的方式从知识库中查找到匹配的知识点。
### 语义检索

语义检索是通过向量距离,计算用户问题与知识库内容的距离,从而得出“相似度”,当然这并不是语文上的相似度,而是数学上的。

优点:
- 相近语义理解
- 跨多语言理解(例如输入中文问题匹配英文知识点)
- 多模态理解(文本,图片,音视频等)

## 增强语义检索
缺点:
- 依赖模型训练效果
- 精度不稳定
- 受关键词和句子完整度影响

在语义检索的基础上,增强“语义相关度匹配”并在搜索结束后进行 Rerank(重排)。
### 全文检索

Rerank(重排):把检索结果按“与用户问题语义”相关性,从高到低排序,简单的说就是把最匹配用户问题的检索结果排在前面
才用传统的全文检索方式。适合查找关键的主谓语等

## 混合检索(推荐)
### 混合检索

同时使用向量检索和全文检索,并通过 RRF 公式进行两个搜索结果合并,一般情况下搜索结果会更加丰富准确。

在向量检索的同时进行全文检索,并把两项检索的结果混合一起重排,以便选中匹配用户问题的最佳结果
由于混合检索后的查找范围很大,并且无法直接进行相似度过滤,通常需要进行利用重排模型进行一次结果重新排序,并利用重排的得分进行过滤

全文检索:理解为全文关键词检索,通过关键词查询知识库,并返回包含关键词的文本片段。

优点:
- 精确匹配(姓名,编号,ID等)
- 少量关键词匹配(当用户问题字数过少时向量检索效果非常不好)

混合检索结合了向量检索和全文检索的优点,并且对查询结果进行了重排,大大提高了命中率,推荐使用。
## 结果重排

利用`ReRank`模型对搜索结果进行重排,绝大多数情况下,可以有效提高搜索结果的准确率。不过,重排模型与问题的完整度(主谓语齐全)有一些关系,通常会先走问题补全后再进行搜索-重排。重排后可以得到一个`0-1`的得分,代表着搜索内容与问题的相关度,该分数通常比向量的得分更加精确,可以根据得分进行过滤。

FastGPT 会使用 `RRF` 对重排结果、向量搜索结果、全文检索结果进行合并,得到最终的搜索结果。

## 引用上限

每次搜索最多引用`n``tokens`的内容。

之所以不采用`top k`,是发现在混合知识库(问答库、文档库)时,不同`chunk`的长度差距很大,会导致`top k`的结果不稳定,因此采用了`tokens`的方式进行引用上限的控制。

## 最低相关度

一个`0-1`的数值,会过滤掉一些低相关度的搜索结果。

该值仅在`语义检索`或使用`结果重排`时生效。
4 changes: 3 additions & 1 deletion docSite/content/docs/course/websync.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,16 @@ weight: 105

![](/imgs/webSync1.jpg)

该功能目前仅向商业版用户开放。

## 什么是 Web 站点同步

Web 站点同步利用爬虫的技术,可以通过一个入口网站,自动捕获`同域名`下的所有网站,目前最多支持`200`个子页面。出于合规与安全角度,FastGPT 仅支持`静态站点`的爬取,主要用于各个文档站点快速构建知识库。

Tips: 国内的媒体站点基本不可用,公众号、csdn、知乎等。可以通过终端发送`curl`请求检测是否为静态站点,例如:

```bash
curl ai.fastgpt.in
curl https://doc.fastgpt.in/docs/intro/
```

## 如何使用
Expand Down
61 changes: 0 additions & 61 deletions docSite/content/docs/development/docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,64 +99,3 @@ docker-compose up -d
目前可以通过 `ip:3000` 直接访问(注意防火墙)。登录用户名为 `root`,密码为`docker-compose.yml`环境变量里设置的 `DEFAULT_ROOT_PSW`

如果需要域名访问,请自行安装并配置 Nginx。

## QA

### 如何更新?

执行下面命令会自动拉取最新镜像,一般情况下不需要执行额外操作。

```bash
docker-compose pull
docker-compose up -d
```

### 如何自定义配置文件?

修改`config.json`文件,并执行`docker-compose up -d`重起容器。具体配置,参考[配置详解](/docs/development/configuration)

### 如何检查自定义配置文件是否挂载

1. `docker logs fastgpt` 可以查看日志,在启动容器后,第一次请求网页,会进行配置文件读取,可以看看有没有读取成功以及有无错误日志。
2. `docker exec -it fastgpt sh` 进入 FastGPT 容器,可以通过`ls data`查看目录下是否成功挂载`config.json`文件。可通过`cat data/config.json`查看配置文件。

**可能不生效的原因**

1. 挂载目录不正确
2. 配置文件不正确,日志中会提示`invalid json`,配置文件需要是标准的 JSON 文件。

### 为什么无法连接`本地模型`镜像。

`docker-compose.yml`中使用了桥接的模式建立了`fastgpt`网络,如想通过0.0.0.0或镜像名访问其它镜像,需将其它镜像也加入到网络中。

### 端口冲突怎么解决?

docker-compose 端口定义为:`映射端口:运行端口`

桥接模式下,容器运行端口不会有冲突,但是会有映射端口冲突,只需将映射端口修改成不同端口即可。

如果`容器1`需要连接`容器2`,使用`容器2:运行端口`来进行连接即可。

(自行补习 docker 基本知识)

### relation "modeldata" does not exist

PG 数据库没有连接上/初始化失败,可以查看日志。FastGPT 会在每次连接上 PG 时进行表初始化,如果报错会有对应日志。

1. 检查数据库容器是否正常启动
2. 非 docker 部署的,需要手动安装 pg vector 插件
3. 查看 fastgpt 日志,有没有相关报错

### Operation `auth_codes.findOne()` buffering timed out after 10000ms

mongo连接失败,检查
1. mongo 服务有没有起来(有些 cpu 不支持 AVX,无法用 mongo5,需要换成 mongo4.x,可以dockerhub找个最新的4.x,修改镜像版本,重新运行)
2. 环境变量(账号密码,注意host和port)


### 错误排查方式

遇到问题先按下面方式排查。

1. `docker ps -a` 查看所有容器运行状态,检查是否全部 running,如有异常,尝试`docker logs 容器名`查看对应日志。
2. 不懂 docker 不要瞎改端口,只需要改`OPENAI_BASE_URL``CHAT_API_KEY`即可。
76 changes: 76 additions & 0 deletions docSite/content/docs/development/qa.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
---
weight: 749
title: "常见开发 & 部署问题"
description: "FastGPT 常见开发 & 部署问题"
icon: upgrade
draft: false
images: []
---

## 通用问题

### insufficient_user_quota user quota is not enough

OneAPI 账号的余额不足,默认 root 用户只有 200 刀,可以手动修改。


## Docker 部署常见问题

### 如何更新?

执行下面命令会自动拉取最新镜像,一般情况下不需要执行额外操作。

```bash
docker-compose pull
docker-compose up -d
```

### 如何自定义配置文件?

修改`config.json`文件,并执行`docker-compose up -d`重起容器。具体配置,参考[配置详解](/docs/development/configuration)

### 如何检查自定义配置文件是否挂载

1. `docker logs fastgpt` 可以查看日志,在启动容器后,第一次请求网页,会进行配置文件读取,可以看看有没有读取成功以及有无错误日志。
2. `docker exec -it fastgpt sh` 进入 FastGPT 容器,可以通过`ls data`查看目录下是否成功挂载`config.json`文件。可通过`cat data/config.json`查看配置文件。

**可能不生效的原因**

1. 挂载目录不正确
2. 配置文件不正确,日志中会提示`invalid json`,配置文件需要是标准的 JSON 文件。

### 为什么无法连接`本地模型`镜像。

`docker-compose.yml`中使用了桥接的模式建立了`fastgpt`网络,如想通过0.0.0.0或镜像名访问其它镜像,需将其它镜像也加入到网络中。

### 端口冲突怎么解决?

docker-compose 端口定义为:`映射端口:运行端口`

桥接模式下,容器运行端口不会有冲突,但是会有映射端口冲突,只需将映射端口修改成不同端口即可。

如果`容器1`需要连接`容器2`,使用`容器2:运行端口`来进行连接即可。

(自行补习 docker 基本知识)

### relation "modeldata" does not exist

PG 数据库没有连接上/初始化失败,可以查看日志。FastGPT 会在每次连接上 PG 时进行表初始化,如果报错会有对应日志。

1. 检查数据库容器是否正常启动
2. 非 docker 部署的,需要手动安装 pg vector 插件
3. 查看 fastgpt 日志,有没有相关报错

### Operation `auth_codes.findOne()` buffering timed out after 10000ms

mongo连接失败,检查
1. mongo 服务有没有起来(有些 cpu 不支持 AVX,无法用 mongo5,需要换成 mongo4.x,可以dockerhub找个最新的4.x,修改镜像版本,重新运行)
2. 环境变量(账号密码,注意host和port)


### 错误排查方式

遇到问题先按下面方式排查。

1. `docker ps -a` 查看所有容器运行状态,检查是否全部 running,如有异常,尝试`docker logs 容器名`查看对应日志。
2. 不懂 docker 不要瞎改端口,只需要改`OPENAI_BASE_URL``CHAT_API_KEY`即可。
4 changes: 2 additions & 2 deletions docSite/content/docs/development/upgrading/466.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
title: 'V4.6.6(需要改配置文件)'
title: 'V4.6.6-alpha(需要改配置文件)'
description: 'FastGPT V4.6.6'
icon: 'upgrade'
draft: false
toc: true
weight: 831
weight: 830
---

**版本仍在开发中……**
Expand Down
2 changes: 2 additions & 0 deletions packages/global/common/system/types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ export type FastGPTFeConfigsType = {
};
scripts?: { [key: string]: string }[];
favicon?: string;
customApiDomain?: string;
customSharePageDomain?: string;
};

export type SystemEnvType = {
Expand Down
1 change: 1 addition & 0 deletions packages/global/common/vectorStore/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const PgDatasetTableName = 'modeldata';
15 changes: 10 additions & 5 deletions packages/global/core/ai/model.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ export type LLMModelItemType = {
name: string;
maxContext: number;
maxResponse: number;
price: number;
inputPrice: number;
outputPrice: number;
};
export type ChatModelItemType = LLMModelItemType & {
quoteMaxToken: number;
Expand All @@ -22,28 +23,32 @@ export type VectorModelItemType = {
model: string;
name: string;
defaultToken: number;
price: number;
inputPrice: number;
outputPrice: number;
maxToken: number;
weight: number;
};

export type ReRankModelItemType = {
model: string;
name: string;
price: number;
inputPrice: number;
outputPrice?: number;
requestUrl?: string;
requestAuth?: string;
};

export type AudioSpeechModelType = {
model: string;
name: string;
price: number;
inputPrice: number;
outputPrice?: number;
voices: { label: string; value: string; bufferId: string }[];
};

export type WhisperModelType = {
model: string;
name: string;
price: number;
inputPrice: number;
outputPrice?: number;
};
6 changes: 4 additions & 2 deletions packages/global/core/ai/model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,17 @@ export const defaultQAModels: LLMModelItemType[] = [
name: 'GPT35-16k',
maxContext: 16000,
maxResponse: 16000,
price: 0
inputPrice: 0,
outputPrice: 0
}
];

export const defaultVectorModels: VectorModelItemType[] = [
{
model: 'text-embedding-ada-002',
name: 'Embedding-2',
price: 0,
inputPrice: 0,
outputPrice: 0,
defaultToken: 500,
maxToken: 3000,
weight: 100
Expand Down
Loading

0 comments on commit 9ccfda4

Please sign in to comment.