diff --git a/docSite/assets/imgs/webSync1.jpg b/docSite/assets/imgs/webSync1.jpg new file mode 100644 index 000000000..a667710ba Binary files /dev/null and b/docSite/assets/imgs/webSync1.jpg differ diff --git a/docSite/assets/imgs/webSync10.jpg b/docSite/assets/imgs/webSync10.jpg new file mode 100644 index 000000000..c2c8d03d0 Binary files /dev/null and b/docSite/assets/imgs/webSync10.jpg differ diff --git a/docSite/assets/imgs/webSync2.jpg b/docSite/assets/imgs/webSync2.jpg new file mode 100644 index 000000000..b333eea28 Binary files /dev/null and b/docSite/assets/imgs/webSync2.jpg differ diff --git a/docSite/assets/imgs/webSync3.jpg b/docSite/assets/imgs/webSync3.jpg new file mode 100644 index 000000000..956bda830 Binary files /dev/null and b/docSite/assets/imgs/webSync3.jpg differ diff --git a/docSite/assets/imgs/webSync4.jpg b/docSite/assets/imgs/webSync4.jpg new file mode 100644 index 000000000..a3d4f3570 Binary files /dev/null and b/docSite/assets/imgs/webSync4.jpg differ diff --git a/docSite/assets/imgs/webSync5.jpg b/docSite/assets/imgs/webSync5.jpg new file mode 100644 index 000000000..62a93157e Binary files /dev/null and b/docSite/assets/imgs/webSync5.jpg differ diff --git a/docSite/assets/imgs/webSync6.jpg b/docSite/assets/imgs/webSync6.jpg new file mode 100644 index 000000000..7efe38e2d Binary files /dev/null and b/docSite/assets/imgs/webSync6.jpg differ diff --git a/docSite/assets/imgs/webSync7.jpg b/docSite/assets/imgs/webSync7.jpg new file mode 100644 index 000000000..b7987754a Binary files /dev/null and b/docSite/assets/imgs/webSync7.jpg differ diff --git a/docSite/assets/imgs/webSync8.jpg b/docSite/assets/imgs/webSync8.jpg new file mode 100644 index 000000000..c8239590e Binary files /dev/null and b/docSite/assets/imgs/webSync8.jpg differ diff --git a/docSite/assets/imgs/webSync9.jpg b/docSite/assets/imgs/webSync9.jpg new file mode 100644 index 000000000..a4f483770 Binary files /dev/null and b/docSite/assets/imgs/webSync9.jpg differ diff --git a/docSite/content/docs/course/webSync.md b/docSite/content/docs/course/webSync.md new file mode 100644 index 000000000..bedbbf6fe --- /dev/null +++ b/docSite/content/docs/course/webSync.md @@ -0,0 +1,78 @@ +--- +title: 'Web 站点同步' +description: 'FastGPT Web 站点同步功能介绍和使用方式' +icon: 'language' +draft: false +toc: true +weight: 105 +--- + +![](/imgs/webSync1.jpg) + +## 什么是 Web 站点同步 + +Web 站点同步利用爬虫的技术,可以通过一个入口网站,自动捕获`同域名`下的所有网站,目前最多支持`200`个子页面。出于合规与安全角度,FastGPT 仅支持`静态站点`的爬取,主要用于各个文档站点快速构建知识库。 + +Tips: 国内的媒体站点基本不可用,公众号、csdn、知乎等。可以通过终端发送`curl`请求检测是否为静态站点,例如: + +```bash +curl ai.fastgpt.in +``` + +## 如何使用 + +### 1. 新建知识库,选择 Web 站点同步 + +![](/imgs/webSync2.jpg) + +![](/imgs/webSync3.jpg) + +### 2. 点击配置站点信息 + +![](/imgs/webSync4.jpg) + +### 3. 填写网址和选择器 + +![](/imgs/webSync5.jpg) + +好了, 现在点击开始同步,静等系统自动抓取网站信息即可。 + + +## 创建应用,绑定知识库 + +![](/imgs/webSync6.jpg) + +## 选择器如何使用 + +选择器是 HTML CSS JS 的产物,你可以通过选择器来定位到你需要抓取的具体内容,而不是整个站点。使用方式为: + +### 首先打开浏览器调试面板(通常是 F12,或者【右键 - 检查】) + +![](/imgs/webSync7.jpg) + +![](/imgs/webSync8.jpg) + +### 输入对应元素的选择器 + +[菜鸟教程 css 选择器](https://www.runoob.com/cssref/css-selectors.html),具体选择器的使用方式可以参考菜鸟教程。 + +上图中,我们选中了一个区域,对应的是`div`标签,它有 `data-prismjs-copy`, `data-prismjs-copy-success`, `data-prismjs-copy-error` 三个属性,这里我们用到一个就够。所以选择器是: +**`div[data-prismjs-copy]`** + +除了属性选择器,常见的还有类和ID选择器。例如: + +![](/imgs/webSync9.jpg) + +上图 class 里的是类名(可能包含多个类名,都是空格隔开的,选择一个即可),选择器可以为:**`.docs-content`** + +### 多选择器使用 + +在开头的演示中,我们对 FastGPT 文档是使用了多选择器的方式来选择,通过逗号隔开了两个选择器。 + +![](/imgs/webSync10.jpg) + +我们希望选中上图两个标签中的内容,此时就需要两组选择器。一组是:`.docs-content .mb-0.d-flex`,含义是 `docs-content` 类下同时包含 `mb-0`和`d-flex` 两个类的子元素; + +另一组是`.docs-content div[data-prismjs-copy]`,含义是`docs-content` 类下包含`data-prismjs-copy`属性的`div`元素。 + +把两组选择器用逗号隔开即可:`.docs-content .mb-0.d-flex, .docs-content div[data-prismjs-copy]` \ No newline at end of file diff --git a/docSite/content/docs/development/one-api.md b/docSite/content/docs/development/one-api.md index 80963055c..a794544e0 100644 --- a/docSite/content/docs/development/one-api.md +++ b/docSite/content/docs/development/one-api.md @@ -1,16 +1,15 @@ --- title: '接入微软、ChatGLM、本地模型等' -description: '通过接入 One API 来实现对各种大模型的支持' +description: '部署和接入 OneAPI,实现对各种大模型的支持' icon: 'Api' draft: false toc: true weight: 708 --- -* 默认情况下,FastGPT 只配置了 GPT 的 3 个模型,如果你需要接入其他模型,需要进行一些额外配置。 +* 默认情况下,FastGPT 只配置了 GPT 的模型,如果你需要接入其他模型,需要进行一些额外配置。 * [One API](https://github.com/songquanpeng/one-api) 是一个 OpenAI 接口管理 & 分发系统,可以通过标准的 OpenAI API 格式访问所有的大模型,开箱即用。 - -FastGPT 可以通过接入 One API 来实现对各种大模型的支持。部署方法也很简单。 +* FastGPT 可以通过接入 OneAPI 来实现对不同大模型的支持。OneAPI 的部署方法也很简单。 ## MySQL 版本 diff --git a/docSite/content/docs/development/openapi/dataset.md b/docSite/content/docs/development/openapi/dataset.md index 5b73059b3..6788a18a4 100644 --- a/docSite/content/docs/development/openapi/dataset.md +++ b/docSite/content/docs/development/openapi/dataset.md @@ -179,7 +179,7 @@ curl --location --request POST 'https://fastgpt.run/api/core/dataset/searchTest' {{< tab tabName="响应示例" >}} {{< markdownify >}} -返回 top limit 结果 +返回 top k 结果, limit 为预估条数,会按每条数据 800 tokens 的长度进行预估,20条也就是返回 16000 tokens 长度的数据,最多测试 30000 tokens 的数据。 ```bash { diff --git a/docSite/content/docs/development/upgrading/464.md b/docSite/content/docs/development/upgrading/464.md new file mode 100644 index 000000000..e3bd47568 --- /dev/null +++ b/docSite/content/docs/development/upgrading/464.md @@ -0,0 +1,41 @@ +--- +title: 'V4.6.4(需要初始化)' +description: 'FastGPT V4.6.4' +icon: 'upgrade' +draft: false +toc: true +weight: 832 +--- + +## 1。执行初始化 API + +发起 1 个 HTTP 请求 ({{rootkey}} 替换成环境变量里的 `rootkey`,{{host}} 替换成自己域名) + +1. https://xxxxx/api/admin/initv464 + +```bash +curl --location --request POST 'https://{{host}}/api/admin/initv464' \ +--header 'rootkey: {{rootkey}}' \ +--header 'Content-Type: application/json' +``` + +初始化说明: +1. 初始化 PG 的createTime字段 +2. 初始化 Mongo 中 chat 的 feedback 字段 + + +## V4.6.4 功能介绍 + +1. 重写 - 分享链接身份逻辑,采用 localID 记录用户的ID。 +2. 商业版新增 - 分享链接 SSO 方案,通过`身份鉴权`地址,仅需`3个接口`即可完全接入已有用户系统。具体参考[分享链接身份鉴权](/docs/development/openapi/share/) +3. 调整 - 知识库搜索模块 topk 逻辑,采用 MaxToken 计算,兼容不同长度的文本块 +4. 调整鉴权顺序,提高 apikey 的优先级,避免cookie抢占 apikey 的鉴权。 +5. 链接读取支持多选择器。参考[Web 站点同步用法](/docs/course/webSync) +6. 修复 - 分享链接图片上传鉴权问题 +7. 修复 - Mongo 连接池未释放问题。 +8. 修复 - Dataset Intro 无法更新 +9. 修复 - md 代码块问题 +10. 修复 - root 权限问题 +11. 优化 docker file + + diff --git a/packages/global/common/system/constants.ts b/packages/global/common/system/constants.ts new file mode 100644 index 000000000..0e6291ea9 --- /dev/null +++ b/packages/global/common/system/constants.ts @@ -0,0 +1,2 @@ +export const HUMAN_ICON = `/icon/human.svg`; +export const LOGO_ICON = `/icon/logo.svg`; diff --git a/packages/global/common/system/types/index.d.ts b/packages/global/common/system/types/index.d.ts index 00f918276..3ed601dbd 100644 --- a/packages/global/common/system/types/index.d.ts +++ b/packages/global/common/system/types/index.d.ts @@ -9,6 +9,7 @@ export type FeConfigsType = { hide_app_flow?: boolean; concatMd?: string; docUrl?: string; + chatbotUrl?: string; openAPIDocUrl?: string; systemTitle?: string; googleClientVerKey?: string; diff --git a/packages/global/core/chat/api.d.ts b/packages/global/core/chat/api.d.ts new file mode 100644 index 000000000..fcbcd7e4d --- /dev/null +++ b/packages/global/core/chat/api.d.ts @@ -0,0 +1,8 @@ +export type UpdateChatFeedbackProps = { + chatId: string; + chatItemId: string; + shareId?: string; + outLinkUid?: string; + userBadFeedback?: string; + userGoodFeedback?: string; +}; diff --git a/packages/global/core/chat/constants.ts b/packages/global/core/chat/constants.ts index 8b5c322b4..6474e7402 100644 --- a/packages/global/core/chat/constants.ts +++ b/packages/global/core/chat/constants.ts @@ -50,9 +50,6 @@ export enum ChatStatusEnum { finish = 'finish' } -export const HUMAN_ICON = `/icon/human.svg`; -export const LOGO_ICON = `/icon/logo.svg`; - export const IMG_BLOCK_KEY = 'img-block'; export const FILE_BLOCK_KEY = 'file-block'; diff --git a/packages/global/core/chat/type.d.ts b/packages/global/core/chat/type.d.ts index 7df878637..be0777b05 100644 --- a/packages/global/core/chat/type.d.ts +++ b/packages/global/core/chat/type.d.ts @@ -38,7 +38,9 @@ export type ChatItemSchema = { time: Date; obj: `${ChatRoleEnum}`; value: string; - userFeedback?: string; + userGoodFeedback?: string; + userBadFeedback?: string; + robotBadFeedback?: string; adminFeedback?: AdminFbkType; [ModuleOutputKeyEnum.responseData]?: ChatHistoryItemResType[]; }; @@ -56,7 +58,8 @@ export type ChatItemType = { dataId?: string; obj: ChatItemSchema['obj']; value: any; - userFeedback?: string; + userGoodFeedback?: string; + userBadFeedback?: string; adminFeedback?: ChatItemSchema['feedback']; [ModuleOutputKeyEnum.responseData]?: ChatHistoryItemResType[]; }; diff --git a/packages/global/core/dataset/api.d.ts b/packages/global/core/dataset/api.d.ts index 2cf50439f..ca1fb035b 100644 --- a/packages/global/core/dataset/api.d.ts +++ b/packages/global/core/dataset/api.d.ts @@ -25,6 +25,8 @@ export type CreateDatasetCollectionParams = { chunkSize?: number; fileId?: string; rawLink?: string; + qaPrompt?: string; + hashRawText?: string; metadata?: Record; }; @@ -40,6 +42,7 @@ export type PgSearchRawType = { export type PushDatasetDataChunkProps = { q: string; // embedding content a?: string; // bonus content + chunkIndex?: number; indexes?: Omit[]; }; diff --git a/packages/global/core/dataset/type.d.ts b/packages/global/core/dataset/type.d.ts index 2719bc5a9..4fd4f2090 100644 --- a/packages/global/core/dataset/type.d.ts +++ b/packages/global/core/dataset/type.d.ts @@ -45,6 +45,8 @@ export type DatasetCollectionSchemaType = { chunkSize: number; fileId?: string; rawLink?: string; + qaPrompt?: string; + hashRawText?: string; metadata?: Record; }; @@ -134,6 +136,7 @@ export type DatasetDataItemType = { sourceId?: string; q: string; a: string; + chunkIndex: number; indexes: DatasetDataIndexItemType[]; isOwner: boolean; canWrite: boolean; diff --git a/packages/global/support/user/constant.ts b/packages/global/support/user/constant.ts index 159341901..f7f388def 100644 --- a/packages/global/support/user/constant.ts +++ b/packages/global/support/user/constant.ts @@ -1,4 +1,22 @@ +export enum UserStatusEnum { + active = 'active', + forbidden = 'forbidden' +} +export const userStatusMap = { + [UserStatusEnum.active]: { + label: 'support.user.status.active' + }, + [UserStatusEnum.forbidden]: { + label: 'support.user.status.forbidden' + } +}; + export enum OAuthEnum { github = 'github', google = 'google' } + +export enum UserAuthTypeEnum { + register = 'register', + findPassword = 'findPassword' +} diff --git a/packages/global/support/user/type.d.ts b/packages/global/support/user/type.d.ts index 7372652f8..d5aa8a5a8 100644 --- a/packages/global/support/user/type.d.ts +++ b/packages/global/support/user/type.d.ts @@ -1,4 +1,4 @@ -import { InformTypeEnum } from './constant'; +import { InformTypeEnum, UserStatusEnum } from './constant'; import { TeamItemType } from './team/type'; export type UserModelSchema = { @@ -12,6 +12,7 @@ export type UserModelSchema = { openaiKey: string; createTime: number; timezone: string; + status: `${UserStatusEnum}`; openaiAccount?: { key: string; baseUrl: string; diff --git a/packages/service/common/api/plusRequest.ts b/packages/service/common/api/plusRequest.ts index 1f66ee242..6eed83333 100644 --- a/packages/service/common/api/plusRequest.ts +++ b/packages/service/common/api/plusRequest.ts @@ -70,7 +70,7 @@ instance.interceptors.request.use(requestStart, (err) => Promise.reject(err)); instance.interceptors.response.use(responseSuccess, (err) => Promise.reject(err)); export function request(url: string, data: any, config: ConfigType, method: Method): any { - if (!global.systemEnv?.pluginBaseUrl) { + if (global.systemEnv && !global.systemEnv?.pluginBaseUrl) { return Promise.reject('该功能为商业版特有...'); } diff --git a/packages/service/common/file/image/schema.ts b/packages/service/common/file/image/schema.ts index 466518b9e..b401be0e2 100644 --- a/packages/service/common/file/image/schema.ts +++ b/packages/service/common/file/image/schema.ts @@ -8,6 +8,10 @@ const ImageSchema = new Schema({ ref: TeamCollectionName, required: true }, + createTime: { + type: Date, + default: () => new Date() + }, binary: { type: Buffer }, @@ -25,7 +29,10 @@ try { console.log(error); } -export const MongoImage: Model<{ teamId: string; binary: Buffer; metadata?: Record }> = - models['image'] || model('image', ImageSchema); +export const MongoImage: Model<{ + teamId: string; + binary: Buffer; + metadata?: { fileId?: string }; +}> = models['image'] || model('image', ImageSchema); MongoImage.syncIndexes(); diff --git a/packages/service/common/mongo/controller.ts b/packages/service/common/mongo/controller.ts deleted file mode 100644 index b07b81fcf..000000000 --- a/packages/service/common/mongo/controller.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* add logger */ -export const addLog = { - info: (msg: string, obj?: Record) => { - global.logger?.info(msg, { meta: obj }); - }, - error: (msg: string, error?: any) => { - global.logger?.error(msg, { - meta: { - stack: error?.stack, - ...(error?.config && { - config: { - headers: error.config.headers, - url: error.config.url, - data: error.config.data - } - }), - ...(error?.response && { - response: { - status: error.response.status, - statusText: error.response.statusText - } - }) - } - }); - } -}; diff --git a/packages/service/common/mongo/init.ts b/packages/service/common/mongo/init.ts index d62c773f0..ea653397b 100644 --- a/packages/service/common/mongo/init.ts +++ b/packages/service/common/mongo/init.ts @@ -1,6 +1,4 @@ import mongoose from './index'; -import { createLogger, format, transports } from 'winston'; -import 'winston-mongodb'; /** * connect MongoDB and init data @@ -36,7 +34,6 @@ export async function connectMongo({ }); console.log('mongo connected'); - initLogger(); afterHook && (await afterHook()); } catch (error) { @@ -45,35 +42,3 @@ export async function connectMongo({ global.mongodb = undefined; } } - -function initLogger() { - global.logger = createLogger({ - transports: [ - new transports.MongoDB({ - db: process.env.MONGODB_URI as string, - collection: 'server_logs', - options: { - useUnifiedTopology: true - }, - cappedSize: 500000000, - tryReconnect: true, - metaKey: 'meta', - format: format.combine(format.timestamp(), format.json()) - }), - new transports.Console({ - format: format.combine( - format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), - format.printf((info) => { - if (info.level === 'error') { - console.log(info.meta); - return `[${info.level.toLocaleUpperCase()}]: ${[info.timestamp]}: ${info.message}`; - } - return `[${info.level.toLocaleUpperCase()}]: ${[info.timestamp]}: ${info.message}${ - info.meta ? `: ${JSON.stringify(info.meta)}` : '' - }`; - }) - ) - }) - ] - }); -} diff --git a/packages/service/common/mongo/type.d.ts b/packages/service/common/mongo/type.d.ts index 57ba613a7..e75ccfdbf 100644 --- a/packages/service/common/mongo/type.d.ts +++ b/packages/service/common/mongo/type.d.ts @@ -3,5 +3,4 @@ import type { Logger } from 'winston'; declare global { var mongodb: Mongoose | undefined; - var logger: Logger; } diff --git a/packages/service/common/pg/index.ts b/packages/service/common/pg/index.ts index dccf9834e..c9ef8b0c2 100644 --- a/packages/service/common/pg/index.ts +++ b/packages/service/common/pg/index.ts @@ -171,9 +171,10 @@ export async function initPg() { tmb_id VARCHAR(50) NOT NULL, dataset_id VARCHAR(50) NOT NULL, collection_id VARCHAR(50) NOT NULL, - data_id VARCHAR(50) NOT NULL + data_id VARCHAR(50) NOT NULL, + createTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - CREATE INDEX IF NOT EXISTS vector_index ON ${PgDatasetTableName} USING hnsw (vector vector_ip_ops) WITH (m = 24, ef_construction = 64); + CREATE INDEX IF NOT EXISTS vector_index ON ${PgDatasetTableName} USING hnsw (vector vector_ip_ops) WITH (m = 32, ef_construction = 64); `); console.log('init pg successful'); diff --git a/packages/service/common/response/index.ts b/packages/service/common/response/index.ts index a82555abe..293c980fd 100644 --- a/packages/service/common/response/index.ts +++ b/packages/service/common/response/index.ts @@ -1,7 +1,7 @@ import type { NextApiResponse } from 'next'; import { sseResponseEventEnum } from './constant'; import { proxyError, ERROR_RESPONSE, ERROR_ENUM } from '@fastgpt/global/common/error/errorCode'; -import { addLog } from '../mongo/controller'; +import { addLog } from '../system/log'; import { clearCookie } from '../../support/permission/controller'; export interface ResponseType { diff --git a/packages/service/common/system/config/controller.ts b/packages/service/common/system/config/controller.ts new file mode 100644 index 000000000..878ec94e6 --- /dev/null +++ b/packages/service/common/system/config/controller.ts @@ -0,0 +1,15 @@ +import { SystemConfigsTypeEnum } from '@fastgpt/global/common/system/config/constants'; +import { MongoSystemConfigs } from './schema'; +import { FeConfigsType } from '@fastgpt/global/common/system/types'; + +export const getFastGPTFeConfig = async () => { + const res = await MongoSystemConfigs.findOne({ + type: SystemConfigsTypeEnum.fastgpt + }).sort({ + createTime: -1 + }); + + const config: FeConfigsType = res?.value?.FeConfig || {}; + + return config; +}; diff --git a/packages/service/common/system/config/schema.ts b/packages/service/common/system/config/schema.ts index 7dbe2ccac..4b1ea83ce 100644 --- a/packages/service/common/system/config/schema.ts +++ b/packages/service/common/system/config/schema.ts @@ -19,14 +19,15 @@ const systemConfigSchema = new Schema({ type: Date, default: () => new Date() } -}) +}); try { systemConfigSchema.index({ createTime: -1 }, { expireAfterSeconds: 90 * 24 * 60 * 60 }); + systemConfigSchema.index({ type: 1 }); } catch (error) { console.log(error); } -export const MongoSystemConfigs: Model= +export const MongoSystemConfigs: Model = models[collectionName] || model(collectionName, systemConfigSchema); - MongoSystemConfigs.syncIndexes(); +MongoSystemConfigs.syncIndexes(); diff --git a/packages/service/common/system/log.ts b/packages/service/common/system/log.ts new file mode 100644 index 000000000..26b0a4598 --- /dev/null +++ b/packages/service/common/system/log.ts @@ -0,0 +1,66 @@ +import dayjs from 'dayjs'; + +/* add logger */ +export const addLog = { + log(level: 'info' | 'warn' | 'error', msg: string, obj: Record = {}) { + console.log( + `[${level.toLocaleUpperCase()}] ${dayjs().format( + 'YYYY-MM-DD HH:mm:ss' + )} ${msg}: ${JSON.stringify(obj)}` + ); + + const lokiUrl = process.env.LOKI_LOG_URL as string; + if (!lokiUrl) return; + + try { + fetch(lokiUrl, { + method: 'POST', + headers: { + 'Content-type': 'application/json' + }, + body: JSON.stringify({ + streams: [ + { + stream: { + level + }, + values: [ + [ + `${Date.now() * 1000000}`, + JSON.stringify({ + message: msg, + ...obj + }) + ] + ] + } + ] + }) + }); + } catch (error) {} + }, + info(msg: string, obj?: Record) { + this.log('info', msg, obj); + }, + warn(msg: string, obj?: Record) { + this.log('warn', msg, obj); + }, + error(msg: string, error?: any) { + this.log('error', msg, { + stack: error?.stack, + ...(error?.config && { + config: { + headers: error.config.headers, + url: error.config.url, + data: error.config.data + } + }), + ...(error?.response && { + response: { + status: error.response.status, + statusText: error.response.statusText + } + }) + }); + } +}; diff --git a/packages/service/core/chat/chatItemSchema.ts b/packages/service/core/chat/chatItemSchema.ts index 3459f0908..17c069b71 100644 --- a/packages/service/core/chat/chatItemSchema.ts +++ b/packages/service/core/chat/chatItemSchema.ts @@ -54,7 +54,14 @@ const ChatItemSchema = new Schema({ type: String, default: '' }, - userFeedback: { + userGoodFeedback: { + type: String + }, + userFeedback: String, + userBadFeedback: { + type: String + }, + robotBadFeedback: { type: String }, adminFeedback: { @@ -77,7 +84,10 @@ try { ChatItemSchema.index({ userId: 1 }); ChatItemSchema.index({ appId: 1 }); ChatItemSchema.index({ chatId: 1 }); - ChatItemSchema.index({ userFeedback: 1 }); + ChatItemSchema.index({ userGoodFeedback: 1 }); + ChatItemSchema.index({ userBadFeedback: 1 }); + ChatItemSchema.index({ robotBadFeedback: 1 }); + ChatItemSchema.index({ adminFeedback: 1 }); } catch (error) { console.log(error); } diff --git a/packages/service/core/dataset/collection/controller.ts b/packages/service/core/dataset/collection/controller.ts index 3ea431e7d..a7b0bb0f3 100644 --- a/packages/service/core/dataset/collection/controller.ts +++ b/packages/service/core/dataset/collection/controller.ts @@ -6,6 +6,8 @@ import type { CreateDatasetCollectionParams } from '@fastgpt/global/core/dataset import { MongoDatasetCollection } from './schema'; export async function createOneCollection({ + teamId, + tmbId, name, parentId, datasetId, @@ -14,8 +16,8 @@ export async function createOneCollection({ chunkSize = 0, fileId, rawLink, - teamId, - tmbId, + qaPrompt, + hashRawText, metadata = {} }: CreateDatasetCollectionParams & { teamId: string; tmbId: string }) { const { _id } = await MongoDatasetCollection.create({ @@ -29,6 +31,8 @@ export async function createOneCollection({ chunkSize, fileId, rawLink, + qaPrompt, + hashRawText, metadata }); @@ -71,3 +75,19 @@ export function createDefaultCollection({ updateTime: new Date('2099') }); } + +// check same collection +export const getSameRawTextCollection = async ({ + datasetId, + hashRawText +}: { + datasetId: string; + hashRawText?: string; +}) => { + const collection = await MongoDatasetCollection.findOne({ + datasetId, + hashRawText + }); + + return collection; +}; diff --git a/packages/service/core/dataset/collection/schema.ts b/packages/service/core/dataset/collection/schema.ts index 6fdfee669..c6c4fc85b 100644 --- a/packages/service/core/dataset/collection/schema.ts +++ b/packages/service/core/dataset/collection/schema.ts @@ -72,6 +72,12 @@ const DatasetCollectionSchema = new Schema({ rawLink: { type: String }, + qaPrompt: { + type: String + }, + hashRawText: { + type: String + }, metadata: { type: Object, default: {} @@ -82,6 +88,7 @@ try { DatasetCollectionSchema.index({ datasetId: 1 }); DatasetCollectionSchema.index({ datasetId: 1, parentId: 1 }); DatasetCollectionSchema.index({ updateTime: -1 }); + DatasetCollectionSchema.index({ hashRawText: -1 }); } catch (error) { console.log(error); } diff --git a/packages/service/core/dataset/data/controller.ts b/packages/service/core/dataset/data/controller.ts index c7ca8e592..607f30cc2 100644 --- a/packages/service/core/dataset/data/controller.ts +++ b/packages/service/core/dataset/data/controller.ts @@ -16,22 +16,22 @@ export async function delDatasetRelevantData({ datasetIds }: { datasetIds: strin datasetId: { $in: datasetIds } }); - // delete related files - await Promise.all( - datasetIds.map((id) => delFileByMetadata({ bucketName: BucketNameEnum.dataset, datasetId: id })) - ); + await delay(2000); - await delay(500); - - // delete pg data - await deletePgDataById(`dataset_id IN ('${datasetIds.join("','")}')`); // delete dataset.datas await MongoDatasetData.deleteMany({ datasetId: { $in: datasetIds } }); + // delete pg data + await deletePgDataById(`dataset_id IN ('${datasetIds.join("','")}')`); // delete collections await MongoDatasetCollection.deleteMany({ datasetId: { $in: datasetIds } }); + + // delete related files + await Promise.all( + datasetIds.map((id) => delFileByMetadata({ bucketName: BucketNameEnum.dataset, datasetId: id })) + ); } /** * delete all data by collectionIds @@ -51,6 +51,18 @@ export async function delCollectionRelevantData({ collectionId: { $in: collectionIds } }); + await delay(2000); + + // delete dataset.datas + await MongoDatasetData.deleteMany({ collectionId: { $in: collectionIds } }); + // delete pg data + await deletePgDataById(`collection_id IN ('${collectionIds.join("','")}')`); + + // delete collections + await MongoDatasetCollection.deleteMany({ + _id: { $in: collectionIds } + }); + // delete file and imgs await Promise.all([ delImgByFileIdList(filterFileIds), @@ -59,13 +71,6 @@ export async function delCollectionRelevantData({ fileIdList: filterFileIds }) ]); - - await delay(500); - - // delete pg data - await deletePgDataById(`collection_id IN ('${collectionIds.join("','")}')`); - // delete dataset.datas - await MongoDatasetData.deleteMany({ collectionId: { $in: collectionIds } }); } /** * delete one data by mongoDataId diff --git a/packages/service/core/dataset/data/schema.ts b/packages/service/core/dataset/data/schema.ts index d05c0b3d4..b68953f36 100644 --- a/packages/service/core/dataset/data/schema.ts +++ b/packages/service/core/dataset/data/schema.ts @@ -71,7 +71,6 @@ const DatasetDataSchema = new Schema({ ], default: [] }, - // metadata updateTime: { type: Date, default: () => new Date() @@ -89,6 +88,7 @@ try { DatasetDataSchema.index({ teamId: 1 }); DatasetDataSchema.index({ datasetId: 1 }); DatasetDataSchema.index({ collectionId: 1 }); + DatasetDataSchema.index({ updateTime: -1 }); // full text index DatasetDataSchema.index({ datasetId: 1, fullTextToken: 'text' }); DatasetDataSchema.index({ inited: 1 }); diff --git a/packages/service/package.json b/packages/service/package.json index 09d622fa2..0317cd4de 100644 --- a/packages/service/package.json +++ b/packages/service/package.json @@ -13,8 +13,7 @@ "nextjs-cors": "^2.1.2", "pg": "^8.10.0", "tunnel": "^0.0.6", - "winston": "^3.10.0", - "winston-mongodb": "^5.1.1" + "dayjs": "^1.11.7" }, "devDependencies": { "@types/cookie": "^0.5.2", diff --git a/packages/service/support/user/schema.ts b/packages/service/support/user/schema.ts index 6ad84a803..f4259c0d5 100644 --- a/packages/service/support/user/schema.ts +++ b/packages/service/support/user/schema.ts @@ -3,10 +3,16 @@ const { Schema, model, models } = connectionMongo; import { hashStr } from '@fastgpt/global/common/string/tools'; import { PRICE_SCALE } from '@fastgpt/global/support/wallet/bill/constants'; import type { UserModelSchema } from '@fastgpt/global/support/user/type'; +import { UserStatusEnum, userStatusMap } from '@fastgpt/global/support/user/constant'; export const userCollectionName = 'users'; const UserSchema = new Schema({ + status: { + type: String, + enum: Object.keys(userStatusMap), + default: UserStatusEnum.active + }, username: { // 可以是手机/邮箱,新的验证都只用手机 type: String, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fd74d4edd..b1023bc4d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -85,6 +85,9 @@ importers: cookie: specifier: ^0.5.0 version: registry.npmmirror.com/cookie@0.5.0 + dayjs: + specifier: ^1.11.7 + version: registry.npmmirror.com/dayjs@1.11.10 encoding: specifier: ^0.1.13 version: registry.npmmirror.com/encoding@0.1.13 @@ -109,12 +112,6 @@ importers: tunnel: specifier: ^0.0.6 version: registry.npmmirror.com/tunnel@0.0.6 - winston: - specifier: ^3.10.0 - version: registry.npmmirror.com/winston@3.11.0 - winston-mongodb: - specifier: ^5.1.1 - version: registry.npmmirror.com/winston-mongodb@5.1.1(winston@3.11.0) devDependencies: '@types/cookie': specifier: ^0.5.2 @@ -3283,23 +3280,6 @@ packages: react: registry.npmmirror.com/react@18.2.0 dev: false - registry.npmmirror.com/@colors/colors@1.6.0: - resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@colors/colors/-/colors-1.6.0.tgz} - name: '@colors/colors' - version: 1.6.0 - engines: {node: '>=0.1.90'} - dev: false - - registry.npmmirror.com/@dabh/diagnostics@2.0.3: - resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz} - name: '@dabh/diagnostics' - version: 2.0.3 - dependencies: - colorspace: registry.npmmirror.com/colorspace@1.1.4 - enabled: registry.npmmirror.com/enabled@2.0.0 - kuler: registry.npmmirror.com/kuler@2.0.0 - dev: false - registry.npmmirror.com/@emotion/babel-plugin@11.11.0: resolution: {integrity: sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz} name: '@emotion/babel-plugin' @@ -4802,12 +4782,6 @@ packages: '@types/node': registry.npmmirror.com/@types/node@20.8.7 dev: true - registry.npmmirror.com/@types/triple-beam@1.3.4: - resolution: {integrity: sha512-HlJjF3wxV4R2VQkFpKe0YqJLilYNgtRtsqqZtby7RkVsSs+i+vbyzjtUwpFEdUCKcrGzCiEJE7F/0mKjh0sunA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/triple-beam/-/triple-beam-1.3.4.tgz} - name: '@types/triple-beam' - version: 1.3.4 - dev: false - registry.npmmirror.com/@types/tunnel@0.0.4: resolution: {integrity: sha512-bQgDBL5XiqrrPUaZd9bZ2esOXcU4GTmgg0n6LHDqoMJezO3VFRZsW8qN6Gp64/LAmjtzNU3iAHBfV3Z2ht5DSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/tunnel/-/tunnel-0.0.4.tgz} name: '@types/tunnel' @@ -5218,12 +5192,6 @@ packages: version: 0.0.7 dev: true - registry.npmmirror.com/async@3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/async/-/async-3.2.4.tgz} - name: async - version: 3.2.4 - dev: false - registry.npmmirror.com/asynciterator.prototype@1.0.0: resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz} name: asynciterator.prototype @@ -5363,15 +5331,6 @@ packages: version: 2.2.0 engines: {node: '>=8'} - registry.npmmirror.com/bl@2.2.1: - resolution: {integrity: sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bl/-/bl-2.2.1.tgz} - name: bl - version: 2.2.1 - dependencies: - readable-stream: registry.npmmirror.com/readable-stream@2.3.8 - safe-buffer: registry.npmmirror.com/safe-buffer@5.2.1 - dev: false - registry.npmmirror.com/bluebird@3.4.7: resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bluebird/-/bluebird-3.4.7.tgz} name: bluebird @@ -5506,13 +5465,6 @@ packages: node-releases: registry.npmmirror.com/node-releases@2.0.13 update-browserslist-db: registry.npmmirror.com/update-browserslist-db@1.0.13(browserslist@4.22.1) - registry.npmmirror.com/bson@1.1.6: - resolution: {integrity: sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bson/-/bson-1.1.6.tgz} - name: bson - version: 1.1.6 - engines: {node: '>=0.6.19'} - dev: false - registry.npmmirror.com/bson@5.5.1: resolution: {integrity: sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bson/-/bson-5.5.1.tgz} name: bson @@ -5798,15 +5750,7 @@ packages: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz} name: color-name version: 1.1.4 - - registry.npmmirror.com/color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz} - name: color-string - version: 1.9.1 - dependencies: - color-name: registry.npmmirror.com/color-name@1.1.4 - simple-swizzle: registry.npmmirror.com/simple-swizzle@0.2.2 - dev: false + dev: true registry.npmmirror.com/color2k@2.0.2: resolution: {integrity: sha512-kJhwH5nAwb34tmyuqq/lgjEKzlFXn1U99NlnB6Ws4qVaERcRUYeYP1cBw6BJ4vxaWStAUEef4WMr7WjOCnBt8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color2k/-/color2k-2.0.2.tgz} @@ -5814,30 +5758,12 @@ packages: version: 2.0.2 dev: false - registry.npmmirror.com/color@3.2.1: - resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/color/-/color-3.2.1.tgz} - name: color - version: 3.2.1 - dependencies: - color-convert: registry.npmmirror.com/color-convert@1.9.3 - color-string: registry.npmmirror.com/color-string@1.9.1 - dev: false - registry.npmmirror.com/colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz} name: colorette version: 2.0.20 dev: true - registry.npmmirror.com/colorspace@1.1.4: - resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/colorspace/-/colorspace-1.1.4.tgz} - name: colorspace - version: 1.1.4 - dependencies: - color: registry.npmmirror.com/color@3.2.1 - text-hex: registry.npmmirror.com/text-hex@1.0.0 - dev: false - registry.npmmirror.com/combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz} name: combined-stream @@ -6634,13 +6560,6 @@ packages: engines: {node: '>=0.4.0'} dev: false - registry.npmmirror.com/denque@1.5.1: - resolution: {integrity: sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/denque/-/denque-1.5.1.tgz} - name: denque - version: 1.5.1 - engines: {node: '>=0.10'} - dev: false - registry.npmmirror.com/dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dequal/-/dequal-2.0.3.tgz} name: dequal @@ -6887,12 +6806,6 @@ packages: version: 9.2.2 dev: true - registry.npmmirror.com/enabled@2.0.0: - resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/enabled/-/enabled-2.0.0.tgz} - name: enabled - version: 2.0.0 - dev: false - registry.npmmirror.com/encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/encoding/-/encoding-0.1.13.tgz} name: encoding @@ -7737,12 +7650,6 @@ packages: dependencies: format: registry.npmmirror.com/format@0.2.2 - registry.npmmirror.com/fecha@4.2.3: - resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fecha/-/fecha-4.2.3.tgz} - name: fecha - version: 4.2.3 - dev: false - registry.npmmirror.com/file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz} name: file-entry-cache @@ -7793,12 +7700,6 @@ packages: version: 3.2.9 dev: true - registry.npmmirror.com/fn.name@1.1.0: - resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/fn.name/-/fn.name-1.1.0.tgz} - name: fn.name - version: 1.1.0 - dev: false - registry.npmmirror.com/focus-lock@1.0.0: resolution: {integrity: sha512-a8Ge6cdKh9za/GZR/qtigTAk7SrGore56EFcoMshClsh7FLk1zwszc/ltuMfKhx56qeuyL/jWQ4J4axou0iJ9w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/focus-lock/-/focus-lock-1.0.0.tgz} name: focus-lock @@ -8534,12 +8435,6 @@ packages: name: is-arrayish version: 0.2.1 - registry.npmmirror.com/is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz} - name: is-arrayish - version: 0.3.2 - dev: false - registry.npmmirror.com/is-async-function@2.0.0: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-async-function/-/is-async-function-2.0.0.tgz} name: is-async-function @@ -8741,13 +8636,6 @@ packages: call-bind: registry.npmmirror.com/call-bind@1.0.5 dev: true - registry.npmmirror.com/is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz} - name: is-stream - version: 2.0.1 - engines: {node: '>=8'} - dev: false - registry.npmmirror.com/is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-stream/-/is-stream-3.0.0.tgz} name: is-stream @@ -9039,12 +8927,6 @@ packages: engines: {node: '>=6'} dev: false - registry.npmmirror.com/kuler@2.0.0: - resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/kuler/-/kuler-2.0.0.tgz} - name: kuler - version: 2.0.0 - dev: false - registry.npmmirror.com/language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz} name: language-subtag-registry @@ -9243,20 +9125,6 @@ packages: wrap-ansi: registry.npmmirror.com/wrap-ansi@8.1.0 dev: true - registry.npmmirror.com/logform@2.6.0: - resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/logform/-/logform-2.6.0.tgz} - name: logform - version: 2.6.0 - engines: {node: '>= 12.0.0'} - dependencies: - '@colors/colors': registry.npmmirror.com/@colors/colors@1.6.0 - '@types/triple-beam': registry.npmmirror.com/@types/triple-beam@1.3.4 - fecha: registry.npmmirror.com/fecha@4.2.3 - ms: registry.npmmirror.com/ms@2.1.3 - safe-stable-stringify: registry.npmmirror.com/safe-stable-stringify@2.4.3 - triple-beam: registry.npmmirror.com/triple-beam@1.4.1 - dev: false - registry.npmmirror.com/longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/longest-streak/-/longest-streak-3.1.0.tgz} name: longest-streak @@ -10013,41 +9881,6 @@ packages: whatwg-url: registry.npmmirror.com/whatwg-url@11.0.0 dev: false - registry.npmmirror.com/mongodb@3.7.4: - resolution: {integrity: sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mongodb/-/mongodb-3.7.4.tgz} - name: mongodb - version: 3.7.4 - engines: {node: '>=4'} - peerDependencies: - aws4: '*' - bson-ext: '*' - kerberos: '*' - mongodb-client-encryption: '*' - mongodb-extjson: '*' - snappy: '*' - peerDependenciesMeta: - aws4: - optional: true - bson-ext: - optional: true - kerberos: - optional: true - mongodb-client-encryption: - optional: true - mongodb-extjson: - optional: true - snappy: - optional: true - dependencies: - bl: registry.npmmirror.com/bl@2.2.1 - bson: registry.npmmirror.com/bson@1.1.6 - denque: registry.npmmirror.com/denque@1.5.1 - optional-require: registry.npmmirror.com/optional-require@1.1.8 - safe-buffer: registry.npmmirror.com/safe-buffer@5.2.1 - optionalDependencies: - saslprep: registry.npmmirror.com/saslprep@1.0.3 - dev: false - registry.npmmirror.com/mongodb@5.9.0: resolution: {integrity: sha512-g+GCMHN1CoRUA+wb1Agv0TI4YTSiWr42B5ulkiAfLLHitGK1R+PkSAf3Lr5rPZwi/3F04LiaZEW0Kxro9Fi2TA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mongodb/-/mongodb-5.9.0.tgz} name: mongodb @@ -10469,14 +10302,6 @@ packages: dependencies: wrappy: registry.npmmirror.com/wrappy@1.0.2 - registry.npmmirror.com/one-time@1.0.0: - resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/one-time/-/one-time-1.0.0.tgz} - name: one-time - version: 1.0.0 - dependencies: - fn.name: registry.npmmirror.com/fn.name@1.1.0 - dev: false - registry.npmmirror.com/onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz} name: onetime @@ -10521,15 +10346,6 @@ packages: version: 0.2.4 dev: false - registry.npmmirror.com/optional-require@1.1.8: - resolution: {integrity: sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/optional-require/-/optional-require-1.1.8.tgz} - name: optional-require - version: 1.1.8 - engines: {node: '>=4'} - dependencies: - require-at: registry.npmmirror.com/require-at@1.0.6 - dev: false - registry.npmmirror.com/optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/optionator/-/optionator-0.9.3.tgz} name: optionator @@ -11342,6 +11158,7 @@ packages: inherits: registry.npmmirror.com/inherits@2.0.4 string_decoder: registry.npmmirror.com/string_decoder@1.3.0 util-deprecate: registry.npmmirror.com/util-deprecate@1.0.2 + dev: true registry.npmmirror.com/readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz} @@ -11558,13 +11375,6 @@ packages: version: 3.3.0 dev: false - registry.npmmirror.com/require-at@1.0.6: - resolution: {integrity: sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/require-at/-/require-at-1.0.6.tgz} - name: require-at - version: 1.0.6 - engines: {node: '>=4'} - dev: false - registry.npmmirror.com/resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz} name: resolve-from @@ -11711,29 +11521,11 @@ packages: is-regex: registry.npmmirror.com/is-regex@1.1.4 dev: true - registry.npmmirror.com/safe-stable-stringify@2.4.3: - resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz} - name: safe-stable-stringify - version: 2.4.3 - engines: {node: '>=10'} - dev: false - registry.npmmirror.com/safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz} name: safer-buffer version: 2.1.2 - registry.npmmirror.com/saslprep@1.0.3: - resolution: {integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/saslprep/-/saslprep-1.0.3.tgz} - name: saslprep - version: 1.0.3 - engines: {node: '>=6'} - requiresBuild: true - dependencies: - sparse-bitfield: registry.npmmirror.com/sparse-bitfield@3.0.3 - dev: false - optional: true - registry.npmmirror.com/sass@1.69.4: resolution: {integrity: sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sass/-/sass-1.69.4.tgz} name: sass @@ -11841,14 +11633,6 @@ packages: version: 3.0.7 dev: true - registry.npmmirror.com/simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz} - name: simple-swizzle - version: 0.2.2 - dependencies: - is-arrayish: registry.npmmirror.com/is-arrayish@0.3.2 - dev: false - registry.npmmirror.com/slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz} name: slash @@ -11945,12 +11729,6 @@ packages: deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' dev: true - registry.npmmirror.com/stack-trace@0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/stack-trace/-/stack-trace-0.0.10.tgz} - name: stack-trace - version: 0.0.10 - dev: false - registry.npmmirror.com/state-toggle@1.0.3: resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/state-toggle/-/state-toggle-1.0.3.tgz} name: state-toggle @@ -12062,6 +11840,7 @@ packages: version: 1.3.0 dependencies: safe-buffer: registry.npmmirror.com/safe-buffer@5.2.1 + dev: true registry.npmmirror.com/strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz} @@ -12194,12 +11973,6 @@ packages: engines: {node: '>=6'} dev: true - registry.npmmirror.com/text-hex@1.0.0: - resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/text-hex/-/text-hex-1.0.0.tgz} - name: text-hex - version: 1.0.0 - dev: false - registry.npmmirror.com/text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz} name: text-table @@ -12295,13 +12068,6 @@ packages: deprecated: Use String.prototype.trim() instead dev: true - registry.npmmirror.com/triple-beam@1.4.1: - resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/triple-beam/-/triple-beam-1.4.1.tgz} - name: triple-beam - version: 1.4.1 - engines: {node: '>= 14.0.0'} - dev: false - registry.npmmirror.com/trough@1.0.5: resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/trough/-/trough-1.0.5.tgz} name: trough @@ -13079,57 +12845,6 @@ packages: isexe: registry.npmmirror.com/isexe@2.0.0 dev: true - registry.npmmirror.com/winston-mongodb@5.1.1(winston@3.11.0): - resolution: {integrity: sha512-tlDksYDCsSka6vLzB/cg19B+kRbVH/y9JQdXVXc5r4TSLEgX1Ivj/vHyedYlYzNMAZkSSfexwI/dSDn3f9/Qkg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/winston-mongodb/-/winston-mongodb-5.1.1.tgz} - id: registry.npmmirror.com/winston-mongodb/5.1.1 - name: winston-mongodb - version: 5.1.1 - engines: {node: '>=6.8.1'} - peerDependencies: - winston: ^3.0.0 - dependencies: - mongodb: registry.npmmirror.com/mongodb@3.7.4 - winston: registry.npmmirror.com/winston@3.11.0 - winston-transport: registry.npmmirror.com/winston-transport@4.6.0 - transitivePeerDependencies: - - aws4 - - bson-ext - - kerberos - - mongodb-client-encryption - - mongodb-extjson - - snappy - dev: false - - registry.npmmirror.com/winston-transport@4.6.0: - resolution: {integrity: sha512-wbBA9PbPAHxKiygo7ub7BYRiKxms0tpfU2ljtWzb3SjRjv5yl6Ozuy/TkXf00HTAt+Uylo3gSkNwzc4ME0wiIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/winston-transport/-/winston-transport-4.6.0.tgz} - name: winston-transport - version: 4.6.0 - engines: {node: '>= 12.0.0'} - dependencies: - logform: registry.npmmirror.com/logform@2.6.0 - readable-stream: registry.npmmirror.com/readable-stream@3.6.2 - triple-beam: registry.npmmirror.com/triple-beam@1.4.1 - dev: false - - registry.npmmirror.com/winston@3.11.0: - resolution: {integrity: sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/winston/-/winston-3.11.0.tgz} - name: winston - version: 3.11.0 - engines: {node: '>= 12.0.0'} - dependencies: - '@colors/colors': registry.npmmirror.com/@colors/colors@1.6.0 - '@dabh/diagnostics': registry.npmmirror.com/@dabh/diagnostics@2.0.3 - async: registry.npmmirror.com/async@3.2.4 - is-stream: registry.npmmirror.com/is-stream@2.0.1 - logform: registry.npmmirror.com/logform@2.6.0 - one-time: registry.npmmirror.com/one-time@1.0.0 - readable-stream: registry.npmmirror.com/readable-stream@3.6.2 - safe-stable-stringify: registry.npmmirror.com/safe-stable-stringify@2.4.3 - stack-trace: registry.npmmirror.com/stack-trace@0.0.10 - triple-beam: registry.npmmirror.com/triple-beam@1.4.1 - winston-transport: registry.npmmirror.com/winston-transport@4.6.0 - dev: false - registry.npmmirror.com/wrap-ansi@8.1.0: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz} name: wrap-ansi diff --git a/projects/app/.env.template b/projects/app/.env.template index 1a1fd02c7..a3ad50bc7 100644 --- a/projects/app/.env.template +++ b/projects/app/.env.template @@ -21,3 +21,5 @@ MONGODB_URI=mongodb://username:password@0.0.0.0:27017/fastgpt?authSource=admin PG_URL=postgresql://username:password@host:port/postgres # 首页路径 HOME_URL=/ +# Loki Log Path +# LOKI_LOG_URL= \ No newline at end of file diff --git a/projects/app/public/docs/versionIntro.md b/projects/app/public/docs/versionIntro.md index 754c5ae27..ea0fd4760 100644 --- a/projects/app/public/docs/versionIntro.md +++ b/projects/app/public/docs/versionIntro.md @@ -1,11 +1,18 @@ -### Fast GPT V4.6.3 +### Fast GPT V4.6.4 -1. 商业版新增 - web站点同步 -2. 新增 - 集合元数据记录 -3. 优化 - url 读取内容 -4. 优化 - 流读取文件,防止内存溢出 -5. [知识库结构详解](https://doc.fastgpt.in/docs/use-cases/datasetengine/) -6. [知识库提示词详解](https://doc.fastgpt.in/docs/use-cases/ai_settings/#引用模板--引用提示词) -7. [使用文档](https://doc.fastgpt.in/docs/intro/) -8. [点击查看高级编排介绍文档](https://doc.fastgpt.in/docs/workflow) -9. [点击查看商业版](https://doc.fastgpt.in/docs/commercial/) +1. 重写 - 分享链接身份逻辑,采用 localID 记录用户的ID。 +2. 商业版新增 - 分享链接 SSO 方案,通过`身份鉴权`地址,仅需`3个接口`即可完全接入已有用户系统。具体参考[分享链接身份鉴权](https://doc.fastgpt.in/docs/development/openapi/share/) +3. 调整 - 知识库搜索模块 topk 逻辑,采用 MaxToken 计算,兼容不同长度的文本块 +4. 调整鉴权顺序,提高 apikey 的优先级,避免cookie抢占 apikey 的鉴权。 +5. 链接读取支持多选择器。参考[Web 站点同步用法](https://doc.fastgpt.in/docs/course/webSync) +6. 修复 - 分享链接图片上传鉴权问题 +7. 修复 - Mongo 连接池未释放问题。 +8. 修复 - Dataset Intro 无法更新 +9. 修复 - md 代码块问题 +10. 修复 - root 权限问题 +11. 优化 docker file +12. [知识库结构详解](https://doc.fastgpt.in/docs/use-cases/datasetengine/) +13. [知识库提示词详解](https://doc.fastgpt.in/docs/use-cases/ai_settings/#引用模板--引用提示词) +14. [使用文档](https://doc.fastgpt.in/docs/intro/) +15. [点击查看高级编排介绍文档](https://doc.fastgpt.in/docs/workflow) +16. [点击查看商业版](https://doc.fastgpt.in/docs/commercial/) diff --git a/projects/app/public/locales/en/common.json b/projects/app/public/locales/en/common.json index f4d3f2b88..f9696fabc 100644 --- a/projects/app/public/locales/en/common.json +++ b/projects/app/public/locales/en/common.json @@ -65,7 +65,6 @@ "Confirm to clear share chat history": " Are you sure to delete all chats?", "Converting to text": "Converting to text...", "Exit Chat": "Exit", - "Feedback Close": "Close Feedback", "Feedback Failed": "Feedback Failed", "Feedback Mark": "Mark", "Feedback Modal": "Feedback", @@ -81,7 +80,6 @@ "Question Guide Tips": "I guess what you're asking is", "Quote": "Quote", "Read Mark Description": "Read mark description", - "Read User Feedback": "Read user feedback", "Select Mark Kb": "Select Dataset", "Select Mark Kb Desc": "Select a dataset to store the expected answers", "You need to a chat app": "You need to a chat app", @@ -201,6 +199,9 @@ "confirm": { "Common Tip": "Operational Confirm" }, + "course": { + "Read Course": "Read Course" + }, "empty": { "Common Tip": "No data" }, @@ -234,6 +235,10 @@ }, "speech": { "error tip": "Speech Failed" + }, + "system": { + "Help Chatbot": "Chatbot Helper", + "Use Helper": "UsingHelp" } }, "core": { @@ -257,6 +262,9 @@ "TTS Tip": "After this function is enabled, the voice playback function can be used after each conversation. Use of this feature may incur additional charges.", "Welcome Text": "Welcome Text", "create app": "Create App", + "logs": { + "Source And Time": "Source & Time" + }, "setting": "App Setting", "simple": { "mode template select": "Template" @@ -283,6 +291,16 @@ "Speaking": "I'm listening...", "Stop Speak": "Stop Speak", "Type a message": "Input problem", + "error": { + "Messages empty": "Interface content is empty, maybe the text is too long ~" + }, + "feedback": { + "Close User Good Feedback": "", + "Close User Like": "The user like\nClick to close the tag", + "No Content": "The user did not fill in the specific feedback content", + "Read User dislike": "User dislike\nClick to view content", + "Feedback Close": "Close Feedback" + }, "markdown": { "Edit Question": "Edit Question", "Quick Question": "Ask the question immediately", @@ -295,9 +313,6 @@ }, "tts": { "Stop Speech": "Stop" - }, - "error": { - "Messages empty": "Interface content is empty, maybe the text is too long ~" } }, "dataset": { @@ -379,13 +394,13 @@ "id": "Data ID" }, "error": { + "Start Sync Failed": "Start Sync Failed", "unAuthDataset": "No access to this knowledge base ", "unAuthDatasetCollection": "Not authorized to manipulate this data set ", "unAuthDatasetData": "Not authorized to manipulate this data ", "unAuthDatasetFile": "No permission to manipulate this file ", "unCreateCollection": "No permission to manipulate this data ", - "unLinkCollection": "not a network link collection ", - "Start Sync Failed": "Start Sync Failed" + "unLinkCollection": "not a network link collection " }, "file": "File", "folder": "Folder", @@ -462,6 +477,7 @@ "Confirm Create Tips": "Confirm to synchronize the site, the synchronization task will start later, please confirm!", "Confirm Update Tips": "Are you sure to update the site configuration? The synchronization starts immediately with the new configuration. Please confirm", "Selector": "Selector", + "Selector Course": "Selector using tutorial", "Start Sync": "Start Sync", "UnValid Website Tip": "Your site may not be static and cannot be synchronized" } @@ -669,6 +685,10 @@ "Visual AI orchestration": "Visual AI orchestration", "Why FastGPT": "Why {{title}}", "desc": "AI knowledge base question and answer platform based on LLM large model", + "navbar": { + "Use guidance": "Use Guidance", + "chatbot": "Chatbot" + }, "slogan": "Let the AI know more about you" }, "module": { diff --git a/projects/app/public/locales/zh/common.json b/projects/app/public/locales/zh/common.json index 103ea1336..9475030b3 100644 --- a/projects/app/public/locales/zh/common.json +++ b/projects/app/public/locales/zh/common.json @@ -65,7 +65,6 @@ "Confirm to clear share chat history": "确认删除所有聊天记录?", "Converting to text": "正在转换为文本...", "Exit Chat": "退出聊天", - "Feedback Close": "关闭反馈", "Feedback Failed": "提交反馈异常", "Feedback Mark": "标注", "Feedback Modal": "结果反馈", @@ -81,7 +80,6 @@ "Question Guide Tips": "猜你想问", "Quote": "引用", "Read Mark Description": "查看标注功能介绍", - "Read User Feedback": "查看用户反馈", "Select Mark Kb": "选择知识库", "Select Mark Kb Desc": "选择一个知识库存储预期答案", "You need to a chat app": "你需要创建一个应用", @@ -201,6 +199,9 @@ "confirm": { "Common Tip": "操作确认" }, + "course": { + "Read Course": "查看教程" + }, "empty": { "Common Tip": "没有什么数据噢~" }, @@ -234,6 +235,10 @@ }, "speech": { "error tip": "语音转文字失败" + }, + "system": { + "Help Chatbot": "机器人助手", + "Use Helper": "使用帮助" } }, "core": { @@ -257,6 +262,9 @@ "TTS Tip": "开启后,每次对话后可使用语音播放功能。使用该功能可能产生额外费用。", "Welcome Text": "对话开场白", "create app": "创建属于你的 AI 应用", + "logs": { + "Source And Time": "来源 & 时间" + }, "setting": "应用信息设置", "simple": { "mode template select": "简易模板" @@ -283,6 +291,16 @@ "Speaking": "我在听,请说...", "Stop Speak": "停止录音", "Type a message": "输入问题", + "error": { + "Messages empty": "接口内容为空,可能文本超长了~" + }, + "feedback": { + "Close User Good Feedback": "", + "Close User Like": "用户表示赞同\n点击关闭该标记", + "No Content": "用户没有填写具体反馈内容", + "Read User dislike": "用户表示反对\n点击查看内容", + "Feedback Close": "关闭反馈" + }, "markdown": { "Edit Question": "编辑问题", "Quick Question": "点我立即提问", @@ -295,9 +313,6 @@ }, "tts": { "Stop Speech": "停止" - }, - "error": { - "Messages empty": "接口内容为空,可能文本超长了~" } }, "dataset": { @@ -462,6 +477,7 @@ "Confirm Create Tips": "确认同步该站点,同步任务将随后开启,请确认!", "Confirm Update Tips": "确认更新站点配置?会立即按新的配置开始同步,请确认!", "Selector": "选择器", + "Selector Course": "选择器使用教程", "Start Sync": "开始同步", "UnValid Website Tip": "您的站点可能非静态站点,无法同步" } @@ -669,6 +685,10 @@ "Visual AI orchestration": "可视化 AI 编排", "Why FastGPT": "为什么选择 {{title}}", "desc": "基于 LLM 大模型的 AI 知识库问答平台", + "navbar": { + "Use guidance": "使用引导", + "chatbot": "问答机器人" + }, "slogan": "让 AI 更懂你的知识" }, "module": { diff --git a/projects/app/public/simpleTemplates/fastgpt-simple.json b/projects/app/public/simpleTemplates/fastgpt-simple.json index 65736ae4d..bdc3fd09c 100644 --- a/projects/app/public/simpleTemplates/fastgpt-simple.json +++ b/projects/app/public/simpleTemplates/fastgpt-simple.json @@ -14,7 +14,7 @@ "datasets": true, "similarity": false, "limit": false, - "searchMode": "embedding", + "searchMode": false, "searchEmptyText": false }, "userGuide": { diff --git a/projects/app/src/components/Avatar/index.tsx b/projects/app/src/components/Avatar/index.tsx index ed70d20cf..42a2ebcc5 100644 --- a/projects/app/src/components/Avatar/index.tsx +++ b/projects/app/src/components/Avatar/index.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { Image } from '@chakra-ui/react'; import type { ImageProps } from '@chakra-ui/react'; -import { LOGO_ICON } from '@fastgpt/global/core/chat/constants'; +import { LOGO_ICON } from '@fastgpt/global/common/system/constants'; const Avatar = ({ w = '30px', src, ...props }: ImageProps) => { return ( diff --git a/projects/app/src/components/ChatBox/FeedbackModal.tsx b/projects/app/src/components/ChatBox/FeedbackModal.tsx index d0ed903a3..e7f307402 100644 --- a/projects/app/src/components/ChatBox/FeedbackModal.tsx +++ b/projects/app/src/components/ChatBox/FeedbackModal.tsx @@ -3,13 +3,15 @@ import { ModalBody, Textarea, ModalFooter, Button } from '@chakra-ui/react'; import MyModal from '../MyModal'; import { useRequest } from '@/web/common/hooks/useRequest'; import { useTranslation } from 'next-i18next'; -import { userUpdateChatFeedback } from '@/web/core/chat/api'; +import { updateChatUserFeedback } from '@/web/core/chat/api'; const FeedbackModal = ({ + chatId, chatItemId, onSuccess, onClose }: { + chatId: string; chatItemId: string; onSuccess: (e: string) => void; onClose: () => void; @@ -19,14 +21,15 @@ const FeedbackModal = ({ const { mutate, isLoading } = useRequest({ mutationFn: async () => { - const val = ref.current?.value || 'N/A'; - return userUpdateChatFeedback({ + const val = ref.current?.value || t('core.chat.feedback.No Content'); + return updateChatUserFeedback({ + chatId, chatItemId, - userFeedback: val + userBadFeedback: val }); }, onSuccess() { - onSuccess(ref.current?.value || 'N/A'); + onSuccess(ref.current?.value || t('core.chat.feedback.No Content')); }, successToast: t('chat.Feedback Success'), errorToast: t('chat.Feedback Failed') @@ -40,11 +43,7 @@ const FeedbackModal = ({ title={t('chat.Feedback Modal')} > -