perf: variabel replace;Feat: prompt optimizer code (#5453)

* feat: add prompt optimizer (#5444)

* feat: add prompt optimizer

* fix

* perf: variabel replace

* perf: prompt optimizer code

* feat: init charts shell

* perf: user error remove

---------

Co-authored-by: heheer <heheer@sealos.io>
This commit is contained in:
Archer
2025-08-14 15:48:22 +08:00
committed by GitHub
parent 6a02d2a2e5
commit 9fbfabac61
35 changed files with 1968 additions and 202 deletions
@@ -1,4 +1,4 @@
import React, { useEffect, useMemo, useTransition } from 'react';
import React, { useCallback, useEffect, useMemo, useTransition } from 'react';
import {
Box,
Flex,
@@ -31,6 +31,8 @@ import FormLabel from '@fastgpt/web/components/common/MyBox/FormLabel';
import VariableTip from '@/components/common/Textarea/MyTextarea/VariableTip';
import { getWebLLMModel } from '@/web/common/system/utils';
import ToolSelect from './components/ToolSelect';
import { useSystemStore } from '@/web/common/system/useSystemStore';
import OptimizerPopover from '@/components/common/PromptEditor/OptimizerPopover';
const DatasetSelectModal = dynamic(() => import('@/components/core/app/DatasetSelectModal'));
const DatasetParamsModal = dynamic(() => import('@/components/core/app/DatasetParamsModal'));
@@ -69,6 +71,7 @@ const EditForm = ({
const { appDetail } = useContextSelector(AppContext, (v) => v);
const selectDatasets = useMemo(() => appForm?.dataset?.datasets, [appForm]);
const [, startTst] = useTransition();
const { llmModelList, defaultModels } = useSystemStore();
const {
isOpen: isOpenDatasetSelect,
@@ -126,6 +129,27 @@ const EditForm = ({
}
}, [selectedModel, setAppForm]);
const OptimizerPopverComponent = useCallback(
({ iconButtonStyle }: { iconButtonStyle: Record<string, any> }) => {
return (
<OptimizerPopover
iconButtonStyle={iconButtonStyle}
defaultPrompt={appForm.aiSettings.systemPrompt}
onChangeText={(e) => {
setAppForm((state) => ({
...state,
aiSettings: {
...state.aiSettings,
systemPrompt: e
}
}));
}}
/>
);
},
[appForm.aiSettings.systemPrompt, setAppForm]
);
return (
<>
<Box>
@@ -196,6 +220,7 @@ const EditForm = ({
variables={formatVariables}
placeholder={t('common:core.app.tip.systemPromptTip')}
title={t('common:core.ai.Prompt')}
ExtensionPopover={[OptimizerPopverComponent]}
/>
</Box>
</Box>
@@ -13,6 +13,8 @@ import { getEditorVariables } from '@/pageComponents/app/detail/WorkflowComponen
import { InputTypeEnum } from '@/components/core/app/formRender/constant';
import { llmModelTypeFilterMap } from '@fastgpt/global/core/ai/constants';
import { getWebDefaultLLMModel } from '@/web/common/system/utils';
import { NodeInputKeyEnum } from '@fastgpt/global/core/workflow/constants';
import OptimizerPopover from '@/components/common/PromptEditor/OptimizerPopover';
const CommonInputForm = ({ item, nodeId }: RenderInputProps) => {
const { t } = useTranslation();
@@ -80,6 +82,22 @@ const CommonInputForm = ({ item, nodeId }: RenderInputProps) => {
return item.value;
}, [inputType, item.value, defaultModel, handleChange]);
const canOptimizePrompt = item.key === NodeInputKeyEnum.aiSystemPrompt;
const OptimizerPopverComponent = useCallback(
({ iconButtonStyle }: { iconButtonStyle: Record<string, any> }) => {
return (
<OptimizerPopover
iconButtonStyle={iconButtonStyle}
defaultPrompt={item.value}
onChangeText={(e) => {
handleChange(e);
}}
/>
);
},
[item.value, handleChange]
);
return (
<InputRender
inputType={inputType}
@@ -93,6 +111,7 @@ const CommonInputForm = ({ item, nodeId }: RenderInputProps) => {
max={item.max}
list={item.list}
modelList={modelList}
ExtensionPopover={canOptimizePrompt ? [OptimizerPopverComponent] : undefined}
/>
);
};