diff --git a/.ai_cache/198ba1700861d3d81c32e4135edbe41c.json b/.ai_cache/198ba1700861d3d81c32e4135edbe41c.json new file mode 100644 index 0000000..b83374c --- /dev/null +++ b/.ai_cache/198ba1700861d3d81c32e4135edbe41c.json @@ -0,0 +1,6 @@ +{ + "summary": "该项目为MkDocs文档系统提供AI驱动的智能摘要生成和阅读统计功能,支持OpenAI、DeepSeek等多API服务。核心特性包括自动生成80-120字高质量摘要、多语言支持、智能内容清理和高效缓存系统,同时提供精准的中文阅读统计和阅读时间估算。通过灵活的配置选项,用户可实现文件夹或页面级别的精确控制,并自定义API服务和提示词。该工具显著提升了技术文档的可读性和管理效率。", + "service": "deepseek", + "page_title": "MkDocs文档AI摘要", + "timestamp": "2025-06-03T20:49:35.847514" +} \ No newline at end of file diff --git a/.ai_cache/608652015d8fccc03a9c1fb96962eb06.json b/.ai_cache/608652015d8fccc03a9c1fb96962eb06.json new file mode 100644 index 0000000..d20a35b --- /dev/null +++ b/.ai_cache/608652015d8fccc03a9c1fb96962eb06.json @@ -0,0 +1,6 @@ +{ + "summary": "该项目为MkDocs文档系统提供AI驱动的智能摘要生成和阅读统计功能,支持多语言和多种AI服务API。核心特性包括自动生成80-120字高质量摘要、智能内容清理、高效缓存系统以及精准的阅读时间估算。通过灵活的配置选项,用户可实现文件夹或页面级别的控制,并自定义API服务和提示词。该方案具有经济高效、性能优化等特点,适用于技术文档和博客的自动化摘要需求。", + "service": "deepseek", + "page_title": "MkDocs文档AI摘要", + "timestamp": "2025-06-03T20:37:34.409741" +} \ No newline at end of file diff --git a/ZH-TW/index.html b/ZH-TW/index.html index a8ecb7c..608e055 100644 --- a/ZH-TW/index.html +++ b/ZH-TW/index.html @@ -828,6 +828,8 @@ + + @@ -875,6 +877,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/about/geren/index.html b/about/geren/index.html index d9f8390..296916a 100644 --- a/about/geren/index.html +++ b/about/geren/index.html @@ -834,6 +834,8 @@ + + @@ -881,6 +883,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/about/resume/index.html b/about/resume/index.html index e7f1b66..707b7bc 100644 --- a/about/resume/index.html +++ b/about/resume/index.html @@ -829,6 +829,8 @@ + + @@ -876,6 +878,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/about/test/index.html b/about/test/index.html index 01f9bf4..9f332a3 100644 --- a/about/test/index.html +++ b/about/test/index.html @@ -825,6 +825,8 @@ + + @@ -872,6 +874,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/about/zcw/index.html b/about/zcw/index.html index 0665e57..b9f90b9 100644 --- a/about/zcw/index.html +++ b/about/zcw/index.html @@ -832,6 +832,8 @@ + + @@ -879,6 +881,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/blog/2021/12/18/博客文章测试/index.html b/blog/2021/12/18/博客文章测试/index.html index 9a48de9..fa33fc7 100644 --- a/blog/2021/12/18/博客文章测试/index.html +++ b/blog/2021/12/18/博客文章测试/index.html @@ -828,6 +828,8 @@ + + @@ -875,6 +877,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/blog/2022/06/06/2022网站更新记录/index.html b/blog/2022/06/06/2022网站更新记录/index.html index fc4c6b0..6c1f3c1 100644 --- a/blog/2022/06/06/2022网站更新记录/index.html +++ b/blog/2022/06/06/2022网站更新记录/index.html @@ -834,6 +834,8 @@ + + @@ -881,6 +883,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2485,10 +2517,10 @@ -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    2022年网站更新主要包括技术框架搭建和用户体验优化。6月选定MKdocs作为建站框架,10月完成Github仓库创建并启用独立域名。关键改进包括取消cookie确认弹窗以简化访问流程、增强隐私保护,并新增首页反馈功能。更新体现了从技术选型到交互优化的完整建设路径,重点关注用户友好性和数据隐私。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:64

    diff --git a/blog/2023/12/21/2023网站更新记录/index.html b/blog/2023/12/21/2023网站更新记录/index.html index 0f045b4..46d7b83 100644 --- a/blog/2023/12/21/2023网站更新记录/index.html +++ b/blog/2023/12/21/2023网站更新记录/index.html @@ -834,6 +834,8 @@ + + @@ -881,6 +883,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2575,10 +2607,10 @@ -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    2023年网站更新聚焦功能优化与体验提升,包括引入AI问答机器人(25条/月限制)、多语言支持(含台湾语言)、国内镜像站点和Mkdocs-Wcowin主题。技术改进涉及Latex渲染修复、图片懒加载、移动端适配及搜索功能实现,同时优化了网页流畅度与字体显示。新增Blog板块、留言板及友链功能,持续完善用户交互体验。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:392

    diff --git a/blog/2024/01/01/2024网站更新记录/index.html b/blog/2024/01/01/2024网站更新记录/index.html index 483cd43..e687376 100644 --- a/blog/2024/01/01/2024网站更新记录/index.html +++ b/blog/2024/01/01/2024网站更新记录/index.html @@ -834,6 +834,8 @@ + + @@ -881,6 +883,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2665,10 +2697,10 @@ -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    该网站2024年持续优化性能与用户体验,主要改进包括:通过CDN加速提升访问速度,精简冗余JS/CSS代码,优化UI设计和注脚显示,迁移图片至稳定图床。技术层面引入自动新标签页打开功能,集成git-revision插件记录文档变更,并完善MKdocs教程体系。全站被主流搜索引擎收录,友链扩展至16个,同时保持代码简洁性与可维护性。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:522 | 有效代码行数:43

    diff --git a/blog/2025/01/01/2025网站更新记录/index.html b/blog/2025/01/01/2025网站更新记录/index.html index b5f992a..6da0f8f 100644 --- a/blog/2025/01/01/2025网站更新记录/index.html +++ b/blog/2025/01/01/2025网站更新记录/index.html @@ -832,6 +832,8 @@ + + @@ -879,6 +881,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2582,10 +2614,10 @@ -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    2025年网站更新主要围绕性能优化和功能改进展开,包括持续优化网站流畅度、修复Markdown解析器渲染问题、改进友链统计准确性、修复评论区定位bug。同时更新了MKdocs教程以适应最新版本,优化留言板布局并清理失效图片链接。此外还尝试引入glightbox插件提升图片查看体验,并通过代码重写显著提升加载速度。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:349

    diff --git a/blog/MIT/index.html b/blog/MIT/index.html index 8eded32..4ea39b2 100644 --- a/blog/MIT/index.html +++ b/blog/MIT/index.html @@ -841,6 +841,8 @@ + + @@ -891,6 +893,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2369,10 +2401,10 @@

    许可声明

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    MIT许可证授予用户自由使用、修改、分发软件的广泛权利,仅要求保留版权声明和许可条款。该许可证明确声明软件不提供任何担保,作者不对使用后果承担责任。作为宽松开源协议,MIT允许商业用途和私有修改,是开发者广泛采用的标准许可之一。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:252

    diff --git a/blog/Mkdocs/mkdocs1/index.html b/blog/Mkdocs/mkdocs1/index.html index 6bf6bdf..bcacabe 100644 --- a/blog/Mkdocs/mkdocs1/index.html +++ b/blog/Mkdocs/mkdocs1/index.html @@ -912,6 +912,8 @@ + + @@ -962,6 +964,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2490,13 +2522,13 @@

    1.利用Mkdocs部署静态网页

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    本文介绍了使用MkDocs构建静态网站并部署到GitHub Pages的完整流程。重点讲解了通过GitHub Desktop管理仓库、配置mkdocs.yml文件、设置GitHub Actions自动化部署等关键步骤,并提供了Material主题的配置建议。该方法适合快速搭建技术文档或博客网站,具有版本控制友好、部署简单的特点,最后还提供了实时预览和自定义域名的实现方式。

    -
    +

    📖 阅读信息

    -

    阅读时间:1 分钟 | 中文字符:485 | 有效代码行数:75

    +

    阅读时间:1 分钟 | 中文字符:485 | 有效代码行数:73

    Info

    diff --git a/blog/Mkdocs/mkdocs2/index.html b/blog/Mkdocs/mkdocs2/index.html index 566bc61..efd73bf 100644 --- a/blog/Mkdocs/mkdocs2/index.html +++ b/blog/Mkdocs/mkdocs2/index.html @@ -1053,6 +1053,8 @@ + + @@ -1103,6 +1105,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2772,10 +2804,10 @@

    2.Mkdocs配置说明(mkdocs.yml)

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    本文详细介绍了Mkdocs配置文件mkdocs.yml的核心配置项,包括站点基本信息设置、Material主题配色方案(支持明暗模式切换)、导航功能优化(如目录跟踪、返回顶部按钮)、搜索增强功能以及Markdown扩展支持。重点讲解了标签系统实现方法、自定义CSS/JS引入方式,并提供了扩展网站功能的实践建议,如添加数学公式支持、鼠标样式和评论系统等。配置文件采用YAML语法,通过灵活组合各项参数可快速构建功能完善的文档网站。

    -
    +

    📖 阅读信息

    阅读时间:2 分钟 | 中文字符:818 | 有效代码行数:555

    diff --git a/blog/Mkdocs/mkdocs3/index.html b/blog/Mkdocs/mkdocs3/index.html index 0953887..090e6d5 100644 --- a/blog/Mkdocs/mkdocs3/index.html +++ b/blog/Mkdocs/mkdocs3/index.html @@ -18,7 +18,7 @@ - + @@ -841,6 +841,8 @@ + + @@ -891,6 +893,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2676,16 +2708,16 @@
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + @@ -2695,9 +2727,9 @@ diff --git a/blog/Mkdocs/mkfirst/index.html b/blog/Mkdocs/mkfirst/index.html index 0b7592c..92ac0df 100644 --- a/blog/Mkdocs/mkfirst/index.html +++ b/blog/Mkdocs/mkfirst/index.html @@ -921,6 +921,8 @@ + + @@ -971,6 +973,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2508,10 +2540,10 @@

    0.Mkdocs教程前言

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    本文介绍了MkDocs文档工具的学习资源和使用指南,包括官方教程、Material主题、插件列表以及作者提供的中文教程(语雀、CSDN、知乎)。内容涵盖快速部署静态网站到GitHub Pages、配置mkdocs.yml文件以及添加博客功能,并附有视频教程。最后请求使用者注明教程来源并支持友链申请。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:222 | 有效代码行数:5

    diff --git a/blog/archive/2021/index.html b/blog/archive/2021/index.html index 186cfeb..40676d4 100644 --- a/blog/archive/2021/index.html +++ b/blog/archive/2021/index.html @@ -832,6 +832,8 @@ + + @@ -879,6 +881,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/blog/archive/2022/index.html b/blog/archive/2022/index.html index be7d925..b3d862b 100644 --- a/blog/archive/2022/index.html +++ b/blog/archive/2022/index.html @@ -832,6 +832,8 @@ + + @@ -879,6 +881,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2392,10 +2424,10 @@

    2022网站更新记录

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    2022年网站更新主要包括技术框架搭建和用户体验优化。6月选定MKdocs作为建站框架,10月完成Github仓库创建并启用独立域名。关键改进包括取消cookie确认弹窗以简化访问流程、增强隐私保护,并新增首页反馈功能。更新体现了从技术选型到交互优化的完整建设路径,重点关注用户友好性和数据隐私。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:64

    diff --git a/blog/archive/2023/index.html b/blog/archive/2023/index.html index 9b82573..d2faab9 100644 --- a/blog/archive/2023/index.html +++ b/blog/archive/2023/index.html @@ -832,6 +832,8 @@ + + @@ -879,6 +881,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2392,10 +2424,10 @@

    2023网站更新记录

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    2023年网站更新聚焦功能优化与体验提升,包括引入AI问答机器人(25条/月限制)、多语言支持(含台湾语言)、国内镜像站点和Mkdocs-Wcowin主题。技术改进涉及Latex渲染修复、图片懒加载、移动端适配及搜索功能实现,同时优化了网页流畅度与字体显示。新增Blog板块、留言板及友链功能,持续完善用户交互体验。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:392

    diff --git a/blog/archive/2024/index.html b/blog/archive/2024/index.html index ccce8d2..0d24fbd 100644 --- a/blog/archive/2024/index.html +++ b/blog/archive/2024/index.html @@ -832,6 +832,8 @@ + + @@ -879,6 +881,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2392,10 +2424,10 @@

    2024网站更新记录

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    该网站2024年持续优化性能与用户体验,主要改进包括:通过CDN加速提升访问速度,精简冗余JS/CSS代码,优化UI设计和注脚显示,迁移图片至稳定图床。技术层面引入自动新标签页打开功能,集成git-revision插件记录文档变更,并完善MKdocs教程体系。全站被主流搜索引擎收录,友链扩展至16个,同时保持代码简洁性与可维护性。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:522 | 有效代码行数:43

    diff --git a/blog/archive/2025/index.html b/blog/archive/2025/index.html index 76648dc..74f422f 100644 --- a/blog/archive/2025/index.html +++ b/blog/archive/2025/index.html @@ -832,6 +832,8 @@ + + @@ -879,6 +881,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2392,10 +2424,10 @@

    2025网站更新记录

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    2025年网站更新主要围绕性能优化和功能改进展开,包括持续优化网站流畅度、修复Markdown解析器渲染问题、改进友链统计准确性、修复评论区定位bug。同时更新了MKdocs教程以适应最新版本,优化留言板布局并清理失效图片链接。此外还尝试引入glightbox插件提升图片查看体验,并通过代码重写显著提升加载速度。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:349

    diff --git a/blog/category/hello-world/index.html b/blog/category/hello-world/index.html index 8c44d4a..50d77a0 100644 --- a/blog/category/hello-world/index.html +++ b/blog/category/hello-world/index.html @@ -832,6 +832,8 @@ + + @@ -879,6 +881,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/blog/category/网站更新记录/index.html b/blog/category/网站更新记录/index.html index ca51798..d7155a8 100644 --- a/blog/category/网站更新记录/index.html +++ b/blog/category/网站更新记录/index.html @@ -832,6 +832,8 @@ + + @@ -879,6 +881,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2392,10 +2424,10 @@

    2025网站更新记录

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    2025年网站更新主要围绕性能优化和功能改进展开,包括持续优化网站流畅度、修复Markdown解析器渲染问题、改进友链统计准确性、修复评论区定位bug。同时更新了MKdocs教程以适应最新版本,优化留言板布局并清理失效图片链接。此外还尝试引入glightbox插件提升图片查看体验,并通过代码重写显著提升加载速度。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:349

    @@ -2516,10 +2548,10 @@

    2024网站更新记录

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    该网站2024年持续优化性能与用户体验,主要改进包括:通过CDN加速提升访问速度,精简冗余JS/CSS代码,优化UI设计和注脚显示,迁移图片至稳定图床。技术层面引入自动新标签页打开功能,集成git-revision插件记录文档变更,并完善MKdocs教程体系。全站被主流搜索引擎收录,友链扩展至16个,同时保持代码简洁性与可维护性。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:522 | 有效代码行数:43

    @@ -2802,10 +2834,10 @@ Look at this source

    2023网站更新记录

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    2023年网站更新聚焦功能优化与体验提升,包括引入AI问答机器人(25条/月限制)、多语言支持(含台湾语言)、国内镜像站点和Mkdocs-Wcowin主题。技术改进涉及Latex渲染修复、图片懒加载、移动端适配及搜索功能实现,同时优化了网页流畅度与字体显示。新增Blog板块、留言板及友链功能,持续完善用户交互体验。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:392

    @@ -2960,10 +2992,10 @@ Look at this source

    2022网站更新记录

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    2022年网站更新主要包括技术框架搭建和用户体验优化。6月选定MKdocs作为建站框架,10月完成Github仓库创建并启用独立域名。关键改进包括取消cookie确认弹窗以简化访问流程、增强隐私保护,并新增首页反馈功能。更新体现了从技术选型到交互优化的完整建设路径,重点关注用户友好性和数据隐私。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:64

    diff --git a/blog/index.html b/blog/index.html index 8088673..961df5a 100644 --- a/blog/index.html +++ b/blog/index.html @@ -834,6 +834,8 @@ + + @@ -881,6 +883,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2401,10 +2433,10 @@

    2025网站更新记录

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    2025年网站更新主要围绕性能优化和功能改进展开,包括持续优化网站流畅度、修复Markdown解析器渲染问题、改进友链统计准确性、修复评论区定位bug。同时更新了MKdocs教程以适应最新版本,优化留言板布局并清理失效图片链接。此外还尝试引入glightbox插件提升图片查看体验,并通过代码重写显著提升加载速度。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:349

    @@ -2525,10 +2557,10 @@

    2024网站更新记录

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    该网站2024年持续优化性能与用户体验,主要改进包括:通过CDN加速提升访问速度,精简冗余JS/CSS代码,优化UI设计和注脚显示,迁移图片至稳定图床。技术层面引入自动新标签页打开功能,集成git-revision插件记录文档变更,并完善MKdocs教程体系。全站被主流搜索引擎收录,友链扩展至16个,同时保持代码简洁性与可维护性。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:522 | 有效代码行数:43

    @@ -2811,10 +2843,10 @@ Look at this source

    2023网站更新记录

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    2023年网站更新聚焦功能优化与体验提升,包括引入AI问答机器人(25条/月限制)、多语言支持(含台湾语言)、国内镜像站点和Mkdocs-Wcowin主题。技术改进涉及Latex渲染修复、图片懒加载、移动端适配及搜索功能实现,同时优化了网页流畅度与字体显示。新增Blog板块、留言板及友链功能,持续完善用户交互体验。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:392

    @@ -2969,10 +3001,10 @@ Look at this source

    2022网站更新记录

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    2022年网站更新主要包括技术框架搭建和用户体验优化。6月选定MKdocs作为建站框架,10月完成Github仓库创建并启用独立域名。关键改进包括取消cookie确认弹窗以简化访问流程、增强隐私保护,并新增首页反馈功能。更新体现了从技术选型到交互优化的完整建设路径,重点关注用户友好性和数据隐私。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:64

    diff --git a/blog/websitebeauty/404/index.html b/blog/websitebeauty/404/index.html index 37e6113..d9adea8 100644 --- a/blog/websitebeauty/404/index.html +++ b/blog/websitebeauty/404/index.html @@ -840,6 +840,8 @@ + + @@ -888,6 +890,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/blog/websitebeauty/MkDocs-AI-Hooks/index.html b/blog/websitebeauty/MkDocs-AI-Hooks/index.html new file mode 100644 index 0000000..5b95538 --- /dev/null +++ b/blog/websitebeauty/MkDocs-AI-Hooks/index.html @@ -0,0 +1,4068 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MkDocs文档AI摘要 - Mkdocs教程 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + 跳转至 + + +
    +
    + +
    + + + + +
    + + +
    + +
    + + + + + + + + + +
    +
    + + + +
    +
    +
    + + + + + + + +
    +
    +
    + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +🤖 AI智能摘要 +

    该项目为MkDocs文档系统提供AI驱动的智能摘要生成和阅读统计功能,支持OpenAI、DeepSeek等多API服务。核心特性包括自动生成80-120字高质量摘要、多语言支持、智能内容清理和高效缓存系统,同时提供精准的中文阅读统计和阅读时间估算。通过灵活的配置选项,用户可实现文件夹或页面级别的精确控制,并自定义API服务和提示词。该工具显著提升了技术文档的可读性和管理效率。

    +
    +
    +

    📖 阅读信息

    +

    阅读时间:2 分钟 | 中文字符:912 | 有效代码行数:134

    +
    +

    MkDocs AI Hooks

    +

    仓库地址:https://github.com/Wcowin/mkdocs-ai-hooks

    +

    + MkDocs Hooks + AI Powered + Python 3.7+ +

    + +

    + 中文 | English +

    + +

    🚀 您的MkDocs文档首选智能摘要!
    +这个项目利用MkDocs hooks,为您的技术文档和博客添加AI驱动的摘要生成和智能阅读统计功能。 +iShot 2025 06 03 13.39.35 +image

    +

    网站效果预览:https://wcowin.work/Mkdocs-Wcowin/blog/Mkdocs/mkfirst/

    +

    ✨ 功能特性

    +

    AI智能摘要

    +
      +
    • 自动生成文章摘要:使用DeepSeek API生成高质量的80-120字摘要
    • +
    • 多语言支持:支持中文、英文等多种语言
    • +
    • 多API服务支持:支持OpenAI、Claude等多种AI服务
    • +
    • 智能内容清理:自动过滤YAML、HTML、代码块等格式内容
    • +
    • 备用摘要机制:API失败时提供基于规则的智能摘要
    • +
    • 高效缓存系统:避免重复API调用,7天智能过期
    • +
    • 灵活配置:支持文件夹级别和页面级别的精确控制
    • +
    +

    智能阅读统计(可选)

    +
      +
    • 精准中文字符统计:专门优化的中文内容识别
    • +
    • 智能代码检测:识别多种编程语言和命令行代码
    • +
    • 阅读时间估算:基于中文阅读习惯的400字/分钟计算
    • +
    • 美观信息展示:使用MkDocs Material风格的信息框
    • +
    +

    智能化特性

    +
      +
    • 自动语言识别:支持30+编程语言和标记语言
    • +
    • 内容类型检测:区分代码、配置、命令行等不同内容
    • +
    • 缓存优化:LRU缓存提升性能
    • +
    • 错误处理:完善的异常处理和日志记录
    • +
    +

    📦 安装

    +

    方法1

    +

    直接下载(推荐)
    +在releases页面下载,解压后将以下文件放入您的MkDocs项目的docs/overrides/hooks中: +https://github.com/Wcowin/mkdocs-ai-hooks/releases

    +

    或者下载上方hooks目录下的两个Python文件:

    +
      +
    • +

      ai_summary.py:AI摘要生成器

      +
    • +
    • +

      reading_time.py:阅读时间统计器

      +
    • +
    +

    1
    +2
    +3
    +4
    # 放置到您的项目目录
    +mkdir -p docs/overrides/hooks/
    +mv ai_summary.py docs/overrides/hooks/
    +mv reading_time.py docs/overrides/hooks/
    +
    +放置的位置如下: +image

    +

    mkdocs.yml 中theme下添加custom_dir: +

    1
    +2
    +3
    +4
    +5
    +6
    +7
    # 可选:Material主题配置
    +theme:
    +  name: material
    +  custom_dir: docs/overrides #一定要有!一定要有!
    +  features:
    +    - content.code.copy
    +    - content.code.select
    +

    +

    方法2

    +

    使用Git克隆 +

    1
    +2
    +3
    git clone  https://github.com/Wcowin/mkdocs-ai-hooks.git
    +cd mkdocs-ai-hooks 
    +pip install -r requirements.txt
    +

    +

    依赖安装

    +
    pip install requirements.txt
    +
    +

    🚀 快速开始

    +

    1. 配置MkDocs

    +

    先执行一次mkdocs build,生成缓存文件 +

    mkdocs build 
    +
    +在 mkdocs.yml 中添加hooks,theme下添加custom_dir: +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    hooks:
    +  - docs/overrides/hooks/ai_summary.py # 添加AI摘要hook
    +  - docs/overrides/hooks/reading_time.py # 添加统计阅读时间hook
    +
    +# 可选:Material主题配置
    +theme:
    +  name: material
    +  custom_dir: docs/overrides #一定要有!!
    +  features:
    +    - content.code.copy
    +    - content.code.select
    +

    +

    2. 在ai_summary.py中配置需要AI摘要的目录

    +
     1
    + 2
    + 3
    + 4
    + 5
    + 6
    + 7
    + 8
    + 9
    +10
    +11
    +12
    +13
    +14
    +15
    +16
    +17
    +18
    +19
    +20
    # 📂 可自定义的文件夹配置
    +self.enabled_folders = [
    +    'blog/',      # blog文件夹
    +    'develop/',   # develop文件夹
    +    # 在这里添加您想要启用AI摘要的文件夹
    +]
    +
    +# 📋 排除的文件和文件夹
    +self.exclude_patterns = [
    +    'waline.md', 'link.md', '404.md', 'tag.md', 'tags.md',
    +    '/about/', '/search/', '/sitemap', 'index.md',  # 根目录index.md
    +]
    +
    +# 📋 排除的特定文件
    +self.exclude_files = [
    +    'blog/index.md',
    +    'blog/indexblog.md',
    +    'docs/index.md',
    +    'develop/index.md',
    +]
    +
    +

    3. 在ai_summary.py中设置DeepSeek API(默认是OpenAI)

    +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    # 在ai_summary.py中修改API配置
    +'deepseek': {
    +    'url': 'https://api.deepseek.com/v1/chat/completions',
    +    'model': 'deepseek-chat',
    +    'api_key': os.getenv('DEEPSEEK_API_KEY', 'your-azure-api-key'),
    +    'max_tokens': 150,
    +    'temperature': 0.3
    +},
    +
    +

    4. 运行MkDocs

    +

    第一次运行时,可能需要等待一段时间,因为系统会自动生成摘要。后续运行时,系统会使用缓存数据,加快生成速度。 +

    1
    +2
    +3
    #依次运行命令
    +mkdocs build 
    +mkdocs serve
    +
    +终端输出如下: +image

    +

    📖 使用指南

    +

    AI摘要配置

    +

    文件夹级别控制

    +
    1
    +2
    +3
    +4
    +5
    # 启用特定文件夹
    +configure_ai_summary(['blog/', 'docs/', 'tutorials/'])
    +
    +# 全局启用(除排除项)
    +configure_ai_summary([''])
    +
    +

    页面级别控制(推荐)

    +

    在Markdown文件的YAML front matter中:

    +

    1
    +2
    +3
    +4
    ---
    +title: 文章标题
    +ai_summary: true   # 启用AI摘要
    +---
    +
    +iShot 2025 06 03 13.46.03 +
    1
    +2
    +3
    +4
    +5
    ---
    +title: 文章标题
    +ai_summary: false  # 禁用AI摘要
    +description: 手动摘要  # 可选
    +---
    +

    +

    阅读时间配置

    +

    排除特定页面

    +
    1
    +2
    +3
    +4
    +5
    # 在页面的YAML front matter中
    +---
    +title: 页面标题
    +hide_reading_time: true  # 隐藏阅读时间
    +---
    +
    +

    🎨 显示效果

    +

    AI摘要显示

    +
    1
    +2
    +3
    +4
    +5
    !!! info "🤖 AI智能摘要"
    +    本文详细介绍了MkDocs hooks的开发和使用方法,涵盖AI摘要生成、阅读时间统计等功能实现。通过DeepSeek API集成和智能缓存机制,为技术文档提供自动化的内容增强服务。
    +
    +# 您的文章标题
    +文章内容...
    +
    +

    阅读信息显示

    +
    1
    +2
    +3
    +4
    +5
    !!! info "📖 阅读信息"
    +    阅读时间:**3** 分钟 | 中文字符:**1247** | 有效代码行数:**45**
    +
    +# 您的文章标题
    +文章内容...
    +
    +

    实际效果: +iShot 2025 06 03 13.22.14

    +

    API花费

    +

    一次大约0.03-0.05元(中大型文档) +可以说相当经济实惠了!

    +

    免费openai额度获取

    +

    推荐使用:chatanywhere

    +

    申请好后得到sk-开头的密钥,在ai_summary.py的多AI服务配置部分替换为以下内容:

    +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    'openai': {
    +    'url': 'https://api.chatanywhere.tech/v1/chat/completions',
    +    'model': 'gpt-3.5-turbo',  # 或 'gpt-4', 'gpt-4-turbo'
    +    'api_key': os.getenv('OPENAI_API_KEY', 'your_openai_api_key'),
    +    'max_tokens': 150,
    +    'temperature': 0.3
    +},
    +
    +
    1
    +2
    # 默认使用的AI服务
    +self.default_service = 'openai'
    +
    +

    但是我这里也推荐使用DeepSeek API,额度充足且性能优秀。

    +

    ⚙️ 高级配置

    +

    自定义API服务

    +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    +8
    +9
    # 支持其他AI服务
    +self.api_config = {
    +    'url': 'https://your-api-endpoint.com/v1/chat/completions',
    +    'model': 'your-model',
    +    'headers': {
    +        'Content-Type': 'application/json',
    +        'Authorization': 'Bearer YOUR_API_KEY'
    +    }
    +}
    +
    +

    自定义提示词

    +
    1
    +2
    +3
    +4
    +5
    +6
    +7
    # 修改AI摘要的提示词
    +def generate_ai_summary(self, content, page_title=""):
    +    prompt = f"""您的自定义提示词...
    +
    +    文章标题:{page_title}
    +    文章内容:{content[:2500]}
    +    """
    +
    +

    缓存配置

    +

    1
    +2
    +3
    +4
    # 修改缓存过期时间(天数)
    +cache_time = datetime.fromisoformat(cache_data.get('timestamp', '1970-01-01'))
    +if (datetime.now() - cache_time).days < 30:  # 改为30天
    +    return cache_data
    +
    +注意注意注意!!!
    +切换api服务后,要删除site/.ai_cache这个缓存文件,才可以重新生成摘要!!!(这个问题已经解决了,切换api服务后,会自动删除缓存文件,无需手动删除)

    + +

    + +

    + + +

    Star History

    +

    Star History Chart

    +

    请作者喝杯咖啡

    +

    + +

    + +
    + + + +

    + 如果这个项目对您有帮助,请给它一个 ⭐ Star! +

    + +

    + + Stars + + + Forks + +

    + + +📝 本项目致力于让MkDocs文档更加智能化和用户友好。如有建议或想法,欢迎交流! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + +
    + + + +
    + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/websitebeauty/Relativeaddress/index.html b/blog/websitebeauty/Relativeaddress/index.html index 41184e6..e36c9ef 100644 --- a/blog/websitebeauty/Relativeaddress/index.html +++ b/blog/websitebeauty/Relativeaddress/index.html @@ -840,6 +840,8 @@ + + @@ -888,6 +890,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2530,13 +2562,13 @@ -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    本文探讨了MkDocs中使用相对地址引用资源时的常见问题与解决方案,涵盖图片、PDF、跨页面及静态资源的引用方法。重点分析了路径规范、大小写敏感性和目录结构管理,强调以当前Markdown文件为基准的相对路径写法,确保本地预览与线上部署一致性。提供了针对路径错误、资源加载失败等问题的排查建议,推荐统一资源目录结构以提升维护性。

    -
    +

    📖 阅读信息

    -

    阅读时间:1 分钟 | 中文字符:493 | 有效代码行数:6

    +

    阅读时间:1 分钟 | 中文字符:493 | 有效代码行数:3

    针对MKdocs中相对地址引用的一些问题

    在使用 MkDocs 构建文档网站时,常常会遇到相对地址引用的问题,尤其是在图片、PDF、其他静态资源等的引用上。合理使用相对地址可以让你的文档在本地预览和线上部署时都能正常显示。下面总结一些常见场景和注意事项:

    diff --git a/blog/websitebeauty/accelerate/index.html b/blog/websitebeauty/accelerate/index.html index a96321f..9092a86 100644 --- a/blog/websitebeauty/accelerate/index.html +++ b/blog/websitebeauty/accelerate/index.html @@ -840,6 +840,8 @@ + + @@ -888,6 +890,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2476,10 +2508,10 @@ -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    本文介绍了使用MkDocs构建网站时的性能优化方法,包括采用WebP等高效图片格式压缩资源、通过CDN分发静态文件减少延迟,以及优化git插件配置加速本地渲染。建议开发时禁用非必要插件,使用Lighthouse工具测试优化效果。这些措施能显著提升网站加载速度和用户体验。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:257 | 有效代码行数:6

    diff --git a/blog/websitebeauty/backgroud/index.html b/blog/websitebeauty/backgroud/index.html index 27e6dd3..aeef8fb 100644 --- a/blog/websitebeauty/backgroud/index.html +++ b/blog/websitebeauty/backgroud/index.html @@ -840,6 +840,8 @@ + + @@ -888,6 +890,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2490,10 +2522,10 @@

    背景特效

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    该技术文档介绍了三种网页背景特效的实现方法:雪花、樱花和粒子效果。核心是通过JavaScript动态加载特效脚本,并利用LocalStorage控制特效的显示状态。雪花特效通过检测LocalStorage标志决定是否加载外部JS文件,其他特效也采用类似实现方式。这些轻量级特效可增强网页视觉体验,适用于节日主题或装饰性页面需求。

    -
    +

    Note

    以下代码均在docs/javascripts/extra.js下复制粘贴

    diff --git a/blog/websitebeauty/footer/index.html b/blog/websitebeauty/footer/index.html index ebfb09e..ccab86b 100644 --- a/blog/websitebeauty/footer/index.html +++ b/blog/websitebeauty/footer/index.html @@ -840,6 +840,8 @@ + + @@ -888,6 +890,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/blog/websitebeauty/header/index.html b/blog/websitebeauty/header/index.html index bc736e5..b0f4010 100644 --- a/blog/websitebeauty/header/index.html +++ b/blog/websitebeauty/header/index.html @@ -835,6 +835,8 @@ + + @@ -883,6 +885,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/blog/websitebeauty/linktech/index.html b/blog/websitebeauty/linktech/index.html index 2f73a6f..62ad2b1 100644 --- a/blog/websitebeauty/linktech/index.html +++ b/blog/websitebeauty/linktech/index.html @@ -842,6 +842,8 @@ + + @@ -890,6 +892,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/blog/websitebeauty/mkcomments/index.html b/blog/websitebeauty/mkcomments/index.html index be243fc..0f4352e 100644 --- a/blog/websitebeauty/mkcomments/index.html +++ b/blog/websitebeauty/mkcomments/index.html @@ -840,6 +840,8 @@ + + @@ -888,6 +890,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2508,10 +2540,10 @@

    添加评论系统(giscus为例)

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    giscus是一款基于GitHub Discussions的开源评论系统,无需数据库,数据直接存储在GitHub中。它具有无跟踪、无广告、永久免费的特点,支持多语言、自定义主题和高可配置性。系统能自动同步GitHub的评论更新,适用于静态网站集成,提供轻量级、隐私友好的评论解决方案,同时允许用户自建服务。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:389 | 有效代码行数:116

    diff --git a/blog/websitebeauty/mkdocsfont/index.html b/blog/websitebeauty/mkdocsfont/index.html index 7ce9003..99434b8 100644 --- a/blog/websitebeauty/mkdocsfont/index.html +++ b/blog/websitebeauty/mkdocsfont/index.html @@ -840,6 +840,8 @@ + + @@ -888,6 +890,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2692,10 +2724,10 @@ -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    霞鹜文楷是一款基于日本FONTWORKS公司Klee One衍生的开源中文字体,兼具仿宋和楷体特点,适合诗词和注释排版。提供多个版本:屏幕阅读版、轻便版、GB/TC规范版等,支持简繁日韩字符。该字体解决了商业字体侵权风险问题,填补了开源中文字体中楷体类的空白。用户可通过GitHub、Gitee等平台获取,支持Windows/macOS系统安装。字体采用SIL Open Font License 1.1授权,适合网站和移动设备使用。

    -
    +

    📖 阅读信息

    阅读时间:6 分钟 | 中文字符:2328 | 有效代码行数:21

    diff --git a/blog/websitebeauty/mkpdf/index.html b/blog/websitebeauty/mkpdf/index.html index f856cc8..6e70faf 100644 --- a/blog/websitebeauty/mkpdf/index.html +++ b/blog/websitebeauty/mkpdf/index.html @@ -835,6 +835,8 @@ + + @@ -883,6 +885,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/blog/websitebeauty/shubiao/index.html b/blog/websitebeauty/shubiao/index.html index 679f52e..848c648 100644 --- a/blog/websitebeauty/shubiao/index.html +++ b/blog/websitebeauty/shubiao/index.html @@ -835,6 +835,8 @@ + + @@ -883,6 +885,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2375,10 +2407,10 @@

    JS实现鼠标样式

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    该文章介绍了通过JavaScript和CSS自定义网页鼠标样式的实现方法,重点说明了关键参数配置,包括鼠标尺寸、颜色(支持RGB值和颜色名称)以及圆形跟随效果。提供了具体的代码示例和配置路径,并强调需在mkdocs.yml中引入相关文件。适用于需要个性化鼠标交互效果的网页开发场景。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:129 | 有效代码行数:114

    diff --git a/blog/websitebeauty/time/index.html b/blog/websitebeauty/time/index.html index 2556a85..c324e3e 100644 --- a/blog/websitebeauty/time/index.html +++ b/blog/websitebeauty/time/index.html @@ -840,6 +840,8 @@ + + @@ -888,6 +890,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2472,10 +2504,10 @@

    为MKdocs添加文章修订时间戳

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    该技术方案通过git-revision-date-localized插件为MKdocs文档系统添加文章修订时间戳功能。核心实现是在CI工作流中优化git历史检查策略,既提升了本地渲染速度,又确保发布时准确显示最后更新时间。该方法适用于需要展示文档时效性的场景,通过修改ci.yml配置文件即可快速部署,兼顾了开发效率和功能完整性。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:203 | 有效代码行数:51

    diff --git a/blog/websitebeauty/webtalknow/index.html b/blog/websitebeauty/webtalknow/index.html index 847bf49..abbe789 100644 --- a/blog/websitebeauty/webtalknow/index.html +++ b/blog/websitebeauty/webtalknow/index.html @@ -840,6 +840,8 @@ + + @@ -888,6 +890,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2472,10 +2504,10 @@

    添加在线聊天

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    Tidio提供免费、无需梯子的在线聊天解决方案,通过简单的JavaScript代码集成到网站。用户只需注册账号,从设置中获取专属代码并嵌入网页即可实现实时聊天功能。该工具安装便捷,适合快速部署,满足基础客服需求,尤其适合中小型网站使用。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:182 | 有效代码行数:1

    diff --git a/blog/websitebeauty/yuanjiaohua/index.html b/blog/websitebeauty/yuanjiaohua/index.html index 6c16c56..d1a8434 100644 --- a/blog/websitebeauty/yuanjiaohua/index.html +++ b/blog/websitebeauty/yuanjiaohua/index.html @@ -840,6 +840,8 @@ + + @@ -888,6 +890,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2526,10 +2558,10 @@

    网页圆角化设计

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    本文介绍了网页圆角化设计的实现方法,重点讲解通过CSS样式实现图片和边框的圆角效果。具体包括创建CSS文件并在mkdocs.yml中引入,使用border-radius属性设置圆角半径,以及在Markdown文件中应用样式的代码示例。同时展示了利用内置grid cards组件和按钮样式的圆角化实现方案,为网页UI设计提供了简洁美观的视觉解决方案。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:66 | 有效代码行数:213

    diff --git a/develop/Markdown/MWeb/index.html b/develop/Markdown/MWeb/index.html index eabb8e0..c458865 100644 --- a/develop/Markdown/MWeb/index.html +++ b/develop/Markdown/MWeb/index.html @@ -834,6 +834,8 @@ + + @@ -881,6 +883,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2840,13 +2872,13 @@

    MWeb Pro

    -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    MWeb Pro是一款专为macOS设计的专业Markdown写作与笔记应用,支持GFM语法扩展(含表格、LaTeX、代码块等)及多种图表库(mermaid/PlantUML等)。提供高效的图文混排功能,支持拖拽插入图片并调整宽度,可导出为PDF/HTML/Epub等格式或直接发布至WordPress/印象笔记等平台。其文档库支持分类树、标签管理及静态网站生成,兼具快速笔记收集和全局搜索功能,适合技术写作、知识管理及博客发布场景。

    -
    +

    📖 阅读信息

    -

    阅读时间:3 分钟 | 中文字符:1009 | 有效代码行数:67

    +

    阅读时间:3 分钟 | 中文字符:1009 | 有效代码行数:64

    MWeb Pro 是一款适用于macOS的专业Markdown写作、笔记本应用软件。喜欢写博客的朋友,那你一定会需要 MWeb Pro 这款软件。为您提供最佳的写作体验。

    Markdown 语法支持:

    diff --git a/develop/Markdown/markdown/index.html b/develop/Markdown/markdown/index.html index 10e31d9..4fdd47b 100644 --- a/develop/Markdown/markdown/index.html +++ b/develop/Markdown/markdown/index.html @@ -834,6 +834,8 @@ + + @@ -881,6 +883,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -3054,13 +3086,13 @@ -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    Markdown是一种轻量级标记语言,支持纯文本编写并转换为多种格式(如HTML/PDF)。其核心语法包括标题、列表、表格、代码块等结构化元素,以及文本样式(粗体/斜体)、链接/图片嵌入功能。兼容HTML标签并支持特殊字符转义,适用于文档编写、笔记记录等场景。主流编辑器(如MacDown、StackEdit)提供跨平台支持,具有易读易写的特性。

    -
    +

    📖 阅读信息

    -

    阅读时间:2 分钟 | 中文字符:662 | 有效代码行数:67

    +

    阅读时间:2 分钟 | 中文字符:662 | 有效代码行数:61

    Markdown语法学习 精简版

    diff --git a/develop/designbeauty/db1/index.html b/develop/designbeauty/db1/index.html index fa00e53..79d998f 100644 --- a/develop/designbeauty/db1/index.html +++ b/develop/designbeauty/db1/index.html @@ -834,6 +834,8 @@ + + @@ -881,6 +883,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2514,10 +2546,10 @@ -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    唐·诺曼提出的情感设计三层次理论包括本能层、行为层和反思层。本能层关注产品外观引发的即时情感反应,行为层强调使用过程中的功能性和效率,反思层涉及用户对产品的理性认知和自我形象关联。这三个层次相互影响,共同塑造用户对产品的整体体验。该理论为设计提供了系统框架,解释了为何某些产品即使存在功能缺陷仍能获得市场成功。

    -
    +

    📖 阅读信息

    阅读时间:5 分钟 | 中文字符:2163

    diff --git a/develop/designbeauty/my-to-desihn/index.html b/develop/designbeauty/my-to-desihn/index.html index 951daaa..14e2cd4 100644 --- a/develop/designbeauty/my-to-desihn/index.html +++ b/develop/designbeauty/my-to-desihn/index.html @@ -834,6 +834,8 @@ + + @@ -881,6 +883,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2384,10 +2416,10 @@ -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    该文章阐述了设计的关键原则与价值主张,强调简洁性、视觉美感与用户体验的核心地位。作者提出六项设计准则:通过精简元素实现功能聚焦;运用视觉平衡提升优雅感;以用户行为模式优化交互流程;精细化处理视觉细节;融合创新思维突破传统;借助故事性建立情感连接。这些观点系统性地揭示了优秀设计应兼具功能性、审美性与情感共鸣的特质。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:398

    diff --git a/develop/git/index.html b/develop/git/index.html index df36e67..5f12bd7 100644 --- a/develop/git/index.html +++ b/develop/git/index.html @@ -834,6 +834,8 @@ + + @@ -881,6 +883,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • @@ -2790,10 +2822,10 @@ -
    -

    💾 AI智能摘要

    +
    +🤖 AI智能摘要

    本文介绍了Git版本控制的核心操作与实用技巧,涵盖仓库创建、分支管理、冲突解决等基础功能,并重点讲解了stash暂存、rebase/merge策略选择、cherry-pick热修复等高级用法。通过具体代码示例和操作图示,系统演示了如何高效处理日常开发中的版本控制需求,特别针对代码回退、提交修改等常见场景提供了专业解决方案。

    -
    +

    📖 阅读信息

    阅读时间:1 分钟 | 中文字符:199 | 有效代码行数:48

    diff --git a/develop/lighthouse/index.html b/develop/lighthouse/index.html index 641a3b3..6010ae8 100644 --- a/develop/lighthouse/index.html +++ b/develop/lighthouse/index.html @@ -829,6 +829,8 @@ + + @@ -876,6 +878,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/develop/vercel/index.html b/develop/vercel/index.html index a14f17f..c56f2eb 100644 --- a/develop/vercel/index.html +++ b/develop/vercel/index.html @@ -829,6 +829,8 @@ + + @@ -876,6 +878,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/en/index.html b/en/index.html index 7c8cdf8..3797971 100644 --- a/en/index.html +++ b/en/index.html @@ -828,6 +828,8 @@ + + @@ -875,6 +877,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/index.html b/index.html index 4040b9b..32ec96d 100644 --- a/index.html +++ b/index.html @@ -823,6 +823,8 @@ + + @@ -870,6 +872,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/link/index.html b/link/index.html index be57338..2f1c617 100644 --- a/link/index.html +++ b/link/index.html @@ -834,6 +834,8 @@ + + @@ -881,6 +883,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/liuyanban/index.html b/liuyanban/index.html index e33a854..d19c24a 100644 --- a/liuyanban/index.html +++ b/liuyanban/index.html @@ -834,6 +834,8 @@ + + @@ -881,6 +883,36 @@ +
  • + + + + + + MkDocs文档AI摘要 + + + + + + + + + + + + +
  • + + + + + + + + + +
  • diff --git a/overrides/hooks/__pycache__/ai_summary.cpython-311.pyc b/overrides/hooks/__pycache__/ai_summary.cpython-311.pyc index 18abe37..fcbce62 100644 Binary files a/overrides/hooks/__pycache__/ai_summary.cpython-311.pyc and b/overrides/hooks/__pycache__/ai_summary.cpython-311.pyc differ diff --git a/overrides/hooks/__pycache__/ai_summary.cpython-313.pyc b/overrides/hooks/__pycache__/ai_summary.cpython-313.pyc index 0cf4b4f..90c5155 100644 Binary files a/overrides/hooks/__pycache__/ai_summary.cpython-313.pyc and b/overrides/hooks/__pycache__/ai_summary.cpython-313.pyc differ diff --git a/overrides/hooks/__pycache__/reading_time.cpython-313.pyc b/overrides/hooks/__pycache__/reading_time.cpython-313.pyc deleted file mode 100644 index b6b5a5e..0000000 Binary files a/overrides/hooks/__pycache__/reading_time.cpython-313.pyc and /dev/null differ diff --git a/overrides/hooks/__pycache__/socialmedia.cpython-313.pyc b/overrides/hooks/__pycache__/socialmedia.cpython-313.pyc index 00a61d5..b559473 100644 Binary files a/overrides/hooks/__pycache__/socialmedia.cpython-313.pyc and b/overrides/hooks/__pycache__/socialmedia.cpython-313.pyc differ diff --git a/overrides/hooks/ai_summary.py b/overrides/hooks/ai_summary.py index ee522b7..7d62e57 100644 --- a/overrides/hooks/ai_summary.py +++ b/overrides/hooks/ai_summary.py @@ -4,6 +4,7 @@ import hashlib import requests from pathlib import Path from datetime import datetime +from functools import lru_cache class AISummaryGenerator: def __init__(self): @@ -41,6 +42,27 @@ class AISummaryGenerator: 'docs/index.md', 'develop/index.md', ] + + # 初始化阅读统计相关的正则表达式 + self.chinese_chars_pattern = re.compile(r'[\u4e00-\u9fff\u3400-\u4dbf]') + self.code_block_pattern = re.compile(r'```.*?```', re.DOTALL) + self.inline_code_pattern = re.compile(r'`[^`]+`') + self.yaml_front_pattern = re.compile(r'^---.*?---\s*', re.DOTALL) + self.html_tag_pattern = re.compile(r'<[^>]+>') + self.image_pattern = re.compile(r'!\[.*?\]\([^)]+\)') + self.link_pattern = re.compile(r'\[([^\]]+)\]\([^)]+\)') + + # 支持的编程语言 + self.programming_languages = frozenset({ + 'python', 'py', 'javascript', 'js', 'typescript', 'ts', 'java', 'cpp', 'c', + 'go', 'rust', 'php', 'ruby', 'swift', 'kotlin', 'csharp', 'cs', + 'bash', 'sh', 'powershell', 'ps1', 'zsh', 'fish', 'bat', 'cmd', + 'html', 'css', 'scss', 'sass', 'less', 'yaml', 'yml', 'json', 'xml', + 'toml', 'ini', 'conf', 'dockerfile', 'makefile', + 'sql', 'mysql', 'postgresql', 'sqlite', 'mongodb', + 'r', 'matlab', 'scala', 'perl', 'lua', 'dart', 'tex', 'latex', + 'csv', 'properties', '' + }) def configure_folders(self, folders=None, exclude_patterns=None, exclude_files=None): """ @@ -207,7 +229,7 @@ class AISummaryGenerator: clean_text = re.sub(r'\*([^*]+)\*', r'\1', clean_text) # 分割成句子 - sentences = re.split(r'[。!?.!?]', clean_text) + sentences = re.split(r'[\u3002\uff01\uff1f.!?]', clean_text) sentences = [s.strip() for s in sentences if len(s.strip()) > 15] # 优先选择包含关键词的句子 @@ -246,10 +268,10 @@ class AISummaryGenerator: total_length += len(sentence) if selected_sentences: - summary = '。'.join(selected_sentences) + '。' + summary = '.'.join(selected_sentences) + '.' # 简化冗长的摘要 if len(summary) > 120: - summary = selected_sentences[0] + '。' + summary = selected_sentences[0] + '.' return summary else: # 根据标题生成通用摘要 @@ -263,49 +285,71 @@ class AISummaryGenerator: return '本文深入探讨了相关技术内容,提供了实用的方法和解决方案。' def process_page(self, markdown, page, config): - """处理页面,生成AI摘要""" - if not self.should_generate_summary(page, markdown): + """处理页面,生成AI摘要和阅读统计""" + # 检查是否需要显示阅读信息 + show_reading_info = self.should_show_reading_info(page, markdown) + + # 检查是否需要生成AI摘要 + should_generate_ai_summary = self.should_generate_summary(page, markdown) + + # 如果两者都不需要,直接返回原内容 + if not show_reading_info and not should_generate_ai_summary: return markdown - clean_content = self.clean_content_for_ai(markdown) + # 计算阅读统计 + reading_time, chinese_chars, code_lines = self.calculate_reading_stats(markdown) - # 内容长度检查 - if len(clean_content) < 200: - print(f"📄 内容太短,跳过摘要生成: {page.file.src_path}") - return markdown + result_blocks = [] - content_hash = self.get_content_hash(clean_content) - page_title = getattr(page, 'title', '') + # 处理AI摘要 + if should_generate_ai_summary: + clean_content = self.clean_content_for_ai(markdown) + + # 内容长度检查 + if len(clean_content) >= 200: + content_hash = self.get_content_hash(clean_content) + page_title = getattr(page, 'title', '') + + # 检查缓存 + cached_summary = self.get_cached_summary(content_hash) + if cached_summary: + summary = cached_summary.get('summary', '') + ai_service = 'cached' + print(f"✅ 使用缓存摘要: {page.file.src_path}") + else: + # 生成新摘要 + print(f"🤖 正在生成AI摘要: {page.file.src_path}") + summary = self.generate_ai_summary(clean_content, page_title) + + if not summary: + summary = self.generate_fallback_summary(clean_content, page_title) + ai_service = 'fallback' + print(f"📝 使用备用摘要: {page.file.src_path}") + else: + ai_service = 'deepseek' + print(f"✅ AI摘要生成成功: {page.file.src_path}") + + # 保存到缓存 + self.save_summary_cache(content_hash, { + 'summary': summary, + 'service': ai_service, + 'page_title': page_title + }) + + # 添加AI摘要块 + ai_summary_block = self.format_ai_summary(summary, ai_service) + result_blocks.append(ai_summary_block) - # 检查缓存 - cached_summary = self.get_cached_summary(content_hash) - if cached_summary: - summary = cached_summary.get('summary', '') - ai_service = 'cached' - print(f"✅ 使用缓存摘要: {page.file.src_path}") + # 添加阅读信息块 + if show_reading_info: + reading_info_block = self.format_reading_info(reading_time, chinese_chars, code_lines) + result_blocks.append(reading_info_block) + + # 合并所有块并返回 + if result_blocks: + return '\n'.join(result_blocks) + '\n\n' + markdown else: - # 生成新摘要 - print(f"🤖 正在生成AI摘要: {page.file.src_path}") - summary = self.generate_ai_summary(clean_content, page_title) - - if not summary: - summary = self.generate_fallback_summary(clean_content, page_title) - ai_service = 'fallback' - print(f"📝 使用备用摘要: {page.file.src_path}") - else: - ai_service = 'deepseek' - print(f"✅ AI摘要生成成功: {page.file.src_path}") - - # 保存到缓存 - self.save_summary_cache(content_hash, { - 'summary': summary, - 'service': ai_service, - 'page_title': page_title - }) - - # 添加摘要到页面最上面 - summary_html = self.format_summary(summary, ai_service) - return summary_html + '\n\n' + markdown + return markdown def should_generate_summary(self, page, markdown): """判断是否应该生成摘要 - 可自定义文件夹""" @@ -340,8 +384,139 @@ class AISummaryGenerator: # 默认不生成摘要 return False - def format_summary(self, summary, ai_service): - """格式化摘要显示""" + def calculate_reading_stats(self, markdown): + """计算中文字符数和代码行数""" + # 清理内容用于中文字符统计 + content = markdown + content = self.yaml_front_pattern.sub('', content) + content = self.html_tag_pattern.sub('', content) + content = self.image_pattern.sub('', content) + content = self.link_pattern.sub(r'\1', content) + content = self.code_block_pattern.sub('', content) + content = self.inline_code_pattern.sub('', content) + + chinese_chars = len(self.chinese_chars_pattern.findall(content)) + + # 统计代码行数 + code_lines = self.count_code_lines(markdown) + + # 计算阅读时间(中文:400字/分钟) + reading_time = max(1, round(chinese_chars / 400)) + + return reading_time, chinese_chars, code_lines + + def count_code_lines(self, markdown): + """统计代码行数""" + code_blocks = self.code_block_pattern.findall(markdown) + total_code_lines = 0 + + for block in code_blocks: + # 提取语言标识 + lang_match = re.match(r'^```(\w*)', block) + language = lang_match.group(1).lower() if lang_match else '' + + # 移除开头的语言标识和结尾的``` + code_content = re.sub(r'^```\w*\n?', '', block) + code_content = re.sub(r'\n?```$', '', code_content) + + # 过滤空代码块 + if not code_content.strip(): + continue + + # 计算有效行数 + lines = [line for line in code_content.split('\n') if line.strip()] + line_count = len(lines) + + # 如果有明确的编程语言标识,直接统计 + if language and language in self.programming_languages: + total_code_lines += line_count + continue + + # 检测是否为代码内容 + is_code = self.is_code_content(code_content) + + if is_code: + total_code_lines += line_count + + return total_code_lines + + def is_code_content(self, content): + """判断内容是否为代码""" + # 命令行检测 + command_indicators = [ + 'sudo ', 'npm ', 'pip ', 'git ', 'cd ', 'ls ', 'mkdir ', 'rm ', 'cp ', 'mv ', + 'chmod ', 'chown ', 'grep ', 'find ', 'ps ', 'kill ', 'top ', 'cat ', 'echo ', + 'wget ', 'curl ', 'tar ', 'zip ', 'unzip ', 'ssh ', 'scp ', 'rsync ', + '$ ', '# ', '% ', '> ', 'C:\\>', 'PS>', '#!/', + '/Applications/', '/usr/', '/etc/', '/var/', '/home/', '~/', + ] + + if any(indicator in content for indicator in command_indicators): + return True + + # 编程语法检测 + programming_indicators = [ + 'def ', 'class ', 'import ', 'from ', 'return ', 'function', 'var ', 'let ', 'const ', + 'public ', 'private ', 'protected ', 'static ', 'void ', 'int ', 'string ', + '==', '!=', '<=', '>=', '&&', '||', '++', '--', '+=', '-=', + 'while ', 'for ', 'if ', 'else:', 'switch ', 'case ', + ' 1 and any(line.startswith(' ') or line.startswith('\t') for line in lines): + return True + + if '<' in content and '>' in content: + return True + + if any(char in content for char in ['{', '}', '(', ')', '[', ']']) and ('=' in content or ':' in content): + return True + + return False + + def should_show_reading_info(self, page, markdown): + """判断是否应该显示阅读信息""" + # 检查页面元数据 + if page.meta.get('hide_reading_time', False): + return False + + # 获取文件路径 + src_path = page.file.src_path.replace('\\', '/') + + # 使用现有的排除模式检查 + exclude_patterns = [ + r'^index\.md$', r'^about/', r'^trip/index\.md$', r'^relax/index\.md$', + r'^blog/indexblog\.md$', r'^blog/posts\.md$', r'^develop/index\.md$', + r'waline\.md$', r'link\.md$', r'404\.md$' + ] + + for pattern in exclude_patterns: + if re.match(pattern, src_path): + return False + + # 检查页面类型 + page_type = page.meta.get('type', '') + if page_type in {'landing', 'special', 'widget'}: + return False + + # 内容长度检查 + if len(markdown) < 300: + return False + + # 计算中文字符数 + _, chinese_chars, _ = self.calculate_reading_stats(markdown) + if chinese_chars < 50: + return False + + return True + + def format_ai_summary(self, summary, ai_service): + """格式化AI摘要显示""" service_config = { 'deepseek': { 'icon': '🤖', @@ -354,7 +529,7 @@ class AISummaryGenerator: 'color': 'tip' }, 'cached': { - 'icon': '💾', + 'icon': '🤖', 'name': 'AI智能摘要', 'color': 'info' } @@ -362,10 +537,21 @@ class AISummaryGenerator: config = service_config.get(ai_service, service_config['deepseek']) - return f'''!!! {config['color']} "{config['icon']} {config['name']}" - {summary} - -''' + return f'''??? {config['color']} "{config['icon']} {config['name']}" + {summary}''' + + def format_reading_info(self, reading_time, chinese_chars, code_lines): + """格式化阅读信息显示""" + if code_lines > 0: + return f'''!!! info "📖 阅读信息" + 阅读时间:**{reading_time}** 分钟 | 中文字符:**{chinese_chars}** | 有效代码行数:**{code_lines}**''' + else: + return f'''!!! info "📖 阅读信息" + 阅读时间:**{reading_time}** 分钟 | 中文字符:**{chinese_chars}**''' + + def format_summary(self, summary, ai_service): + """保持向后兼容的格式化方法""" + return self.format_ai_summary(summary, ai_service) # 创建全局实例 ai_summary_generator = AISummaryGenerator() @@ -390,5 +576,5 @@ def configure_ai_summary(enabled_folders=None, exclude_patterns=None, exclude_fi ai_summary_generator.configure_folders(enabled_folders, exclude_patterns, exclude_files) def on_page_markdown(markdown, page, config, files): - """MkDocs hook入口点""" + """MkDocs hook入口点 - 统一处理AI摘要和阅读统计""" return ai_summary_generator.process_page(markdown, page, config) \ No newline at end of file diff --git a/overrides/hooks/test.py b/overrides/hooks/test.py new file mode 100644 index 0000000..777e6cc --- /dev/null +++ b/overrides/hooks/test.py @@ -0,0 +1,397 @@ +# 备份智能摘要代码 +import re +import json +import hashlib +import requests +from pathlib import Path +from datetime import datetime +from functools import lru_cache + +class AISummaryGenerator: + def __init__(self): + self.cache_dir = Path("site/.ai_cache") + self.cache_dir.mkdir(exist_ok=True) + + # DeepSeek API配置 + self.api_config = { + 'url': 'https://api.deepseek.com/v1/chat/completions', + 'model': 'deepseek-chat', + 'headers': { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer sk-7dbcd6e21fb3417299b50aecff76c7bf' + } + } + + # 📂 可自定义的文件夹配置 + self.enabled_folders = [ + 'blog/', # blog文件夹 + 'develop/', # develop文件夹 + # 'about/', # about文件夹 + # 在这里添加您想要启用AI摘要的文件夹 + ] + + # 📋 排除的文件和文件夹 + self.exclude_patterns = [ + 'liuyanban.md', 'link.md', '404.md', 'tag.md', 'tags.md', + '/about/', '/search/', '/sitemap', 'index.md', # 根目录index.md + ] + + # 📋 排除的特定文件 + self.exclude_files = [ + 'blog/index.md', + 'blog/indexblog.md', + 'docs/index.md', + 'develop/index.md', + ] + + def configure_folders(self, folders=None, exclude_patterns=None, exclude_files=None): + """ + 配置启用AI摘要的文件夹 + + Args: + folders: 启用AI摘要的文件夹列表 + exclude_patterns: 排除的模式列表 + exclude_files: 排除的特定文件列表 + """ + if folders is not None: + self.enabled_folders = folders + if exclude_patterns is not None: + self.exclude_patterns = exclude_patterns + if exclude_files is not None: + self.exclude_files = exclude_files + + def get_content_hash(self, content): + """生成内容hash用于缓存""" + return hashlib.md5(content.encode('utf-8')).hexdigest() + + def get_cached_summary(self, content_hash): + """获取缓存的摘要""" + cache_file = self.cache_dir / f"{content_hash}.json" + if cache_file.exists(): + try: + with open(cache_file, 'r', encoding='utf-8') as f: + cache_data = json.load(f) + # 检查缓存是否过期(7天) + cache_time = datetime.fromisoformat(cache_data.get('timestamp', '1970-01-01')) + if (datetime.now() - cache_time).days < 7: + return cache_data + except: + pass + return None + + def save_summary_cache(self, content_hash, summary_data): + """保存摘要到缓存""" + cache_file = self.cache_dir / f"{content_hash}.json" + try: + summary_data['timestamp'] = datetime.now().isoformat() + with open(cache_file, 'w', encoding='utf-8') as f: + json.dump(summary_data, f, ensure_ascii=False, indent=2) + except Exception as e: + print(f"保存摘要缓存失败: {e}") + + def clean_content_for_ai(self, markdown): + """清理内容,提取主要文本用于AI处理""" + content = markdown + + # 移除YAML front matter + content = re.sub(r'^---.*?---\s*', '', content, flags=re.DOTALL) + + # 移除已存在的阅读信息块和AI摘要块 + content = re.sub(r'!!! info "📖 阅读信息".*?(?=\n\n|\n#|\Z)', '', content, flags=re.DOTALL) + content = re.sub(r'!!! info "🤖 AI智能摘要".*?(?=\n\n|\n#|\Z)', '', content, flags=re.DOTALL) + content = re.sub(r'!!! tip "📝 自动摘要".*?(?=\n\n|\n#|\Z)', '', content, flags=re.DOTALL) + + # 移除HTML标签 + content = re.sub(r'<[^>]+>', '', content) + + # 移除图片,保留alt文本作为内容提示 + content = re.sub(r'!\[([^\]]*)\]\([^)]+\)', r'[图片:\1]', content) + + # 移除链接,保留文本 + content = re.sub(r'\[([^\]]+)\]\([^)]+\)', r'\1', content) + + # 移除代码块,但保留关键信息 + content = re.sub(r'```(\w+)?\n(.*?)\n```', r'[代码示例]', content, flags=re.DOTALL) + + # 移除行内代码 + content = re.sub(r'`[^`]+`', '[代码]', content) + + # 移除表格格式但保留内容 + content = re.sub(r'\|[^\n]+\|', '', content) + content = re.sub(r'^[-|:\s]+$', '', content, flags=re.MULTILINE) + + # 清理格式符号 + content = re.sub(r'\*\*([^*]+)\*\*', r'\1', content) # 粗体 + content = re.sub(r'\*([^*]+)\*', r'\1', content) # 斜体 + content = re.sub(r'^#+\s*', '', content, flags=re.MULTILINE) # 标题符号 + + # 移除多余的空行和空格 + content = re.sub(r'\n\s*\n', '\n\n', content) + content = re.sub(r'^[ \t]+', '', content, flags=re.MULTILINE) + content = content.strip() + + return content + + def generate_ai_summary(self, content, page_title=""): + """使用DeepSeek生成摘要""" + # 优化的提示词 + prompt = f"""请为以下技术文章生成一个高质量的摘要,要求: + +1. **长度控制**:严格控制在80-120字以内 +2. **内容要求**: + - 准确概括文章的核心主题和关键要点 + - 突出技术特点、应用场景或解决的问题 + - 使用专业但易懂的语言 + - 避免重复文章标题的内容 +3. **格式要求**: + - 直接返回摘要内容,无需任何前缀或后缀 + - 使用简洁的陈述句 + - 可以适当使用技术术语 + +文章标题:{page_title} + +文章内容: +{content[:2500]} + +请生成摘要:""" + + try: + payload = { + "model": self.api_config['model'], + "messages": [ + { + "role": "system", + "content": "你是一个专业的技术文档摘要专家,擅长提取文章核心要点并生成简洁准确的摘要。" + }, + { + "role": "user", + "content": prompt + } + ], + "max_tokens": 150, + "temperature": 0.3, # 降低随机性,提高准确性 + "top_p": 0.9 + } + + response = requests.post( + self.api_config['url'], + headers=self.api_config['headers'], + json=payload, + timeout=30 + ) + + if response.status_code == 200: + result = response.json() + summary = result['choices'][0]['message']['content'].strip() + + # 清理可能的格式问题 + summary = re.sub(r'^["""''`]+|["""''`]+$', '', summary) + summary = re.sub(r'^\s*摘要[::]\s*', '', summary) + summary = re.sub(r'^\s*总结[::]\s*', '', summary) + + return summary + else: + print(f"DeepSeek API请求失败: {response.status_code} - {response.text}") + return None + + except requests.exceptions.RequestException as e: + print(f"DeepSeek API请求异常: {e}") + return None + except Exception as e: + print(f"AI摘要生成异常: {e}") + return None + + def generate_fallback_summary(self, content, page_title=""): + """生成备用摘要(基于规则的智能摘要)""" + # 移除格式符号 + clean_text = re.sub(r'^#+\s*', '', content, flags=re.MULTILINE) + clean_text = re.sub(r'\*\*([^*]+)\*\*', r'\1', clean_text) + clean_text = re.sub(r'\*([^*]+)\*', r'\1', clean_text) + + # 分割成句子 + sentences = re.split(r'[\u3002\uff01\uff1f.!?]', clean_text) + sentences = [s.strip() for s in sentences if len(s.strip()) > 15] + + # 优先选择包含关键词的句子 + key_indicators = [ + '介绍', '讲解', '说明', '分析', '探讨', '研究', '实现', '应用', + '方法', '技术', '算法', '原理', '概念', '特点', '优势', '解决', + '教程', '指南', '配置', '安装', '部署', '开发', '设计', '构建' + ] + + priority_sentences = [] + normal_sentences = [] + + for sentence in sentences[:10]: # 处理前10句 + if any(keyword in sentence for keyword in key_indicators): + priority_sentences.append(sentence) + else: + normal_sentences.append(sentence) + + # 组合摘要 + selected_sentences = [] + total_length = 0 + + # 优先使用关键句子 + for sentence in priority_sentences: + if total_length + len(sentence) > 100: + break + selected_sentences.append(sentence) + total_length += len(sentence) + + # 如果还有空间,添加普通句子 + if total_length < 80: + for sentence in normal_sentences: + if total_length + len(sentence) > 100: + break + selected_sentences.append(sentence) + total_length += len(sentence) + + if selected_sentences: + summary = '.'.join(selected_sentences) + '.' + # 简化冗长的摘要 + if len(summary) > 120: + summary = selected_sentences[0] + '.' + return summary + else: + # 根据标题生成通用摘要 + if any(keyword in page_title for keyword in ['教程', '指南', 'Tutorial']): + return '本文提供了详细的教程指南,通过实例演示帮助读者掌握相关技术要点。' + elif any(keyword in page_title for keyword in ['配置', '设置', '安装', 'Config']): + return '本文介绍了系统配置的方法和步骤,提供实用的设置建议和最佳实践。' + elif any(keyword in page_title for keyword in ['开发', '编程', 'Development']): + return '本文分享了开发经验和技术实践,提供了实用的代码示例和解决方案。' + else: + return '本文深入探讨了相关技术内容,提供了实用的方法和解决方案。' + + def process_page(self, markdown, page, config): + """处理页面,生成AI摘要""" + if not self.should_generate_summary(page, markdown): + return markdown + + clean_content = self.clean_content_for_ai(markdown) + + # 内容长度检查 + if len(clean_content) < 200: + print(f"📄 内容太短,跳过摘要生成: {page.file.src_path}") + return markdown + + content_hash = self.get_content_hash(clean_content) + page_title = getattr(page, 'title', '') + + # 检查缓存 + cached_summary = self.get_cached_summary(content_hash) + if cached_summary: + summary = cached_summary.get('summary', '') + ai_service = 'cached' + print(f"✅ 使用缓存摘要: {page.file.src_path}") + else: + # 生成新摘要 + print(f"🤖 正在生成AI摘要: {page.file.src_path}") + summary = self.generate_ai_summary(clean_content, page_title) + + if not summary: + summary = self.generate_fallback_summary(clean_content, page_title) + ai_service = 'fallback' + print(f"📝 使用备用摘要: {page.file.src_path}") + else: + ai_service = 'deepseek' + print(f"✅ AI摘要生成成功: {page.file.src_path}") + + # 保存到缓存 + self.save_summary_cache(content_hash, { + 'summary': summary, + 'service': ai_service, + 'page_title': page_title + }) + + # 添加摘要到页面最上面 + summary_html = self.format_summary(summary, ai_service) + return summary_html + '\n\n' + markdown + + def should_generate_summary(self, page, markdown): + """判断是否应该生成摘要 - 可自定义文件夹""" + # 检查页面元数据 + if hasattr(page, 'meta'): + # 明确禁用 + if page.meta.get('ai_summary') == False: + return False + + # 强制启用 + if page.meta.get('ai_summary') == True: + return True + + # 获取文件路径 + src_path = page.file.src_path.replace('\\', '/') # 统一路径分隔符 + + # 检查排除模式 + if any(pattern in src_path for pattern in self.exclude_patterns): + return False + + # 检查排除的特定文件 + if src_path in self.exclude_files: + return False + + # 检查是否在启用的文件夹中 + for folder in self.enabled_folders: + if src_path.startswith(folder) or f'/{folder}' in src_path: + folder_name = folder.rstrip('/') + print(f"🎯 {folder_name}文件夹文章检测到,启用AI摘要: {src_path}") + return True + + # 默认不生成摘要 + return False + + def format_summary(self, summary, ai_service): + """格式化摘要显示""" + service_config = { + 'deepseek': { + 'icon': '🤖', + 'name': 'AI智能摘要', + 'color': 'info' + }, + 'fallback': { + 'icon': '📝', + 'name': '自动摘要', + 'color': 'tip' + }, + 'cached': { + 'icon': '💾', + 'name': 'AI智能摘要', + 'color': 'info' + } + } + + config = service_config.get(ai_service, service_config['deepseek']) + + return f'''??? {config['color']} "{config['icon']} {config['name']}" + {summary} + +''' + +# 创建全局实例 +ai_summary_generator = AISummaryGenerator() + +# 🔧 自定义配置函数 +def configure_ai_summary(enabled_folders=None, exclude_patterns=None, exclude_files=None): + """ + 配置AI摘要功能 + + Args: + enabled_folders: 启用AI摘要的文件夹列表,例如 ['blog/', 'docs/', 'posts/'] + exclude_patterns: 排除的模式列表,例如 ['404.md', '/admin/'] + exclude_files: 排除的特定文件列表,例如 ['blog/index.md'] + + Example: + # 只在blog和docs文件夹启用 + configure_ai_summary(['blog/', 'docs/']) + + # 在所有文件夹启用,但排除特定文件 + configure_ai_summary([''], exclude_files=['index.md', 'about.md']) + """ + ai_summary_generator.configure_folders(enabled_folders, exclude_patterns, exclude_files) + +def on_page_markdown(markdown, page, config, files): + """MkDocs hook入口点""" + return ai_summary_generator.process_page(markdown, page, config) + diff --git a/search/search_index.json b/search/search_index.json index 9ceba54..5d1ed37 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\u200b\\u3000\\-\u3001\u3002\uff0c\uff0e\uff1f\uff01\uff1b]+","pipeline":["stemmer"]},"docs":[{"location":"","title":"Home","text":"\u6700\u597d\u7684MkDocs\u535a\u5ba2\u6559\u7a0b
    • \u5bfc\u822a\u680f

      • \u7b80\u6d01\u7f8e\u89c2 \uff0c\u529f\u80fd\u591a\u5143\u5316\uff0c\u5c0f\u767d\u914d\u7f6e
      • \u57fa\u4e8eMaterial for MkDocs\u7f8e\u5316
      • \u5982\u9047\u9875\u9762\u5361\u987f\uff0c\u8bf7\u4f7f\u7528\u79d1\u5b66\u4e0a\u7f51
      • \ud835\udd59\ud835\udd52\ud835\udd67\ud835\udd56 \ud835\udd52 \ud835\udd58\ud835\udd60\ud835\udd60\ud835\udd55 \ud835\udd65\ud835\udd5a\ud835\udd5e\ud835\udd56 !
      Mac/PC\u7aef\u79fb\u52a8\u7aef

      \u8bf7\u5728\u4e0a\u65b9\u6807\u7b7e\u9009\u62e9\u5206\u7c7b/\u5de6\u4fa7\u76ee\u5f55\u9009\u62e9\u6587\u7ae0

      \u8bf7\u70b9\u51fb\u5de6\u4e0a\u89d2\u56fe\u6807\u9009\u62e9\u5206\u7c7b\u548c\u6587\u7ae0

    \u4e0d\u540c\u4e8e\u5e02\u9762\u4e0a\u8fc7\u65f6\u7684MkDocs\u6559\u7a0b\uff0c\u672c\u7ad9\u63d0\u4f9b\u4e86\u6700\u8be6\u7ec6\u6700\u4fbf\u6377\u6700\u524d\u6cbf\u7684MkDocs\u4e2d\u6587\u6587\u5b57/\u89c6\u9891\u6559\u7a0b\uff0c\u4e0e\u5b98\u65b9\u53d1\u5e03\u7684\u6559\u7a0b\u7248\u672c\u540c\u6b65\u3002\u5305\u542b\u4e86MkDocs\u7684\u5b89\u88c5\u3001\u914d\u7f6e\u3001\u4e3b\u9898\u7f8e\u5316\u3001\u63d2\u4ef6\u4f7f\u7528\u7b49\u5185\u5bb9\u3002\u65e0\u8bba\u4f60\u662f\u521d\u5b66\u8005\u8fd8\u662f\u6709\u7ecf\u9a8c\u7684\u7528\u6237\uff0c\u90fd\u80fd\u5728\u8fd9\u91cc\u627e\u5230\u4f60\u9700\u8981\u7684\u5e2e\u52a9\u3002\u6211\u4eec\u8fd8\u63d0\u4f9b\u4e86\u793a\u4f8b\u548c\u5b9e\u7528\u7684\u6280\u5de7\uff0c\u5e2e\u52a9\u4f60\u66f4\u597d\u5730\u4f7f\u7528MkDocs\u3002\ud835\udcf3\ud835\udcfe\ud835\udcfc\ud835\udcfd \ud835\udcee\ud835\udcf7\ud835\udcf3\ud835\udcf8\ud835\udd02 \ud835\udcf2\ud835\udcfd\uff5e

    • Mkdocs\u6559\u7a0b(\u5fc5\u770b)

      • Mkdocs\u89c6\u9891\u6559\u7a0b(Bilibili)
      • \u90e8\u7f72\u9759\u6001\u7f51\u9875\u81f3GitHub pages
      • Mkdocs\u90e8\u7f72\u914d\u7f6e\u8bf4\u660e(mkdocs.yml)
      • \u5982\u4f55\u7ed9MKdocs\u6dfb\u52a0\u53cb\u94fe
      • \u7f51\u7ad9\u6dfb\u52a0Mkdocs\u535a\u5ba2
    • \u5173\u4e8e

      • Mkdocs-Wcowin\u535a\u5ba2\u4e3b\u9898\u793e\u533a
      • \u7559\u8a00\u677f1
      • Blogger
      • \u4e86\u89e3\u62112
      • \u8bf7\u4f5c\u8005\u559d\u676f\u5496\u5561

    \u672c\u7ad9\u5df2\u7ecf\u8fd0\u884c

    1. \u592a\u9633\u603b\u662f\u80fd\u6e29\u6696\u5411\u65e5\u8475\u00a0\u21a9

    2. All-problems-in-computer-science-can-be-solved-by-another-level-of-indirection\u00a0\u21a9

    "},{"location":"link/","title":"\u53cb\u94fe","text":""},{"location":"link/#_1","title":"\u6b22\u8fce\u52a0\u5165\u53cb\u94fe(\u4e0d\u5206\u5148\u540e)","text":"Wcowin's Blog \u201c\u5faa\u6b64\u82e6\u65c5\uff0c\u4ee5\u8fbe\u661f\u8fb0\u201d"},{"location":"link/#_2","title":"\u5931\u8054\u4eba\u5458","text":"\u90dd\u5b87\u535a\u5ba2 \u8bb0\u5f55\u6211\u7684\u6210\u957f\u548c\u9752\u6625 \u4ea4\u6362\u53cb\u94fe\uff0c\u8bf7\u6dfb\u52a0\u672c\u7ad9\u53cb\u94fe\u540e\u4e0b\u65b9\u7559\u8a00\u7533\u8bf7\uff0c\u671f\u671b\u60a8\u7684\u7ad9\u70b9:
    • \u72ec\u7acb\u535a\u5ba2(\u4e0d\u8981\u6c42\u72ec\u7acb\u57df\u540d)\uff0chttps\uff0c\u8bbf\u95ee\u6d41\u7545
    • \u539f\u521b\u5185\u5bb9\u4e3a\u4e3b\uff0c\u539f\u521b\u5185\u5bb93\u7bc7\u4ee5\u4e0a
    • \u5904\u4e8e\u6d3b\u8dc3\u72b6\u6001\uff0c\u6709\u4e00\u5b9a\u7684\u66f4\u65b0\u9891\u7387
    • \u5efa\u7ad9\u4e00\u4e2a\u6708\u4ee5\u4e0a
    • \u672a\u6dfb\u52a0\u53cb\u94fe\u6216\u7533\u8bf7\u672a\u901a\u8fc7\uff0c\u8bc4\u8bba\u7559\u8a00\u4f1a\u88ab\u9690\u85cf\u3002

    \u672c\u7ad9\u5df2\u7ecf\u52a0\u5165\u5341\u5e74\u4e4b\u7ea6\uff1a \u8bf7\u653e\u5fc3\u6dfb\u52a0\u672c\u7ad9\u53cb\u94fe

    \u53cb\u94fe\u683c\u5f0f\u793a\u4f8b/\u672c\u7ad9\u4fe1\u606f:

    TxtHTML(\u63a8\u8350)Butterfly\u901a\u7528

    \u540d\u79f0: Wcowin's Blog \u94fe\u63a5: https://wcowin.work/ \u5934\u50cf: https://pic4.zhimg.com/80/v2-a0456a5f527c1923f096759f2926012f_1440w.webp \u7b80\u4ecb: \u5faa\u6b64\u82e6\u65c5\uff0c\u4ee5\u8fbe\u661f\u8fb0

    \u63a8\u8350\u5728\u8bc4\u8bba\u533a\u53d1\u9001\u8fd9\u79cd\u683c\u5f0f\uff0c*\u53f7\u7684\u9700\u8981\u586b\u5199\u81ea\u5df1\u7684\u4fe1\u606f

    <div class=\"card\"> \n <img class=\"ava\" src=\"*\u4f60\u7684\u5934\u50cf\u94fe\u63a5*\" /> \n <div class=\"card-header\"> \n  <div> \n   <a href=\"*\u4f60\u7684\u7f51\u7ad9\u5730\u5740* \" target=\"_blank\">*\u4f60\u7684\u7ad9\u70b9\u540d\u79f0*</a> \n  </div> \n  <div class=\"info\">\n   *\u4f60\u7684\u7ad9\u70b9\u63cf\u8ff0*\n  </div> \n </div> \n</div>\n
    - name: Wcowin's Blog\n  link: https://wcowin.work/\n  avatar: https://pic4.zhimg.com/80/v2-a0456a5f527c1923f096759f2926012f_1440w.webp\n  descr: \u5faa\u6b64\u82e6\u65c5\uff0c\u4ee5\u8fbe\u661f\u8fb0\n

    \u70b9\u51fb\u586b\u5199\u53cb\u94fe\u7533\u8bf7\u95ee\u5377

    "},{"location":"liuyanban/","title":"\u7545\u6240\u6b32\u8a00\u7559\u8a00\u677f","text":"

    \u6708\u843d\u4e4c\u557c\u971c\u6ee1\u5929 \u6c5f\u67ab\u6e14\u706b\u5bf9\u6101\u7720

    \u300a\u67ab\u6865\u591c\u6cca\u300b\u3010\u5510\u4ee3\u3011\u5f20\u7ee7

    \u8bc4\u8bba\u7cfb\u7edf\u5207\u6362

    Giscus Cusdis

    \u8bc4\u8bba\u5ba1\u6838\u540e\u624d\u4f1a\u663e\u793a

    "},{"location":"tag/","title":"\u5206\u7c7b","text":""},{"location":"tag/#tags","title":"Tags","text":"
    • tips

      \u4ee5\u4e0b\u662f\u7f51\u7ad9\u6587\u7ae0\u7684\u5206\u7c7b\uff0c\u70b9\u51fb\u53ef\u8df3\u8f6c\u5230\u5bf9\u5e94\u5206\u7c7b\u4e0b\u7684\u6587\u7ae0

    "},{"location":"tag/#tag:markdown","title":"Markdown","text":"
    • MWeb Pro
    • Markdown\u6307\u5357
    "},{"location":"tag/#tag:mkdocs","title":"Mkdocs","text":"
    • 0.Mkdocs\u6559\u7a0b\u524d\u8a00
    • 1.\u5229\u7528Mkdocs\u90e8\u7f72\u9759\u6001\u7f51\u9875
    • 2.Mkdocs\u914d\u7f6e\u8bf4\u660e(mkdocs.yml)
    • 3.\u89e3\u51b3Github Pages\u90e8\u7f72mkdocs\u81ea\u5b9a\u4e49\u57df\u540d\u5931\u6548\u7684\u95ee\u9898
    • JS\u5b9e\u73b0\u9f20\u6807\u6837\u5f0f
    • \u4e3aMKdocs\u6dfb\u52a0\u6587\u7ae0\u4fee\u8ba2\u65f6\u95f4\u6233
    • \u4fee\u6539\u7f51\u7ad9\u5b57\u4f53
    • \u52a0\u901f\u7f51\u7ad9\u8bbf\u95ee\u7684\u4e00\u4e9b\u5fc3\u5f97
    • \u5d4c\u5165PDF\u6587\u4ef6
    • \u6dfb\u52a0404\u9875\u9762
    • \u6dfb\u52a0Mkdocs\u535a\u5ba2
    • \u6dfb\u52a0\u53cb\u94fe
    • \u6dfb\u52a0\u5728\u7ebf\u804a\u5929
    • \u6dfb\u52a0\u8bc4\u8bba\u7cfb\u7edf(giscus\u4e3a\u4f8b)
    • \u6dfb\u52a0\u9876\u90e8\u516c\u544a\u680f
    • \u76f8\u5bf9\u5730\u5740\u7684\u4e00\u4e9b\u95ee\u9898
    • \u7f51\u9875\u5706\u89d2\u5316\u8bbe\u8ba1
    • \u80cc\u666f\u7279\u6548
    • \u9875\u811a\u8bbe\u7f6e
    "},{"location":"tag/#tag:\u6280\u672f\u5206\u4eab","title":"\u6280\u672f\u5206\u4eab","text":"
    • Git \u5b9e\u7528\u6280\u5de7
    • \u5229\u7528Lighthouse\u6d4b\u8bd5\u7f51\u7ad9\u6027\u80fd
    • \u5982\u4f55\u5c06 github pages \u8fc1\u79fb\u5230 vercel \u4e0a\u6258\u7ba1
    "},{"location":"tag/#tag:\u8bbe\u8ba1\u7f8e\u5b66","title":"\u8bbe\u8ba1\u7f8e\u5b66","text":"
    • \u5510\u00b7\u8bfa\u66fc\u2014\u60c5\u611f\u8bbe\u8ba1\u7684\u4e09\u4e2a\u5c42\u6b21
    • \u6211\u5bf9\u8bbe\u8ba1\u7684\u4e00\u4e9b\u89c2\u70b9
    "},{"location":"ZH-TW/","title":"Home","text":"

    \ud83d\udcd6 \u9605\u8bfb\u4fe1\u606f

    \u9605\u8bfb\u65f6\u95f4\uff1a1 \u5206\u949f | \u4e2d\u6587\u5b57\u7b26\uff1a225

    "},{"location":"ZH-TW/#_1","title":"\u9996\u9801","text":"\u201c\u5faa\u6b64\u82e6\u65c5 \u4ee5\u9054\u661f\u8fb0\u201d
    • \u900f\u904e\u4e3b\u984c\u548c\u76ee\u9304\u4ee5\u958b\u555f\u6587\u7ae0
      • Mac/PC\u7aef \u8acb\u5728\u4e0a\u65b9\u6a19\u7c64\u5217\u9078\u64c7\u4e3b\u984c \u5728\u5de6\u5074\u76ee\u9304\u9078\u64c7\u6587\u7ae0
      • \u884c\u52d5\u7aef \u8acb\u9ede\u9078\u5de6\u4e0a\u89d2\u5716\u793a\u9078\u64c7\u4e3b\u984c\u548c\u6587\u7ae0
    • \u641c\u5c0b\u95dc\u9375\u5b57\u4ee5\u958b\u555f\u6587\u7ae0
    • \u5982\u9047\u5230\u7db2\u9801\u5361\u9813/\u958b\u555f\u6587\u7ae0\u5f8c\u7121\u6cd5\u986f\u793a\u5716\u7247\u7684\u60c5\u6cc1\uff0c\u8acb\u4f7f\u7528\u79d1\u5b78\u4e0a\u7db2\u4ee5\u6253\u7834\u8cc7\u8a0a\u58c1\u58d8

    \u5feb\u901f\u8ac7\u8a71(1) \u806f\u7d61\u6211(2)

    1. \u9ede\u9078\u53f3\u4e0b\u89d2\u8207\u6211\u7dda\u4e0a\u4ea4\u8ac7.
    2. 18939533255
    • Mkdocs\u6559\u7a0b

      • \u5229\u7528Mkdocs\u90e8\u7f72\u975c\u614b\u7db2\u9801\u81f3GitHub pages
      • Mkdocs\u90e8\u7f72\u914d\u7f6e\u8aaa\u660e(mkdocs.yml)
      • \u5982\u4f55\u7d66MKdocs\u6dfb\u52a0\u53cb\u93c8
      • \u7db2\u7ad9\u6dfb\u52a0Mkdocs\u535a\u5ba2
      • Blogger
    • \u95dc\u65bc

      • Mkdocs-Wcowin\u535a\u5ba2\u4e3b\u984c\u793e\u5340
      • \u7559\u8a00\u677f1
      • Blogger \u4e86\u89e3\u62112

    \u672c\u7ad9\u5df2\u7d93\u904b\u4f5c

    1. \u592a\u967d\u7e3d\u662f\u80fd\u6eab\u6696\u5411\u65e5\u8475\u00a0\u21a9

    2. All problems in computer science can be solved by another level of indirection\u00a0\u21a9

    "},{"location":"about/geren/","title":"\u5173\u4e8e\u6211","text":""},{"location":"about/geren/#_1","title":"\u4eca\u65e5\u8bd7\u8bcd","text":""},{"location":"about/geren/#_2","title":"\u5173\u4e8e\u6211","text":"\u89c2\u53f2\u77e5\u4eca\uff0c\u5f53\u601d\u8fdb\u9000\uff0c\u8bfb\u4e66\u660e\u5fd7\u53ef\u8bc6\u6625\u79cb \u2014\u2014Wcowin 1\u5e74+ \u5de5\u4f5c\u7ecf\u9a8c 3\u9879+ \u5b8c\u6210\u7684\u9879\u76ee 2\u4e2a+ \u8d21\u732e\u7684\u5f00\u6e90 \u4e0b\u8f7d\u7b80\u5386"},{"location":"about/geren/#_3","title":"\u6211\u7684\u5c65\u5386","text":"\u6765\u65f6\u8def \u6f2f\u6cb3\u9ad8\u4e2d \u5e73\u51e1\u7684\u4e09\u5e74 2018 - 2021 CTBU \u7535\u5b50\u4fe1\u606f\u5de5\u7a0b\u4e13\u4e1a\u5b66\u58eb 2021 - 2025 \u5bb6\u91cc\u8e72\u5927\u5b66 \u5bc6\u7801\u5b66\u7855\u58eb\u7814\u7a76\u751f 2026 - 2029 \u672a\u5b8c\u5f85\u7eed \u4e8e\u9053\u5404\u52aa\u529b\uff0c\u5343\u91cc\u81ea\u540c\u98ce Before - After"},{"location":"about/geren/#_4","title":"\u4e2a\u4eba\u7b80\u4ecb","text":"

    \ud835\ude3f\ud835\ude64\ud835\ude63'\ud835\ude69 \ud835\ude58\ud835\ude56\ud835\ude67\ud835\ude5a \ud835\ude56\ud835\ude57\ud835\ude64\ud835\ude6a\ud835\ude69 \ud835\ude6c\ud835\ude64\ud835\ude67\ud835\ude61\ud835\ude59\ud835\ude61\ud835\ude6e \ud835\ude5a\ud835\ude6e\ud835\ude5a\ud835\ude68 \ud835\ude69\ud835\ude64 \ud835\ude65\ud835\ude6a\ud835\ude67\ud835\ude68\ud835\ude6a\ud835\ude5a \ud835\ude6e\ud835\ude64\ud835\ude6a\ud835\ude67 \ud835\ude64\ud835\ude6c\ud835\ude63 \ud835\ude61\ud835\ude5e\ud835\ude5c\ud835\ude5d\ud835\ude69

    About me

    • Hey, I'm Wcowin~
    • \u5496\u5561\u91cd\u5ea6\u7231\u597d\u8005
    • \u70ed\u7231(xi\u0101)\u6298\u817e\u6280\u672f/Math\uff0c\u76ee\u524d\u7684\u7814\u7a76\u9886\u57df\u662f\u5bc6\u7801\u5b66
    • \u8bfb\u4e66\u660e\u5fd7\u53ef\u8bc6\u6625\u79cb;\u8bd7\u8bcd\u7231\u597d\u8005;\u559c\u6b22\u6751\u4e0a\u6625\u6811;\u64c5\u957f\u7fbd\u6bdb\u7403
    • \u6e05\u9192\uff0c\u77e5\u8da3\uff0c\u660e\u5f97\u5931\uff0c\u77e5\u8fdb\u9000

    "},{"location":"about/geren/#_5","title":"\u8054\u7cfb\u6211","text":"

    \u6211\u7684Wechat \u6211\u7684TG
    • WeChat \u626b\u4e00\u626b\u4e0a\u9762\u7684\u4e8c\u7ef4\u7801\u56fe\u6848 \u52a0\u6211\u4e3a\u670b\u53cb