diff --git a/web/src/hooks/logicHooks.ts b/web/src/hooks/logicHooks.ts
index c692a5fd9..36c5e7984 100644
--- a/web/src/hooks/logicHooks.ts
+++ b/web/src/hooks/logicHooks.ts
@@ -1,6 +1,7 @@
 import { Authorization } from '@/constants/authorization';
 import { LanguageTranslationMap } from '@/constants/common';
 import { Pagination } from '@/interfaces/common';
+import { ResponseType } from '@/interfaces/database/base';
 import { IAnswer } from '@/interfaces/database/chat';
 import { IKnowledgeFile } from '@/interfaces/database/knowledge';
 import { IChangeParserConfigRequestBody } from '@/interfaces/request/document';
@@ -153,7 +154,9 @@ export const useSendMessageWithSse = (
   const [done, setDone] = useState(true);
 
   const send = useCallback(
-    async (body: any) => {
+    async (
+      body: any,
+    ): Promise<{ response: Response; data: ResponseType } | undefined> => {
       try {
         setDone(false);
         const response = await fetch(url, {
@@ -165,6 +168,8 @@ export const useSendMessageWithSse = (
           body: JSON.stringify(body),
         });
 
+        const res = response.clone().json();
+
         const reader = response?.body
           ?.pipeThrough(new TextDecoderStream())
           .pipeThrough(new EventSourceParserStream())
@@ -192,7 +197,7 @@ export const useSendMessageWithSse = (
         }
         console.info('done?');
         setDone(true);
-        return response;
+        return { data: await res, response };
       } catch (e) {
         setDone(true);
         console.warn(e);
diff --git a/web/src/interfaces/database/base.ts b/web/src/interfaces/database/base.ts
new file mode 100644
index 000000000..f4df72379
--- /dev/null
+++ b/web/src/interfaces/database/base.ts
@@ -0,0 +1,6 @@
+export interface ResponseType {
+  retcode: number;
+  data: any;
+  retmsg: string;
+  status: number;
+}
diff --git a/web/src/pages/flow/canvas/index.tsx b/web/src/pages/flow/canvas/index.tsx
index 0d11aa8b9..c6be93178 100644
--- a/web/src/pages/flow/canvas/index.tsx
+++ b/web/src/pages/flow/canvas/index.tsx
@@ -19,6 +19,7 @@ import {
 } from '../hooks';
 import { TextUpdaterNode } from './node';
 
+import ChatDrawer from '../chat/drawer';
 import styles from './index.less';
 
 const nodeTypes = { textUpdater: TextUpdaterNode };
@@ -29,9 +30,11 @@ const edgeTypes = {
 
 interface IProps {
   sideWidth: number;
+  chatDrawerVisible: boolean;
+  hideChatDrawer(): void;
 }
 
-function FlowCanvas({ sideWidth }: IProps) {
+function FlowCanvas({ sideWidth, chatDrawerVisible, hideChatDrawer }: IProps) {
   const {
     nodes,
     edges,
@@ -99,6 +102,10 @@ function FlowCanvas({ sideWidth }: IProps) {
         visible={drawerVisible}
         hideModal={hideDrawer}
       >
+      
     
   );
 }
diff --git a/web/src/pages/flow/chat/box.tsx b/web/src/pages/flow/chat/box.tsx
index cc3ed401b..89c393303 100644
--- a/web/src/pages/flow/chat/box.tsx
+++ b/web/src/pages/flow/chat/box.tsx
@@ -82,6 +82,7 @@ const FlowChatBox = () => {
         onClose={hideModal}
         open={visible}
         width={'50vw'}
+        mask={false}
       >
         ) => {
       open={visible}
       getContainer={false}
       width={470}
+      mask={false}
       // zIndex={10000}
     >
       
diff --git a/web/src/pages/flow/chat/hooks.ts b/web/src/pages/flow/chat/hooks.ts
index 07c1344cf..49027b567 100644
--- a/web/src/pages/flow/chat/hooks.ts
+++ b/web/src/pages/flow/chat/hooks.ts
@@ -8,10 +8,13 @@ import {
 import { IAnswer } from '@/interfaces/database/chat';
 import { IMessage } from '@/pages/chat/interface';
 import api from '@/utils/api';
+import { message } from 'antd';
 import { useCallback, useEffect, useState } from 'react';
 import { useParams } from 'umi';
 import { v4 as uuid } from 'uuid';
 
+const antMessage = message;
+
 export const useSelectCurrentMessages = () => {
   const { id: id } = useParams();
   const [currentMessages, setCurrentMessages] = useState([]);
@@ -107,9 +110,11 @@ export const useSendMessage = (
       if (message) {
         params.message = message;
       }
-      const res: Response | undefined = await send(params);
+      const res = await send(params);
+
+      if (res?.response.status !== 200 || res?.data?.retcode !== 0) {
+        antMessage.error(res?.data?.retmsg);
 
-      if (res?.status !== 200) {
         // cancel loading
         setValue(message);
         removeLatestMessage();
diff --git a/web/src/pages/flow/header/index.tsx b/web/src/pages/flow/header/index.tsx
index 835bca4b4..40b55b213 100644
--- a/web/src/pages/flow/header/index.tsx
+++ b/web/src/pages/flow/header/index.tsx
@@ -1,21 +1,19 @@
 import { Button, Flex, Space } from 'antd';
 
-import { useSetModalState } from '@/hooks/commonHooks';
 import { useFetchFlow } from '@/hooks/flow-hooks';
 import { ArrowLeftOutlined } from '@ant-design/icons';
 import { Link } from 'umi';
-import ChatDrawer from '../chat/drawer';
-import { useRunGraph, useSaveGraph } from '../hooks';
+import { useSaveGraph } from '../hooks';
+
 import styles from './index.less';
 
-const FlowHeader = () => {
+interface IProps {
+  showChatDrawer(): void;
+}
+
+const FlowHeader = ({ showChatDrawer }: IProps) => {
   const { saveGraph } = useSaveGraph();
-  const { runGraph } = useRunGraph();
-  const {
-    visible: chatDrawerVisible,
-    hideModal: hideChatDrawer,
-    showModal: showChatDrawer,
-  } = useSetModalState();
+
   const { data } = useFetchFlow();
 
   return (
@@ -41,10 +39,6 @@ const FlowHeader = () => {
           
         
       
-      
     >
   );
 };
diff --git a/web/src/pages/flow/hooks.ts b/web/src/pages/flow/hooks.ts
index 5cf023ca8..a0f79d087 100644
--- a/web/src/pages/flow/hooks.ts
+++ b/web/src/pages/flow/hooks.ts
@@ -2,7 +2,6 @@ import { useSetModalState } from '@/hooks/commonHooks';
 import {
   useFetchFlow,
   useFetchFlowTemplates,
-  useRunFlow,
   useSetFlow,
 } from '@/hooks/flow-hooks';
 import { useFetchLlmList } from '@/hooks/llmHooks';
@@ -216,19 +215,3 @@ export const useFetchDataOnMount = () => {
 export const useFlowIsFetching = () => {
   return useIsFetching({ queryKey: ['flowDetail'] }) > 0;
 };
-
-export const useRunGraph = () => {
-  const { data } = useFetchFlow();
-  const { runFlow } = useRunFlow();
-  const { id } = useParams();
-  const { nodes, edges } = useGraphStore((state) => state);
-  const runGraph = useCallback(() => {
-    const dslComponents = buildDslComponentsByGraph(nodes, edges);
-    runFlow({
-      id: id!!,
-      dsl: { ...data.dsl, components: dslComponents },
-    });
-  }, [nodes, edges, runFlow, id, data]);
-
-  return { runGraph };
-};
diff --git a/web/src/pages/flow/index.tsx b/web/src/pages/flow/index.tsx
index 9bd1a1b05..86295b570 100644
--- a/web/src/pages/flow/index.tsx
+++ b/web/src/pages/flow/index.tsx
@@ -1,3 +1,4 @@
+import { useSetModalState } from '@/hooks/commonHooks';
 import { Layout } from 'antd';
 import { useState } from 'react';
 import { ReactFlowProvider } from 'reactflow';
@@ -10,6 +11,11 @@ const { Content } = Layout;
 
 function RagFlow() {
   const [collapsed, setCollapsed] = useState(false);
+  const {
+    visible: chatDrawerVisible,
+    hideModal: hideChatDrawer,
+    showModal: showChatDrawer,
+  } = useSetModalState();
 
   useFetchDataOnMount();
 
@@ -18,9 +24,13 @@ function RagFlow() {
       
         
         
-          
+          
           
-            
+            
           
         
       
diff --git a/web/src/utils/request.ts b/web/src/utils/request.ts
index 2653b6580..89a3b505c 100644
--- a/web/src/utils/request.ts
+++ b/web/src/utils/request.ts
@@ -1,4 +1,5 @@
 import { Authorization } from '@/constants/authorization';
+import { ResponseType } from '@/interfaces/database/base';
 import i18n from '@/locales/config';
 import authorizationUtil, { getAuthorization } from '@/utils/authorizationUtil';
 import { message, notification } from 'antd';
@@ -42,12 +43,6 @@ type ResultCode =
   | 503
   | 504;
 
-interface ResponseType {
-  retcode: number;
-  data: any;
-  retmsg: string;
-  status: number;
-}
 const errorHandler = (error: {
   response: Response;
   message: string;