From 1fe5cd751a60a4c4543c82a4fe9eafa4e52a0c54 Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Tue, 11 Apr 2023 18:17:00 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E7=9F=A5=E8=AF=86=E5=BA=93=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/api/chat/vectorGpt.ts | 9 ++++--- src/pages/api/openapi/chat/vectorGpt.ts | 25 +++++++++++-------- .../model/detail/components/ModelDataCard.tsx | 2 +- src/service/utils/tools.ts | 2 +- 4 files changed, 22 insertions(+), 16 deletions(-) diff --git a/src/pages/api/chat/vectorGpt.ts b/src/pages/api/chat/vectorGpt.ts index daf99fa14..aa5313d3c 100644 --- a/src/pages/api/chat/vectorGpt.ts +++ b/src/pages/api/chat/vectorGpt.ts @@ -13,6 +13,7 @@ import { connectRedis } from '@/service/redis'; import { VecModelDataPrefix } from '@/constants/redis'; import { vectorToBuffer } from '@/utils/tools'; import { openaiCreateEmbedding, gpt35StreamResponse } from '@/service/utils/openai'; +import dayjs from 'dayjs'; /* 发送提示词 */ export default async function handler(req: NextApiRequest, res: NextApiResponse) { @@ -70,7 +71,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) `idx:${VecModelDataPrefix}:hash`, `@modelId:{${String( chat.modelId._id - )}} @vector:[VECTOR_RANGE 0.24 $blob]=>{$YIELD_DISTANCE_AS: score}`, + )}} @vector:[VECTOR_RANGE 0.22 $blob]=>{$YIELD_DISTANCE_AS: score}`, 'RETURN', '1', 'text', @@ -97,12 +98,14 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) } if (formatRedisPrompt.length > 0) { - // textArr 筛选,最多 2800 tokens + // 系统提示词过滤,最多 2800 tokens const systemPrompt = systemPromptFilter(formatRedisPrompt, 2800); prompts.unshift({ obj: 'SYSTEM', - value: `${model.systemPrompt} 知识库内容是最新的,知识库内容为: "${systemPrompt}"` + value: `${model.systemPrompt} 用知识库内容回答,知识库内容为: "当前时间:${dayjs().format( + 'YYYY/MM/DD HH:mm:ss' + )} ${systemPrompt}"` }); } else { return res.send('对不起,你的问题不在知识库中。'); diff --git a/src/pages/api/openapi/chat/vectorGpt.ts b/src/pages/api/openapi/chat/vectorGpt.ts index b0038e972..bc105abf2 100644 --- a/src/pages/api/openapi/chat/vectorGpt.ts +++ b/src/pages/api/openapi/chat/vectorGpt.ts @@ -16,6 +16,7 @@ import { connectRedis } from '@/service/redis'; import { VecModelDataPrefix } from '@/constants/redis'; import { vectorToBuffer } from '@/utils/tools'; import { openaiCreateEmbedding, gpt35StreamResponse } from '@/service/utils/openai'; +import dayjs from 'dayjs'; /* 发送提示词 */ export default async function handler(req: NextApiRequest, res: NextApiResponse) { @@ -87,7 +88,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) const redisData: any[] = await redis.sendCommand([ 'FT.SEARCH', `idx:${VecModelDataPrefix}:hash`, - `@modelId:{${modelId}} @vector:[VECTOR_RANGE 0.24 $blob]=>{$YIELD_DISTANCE_AS: score}`, + `@modelId:{${modelId}} @vector:[VECTOR_RANGE 0.22 $blob]=>{$YIELD_DISTANCE_AS: score}`, 'RETURN', '1', 'text', @@ -114,22 +115,24 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) } } - if (formatRedisPrompt.length === 0) { - throw new Error('对不起,我没有找到你的问题'); - } - // system 合并 if (prompts[0].obj === 'SYSTEM') { formatRedisPrompt.unshift(prompts.shift()?.value || ''); } - // 系统提示词筛选,最多 2800 tokens - const systemPrompt = systemPromptFilter(formatRedisPrompt, 2800); + if (formatRedisPrompt.length > 0) { + // 系统提示词过滤,最多 2800 tokens + const systemPrompt = systemPromptFilter(formatRedisPrompt, 2800); - prompts.unshift({ - obj: 'SYSTEM', - value: `${model.systemPrompt} 知识库内容是最新的,知识库内容为: "${systemPrompt}"` - }); + prompts.unshift({ + obj: 'SYSTEM', + value: `${model.systemPrompt} 用知识库内容回答,知识库内容为: "当前时间:${dayjs().format( + 'YYYY/MM/DD HH:mm:ss' + )} ${systemPrompt}"` + }); + } else { + return res.send('对不起,你的问题不在知识库中。'); + } // 控制在 tokens 数量,防止超出 const filterPrompts = openaiChatFilter(prompts, modelConstantsData.contextMaxToken); diff --git a/src/pages/model/detail/components/ModelDataCard.tsx b/src/pages/model/detail/components/ModelDataCard.tsx index c4055cbf8..45d35bdf1 100644 --- a/src/pages/model/detail/components/ModelDataCard.tsx +++ b/src/pages/model/detail/components/ModelDataCard.tsx @@ -152,7 +152,7 @@ const ModelDataCard = ({ model }: { model: ModelSchema }) => { > 手动输入 - 文本内容 QA 拆分 + 文本/文件 QA 拆分 网站内容 QA 拆分 csv 问答对导入 diff --git a/src/service/utils/tools.ts b/src/service/utils/tools.ts index 1d02cc41f..bbc67a463 100644 --- a/src/service/utils/tools.ts +++ b/src/service/utils/tools.ts @@ -91,7 +91,7 @@ export const openaiChatFilter = (prompts: ChatItemType[], maxTokens: number) => const formatPrompts = prompts.map((item) => ({ obj: item.obj, value: item.value - .replace(/[\u3000\u3001\uff01-\uff5e\u3002]/g, ' ') // 中文标点改空格 + // .replace(/[\u3000\u3001\uff01-\uff5e\u3002]/g, ' ') // 中文标点改空格 .replace(/\n+/g, '\n') // 连续空行 .replace(/[^\S\r\n]+/g, ' ') // 连续空白内容 .trim()