WLinfoBlue 项目全面审计报告

审计日期: 2026-07-10
审计范围: 文章质量、自动化生成流程、数据抓取、工程代码、系统架构
项目规模: 238 篇中文文章 + 238 篇英文翻译,11ty 静态站,Vercel 部署
问题总数: 30 个(🔴 严重 5 个 / 🟡 中等 15 个 / 🟢 轻微 10 个)


目录


一、内容质量问题(8 个)

🔴 1. 新闻类文章严重依赖 LLM 生成,无原始素材

问题描述: 新闻类文章的抓取器只获取标题和 URL,不提供文章正文。LLM 在仅收到 ~50-200 字符素材的情况下,被要求生成 3000-5000 字的"深度分析"。

数据证据:

代码位置: scripts/fetch-tech-news.mjs 各源的数据提取逻辑

// HackerNews 示例 — 只有 title 和 url
.map((item, i) => ({
  rank: i + 1,
  title: item.title,
  url: item.url || `https://news.ycombinator.com/item?id=${item.id}`,
  source: "hackernews",
  sourceName: "HackerNews",
  id: `hn-${item.id}`,
  score: item.score || 0,
  category: "tech",
  // ← 没有 content / body / summary
}));

代码位置: scripts/daily-update.mjs 传给 generate-article.mjs 的参数

// news: AI 前沿 — 只传了 title 和来源信息
const article = articles[0];
filePath = await generateArticle(
  "news",
  {
    topic: article.title,
    context: `来源:${article.sourceName},链接:${article.url}${article.summary ? ",摘要:" + article.summary : ""}`
  },
  "AI 前沿,学术研究,技术突破"
);

影响: 文章本质上是用热搜标题作为写作提示,让 AI 自由创作,而非对真实新闻的摘要或分析。

修复建议:


🔴 2. 结构性捏造数据(Prompt 自相矛盾)

问题描述: prompt 同时要求"不许编数据"和"必须含 4-5 个含具体数字的数据点",在素材不足的情况下形成结构性矛盾,迫使模型虚构精确数值。

代码位置: scripts/generate-article.mjs — news 类目的 system prompt

// 反捏造规则(COMMON_RULES)
【数据要求】
- 所有数据必须标注来源(如:据IDC统计、根据官方文档、实测数据等)
- 如果无法确认真实数据,用"据公开资料"、"行业估算"等模糊表述
- 禁止凭空编造精确数字(如"响应延迟123ms"、"准确率99.7%")
- 宁可少写数据,也不要写假数据

// 但 system prompt 的结构性要求:
## 四、行业冲击与数据支撑
用数据和事实说话。列出 4-5 个关键数据或趋势,每个必须包含具体数字并标注来源。

矛盾点: 当 LLM 只收到一个标题(如"Apple 整合 Gemini"),无法从素材中找到任何数据,但又被强制要求"4-5 个具体数字"——唯一出路就是编造。

实际表现: 新闻类文章中反复出现无法验证的精确数值:

影响: 这是最危险的 AI 内容风险——内部连贯、结构完整、数据"精确",但本质是虚构的科技新闻。

修复建议:


🟡 3. 文章骨架完全公式化

问题描述: 所有 6 个类目的文章都遵循同一套 10-H2 骨架,读者在阅读第 2 篇后就能预测全部结构。

各类目骨架对比:

章节 news tools tutorials tips software resources
1 背景与意义 产品定位 学习目标 问题原因 背景需求 学习路线图
2 核心原理 核心功能 前置知识 快速解法 核心功能 入门资源
3 技术架构 使用体验 环境搭建 彻底解法 使用体验 进阶资源
4 数据支撑 竞品对比 核心概念 场景解法 竞品对比 工具平台
5 落地案例 实际案例 步骤详解1 实际案例 实际案例 社区推荐
6 对比表格 性能基准 步骤详解2 性能基准 性能基准 书籍推荐
7 挑战局限 定价策略 代码深入 常见误区 定价策略 阶段对比
8 适用人群 踩坑指南 验证测试 优化技巧 踩坑指南 阶段建议
9 未来预判 进阶技巧 FAQ 日常维护 进阶技巧 常见误区
10 总结 总结 下一步 总结 总结 总结

