perf: template

This commit is contained in:
archer
2023-07-23 16:08:00 +08:00
parent 5e0b147048
commit b7d18e38d1
7 changed files with 923 additions and 1338 deletions

View File

@@ -51,7 +51,7 @@ export const dispatchClassifyQuestion = async (props: Record<string, any>): Prom
// function body
const agentFunction = {
name: agentFunName,
description: '判断用户问题的类型,并返回指定值',
description: '判断用户问题的类型属于哪方面,返回对应的枚举字段',
parameters: {
type: 'object',
properties: {
@@ -81,13 +81,9 @@ export const dispatchClassifyQuestion = async (props: Record<string, any>): Prom
const arg = JSON.parse(response.data.choices?.[0]?.message?.function_call?.arguments || '');
if (!arg.type) {
throw new Error('');
}
const tokens = response.data.usage?.total_tokens || 0;
const result = agents.find((item) => item.key === arg.type) || agents[0];
const result = agents.find((item) => item.key === arg?.type) || agents[0];
return {
[result.key]: 1,

View File

@@ -31,7 +31,7 @@ const simplifyStr = (str = '') =>
.replace(/[^\S\r\n]+/g, ' ') // 连续空白内容
.trim();
/* 聊天上下文 tokens 截断 */
/* slice chat context by tokens */
export const ChatContextFilter = ({
model,
prompts,
@@ -41,33 +41,19 @@ export const ChatContextFilter = ({
prompts: ChatItemType[];
maxTokens: number;
}) => {
const systemPrompts: ChatItemType[] = [];
const chatPrompts: ChatItemType[] = [];
const rawTextLen = prompts.reduce((sum, item) => sum + item.value.length, 0);
let rawTextLen = 0;
prompts.forEach((item) => {
const val = simplifyStr(item.value);
rawTextLen += val.length;
const data = {
_id: item._id,
obj: item.obj,
value: val
};
if (item.obj === ChatRoleEnum.System) {
systemPrompts.push(data);
} else {
chatPrompts.push(data);
}
});
// 长度太小时,不需要进行 token 截断
// If the text length is less than half of the maximum token, no calculation is required
if (rawTextLen < maxTokens * 0.5) {
return [...systemPrompts, ...chatPrompts];
return prompts;
}
// 去掉 system 的 token
// filter startWith system prompt
const chatStartIndex = prompts.findIndex((item) => item.obj !== ChatRoleEnum.System);
const systemPrompts: ChatItemType[] = prompts.slice(0, chatStartIndex);
const chatPrompts: ChatItemType[] = prompts.slice(chatStartIndex);
// reduce token of systemPrompt
maxTokens -= modelToolMap.countTokens({
model,
messages: systemPrompts