80 lines
2.5 KiB
TypeScript
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();
|
|
}
|