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
a34a2b62
authored
May 04, 2023
by
archer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
perf: token slice
parent
2d74fa8e
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
31 additions
and
37 deletions
+31
-37
README.md
+1
-0
src/api/fetch.ts
+1
-1
src/constants/model.ts
+3
-3
src/pages/chat/index.tsx
+1
-1
src/service/plugins/searchKb.ts
+15
-8
src/service/utils/chat/claude.ts
+4
-12
src/service/utils/chat/openai.ts
+2
-8
src/utils/chat/index.ts
+4
-4
No files found.
README.md
View file @
a34a2b62
...
@@ -232,6 +232,7 @@ services:
...
@@ -232,6 +232,7 @@ services:
#### 3. 运行 docker-compose
#### 3. 运行 docker-compose
下面是一个辅助脚本,也可以直接 docker-compose up -d
下面是一个辅助脚本,也可以直接 docker-compose up -d
**run.sh 运行文件**
**run.sh 运行文件**
```
bash
```
bash
...
...
src/api/fetch.ts
View file @
a34a2b62
...
@@ -25,7 +25,7 @@ export const streamFetch = ({ url, data, onMessage, abortSignal }: StreamFetchPr
...
@@ -25,7 +25,7 @@ export const streamFetch = ({ url, data, onMessage, abortSignal }: StreamFetchPr
const
decoder
=
new
TextDecoder
();
const
decoder
=
new
TextDecoder
();
const
systemPrompt
=
decodeURIComponent
(
res
.
headers
.
get
(
SYSTEM_PROMPT_HEADER
)
||
''
);
const
systemPrompt
=
decodeURIComponent
(
res
.
headers
.
get
(
SYSTEM_PROMPT_HEADER
)
||
''
)
.
trim
()
;
const
newChatId
=
decodeURIComponent
(
res
.
headers
.
get
(
NEW_CHATID_HEADER
)
||
''
);
const
newChatId
=
decodeURIComponent
(
res
.
headers
.
get
(
NEW_CHATID_HEADER
)
||
''
);
let
responseText
=
''
;
let
responseText
=
''
;
...
...
src/constants/model.ts
View file @
a34a2b62
...
@@ -28,7 +28,7 @@ export const ChatModelMap = {
...
@@ -28,7 +28,7 @@ export const ChatModelMap = {
chatModel
:
OpenAiChatEnum
.
GPT35
,
chatModel
:
OpenAiChatEnum
.
GPT35
,
name
:
'ChatGpt'
,
name
:
'ChatGpt'
,
contextMaxToken
:
4096
,
contextMaxToken
:
4096
,
systemMaxToken
:
30
00
,
systemMaxToken
:
25
00
,
maxTemperature
:
1.5
,
maxTemperature
:
1.5
,
price
:
3
price
:
3
},
},
...
@@ -36,7 +36,7 @@ export const ChatModelMap = {
...
@@ -36,7 +36,7 @@ export const ChatModelMap = {
chatModel
:
OpenAiChatEnum
.
GPT4
,
chatModel
:
OpenAiChatEnum
.
GPT4
,
name
:
'Gpt4'
,
name
:
'Gpt4'
,
contextMaxToken
:
8000
,
contextMaxToken
:
8000
,
systemMaxToken
:
40
00
,
systemMaxToken
:
35
00
,
maxTemperature
:
1.5
,
maxTemperature
:
1.5
,
price
:
30
price
:
30
},
},
...
@@ -44,7 +44,7 @@ export const ChatModelMap = {
...
@@ -44,7 +44,7 @@ export const ChatModelMap = {
chatModel
:
OpenAiChatEnum
.
GPT432k
,
chatModel
:
OpenAiChatEnum
.
GPT432k
,
name
:
'Gpt4-32k'
,
name
:
'Gpt4-32k'
,
contextMaxToken
:
32000
,
contextMaxToken
:
32000
,
systemMaxToken
:
4
000
,
systemMaxToken
:
6
000
,
maxTemperature
:
1.5
,
maxTemperature
:
1.5
,
price
:
30
price
:
30
},
},
...
...
src/pages/chat/index.tsx
View file @
a34a2b62
...
@@ -643,7 +643,7 @@ const Chat = ({ modelId, chatId }: { modelId: string; chatId: string }) => {
...
@@ -643,7 +643,7 @@ const Chat = ({ modelId, chatId }: { modelId: string; chatId: string }) => {
<
ModalOverlay
/>
<
ModalOverlay
/>
<
ModalContent
maxW=
{
'min(90vw, 600px)'
}
pr=
{
2
}
maxH=
{
'80vh'
}
overflowY=
{
'auto'
}
>
<
ModalContent
maxW=
{
'min(90vw, 600px)'
}
pr=
{
2
}
maxH=
{
'80vh'
}
overflowY=
{
'auto'
}
>
<
ModalCloseButton
/>
<
ModalCloseButton
/>
<
ModalBody
pt=
{
10
}
fontSize=
{
'sm'
}
whiteSpace=
{
'pre-wrap'
}
textAlign=
{
'justify'
}
>
<
ModalBody
pt=
{
5
}
fontSize=
{
'sm'
}
whiteSpace=
{
'pre-wrap'
}
textAlign=
{
'justify'
}
>
{
showSystemPrompt
}
{
showSystemPrompt
}
</
ModalBody
>
</
ModalBody
>
</
ModalContent
>
</
ModalContent
>
...
...
src/service/plugins/searchKb.ts
View file @
a34a2b62
...
@@ -85,11 +85,24 @@ export const searchKb = async ({
...
@@ -85,11 +85,24 @@ export const searchKb = async ({
};
};
const
filterRate
=
filterRateMap
[
systemPrompts
.
length
]
||
filterRateMap
[
0
];
const
filterRate
=
filterRateMap
[
systemPrompts
.
length
]
||
filterRateMap
[
0
];
// count fixed system prompt
const
fixedSystemPrompt
=
`
${
model
.
chat
.
systemPrompt
}
${
model
.
chat
.
searchMode
===
ModelVectorSearchModeEnum
.
hightSimilarity
?
'不回答知识库外的内容.'
:
''
}
知识库内容为:`
;
const
fixedSystemTokens
=
modelToolMap
[
model
.
chat
.
chatModel
].
countTokens
({
messages
:
[{
obj
:
'System'
,
value
:
fixedSystemPrompt
}]
});
const
maxTokens
=
modelConstantsData
.
systemMaxToken
-
fixedSystemTokens
;
const
filterSystemPrompt
=
filterRate
const
filterSystemPrompt
=
filterRate
.
map
((
rate
,
i
)
=>
.
map
((
rate
,
i
)
=>
modelToolMap
[
model
.
chat
.
chatModel
].
sliceText
({
modelToolMap
[
model
.
chat
.
chatModel
].
sliceText
({
text
:
systemPrompts
[
i
],
text
:
systemPrompts
[
i
],
length
:
Math
.
floor
(
m
odelConstantsData
.
systemMaxToken
*
rate
)
length
:
Math
.
floor
(
m
axTokens
*
rate
)
})
})
)
)
.
join
(
'\n'
);
.
join
(
'\n'
);
...
@@ -122,13 +135,7 @@ export const searchKb = async ({
...
@@ -122,13 +135,7 @@ export const searchKb = async ({
code
:
200
,
code
:
200
,
searchPrompt
:
{
searchPrompt
:
{
obj
:
ChatRoleEnum
.
System
,
obj
:
ChatRoleEnum
.
System
,
value
:
`
value
:
`
${
fixedSystemPrompt
}
'
${
filterSystemPrompt
}
'`
${
model
.
chat
.
systemPrompt
}
${
model
.
chat
.
searchMode
===
ModelVectorSearchModeEnum
.
hightSimilarity
?
'不回答知识库外的内容.'
:
''
}
知识库内容为: '
${
filterSystemPrompt
}
'
`
}
}
};
};
};
};
src/service/utils/chat/claude.ts
View file @
a34a2b62
...
@@ -45,18 +45,13 @@ export const lafClaudChat = async ({
...
@@ -45,18 +45,13 @@ export const lafClaudChat = async ({
}
}
);
);
let
responseText
=
''
;
const
responseText
=
stream
?
''
:
lafResponse
.
data
?.
text
||
''
;
let
totalTokens
=
0
;
if
(
!
stream
)
{
responseText
=
lafResponse
.
data
?.
text
||
''
;
}
return
{
return
{
streamResponse
:
lafResponse
,
streamResponse
:
lafResponse
,
responseMessages
:
messages
.
concat
({
obj
:
ChatRoleEnum
.
AI
,
value
:
responseText
}),
responseMessages
:
messages
.
concat
({
obj
:
ChatRoleEnum
.
AI
,
value
:
responseText
}),
responseText
,
responseText
,
totalTokens
totalTokens
:
0
};
};
};
};
...
@@ -83,18 +78,15 @@ export const lafClaudStreamResponse = async ({
...
@@ -83,18 +78,15 @@ export const lafClaudStreamResponse = async ({
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
log
(
'pipe error'
,
error
);
console
.
log
(
'pipe error'
,
error
);
}
}
// count tokens
const
finishMessages
=
prompts
.
concat
({
const
finishMessages
=
prompts
.
concat
({
obj
:
ChatRoleEnum
.
AI
,
obj
:
ChatRoleEnum
.
AI
,
value
:
responseContent
value
:
responseContent
});
});
const
totalTokens
=
modelToolMap
[
ClaudeEnum
.
Claude
].
countTokens
({
messages
:
finishMessages
});
return
{
return
{
responseContent
,
responseContent
,
totalTokens
,
totalTokens
:
0
,
finishMessages
finishMessages
};
};
}
catch
(
error
)
{
}
catch
(
error
)
{
...
...
src/service/utils/chat/openai.ts
View file @
a34a2b62
...
@@ -96,14 +96,8 @@ export const chatResponse = async ({
...
@@ -96,14 +96,8 @@ export const chatResponse = async ({
}
}
);
);
let
responseText
=
''
;
const
responseText
=
stream
?
''
:
response
.
data
.
choices
[
0
].
message
?.
content
||
''
;
let
totalTokens
=
0
;
const
totalTokens
=
stream
?
0
:
response
.
data
.
usage
?.
total_tokens
||
0
;
// adapt data
if
(
!
stream
)
{
responseText
=
response
.
data
.
choices
[
0
].
message
?.
content
||
''
;
totalTokens
=
response
.
data
.
usage
?.
total_tokens
||
0
;
}
return
{
return
{
streamResponse
:
response
,
streamResponse
:
response
,
...
...
src/utils/chat/index.ts
View file @
a34a2b62
...
@@ -17,14 +17,14 @@ export const modelToolMap: Record<
...
@@ -17,14 +17,14 @@ export const modelToolMap: Record<
},
},
[
OpenAiChatEnum
.
GPT4
]:
{
[
OpenAiChatEnum
.
GPT4
]:
{
countTokens
:
({
messages
})
=>
countOpenAIToken
({
model
:
OpenAiChatEnum
.
GPT4
,
messages
}),
countTokens
:
({
messages
})
=>
countOpenAIToken
({
model
:
OpenAiChatEnum
.
GPT4
,
messages
}),
sliceText
:
(
data
)
=>
openAiSliceTextByToken
({
model
:
OpenAiChatEnum
.
GPT
35
,
...
data
})
sliceText
:
(
data
)
=>
openAiSliceTextByToken
({
model
:
OpenAiChatEnum
.
GPT
4
,
...
data
})
},
},
[
OpenAiChatEnum
.
GPT432k
]:
{
[
OpenAiChatEnum
.
GPT432k
]:
{
countTokens
:
({
messages
})
=>
countOpenAIToken
({
model
:
OpenAiChatEnum
.
GPT432k
,
messages
}),
countTokens
:
({
messages
})
=>
countOpenAIToken
({
model
:
OpenAiChatEnum
.
GPT432k
,
messages
}),
sliceText
:
(
data
)
=>
openAiSliceTextByToken
({
model
:
OpenAiChatEnum
.
GPT
35
,
...
data
})
sliceText
:
(
data
)
=>
openAiSliceTextByToken
({
model
:
OpenAiChatEnum
.
GPT
432k
,
...
data
})
},
},
[
ClaudeEnum
.
Claude
]:
{
[
ClaudeEnum
.
Claude
]:
{
countTokens
:
(
)
=>
0
,
countTokens
:
(
{
messages
})
=>
countOpenAIToken
({
model
:
OpenAiChatEnum
.
GPT35
,
messages
})
,
sliceText
:
ClaudeSliceTextByToken
sliceText
:
(
data
)
=>
openAiSliceTextByToken
({
model
:
OpenAiChatEnum
.
GPT35
,
...
data
})
}
}
};
};
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