diff --git a/docSite/content/zh-cn/docs/development/upgrading/491.md b/docSite/content/zh-cn/docs/development/upgrading/491.md
index 9bda4aae6..51b20836b 100644
--- a/docSite/content/zh-cn/docs/development/upgrading/491.md
+++ b/docSite/content/zh-cn/docs/development/upgrading/491.md
@@ -13,7 +13,8 @@ weight: 799
2. 知识库分块阅读器。
3. API 知识库支持 PDF 增强解析。
4. 邀请团队成员,改为邀请链接模式。
-5. 支持重排模型选择和权重设置,同时调整了知识库搜索权重计算方式,改成 搜索权重 + 重排权重,而不是向量检索权重+全文检索权重+重排权重。
+5. 支持混合检索权重设置。
+6. 支持重排模型选择和权重设置,同时调整了知识库搜索权重计算方式,改成 搜索权重 + 重排权重,而不是向量检索权重+全文检索权重+重排权重。
## ⚙️ 优化
diff --git a/packages/global/core/app/type.d.ts b/packages/global/core/app/type.d.ts
index 2552f155b..f852efbc9 100644
--- a/packages/global/core/app/type.d.ts
+++ b/packages/global/core/app/type.d.ts
@@ -75,6 +75,7 @@ export type AppDatasetSearchParamsType = {
searchMode: `${DatasetSearchModeEnum}`;
limit?: number; // limit max tokens
similarity?: number;
+ embeddingWeight?: number; // embedding weight, fullText weight = 1 - embeddingWeight
usingReRank?: boolean;
rerankModel?: string;
diff --git a/packages/global/core/app/utils.ts b/packages/global/core/app/utils.ts
index e20e21067..17794dee9 100644
--- a/packages/global/core/app/utils.ts
+++ b/packages/global/core/app/utils.ts
@@ -108,6 +108,10 @@ export const appWorkflow2Form = ({
defaultAppForm.dataset.searchMode =
findInputValueByKey(node.inputs, NodeInputKeyEnum.datasetSearchMode) ||
DatasetSearchModeEnum.embedding;
+ defaultAppForm.dataset.embeddingWeight = findInputValueByKey(
+ node.inputs,
+ NodeInputKeyEnum.datasetSearchEmbeddingWeight
+ );
// Rerank
defaultAppForm.dataset.usingReRank = !!findInputValueByKey(
node.inputs,
diff --git a/packages/global/core/dataset/constants.ts b/packages/global/core/dataset/constants.ts
index 7d0e3531b..e41010342 100644
--- a/packages/global/core/dataset/constants.ts
+++ b/packages/global/core/dataset/constants.ts
@@ -185,7 +185,7 @@ export enum SearchScoreTypeEnum {
}
export const SearchScoreTypeMap = {
[SearchScoreTypeEnum.embedding]: {
- label: i18nT('common:core.dataset.search.score.embedding'),
+ label: i18nT('common:core.dataset.search.mode.embedding'),
desc: i18nT('common:core.dataset.search.score.embedding desc'),
showScore: true
},
diff --git a/packages/global/core/workflow/constants.ts b/packages/global/core/workflow/constants.ts
index 3188f6588..5a0918883 100644
--- a/packages/global/core/workflow/constants.ts
+++ b/packages/global/core/workflow/constants.ts
@@ -154,9 +154,12 @@ export enum NodeInputKeyEnum {
datasetSimilarity = 'similarity',
datasetMaxTokens = 'limit',
datasetSearchMode = 'searchMode',
+ datasetSearchEmbeddingWeight = 'embeddingWeight',
+
datasetSearchUsingReRank = 'usingReRank',
datasetSearchRerankWeight = 'rerankWeight',
datasetSearchRerankModel = 'rerankModel',
+
datasetSearchUsingExtensionQuery = 'datasetSearchUsingExtensionQuery',
datasetSearchExtensionModel = 'datasetSearchExtensionModel',
datasetSearchExtensionBg = 'datasetSearchExtensionBg',
diff --git a/packages/global/core/workflow/runtime/type.d.ts b/packages/global/core/workflow/runtime/type.d.ts
index 3626052c1..f5db3a89c 100644
--- a/packages/global/core/workflow/runtime/type.d.ts
+++ b/packages/global/core/workflow/runtime/type.d.ts
@@ -133,6 +133,9 @@ export type DispatchNodeResponseType = {
similarity?: number;
limit?: number;
searchMode?: `${DatasetSearchModeEnum}`;
+ embeddingWeight?: number;
+ rerankModel?: string;
+ rerankWeight?: number;
searchUsingReRank?: boolean;
queryExtensionResult?: {
model: string;
diff --git a/packages/global/core/workflow/template/system/datasetSearch.ts b/packages/global/core/workflow/template/system/datasetSearch.ts
index 174d8dda7..0ade13b36 100644
--- a/packages/global/core/workflow/template/system/datasetSearch.ts
+++ b/packages/global/core/workflow/template/system/datasetSearch.ts
@@ -64,6 +64,13 @@ export const DatasetSearchModule: FlowNodeTemplateType = {
valueType: WorkflowIOValueTypeEnum.string,
value: DatasetSearchModeEnum.embedding
},
+ {
+ key: NodeInputKeyEnum.datasetSearchEmbeddingWeight,
+ renderTypeList: [FlowNodeInputTypeEnum.hidden],
+ label: '',
+ valueType: WorkflowIOValueTypeEnum.number,
+ value: 0.5
+ },
// Rerank
{
key: NodeInputKeyEnum.datasetSearchUsingReRank,
diff --git a/packages/service/core/dataset/search/controller.ts b/packages/service/core/dataset/search/controller.ts
index 4fd96733e..d0e5c81cc 100644
--- a/packages/service/core/dataset/search/controller.ts
+++ b/packages/service/core/dataset/search/controller.ts
@@ -40,6 +40,7 @@ export type SearchDatasetDataProps = {
[NodeInputKeyEnum.datasetSimilarity]?: number; // min distance
[NodeInputKeyEnum.datasetMaxTokens]: number; // max Token limit
[NodeInputKeyEnum.datasetSearchMode]?: `${DatasetSearchModeEnum}`;
+ [NodeInputKeyEnum.datasetSearchEmbeddingWeight]?: number;
[NodeInputKeyEnum.datasetSearchUsingReRank]?: boolean;
[NodeInputKeyEnum.datasetSearchRerankModel]?: RerankModelItemType;
@@ -161,6 +162,7 @@ export async function searchDatasetData(
similarity = 0,
limit: maxTokens,
searchMode = DatasetSearchModeEnum.embedding,
+ embeddingWeight = 0.5,
usingReRank = false,
rerankModel,
rerankWeight = 0.5,
@@ -731,16 +733,20 @@ export async function searchDatasetData(
})();
// embedding recall and fullText recall rrf concat
+ const baseK = 120;
+ const embK = Math.round(baseK * (1 - embeddingWeight)); // 搜索结果的 k 值
+ const fullTextK = Math.round(baseK * embeddingWeight); // rerank 结果的 k 值
+
const rrfSearchResult = datasetSearchResultConcat([
- { k: 60, list: embeddingRecallResults },
- { k: 60, list: fullTextRecallResults }
+ { k: embK, list: embeddingRecallResults },
+ { k: fullTextK, list: fullTextRecallResults }
]);
const rrfConcatResults = (() => {
+ if (reRankResults.length === 0) return rrfSearchResult;
if (rerankWeight === 1) return reRankResults;
- const baseK = 30;
- const searchK = Math.round(baseK / (1 - rerankWeight)); // 搜索结果的 k 值
- const rerankK = Math.round(baseK / rerankWeight); // rerank 结果的 k 值
+ const searchK = Math.round(baseK * rerankWeight); // 搜索结果的 k 值
+ const rerankK = Math.round(baseK * (1 - rerankWeight)); // rerank 结果的 k 值
return datasetSearchResultConcat([
{ k: searchK, list: rrfSearchResult },
diff --git a/packages/service/core/workflow/dispatch/dataset/search.ts b/packages/service/core/workflow/dispatch/dataset/search.ts
index 754ef918c..a682b8358 100644
--- a/packages/service/core/workflow/dispatch/dataset/search.ts
+++ b/packages/service/core/workflow/dispatch/dataset/search.ts
@@ -22,8 +22,9 @@ type DatasetSearchProps = ModuleDispatchProps<{
[NodeInputKeyEnum.datasetSelectList]: SelectedDatasetType;
[NodeInputKeyEnum.datasetSimilarity]: number;
[NodeInputKeyEnum.datasetMaxTokens]: number;
- [NodeInputKeyEnum.datasetSearchMode]: `${DatasetSearchModeEnum}`;
[NodeInputKeyEnum.userChatInput]?: string;
+ [NodeInputKeyEnum.datasetSearchMode]: `${DatasetSearchModeEnum}`;
+ [NodeInputKeyEnum.datasetSearchEmbeddingWeight]?: number;
[NodeInputKeyEnum.datasetSearchUsingReRank]: boolean;
[NodeInputKeyEnum.datasetSearchRerankModel]?: string;
@@ -57,11 +58,11 @@ export async function dispatchDatasetSearch(
datasets = [],
similarity,
limit = 1500,
- searchMode,
userChatInput = '',
authTmbId = false,
collectionFilterMatch,
-
+ searchMode,
+ embeddingWeight,
usingReRank,
rerankModel,
rerankWeight,
@@ -129,6 +130,7 @@ export async function dispatchDatasetSearch(
limit,
datasetIds,
searchMode,
+ embeddingWeight,
usingReRank: usingReRank && (await checkTeamReRankPermission(teamId)),
rerankModel: getRerankModel(rerankModel),
rerankWeight,
@@ -228,6 +230,9 @@ export async function dispatchDatasetSearch(
similarity: usingSimilarityFilter ? similarity : undefined,
limit,
searchMode,
+ embeddingWeight: searchMode === DatasetSearchModeEnum.mixedRecall ? embeddingWeight : undefined,
+ rerankModel: usingReRank ? getRerankModel(rerankModel)?.name : undefined,
+ rerankWeight: usingReRank ? rerankWeight : undefined,
searchUsingReRank: searchUsingReRank,
quoteList: searchRes,
queryExtensionResult,
diff --git a/packages/web/components/common/Icon/constants.ts b/packages/web/components/common/Icon/constants.ts
index aa45a3c07..713ce7455 100644
--- a/packages/web/components/common/Icon/constants.ts
+++ b/packages/web/components/common/Icon/constants.ts
@@ -429,6 +429,7 @@ export const iconPaths = {
'price/bg': () => import('./icons/price/bg.svg'),
'price/right': () => import('./icons/price/right.svg'),
save: () => import('./icons/save.svg'),
+ sliderTag: () => import('./icons/sliderTag.svg'),
stop: () => import('./icons/stop.svg'),
'support/account/laf': () => import('./icons/support/account/laf.svg'),
'support/account/loginoutLight': () => import('./icons/support/account/loginoutLight.svg'),
diff --git a/packages/web/components/common/Icon/icons/sliderTag.svg b/packages/web/components/common/Icon/icons/sliderTag.svg
new file mode 100644
index 000000000..f0a0e58f0
--- /dev/null
+++ b/packages/web/components/common/Icon/icons/sliderTag.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/packages/web/i18n/en/app.json b/packages/web/i18n/en/app.json
index f90699c35..cc0bc8f46 100644
--- a/packages/web/i18n/en/app.json
+++ b/packages/web/i18n/en/app.json
@@ -120,7 +120,6 @@
"publish_success": "Publish Successful",
"question_guide_tip": "After the conversation, 3 guiding questions will be generated for you.",
"reasoning_response": "Output thinking",
- "rerank_weight": "Rearrange weights",
"response_format": "Response format",
"saved_success": "Saved successfully! \nTo use this version externally, click Save and Publish",
"search_app": "Search apps",
diff --git a/packages/web/i18n/en/chat.json b/packages/web/i18n/en/chat.json
index 655fb50c7..c46326eaf 100644
--- a/packages/web/i18n/en/chat.json
+++ b/packages/web/i18n/en/chat.json
@@ -49,6 +49,7 @@
"response.child total points": "Sub-workflow point consumption",
"response.dataset_concat_length": "Combined total",
"response.node_inputs": "Node Inputs",
+ "response_hybrid_weight": "Embedding : Full text = {{emb}} : {{text}}",
"select": "Select",
"select_file": "Upload File",
"select_file_img": "Upload file / image",
diff --git a/packages/web/i18n/en/common.json b/packages/web/i18n/en/common.json
index 2d89ab71b..f4b10acb7 100644
--- a/packages/web/i18n/en/common.json
+++ b/packages/web/i18n/en/common.json
@@ -1025,6 +1025,7 @@
"question_feedback": "Work order",
"read_quote": "View citations",
"required": "Required",
+ "rerank_weight": "Rearrange weights",
"resume_failed": "Resume Failed",
"select_reference_variable": "Select Reference Variable",
"share_link": "Share Link",
diff --git a/packages/web/i18n/zh-CN/app.json b/packages/web/i18n/zh-CN/app.json
index 90f5ca3b0..75232c3d2 100644
--- a/packages/web/i18n/zh-CN/app.json
+++ b/packages/web/i18n/zh-CN/app.json
@@ -120,7 +120,6 @@
"publish_success": "发布成功",
"question_guide_tip": "对话结束后,会为你生成 3 个引导性问题。",
"reasoning_response": "输出思考",
- "rerank_weight": "重排权重",
"response_format": "回复格式",
"saved_success": "保存成功!如需在外部使用该版本,请点击“保存并发布”",
"search_app": "搜索应用",
diff --git a/packages/web/i18n/zh-CN/chat.json b/packages/web/i18n/zh-CN/chat.json
index 72413c36b..6d5ab76ed 100644
--- a/packages/web/i18n/zh-CN/chat.json
+++ b/packages/web/i18n/zh-CN/chat.json
@@ -49,6 +49,7 @@
"response.child total points": "子工作流积分消耗",
"response.dataset_concat_length": "合并后总数",
"response.node_inputs": "节点输入",
+ "response_hybrid_weight": "语义检索 : 全文检索 = {{emb}} : {{text}}",
"select": "选择",
"select_file": "上传文件",
"select_file_img": "上传文件/图片",
diff --git a/packages/web/i18n/zh-CN/common.json b/packages/web/i18n/zh-CN/common.json
index 1d8e3ebff..ca5fb9e84 100644
--- a/packages/web/i18n/zh-CN/common.json
+++ b/packages/web/i18n/zh-CN/common.json
@@ -623,7 +623,6 @@
"core.dataset.search.mode.fullTextRecall desc": "使用传统的全文检索,适合查找一些关键词和主谓语特殊的数据",
"core.dataset.search.mode.mixedRecall": "混合检索",
"core.dataset.search.mode.mixedRecall desc": "使用向量检索与全文检索的综合结果返回,使用 RRF 算法进行排序。",
- "core.dataset.search.score.embedding": "语义检索",
"core.dataset.search.score.embedding desc": "通过计算向量之间的距离获取得分,范围为 0~1。",
"core.dataset.search.score.fullText": "全文检索",
"core.dataset.search.score.fullText desc": "计算相同关键词的得分,范围为 0~无穷。",
@@ -1029,6 +1028,7 @@
"question_feedback": "工单咨询",
"read_quote": "查看引用",
"required": "必须",
+ "rerank_weight": "重排权重",
"resume_failed": "恢复失败",
"select_reference_variable": "选择引用变量",
"share_link": "分享链接",
diff --git a/packages/web/i18n/zh-Hant/app.json b/packages/web/i18n/zh-Hant/app.json
index 475b4955f..dfa6bfc7d 100644
--- a/packages/web/i18n/zh-Hant/app.json
+++ b/packages/web/i18n/zh-Hant/app.json
@@ -120,7 +120,6 @@
"publish_success": "發布成功",
"question_guide_tip": "對話結束後,會為你產生 3 個引導性問題。",
"reasoning_response": "輸出思考",
- "rerank_weight": "重排權重",
"response_format": "回复格式",
"saved_success": "保存成功!\n如需在外部使用該版本,請點擊“儲存並發布”",
"search_app": "搜尋應用程式",
diff --git a/packages/web/i18n/zh-Hant/chat.json b/packages/web/i18n/zh-Hant/chat.json
index 312e3ca92..a688e4674 100644
--- a/packages/web/i18n/zh-Hant/chat.json
+++ b/packages/web/i18n/zh-Hant/chat.json
@@ -48,6 +48,7 @@
"response.child total points": "子工作流程點數消耗",
"response.dataset_concat_length": "合併總數",
"response.node_inputs": "節點輸入",
+ "response_hybrid_weight": "語義檢索 : 全文檢索 = {{emb}} : {{text}}",
"select": "選取",
"select_file": "上傳檔案",
"select_file_img": "上傳檔案 / 圖片",
diff --git a/packages/web/i18n/zh-Hant/common.json b/packages/web/i18n/zh-Hant/common.json
index 1b3fe6a4d..32e3306dc 100644
--- a/packages/web/i18n/zh-Hant/common.json
+++ b/packages/web/i18n/zh-Hant/common.json
@@ -1024,6 +1024,7 @@
"question_feedback": "工單諮詢",
"read_quote": "查看引用",
"required": "必填",
+ "rerank_weight": "重排權重",
"resume_failed": "恢復失敗",
"select_reference_variable": "選擇引用變數",
"share_link": "分享連結",
diff --git a/projects/app/src/components/Markdown/index.tsx b/projects/app/src/components/Markdown/index.tsx
index 2d8169b5e..0f04538d7 100644
--- a/projects/app/src/components/Markdown/index.tsx
+++ b/projects/app/src/components/Markdown/index.tsx
@@ -85,7 +85,7 @@ export default React.memo(Markdown);
function Code(e: any) {
const { className, codeBlock, children } = e;
const match = /language-(\w+)/.exec(className || '');
- const codeType = match?.[1];
+ const codeType = match?.[1]?.toLowerCase();
const strChildren = String(children);
@@ -105,7 +105,7 @@ function Code(e: any) {
if (codeType === CodeClassNameEnum.iframe) {
return ;
}
- if (codeType && codeType.toLowerCase() === CodeClassNameEnum.html) {
+ if (codeType === CodeClassNameEnum.html || codeType === CodeClassNameEnum.svg) {
return (
{children}
diff --git a/projects/app/src/components/Markdown/utils.ts b/projects/app/src/components/Markdown/utils.ts
index 6b4d1e5c5..869d4fe1f 100644
--- a/projects/app/src/components/Markdown/utils.ts
+++ b/projects/app/src/components/Markdown/utils.ts
@@ -8,6 +8,7 @@ export enum CodeClassNameEnum {
latex = 'latex',
iframe = 'iframe',
html = 'html',
+ svg = 'svg',
video = 'video',
audio = 'audio'
}
diff --git a/projects/app/src/components/core/app/DatasetParamsModal.tsx b/projects/app/src/components/core/app/DatasetParamsModal.tsx
index 46f9e5c99..f55465bf8 100644
--- a/projects/app/src/components/core/app/DatasetParamsModal.tsx
+++ b/projects/app/src/components/core/app/DatasetParamsModal.tsx
@@ -1,5 +1,17 @@
import React, { useEffect, useMemo, useState } from 'react';
-import { Box, Button, Flex, HStack, ModalBody, ModalFooter, Switch } from '@chakra-ui/react';
+import {
+ Box,
+ Button,
+ Flex,
+ HStack,
+ ModalBody,
+ ModalFooter,
+ Switch,
+ Slider,
+ SliderTrack,
+ SliderFilledTrack,
+ SliderThumb
+} from '@chakra-ui/react';
import { useForm } from 'react-hook-form';
import MyModal from '@fastgpt/web/components/common/MyModal';
import { DatasetSearchModeEnum } from '@fastgpt/global/core/dataset/constants';
@@ -17,6 +29,7 @@ import { defaultDatasetMaxTokens } from '@fastgpt/global/core/app/constants';
import InputSlider from '@fastgpt/web/components/common/MySlider/InputSlider';
import LeftRadio from '@fastgpt/web/components/common/Radio/LeftRadio';
import { AppDatasetSearchParamsType } from '@fastgpt/global/core/app/type';
+import MyIcon from '@fastgpt/web/components/common/Icon';
enum SearchSettingTabEnum {
searchMode = 'searchMode',
@@ -28,6 +41,7 @@ const DatasetParamsModal = ({
searchMode = DatasetSearchModeEnum.embedding,
limit,
similarity,
+ embeddingWeight,
usingReRank,
rerankModel,
rerankWeight,
@@ -62,12 +76,13 @@ const DatasetParamsModal = ({
const { register, setValue, getValues, handleSubmit, watch } =
useForm({
defaultValues: {
- limit,
- similarity,
searchMode,
+ embeddingWeight: embeddingWeight || 0.5,
usingReRank: !!usingReRank && teamPlanStatus?.standardConstants?.permissionReRank !== false,
rerankModel: rerankModel || defaultModels?.rerank?.model,
rerankWeight: rerankWeight || 0.5,
+ limit,
+ similarity,
datasetSearchUsingExtensionQuery,
datasetSearchExtensionModel: datasetSearchExtensionModel || defaultModels.llm?.model,
datasetSearchExtensionBg
@@ -75,6 +90,12 @@ const DatasetParamsModal = ({
});
const searchModeWatch = watch('searchMode');
+ const embeddingWeightWatch = watch('embeddingWeight');
+ const fullTextWeightWatch = useMemo(() => {
+ const val = 1 - (embeddingWeightWatch || 0.5);
+ return Number(val.toFixed(2));
+ }, [embeddingWeightWatch]);
+
const datasetSearchUsingCfrForm = watch('datasetSearchUsingExtensionQuery');
const queryExtensionModel = watch('datasetSearchExtensionModel');
@@ -168,8 +189,45 @@ const DatasetParamsModal = ({
{
title: t('common:core.dataset.search.mode.mixedRecall'),
desc: t('common:core.dataset.search.mode.mixedRecall desc'),
- value: DatasetSearchModeEnum.mixedRecall
- // children: searchModeWatch === DatasetSearchModeEnum.mixedRecall && 111
+ value: DatasetSearchModeEnum.mixedRecall,
+ children: searchModeWatch === DatasetSearchModeEnum.mixedRecall && (
+
+
+
+
+ {t('common:core.dataset.search.mode.embedding')}
+
+
+ {embeddingWeightWatch}
+
+
+
+
+ {t('common:core.dataset.search.score.fullText')}
+
+
+ {fullTextWeightWatch}
+
+
+
+ {
+ setValue('embeddingWeight', Number(e.toFixed(2)));
+ }}
+ >
+
+
+
+
+
+
+
+
+ )
}
]}
value={searchModeWatch}
@@ -201,7 +259,7 @@ const DatasetParamsModal = ({
<>
- {t('app:rerank_weight')}
+ {t('common:rerank_weight')}
+
+ {/* @ts-ignore */}
+ {t(DatasetSearchModeMap[activeModule.searchMode]?.title)}
+
+ {activeModule.embeddingWeight && (
+ <>{`(${t('chat:response_hybrid_weight', {
+ emb: activeModule.embeddingWeight,
+ text: 1 - activeModule.embeddingWeight
+ })})`}>
+ )}
+
+ }
/>
)}
+
+ {activeModule?.searchUsingReRank ? (
+ activeModule?.rerankModel ? (
+ {`${activeModule.rerankModel}: ${activeModule.rerankWeight}`}
+ ) : (
+ 'True'
+ )
+ ) : (
+ `False`
+ )}
+
+ }
/>
{activeModule.queryExtensionResult && (
<>
diff --git a/projects/app/src/global/core/dataset/api.d.ts b/projects/app/src/global/core/dataset/api.d.ts
index fc09332c6..bb63f9bdd 100644
--- a/projects/app/src/global/core/dataset/api.d.ts
+++ b/projects/app/src/global/core/dataset/api.d.ts
@@ -63,8 +63,13 @@ export type SearchTestProps = {
text: string;
[NodeInputKeyEnum.datasetSimilarity]?: number;
[NodeInputKeyEnum.datasetMaxTokens]?: number;
+
[NodeInputKeyEnum.datasetSearchMode]?: `${DatasetSearchModeEnum}`;
+ [NodeInputKeyEnum.datasetSearchEmbeddingWeight]?: number;
+
[NodeInputKeyEnum.datasetSearchUsingReRank]?: boolean;
+ [NodeInputKeyEnum.datasetSearchRerankModel]?: string;
+ [NodeInputKeyEnum.datasetSearchRerankWeight]?: number;
[NodeInputKeyEnum.datasetSearchUsingExtensionQuery]?: boolean;
[NodeInputKeyEnum.datasetSearchExtensionModel]?: string;
diff --git a/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDatasetParams.tsx b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDatasetParams.tsx
index e8eb3a7d7..888332f0d 100644
--- a/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDatasetParams.tsx
+++ b/projects/app/src/pageComponents/app/detail/WorkflowComponents/Flow/nodes/render/RenderInput/templates/SelectDatasetParams.tsx
@@ -24,6 +24,7 @@ const SelectDatasetParam = ({ inputs = [], nodeId }: RenderInputProps) => {
const [data, setData] = useState({
searchMode: DatasetSearchModeEnum.embedding,
+ embeddingWeight: 0.5,
limit: 3000,
similarity: 0.5,
usingReRank: false,
diff --git a/projects/app/src/pageComponents/dataset/detail/Test.tsx b/projects/app/src/pageComponents/dataset/detail/Test.tsx
index c34539421..54c65e5f9 100644
--- a/projects/app/src/pageComponents/dataset/detail/Test.tsx
+++ b/projects/app/src/pageComponents/dataset/detail/Test.tsx
@@ -36,9 +36,14 @@ type FormType = {
inputText: string;
searchParams: {
searchMode: `${DatasetSearchModeEnum}`;
+ embeddingWeight?: number;
+
+ usingReRank?: boolean;
+ rerankModel?: string;
+ rerankWeight?: number;
+
similarity?: number;
limit?: number;
- usingReRank?: boolean;
datasetSearchUsingExtensionQuery?: boolean;
datasetSearchExtensionModel?: string;
datasetSearchExtensionBg?: string;
@@ -53,7 +58,6 @@ const Test = ({ datasetId }: { datasetId: string }) => {
const { pushDatasetTestItem } = useSearchTestStore();
const [inputType, setInputType] = useState<'text' | 'file'>('text');
const [datasetTestItem, setDatasetTestItem] = useState();
- const [refresh, setRefresh] = useState(false);
const [isFocus, setIsFocus] = useState(false);
const { File, onOpen } = useSelectFile({
fileType: '.csv',
@@ -66,7 +70,10 @@ const Test = ({ datasetId }: { datasetId: string }) => {
inputText: '',
searchParams: {
searchMode: DatasetSearchModeEnum.embedding,
+ embeddingWeight: 0.5,
usingReRank: false,
+ rerankModel: defaultModels?.rerank?.model,
+ rerankWeight: 0.5,
limit: 5000,
similarity: 0,
datasetSearchUsingExtensionQuery: false,
@@ -77,6 +84,7 @@ const Test = ({ datasetId }: { datasetId: string }) => {
});
const searchModeData = DatasetSearchModeMap[getValues(`searchParams.searchMode`)];
+ const searchParams = getValues('searchParams');
const {
isOpen: isOpenSelectMode,
@@ -294,15 +302,14 @@ const Test = ({ datasetId }: { datasetId: string }) => {
{isOpenSelectMode && (
{
setValue('searchParams', {
- ...getValues('searchParams'),
+ ...searchParams,
...e
});
- setRefresh((state) => !state);
}}
/>
)}
diff --git a/projects/app/src/pages/api/core/dataset/searchTest.ts b/projects/app/src/pages/api/core/dataset/searchTest.ts
index 952d731c6..c0df208ad 100644
--- a/projects/app/src/pages/api/core/dataset/searchTest.ts
+++ b/projects/app/src/pages/api/core/dataset/searchTest.ts
@@ -16,6 +16,7 @@ import { ReadPermissionVal } from '@fastgpt/global/support/permission/constant';
import { CommonErrEnum } from '@fastgpt/global/common/error/code/common';
import { useIPFrequencyLimit } from '@fastgpt/service/common/middle/reqFrequencyLimit';
import { ApiRequestProps } from '@fastgpt/service/type/next';
+import { getRerankModel } from '@fastgpt/service/core/ai/model';
async function handler(req: ApiRequestProps): Promise {
const {
@@ -24,7 +25,11 @@ async function handler(req: ApiRequestProps): Promise): Promise