Skip to content

Commit 131fc10

Browse files
authored
Feat: Add the option to use the knowledge graph to the retrieval form #3221 (#8968)
### What problem does this PR solve? Feat: Add the option to use the knowledge graph to the retrieval form #3221 ### Type of change - [x] New Feature (non-breaking change which adds functionality)
1 parent af00f2c commit 131fc10

File tree

8 files changed

+93
-60
lines changed

8 files changed

+93
-60
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import {
2+
FormControl,
3+
FormField,
4+
FormItem,
5+
FormLabel,
6+
} from '@/components/ui/form';
7+
import { MultiSelect } from '@/components/ui/multi-select';
8+
import { cn } from '@/lib/utils';
9+
import { useFormContext } from 'react-hook-form';
10+
import { useTranslation } from 'react-i18next';
11+
12+
const Languages = [
13+
'English',
14+
'Chinese',
15+
'Spanish',
16+
'French',
17+
'German',
18+
'Japanese',
19+
'Korean',
20+
'Vietnamese',
21+
];
22+
23+
const options = Languages.map((x) => ({ label: x, value: x }));
24+
25+
type CrossLanguageItemProps = {
26+
name?: string;
27+
vertical?: boolean;
28+
};
29+
30+
export const CrossLanguageFormField = ({
31+
name = 'prompt_config.cross_languages',
32+
vertical = true,
33+
}: CrossLanguageItemProps) => {
34+
const { t } = useTranslation();
35+
const form = useFormContext();
36+
37+
return (
38+
<FormField
39+
control={form.control}
40+
name={name}
41+
render={({ field }) => (
42+
<FormItem
43+
className={cn('flex', {
44+
'gap-2': vertical,
45+
'flex-col': vertical,
46+
'justify-between': !vertical,
47+
'items-center': !vertical,
48+
})}
49+
>
50+
<FormLabel tooltip={t('chat.crossLanguageTip')}>
51+
{t('chat.crossLanguage')}
52+
</FormLabel>
53+
<FormControl>
54+
<MultiSelect
55+
options={options}
56+
placeholder={t('fileManager.pleaseSelect')}
57+
maxCount={100}
58+
{...field}
59+
onValueChange={field.onChange}
60+
modalPopover
61+
/>
62+
</FormControl>
63+
</FormItem>
64+
)}
65+
/>
66+
);
67+
};

web/src/components/cross-language-item-ui.tsx

Lines changed: 0 additions & 49 deletions
This file was deleted.

