Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
赵月辉
/
fastgpt-migrated
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Unverified
Commit
5759cbea
authored
Mar 31, 2023
by
archer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
perf: 知识库录入
parent
a3d74ec4
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
54 additions
and
68 deletions
+54
-68
src/pages/api/chat/vectorGpt.ts
+4
-4
src/pages/chat/index.tsx
+9
-3
src/pages/model/detail/components/InputDataModal.tsx
+35
-45
src/pages/model/detail/components/ModelDataCard.tsx
+2
-5
src/pages/model/detail/components/ModelEditForm.tsx
+4
-11
No files found.
src/pages/api/chat/vectorGpt.ts
View file @
5759cbea
...
@@ -119,20 +119,20 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
...
@@ -119,20 +119,20 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
.
select
(
'text q'
)
.
select
(
'text q'
)
.
then
((
res
)
=>
{
.
then
((
res
)
=>
{
if
(
!
res
)
return
''
;
if
(
!
res
)
return
''
;
const
questions
=
res
.
q
.
map
((
item
)
=>
item
.
text
).
join
(
' '
);
//
const questions = res.q.map((item) => item.text).join(' ');
const
answer
=
res
.
text
;
const
answer
=
res
.
text
;
return
`
${
questions
}
${
answer
}
`
;
return
`
${
answer
}
`
;
});
});
})
})
)
)
).
filter
((
item
)
=>
item
);
).
filter
((
item
)
=>
item
);
// textArr 筛选,最多 3000 tokens
// textArr 筛选,最多 3000 tokens
const
systemPrompt
=
systemPromptFilter
(
textArr
,
28
00
);
const
systemPrompt
=
systemPromptFilter
(
textArr
,
34
00
);
prompts
.
unshift
({
prompts
.
unshift
({
obj
:
'SYSTEM'
,
obj
:
'SYSTEM'
,
value
:
`
根据下面的知识回答问题:
${
systemPrompt
}
`
value
:
`
${
model
.
systemPrompt
}
。 我的知识库: "
${
systemPrompt
}
"
`
});
});
// 控制在 tokens 数量,防止超出
// 控制在 tokens 数量,防止超出
...
...
src/pages/chat/index.tsx
View file @
5759cbea
...
@@ -190,7 +190,11 @@ const Chat = ({ chatId }: { chatId: string }) => {
...
@@ -190,7 +190,11 @@ const Chat = ({ chatId }: { chatId: string }) => {
/**
/**
* 发送一个内容
* 发送一个内容
*/
*/
const
sendPrompt
=
useCallback
(
async
()
=>
{
const
sendPrompt
=
useCallback
(
async
(
e
?:
React
.
MouseEvent
<
HTMLDivElement
>
)
=>
{
e
?.
stopPropagation
();
e
?.
preventDefault
();
const
storeInput
=
inputVal
;
const
storeInput
=
inputVal
;
// 去除空行
// 去除空行
const
val
=
inputVal
const
val
=
inputVal
...
@@ -264,7 +268,8 @@ const Chat = ({ chatId }: { chatId: string }) => {
...
@@ -264,7 +268,8 @@ const Chat = ({ chatId }: { chatId: string }) => {
history
:
newChatList
.
slice
(
0
,
newChatList
.
length
-
2
)
history
:
newChatList
.
slice
(
0
,
newChatList
.
length
-
2
)
}));
}));
}
}
},
[
},
[
inputVal
,
inputVal
,
chatData
,
chatData
,
isChatting
,
isChatting
,
...
@@ -274,7 +279,8 @@ const Chat = ({ chatId }: { chatId: string }) => {
...
@@ -274,7 +279,8 @@ const Chat = ({ chatId }: { chatId: string }) => {
gptChatPrompt
,
gptChatPrompt
,
pushChatHistory
,
pushChatHistory
,
chatId
chatId
]);
]
);
// 删除一句话
// 删除一句话
const
delChatRecord
=
useCallback
(
const
delChatRecord
=
useCallback
(
...
...
src/pages/model/detail/components/InputDataModal.tsx
View file @
5759cbea
...
@@ -19,7 +19,7 @@ import { DeleteIcon } from '@chakra-ui/icons';
...
@@ -19,7 +19,7 @@ import { DeleteIcon } from '@chakra-ui/icons';
import
{
customAlphabet
}
from
'nanoid'
;
import
{
customAlphabet
}
from
'nanoid'
;
const
nanoid
=
customAlphabet
(
'abcdefghijklmnopqrstuvwxyz1234567890'
,
12
);
const
nanoid
=
customAlphabet
(
'abcdefghijklmnopqrstuvwxyz1234567890'
,
12
);
type
FormData
=
{
text
:
string
;
q
:
{
val
:
string
}[]
};
type
FormData
=
{
text
:
string
;
q
:
string
};
const
InputDataModal
=
({
const
InputDataModal
=
({
onClose
,
onClose
,
...
@@ -36,17 +36,9 @@ const InputDataModal = ({
...
@@ -36,17 +36,9 @@ const InputDataModal = ({
const
{
register
,
handleSubmit
,
control
}
=
useForm
<
FormData
>
({
const
{
register
,
handleSubmit
,
control
}
=
useForm
<
FormData
>
({
defaultValues
:
{
defaultValues
:
{
text
:
''
,
text
:
''
,
q
:
[{
val
:
''
}]
q
:
''
}
}
});
});
const
{
fields
:
inputQ
,
append
:
appendQ
,
remove
:
removeQ
}
=
useFieldArray
({
control
,
name
:
'q'
});
const
sureImportData
=
useCallback
(
const
sureImportData
=
useCallback
(
async
(
e
:
FormData
)
=>
{
async
(
e
:
FormData
)
=>
{
...
@@ -58,10 +50,12 @@ const InputDataModal = ({
...
@@ -58,10 +50,12 @@ const InputDataModal = ({
data
:
[
data
:
[
{
{
text
:
e
.
text
,
text
:
e
.
text
,
q
:
e
.
q
.
map
((
item
)
=>
({
q
:
[
{
id
:
nanoid
(),
id
:
nanoid
(),
text
:
item
.
val
text
:
e
.
q
}))
}
]
}
}
]
]
});
});
...
@@ -81,50 +75,46 @@ const InputDataModal = ({
...
@@ -81,50 +75,46 @@ const InputDataModal = ({
);
);
return
(
return
(
<
Modal
isOpen=
{
true
}
onClose=
{
onClose
}
>
<
Modal
isOpen=
{
true
}
onClose=
{
onClose
}
isCentered
>
<
ModalOverlay
/>
<
ModalOverlay
/>
<
ModalContent
maxW=
{
'min(900px, 90vw)'
}
maxH=
{
'80vh'
}
position=
{
'relative'
}
>
<
ModalContent
m=
{
0
}
display=
{
'flex'
}
flexDirection=
{
'column'
}
h=
{
'90vh'
}
maxW=
{
'90vw'
}
position=
{
'relative'
}
>
<
ModalHeader
>
手动导入
</
ModalHeader
>
<
ModalHeader
>
手动导入
</
ModalHeader
>
<
ModalCloseButton
/>
<
ModalCloseButton
/>
<
Box
px=
{
6
}
pb=
{
2
}
overflowY=
{
'auto'
}
>
<
Box
mb=
{
2
}
>
知识点:
</
Box
>
<
Flex
flex=
{
'1 0 0'
}
h=
{
0
}
px=
{
6
}
pb=
{
2
}
>
<
Box
flex=
{
2
}
mr=
{
4
}
h=
{
'100%'
}
>
<
Box
h=
{
'30px'
}
>
问题
</
Box
>
<
Textarea
placeholder=
"相关问题,可以回车输入多个问法, 最多500字"
maxLength=
{
500
}
resize=
{
'none'
}
h=
{
'calc(100% - 30px)'
}
{
...
register
(`
q
`,
{
required
:
'相关问题,可以回车输入多个问法'
})}
/>
</
Box
>
<
Box
flex=
{
3
}
h=
{
'100%'
}
>
<
Box
h=
{
'30px'
}
>
知识点
</
Box
>
<
Textarea
<
Textarea
mb=
{
4
}
placeholder=
"知识点"
placeholder=
"知识点"
rows=
{
3
}
resize=
{
'none'
}
maxH=
{
'200px
'
}
h=
{
'calc(100% - 30px)
'
}
{
...
register
(`
text
`,
{
{
...
register
(`
text
`,
{
required
:
'知识点'
required
:
'知识点'
})}
})}
/>
/>
{
inputQ
.
map
((
item
,
index
)
=>
(
<
Box
key=
{
item
.
id
}
mb=
{
5
}
>
<
Box
mb=
{
2
}
>
问法
{
index
+
1
}
:
</
Box
>
<
Flex
>
<
Input
placeholder=
"问法"
{
...
register
(`
q
.
$
{
index
}
.
val
`,
{
required
:
'问法不能为空'
})}
></
Input
>
{
inputQ
.
length
>
1
&&
(
<
IconButton
icon=
{
<
DeleteIcon
/>
}
aria
-
label=
{
'delete'
}
colorScheme=
{
'gray'
}
variant=
{
'unstyled'
}
onClick=
{
()
=>
removeQ
(
index
)
}
/>
)
}
</
Flex
>
</
Box
>
))
}
</
Box
>
</
Box
>
</
Flex
>
<
Flex
px=
{
6
}
pt=
{
2
}
pb=
{
4
}
>
<
Flex
px=
{
6
}
pt=
{
2
}
pb=
{
4
}
>
<
Button
alignSelf=
{
'flex-start'
}
variant=
{
'outline'
}
onClick=
{
()
=>
appendQ
({
val
:
''
})
}
>
增加问法
</
Button
>
<
Box
flex=
{
1
}
></
Box
>
<
Box
flex=
{
1
}
></
Box
>
<
Button
variant=
{
'outline'
}
mr=
{
3
}
onClick=
{
onClose
}
>
<
Button
variant=
{
'outline'
}
mr=
{
3
}
onClick=
{
onClose
}
>
取消
取消
...
...
src/pages/model/detail/components/ModelDataCard.tsx
View file @
5759cbea
...
@@ -50,7 +50,7 @@ const ModelDataCard = ({ model }: { model: ModelSchema }) => {
...
@@ -50,7 +50,7 @@ const ModelDataCard = ({ model }: { model: ModelSchema }) => {
pageNum
pageNum
}
=
usePagination
<
ModelDataSchema
>
({
}
=
usePagination
<
ModelDataSchema
>
({
api
:
getModelDataList
,
api
:
getModelDataList
,
pageSize
:
10
,
pageSize
:
8
,
params
:
{
params
:
{
modelId
:
model
.
_id
modelId
:
model
.
_id
}
}
...
@@ -119,7 +119,7 @@ const ModelDataCard = ({ model }: { model: ModelSchema }) => {
...
@@ -119,7 +119,7 @@ const ModelDataCard = ({ model }: { model: ModelSchema }) => {
</
Flex
>
</
Flex
>
{
data
&&
data
.
length
>
0
&&
<
Box
fontSize=
{
'xs'
}
>
{
data
.
length
}
条数据正在拆分中...
</
Box
>
}
{
data
&&
data
.
length
>
0
&&
<
Box
fontSize=
{
'xs'
}
>
{
data
.
length
}
条数据正在拆分中...
</
Box
>
}
<
Box
mt=
{
4
}
>
<
Box
mt=
{
4
}
>
<
TableContainer
h=
{
'600px'
}
overflowY=
{
'auto'
}
>
<
TableContainer
>
<
Table
variant=
{
'simple'
}
>
<
Table
variant=
{
'simple'
}
>
<
Thead
>
<
Thead
>
<
Tr
>
<
Tr
>
...
@@ -141,11 +141,8 @@ const ModelDataCard = ({ model }: { model: ModelSchema }) => {
...
@@ -141,11 +141,8 @@ const ModelDataCard = ({ model }: { model: ModelSchema }) => {
whiteSpace=
{
'pre-wrap'
}
whiteSpace=
{
'pre-wrap'
}
_notLast=
{
{
mb
:
1
}
}
_notLast=
{
{
mb
:
1
}
}
>
>
Q
{
i
+
1
}
:
{
' '
}
<
Box
as=
{
'span'
}
userSelect=
{
'all'
}
>
{
item
.
text
}
{
item
.
text
}
</
Box
>
</
Box
>
</
Box
>
))
}
))
}
</
Td
>
</
Td
>
<
Td
minW=
{
'200px'
}
>
<
Td
minW=
{
'200px'
}
>
...
...
src/pages/model/detail/components/ModelEditForm.tsx
View file @
5759cbea
...
@@ -108,7 +108,7 @@ const ModelEditForm = ({
...
@@ -108,7 +108,7 @@ const ModelEditForm = ({
<
Slider
<
Slider
aria
-
label=
"slider-ex-1"
aria
-
label=
"slider-ex-1"
min=
{
1
}
min=
{
0
}
max=
{
10
}
max=
{
10
}
step=
{
1
}
step=
{
1
}
value=
{
getValues
(
'temperature'
)
}
value=
{
getValues
(
'temperature'
)
}
...
@@ -138,24 +138,17 @@ const ModelEditForm = ({
...
@@ -138,24 +138,17 @@ const ModelEditForm = ({
</
Flex
>
</
Flex
>
</
FormControl
>
</
FormControl
>
<
Box
mt=
{
4
}
>
<
Box
mt=
{
4
}
>
{
canTrain
?
(
<
Box
fontWeight=
{
'bold'
}
>
训练的模型会自动根据知识库内容回答,无法设置系统prompt。注意:
使用该模型,在对话时需要消耗等多的 tokens
</
Box
>
)
:
(
<>
<
Box
mb=
{
1
}
>
系统提示词
</
Box
>
<
Box
mb=
{
1
}
>
系统提示词
</
Box
>
<
Textarea
<
Textarea
rows=
{
6
}
rows=
{
6
}
maxLength=
{
-
1
}
maxLength=
{
-
1
}
{
...
register
('
systemPrompt
')}
{
...
register
('
systemPrompt
')}
placeholder=
{
placeholder=
{
'模型默认的 prompt 词,通过调整该内容,可以生成一个限定范围的模型。\n\n注意,改功能会影响对话的整体朝向!'
canTrain
?
'训练的模型会根据知识库内容,生成一部分系统提示词,因此在对话时需要消耗更多的 tokens。你仍可以增加一些提示词,让其效果更精确。'
:
'模型默认的 prompt 词,通过调整该内容,可以生成一个限定范围的模型。\n\n注意,改功能会影响对话的整体朝向!'
}
}
/>
/>
</>
)
}
</
Box
>
</
Box
>
</
Card
>
</
Card
>
{
/* <Card p={4}>
{
/* <Card p={4}>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment