From e6cb74b27fabb82ef3f04fe05ab882811cd05b67 Mon Sep 17 00:00:00 2001 From: chanx <1243304602@qq.com> Date: Tue, 19 Aug 2025 19:22:07 +0800 Subject: [PATCH] Fix (next search): Optimize the search problem interface and related functions #3221 (#9569) ### What problem does this PR solve? Fix (next search): Optimize the search problem interface and related functions #3221 -Add search_id to the retrievval_test interface -Optimize handleSearchStrChange and handleSearch callbacks to determine whether to enable AI search based on search configuration ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) --- web/src/components/home-card.tsx | 54 +++++++++++++++++++ web/src/pages/agents/agent-card.tsx | 47 +++++----------- web/src/pages/agents/index.tsx | 2 +- web/src/pages/datasets/dataset-card.tsx | 59 ++++++--------------- web/src/pages/datasets/index.tsx | 2 +- web/src/pages/next-chats/chat-card.tsx | 47 ++++++---------- web/src/pages/next-chats/index.tsx | 2 +- web/src/pages/next-search/hooks.ts | 43 ++++++++++----- web/src/pages/next-search/search-view.tsx | 5 +- web/src/pages/next-searches/search-card.tsx | 50 +++++------------ 10 files changed, 147 insertions(+), 164 deletions(-) create mode 100644 web/src/components/home-card.tsx diff --git a/web/src/components/home-card.tsx b/web/src/components/home-card.tsx new file mode 100644 index 000000000..65e10e77e --- /dev/null +++ b/web/src/components/home-card.tsx @@ -0,0 +1,54 @@ +import { RAGFlowAvatar } from '@/components/ragflow-avatar'; +import { Card, CardContent } from '@/components/ui/card'; +import { formatDate } from '@/utils/date'; + +interface IProps { + data: { + name: string; + description?: string; + avatar?: string; + update_time?: string | number; + }; + onClick?: () => void; + moreDropdown: React.ReactNode; +} +export function HomeCard({ data, onClick, moreDropdown }: IProps) { + return ( + { + // navigateToSearch(data?.id); + onClick?.(); + }} + > + +
+ +
+
+
+
+ {data.name} +
+ {moreDropdown} +
+ +
+
+ {data.description} +
+
+

+ {formatDate(data.update_time)} +

