ai-chatbot/lib/ai/runtime/optimized-prompt.ts
Your Name 477f215259
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
feat: update video billing and agent workspace improvements
2026-04-10 16:25:35 +08:00

80 lines
2.5 KiB
TypeScript

export function analyzeOptimizedPromptMerge(
originalText: string,
optimizedPrompt?: string,
hiddenPromptPrefix = "",
) {
const prompt = optimizedPrompt?.trim() || "";
const trimmedOriginal = String(originalText || "").trim();
const normalizedOriginal =
hiddenPromptPrefix && trimmedOriginal.startsWith(hiddenPromptPrefix)
? trimmedOriginal.slice(hiddenPromptPrefix.length).trim()
: trimmedOriginal;
const hasOriginalDemand = normalizedOriginal.length > 0;
const hasOriginalInOptimized =
hasOriginalDemand &&
(prompt.includes(normalizedOriginal) || normalizedOriginal.includes(prompt));
return {
prompt,
normalizedOriginal,
hasOriginalDemand,
hasOriginalInOptimized,
};
}
export function buildOptimizedPromptPreview(params: {
originalText: string;
optimizedPrompt?: string;
hiddenPromptPrefix?: string;
}): string | undefined {
const { prompt, normalizedOriginal, hasOriginalDemand, hasOriginalInOptimized } =
analyzeOptimizedPromptMerge(
params.originalText,
params.optimizedPrompt,
params.hiddenPromptPrefix || "",
);
if (!prompt) return undefined;
const normalizedPrompt = prompt.replace(/\s+/g, " ").trim();
if (!normalizedPrompt) return undefined;
if (hasOriginalDemand && !hasOriginalInOptimized) {
return [
`- 核心目标:${normalizedOriginal.replace(/\s+/g, " ").trim()}`,
`- 优化提示词:${normalizedPrompt}`,
].join("\n");
}
return `- ${normalizedPrompt}`;
}
export function buildDirectAgentExecutionPrompt(params: {
originalText: string;
optimizedPrompt?: string;
hiddenPromptPrefix?: string;
fallback?: string;
}) {
const originalText = String(params.originalText || "").trim();
const optimizedPrompt = String(params.optimizedPrompt || "").trim();
const hiddenPromptPrefix = String(params.hiddenPromptPrefix || "");
if (!optimizedPrompt) {
return `${hiddenPromptPrefix}${originalText || params.fallback || ""}`.trim();
}
const { normalizedOriginal, hasOriginalDemand, hasOriginalInOptimized } =
analyzeOptimizedPromptMerge(originalText, optimizedPrompt, hiddenPromptPrefix);
return hasOriginalDemand && !hasOriginalInOptimized
? [
hiddenPromptPrefix.trim(),
`【核心目标(必须优先满足)】${normalizedOriginal}`,
`【执行优化细节】${optimizedPrompt}`,
]
.filter(Boolean)
.join("\n\n")
.trim()
: `${hiddenPromptPrefix}${optimizedPrompt}`.trim();
}