mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-21 11:43:56 +00:00
89 lines
2.1 KiB
TypeScript
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
|
|
};
|
|
}
|
|
}
|