From caf31faf31368607752422a0f8b634a140e294b9 Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Mon, 3 Apr 2023 01:39:00 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E7=94=9F=E6=88=90qa=20prompt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/api/model/data/splitData.ts | 2 +- src/service/events/generateQA.ts | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/pages/api/model/data/splitData.ts b/src/pages/api/model/data/splitData.ts index 4bc834c34..47c062b2d 100644 --- a/src/pages/api/model/data/splitData.ts +++ b/src/pages/api/model/data/splitData.ts @@ -31,7 +31,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) const replaceText = text.replace(/(\\n|\n)+/g, ' '); // 文本拆分成 chunk - let chunks = replaceText.match(/[^!?.。]+[!?.。]/g) || []; + const chunks = replaceText.match(/[^!?.。]+[!?.。]/g) || []; const textList: string[] = []; let splitText = ''; diff --git a/src/service/events/generateQA.ts b/src/service/events/generateQA.ts index 5df5693c9..d9e0940aa 100644 --- a/src/service/events/generateQA.ts +++ b/src/service/events/generateQA.ts @@ -47,6 +47,7 @@ export async function generateQA(next = false): Promise { textList: [], errorText: error.message }); + throw new Error('账号余额不足'); } throw new Error('获取 openai key 失败'); @@ -62,7 +63,7 @@ export async function generateQA(next = false): Promise { role: 'system', content: `${ dataItem.prompt || '下面是一段长文本' - },请从中总结出5至30个问题和答案,答案尽量详细,并按以下格式返回: Q1:\nA1:\nQ2:\nA2:\n` + },请从中提取出5至30个问题和答案,并按以下格式返回: Q1:\nA1:\nQ2:\nA2:\n` }; // 请求 chatgpt 获取回答 @@ -70,7 +71,7 @@ export async function generateQA(next = false): Promise { .createChatCompletion( { model: ChatModelNameEnum.GPT35, - temperature: 0.4, + temperature: 0.8, n: 1, messages: [ systemPrompt, @@ -142,7 +143,7 @@ export async function generateQA(next = false): Promise { * 检查文本是否按格式返回 */ function splitText(text: string) { - const regex = /Q\d+:(\s*)(.*)(\s*)A\d+:(\s*)(.*)(\s*)/g; // 匹配Q和A的正则表达式 + const regex = /Q\d+:(\s*)(.*)(\s*)A\d+:(\s*)([\s\S]*?)(?=Q|$)/g; // 匹配Q和A的正则表达式 const matches = text.matchAll(regex); // 获取所有匹配到的结果 const result = []; // 存储最终的结果 @@ -150,7 +151,14 @@ function splitText(text: string) { const q = match[2]; const a = match[5]; if (q && a) { - result.push({ q, a }); // 如果Q和A都存在,就将其添加到结果中 + // 如果Q和A都存在,就将其添加到结果中 + result.push({ + q, + a: a // 过滤空行 + .split('\n') + .filter((item) => item) + .join('\n') + }); } }