mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-22 12:20:34 +00:00
Add question guide config (#3403)
* feat:Prompt task (#3337) * feat:猜你想问自定义功能 * 修改用户输入框部分,去除冗余代码 * 删除不必要的属性 * 删除多余内容 * 修正了格式问题,并实现获取调试和app最新参数 * 修正了几行代码 * feat:Prompt task (#3337) * feat:猜你想问自定义功能 * 修改用户输入框部分,去除冗余代码 * 删除不必要的属性 * 删除多余内容 * 修正了格式问题,并实现获取调试和app最新参数 * 修正了几行代码 * perf: question gudide code * fix: i18n * hunyuan logo * fix: cq templates * perf: create question guide code * udpate svg --------- Co-authored-by: Jiangween <145003935+Jiangween@users.noreply.github.com>
This commit is contained in:
@@ -65,3 +65,13 @@ export const Prompt_CQJson = `请帮我执行一个“问题分类”任务,
|
||||
问题:"{{question}}"
|
||||
类型ID=
|
||||
`;
|
||||
|
||||
export const PROMPT_QUESTION_GUIDE = `You are an AI assistant tasked with predicting the user's next question based on the conversation history. Your goal is to generate 3 potential questions that will guide the user to continue the conversation. When generating these questions, adhere to the following rules:
|
||||
|
||||
1. Use the same language as the user's last question in the conversation history.
|
||||
2. Keep each question under 20 characters in length.
|
||||
|
||||
Analyze the conversation history provided to you and use it as context to generate relevant and engaging follow-up questions. Your predictions should be logical extensions of the current topic or related areas that the user might be interested in exploring further.
|
||||
|
||||
Remember to maintain consistency in tone and style with the existing conversation while providing diverse options for the user to choose from. Your goal is to keep the conversation flowing naturally and help the user delve deeper into the subject matter or explore related topics.`;
|
||||
export const PROMPT_QUESTION_GUIDE_FOOTER = `Please strictly follow the format rules: \nReturn questions in JSON format: ['Question 1', 'Question 2', 'Question 3']. Your output: `;
|
||||
|
@@ -1,8 +1,10 @@
|
||||
import { PROMPT_QUESTION_GUIDE } from '../ai/prompt/agent';
|
||||
import {
|
||||
AppTTSConfigType,
|
||||
AppFileSelectConfigType,
|
||||
AppWhisperConfigType,
|
||||
AppAutoExecuteConfigType
|
||||
AppAutoExecuteConfigType,
|
||||
AppQGConfigType
|
||||
} from './type';
|
||||
|
||||
export enum AppTypeEnum {
|
||||
@@ -28,6 +30,12 @@ export const defaultWhisperConfig: AppWhisperConfigType = {
|
||||
autoTTSResponse: false
|
||||
};
|
||||
|
||||
export const defaultQGConfig: AppQGConfigType = {
|
||||
open: false,
|
||||
model: 'gpt-4o-mini',
|
||||
customPrompt: PROMPT_QUESTION_GUIDE
|
||||
};
|
||||
|
||||
export const defaultChatInputGuideConfig = {
|
||||
open: false,
|
||||
textList: [],
|
||||
|
10
packages/global/core/app/type.d.ts
vendored
10
packages/global/core/app/type.d.ts
vendored
@@ -97,7 +97,7 @@ export type AppChatConfigType = {
|
||||
welcomeText?: string;
|
||||
variables?: VariableItemType[];
|
||||
autoExecute?: AppAutoExecuteConfigType;
|
||||
questionGuide?: boolean;
|
||||
questionGuide?: AppQGConfigType;
|
||||
ttsConfig?: AppTTSConfigType;
|
||||
whisperConfig?: AppWhisperConfigType;
|
||||
scheduledTriggerConfig?: AppScheduledTriggerConfigType;
|
||||
@@ -148,6 +148,14 @@ export type AppWhisperConfigType = {
|
||||
autoSend: boolean;
|
||||
autoTTSResponse: boolean;
|
||||
};
|
||||
|
||||
// question guide
|
||||
export type AppQGConfigType = {
|
||||
open: boolean;
|
||||
model?: string;
|
||||
customPrompt?: string;
|
||||
};
|
||||
|
||||
// question guide text
|
||||
export type ChatInputGuideConfigType = {
|
||||
open: boolean;
|
||||
|
@@ -26,12 +26,14 @@ import type {
|
||||
AppScheduledTriggerConfigType,
|
||||
ChatInputGuideConfigType,
|
||||
AppChatConfigType,
|
||||
AppAutoExecuteConfigType
|
||||
AppAutoExecuteConfigType,
|
||||
AppQGConfigType
|
||||
} from '../app/type';
|
||||
import { EditorVariablePickerType } from '../../../web/components/common/Textarea/PromptEditor/type';
|
||||
import {
|
||||
defaultAutoExecuteConfig,
|
||||
defaultChatInputGuideConfig,
|
||||
defaultQGConfig,
|
||||
defaultTTSConfig,
|
||||
defaultWhisperConfig
|
||||
} from '../app/constants';
|
||||
@@ -76,9 +78,14 @@ export const splitGuideModule = (guideModules?: StoreNodeItemType) => {
|
||||
const variables: VariableItemType[] =
|
||||
guideModules?.inputs.find((item) => item.key === NodeInputKeyEnum.variables)?.value ?? [];
|
||||
|
||||
const questionGuide: boolean =
|
||||
!!guideModules?.inputs?.find((item) => item.key === NodeInputKeyEnum.questionGuide)?.value ??
|
||||
false;
|
||||
// Adapt old version
|
||||
const questionGuideVal = guideModules?.inputs?.find(
|
||||
(item) => item.key === NodeInputKeyEnum.questionGuide
|
||||
)?.value;
|
||||
const questionGuide: AppQGConfigType =
|
||||
typeof questionGuideVal === 'boolean'
|
||||
? { ...defaultQGConfig, open: questionGuideVal }
|
||||
: questionGuideVal ?? defaultQGConfig;
|
||||
|
||||
const ttsConfig: AppTTSConfigType =
|
||||
guideModules?.inputs?.find((item) => item.key === NodeInputKeyEnum.tts)?.value ??
|
||||
|
@@ -439,7 +439,9 @@
|
||||
}
|
||||
],
|
||||
"chatConfig": {
|
||||
"questionGuide": false,
|
||||
"questionGuide": {
|
||||
"open": false
|
||||
},
|
||||
"ttsConfig": {
|
||||
"type": "web"
|
||||
},
|
||||
|
@@ -489,7 +489,9 @@
|
||||
"chatConfig": {
|
||||
"welcomeText": "",
|
||||
"variables": [],
|
||||
"questionGuide": false,
|
||||
"questionGuide": {
|
||||
"open": false
|
||||
},
|
||||
"ttsConfig": {
|
||||
"type": "web"
|
||||
},
|
||||
|
@@ -666,7 +666,9 @@
|
||||
"chatConfig": {
|
||||
"welcomeText": "",
|
||||
"variables": [],
|
||||
"questionGuide": false,
|
||||
"questionGuide": {
|
||||
"open": false
|
||||
},
|
||||
"ttsConfig": {
|
||||
"type": "web"
|
||||
},
|
||||
|
@@ -502,7 +502,9 @@
|
||||
"chatConfig": {
|
||||
"welcomeText": "",
|
||||
"variables": [],
|
||||
"questionGuide": false,
|
||||
"questionGuide": {
|
||||
"open": false
|
||||
},
|
||||
"ttsConfig": {
|
||||
"type": "web"
|
||||
},
|
||||
|
@@ -538,7 +538,9 @@
|
||||
"chatConfig": {
|
||||
"welcomeText": "",
|
||||
"variables": [],
|
||||
"questionGuide": false,
|
||||
"questionGuide": {
|
||||
"open": false
|
||||
},
|
||||
"ttsConfig": {
|
||||
"type": "web"
|
||||
},
|
||||
|
@@ -320,7 +320,9 @@
|
||||
"chatConfig": {
|
||||
"welcomeText": "",
|
||||
"variables": [],
|
||||
"questionGuide": false,
|
||||
"questionGuide": {
|
||||
"open": false
|
||||
},
|
||||
"ttsConfig": {
|
||||
"type": "web"
|
||||
},
|
||||
|
@@ -3,29 +3,30 @@ import { createChatCompletion } from '../config';
|
||||
import { countGptMessagesTokens } from '../../../common/string/tiktoken/index';
|
||||
import { loadRequestMessages } from '../../chat/utils';
|
||||
import { llmCompletionsBodyFormat } from '../utils';
|
||||
|
||||
export const Prompt_QuestionGuide = `You are an AI assistant tasked with predicting the user's next question based on the conversation history. Your goal is to generate 3 potential questions that will guide the user to continue the conversation. When generating these questions, adhere to the following rules:
|
||||
|
||||
1. Use the same language as the user's last question in the conversation history.
|
||||
2. Keep each question under 20 characters in length.
|
||||
3. Return the questions in JSON format: ["question1", "question2", "question3"].
|
||||
|
||||
Analyze the conversation history provided to you and use it as context to generate relevant and engaging follow-up questions. Your predictions should be logical extensions of the current topic or related areas that the user might be interested in exploring further.
|
||||
|
||||
Remember to maintain consistency in tone and style with the existing conversation while providing diverse options for the user to choose from. Your goal is to keep the conversation flowing naturally and help the user delve deeper into the subject matter or explore related topics.`;
|
||||
import {
|
||||
PROMPT_QUESTION_GUIDE,
|
||||
PROMPT_QUESTION_GUIDE_FOOTER
|
||||
} from '@fastgpt/global/core/ai/prompt/agent';
|
||||
import { addLog } from '../../../common/system/log';
|
||||
import json5 from 'json5';
|
||||
|
||||
export async function createQuestionGuide({
|
||||
messages,
|
||||
model
|
||||
model,
|
||||
customPrompt
|
||||
}: {
|
||||
messages: ChatCompletionMessageParam[];
|
||||
model: string;
|
||||
}) {
|
||||
customPrompt?: string;
|
||||
}): Promise<{
|
||||
result: string[];
|
||||
tokens: number;
|
||||
}> {
|
||||
const concatMessages: ChatCompletionMessageParam[] = [
|
||||
...messages,
|
||||
{
|
||||
role: 'user',
|
||||
content: Prompt_QuestionGuide
|
||||
content: `${customPrompt || PROMPT_QUESTION_GUIDE}\n${PROMPT_QUESTION_GUIDE_FOOTER}`
|
||||
}
|
||||
];
|
||||
|
||||
@@ -53,6 +54,7 @@ export async function createQuestionGuide({
|
||||
const tokens = await countGptMessagesTokens(concatMessages);
|
||||
|
||||
if (start === -1 || end === -1) {
|
||||
addLog.warn('Create question guide error', { answer });
|
||||
return {
|
||||
result: [],
|
||||
tokens: 0
|
||||
@@ -66,10 +68,12 @@ export async function createQuestionGuide({
|
||||
|
||||
try {
|
||||
return {
|
||||
result: JSON.parse(jsonStr),
|
||||
result: json5.parse(jsonStr),
|
||||
tokens
|
||||
};
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
|
||||
return {
|
||||
result: [],
|
||||
tokens: 0
|
||||
|
@@ -11,7 +11,7 @@ export const AppCollectionName = 'apps';
|
||||
export const chatConfigType = {
|
||||
welcomeText: String,
|
||||
variables: Array,
|
||||
questionGuide: Boolean,
|
||||
questionGuide: Object,
|
||||
ttsConfig: Object,
|
||||
whisperConfig: Object,
|
||||
scheduledTriggerConfig: Object,
|
||||
|
@@ -1 +1,10 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1698504394130" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4081" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M928 448h-64a19.2 19.2 0 0 1 0-38.4h64a19.2 19.2 0 0 1 0 38.4zM797.1072 738.4064l-45.2608-45.2608a19.2 19.2 0 0 1 27.1488-27.1488l45.3248 45.2608a19.2 19.2 0 0 1-27.2128 27.1488zM779.008 204.4032a19.2 19.2 0 0 1-27.1488-27.1488l45.2608-45.2608a19.2 19.2 0 0 1 27.2 27.1488z m-121.216 472.0128a282.368 282.368 0 0 0-17.2032 77.5808v20.8A37.7856 37.7856 0 0 1 614.4 810.6752V819.2H409.6v-8.5248a37.7856 37.7856 0 0 1-26.1888-35.84v-23.9488a290.0352 290.0352 0 0 0-16.9344-74.24A279.04 279.04 0 0 1 243.2 443.5968C243.2 290.56 363.52 166.4 512 166.4s268.8 124.16 268.8 277.1968a279.04 279.04 0 0 1-123.008 232.8192zM505.6 691.2a19.2 19.2 0 1 0-19.2-19.2 19.2 19.2 0 0 0 19.2 19.2z m6.4-358.4a115.2 115.2 0 0 0-114.4448 102.4h6.5024a17.728 17.728 0 1 0 20.9024 0h8.6656A79.8848 79.8848 0 0 1 512 368.64a77.7216 77.7216 0 0 1 76.8 79.36c0.8064 45.6064-64 76.8-64 76.8a97.4976 97.4976 0 0 0-34.432 46.4768 18.7392 18.7392 0 0 0-3.968 11.1232v7.68a56.6784 56.6784 0 0 0 0 11.52v6.4a19.2 19.2 0 0 0 38.4 0v-14.4768a18.6496 18.6496 0 0 1 0.384-4.6336C533.3632 557.9904 588.8 524.8 588.8 524.8c36.2368-23.296 38.4-76.8 38.4-76.8a115.2 115.2 0 0 0-115.2-115.2z m6.4-230.4A19.2 19.2 0 0 1 499.2 83.2v-64a19.2 19.2 0 1 1 38.4 0v64A19.2 19.2 0 0 1 518.4 102.4z m-264.3456 92.9536l-45.2608-45.2608A19.2 19.2 0 1 1 235.9424 122.88l45.2608 45.248a19.2 19.2 0 0 1-27.1488 27.2256zM160 448h-64a19.2 19.2 0 0 1 0-38.4h64a19.2 19.2 0 0 1 0 38.4z m94.0544 227.0464a19.2 19.2 0 0 1 27.1488 27.1488L235.9424 747.52a19.2 19.2 0 0 1-27.1488-27.1488zM652.8 846.9376a8.384 8.384 0 0 1 0.384 1.9072V870.4a8.4096 8.4096 0 0 1-0.384 1.9072V883.2H371.2v-51.2h281.6v14.9376zM627.2 947.2H396.8v-51.2h230.4v51.2z m-183.6672 23.9104H579.84a8.5248 8.5248 0 0 1 4.8896 1.6896H601.6v38.4H422.4v-38.4h16.2432a8.5248 8.5248 0 0 1 4.8896-1.6896z" fill="#1296db" p-id="4082"></path></svg>
|
||||
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M9.13063 2.05868C9.13063 1.57855 9.51985 1.18933 9.99998 1.18933C10.4801 1.18933 10.8693 1.57855 10.8693 2.05868V3.21982C10.8693 3.69994 10.4801 4.08916 9.99998 4.08916C9.51985 4.08916 9.13063 3.69994 9.13063 3.21982V2.05868Z" fill="#219BF4"/>
|
||||
<path d="M3.38076 9.1859C3.86089 9.1859 4.25011 9.57512 4.25011 10.0552C4.25011 10.5354 3.86089 10.9246 3.38076 10.9246H2.22333C1.74321 10.9246 1.35399 10.5354 1.35399 10.0552C1.35399 9.57512 1.74321 9.1859 2.22333 9.1859H3.38076Z" fill="#219BF4"/>
|
||||
<path d="M17.7767 9.1859C18.2568 9.1859 18.646 9.57512 18.646 10.0552C18.646 10.5354 18.2568 10.9246 17.7767 10.9246H16.6144C16.1342 10.9246 15.745 10.5354 15.745 10.0552C15.745 9.57512 16.1342 9.1859 16.6144 9.1859H17.7767Z" fill="#219BF4"/>
|
||||
<path d="M11.9605 15.5135C12.3425 15.5135 12.6522 15.8231 12.6522 16.2051C12.6522 16.5871 12.3425 16.8968 11.9605 16.8968H8.01907C7.63707 16.8968 7.3274 16.5871 7.3274 16.2051C7.3274 15.8231 7.63707 15.5135 8.01907 15.5135H11.9605Z" fill="#219BF4"/>
|
||||
<path d="M10.9742 17.5941C11.3102 17.5941 11.5825 17.8664 11.5825 18.2024C11.5825 18.5384 11.3102 18.8107 10.9742 18.8107H9.00533C8.66936 18.8107 8.397 18.5384 8.397 18.2024C8.397 17.8664 8.66936 17.5941 9.00533 17.5941H10.9742Z" fill="#219BF4"/>
|
||||
<path d="M14.8373 9.83534C14.8373 12.5069 12.6715 14.6726 10 14.6726C7.32845 14.6726 5.16274 12.5069 5.16274 9.83534C5.16274 7.16379 7.32845 4.99808 10 4.99808C12.6715 4.99808 14.8373 7.16379 14.8373 9.83534Z" fill="#219BF4"/>
|
||||
<path d="M15.3181 5.79775C14.9786 6.13725 14.4282 6.13725 14.0887 5.79775C13.7492 5.45825 13.7492 4.90781 14.0887 4.56831L14.9091 3.7479C15.2486 3.4084 15.799 3.4084 16.1385 3.7479C16.478 4.0874 16.478 4.63784 16.1385 4.97734L15.3181 5.79775Z" fill="#219BF4"/>
|
||||
<path d="M4.68184 5.80161C5.02134 6.14111 5.57178 6.14111 5.91128 5.80161C6.25078 5.46211 6.25078 4.91167 5.91128 4.57217L5.09091 3.7518C4.75141 3.4123 4.20097 3.4123 3.86147 3.7518C3.52197 4.0913 3.52197 4.64174 3.86147 4.98124L4.68184 5.80161Z" fill="#219BF4"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.0 KiB |
@@ -0,0 +1,158 @@
|
||||
import {
|
||||
Box,
|
||||
Button,
|
||||
Flex,
|
||||
Textarea,
|
||||
ModalFooter,
|
||||
HStack,
|
||||
Icon,
|
||||
ModalBody
|
||||
} from '@chakra-ui/react';
|
||||
import MyIcon from '../../Icon/index';
|
||||
|
||||
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
||||
import { useTranslation } from 'next-i18next';
|
||||
import MyModal from '../../MyModal';
|
||||
|
||||
const CustomLightTip = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return (
|
||||
<HStack px="3" py="2" bgColor="primary.50" borderRadius="md" fontSize={'sm'}>
|
||||
<Icon name="common/info" w="1rem" color={'primary.600'} />
|
||||
<Box color="primary.600">
|
||||
{t('common:core.app.QG.Custom prompt tip1')}
|
||||
<Box as="span" color={'yellow.500'} fontWeight="500" display="inline">
|
||||
{t('common:core.app.QG.Custom prompt tip2')}
|
||||
</Box>
|
||||
{t('common:core.app.QG.Custom prompt tip3')}
|
||||
</Box>
|
||||
</HStack>
|
||||
);
|
||||
};
|
||||
|
||||
const FixBox = ({ children }: { children: React.ReactNode }) => {
|
||||
return (
|
||||
<Box>
|
||||
<Box
|
||||
bg="yellow.100"
|
||||
as="span" // 改为 inline 元素
|
||||
display="inline" // 确保是行内显示
|
||||
>
|
||||
{children}
|
||||
</Box>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
const CustomPromptEditor = ({
|
||||
defaultValue = '',
|
||||
defaultPrompt,
|
||||
footerPrompt,
|
||||
onChange,
|
||||
onClose
|
||||
}: {
|
||||
defaultValue?: string;
|
||||
defaultPrompt: string;
|
||||
footerPrompt?: string;
|
||||
onChange: (e: string) => void;
|
||||
onClose: () => void;
|
||||
}) => {
|
||||
const ref = useRef<HTMLTextAreaElement>(null);
|
||||
const { t } = useTranslation();
|
||||
const [value, setValue] = useState(defaultValue || defaultPrompt);
|
||||
|
||||
const adjustHeight = useCallback(() => {
|
||||
const textarea = ref.current;
|
||||
if (!textarea) return;
|
||||
|
||||
textarea.style.height = '22px';
|
||||
textarea.style.height = `${textarea.scrollHeight}px`;
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
adjustHeight();
|
||||
const timer = setTimeout(adjustHeight, 0);
|
||||
return () => clearTimeout(timer);
|
||||
}, [value, adjustHeight]);
|
||||
|
||||
return (
|
||||
<MyModal
|
||||
isOpen
|
||||
onClose={onClose}
|
||||
iconSrc="modal/edit"
|
||||
title={t('app:core.dataset.import.Custom prompt')}
|
||||
w={'100%'}
|
||||
h={'85vh'}
|
||||
isCentered
|
||||
>
|
||||
<ModalBody flex={'1 0 0'} display={'flex'} flexDirection={'column'}>
|
||||
<CustomLightTip />
|
||||
|
||||
<HStack my={3} justifyContent={'space-between'}>
|
||||
<Box fontWeight={'bold'} color={'myGray.600'}>
|
||||
{t('common:core.ai.Prompt')}
|
||||
</Box>
|
||||
|
||||
<Button
|
||||
variant={'grayGhost'}
|
||||
size={'sm'}
|
||||
leftIcon={<MyIcon name={'common/retryLight'} w={'14px'} />}
|
||||
px={2}
|
||||
onClick={() => setValue(defaultPrompt)}
|
||||
>
|
||||
{t('common:common.Reset')}
|
||||
</Button>
|
||||
</HStack>
|
||||
|
||||
<Box
|
||||
flex={'1 0 0'}
|
||||
overflow={'auto'}
|
||||
border="1px solid"
|
||||
borderColor="borderColor.base"
|
||||
borderRadius="md"
|
||||
bg={'myGray.50'}
|
||||
whiteSpace="pre-wrap"
|
||||
fontSize="sm"
|
||||
p={3}
|
||||
>
|
||||
<Textarea
|
||||
ref={ref}
|
||||
value={value}
|
||||
placeholder={t('common:prompt_input_placeholder')}
|
||||
onChange={(e) => setValue(e.target.value)}
|
||||
resize="none"
|
||||
bg="transparent"
|
||||
border="none"
|
||||
p={0}
|
||||
mb={2}
|
||||
_focus={{
|
||||
border: 'none',
|
||||
boxShadow: 'none'
|
||||
}}
|
||||
/>
|
||||
{footerPrompt && <FixBox>{footerPrompt}</FixBox>}
|
||||
</Box>
|
||||
</ModalBody>
|
||||
<ModalFooter>
|
||||
<Flex gap={3}>
|
||||
<Button variant={'whiteBase'} fontWeight={'medium'} onClick={onClose} w={20}>
|
||||
{t('common:common.Close')}
|
||||
</Button>
|
||||
<Button
|
||||
fontWeight={'medium'}
|
||||
onClick={() => {
|
||||
onChange(value.replace(defaultValue, ''));
|
||||
onClose();
|
||||
}}
|
||||
w={20}
|
||||
>
|
||||
{t('common:common.Confirm')}
|
||||
</Button>
|
||||
</Flex>
|
||||
</ModalFooter>
|
||||
</MyModal>
|
||||
);
|
||||
};
|
||||
|
||||
export default CustomPromptEditor;
|
@@ -22,10 +22,13 @@
|
||||
"chat_logs": "Conversation Logs",
|
||||
"chat_logs_tips": "Logs will record the online, shared, and API (requires chatId) conversation records of this app.",
|
||||
"config_file_upload": "Click to Configure File Upload Rules",
|
||||
"config_question_guide": "Configuration guess you want to ask",
|
||||
"confirm_copy_app_tip": "The system will create an app with the same configuration for you, but permissions will not be copied. Please confirm!",
|
||||
"confirm_del_app_tip": "Are you sure you want to delete 【{{name}}】 and all of its chat history?",
|
||||
"confirm_delete_folder_tip": "Confirm to delete this folder? All apps and corresponding conversation records under it will be deleted. Please confirm!",
|
||||
"copy_one_app": "Create Duplicate",
|
||||
"core.app.QG.Switch": "Enable guess what you want to ask",
|
||||
"core.dataset.import.Custom prompt": "Custom Prompt",
|
||||
"create_copy_success": "Duplicate Created Successfully",
|
||||
"create_empty_app": "Create Default App",
|
||||
"create_empty_plugin": "Create Default Plugin",
|
||||
@@ -94,6 +97,7 @@
|
||||
"plugin_dispatch_tip": "Adds extra capabilities to the model. The specific plugins to be invoked will be autonomously decided by the model.\nIf a plugin is selected, the Dataset invocation will automatically be treated as a special plugin.",
|
||||
"publish_channel": "Publish Channel",
|
||||
"publish_success": "Publish Successful",
|
||||
"question_guide_tip": "After the conversation, 3 guiding questions will be generated for you.",
|
||||
"saved_success": "Save Successful",
|
||||
"search_app": "Search Application",
|
||||
"setting_app": "Application Settings",
|
||||
|
@@ -168,6 +168,7 @@
|
||||
"common.Rename": "Rename",
|
||||
"common.Request Error": "Request Error",
|
||||
"common.Require Input": "Required",
|
||||
"common.Reset": "Reset",
|
||||
"common.Restart": "Restart",
|
||||
"common.Role": "Permission",
|
||||
"common.Root folder": "Root Folder",
|
||||
@@ -289,8 +290,12 @@
|
||||
"core.app.Publish": "Publish",
|
||||
"core.app.Publish Confirm": "Confirm to Publish App? This Will Immediately Update the App Status on All Publishing Channels.",
|
||||
"core.app.Publish app tip": "After Publishing the App, All Publishing Channels Will Immediately Use This Version",
|
||||
"core.app.QG.Custom prompt tip": "To ensure the generated content follows the correct format, [Yellow Prompt] cannot be modified",
|
||||
"core.app.QG.Custom prompt tip1": "To ensure the generated content follows the correct format, ",
|
||||
"core.app.QG.Custom prompt tip2": "[Yellow Prompt]",
|
||||
"core.app.QG.Custom prompt tip3": " cannot be modified",
|
||||
"core.app.QG.Fixed Prompt": "Please strictly follow the format rules: \nReturn questions in JSON format: ['Question 1', 'Question 2', 'Question 3'].",
|
||||
"core.app.Question Guide": "Guess What You Want to Ask",
|
||||
"core.app.Question Guide Tip": "After the conversation ends, 3 guiding questions will be generated.",
|
||||
"core.app.Quote prompt": "Quote Template Prompt",
|
||||
"core.app.Quote templates": "Quote Content Templates",
|
||||
"core.app.Random": "Divergent",
|
||||
@@ -967,6 +972,7 @@
|
||||
"plugin.contribute": "Contribute Plugin",
|
||||
"plugin.go to laf": "Go to Write",
|
||||
"plugin.path": "Path",
|
||||
"prompt_input_placeholder": "Please enter the prompt word",
|
||||
"required": "Required",
|
||||
"resume_failed": "Resume Failed",
|
||||
"select_reference_variable": "Select Reference Variable",
|
||||
@@ -1139,6 +1145,7 @@
|
||||
"textarea_variable_picker_tip": "Enter \"/\" to select a variable",
|
||||
"unit.character": "Character",
|
||||
"unit.minute": "Minute",
|
||||
"unit.seconds": "Second",
|
||||
"unusable_variable": "No Usable Variables",
|
||||
"upload_file_error": "File Upload Failed",
|
||||
"user.Account": "Account",
|
||||
|
@@ -22,10 +22,13 @@
|
||||
"chat_logs": "对话日志",
|
||||
"chat_logs_tips": "日志会记录该应用的在线、分享和 API(需填写 chatId)对话记录",
|
||||
"config_file_upload": "点击配置文件上传规则",
|
||||
"config_question_guide": "配置猜你想问",
|
||||
"confirm_copy_app_tip": "系统将为您创建一个相同配置应用,但权限不会进行复制,请确认!",
|
||||
"confirm_del_app_tip": "确认删除 【{{name}}】 及其所有聊天记录?",
|
||||
"confirm_delete_folder_tip": "确认删除该文件夹?将会删除它下面所有应用及对应的聊天记录,请确认!",
|
||||
"copy_one_app": "创建副本",
|
||||
"core.app.QG.Switch": "启用猜你想问",
|
||||
"core.dataset.import.Custom prompt": "自定义提示词",
|
||||
"create_copy_success": "创建副本成功",
|
||||
"create_empty_app": "创建空白应用",
|
||||
"create_empty_plugin": "创建空白插件",
|
||||
@@ -94,6 +97,7 @@
|
||||
"plugin_dispatch_tip": "给模型附加获取外部数据的能力,具体调用哪些插件,将由模型自主决定,所有插件都将以非流模式运行。\n若选择了插件,知识库调用将自动作为一个特殊的插件。",
|
||||
"publish_channel": "发布渠道",
|
||||
"publish_success": "发布成功",
|
||||
"question_guide_tip": "对话结束后,会为你生成 3 个引导性问题。",
|
||||
"saved_success": "保存成功",
|
||||
"search_app": "搜索应用",
|
||||
"setting_app": "应用配置",
|
||||
|
@@ -168,6 +168,7 @@
|
||||
"common.Rename": "重命名",
|
||||
"common.Request Error": "请求异常",
|
||||
"common.Require Input": "必填",
|
||||
"common.Reset": "恢复默认",
|
||||
"common.Restart": "重新开始",
|
||||
"common.Role": "权限",
|
||||
"common.Root folder": "根目录",
|
||||
@@ -288,8 +289,12 @@
|
||||
"core.app.Publish": "发布",
|
||||
"core.app.Publish Confirm": "确认发布应用?会立即更新所有发布渠道的应用状态。",
|
||||
"core.app.Publish app tip": "发布应用后,所有发布渠道将会立即使用该版本",
|
||||
"core.app.QG.Custom prompt tip": "为保证生成的内容遵循正确格式,【黄色部分提示词】不允许修改",
|
||||
"core.app.QG.Custom prompt tip1": "为保证生成的内容遵循正确格式,",
|
||||
"core.app.QG.Custom prompt tip2": "【黄色部分提示词】",
|
||||
"core.app.QG.Custom prompt tip3": "不允许修改",
|
||||
"core.app.QG.Fixed Prompt": "请严格遵循格式规则:以 JSON 格式返回题目:\n['问题1','问题2','问题3']。",
|
||||
"core.app.Question Guide": "猜你想问",
|
||||
"core.app.Question Guide Tip": "对话结束后,会为生成 3 个引导性问题。",
|
||||
"core.app.Quote prompt": "引用模板提示词",
|
||||
"core.app.Quote templates": "引用内容模板",
|
||||
"core.app.Random": "发散",
|
||||
@@ -966,6 +971,7 @@
|
||||
"plugin.contribute": "贡献插件",
|
||||
"plugin.go to laf": "去编写",
|
||||
"plugin.path": "路径",
|
||||
"prompt_input_placeholder": "请输入提示词",
|
||||
"required": "必须",
|
||||
"resume_failed": "恢复失败",
|
||||
"select_reference_variable": "选择引用变量",
|
||||
@@ -1138,6 +1144,7 @@
|
||||
"textarea_variable_picker_tip": "输入\"/\"可选择变量",
|
||||
"unit.character": "字符",
|
||||
"unit.minute": "分钟",
|
||||
"unit.seconds": "秒",
|
||||
"unusable_variable": "无可用变量",
|
||||
"upload_file_error": "上传文件失败",
|
||||
"user.Account": "账号",
|
||||
|
@@ -22,10 +22,13 @@
|
||||
"chat_logs": "對話紀錄",
|
||||
"chat_logs_tips": "紀錄會記錄此應用程式的線上、分享和 API(需填寫 chatId)對話紀錄",
|
||||
"config_file_upload": "點選設定檔案上傳規則",
|
||||
"config_question_guide": "配置猜你想問",
|
||||
"confirm_copy_app_tip": "系統將為您建立一個相同設定的應用程式,但權限不會複製,請確認!",
|
||||
"confirm_del_app_tip": "確認刪除【{{name}}】及其所有聊天紀錄?",
|
||||
"confirm_delete_folder_tip": "確認刪除這個資料夾?將會刪除它底下所有應用程式及對應的對話紀錄,請確認!",
|
||||
"copy_one_app": "建立副本",
|
||||
"core.app.QG.Switch": "啟用猜你想問",
|
||||
"core.dataset.import.Custom prompt": "自訂提示詞",
|
||||
"create_copy_success": "建立副本成功",
|
||||
"create_empty_app": "建立空白應用程式",
|
||||
"create_empty_plugin": "建立空白外掛",
|
||||
@@ -94,6 +97,7 @@
|
||||
"plugin_dispatch_tip": "賦予模型取得外部資料的能力,具體呼叫哪些外掛,將由模型自主決定,所有外掛都將以非串流模式執行。\n若選擇了外掛,知識庫呼叫將自動作為一個特殊的外掛。",
|
||||
"publish_channel": "發布通道",
|
||||
"publish_success": "發布成功",
|
||||
"question_guide_tip": "對話結束後,會為你產生 3 個引導性問題。",
|
||||
"saved_success": "儲存成功",
|
||||
"search_app": "搜尋應用程式",
|
||||
"setting_app": "應用程式設定",
|
||||
|
@@ -168,6 +168,7 @@
|
||||
"common.Rename": "重新命名",
|
||||
"common.Request Error": "請求錯誤",
|
||||
"common.Require Input": "必填",
|
||||
"common.Reset": "恢復預設",
|
||||
"common.Restart": "重新開始",
|
||||
"common.Role": "權限",
|
||||
"common.Root folder": "根目錄",
|
||||
@@ -289,8 +290,12 @@
|
||||
"core.app.Publish": "發布",
|
||||
"core.app.Publish Confirm": "確認發布應用程式?這將立即更新所有發布管道的應用程式狀態。",
|
||||
"core.app.Publish app tip": "發布應用程式後,所有發布管道將立即使用此版本",
|
||||
"core.app.QG.Custom prompt tip": "為確保生成的內容遵循正確格式,【黃色部分提示詞】不允許修改",
|
||||
"core.app.QG.Custom prompt tip1": "為確保生成的內容遵循正確格式,",
|
||||
"core.app.QG.Custom prompt tip2": "【黃色部分提示詞】",
|
||||
"core.app.QG.Custom prompt tip3": "不允許修改",
|
||||
"core.app.QG.Fixed Prompt": "請嚴格遵循格式規則:以 JSON 格式返回題目:\n['問題1','問題2','問題3']。",
|
||||
"core.app.Question Guide": "猜你想問",
|
||||
"core.app.Question Guide Tip": "對話結束後,系統會產生 3 個引導性問題。",
|
||||
"core.app.Quote prompt": "引用範本提示詞",
|
||||
"core.app.Quote templates": "引用內容範本",
|
||||
"core.app.Random": "發散",
|
||||
@@ -966,6 +971,7 @@
|
||||
"plugin.contribute": "貢獻外掛程式",
|
||||
"plugin.go to laf": "前往編寫",
|
||||
"plugin.path": "路徑",
|
||||
"prompt_input_placeholder": "請輸入提示詞",
|
||||
"required": "必填",
|
||||
"resume_failed": "恢復失敗",
|
||||
"select_reference_variable": "選擇引用變數",
|
||||
@@ -1138,6 +1144,7 @@
|
||||
"textarea_variable_picker_tip": "輸入「/」以選擇變數",
|
||||
"unit.character": "字元",
|
||||
"unit.minute": "分鐘",
|
||||
"unit.seconds": "秒",
|
||||
"unusable_variable": "無可用變數",
|
||||
"upload_file_error": "上傳檔案失敗",
|
||||
"user.Account": "帳戶",
|
||||
|
Reference in New Issue
Block a user