影响: 阅读体验机械、可预测,缺乏惊喜感和原创性。对 SEO 来说,Google 的 Helpful Content Update 对公式化内容的降权风险。

修复建议:


🟡 4. 标题模板重复

问题描述: 95/238 篇(40%)使用"我的真实经验/踩坑实录"标题模板。

常见模式:

影响: 读者审美疲劳,品牌调性单一。

修复建议:


🟡 5. AI 腔词禁令执行失败

问题描述: 尽管 prompt 明确禁止 15+ 个 AI 惯用过渡词,仍有 36/238 篇(15%)包含被禁词汇。

被禁词列表(COMMON_RULES):

此外、另外、至关重要、值得注意的是、综上所述、总而言之、显著提升、不仅如此、毫无疑问、不言而喻、众所周知、不难看出、由此可见、总而言之、归根结底

代码位置: scripts/generate-article.mjs 第 77-130 行(COMMON_RULES 常量)

影响: 15% 的文章仍有明显 AI 写作痕迹,拉低整体质量。

修复建议:


🟢 6. Emoji 违规

问题描述: 39/238 篇(16%)包含 emoji(💡⚠️📌等),但 prompt 明确禁止用 emoji 装饰。

影响: 轻微,但反映 prompt 约束力不足。

修复建议:


🟡 7. 案例角色同质化

问题描述: 用户案例中反复出现"小王/老张/小林"等泛化角色,且背景高度雷同。

常见模式:

影响: 案例缺乏真实感,读者难以产生共鸣。

修复建议:


🟡 8. SEO 内容簇堆量

问题描述: 同一天批量产出 5 篇同主题系列文(如 5 篇 Vibe Coding),单篇内容稀薄但覆盖大量长尾关键词。

影响: 单篇质量低,可能被 Google 识别为 Thin Content 或 Doorway Page。

修复建议:


二、生成流程问题(10 个)

🔴 9. 零人工审核

问题描述: 从 AI 生成到上线生产,全流程无人工介入。

当前流程:

LLM 生成 → 自动翻译 → 自动 commit → GitHub Actions → Vercel 部署 → 上线

缺失环节:

影响: 幻觉、坏链、低质内容、错误数据直达生产环境,且被 git 永久存档、被搜索引擎索引。

修复建议:


🔴 10. Slug 生成 Bug

问题描述: 中文标题经过 slug 正则处理后变为空字符串,导致文件名回退为 {category}-article

代码位置: scripts/generate-article.mjs 中的 slug 生成逻辑

// 当前逻辑(伪代码)
const slug = title
  .toLowerCase()
  .replace(/[^a-z0-9\s-]/g, "")  // ← 清除所有非英文字符,中文全被清光!
  .replace(/\s+/g, "-");

// 中文标题 "苹果整合Gemini" → slug = "" → 回退为 "news-article"

影响:

修复建议:


🟡 11. max_tokens: 8000 截断风险

问题描述: 中文 5000 字约消耗 7500 tokens,加上 markdown 格式标记,接近 8000 上限。

代码位置: scripts/generate-article.mjs

const response = await callAI(systemPrompt, userPrompt, {
  temperature: 0.7,
  max_tokens: 8000,  // ← 上限
});

影响: 文章可能在任意位置被截断(通常在最后一个章节中段),产生不完整内容。

修复建议:


🟡 12. 单次调用无迭代优化

问题描述: 每篇文章由 LLM 一次生成,无 outline→expand、无 self-critique、无迭代优化。

影响: 单次生成的质量天花板低,无法修正方向性错误。

修复建议:


🟢 13. 固定取 filtered[0]

问题描述: daily-update.mjs 中所有新闻选择逻辑都取过滤后第一篇文章。

const article = articles[0];  // ← 永远是第一个

影响: 每周同一天取同一来源同一话题,多样性退化。

修复建议:


🟡 14. 翻译文件命名分裂

问题描述: 两个脚本使用不同的英文文件命名约定。

脚本 输出路径
generate-article.mjs content/articles/en/{slug}-en.md
daily-update.mjs content/articles/en/{slug}.md

影响: retry-translate.mjs 需要做归一化匹配来弥合差异,增加复杂度和出错概率。

