diff --git a/ui/src/components/ai-chat/component/answer-content/index.vue b/ui/src/components/ai-chat/component/answer-content/index.vue
index 00fcfacf85a..0836c79934e 100644
--- a/ui/src/components/ai-chat/component/answer-content/index.vue
+++ b/ui/src/components/ai-chat/component/answer-content/index.vue
@@ -1,5 +1,6 @@
 <template>
   <div class="item-content mb-16 lighter">
+    
     <template v-for="(answer_text, index) in answer_text_list" :key="index">
       <div class="avatar mr-8" v-if="application.show_avatar">
         <img v-if="application.avatar" :src="application.avatar" height="28px" width="28px" />
diff --git a/ui/src/components/ai-chat/component/chat-input-operate/TouchChat.vue b/ui/src/components/ai-chat/component/chat-input-operate/TouchChat.vue
index d2cc7eee16e..b2941d77e35 100644
--- a/ui/src/components/ai-chat/component/chat-input-operate/TouchChat.vue
+++ b/ui/src/components/ai-chat/component/chat-input-operate/TouchChat.vue
@@ -8,6 +8,7 @@
       @touchstart="onTouchStart"
       @touchmove="onTouchMove"
       @touchend="onTouchEnd"
+      :disabled="props.disabled"
     >
       按住说话
     </el-button>
@@ -47,6 +48,10 @@ const props = defineProps({
   start: {
     type: Boolean,
     default: false
+  },
+  disabled: {
+    type: Boolean,
+    default: false
   }
 })
 const emit = defineEmits(['TouchStart', 'TouchEnd'])
