feat: application

This commit is contained in:
wangdan-fit2cloud 2025-06-03 19:03:25 +08:00
parent 852313217d
commit b6ef007b45
9 changed files with 467 additions and 391 deletions

View File

@ -0,0 +1,3 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0.833313 7.4004C0.833313 7.04021 1.20266 6.79818 1.53291 6.94197L8.77364 10.0945C8.95607 10.1739 9.07404 10.354 9.07404 10.553V18.339C9.07404 18.7152 8.67435 18.9566 8.34141 18.7816L1.14372 14.9983C1.05096 14.9474 0.973499 14.8738 0.919056 14.7847C0.864612 14.6957 0.835079 14.5943 0.833395 14.4907L0.833313 14.4814V7.4004ZM18.4644 6.93223C18.795 6.78607 19.1666 7.0281 19.1666 7.38952V14.4814C19.1666 14.5866 19.1379 14.6899 19.0833 14.7807C19.0288 14.8715 18.9504 14.9466 18.8562 14.9983L11.6585 18.7816C11.3256 18.9566 10.9259 18.7152 10.9259 18.339L10.9259 10.5912C10.9259 10.3933 11.0427 10.214 11.2237 10.1339L18.4644 6.93223ZM9.69988 1.7434C9.79147 1.69315 9.89483 1.66675 9.99998 1.66675C10.1051 1.66675 10.2085 1.69315 10.3001 1.7434L17.198 4.80727C17.5962 4.98413 17.5934 5.55024 17.1935 5.72316L10.1984 8.74757C10.0718 8.80232 9.92817 8.80232 9.80155 8.74757L2.80644 5.72316C2.40651 5.55025 2.40371 4.98413 2.80191 4.80727L9.69988 1.7434Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,7 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M3.18428 4.04678C3.99599 3.49862 4.93827 3.33337 5.56826 3.33337H12.5001C12.0398 3.33337 11.6667 3.70647 11.6667 4.16671C11.6667 4.62694 12.0398 5.00004 12.5001 5.00004H5.56826C5.17552 5.00004 4.58372 5.11283 4.11702 5.428C3.69634 5.71209 3.33341 6.18316 3.33341 7.06392C3.33341 7.94608 3.69793 8.42805 4.12319 8.72081C4.59235 9.04379 5.18357 9.16132 5.56826 9.16132H14.4978C15.1332 9.16132 16.0634 9.3331 16.8602 9.89052C17.7012 10.4789 18.3334 11.4598 18.3334 12.9079C18.3334 14.3555 17.7017 15.3385 16.8624 15.9298C16.0666 16.4905 15.1362 16.6667 14.4978 16.6667H7.50008C7.96032 16.6667 8.33342 16.2936 8.33342 15.8334C8.33342 15.3731 7.96032 15 7.50008 15H14.4978C14.882 15 15.4529 14.8841 15.9025 14.5673C16.3087 14.2812 16.6667 13.8014 16.6667 12.9079C16.6667 12.0149 16.3092 11.5391 15.9047 11.2562C15.4561 10.9423 14.8851 10.828 14.4978 10.828H5.56826C4.93022 10.828 3.98736 10.6507 3.17811 10.0936C2.32496 9.50629 1.66675 8.52289 1.66675 7.06392C1.66675 5.60354 2.32656 4.62601 3.18428 4.04678Z" fill="white"/>
<path d="M7.50008 15C7.03984 15 6.66675 15.3731 6.66675 15.8334C6.66675 16.2936 7.03984 16.6667 7.50008 16.6667H2.50008C2.03984 16.6667 1.66675 16.2936 1.66675 15.8334C1.66675 15.3731 2.03984 15 2.50008 15H7.50008Z" fill="white"/>
<path d="M12.5001 5.00004C12.9603 5.00004 13.3334 4.62694 13.3334 4.16671C13.3334 3.70647 12.9603 3.33337 12.5001 3.33337H17.4546C17.9148 3.33337 18.2879 3.70647 18.2879 4.16671C18.2879 4.62694 17.9148 5.00004 17.4546 5.00004H12.5001Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5 3.33329C12.0398 3.33329 11.6667 3.70639 11.6667 4.16663C11.6667 4.62686 12.0398 4.99996 12.5 4.99996C12.9602 4.99996 13.3333 4.62686 13.3333 4.16663C13.3333 3.70639 12.9602 3.33329 12.5 3.33329ZM10 4.16663C10 2.78591 11.1193 1.66663 12.5 1.66663C13.8807 1.66663 15 2.78591 15 4.16663C15 5.54734 13.8807 6.66663 12.5 6.66663C11.1193 6.66663 10 5.54734 10 4.16663Z" fill="white"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.5 15C7.03976 15 6.66667 15.3731 6.66667 15.8334C6.66667 16.2936 7.03976 16.6667 7.5 16.6667C7.96024 16.6667 8.33333 16.2936 8.33333 15.8334C8.33333 15.3731 7.96024 15 7.5 15ZM5 15.8334C5 14.4527 6.11929 13.3334 7.5 13.3334C8.88071 13.3334 10 14.4527 10 15.8334C10 17.2141 8.88071 18.3334 7.5 18.3334C6.11929 18.3334 5 17.2141 5 15.8334Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@ -0,0 +1,23 @@
import { h } from 'vue'
export default {
'app-simple-application': {
iconReader: () => {
return h('i', [
h(
'svg',
{
viewBox: '0 0 20 20',
version: '1.1',
xmlns: 'http://www.w3.org/2000/svg',
},
[
h('path', {
d: 'M0.833313 7.4004C0.833313 7.04021 1.20266 6.79818 1.53291 6.94197L8.77364 10.0945C8.95607 10.1739 9.07404 10.354 9.07404 10.553V18.339C9.07404 18.7152 8.67435 18.9566 8.34141 18.7816L1.14372 14.9983C1.05096 14.9474 0.973499 14.8738 0.919056 14.7847C0.864612 14.6957 0.835079 14.5943 0.833395 14.4907L0.833313 14.4814V7.4004ZM18.4644 6.93223C18.795 6.78607 19.1666 7.0281 19.1666 7.38952V14.4814C19.1666 14.5866 19.1379 14.6899 19.0833 14.7807C19.0288 14.8715 18.9504 14.9466 18.8562 14.9983L11.6585 18.7816C11.3256 18.9566 10.9259 18.7152 10.9259 18.339L10.9259 10.5912C10.9259 10.3933 11.0427 10.214 11.2237 10.1339L18.4644 6.93223ZM9.69988 1.7434C9.79147 1.69315 9.89483 1.66675 9.99998 1.66675C10.1051 1.66675 10.2085 1.69315 10.3001 1.7434L17.198 4.80727C17.5962 4.98413 17.5934 5.55024 17.1935 5.72316L10.1984 8.74757C10.0718 8.80232 9.92817 8.80232 9.80155 8.74757L2.80644 5.72316C2.40651 5.55025 2.40371 4.98413 2.80191 4.80727L9.69988 1.7434Z',
fill: 'currentColor',
}),
],
),
])
},
},
}