修复建议: 统一为 content/articles/en/{slug}.md(无 -en 后缀),清理现有重复文件。


🟡 15. 同一话题多版本英文

问题描述: 存在同一中文话题对应多个不同英文版的情况。

实际案例:

两版英文内容完全不同,案例不同、对比表不同、甚至核心论点不同。

影响: SEO 自相残食(duplicate content),读者困惑。

修复建议:


🟡 16. 无链接有效性验证

问题描述: prompt 要求"不编工具名",但无程序验证文章中 URL 是否真实可达。

影响: 文章中的链接可能指向 404 页面、已失效工具、或完全不存在的网站。

修复建议:


🟡 17. 无抄袭检测

问题描述: AI 生成的文章未与源材料做查重,无法发现逐字复制。

影响: 如果 LLM 记忆了训练数据中的某篇文章并逐字复现,可能产生版权问题。

修复建议:


🟡 18. validate-article.mjs 检测力弱

问题描述: 当前 QA 脚本只能检查表面特征。

当前检查项:

无法检测:

修复建议:


三、数据抓取问题(5 个)

🔴 19. 9/12 新闻源只抓标题不抓正文

问题描述: 抓取器读取列表页/标题/摘要,从不抓取文章正文。

各源数据字段:

数据源 title url summary content
HackerNews
36氪
虎嗅
IT之家
少数派
爱范儿
量子位
TechCrunch
VentureBeat
The Verge
arXiv ✅ (150字)
机器之心 ✅ (100字)

影响: 见问题 #1。这是整个内容质量问题的根源——无素材则无摘要,只有生成。

修复建议:


🟡 20. 抓取器和 workflow 重复抓取

问题描述: daily-update.yml(GitHub Actions)和 daily-update.mjs 都调用了 Awesome/PH/V2EX 抓取。

代码位置: .github/workflows/daily-update.yml

# workflow 中抓取
- run: node scripts/fetch-github-awesome.mjs
- run: node scripts/fetch-product-hunt.mjs
- run: node scripts/fetch-v2ex.mjs

# daily-update.mjs 内部又抓取一次

影响: 双倍的 API 调用、网络请求和构建时间。

修复建议: 删除 workflow 中的抓取步骤,只保留 daily-update.mjs 内部的抓取。


🟡 21. 130+ 关键词过滤过粗

问题描述: 话题相关性仅靠关键词列表匹配。

代码位置: scripts/daily-update.mjsTECH_KEYWORDS 常量

影响: 可能放过低质量话题(标题含"AI"但内容空洞),也可能误杀优质话题(标题不含关键词但内容相关)。

修复建议:


🟢 22. 固定概念库可能耗尽/过时

问题描述: ai-concepts.json、awesome-list、v2ex 数据在不同周期更新,可能枯竭或过时。

影响: 教程类文章可能重复讲解同一概念,或讲解已废弃的工具。

修复建议:


🟢 23. 翻译 API 限流风险

问题描述: Tencent 逐段翻译仅 200ms 延迟,3000 字文章(30-50 段)连续调用。

代码位置: scripts/generate-article.mjstencentTranslate 函数

// 每段之间仅 200ms 延迟
await new Promise(r => setTimeout(r, 200));

影响: 可能触发 Tencent Cloud 限流,导致翻译失败或降级为 [TODO: needs translation]

修复建议: 将延迟提升至 500-1000ms,或实现批量翻译接口。


四、工程/代码问题(5 个)

🟡 24. 搜索索引 Bug

问题描述: generate-search-index.js 存在分词缺陷,238 篇文章只索引了 4 篇。

代码位置: scripts/generate-search-index.js

影响: 站点搜索功能基本失效,用户无法搜索到绝大多数文章。

修复建议:


🟢 25. 大量脏文件堆积

问题描述: 根目录和 scripts/ 散布 50+ 个调试残留文件。

典型文件:

影响: 项目混乱,新人上手困难,可能误将调试文件当作生产代码。

修复建议:


🟡 26. Prompt 全为纯文本模式

问题描述: 所有 prompt 使用 flat text,未用 JSON mode、few-shot、结构化输出约束。

影响:

修复建议:


🟡 27. validate-article.mjs 检测力弱

问题描述: 见问题 #18。


五、架构/设计问题(3 个)