web/src/locales/en.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1298,6 +1298,10 @@ This delimiter is used to split the input text into several text pieces echo of
12981298
stringTransform: 'String transform',
12991299
userFillUp: 'Input',
13001300
codeExec: 'Code',
1301+
tavilySearch: 'Tavily Search',
1302+
tavilySearchDescription: 'Search results via Tavily service.',
1303+
tavilyExtract: 'Tavily Extract',
1304+
tavilyExtractDescription: 'Tavily Extract',
13011305
},
13021306
llmTools: {
13031307
bad_calculator: {

web/src/locales/zh.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1251,6 +1251,10 @@ General:实体和关系提取提示来自 GitHub - microsoft/graphrag:基于
12511251
stringTransform: '文本处理',
12521252
userFillUp: '等待输入',
12531253
codeExec: '代码',
1254+
tavilySearch: 'Tavily Search',
1255+
tavilySearchDescription: '通过 Tavily 服务搜索结果',
1256+
tavilyExtract: 'Tavily Extract',
1257+
tavilyExtractDescription: 'Tavily Extract',
12541258
},
12551259
footer: {
12561260
profile: 'All rights reserved @ React',

web/src/pages/agent/constant.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,8 @@ export const initialRetrievalValues = {
265265
empty_response: '',
266266
...initialSimilarityThresholdValue,
267267
...initialKeywordsSimilarityWeightValue,
268+
use_kg: false,
269+
cross_languages: [],
268270
outputs: {
269271
formalized_content: {
270272
type: 'string',

web/src/pages/agent/form/retrieval-form/next.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { CrossLanguageFormField } from '@/components/cross-language-form-field';
12
import { FormContainer } from '@/components/form-container';
23
import { KnowledgeBaseFormField } from '@/components/knowledge-base-item';
34
import { RerankFormFields } from '@/components/rerank';
@@ -12,6 +13,7 @@ import {
1213
FormMessage,
1314
} from '@/components/ui/form';
1415
import { Textarea } from '@/components/ui/textarea';
16+
import { UseKnowledgeGraphFormField } from '@/components/use-knowledge-graph-item';
1517
import { zodResolver } from '@hookform/resolvers/zod';
1618
import { memo, useMemo } from 'react';
1719
import { useForm, useFormContext } from 'react-hook-form';
@@ -32,6 +34,8 @@ export const RetrievalPartialSchema = {
3234
kb_ids: z.array(z.string()),
3335
rerank_id: z.string(),
3436
empty_response: z.string(),
37+
cross_languages: z.array(z.string()),
38+
use_kg: z.boolean(),
3539
};
3640

3741
export const FormSchema = z.object({
@@ -106,6 +110,8 @@ function RetrievalForm({ node }: INextOperatorForm) {
106110
<TopNFormField></TopNFormField>
107111
<RerankFormFields></RerankFormFields>
108112
<EmptyResponseField></EmptyResponseField>
113+
<CrossLanguageFormField name="cross_languages"></CrossLanguageFormField>
114+
<UseKnowledgeGraphFormField name="use_kg"></UseKnowledgeGraphFormField>
109115
</FormContainer>
110116
<Output list={outputList}></Output>
111117
</form>

web/src/pages/agent/form/tool-form/retrieval-form/index.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
import { CrossLanguageFormField } from '@/components/cross-language-form-field';
12
import { FormContainer } from '@/components/form-container';
23
import { KnowledgeBaseFormField } from '@/components/knowledge-base-item';
34
import { RerankFormFields } from '@/components/rerank';
45
import { SimilaritySliderFormField } from '@/components/similarity-slider';
56
import { TopNFormField } from '@/components/top-n-item';
67
import { Form } from '@/components/ui/form';
8+
import { UseKnowledgeGraphFormField } from '@/components/use-knowledge-graph-item';
79
import { zodResolver } from '@hookform/resolvers/zod';
810
import { useForm } from 'react-hook-form';
911
import { z } from 'zod';
@@ -50,6 +52,8 @@ const RetrievalForm = () => {
5052
<TopNFormField></TopNFormField>
5153
<RerankFormFields></RerankFormFields>
5254
<EmptyResponseField></EmptyResponseField>
55+
<CrossLanguageFormField name="cross_languages"></CrossLanguageFormField>
56+
<UseKnowledgeGraphFormField name="use_kg"></UseKnowledgeGraphFormField>
5357
</FormContainer>
5458
</form>
5559
</Form>

web/src/pages/dataset/testing/testing-form.tsx

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { zodResolver } from '@hookform/resolvers/zod';
44
import { useForm, useWatch } from 'react-hook-form';
55
import { z } from 'zod';
66

7-
import { CrossLanguageItem } from '@/components/cross-language-item-ui';
7+
import { CrossLanguageFormField } from '@/components/cross-language-form-field';
88
import { FormContainer } from '@/components/form-container';
99
import {
1010
initialTopKValue,
@@ -32,7 +32,7 @@ import { UseKnowledgeGraphFormField } from '@/components/use-knowledge-graph-ite
3232
import { useTestRetrieval } from '@/hooks/use-knowledge-request';
3333
import { trim } from 'lodash';
3434
import { CirclePlay } from 'lucide-react';
35-
import { useEffect, useState } from 'react';
35+
import { useEffect } from 'react';
3636
import { useTranslation } from 'react-i18next';
3737

3838
type TestingFormProps = Pick<
@@ -46,7 +46,6 @@ export default function TestingForm({
4646
setValues,
4747
}: TestingFormProps) {
4848
const { t } = useTranslation();
49-
const [cross_languages, setCrossLangArr] = useState<string[]>([]);
5049

5150
const formSchema = z.object({
5251
question: z.string().min(1, {
@@ -71,9 +70,8 @@ export default function TestingForm({
7170
const values = useWatch({ control: form.control });
7271

7372
useEffect(() => {
74-
// setValues(values as Required<z.infer<typeof formSchema>>);
75-
setValues({ ...values, cross_languages });
76-
}, [setValues, values, cross_languages]);
73+
setValues(values as Required<z.infer<typeof formSchema>>);
74+
}, [setValues, values]);
7775

7876
function onSubmit() {
7977
refetch();
@@ -89,12 +87,9 @@ export default function TestingForm({
8987
></SimilaritySliderFormField>
9088
<RerankFormFields></RerankFormFields>
9189
<UseKnowledgeGraphFormField name="use_kg"></UseKnowledgeGraphFormField>
92-
<CrossLanguageItem
90+
<CrossLanguageFormField
9391
name={'cross_languages'}
94-
onChange={(valArr) => {
95-
setCrossLangArr(valArr);
96-
}}
97-
></CrossLanguageItem>
92+
></CrossLanguageFormField>
9893
</FormContainer>
9994
<FormField
10095
control={form.control}

0 commit comments

Comments
 (0)