View File

@ -5,153 +5,152 @@ export default {
copyApplication: 'Copy APP',
workflow: 'WORKFLOW',
simple: 'SIMPLE',
simplePlaceholder: 'Suitable for beginners to create assistant using form settings',
workflowPlaceholder:
'Suitable for advanced users to build complex logic AI assistants using low-code drag-and-drop',
appTest: 'Debug Preview',
copy: 'Copy',
searchBar: {
placeholder: 'Search by name'
placeholder: 'Search by name',
},
setting: {
demo: 'Demo'
demo: 'Demo',
},
delete: {
confirmTitle: 'Are you sure you want to delete this APP: ',
confirmMessage:
'Deleting this APP will no longer provide its services. Please proceed with caution.'
'Deleting this APP will no longer provide its services. Please proceed with caution.',
},
tip: {
ExportError: 'Export Failed',
professionalMessage:
'The Community Edition supports up to 5 APP. If you need more APP, please upgrade to the Professional Edition.',
saveErrorMessage: 'Saving failed, please check your input or try again later',
loadingErrorMessage: 'Failed to load configuration, please check your input or try again later'
loadingErrorMessage: 'Failed to load configuration, please check your input or try again later',
},
applicationForm: {
title: {
appTest: 'Debug Preview',
copy: 'copy'
form: {
appName: {
label: 'Name',
placeholder: 'Please enter the APP name',
requiredMessage: 'APP name is required',
},
form: {
appName: {
label: 'Name',
placeholder: 'Please enter the APP name',
requiredMessage: 'APP name is required'
},
appDescription: {
label: 'Description',
placeholder:
'Describe the APP scenario and use, e.g.: XXX assistant answering user questions about XXX product usage'
},
appType: {
label: 'Type',
simplePlaceholder: 'Suitable for beginners to create assistant.',
workflowPlaceholder: 'Suitable for advanced users to customize the workflow of assistant'
},
appTemplate: {
blankApp: 'Blank APP',
assistantApp: 'Knowledge Assistant'
},
aiModel: {
label: 'AI Model',
placeholder: 'Please select an AI model'
},
roleSettings: {
label: 'System Role',
placeholder: 'You are xxx assistant'
},
prompt: {
label: 'Prompt',
noReferences: 'No references Knowledge',
references: ' (References Knowledge)',
placeholder: 'Please enter prompt',
requiredMessage: 'Please enter prompt',
tooltip:
'By adjusting the content of the prompt, you can guide the direction of the large model chat.',
noReferencesTooltip:
'By adjusting the content of the prompt, you can guide the direction of the large model chat. This prompt will be fixed at the beginning of the context. Variables used: {question} is the question posed by the user.',
referencesTooltip:
'By adjusting the content of the prompt, you can guide the direction of the large model chat. This prompt will be fixed at the beginning of the context. Variables used: {data} carries known information from the knowledge; {question} is the question posed by the user.',
defaultPrompt: `Known information: {data}
Question: {question}
Response requirements:
- Please use concise and professional language to answer the user's question.
`
},
historyRecord: {
label: 'Chat History'
},
relatedKnowledge: {
label: 'Related Knowledge',
placeholder: 'Related knowledge are displayed here'
},
multipleRoundsDialogue: 'Multiple Rounds Dialogue',
prologue: 'Prologue',
defaultPrologue:
'Hello, I am XXX Assistant. You can ask me questions about using XXX.\n- What are the main features of XXX?\n- Which LLM does XXX support?\n- What document types does XXX support?',
problemOptimization: {
label: 'Questions Optimization',
tooltip:
'Optimize the current question based on historical chat to better match knowledge points.'
},
voiceInput: {
label: 'Voice Input',
placeholder: 'Please select a speech recognition model',
requiredMessage: 'Please select a speech input model',
autoSend: 'Automatic Sending'
},
voicePlay: {
label: 'Voice Playback',
placeholder: 'Please select a speech synthesis model',
requiredMessage: 'Please select a speech playback model',
autoPlay: 'Automatic Playback',
browser: 'Browser Playback (free)',
tts: 'TTS Model',
listeningTest: 'Preview'
},
reasoningContent: {
label: 'Output Thinking',
tooltip:
"Please set the thinking label based on the model's return, and the content in the middle of the label will be recognized as the thinking process.",
start: 'Start',
end: 'End'
}
appDescription: {
label: 'Description',
placeholder:
'Describe the APP scenario and use, e.g.: XXX assistant answering user questions about XXX product usage',
},
buttons: {
publish: 'Save&Publish',
addModel: 'Add Model'
appType: {
label: 'Type',
simplePlaceholder: 'Suitable for beginners to create assistant.',
workflowPlaceholder: 'Suitable for advanced users to customize the workflow of assistant',
},
appTemplate: {
blankApp: 'Blank APP',
assistantApp: 'Knowledge Assistant',
},
aiModel: {
label: 'AI Model',
placeholder: 'Please select an AI model',
},
roleSettings: {
label: 'System Role',
placeholder: 'You are xxx assistant',
},
dialog: {
addDataset: 'Add Related Knowledge',
addDatasetPlaceholder: 'The selected knowledge must use the same embedding model',
selected: 'Selected',
countDataset: 'Knowledge',
selectSearchMode: 'Retrieval Mode',
vectorSearch: 'Vector Search',
vectorSearchTooltip:
'Vector search is a retrieval method based on vector distance calculations, suitable for large data volumes in the knowledge.',
fullTextSearch: 'Full-text Search',
fullTextSearchTooltip:
'Full-text search is a retrieval method based on text similarity, suitable for small data volumes in the knowledge.',
hybridSearch: 'Hybrid Search',
hybridSearchTooltip:
'Hybrid search is a retrieval method based on both vector and text similarity, suitable for medium data volumes in the knowledge.',
similarityThreshold: 'Similarity higher than',
similarityTooltip: 'The higher the similarity, the stronger the correlation.',
topReferences: 'Top N Segments',
maxCharacters: 'Maximum Characters per Reference',
noReferencesAction: 'When there are no knowledge references',
continueQuestioning: 'Continue to ask questions to the Al model',
provideAnswer: 'Specify Reply Content',
designated_answer:
'Hello, I am XXX Assistant. My knowledge only contains information related to XXX products. Please rephrase your question.',
defaultPrompt1:
"The content inside the parentheses () represents the user's question. Based on the context, please speculate and complete the user's question ({question}). The requirement is to output a completed question and place it",
defaultPrompt2: 'tag'
}
prompt: {
label: 'Prompt',
noReferences: 'No references Knowledge',
references: ' (References Knowledge)',
placeholder: 'Please enter prompt',
requiredMessage: 'Please enter prompt',
tooltip:
'By adjusting the content of the prompt, you can guide the direction of the large model chat.',
noReferencesTooltip:
'By adjusting the content of the prompt, you can guide the direction of the large model chat. This prompt will be fixed at the beginning of the context. Variables used: {question} is the question posed by the user.',
referencesTooltip:
'By adjusting the content of the prompt, you can guide the direction of the large model chat. This prompt will be fixed at the beginning of the context. Variables used: {data} carries known information from the knowledge; {question} is the question posed by the user.',
defaultPrompt: `Known information: {data}
Question: {question}
Response requirements:
- Please use concise and professional language to answer the user's question.
`,
},
historyRecord: {
label: 'Chat History',
},
relatedKnowledge: {
label: 'Related Knowledge',
placeholder: 'Related knowledge are displayed here',
},
multipleRoundsDialogue: 'Multiple Rounds Dialogue',
prologue: 'Prologue',
defaultPrologue:
'Hello, I am XXX Assistant. You can ask me questions about using XXX.\n- What are the main features of XXX?\n- Which LLM does XXX support?\n- What document types does XXX support?',
problemOptimization: {
label: 'Questions Optimization',
tooltip:
'Optimize the current question based on historical chat to better match knowledge points.',
},
voiceInput: {
label: 'Voice Input',
placeholder: 'Please select a speech recognition model',
requiredMessage: 'Please select a speech input model',
autoSend: 'Automatic Sending',
},
voicePlay: {
label: 'Voice Playback',
placeholder: 'Please select a speech synthesis model',
requiredMessage: 'Please select a speech playback model',
autoPlay: 'Automatic Playback',
browser: 'Browser Playback (free)',
tts: 'TTS Model',
listeningTest: 'Preview',
},
reasoningContent: {
label: 'Output Thinking',
tooltip:
"Please set the thinking label based on the model's return, and the content in the middle of the label will be recognized as the thinking process.",
start: 'Start',
end: 'End',
},
},
buttons: {
publish: 'Save&Publish',
addModel: 'Add Model',
},
dialog: {
addDataset: 'Add Related Knowledge',
addDatasetPlaceholder: 'The selected knowledge must use the same embedding model',
selected: 'Selected',
countDataset: 'Knowledge',
selectSearchMode: 'Retrieval Mode',
vectorSearch: 'Vector Search',
vectorSearchTooltip:
'Vector search is a retrieval method based on vector distance calculations, suitable for large data volumes in the knowledge.',
fullTextSearch: 'Full-text Search',
fullTextSearchTooltip:
'Full-text search is a retrieval method based on text similarity, suitable for small data volumes in the knowledge.',
hybridSearch: 'Hybrid Search',
hybridSearchTooltip:
'Hybrid search is a retrieval method based on both vector and text similarity, suitable for medium data volumes in the knowledge.',
similarityThreshold: 'Similarity higher than',
similarityTooltip: 'The higher the similarity, the stronger the correlation.',
topReferences: 'Top N Segments',
maxCharacters: 'Maximum Characters per Reference',
noReferencesAction: 'When there are no knowledge references',
continueQuestioning: 'Continue to ask questions to the Al model',
provideAnswer: 'Specify Reply Content',
designated_answer:
'Hello, I am XXX Assistant. My knowledge only contains information related to XXX products. Please rephrase your question.',
defaultPrompt1:
"The content inside the parentheses () represents the user's question. Based on the context, please speculate and complete the user's question ({question}). The requirement is to output a completed question and place it",
defaultPrompt2: 'tag',
},
applicationAccess: {
title: 'APP Access',
@ -182,14 +181,14 @@ export default {
encodingAesKeyPlaceholder: 'Please enter EncodingAESKey',
authenticationSuccessful: 'Successful',
urlInfo:
'-APP management-Self-built-Created APP-Receive messages-Set the "URL" received by the API'
'-APP management-Self-built-Created APP-Receive messages-Set the "URL" received by the API',
},
dingtalkSetting: {
title: 'DingTalk Configuration',
clientIdPlaceholder: 'Please enter client ID',
clientSecretPlaceholder: 'Please enter client secret',
urlInfo:
'-On the robot page, set the "Message Receiving Mode" to HTTP mode, and fill in the above URL into the "Message Receiving Address"'
'-On the robot page, set the "Message Receiving Mode" to HTTP mode, and fill in the above URL into the "Message Receiving Address"',
},
wechatSetting: {
title: 'WeChat Configuration',
@ -202,7 +201,7 @@ export default {
aesKey: 'Message Encryption Key',
aesKeyPlaceholder: 'Please enter the message encryption key',
urlInfo:
'-Settings and Development-Basic Configuration-"Server Address URL" in server configuration'
'-Settings and Development-Basic Configuration-"Server Address URL" in server configuration',
},
larkSetting: {
title: 'Lark Configuration',
@ -210,19 +209,19 @@ export default {
appSecretPlaceholder: 'Please enter APP secret',
verificationTokenPlaceholder: 'Please enter verification token',
urlInfo:
'-Events and callbacks - event configuration - configure the "request address" of the subscription method'
'-Events and callbacks - event configuration - configure the "request address" of the subscription method',
},
slackSetting: {
title: 'Slack Configuration',
signingSecretPlaceholder: 'Please enter signing secret',
botUserTokenPlaceholder: 'Please enter bot user token'
botUserTokenPlaceholder: 'Please enter bot user token',
},
copyUrl: 'Copy the link and fill it in'
copyUrl: 'Copy the link and fill it in',
},
hitTest: {
title: 'Retrieval Testing',
text: 'Test the hitting effect of the Knowledge based on the given query text.',
emptyMessage1: 'Retrieval Testing results will show here',
emptyMessage2: 'No matching sections found'
}
emptyMessage2: 'No matching sections found',
},
}

View File

@ -4,145 +4,141 @@ export default {
importApplication: '导入应用',
copyApplication: '复制应用',
workflow: '高级编排',
simple: '简单配置',
simple: '简单应用',
simplePlaceholder: '适用于初级用户使用表单设置构建AI对话助手',
workflowPlaceholder: '适用于高级用户使用低代码拖拉拽方式构建复杂逻辑的AI对话助手',
appTest: '调试预览',
copy: '副本',
searchBar: {
placeholder: '按名称搜索'
placeholder: '按名称搜索',
},
setting: {
demo: '演示'
demo: '演示',
},
delete: {
confirmTitle: '是否删除应用:',
confirmMessage: '删除后该应用将不再提供服务,请谨慎操作。'
confirmMessage: '删除后该应用将不再提供服务,请谨慎操作。',
},
tip: {
ExportError: '导出失败',
professionalMessage: '社区版最多支持 5 个应用,如需拥有更多应用,请升级为专业版。',
saveErrorMessage: '保存失败,请检查输入或稍后再试',
loadingErrorMessage: '加载配置失败,请检查输入或稍后再试'
loadingErrorMessage: '加载配置失败,请检查输入或稍后再试',
},
applicationForm: {
title: {
appTest: '调试预览',
copy: '副本'
form: {
appName: {
label: '名称',
placeholder: '请输入应用名称',
requiredMessage: '请输入应用名称',
},
form: {
appName: {
label: '名称',
placeholder: '请输入应用名称',
requiredMessage: '请输入应用名称'
},
appDescription: {
label: '描述',
placeholder: '描述该应用的应用场景及用途XXX 小助手回答用户提出的 XXX 产品使用问题'
},
appType: {
label: '类型',
simplePlaceholder: '适合新手创建小助手',
workflowPlaceholder: '适合高级用户自定义小助手的工作流'
},
appTemplate: {
blankApp: '空白应用',
assistantApp: '知识库问答助手'
},
aiModel: {
label: 'AI 模型',
placeholder: '请选择 AI 模型'
},
roleSettings: {
label: '系统角色',
placeholder: '你是 xxx 小助手'
},
prompt: {
label: '提示词',
noReferences: ' (无引用知识库)',
references: ' (引用知识库)',
placeholder: '请输入提示词',
requiredMessage: '请输入提示词',
tooltip:
'通过调整提示词内容,可以引导大模型聊天方向,该提示词会被固定在上下文的开头,可以使用变量。',
noReferencesTooltip:
'通过调整提示词内容,可以引导大模型聊天方向,该提示词会被固定在上下文的开头。可以使用变量:{question} 是用户提出问题的占位符。',
referencesTooltip:
'通过调整提示词内容,可以引导大模型聊天方向,该提示词会被固定在上下文的开头。可以使用变量:{data} 是引用知识库中分段的占位符;{question} 是用户提出问题的占位符。',
defaultPrompt: `已知信息:{data}
appDescription: {
label: '描述',
placeholder: '描述该应用的应用场景及用途XXX 小助手回答用户提出的 XXX 产品使用问题',
},
appType: {
label: '类型',
simplePlaceholder: '适合新手创建小助手',
workflowPlaceholder: '适合高级用户自定义小助手的工作流',
},
appTemplate: {
blankApp: '空白应用',
assistantApp: '知识库问答助手',
},
aiModel: {
label: 'AI 模型',
placeholder: '请选择 AI 模型',
},
roleSettings: {
label: '系统角色',
placeholder: '你是 xxx 小助手',
},
prompt: {
label: '提示词',
noReferences: ' (无引用知识库)',
references: ' (引用知识库)',
placeholder: '请输入提示词',
requiredMessage: '请输入提示词',
tooltip:
'通过调整提示词内容,可以引导大模型聊天方向,该提示词会被固定在上下文的开头,可以使用变量。',
noReferencesTooltip:
'通过调整提示词内容,可以引导大模型聊天方向,该提示词会被固定在上下文的开头。可以使用变量:{question} 是用户提出问题的占位符。',
referencesTooltip:
'通过调整提示词内容,可以引导大模型聊天方向,该提示词会被固定在上下文的开头。可以使用变量:{data} 是引用知识库中分段的占位符;{question} 是用户提出问题的占位符。',
defaultPrompt: `已知信息:{data}
{question}
- 使`
},
historyRecord: {
label: '历史聊天记录'
},
relatedKnowledge: {
label: '关联知识库',
placeholder: '关联的知识库展示在这里'
},
multipleRoundsDialogue: '多轮对话',
prologue: '开场白',
defaultPrologue:
'您好,我是 XXX 小助手,您可以向我提出 XXX 使用问题。\n- XXX 主要功能有什么?\n- XXX 如何收费?\n- 需要转人工服务',
problemOptimization: {
label: '问题优化',
tooltip: '根据历史聊天优化完善当前问题,更利于匹配知识点。'
},
voiceInput: {
label: '语音输入',
placeholder: '请选择语音识别模型',
requiredMessage: '请选择语音输入模型',
autoSend: '自动发送'
},
voicePlay: {
label: '语音播放',
placeholder: '请选择语音合成模型',
requiredMessage: '请选择语音播放模型',
autoPlay: '自动播放',
browser: '浏览器播放(免费)',
tts: 'TTS模型',
listeningTest: '试听'
},
reasoningContent: {
label: '输出思考',
tooltip: '请根据模型返回的思考标签设置,标签中间的内容将会认定为思考过程',
start: '开始',
end: '结束'
}
- 使`,
},
buttons: {
publish: '保存并发布',
addModel: '添加模型'
historyRecord: {
label: '历史聊天记录',
},
relatedKnowledge: {
label: '关联知识库',
placeholder: '关联的知识库展示在这里',
},
multipleRoundsDialogue: '多轮对话',
dialog: {
addDataset: '添加关联知识库',
addDatasetPlaceholder: '所选知识库必须使用相同的 Embedding 模型',
selected: '已选',
countDataset: '个知识库',
prologue: '开场白',
defaultPrologue:
'您好,我是 XXX 小助手,您可以向我提出 XXX 使用问题。\n- XXX 主要功能有什么?\n- XXX 如何收费?\n- 需要转人工服务',
selectSearchMode: '检索模式',
vectorSearch: '向量检索',
vectorSearchTooltip: '向量检索是一种基于向量相似度的检索方式,适用于知识库中的大数据量场景。',
fullTextSearch: '全文检索',
fullTextSearchTooltip:
'全文检索是一种基于文本相似度的检索方式,适用于知识库中的小数据量场景。',
hybridSearch: '混合检索',
hybridSearchTooltip:
'混合检索是一种基于向量和文本相似度的检索方式,适用于知识库中的中等数据量场景。',
similarityThreshold: '相似度高于',
similarityTooltip: '相似度越高相关性越强。',
topReferences: '引用分段数 TOP',
maxCharacters: '最多引用字符数',
noReferencesAction: '无引用知识库分段时',
continueQuestioning: '继续向 AI 模型提问',
provideAnswer: '指定回答内容',
designated_answer:
'你好,我是 XXX 小助手,我的知识库只包含了 XXX 产品相关知识,请重新描述您的问题。',
defaultPrompt1:
'()里面是用户问题,根据上下文回答揣测用户问题({question}) 要求: 输出一个补全问题,并且放在',
defaultPrompt2: '标签中'
}
problemOptimization: {
label: '问题优化',
tooltip: '根据历史聊天优化完善当前问题,更利于匹配知识点。',
},
voiceInput: {
label: '语音输入',
placeholder: '请选择语音识别模型',
requiredMessage: '请选择语音输入模型',
autoSend: '自动发送',
},
voicePlay: {
label: '语音播放',
placeholder: '请选择语音合成模型',
requiredMessage: '请选择语音播放模型',
autoPlay: '自动播放',
browser: '浏览器播放(免费)',
tts: 'TTS模型',
listeningTest: '试听',
},
reasoningContent: {
label: '输出思考',
tooltip: '请根据模型返回的思考标签设置,标签中间的内容将会认定为思考过程',
start: '开始',
end: '结束',
},
},
buttons: {
publish: '保存并发布',
addModel: '添加模型',
},
dialog: {
addDataset: '添加关联知识库',
addDatasetPlaceholder: '所选知识库必须使用相同的 Embedding 模型',
selected: '已选',
countDataset: '个知识库',
selectSearchMode: '检索模式',
vectorSearch: '向量检索',
vectorSearchTooltip: '向量检索是一种基于向量相似度的检索方式,适用于知识库中的大数据量场景。',
fullTextSearch: '全文检索',
fullTextSearchTooltip: '全文检索是一种基于文本相似度的检索方式,适用于知识库中的小数据量场景。',
hybridSearch: '混合检索',
hybridSearchTooltip:
'混合检索是一种基于向量和文本相似度的检索方式,适用于知识库中的中等数据量场景。',
similarityThreshold: '相似度高于',
similarityTooltip: '相似度越高相关性越强。',
topReferences: '引用分段数 TOP',
maxCharacters: '最多引用字符数',
noReferencesAction: '无引用知识库分段时',
continueQuestioning: '继续向 AI 模型提问',
provideAnswer: '指定回答内容',
designated_answer:
'你好,我是 XXX 小助手,我的知识库只包含了 XXX 产品相关知识,请重新描述您的问题。',
defaultPrompt1:
'()里面是用户问题,根据上下文回答揣测用户问题({question}) 要求: 输出一个补全问题,并且放在',
defaultPrompt2: '标签中',
},
applicationAccess: {
title: '应用接入',
@ -172,13 +168,13 @@ export default {
tokenPlaceholder: '请输入Token',
encodingAesKeyPlaceholder: '请输入EncodingAESKey',
authenticationSuccessful: '认证成功',
urlInfo: '-应用管理-自建-创建的应用-接收消息-设置 API 接收的 "URL" 中'
urlInfo: '-应用管理-自建-创建的应用-接收消息-设置 API 接收的 "URL" 中',
},
dingtalkSetting: {
title: '钉钉应用配置',
clientIdPlaceholder: '请输入Client ID',
clientSecretPlaceholder: '请输入Client Secret',
urlInfo: '-机器人页面,设置 "消息接收模式" 为 HTTP模式 并把上面URL填写到"消息接收地址"中'
urlInfo: '-机器人页面,设置 "消息接收模式" 为 HTTP模式 并把上面URL填写到"消息接收地址"中',
},
wechatSetting: {
title: '公众号应用配置',
@ -190,7 +186,7 @@ export default {
tokenPlaceholder: '请输入令牌 (TOKEN)',
aesKey: '消息加解密密钥',
aesKeyPlaceholder: '请输入消息加解密密钥',
urlInfo: '-设置与开发-基本配置-服务器配置的 "服务器地址URL" 中'
urlInfo: '-设置与开发-基本配置-服务器配置的 "服务器地址URL" 中',
},
larkSetting: {
title: '飞书应用配置',
@ -198,19 +194,19 @@ export default {
appSecretPlaceholder: '请输入App Secret',
verificationTokenPlaceholder: '请输入Verification Token',
urlInfo: '-事件与回调-事件配置-配置订阅方式的 "请求地址" 中',
folderTokenPlaceholder: '请输入Folder Token'
folderTokenPlaceholder: '请输入Folder Token',
},
slackSetting: {
title: 'Slack 应用配置',
signingSecretPlaceholder: '请输入 Signing Secret',
botUserTokenPlaceholder: '请输入 Bot User Token'
botUserTokenPlaceholder: '请输入 Bot User Token',
},
copyUrl: '复制链接填入到'
copyUrl: '复制链接填入到',
},
hitTest: {
title: '命中测试',
text: '针对用户提问调试段落匹配情况,保障回答效果。',
emptyMessage1: '命中段落显示在这里',
emptyMessage2: '没有命中的分段'
}
emptyMessage2: '没有命中的分段',
},
}

View File

@ -5,143 +5,140 @@ export default {
copyApplication: '複製應用',
workflow: '進階編排',
simple: '簡單配置',
simplePlaceholder: '適用於初級用戶使用表單設定構建AI對話助手',
workflowPlaceholder: '適用於高階用戶使用低代碼拖拉拽方式構建複雜邏輯的AI對話助手',
appTest: '調試預覽',
copy: '副本',
searchBar: {
placeholder: '按名稱搜尋'
placeholder: '按名稱搜尋',
},
setting: {
demo: '示範'
demo: '示範',
},
delete: {
confirmTitle: '是否刪除應用:',
confirmMessage: '刪除後該應用將不再提供服務,請謹慎操作。'
confirmMessage: '刪除後該應用將不再提供服務,請謹慎操作。',
},
tip: {
ExportError: '匯出失敗',
professionalMessage: '社群版最多支援 5 個應用,如需擁有更多應用,請升級為專業版。',
saveErrorMessage: '儲存失敗,請檢查輸入或稍後再試',
loadingErrorMessage: '載入配置失敗,請檢查輸入或稍後再試'
loadingErrorMessage: '載入配置失敗,請檢查輸入或稍後再試',
},
applicationForm: {
title: {
appTest: '調試預覽',
copy: '副本'
form: {
appName: {
label: '名稱',
placeholder: '請輸入應用名稱',
requiredMessage: '請輸入應用名稱',
},
form: {
appName: {
label: '名稱',
placeholder: '請輸入應用名稱',
requiredMessage: '請輸入應用名稱'
},
appDescription: {
label: '描述',
placeholder: '描述該應用的應用場景及用途XXX 小助手回答用戶提出的 XXX 產品使用問題'
},
appType: {
label: '類型',
simplePlaceholder: '適合新手建立小助手',
workflowPlaceholder: '適合高階用戶自訂小助手的工作流程'
},
appTemplate: {
blankApp: '空白應用',
assistantApp: '知識庫問答助手'
},
aiModel: {
label: 'AI 模型',
placeholder: '請選擇 AI 模型'
},
roleSettings: {
label: '角色設定',
placeholder: '你是 xxx 小助手'
},
prompt: {
label: '提示詞',
noReferences: ' (無引用知識庫)',
references: ' (引用知識庫)',
placeholder: '請輸入提示詞',
requiredMessage: '請輸入提示詞',
tooltip:'透過調整提示詞內容,可以引導大模型對話方向,該提示詞會被固定在上下文的開頭。',
noReferencesTooltip:
'透過調整提示詞內容,可以引導大模型對話方向,該提示詞會被固定在上下文的開頭。可以使用變數:{question} 是用戶提出問題的佔位符。',
referencesTooltip:
'透過調整提示詞內容,可以引導大模型對話方向,該提示詞會被固定在上下文的開頭。可以使用變數:{data} 是引用知識庫中分段的佔位符;{question} 是用戶提出問題的佔位符。',
defaultPrompt: `已知資訊:{data}
appDescription: {
label: '描述',
placeholder: '描述該應用的應用場景及用途XXX 小助手回答用戶提出的 XXX 產品使用問題',
},
appType: {
label: '類型',
simplePlaceholder: '適合新手建立小助手',
workflowPlaceholder: '適合高階用戶自訂小助手的工作流程',
},
appTemplate: {
blankApp: '空白應用',
assistantApp: '知識庫問答助手',
},
aiModel: {
label: 'AI 模型',
placeholder: '請選擇 AI 模型',
},
roleSettings: {
label: '角色設定',
placeholder: '你是 xxx 小助手',
},
prompt: {
label: '提示詞',
noReferences: ' (無引用知識庫)',
references: ' (引用知識庫)',
placeholder: '請輸入提示詞',
requiredMessage: '請輸入提示詞',
tooltip: '透過調整提示詞內容,可以引導大模型對話方向,該提示詞會被固定在上下文的開頭。',
noReferencesTooltip:
'透過調整提示詞內容,可以引導大模型對話方向,該提示詞會被固定在上下文的開頭。可以使用變數:{question} 是用戶提出問題的佔位符。',
referencesTooltip:
'透過調整提示詞內容,可以引導大模型對話方向,該提示詞會被固定在上下文的開頭。可以使用變數:{data} 是引用知識庫中分段的佔位符;{question} 是用戶提出問題的佔位符。',
defaultPrompt: `已知資訊:{data}
{question}
- 使`
},
historyRecord: {
label: '歷史對話紀錄'
},
relatedKnowledge: {
label: '關聯知識庫',
placeholder: '關聯的知識庫展示在這裡'
},
multipleRoundsDialogue: '多輪對話',
prologue: '開場白',
defaultPrologue:
'您好,我是 XXX 小助手,您可以向我提出 XXX 使用問題。\n- XXX 主要功能有什麼?\n- XXX 如何收費?\n- 需要轉人工服務',
problemOptimization: {
label: '問題優化',
tooltip: '根據歷史對話優化完善當前問題,更利於匹配知識點。'
},
voiceInput: {
label: '語音輸入',
placeholder: '請選擇語音辨識模型',
requiredMessage: '請選擇語音輸入模型',
autoSend: '自動發送'
},
voicePlay: {
label: '語音播放',
placeholder: '請選擇語音合成模型',
requiredMessage: '請選擇語音播放模型',
autoPlay: '自動播放',
browser: '瀏覽器播放(免費)',
tts: 'TTS模型',
listeningTest: '試聽'
},
reasoningContent: {
label: '輸出思考',
tooltip:'請根據模型返回的思考標簽設置,標簽中間的內容將會認定爲思考過程',
start: '開始',
end: '結束',
}
- 使`,
},
buttons: {
publish: '儲存並發佈',
addModel: '新增模型'
historyRecord: {
label: '歷史對話紀錄',
},
relatedKnowledge: {
label: '關聯知識庫',
placeholder: '關聯的知識庫展示在這裡',
},
multipleRoundsDialogue: '多輪對話',
dialog: {
addDataset: '新增關聯知識庫',
addDatasetPlaceholder: '所選知識庫必須使用相同的 Embedding 模型',
selected: '已選',
countDataset: '個知識庫',
prologue: '開場白',
defaultPrologue:
'您好,我是 XXX 小助手,您可以向我提出 XXX 使用問題。\n- XXX 主要功能有什麼?\n- XXX 如何收費?\n- 需要轉人工服務',
selectSearchMode: '檢索模式',
vectorSearch: '向量檢索',
vectorSearchTooltip: '向量檢索是一種基於向量相似度的檢索方式,適用於知識庫中的大數據量場景。',
fullTextSearch: '全文檢索',
fullTextSearchTooltip:
'全文檢索是一種基於文本相似度的檢索方式,適用於知識庫中的小數據量場景。',
hybridSearch: '混合檢索',
hybridSearchTooltip:
'混合檢索是一種基於向量和文本相似度的檢索方式,適用於知識庫中的中等數據量場景。',
similarityThreshold: '相似度高於',
similarityTooltip: '相似度越高相關性越強。',
topReferences: '引用分段數 TOP',
maxCharacters: '最多引用字元數',
noReferencesAction: '無引用知識庫分段時',
continueQuestioning: '繼續向 AI 模型提問',
provideAnswer: '指定回答內容',
designated_answer:
'你好,我是 XXX 小助手,我的知識庫只包含了 XXX 產品相關知識,請重新描述您的問題。',
defaultPrompt1:
'()裡面是用戶問題,根據上下文回答揣測用戶問題({question}) 要求: 輸出一個補全問題,並且放在',
defaultPrompt2: '標籤中'
}
problemOptimization: {
label: '問題優化',
tooltip: '根據歷史對話優化完善當前問題,更利於匹配知識點。',
},
voiceInput: {
label: '語音輸入',
placeholder: '請選擇語音辨識模型',
requiredMessage: '請選擇語音輸入模型',
autoSend: '自動發送',
},
voicePlay: {
label: '語音播放',
placeholder: '請選擇語音合成模型',
requiredMessage: '請選擇語音播放模型',
autoPlay: '自動播放',
browser: '瀏覽器播放(免費)',
tts: 'TTS模型',
listeningTest: '試聽',
},
reasoningContent: {
label: '輸出思考',
tooltip: '請根據模型返回的思考標簽設置,標簽中間的內容將會認定爲思考過程',
start: '開始',
end: '結束',
},
},
buttons: {
publish: '儲存並發佈',
addModel: '新增模型',
},
dialog: {
addDataset: '新增關聯知識庫',
addDatasetPlaceholder: '所選知識庫必須使用相同的 Embedding 模型',
selected: '已選',
countDataset: '個知識庫',
selectSearchMode: '檢索模式',
vectorSearch: '向量檢索',
vectorSearchTooltip: '向量檢索是一種基於向量相似度的檢索方式,適用於知識庫中的大數據量場景。',
fullTextSearch: '全文檢索',
fullTextSearchTooltip: '全文檢索是一種基於文本相似度的檢索方式,適用於知識庫中的小數據量場景。',
hybridSearch: '混合檢索',
hybridSearchTooltip:
'混合檢索是一種基於向量和文本相似度的檢索方式,適用於知識庫中的中等數據量場景。',
similarityThreshold: '相似度高於',
similarityTooltip: '相似度越高相關性越強。',
topReferences: '引用分段數 TOP',
maxCharacters: '最多引用字元數',
noReferencesAction: '無引用知識庫分段時',
continueQuestioning: '繼續向 AI 模型提問',
provideAnswer: '指定回答內容',
designated_answer:
'你好,我是 XXX 小助手,我的知識庫只包含了 XXX 產品相關知識,請重新描述您的問題。',
defaultPrompt1:
'()裡面是用戶問題,根據上下文回答揣測用戶問題({question}) 要求: 輸出一個補全問題,並且放在',
defaultPrompt2: '標籤中',
},
applicationAccess: {
title: '應用接入',
@ -171,13 +168,13 @@ export default {
tokenPlaceholder: '請輸入Token',
encodingAesKeyPlaceholder: '請輸入EncodingAESKey',
authenticationSuccessful: '認證成功',
urlInfo: '-應用管理-自建-建立的應用-接收消息-設定 API 接收的 "URL" 中'
urlInfo: '-應用管理-自建-建立的應用-接收消息-設定 API 接收的 "URL" 中',
},
dingtalkSetting: {
title: '釘釘應用配置',
clientIdPlaceholder: '請輸入Client ID',
clientSecretPlaceholder: '請輸入Client Secret',
urlInfo: '-機器人頁面,設定 "消息接收模式" 為 HTTP模式 並把上面URL填寫到"消息接收位址"中'
urlInfo: '-機器人頁面,設定 "消息接收模式" 為 HTTP模式 並把上面URL填寫到"消息接收位址"中',
},
wechatSetting: {
title: '公眾號應用配置',
@ -189,26 +186,26 @@ export default {
tokenPlaceholder: '請輸入權杖 (TOKEN)',
aesKey: '消息加解密密鑰',
aesKeyPlaceholder: '請輸入消息加解密密鑰',
urlInfo: '-設定與開發-基本配置-伺服器配置的 "伺服器位址URL" 中'
urlInfo: '-設定與開發-基本配置-伺服器配置的 "伺服器位址URL" 中',
},
larkSetting: {
title: '飛書應用配置',
appIdPlaceholder: '請輸入App ID',
appSecretPlaceholder: '請輸入App Secret',
verificationTokenPlaceholder: '請輸入Verification Token',
urlInfo: '-事件與回呼-事件配置-配置訂閱方式的 "請求位址" 中'
urlInfo: '-事件與回呼-事件配置-配置訂閱方式的 "請求位址" 中',
},
slackSetting: {
title: 'Slack 應用配置',
signingSecretPlaceholder: '請輸入 Signing Secret',
botUserTokenPlaceholder: '請輸入 Bot User Token',
},
copyUrl: '複製連結填入到'
copyUrl: '複製連結填入到',
},
hitTest: {
title: '命中測試',
text: '針對用戶提問調試段落匹配情況,保障回答效果。',
emptyMessage1: '命中的段落顯示在這裡',
emptyMessage2: '沒有命中的分段'
}
emptyMessage2: '沒有命中的分段',
},
}

View File

@ -1,7 +1,7 @@
const ApplicationDetailRouter = {
path: '/application/:id/:type',
name: 'ApplicationDetail',
meta: { title: '应用详情', activeMenu: '/application', breadcrumb: true },
meta: { title: 'views.applicationOverview.title', activeMenu: '/application', breadcrumb: true },
component: () => import('@/layout/layout-template/MainLayout.vue'),
hidden: true,
children: [

View File

@ -56,7 +56,6 @@
}
}
/*
表格第一行插入自定义行
*/
@ -84,3 +83,13 @@
margin-top: 49px;
}
}
.create-dropdown {
width: 280px;
.el-dropdown-menu__item {
padding: 8px 12px;
&:hover {
background: var(--app-text-color-light-1);
}
}
}

View File

@ -41,7 +41,49 @@
<el-option v-for="u in user_options" :key="u.id" :value="u.id" :label="u.username" />
</el-select>
</div>
<el-button class="ml-16" type="primary"> {{ $t('common.create') }}</el-button>
<el-dropdown trigger="click">
<el-button type="primary" class="ml-8">
{{ $t('common.create') }}<el-icon class="el-icon--right"><arrow-down /></el-icon>
</el-button>
<template #dropdown>
<el-dropdown-menu class="create-dropdown">
<el-dropdown-item>
<div class="flex">
<el-avatar shape="square" class="avatar-blue mt-4" :size="36">
<img
src="@/assets/application/icon_simple_application.svg"
style="width: 65%"
alt=""
/>
</el-avatar>
<div class="pre-wrap ml-8">
<div class="lighter">{{ $t('views.application.simple') }}</div>
<el-text type="info" size="small">{{
$t('views.application.simplePlaceholder')
}}</el-text>
</div>
</div>
</el-dropdown-item>
<el-dropdown-item>
<div class="flex">
<el-avatar shape="square" class="avatar-purple mt-4" :size="36">
<img
src="@/assets/application/icon_workflow_application.svg"
style="width: 65%"
alt=""
/>
</el-avatar>
<div class="pre-wrap ml-8">
<div class="lighter">{{ $t('views.application.workflow') }}</div>
<el-text type="info" size="small">{{
$t('views.application.workflowPlaceholder')
}}</el-text>
</div>
</div>
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</div>
</template>
<div>