feat: 市场调研落地——趋势AI人话解读(plainExplain/takeAway,采集自动生成+SSR+小程序卡)+ 首页今日知识卡

This commit is contained in:
2026-09-13 19:18:01 +08:00
parent 7210ca4393
commit dec8ab2749
5 changed files with 151 additions and 1 deletions
+30
View File
@@ -189,6 +189,33 @@ async function callAI(messages, maxTokens = 1024) {
return '';
}
/** 人话解读:每条趋势生成"一句话说清 + 对普通人意味着什么"(治 AI 焦虑的核心价值层) */
async function explainItems(items) {
const targets = items.filter(i => i.title && !i.plainExplain).slice(0, 14);
if (targets.length === 0) return items;
console.log(` → 生成人话解读 ${targets.length} 条...`);
for (const item of targets) {
const prompt = `你是"维度精灵",帮普通上班族看懂 AI 新闻。基于下面这条资讯,输出 JSON(只输出 JSON):
{"plainExplain":"用一句大白话说清这条资讯讲的是什么,30字内,不用术语","takeAway":"这对普通人意味着什么/该注意什么,一句行动向的话,30字内"}
资讯标题:${item.title}
${item.summary ? '摘要:' + String(item.summary).slice(0, 200) : ''}`;
const out = await callAI([{ role: 'user', content: prompt }], 300);
const m = out.match(/\{[\s\S]*?\}/);
if (m) {
try {
const j = JSON.parse(m[0]);
if (j.plainExplain) item.plainExplain = String(j.plainExplain).slice(0, 60);
if (j.takeAway) item.takeAway = String(j.takeAway).slice(0, 60);
} catch (e) { /* 解析失败留空,前端回退只显示标题 */ }
}
await new Promise(r => setTimeout(r, 300));
}
const ok = items.filter(i => i.plainExplain).length;
console.log(` ✓ 人话解读完成 ${ok}/${targets.length}`);
return items;
}
/** 翻译英文内容到中文 */
async function translateItems(items) {
const needTranslate = items.filter(i => !hasChinese(i.title));
@@ -342,6 +369,9 @@ async function main() {
console.log(` ✓ 中文保底补充: ${need} 条`);
}
// AI 人话解读(失败不阻断采集,字段留空前端自动回退)
try { await explainItems(items); } catch (e) { console.log(' ⚠ 人话解读失败:', e.message); }
// 全量刷新:清空旧数据(避免残留英文 / 测试数据)
await Trend.deleteMany({});