68 lines
2.0 KiB
TypeScript
Raw Normal View History

/**
* prompt
* prompt
*/
function processEnvString(input: string | undefined): string {
if (!input) return "";
return input
.replace(/\\n/g, "\n")
.replace(/\\t/g, "\t")
.replace(/\\r/g, "\r");
}
/**
* prompt
* @param basePrompt prompt
* @param promptKey prompt
* @returns prompt
*/
export function loadPrompt(basePrompt: string, promptKey: string): string {
// 轉換為大寫,作為環境變數的一部分
const envKey = promptKey.toUpperCase();
// 檢查是否有替換模式的環境變數
const overrideEnvVar = `MCP_PROMPT_${envKey}`;
if (process.env[overrideEnvVar]) {
// 使用環境變數完全替換原始 prompt
return processEnvString(process.env[overrideEnvVar]);
}
// 檢查是否有追加模式的環境變數
const appendEnvVar = `MCP_PROMPT_${envKey}_APPEND`;
if (process.env[appendEnvVar]) {
// 將環境變數內容追加到原始 prompt 後
return `${basePrompt}\n\n${processEnvString(process.env[appendEnvVar])}`;
}
// 如果沒有自定義,則使用原始 prompt
return basePrompt;
}
/**
* prompt
* @param promptTemplate prompt
* @param params
* @returns prompt
*/
export function generatePrompt(
promptTemplate: string,
params: Record<string, any> = {}
): string {
// 使用簡單的模板替換方法,將 {paramName} 替換為對應的參數值
let result = promptTemplate;
Object.entries(params).forEach(([key, value]) => {
// 如果值為 undefined 或 null使用空字串替換
const replacementValue =
value !== undefined && value !== null ? String(value) : "";
// 使用正則表達式替換所有匹配的佔位符
const placeholder = new RegExp(`\\{${key}\\}`, "g");
result = result.replace(placeholder, replacementValue);
});
return result;
}