This commit is contained in:
fengchuanhn@gmail.com
2026-05-18 09:45:44 +08:00
parent c559cb1581
commit 35944cee39
4 changed files with 425 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
"use strict";
/**
* 选题库一键仿写标题(对齐 Electron ipAgent:rewriteTitles
*/
const pipelineNative = require("./pipeline_native.js");
const desktopConfig = require("./desktop_config.js");
const DEFAULT_TOPIC_REWRITE_PROMPT = `参考以下标题,帮我生成新的标题。要求:
1. 保持相似的主题和风格
2. 标题简洁有力
3. 不要添加表情符号和标签
4. 直接输出与参考数量相同的新标题,每行一个,不要编号
参考标题:
{{content}}
请生成新标题:`;
function buildTopicRewritePrompt(titles, customPrompt) {
const titlesText = titles.map((t, i) => `${i + 1}. ${t}`).join("\n");
let prompt = String(customPrompt || "").trim();
if (!prompt) {
prompt = DEFAULT_TOPIC_REWRITE_PROMPT;
}
return prompt
.replace(/\{\{content\}\}/g, titlesText)
.replace(/\{content\}/g, titlesText);
}
function parseRewrittenLines(content, fallbackTitles) {
const lines = String(content || "")
.trim()
.split("\n")
.map((line) => line.replace(/^[\d\s.\-、]+/, "").trim())
.filter(Boolean);
if (lines.length >= fallbackTitles.length) {
return lines.slice(0, fallbackTitles.length);
}
const out = [...lines];
for (let i = lines.length; i < fallbackTitles.length; i++) {
out.push(fallbackTitles[i]);
}
return out;
}
globalThis.__nodejsMain = async function (params) {
const titles = Array.isArray(params?.titles) ? params.titles.filter(Boolean) : [];
if (titles.length === 0) {
return { success: false, error: "没有可仿写的标题" };
}
const modelConfig = desktopConfig.buildModelConfig();
const check = desktopConfig.validateModelConfig(modelConfig);
if (!check.ok) {
return { success: false, error: check.error };
}
const prompt = buildTopicRewritePrompt(titles, params?.rewritePrompt);
const chat = await pipelineNative.openaiChat({
apiUrl: modelConfig.apiUrl,
apiKey: modelConfig.apiKey,
model: modelConfig.apiModelId,
messages: [{ role: "user", content: prompt }],
temperature: 0.85,
max_tokens: 1500,
});
if (!chat?.success || !chat.content) {
return { success: false, error: chat?.error || "标题仿写失败" };
}
const rewrittenTitles = parseRewrittenLines(chat.content, titles);
return { success: true, rewrittenTitles };
};