+
+
+
+
+
+ ); +} diff --git a/web/src/pages/agents/agent-card.tsx b/web/src/pages/agents/agent-card.tsx index 8dd631b9f..1ffdc298e 100644 --- a/web/src/pages/agents/agent-card.tsx +++ b/web/src/pages/agents/agent-card.tsx @@ -1,10 +1,7 @@ +import { HomeCard } from '@/components/home-card'; import { MoreButton } from '@/components/more-button'; -import { RAGFlowAvatar } from '@/components/ragflow-avatar'; -import { SharedBadge } from '@/components/shared-badge'; -import { Card, CardContent } from '@/components/ui/card'; import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; import { IFlow } from '@/interfaces/database/agent'; -import { formatDate } from '@/utils/date'; import { AgentDropdown } from './agent-dropdown'; import { useRenameAgent } from './use-rename-agent'; @@ -16,36 +13,16 @@ export function AgentCard({ data, showAgentRenameModal }: DatasetCardProps) { const { navigateToAgent } = useNavigatePage(); return ( - - -
-
- - {data.nickname} -
- - - -
-
-
-

- {data.title} -

-

{data.description}

-

- {formatDate(data.update_time)} -

-
-
-
-
+ + + + } + onClick={() => { + navigateToAgent(data?.id); + }} + /> ); } diff --git a/web/src/pages/agents/index.tsx b/web/src/pages/agents/index.tsx index 3f1825f85..df31222d9 100644 --- a/web/src/pages/agents/index.tsx +++ b/web/src/pages/agents/index.tsx @@ -46,7 +46,7 @@ export default function Agents() {
-
+
{data.map((x) => { return ( - -
-
- - {owner && ( - - {owner} - - )} -
- - - -
-
-
-

- {dataset.name} -

-

- {dataset.doc_num} files -

-

- {formatDate(dataset.update_time)} -

-
-
-
- + + + + } + onClick={() => { + navigateToDataset(dataset.id); + }} + /> ); } diff --git a/web/src/pages/datasets/index.tsx b/web/src/pages/datasets/index.tsx index 867a9d44e..a5b9e0d6c 100644 --- a/web/src/pages/datasets/index.tsx +++ b/web/src/pages/datasets/index.tsx @@ -70,7 +70,7 @@ export default function Datasets() {
-
+
{kbs.map((dataset) => { return ( - -
-
- -
- - - -
-
-
-

- {data.name} -

-

{data.description}

-

- {formatDate(data.update_time)} -

-
-
-
- + + + + } + onClick={() => { + navigateToChat(data?.id); + }} + /> ); } diff --git a/web/src/pages/next-chats/index.tsx b/web/src/pages/next-chats/index.tsx index ad82f1b2e..3d71bc0c4 100644 --- a/web/src/pages/next-chats/index.tsx +++ b/web/src/pages/next-chats/index.tsx @@ -49,7 +49,7 @@ export default function ChatList() {
-
+
{data.dialogs.map((x) => { return ( { + (question: string, enableAI: boolean = true) => { const q = trim(question); if (isEmpty(q)) return; setPagination({ page: 1 }); setIsFirstRender(false); setCurrentAnswer({} as IAnswer); - setSendingLoading(true); - send({ kb_ids: kbIds, question: q, tenantId, search_id: searchId }); + if (enableAI) { + setSendingLoading(true); + send({ kb_ids: kbIds, question: q, tenantId, search_id: searchId }); + } testChunk({ kb_id: kbIds, highlight: true, question: q, page: 1, size: pagination.pageSize, + search_id: searchId, }); if (related_search) { @@ -327,12 +330,13 @@ export const useSendQuestion = ( }, []); const handleClickRelatedQuestion = useCallback( - (question: string) => () => { - if (sendingLoading) return; + (question: string, enableAI: boolean = true) => + () => { + if (sendingLoading) return; - setSearchStr(question); - sendQuestion(question); - }, + setSearchStr(question); + sendQuestion(question, enableAI); + }, [sendQuestion, sendingLoading], ); @@ -348,6 +352,7 @@ export const useSendQuestion = ( doc_ids: documentIds ?? selectedDocumentIds, page, size, + search_id: searchId, }); testChunkAll({ @@ -357,6 +362,7 @@ export const useSendQuestion = ( doc_ids: [], page, size, + search_id: searchId, }); }, [ @@ -366,6 +372,7 @@ export const useSendQuestion = ( kbIds, selectedDocumentIds, testChunkAll, + searchId, ], ); @@ -430,7 +437,6 @@ export const useSearching = ({ const handleSearchStrChange = useCallback( (value: string) => { - console.log('handleSearchStrChange', value); setSearchStr(value); }, [setSearchStr], @@ -442,10 +448,16 @@ export const useSearching = ({ useEffect(() => { if (searchText) { setSearchStr(searchText); - sendQuestion(searchText); + sendQuestion(searchText, searchData.search_config.summary); setSearchText?.(''); } - }, [searchText, sendQuestion, setSearchStr, setSearchText]); + }, [ + searchText, + sendQuestion, + setSearchStr, + setSearchText, + searchData.search_config.summary, + ]); const { mindMapVisible, @@ -462,11 +474,16 @@ export const useSearching = ({ const handleSearch = useCallback( (value: string) => { - sendQuestion(value); + sendQuestion(value, searchData.search_config.summary); setSearchStr?.(value); hideMindMapModal(); }, - [setSearchStr, sendQuestion, hideMindMapModal], + [ + setSearchStr, + sendQuestion, + hideMindMapModal, + searchData.search_config.summary, + ], ); const { pagination, setPagination } = useGetPaginationWithRouter(); diff --git a/web/src/pages/next-search/search-view.tsx b/web/src/pages/next-search/search-view.tsx index c0846b8c8..2dc937923 100644 --- a/web/src/pages/next-search/search-view.tsx +++ b/web/src/pages/next-search/search-view.tsx @@ -252,7 +252,10 @@ export default function SearchingView({ key={idx} variant="transparent" className="bg-bg-card text-text-secondary" - onClick={handleClickRelatedQuestion(x)} + onClick={handleClickRelatedQuestion( + x, + searchData.search_config.summary, + )} > {x} diff --git a/web/src/pages/next-searches/search-card.tsx b/web/src/pages/next-searches/search-card.tsx index 28128d5ff..b9bacc7ae 100644 --- a/web/src/pages/next-searches/search-card.tsx +++ b/web/src/pages/next-searches/search-card.tsx @@ -1,8 +1,6 @@ +import { HomeCard } from '@/components/home-card'; import { MoreButton } from '@/components/more-button'; -import { RAGFlowAvatar } from '@/components/ragflow-avatar'; -import { Card, CardContent } from '@/components/ui/card'; import { useNavigatePage } from '@/hooks/logic-hooks/navigate-hooks'; -import { formatDate } from '@/utils/date'; import { ISearchAppProps } from './hooks'; import { SearchDropdown } from './search-dropdown'; @@ -14,43 +12,19 @@ export function SearchCard({ data, showSearchRenameModal }: IProps) { const { navigateToSearch } = useNavigatePage(); return ( - + + + } onClick={() => { navigateToSearch(data?.id); }} - > - -
- -
-
-
-
- {data.name} -
- - - -
- -
-
{data.description}
-
-

- {formatDate(data.update_time)} -

-
-
-
-
-
+ /> ); }