🟡 28. "反 AI" prompt 自相矛盾

问题描述: 系统要求 AI "伪装人类",但同时又用工业化模板批量生产。

矛盾三角:

  1. "你不是 AI,你是一个有血有肉的技术编辑" → 要求伪装人类
  2. "所有文章必须遵循 10 章节骨架" → 工业化生产
  3. "像人写的,有观点有态度" → 要求个性化

影响: 产出内容在"像人"和"是 AI"之间摇摆,形成恐怖谷效应。

修复建议:


🟢 29. 无静态压缩配置

问题描述: 未见 Vercel/nginx 配置中压缩 HTML/CSS/JS。

影响: 页面加载性能次优,Core Web Vitals 可能不达标。

修复建议: 在 vercel.json 中增加 headers 配置启用 gzip/brotli。


🟢 30. 无增量构建机制

问题描述: 238 篇文章、~48 页分页,每次构建全量重建。

影响: 构建时间随文章增长线性增加。

修复建议: 11ty 本身有增量构建支持(--incremental),确保启用。


六、修复优先级路线图

第一批:立即修复(影响内容正确性)

优先级 问题 预计工时 理由
P0 #10 Slug 生成 Bug 1h 文件静默覆盖,数据丢失
P0 #1 新闻无原始素材 4-8h 内容质量问题的根源
P0 #2 结构性捏造数据 2-4h 最危险的 AI 内容风险
P0 #9 零人工审核 2-4h 错误直达生产

第二批:短期优化(提升内容质量)

优先级 问题 预计工时 理由
P1 #19 抓取器增加正文抓取 4-6h 解决 P0 #1 的具体实现
P1 #11 max_tokens 截断 0.5h 一行代码修改
P1 #14 翻译文件命名分裂 1h 消除双 convention 混乱
P1 #15 同一话题多版本 2h SEO 自残风险
P1 #24 搜索索引 Bug 2-4h 搜索功能基本失效

第三批:中期改善(提升工程质量)

优先级 问题 预计工时 理由
P2 #3 文章骨架公式化 4-8h 需要设计多套模板
P2 #5 AI 腔词禁令 1-2h 增加后处理替换
P2 #18/27 validate 增强 3-5h 提升 QA 覆盖率
P2 #20 重复抓取 0.5h 删除冗余步骤
P2 #26 Prompt 结构化 3-5h 提升输出稳定性

第四批:长期优化(锦上添花)

优先级 问题 预计工时 理由
P3 #4 标题模板 2h 增加模板多样性
P3 #7 案例同质化 1-2h prompt 调整
P3 #8 SEO 内容簇 2-4h 合并或差异化
P3 #12 迭代优化 8-16h 两步法生成
P3 #13 固定取第一篇 0.5h 随机化
P3 #16 链接验证 2-3h 后处理脚本
P3 #17 抄袭检测 4-8h 外部工具集成
P3 #21 关键词过滤 2-4h 语义分类
P3 #22 概念库耗尽 2h 标记+定期更新
P3 #23 翻译限流 0.5h 增加延迟
P3 #25 脏文件清理 1h 整理项目
P3 #28 反 AI 矛盾 持续 定位调整
P3 #29 静态压缩 0.5h 配置修改
P3 #30 增量构建 0.5h 启用 --incremental

附录:关键文件索引

文件 作用 涉及问题
scripts/daily-update.mjs 自动化编排器 #1, #9, #13, #14, #20, #21
scripts/generate-article.mjs 文章生成核心 #2, #5, #6, #10, #11, #12, #23, #26
scripts/fetch-tech-news.mjs 新闻抓取 #1, #19
scripts/validate-article.mjs 质量检查 #5, #6, #18, #27
scripts/retry-translate.mjs 翻译回填 #14, #15
scripts/generate-search-index.js 搜索索引 #24
scripts/generate-translation-pairs.js 翻译对生成 #15
.github/workflows/daily-update.yml CI 工作流 #9, #20
.eleventy.js 11ty 配置 #30
vercel.json 部署配置 #29
config/translation-pairs.json 中英映射 #15

本报告由自动化代码审计生成,基于对项目全部核心脚本、模板、配置文件和内容样本的逐行分析。所有问题均有代码级证据支撑。