Files
FastGPT/packages/service/core/ai/functions/createQuestionGuide.ts
Archer 9918133426 update prompt version (#4242)
* sync collection

* remove lock

* update prompt version
2025-03-27 10:05:30 +08:00

89 lines
2.1 KiB
TypeScript

import type { ChatCompletionMessageParam } from '@fastgpt/global/core/ai/type.d';
import { createChatCompletion } from '../config';
import { countGptMessagesTokens, countPromptTokens } from '../../../common/string/tiktoken/index';
import { loadRequestMessages } from '../../chat/utils';
import { llmCompletionsBodyFormat } from '../utils';
import {
QuestionGuidePrompt,
QuestionGuideFooterPrompt
} from '@fastgpt/global/core/ai/prompt/agent';
import { addLog } from '../../../common/system/log';
import json5 from 'json5';
export async function createQuestionGuide({
messages,
model,
customPrompt
}: {
messages: ChatCompletionMessageParam[];
model: string;
customPrompt?: string;
}): Promise<{
result: string[];
inputTokens: number;
outputTokens: number;
}> {
const concatMessages: ChatCompletionMessageParam[] = [
...messages,
{
role: 'user',
content: `${customPrompt || QuestionGuidePrompt}\n${QuestionGuideFooterPrompt}`
}
];
const requestMessages = await loadRequestMessages({
messages: concatMessages,
useVision: false
});
const { response: data } = await createChatCompletion({
body: llmCompletionsBodyFormat(
{
model,
temperature: 0.1,
max_tokens: 200,
messages: requestMessages,
stream: false
},
model
)
});
const answer = data.choices?.[0]?.message?.content || '';
const start = answer.indexOf('[');
const end = answer.lastIndexOf(']');
const inputTokens = await countGptMessagesTokens(requestMessages);
const outputTokens = await countPromptTokens(answer);
if (start === -1 || end === -1) {
addLog.warn('Create question guide error', { answer });
return {
result: [],
inputTokens: 0,
outputTokens: 0
};
}
const jsonStr = answer
.substring(start, end + 1)
.replace(/(\\n|\\)/g, '')
.replace(/ /g, '');
try {
return {
result: json5.parse(jsonStr),
inputTokens,
outputTokens
};
} catch (error) {
console.log(error);
return {
result: [],
inputTokens: 0,
outputTokens: 0
};
}
}