Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions apps/application/flow/default_workflow.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"node_data": {
"desc": "",
"name": "maxkbapplication",
"code": "",
"prologue": "您好,我是 MaxKB 小助手,您可以向我提出 MaxKB 使用问题。\n- MaxKB 主要功能有什么?\n- MaxKB 支持哪些大语言模型?\n- MaxKB 支持哪些文档类型?"
},
"input_field_list": [
Expand Down
1 change: 1 addition & 0 deletions apps/application/flow/default_workflow_en.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"node_data": {
"desc": "",
"name": "maxkbapplication",
"code": "",
"prologue": "Hello, I am the MaxKB assistant. You can ask me about MaxKB usage issues.\n-What are the main functions of MaxKB?\n-What major language models does MaxKB support?\n-What document types does MaxKB support?"
},
"input_field_list": [
Expand Down
1 change: 1 addition & 0 deletions apps/application/flow/default_workflow_zh.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"node_data": {
"desc": "",
"name": "maxkbapplication",
"code": "",
"prologue": "您好,我是 MaxKB 小助手,您可以向我提出 MaxKB 使用问题。\n- MaxKB 主要功能有什么?\n- MaxKB 支持哪些大语言模型?\n- MaxKB 支持哪些文档类型?"
},
"input_field_list": [
Expand Down
1 change: 1 addition & 0 deletions apps/application/flow/default_workflow_zh_Hant.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
"node_data": {
"desc": "",
"name": "maxkbapplication",
"code": "",
"prologue": "您好,我是 MaxKB 小助手,您可以向我提出 MaxKB 使用問題。\n- MaxKB 主要功能有哪些?\n- MaxKB 支援哪些大型語言模型?\n- MaxKB 支援哪些文件類型?"
},
"input_field_list": [
Expand Down
1 change: 1 addition & 0 deletions apps/application/migrations/0001_initial.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class Migration(migrations.Migration):
('workspace_id', models.CharField(db_index=True, default='default', max_length=64, verbose_name='工作空间id')),
('is_publish', models.BooleanField(default=False, verbose_name='是否发布')),
('name', models.CharField(db_index=True, max_length=128, verbose_name='应用名称')),
('code', models.CharField(max_length=128, verbose_name='应用代码')),
('desc', models.CharField(default='', max_length=512, verbose_name='引用描述')),
('prologue', models.CharField(default='', max_length=40960, verbose_name='开场白')),
('dialogue_number', models.IntegerField(default=0, verbose_name='会话数量')),
Expand Down
2 changes: 2 additions & 0 deletions apps/application/models/application.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ class Application(AppModelMixin):
default='default')
is_publish = models.BooleanField(verbose_name="是否发布", default=False)
name = models.CharField(max_length=128, verbose_name="应用名称", db_index=True)
code = models.CharField(max_length=128, verbose_name="应用代码")
desc = models.CharField(max_length=512, verbose_name="引用描述", default="")
prologue = models.CharField(max_length=40960, verbose_name="开场白", default="")
dialogue_number = models.IntegerField(default=0, verbose_name="会话数量")
Expand Down Expand Up @@ -147,6 +148,7 @@ class ApplicationVersion(AppModelMixin):
publish_user_name = models.CharField(verbose_name="发布者名称", max_length=128, default="")
workspace_id = models.CharField(max_length=64, verbose_name="工作空间id", default="default", db_index=True)
application_name = models.CharField(max_length=128, verbose_name="应用名称")
application_code = models.CharField(max_length=128, verbose_name="应用代码")
desc = models.CharField(max_length=512, verbose_name="引用描述", default="")
prologue = models.CharField(max_length=40960, verbose_name="开场白", default="")
dialogue_number = models.IntegerField(default=0, verbose_name="会话数量")
Expand Down
15 changes: 13 additions & 2 deletions apps/application/serializers/application.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,8 @@ class Meta:
class WorkflowRequest(serializers.Serializer):
name = serializers.CharField(required=True, max_length=64, min_length=1,
label=_("Application Name"))
code = serializers.CharField(required=False, allow_null=True, allow_blank=True,
max_length=64, label=_("Application Code"))
desc = serializers.CharField(required=False, allow_null=True, allow_blank=True,
max_length=256, min_length=1,
label=_("Application Description"))
Expand All @@ -215,10 +217,12 @@ def to_application_model(user_id: str, workspace_id: str, application: Dict):
if node.get('id') == 'base-node':
node.get('properties')['node_data']['desc'] = application.get('desc')
node.get('properties')['node_data']['name'] = application.get('name')
node.get('properties')['node_data']['code'] = application.get('code')
node.get('properties')['node_data']['prologue'] = application.get('prologue')
return Application(
id=uuid.uuid7(),
name=application.get('name'),
code=application.get('code'),
desc=application.get('desc'),
workspace_id=workspace_id,
folder_id=application.get('folder_id', application.get('workspace_id')),
Expand All @@ -243,6 +247,8 @@ def to_application_model(user_id: str, workspace_id: str, application: Dict):
class SimplateRequest(serializers.Serializer):
name = serializers.CharField(required=True, max_length=64, min_length=1,
label=_("application name"))
code = serializers.CharField(required=False, allow_null=True, allow_blank=True,
max_length=64, label=_("application code"))
desc = serializers.CharField(required=False, allow_null=True, allow_blank=True,
max_length=256, min_length=1,
label=_("application describe"))
Expand Down Expand Up @@ -303,6 +309,7 @@ def to_application_model(user_id: str, workspace_id: str, application: Dict):
return Application(
id=uuid.uuid7(),
name=application.get('name'),
code=application.get('code'),
desc=application.get('desc'),
workspace_id=workspace_id,
prologue=application.get('prologue'),
Expand Down Expand Up @@ -454,6 +461,8 @@ class ApplicationImportRequest(serializers.Serializer):
class ApplicationEditSerializer(serializers.Serializer):
name = serializers.CharField(required=False, max_length=64, min_length=1,
label=_("Application Name"))
code = serializers.CharField(required=False, allow_null=True, allow_blank=True,
max_length=64, label=_("Application Code"))
desc = serializers.CharField(required=False, max_length=256, min_length=1, allow_null=True, allow_blank=True,
label=_("Application Description"))
model_id = serializers.CharField(required=False, allow_blank=True, allow_null=True,
Expand Down Expand Up @@ -706,6 +715,7 @@ def to_application(application, workspace_id, user_id, update_tool_map, folder_i
return Application(id=uuid.uuid7(),
user_id=user_id,
name=application.get('name'),
code=application.get('code'),
workspace_id=workspace_id,
folder_id=folder_id,
desc=application.get('desc'),
Expand Down Expand Up @@ -917,7 +927,7 @@ def to_tool_dict(tool, tool_workflow_dict):
@staticmethod
def reset_application_version(application_version, application):
update_field_dict = {
'application_name': 'name', 'desc': 'desc', 'prologue': 'prologue', 'dialogue_number': 'dialogue_number',
'application_name': 'name', 'application_code': 'code', 'desc': 'desc', 'prologue': 'prologue', 'dialogue_number': 'dialogue_number',
'user_id': 'user_id', 'model_id': 'model_id', 'knowledge_setting': 'knowledge_setting',
'model_setting': 'model_setting', 'model_params_setting': 'model_params_setting',
'tts_model_params_setting': 'tts_model_params_setting',
Expand Down Expand Up @@ -959,6 +969,7 @@ def publish(self, instance, with_valid=True):
node_data = base_node.get('properties').get('node_data')
if node_data is not None:
application.name = node_data.get('name')
application.code = node_data.get('code')
application.desc = node_data.get('desc')
application.prologue = node_data.get('prologue')
application.work_flow = work_flow
Expand Down Expand Up @@ -1099,7 +1110,7 @@ def edit(self, instance: Dict, with_valid=True):
self.update_work_flow_model(instance)
if 'mcp_servers' in instance and len(instance.get('mcp_servers', {})) > 0:
ToolExecutor().validate_mcp_transport(json.dumps(instance.get('mcp_servers')))
update_keys = ['name', 'desc', 'model_id', 'multiple_rounds_dialogue', 'prologue', 'status',
update_keys = ['name', 'code', 'desc', 'model_id', 'multiple_rounds_dialogue', 'prologue', 'status',
'knowledge_setting', 'model_setting', 'problem_optimization', 'dialogue_number',
'stt_model_id', 'tts_model_id', 'tts_model_enable', 'stt_model_enable', 'tts_type',
'tts_autoplay', 'stt_autosend', 'file_upload_enable', 'file_upload_setting',
Expand Down
2 changes: 1 addition & 1 deletion apps/chat/mcp/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def list_tools(self):
return {
"tools": [
{
"name": f'agent_{str(self.application.id)[:8]}',
"name": f'agent_{str(self.application.id)[:8]}' + (f'_{self.application.code}' if self.application.code else ''),
"description": f'{self.application.name} {self.application.desc}',
"inputSchema": {
"type": "object",
Expand Down
2 changes: 1 addition & 1 deletion apps/chat/serializers/chat_authentication.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ class ApplicationProfileSerializer(serializers.Serializer):
@staticmethod
def reset_application(application, application_version):
update_field_dict = {
'application_name': 'name', 'desc': 'desc', 'prologue': 'prologue', 'dialogue_number': 'dialogue_number',
'application_name': 'name', 'application_code': 'code', 'desc': 'desc', 'prologue': 'prologue', 'dialogue_number': 'dialogue_number',
'user_id': 'user_id', 'model_id': 'model_id', 'knowledge_setting': 'knowledge_setting',
'model_setting': 'model_setting', 'model_params_setting': 'model_params_setting',
'tts_model_params_setting': 'tts_model_params_setting',
Expand Down
1 change: 1 addition & 0 deletions ui/src/api/type/application.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import bus from '@/bus'

interface ApplicationFormType {
name?: string
code?: string
desc?: string
model_id?: string
dialogue_number?: number
Expand Down
1 change: 1 addition & 0 deletions ui/src/locales/lang/en-US/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export default {
private: 'Private',
paramSetting: 'Parameter Settings',
name: 'Name',
code: 'Code',
creator: 'Creator',
createdIn: 'created in',
author: 'Author',
Expand Down
3 changes: 3 additions & 0 deletions ui/src/locales/lang/en-US/views/application.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,9 @@ After disabling, the long-term memory of the conversation users will be cleared,
placeholder: 'Please enter the agent name',
requiredMessage: 'Agent name is required',
},
appCode: {
placeholder: 'Please enter the agent code: [a-zA-Z0-9_-]',
},
appDescription: {
placeholder:
'Describe the Agent scenario and use, e.g.: XXX assistant answering user questions about XXX product usage',
Expand Down
1 change: 1 addition & 0 deletions ui/src/locales/lang/zh-CN/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ export default {
private: '私有',
paramSetting: '参数设置',
name: '名称',
code: '代码',
creator: '创建者',
createdIn: '创建于',
author: '作者',
Expand Down
3 changes: 3 additions & 0 deletions ui/src/locales/lang/zh-CN/views/application.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ export default {
placeholder: '请输入智能体名称',
requiredMessage: '请输入智能体名称',
},
appCode: {
placeholder: '请输入智能体代码: [a-zA-Z0-9_-]',
},
appDescription: {
placeholder: '描述该智能体的应用场景及用途,如:XXX 小助手回答用户提出的 XXX 产品使用问题',
},
Expand Down
1 change: 1 addition & 0 deletions ui/src/locales/lang/zh-Hant/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export default {
private: '私有',
paramSetting: '參數設定',
name: '名稱',
code: '代碼',
creator: '建立者',
createdIn: '創建於',
author: '作者',
Expand Down
3 changes: 3 additions & 0 deletions ui/src/locales/lang/zh-Hant/views/application.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ export default {
placeholder: '請輸入智能體名稱',
requiredMessage: '請輸入智能體名稱',
},
appCode: {
placeholder: '請輸入智能體代碼: [a-zA-Z0-9_-]',
},
appDescription: {
placeholder: '描述該智能體的應用場景及用途,如:XXX 小助手回答用戶提出的 XXX 產品使用問題',
},
Expand Down
1 change: 1 addition & 0 deletions ui/src/views/application/ApplicationSetting.vue
Original file line number Diff line number Diff line change
Expand Up @@ -1014,6 +1014,7 @@ const knowledgeLoading = ref(false)
const applicationForm = ref<ApplicationFormType>({
name: '',
code: '',
desc: '',
model_id: '',
dialogue_number: 1,
Expand Down
2 changes: 2 additions & 0 deletions ui/src/views/application/component/CopyApplicationDialog.vue
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ const dialogVisible = ref<boolean>(false)

const applicationForm = ref<ApplicationFormType>({
name: '',
code: '',
desc: '',
model_id: '',
dialogue_number: 0,
Expand Down Expand Up @@ -109,6 +110,7 @@ watch(dialogVisible, (bool) => {
if (!bool) {
applicationForm.value = {
name: '',
code: '',
desc: '',
model_id: '',
dialogue_number: 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ const work_flow_template = ref()

const applicationForm = ref<ApplicationFormType>({
name: '',
code: '',
desc: '',
model_id: undefined,
dialogue_number: 1,
Expand Down Expand Up @@ -185,6 +186,7 @@ watch(dialogVisible, (bool) => {
if (!bool) {
applicationForm.value = {
name: '',
code: '',
desc: '',
model_id: undefined,
dialogue_number: 1,
Expand Down
2 changes: 2 additions & 0 deletions ui/src/workflow/common/data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ export const baseNode = {
input_field_list: [],
node_data: {
name: '',
code: '',
desc: '',
prologue: t('views.application.form.defaultPrologue'),
tts_type: 'BROWSER',
Expand All @@ -69,6 +70,7 @@ export const knowledgeBaseNode = {
input_field_list: [],
node_data: {
name: '',
code: '',
desc: '',
prologue: t('views.application.form.defaultPrologue'),
tts_type: 'BROWSER',
Expand Down
2 changes: 2 additions & 0 deletions ui/src/workflow/common/template.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export const applicationTemplate: any = {
node_data: {
desc: '模板',
name: '知识库问答助手',
code: '',
prologue:
'您好,我是 XXX 小助手,您可以向我提出 XXX 使用问题。\n- XXX 主要功能有什么?\n- XXX 如何收费?\n- 需要转人工服务',
tts_type: 'BROWSER',
Expand Down Expand Up @@ -800,6 +801,7 @@ export const knowledgeTemplate: any = {
node_data: {
desc: '',
name: '',
code: '',
prologue:
'\u60a8\u597d\uff0c\u6211\u662f XXX \u5c0f\u52a9\u624b\uff0c\u60a8\u53ef\u4ee5\u5411\u6211\u63d0\u51fa XXX \u4f7f\u7528\u95ee\u9898\u3002\n- XXX \u4e3b\u8981\u529f\u80fd\u6709\u4ec0\u4e48\uff1f\n- XXX \u5982\u4f55\u6536\u8d39\uff1f\n- \u9700\u8981\u8f6c\u4eba\u5de5\u670d\u52a1',
tts_type: 'BROWSER',
Expand Down
13 changes: 13 additions & 0 deletions ui/src/workflow/nodes/base-node/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,18 @@
@blur="form_data.name = form_data.name?.trim()"
/>
</el-form-item>
<el-form-item
:label="$t('common.code')"
prop="code"
>
<el-input
v-model="form_data.code"
maxlength="64"
:placeholder="t('views.application.form.appCode.placeholder')"
show-word-limit
@blur="form_data.code = form_data.code?.replaceAll(/[^a-zA-Z0-9_-\s]+/g, '').trim().replaceAll(/\s+/g, '_')"
Copy link
Copy Markdown
Contributor Author

@wangliang181230 wangliang181230 May 8, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@blur 自动移除非 数字、字母、横线、下划线 的字符,并将连续空白符替换为下划线。

/>
</el-form-item>
<el-form-item :label="$t('common.desc')">
<el-input
v-model="form_data.desc"
Expand Down Expand Up @@ -263,6 +275,7 @@ const FileUploadSettingDialogRef = ref<InstanceType<typeof FileUploadSettingDial

const form = {
name: '',
code: '',
desc: '',
prologue: t('views.application.form.defaultPrologue'),
}
Expand Down
Loading