@@ -57,11 +62,19 @@ const dialogVisible = ref(false)
 const message = ref('按住说话')
 
 watch(
-  () => props.time,
-  (val) => {
-    if (val && val === 60) {
+  () => [props.time, props.start],
+  ([time, start]) => {
+    if (start) {
+      isTouching.value = true
+      dialogVisible.value = true
+      message.value = '松开发送,上滑取消'
+      if (time === 60) {
+        dialogVisible.value = false
+        emit('TouchEnd', isTouching.value)
+        isTouching.value = false
+      }
+    } else {
       dialogVisible.value = false
-      emit('TouchEnd', isTouching.value)
       isTouching.value = false
     }
   }
diff --git a/ui/src/components/ai-chat/component/chat-input-operate/index.vue b/ui/src/components/ai-chat/component/chat-input-operate/index.vue
index 71ae6905e74..b4a15a9dcd0 100644
--- a/ui/src/components/ai-chat/component/chat-input-operate/index.vue
+++ b/ui/src/components/ai-chat/component/chat-input-operate/index.vue
@@ -120,6 +120,7 @@
           @TouchEnd="TouchEnd"
           :time="recorderTime"
           :start="!mediaRecorderStatus"
+          :disabled="loading"
         />
         <el-input
           v-else
@@ -149,7 +150,12 @@
               </el-button>
             </span>
             <span class="flex align-center" v-else>
-              <el-button text @click="startRecording" v-if="mediaRecorderStatus">
+              <el-button
+                :disabled="loading"
+                text
+                @click="startRecording"
+                v-if="mediaRecorderStatus"
+              >
                 <el-icon>
                   <Microphone />
                 </el-icon>
@@ -166,7 +172,7 @@
             </span>
           </template>
 
-          <template v-if="!startRecorderTime && !recorderLoading">
+          <template v-if="(!startRecorderTime && !recorderLoading) || mode === 'mobile'">
             <span v-if="props.applicationDetails.file_upload_enable" class="flex align-center ml-4">
               <el-upload
                 action="#"
@@ -515,7 +521,12 @@ const stopRecording = () => {
 // 上传录音文件
 const uploadRecording = async (audioBlob: Blob) => {
   try {
+    // 非自动发送切换输入框
+    if (!props.applicationDetails.stt_autosend) {
+      isMicrophone.value = false
+    }
     recorderLoading.value = true
+
     const formData = new FormData()
     formData.append('file', audioBlob, 'recording.mp3')
     applicationApi
diff --git a/ui/src/components/dynamics-form/items/label/TooltipLabel.vue b/ui/src/components/dynamics-form/items/label/TooltipLabel.vue
index 2ca9911f4f5..035b6bd6f3a 100644
--- a/ui/src/components/dynamics-form/items/label/TooltipLabel.vue
+++ b/ui/src/components/dynamics-form/items/label/TooltipLabel.vue
@@ -17,26 +17,4 @@ defineProps<{
   tooltip: string
 }>()
 </script>
-<style lang="scss" scoped>
-.aiMode-param-dialog {
-  padding: 8px 8px 24px 8px;
-
-  .el-dialog__header {
-    padding: 16px 16px 0 16px;
-  }
-
-  .el-dialog__body {
-    padding: 16px !important;
-  }
-
-  .dialog-max-height {
-    height: 550px;
-  }
-
-  .custom-slider {
-    .el-input-number.is-without-controls .el-input__wrapper {
-      padding: 0 !important;
-    }
-  }
-}
-</style>
+<style lang="scss" scoped></style>
diff --git a/ui/src/locales/lang/zh-CN/views/dataset.ts b/ui/src/locales/lang/zh-CN/views/dataset.ts
index e68b55fbe77..d9f9271bae5 100644
--- a/ui/src/locales/lang/zh-CN/views/dataset.ts
+++ b/ui/src/locales/lang/zh-CN/views/dataset.ts
@@ -34,7 +34,7 @@ export default {
       datasetName: {
         label: '知识库名称',
         placeholder: '请输入知识库名称',
-        requiredMessage: '请输入应用名称'
+        requiredMessage: '请输入知识库名称'
       },
       datasetDescription: {
         label: '知识库描述',
diff --git a/ui/src/locales/lang/zh-Hant/views/dataset.ts b/ui/src/locales/lang/zh-Hant/views/dataset.ts
index e6e63eb7903..39a5ad7b075 100644
--- a/ui/src/locales/lang/zh-Hant/views/dataset.ts
+++ b/ui/src/locales/lang/zh-Hant/views/dataset.ts
@@ -33,7 +33,7 @@ export default {
       datasetName: {
         label: '知識庫名稱',
         placeholder: '請輸入知識庫名稱',
-        requiredMessage: '請輸入應用名稱'
+        requiredMessage: '請輸入知識庫名稱'
       },
       datasetDescription: {
         label: '知識庫描述',
diff --git a/ui/src/styles/app.scss b/ui/src/styles/app.scss
index 0f077b84eab..8646670b07a 100644
--- a/ui/src/styles/app.scss
+++ b/ui/src/styles/app.scss
@@ -772,3 +772,22 @@ h5 {
   background: #d6e2ff;
   line-height: 25px;
 }
+
+// 参数设置dialog
+.param-dialog {
+  padding: 8px 8px 24px 8px;
+  .el-dialog__header {
+    padding: 16px 16px 0 16px;
+  }
+  .el-dialog__body {
+    padding: 0 !important;
+  }
+  .dialog-max-height {
+    height: 550px;
+  }
+  .custom-slider {
+    .el-input-number.is-without-controls .el-input__wrapper {
+      padding: 0 !important;
+    }
+  }
+}
diff --git a/ui/src/views/application/component/AIModeParamSettingDialog.vue b/ui/src/views/application/component/AIModeParamSettingDialog.vue
index a42399209c7..d561dcfead3 100644
--- a/ui/src/views/application/component/AIModeParamSettingDialog.vue
+++ b/ui/src/views/application/component/AIModeParamSettingDialog.vue
@@ -2,7 +2,7 @@
   <el-dialog
     align-center
     :title="$t('common.paramSetting')"
-    class="aiMode-param-dialog"
+    class="param-dialog"
     v-model="dialogVisible"
     style="width: 550px"
     append-to-body
@@ -89,26 +89,4 @@ const submit = async () => {
 defineExpose({ open, reset_default })
 </script>
 
-<style lang="scss" scoped>
-.aiMode-param-dialog {
-  padding: 8px 8px 24px 8px;
-
-  .el-dialog__header {
-    padding: 16px 16px 0 16px;
-  }
-
-  .el-dialog__body {
-    padding: 16px !important;
-  }
-
-  .dialog-max-height {
-    height: 550px;
-  }
-
-  .custom-slider {
-    .el-input-number.is-without-controls .el-input__wrapper {
-      padding: 0 !important;
-    }
-  }
-}
-</style>
+<style lang="scss" scoped></style>
diff --git a/ui/src/views/application/component/AddDatasetDialog.vue b/ui/src/views/application/component/AddDatasetDialog.vue
index 71cd9ff9ab8..10536c16f72 100644
--- a/ui/src/views/application/component/AddDatasetDialog.vue
+++ b/ui/src/views/application/component/AddDatasetDialog.vue
@@ -144,7 +144,7 @@ const refresh = () => {
 
 defineExpose({ open })
 </script>
-<style lang="scss" scoped>
+<style lang="scss">
 .addDataset-dialog {
   padding: 0;
   .el-dialog__header {
diff --git a/ui/src/views/application/component/McpServersDialog.vue b/ui/src/views/application/component/McpServersDialog.vue
index bdd6008e85d..c082a328c05 100644
--- a/ui/src/views/application/component/McpServersDialog.vue
+++ b/ui/src/views/application/component/McpServersDialog.vue
@@ -9,13 +9,21 @@
     :close-on-click-modal="false"
     :close-on-press-escape="false"
   >
-    <el-form label-position="top" ref="paramFormRef" :model="form"
-             require-asterisk-position="right">
+    <el-form
+      label-position="top"
+      ref="paramFormRef"
+      :model="form"
+      require-asterisk-position="right"
+    >
       <el-form-item label="MCP" prop="mcp_enable">
         <el-switch v-model="form.mcp_enable" />
       </el-form-item>
-      <el-form-item v-if="form.mcp_enable" label="MCP Server Config" prop="mcp_servers"
-                    :rules="[{ required: true, message: $t('common.required') }]">
+      <el-form-item
+        v-if="form.mcp_enable"
+        label="MCP Server Config"
+        prop="mcp_servers"
+        :rules="[{ required: true, message: $t('common.required') }]"
+      >
         <el-input
           v-model="form.mcp_servers"
           :rows="6"
@@ -49,7 +57,6 @@ const mcpServerJson = `{
   }
 }`
 
-
 const form = ref<any>({
   mcp_servers: '',
   mcp_enable: false
@@ -82,26 +89,4 @@ const submit = () => {
 
 defineExpose({ open })
 </script>
-<style lang="scss" scoped>
-.param-dialog {
-  padding: 8px 8px 24px 8px;
-
-  .el-dialog__header {
-    padding: 16px 16px 0 16px;
-  }
-
-  .el-dialog__body {
-    padding: 0 !important;
-  }
-
-  .dialog-max-height {
-    height: 560px;
-  }
-
-  .custom-slider {
-    .el-input-number.is-without-controls .el-input__wrapper {
-      padding: 0 !important;
-    }
-  }
-}
-</style>
+<style lang="scss" scoped></style>
diff --git a/ui/src/views/application/component/ParamSettingDialog.vue b/ui/src/views/application/component/ParamSettingDialog.vue
index ca4d2213449..678e4db8a59 100644
--- a/ui/src/views/application/component/ParamSettingDialog.vue
+++ b/ui/src/views/application/component/ParamSettingDialog.vue
@@ -326,22 +326,6 @@ function changeHandle(val: string) {
 
 defineExpose({ open })
 </script>
-<style lang="scss" scoped>
-.param-dialog {
-  padding: 8px 8px 24px 8px;
-  .el-dialog__header {
-    padding: 16px 16px 0 16px;
-  }
-  .el-dialog__body {
-    padding: 0 !important;
-  }
-  .dialog-max-height {
-    height: 560px;
-  }
-  .custom-slider {
-    .el-input-number.is-without-controls .el-input__wrapper {
-      padding: 0 !important;
-    }
-  }
-}
+<style lang="scss">
+
 </style>
diff --git a/ui/src/views/application/component/ReasoningParamSettingDialog.vue b/ui/src/views/application/component/ReasoningParamSettingDialog.vue
index 3d318cf267c..2ebc87b62de 100644
--- a/ui/src/views/application/component/ReasoningParamSettingDialog.vue
+++ b/ui/src/views/application/component/ReasoningParamSettingDialog.vue
@@ -84,26 +84,4 @@ const submit = () => {
 
 defineExpose({ open })
 </script>
-<style lang="scss" scoped>
-.param-dialog {
-  padding: 8px 8px 24px 8px;
-
-  .el-dialog__header {
-    padding: 16px 16px 0 16px;
-  }
-
-  .el-dialog__body {
-    padding: 0 !important;
-  }
-
-  .dialog-max-height {
-    height: 560px;
-  }
-
-  .custom-slider {
-    .el-input-number.is-without-controls .el-input__wrapper {
-      padding: 0 !important;
-    }
-  }
-}
-</style>
+<style lang="scss" scoped></style>
diff --git a/ui/src/views/application/component/TTSModeParamSettingDialog.vue b/ui/src/views/application/component/TTSModeParamSettingDialog.vue
index 7534345adae..dfd6d28871c 100644
--- a/ui/src/views/application/component/TTSModeParamSettingDialog.vue
+++ b/ui/src/views/application/component/TTSModeParamSettingDialog.vue
@@ -2,9 +2,9 @@
   <el-dialog
     align-center
     :title="$t('common.paramSetting')"
-    class="aiMode-param-dialog"
     v-model="dialogVisible"
     style="width: 550px"
+    class="param-dialog"
     append-to-body
     :close-on-click-modal="false"
     :close-on-press-escape="false"
@@ -25,7 +25,6 @@
           <el-button @click="testPlay" :loading="playLoading">
             <AppIcon iconName="app-video-play" class="mr-4"></AppIcon>
             {{ $t('views.application.applicationForm.form.voicePlay.listeningTest') }}
-            
           </el-button>
         </span>
         <span class="dialog-footer p-16">
@@ -77,15 +76,17 @@ const open = (model_id: string, application_id?: string, model_setting_data?: an
   api.then((ok) => {
     model_form_field.value = ok.data
     const resp = ok.data
-      .map((item: any) => ({ [item.field]: item.show_default_value !== false ? item.default_value : undefined }))
+      .map((item: any) => ({
+        [item.field]: item.show_default_value !== false ? item.default_value : undefined
+      }))
       .reduce((x, y) => ({ ...x, ...y }), {})
     // 删除不存在的字段
     if (model_setting_data) {
-      Object.keys(model_setting_data).forEach(key => {
+      Object.keys(model_setting_data).forEach((key) => {
         if (!(key in resp)) {
-          delete model_setting_data[key];
+          delete model_setting_data[key]
         }
-      });
+      })
     }
     model_setting_data = { ...resp, ...model_setting_data }
     // 渲染动态表单
@@ -99,7 +100,9 @@ const reset_default = (model_id: string, application_id?: string) => {
   api.then((ok) => {
     model_form_field.value = ok.data
     const model_setting_data = ok.data
-      .map((item) => ({ [item.field]: item.show_default_value !== false ? item.default_value : undefined }))
+      .map((item) => ({
+        [item.field]: item.show_default_value !== false ? item.default_value : undefined
+      }))
       .reduce((x, y) => ({ ...x, ...y }), {})
 
     emit('refresh', model_setting_data)
@@ -149,26 +152,4 @@ const testPlay = () => {
 defineExpose({ open, reset_default })
 </script>
 
-<style lang="scss" scoped>
-.aiMode-param-dialog {
-  padding: 8px 8px 24px 8px;
-
-  .el-dialog__header {
-    padding: 16px 16px 0 16px;
-  }
-
-  .el-dialog__body {
-    padding: 16px !important;
-  }
-
-  .dialog-max-height {
-    height: 550px;
-  }
-
-  .custom-slider {
-    .el-input-number.is-without-controls .el-input__wrapper {
-      padding: 0 !important;
-    }
-  }
-}
-</style>
+<style lang="scss" scoped></style>
diff --git a/ui/src/views/function-lib/component/AddInternalFunctionDialog.vue b/ui/src/views/function-lib/component/AddInternalFunctionDialog.vue
index 4e4ab0e31ce..42c9b0eb5dd 100644
--- a/ui/src/views/function-lib/component/AddInternalFunctionDialog.vue
+++ b/ui/src/views/function-lib/component/AddInternalFunctionDialog.vue
@@ -16,7 +16,7 @@
       require-asterisk-position="right"
     >
       <el-form-item prop="name">
-        <el-input v-model="form.name"></el-input>
+        <el-input v-model="form.name" maxlength="64" show-word-limit></el-input>
       </el-form-item>
     </el-form>
     <template #footer>
diff --git a/ui/src/workflow/nodes/reranker-node/ParamSettingDialog.vue b/ui/src/workflow/nodes/reranker-node/ParamSettingDialog.vue
index 8756fe9c3a7..42cc546f661 100644
--- a/ui/src/workflow/nodes/reranker-node/ParamSettingDialog.vue
+++ b/ui/src/workflow/nodes/reranker-node/ParamSettingDialog.vue
@@ -43,9 +43,7 @@
                 </el-form-item>
               </el-col>
               <el-col :span="12">
-                <el-form-item
-                  :label="$t('views.application.applicationForm.dialog.topReferences')"
-                >
+                <el-form-item :label="$t('views.application.applicationForm.dialog.topReferences')">
                   <el-input-number
                     v-model="form.top_n"
                     :min="1"
@@ -125,22 +123,4 @@ const submit = () => {
 
 defineExpose({ open })
 </script>
-<style lang="scss" scoped>
-.param-dialog {
-  padding: 8px 8px 24px 8px;
-  .el-dialog__header {
-    padding: 16px 16px 0 16px;
-  }
-  .el-dialog__body {
-    padding: 0 !important;
-  }
-  .dialog-max-height {
-    height: 550px;
-  }
-  .custom-slider {
-    .el-input-number.is-without-controls .el-input__wrapper {
-      padding: 0 !important;
-    }
-  }
-}
-</style>
+<style lang="scss"></style>