5087 lines
172 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html lang="zh" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Content and ambitious, gentle yet firm.">
<meta name="author" content="王科文(Wcowin)">
<link rel="canonical" href="http://wcowin.work/Mkdocs-Wcowin/blog/websitebeauty/Mkdocs-AI-Summary/">
<link rel="prev" href="../../Mkdocs/mkdocs3/">
<link rel="next" href="../recommend/">
<link rel="icon" href="https://s2.loli.net/2025/02/12/aE5ovtzAlNTd9Uh.png">
<meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.6.15">
<title>MkDocs文档AI摘要 - Mkdocs中文教程</title>
<link rel="stylesheet" href="../../../assets/stylesheets/main.342714a4.min.css">
<link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<link rel="stylesheet" href="../../../stylesheets/extra.css">
<link rel="stylesheet" href="../../../stylesheets/extra2.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Wcowin/Wcowin.github.io@main/docs/stylesheets/link.css">
<link rel="stylesheet" href="../../../stylesheets/customize.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Wcowin/Wcowin.github.io@main/docs/stylesheets/ziti.css">
<script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
<script id="__analytics">function __md_analytics(){function e(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],e("js",new Date),e("config","G-29HZMNR0KG"),document.addEventListener("DOMContentLoaded",(function(){document.forms.search&&document.forms.search.query.addEventListener("blur",(function(){this.value&&e("event","search",{search_term:this.value})}));document$.subscribe((function(){var t=document.forms.feedback;if(void 0!==t)for(var a of t.querySelectorAll("[type=submit]"))a.addEventListener("click",(function(a){a.preventDefault();var n=document.location.pathname,d=this.getAttribute("data-md-value");e("event","feedback",{page:n,data:d}),t.firstElementChild.disabled=!0;var r=t.querySelector(".md-feedback__note [data-md-value='"+d+"']");r&&(r.hidden=!1)})),t.hidden=!1})),location$.subscribe((function(t){e("config","G-29HZMNR0KG",{page_path:t.pathname})}))}));var t=document.createElement("script");t.async=!0,t.src="https://www.googletagmanager.com/gtag/js?id=G-29HZMNR0KG",document.getElementById("__analytics").insertAdjacentElement("afterEnd",t)}</script>
<script>"undefined"!=typeof __md_analytics&&__md_analytics()</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo">
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#mkdocs-ai-hooks" class="md-skip">
跳转至
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="页眉">
<a href="../../.." title="Mkdocs中文教程" class="md-header__button md-logo" aria-label="Mkdocs中文教程" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 89 89">
<path d="M3.136,17.387l0,42.932l42.932,21.467l-42.932,-64.399Z" />
<path d="M21.91,8l42.933,64.398l-18.775,9.388l-42.932,-64.399l18.774,-9.387Z" style="fill-opacity: 0.5" />
<path d="M67.535,17.387l-27.262,18.156l21.878,32.818l5.384,2.691l0,-53.665Z" />
<path d="M67.535,17.387l0,53.666l18.774,-9.388l0,-53.665l-18.774,9.387Z" style="fill-opacity: 0.25" />
</svg>
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
Mkdocs中文教程
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
MkDocs文档AI摘要
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme)" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="indigo" aria-label="关闭自动模式" type="radio" name="__palette" id="__palette_0">
<label class="md-header__button md-icon" title="关闭自动模式" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1M8 13h8v-2H8zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4a5 5 0 0 0 5-5 5 5 0 0 0-5-5"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="blue" data-md-color-accent="indigo" aria-label="切换至夜间模式" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="切换至夜间模式" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 7H7a5 5 0 0 0-5 5 5 5 0 0 0 5 5h10a5 5 0 0 0 5-5 5 5 0 0 0-5-5m0 8a3 3 0 0 1-3-3 3 3 0 0 1 3-3 3 3 0 0 1 3 3 3 3 0 0 1-3 3"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="black" data-md-color-accent="indigo" aria-label="切换至日间模式" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="切换至日间模式" for="__palette_0" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 6H7c-3.31 0-6 2.69-6 6s2.69 6 6 6h10c3.31 0 6-2.69 6-6s-2.69-6-6-6m0 10H7c-2.21 0-4-1.79-4-4s1.79-4 4-4h10c2.21 0 4 1.79 4 4s-1.79 4-4 4M7 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3"/></svg>
</label>
</form>
<script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
<div class="md-header__option">
<div class="md-select">
<button class="md-header__button md-icon" aria-label="选择当前语言">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M0 128c0-35.3 28.7-64 64-64h512c35.3 0 64 28.7 64 64v256c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64zm320 0v256h256V128zm-141.7 47.9c-3.2-7.2-10.4-11.9-18.3-11.9s-15.1 4.7-18.3 11.9l-64 144c-4.5 10.1.1 21.9 10.2 26.4s21.9-.1 26.4-10.2l8.9-20.1h73.6l8.9 20.1c4.5 10.1 16.3 14.6 26.4 10.2s14.6-16.3 10.2-26.4zM160 233.2l19 42.8h-38zM448 164c11 0 20 9 20 20v4h60c11 0 20 9 20 20s-9 20-20 20h-2l-1.6 4.5c-8.9 24.4-22.4 46.6-39.6 65.4.9.6 1.8 1.1 2.7 1.6l18.9 11.3c9.5 5.7 12.5 18 6.9 27.4s-18 12.5-27.4 6.9L467 333.8c-4.5-2.7-8.8-5.5-13.1-8.5-10.6 7.5-21.9 14-34 19.4l-3.6 1.6c-10.1 4.5-21.9-.1-26.4-10.2s.1-21.9 10.2-26.4l3.6-1.6c6.4-2.9 12.6-6.1 18.5-9.8L410 286.1c-7.8-7.8-7.8-20.5 0-28.3s20.5-7.8 28.3 0l14.6 14.6.5.5c12.4-13.1 22.5-28.3 29.8-45l-35.2.1h-72c-11 0-20-9-20-20s9-20 20-20h52v-4c0-11 9-20 20-20"/></svg>
</button>
<div class="md-select__inner">
<ul class="md-select__list">
<li class="md-select__item">
<a href="/" hreflang="zh" class="md-select__link">
简体中文
</a>
</li>
<li class="md-select__item">
<a href="/Mkdocs-Wcowin/en/" hreflang="en" class="md-select__link">
English
</a>
</li>
<li class="md-select__item">
<a href="/Mkdocs-Wcowin/ZH-TW/" hreflang="zh-TW" class="md-select__link">
China(TW)
</a>
</li>
</ul>
</div>
</div>
</div>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="搜索" placeholder="搜索" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256l137.3-137.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg>
</label>
<nav class="md-search__options" aria-label="查找">
<a href="javascript:void(0)" class="md-search__icon md-icon" title="分享" aria-label="分享" data-clipboard data-clipboard-text="" data-md-component="search-share" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg>
</a>
<button type="reset" class="md-search__icon md-icon" title="清空当前内容" aria-label="清空当前内容" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
正在初始化搜索引擎
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://github.com/Wcowin/Mkdocs-Wcowin" title="前往仓库" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</div>
<div class="md-source__repository">
Mkdocs-Wcowin
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<nav class="md-tabs" aria-label="标签" data-md-component="tabs">
<div class="md-grid">
<ul class="md-tabs__list">
<li class="md-tabs__item md-tabs__item--active">
<a href="../../MIT/" class="md-tabs__link">
MKdocs中文教程
</a>
</li>
<li class="md-tabs__item">
<a href="../../../develop/Markdown/markdown/" class="md-tabs__link">
建设MKdocs技能指北
</a>
</li>
<li class="md-tabs__item">
<a href="../../../tag/" class="md-tabs__link">
标签
</a>
</li>
<li class="md-tabs__item">
<a href="../../../liuyanban/" class="md-tabs__link">
留言板
</a>
</li>
<li class="md-tabs__item">
<a href="../../" class="md-tabs__link">
博客
</a>
</li>
<li class="md-tabs__item">
<a href="../../../link/" class="md-tabs__link">
友链
</a>
</li>
<li class="md-tabs__item">
<a href="../../../about/geren/" class="md-tabs__link">
关于
</a>
</li>
<li class="md-tabs__item">
<a href="https://wcowin.work" class="md-tabs__link">
个人博客
</a>
</li>
<li class="md-tabs__item">
<a href="https://github.com/new?template_name=Mkdocs-Wcowin&template_owner=Wcowin" class="md-tabs__link">
使用本主题
</a>
</li>
</ul>
</div>
</nav>
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--lifted" aria-label="导航栏" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href="../../.." title="Mkdocs中文教程" class="md-nav__button md-logo" aria-label="Mkdocs中文教程" data-md-component="logo">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 89 89">
<path d="M3.136,17.387l0,42.932l42.932,21.467l-42.932,-64.399Z" />
<path d="M21.91,8l42.933,64.398l-18.775,9.388l-42.932,-64.399l18.774,-9.387Z" style="fill-opacity: 0.5" />
<path d="M67.535,17.387l-27.262,18.156l21.878,32.818l5.384,2.691l0,-53.665Z" />
<path d="M67.535,17.387l0,53.666l18.774,-9.388l0,-53.665l-18.774,9.387Z" style="fill-opacity: 0.25" />
</svg>
</a>
Mkdocs中文教程
</label>
<div class="md-nav__source">
<a href="https://github.com/Wcowin/Mkdocs-Wcowin" title="前往仓库" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</div>
<div class="md-source__repository">
Mkdocs-Wcowin
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1" checked>
<label class="md-nav__link" for="__nav_1" id="__nav_1_label" tabindex="">
<span class="md-ellipsis">
MKdocs中文教程
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_1_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_1">
<span class="md-nav__icon md-icon"></span>
MKdocs中文教程
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../MIT/" class="md-nav__link">
<span class="md-ellipsis">
许可声明
</span>
<span class="md-status md-status--new"></span>
</a>
</li>
<li class="md-nav__item md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_1_2" >
<label class="md-nav__link" for="__nav_1_2" id="__nav_1_2_label" tabindex="">
<span class="md-ellipsis">
MKdocs教程(三部曲)
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_1_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_1_2">
<span class="md-nav__icon md-icon"></span>
MKdocs教程(三部曲)
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../Mkdocs/mkfirst/" class="md-nav__link">
<span class="md-ellipsis">
0.Mkdocs教程前言
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../Mkdocs/mkdocs1/" class="md-nav__link">
<span class="md-ellipsis">
1.利用Mkdocs部署静态网页
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../Mkdocs/mkdocs2/" class="md-nav__link">
<span class="md-ellipsis">
2.Mkdocs配置说明(mkdocs.yml)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../Mkdocs/mkdocs3/" class="md-nav__link">
<span class="md-ellipsis">
3.解决Github Pages部署mkdocs自定义域名失效的问题
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_1_3" checked>
<label class="md-nav__link" for="__nav_1_3" id="__nav_1_3_label" tabindex="">
<span class="md-ellipsis">
Mkdocs美化/补充
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_1_3_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_1_3">
<span class="md-nav__icon md-icon"></span>
Mkdocs美化/补充
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
<span class="md-ellipsis">
MkDocs文档AI摘要
</span>
<span class="md-status md-status--new"></span>
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
<span class="md-ellipsis">
MkDocs文档AI摘要
</span>
<span class="md-status md-status--new"></span>
</a>
<nav class="md-nav md-nav--secondary" aria-label="目录">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
目录
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
<span class="md-ellipsis">
✨ 功能特性
</span>
</a>
<nav class="md-nav" aria-label="✨ 功能特性">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ai" class="md-nav__link">
<span class="md-ellipsis">
🤖 AI智能摘要
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
<span class="md-ellipsis">
📊 智能阅读统计(可选)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
<span class="md-ellipsis">
🚀 智能化特性
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
<span class="md-ellipsis">
📦 快速安装
</span>
</a>
<nav class="md-nav" aria-label="📦 快速安装">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#1" class="md-nav__link">
<span class="md-ellipsis">
方法1: 直接下载(推荐)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-git" class="md-nav__link">
<span class="md-ellipsis">
方法2: Git克隆
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_5" class="md-nav__link">
<span class="md-ellipsis">
依赖安装
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_6" class="md-nav__link">
<span class="md-ellipsis">
🚀 快速开始
</span>
</a>
<nav class="md-nav" aria-label="🚀 快速开始">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#1_1" class="md-nav__link">
<span class="md-ellipsis">
1. 基础配置
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-ai" class="md-nav__link">
<span class="md-ellipsis">
2. 配置AI服务
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#3" class="md-nav__link">
<span class="md-ellipsis">
3. 设置参数
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#4" class="md-nav__link">
<span class="md-ellipsis">
4. 本地运行和测试
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#5" class="md-nav__link">
<span class="md-ellipsis">
5. 部署配置
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#6-github-secrets" class="md-nav__link">
<span class="md-ellipsis">
6. GitHub Secrets配置
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_7" class="md-nav__link">
<span class="md-ellipsis">
📖 使用指南
</span>
</a>
<nav class="md-nav" aria-label="📖 使用指南">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ai_1" class="md-nav__link">
<span class="md-ellipsis">
AI摘要控制
</span>
</a>
<nav class="md-nav" aria-label="AI摘要控制">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#1_2" class="md-nav__link">
<span class="md-ellipsis">
方法1: 页面级控制(推荐)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2" class="md-nav__link">
<span class="md-ellipsis">
方法2: 文件夹级控制
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_8" class="md-nav__link">
<span class="md-ellipsis">
🎨 显示效果
</span>
</a>
<nav class="md-nav" aria-label="🎨 显示效果">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ai_2" class="md-nav__link">
<span class="md-ellipsis">
AI摘要显示
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_9" class="md-nav__link">
<span class="md-ellipsis">
💰 成本说明
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_10" class="md-nav__link">
<span class="md-ellipsis">
⚙️ 高级配置
</span>
</a>
<nav class="md-nav" aria-label="⚙️ 高级配置">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ai_3" class="md-nav__link">
<span class="md-ellipsis">
自定义AI服务
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_11" class="md-nav__link">
<span class="md-ellipsis">
自定义提示词
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_12" class="md-nav__link">
<span class="md-ellipsis">
缓存配置
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_13" class="md-nav__link">
<span class="md-ellipsis">
🌍 多语言支持
</span>
</a>
<nav class="md-nav" aria-label="🌍 多语言支持">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_14" class="md-nav__link">
<span class="md-ellipsis">
语言配置
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_15" class="md-nav__link">
<span class="md-ellipsis">
支持的语言
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_16" class="md-nav__link">
<span class="md-ellipsis">
📊 性能优化
</span>
</a>
<nav class="md-nav" aria-label="📊 性能优化">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_17" class="md-nav__link">
<span class="md-ellipsis">
已实现优化
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_18" class="md-nav__link">
<span class="md-ellipsis">
性能建议
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_19" class="md-nav__link">
<span class="md-ellipsis">
🤝 贡献指南
</span>
</a>
<nav class="md-nav" aria-label="🤝 贡献指南">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_20" class="md-nav__link">
<span class="md-ellipsis">
如何贡献
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_21" class="md-nav__link">
<span class="md-ellipsis">
开发环境
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_22" class="md-nav__link">
<span class="md-ellipsis">
📝 更新日志
</span>
</a>
<nav class="md-nav" aria-label="📝 更新日志">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#v130-2025-06-04-" class="md-nav__link">
<span class="md-ellipsis">
[v1.3.0] (2025-06-04) - 最新版本
</span>
</a>
<nav class="md-nav" aria-label="[v1.3.0] (2025-06-04) - 最新版本">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_23" class="md-nav__link">
<span class="md-ellipsis">
核心改进
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#v120-2025-06-03" class="md-nav__link">
<span class="md-ellipsis">
[v1.2.0] (2025-06-03)
</span>
</a>
<nav class="md-nav" aria-label="[v1.2.0] (2025-06-03)">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_24" class="md-nav__link">
<span class="md-ellipsis">
✨ 主要新功能
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_25" class="md-nav__link">
<span class="md-ellipsis">
🔧 技术改进
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#v100-2025-06-01-" class="md-nav__link">
<span class="md-ellipsis">
[v1.0.0] (2025-06-01) - 初始版本
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_26" class="md-nav__link">
<span class="md-ellipsis">
🐛 问题反馈
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_27" class="md-nav__link">
<span class="md-ellipsis">
📄 许可证
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_28" class="md-nav__link">
<span class="md-ellipsis">
🙏 致谢
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../recommend/" class="md-nav__link">
<span class="md-ellipsis">
添加相关推荐文章
</span>
<span class="md-status md-status--new"></span>
</a>
</li>
<li class="md-nav__item">
<a href="../reading_time/" class="md-nav__link">
<span class="md-ellipsis">
添加阅读信息统计
</span>
<span class="md-status md-status--new"></span>
</a>
</li>
<li class="md-nav__item">
<a href="../../Mkdocs/mkdocsblog/" class="md-nav__link">
<span class="md-ellipsis">
添加Mkdocs博客
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../Mkdocs/linktech/" class="md-nav__link">
<span class="md-ellipsis">
如何给MKdocs添加友链
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../yuanjiaohua/" class="md-nav__link">
<span class="md-ellipsis">
网页圆角化设计
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../mkcomments/" class="md-nav__link">
<span class="md-ellipsis">
添加评论系统(giscus为例)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../webtalknow/" class="md-nav__link">
<span class="md-ellipsis">
添加在线聊天
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../linktech/" class="md-nav__link">
<span class="md-ellipsis">
添加友链
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../header/" class="md-nav__link">
<span class="md-ellipsis">
添加顶部公告栏
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../mkdocsfont/" class="md-nav__link">
<span class="md-ellipsis">
修改网站字体
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../shubiao/" class="md-nav__link">
<span class="md-ellipsis">
JS实现鼠标样式
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../backgroud/" class="md-nav__link">
<span class="md-ellipsis">
背景特效
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../mkpdf/" class="md-nav__link">
<span class="md-ellipsis">
嵌入PDF文件
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../Relativeaddress/" class="md-nav__link">
<span class="md-ellipsis">
相对地址的一些问题
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../404/" class="md-nav__link">
<span class="md-ellipsis">
添加404页面
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../time/" class="md-nav__link">
<span class="md-ellipsis">
为MKdocs添加文章修订时间戳
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../footer/" class="md-nav__link">
<span class="md-ellipsis">
页脚设置
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../accelerate/" class="md-nav__link">
<span class="md-ellipsis">
加速网站访问的一些心得
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2" >
<label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
<span class="md-ellipsis">
建设MKdocs技能指北
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2">
<span class="md-nav__icon md-icon"></span>
建设MKdocs技能指北
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2_1" >
<label class="md-nav__link" for="__nav_2_1" id="__nav_2_1_label" tabindex="0">
<span class="md-ellipsis">
Markdown
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_1_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_1">
<span class="md-nav__icon md-icon"></span>
Markdown
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../develop/Markdown/markdown/" class="md-nav__link">
<span class="md-ellipsis">
Markdown指南
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../develop/Markdown/MWeb/" class="md-nav__link">
<span class="md-ellipsis">
MWeb Pro
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../develop/git/" class="md-nav__link">
<span class="md-ellipsis">
Git 实用技巧
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../develop/lighthouse/" class="md-nav__link">
<span class="md-ellipsis">
利用Lighthouse测试网站性能
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../develop/vercel/" class="md-nav__link">
<span class="md-ellipsis">
如何将 github pages 迁移到 vercel 上托管
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_2_5" >
<label class="md-nav__link" for="__nav_2_5" id="__nav_2_5_label" tabindex="0">
<span class="md-ellipsis">
设计美学
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_2_5">
<span class="md-nav__icon md-icon"></span>
设计美学
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../develop/designbeauty/db1/" class="md-nav__link">
<span class="md-ellipsis">
唐·诺曼—情感设计的三个层次
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../develop/designbeauty/my-to-desihn/" class="md-nav__link">
<span class="md-ellipsis">
我对设计的一些观点
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="../../../tag/" class="md-nav__link">
<span class="md-ellipsis">
标签
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../liuyanban/" class="md-nav__link">
<span class="md-ellipsis">
留言板
</span>
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5" >
<div class="md-nav__link md-nav__container">
<a href="../../" class="md-nav__link ">
<span class="md-ellipsis">
博客
</span>
</a>
<label class="md-nav__link " for="__nav_5" id="__nav_5_label" tabindex="0">
<span class="md-nav__icon md-icon"></span>
</label>
</div>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
博客
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5_2" >
<label class="md-nav__link" for="__nav_5_2" id="__nav_5_2_label" tabindex="0">
<span class="md-ellipsis">
归档
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_2">
<span class="md-nav__icon md-icon"></span>
归档
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../archive/2025/" class="md-nav__link">
<span class="md-ellipsis">
2025
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../archive/2024/" class="md-nav__link">
<span class="md-ellipsis">
2024
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../archive/2023/" class="md-nav__link">
<span class="md-ellipsis">
2023
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../archive/2022/" class="md-nav__link">
<span class="md-ellipsis">
2022
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../archive/2021/" class="md-nav__link">
<span class="md-ellipsis">
2021
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_5_3" >
<label class="md-nav__link" for="__nav_5_3" id="__nav_5_3_label" tabindex="0">
<span class="md-ellipsis">
分类
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_5_3_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5_3">
<span class="md-nav__icon md-icon"></span>
分类
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../category/hello-world/" class="md-nav__link">
<span class="md-ellipsis">
Hello World
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../category/%E7%BD%91%E7%AB%99%E6%9B%B4%E6%96%B0%E8%AE%B0%E5%BD%95/" class="md-nav__link">
<span class="md-ellipsis">
网站更新记录
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_6" >
<label class="md-nav__link" for="__nav_6" id="__nav_6_label" tabindex="0">
<span class="md-ellipsis">
友链
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_6_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_6">
<span class="md-nav__icon md-icon"></span>
友链
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../link/" class="md-nav__link">
<span class="md-ellipsis">
友链
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle md-toggle--indeterminate" type="checkbox" id="__nav_7" >
<label class="md-nav__link" for="__nav_7" id="__nav_7_label" tabindex="0">
<span class="md-ellipsis">
关于
</span>
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_7_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_7">
<span class="md-nav__icon md-icon"></span>
关于
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../../../about/geren/" class="md-nav__link">
<span class="md-ellipsis">
作者个人简介
</span>
<span class="md-status md-status--new"></span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../about/resume/" class="md-nav__link">
<span class="md-ellipsis">
个人简历
</span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../about/zcw/" class="md-nav__link">
<span class="md-ellipsis">
支持作者
</span>
<span class="md-status md-status--new"></span>
</a>
</li>
<li class="md-nav__item">
<a href="../../../about/test/" class="md-nav__link">
<span class="md-ellipsis">
功能测试
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="https://wcowin.work" class="md-nav__link">
<span class="md-ellipsis">
个人博客
</span>
</a>
</li>
<li class="md-nav__item">
<a href="https://github.com/new?template_name=Mkdocs-Wcowin&template_owner=Wcowin" class="md-nav__link">
<span class="md-ellipsis">
使用本主题
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--secondary" aria-label="目录">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
目录
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#_1" class="md-nav__link">
<span class="md-ellipsis">
✨ 功能特性
</span>
</a>
<nav class="md-nav" aria-label="✨ 功能特性">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ai" class="md-nav__link">
<span class="md-ellipsis">
🤖 AI智能摘要
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_2" class="md-nav__link">
<span class="md-ellipsis">
📊 智能阅读统计(可选)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_3" class="md-nav__link">
<span class="md-ellipsis">
🚀 智能化特性
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_4" class="md-nav__link">
<span class="md-ellipsis">
📦 快速安装
</span>
</a>
<nav class="md-nav" aria-label="📦 快速安装">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#1" class="md-nav__link">
<span class="md-ellipsis">
方法1: 直接下载(推荐)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-git" class="md-nav__link">
<span class="md-ellipsis">
方法2: Git克隆
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_5" class="md-nav__link">
<span class="md-ellipsis">
依赖安装
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_6" class="md-nav__link">
<span class="md-ellipsis">
🚀 快速开始
</span>
</a>
<nav class="md-nav" aria-label="🚀 快速开始">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#1_1" class="md-nav__link">
<span class="md-ellipsis">
1. 基础配置
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2-ai" class="md-nav__link">
<span class="md-ellipsis">
2. 配置AI服务
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#3" class="md-nav__link">
<span class="md-ellipsis">
3. 设置参数
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#4" class="md-nav__link">
<span class="md-ellipsis">
4. 本地运行和测试
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#5" class="md-nav__link">
<span class="md-ellipsis">
5. 部署配置
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#6-github-secrets" class="md-nav__link">
<span class="md-ellipsis">
6. GitHub Secrets配置
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_7" class="md-nav__link">
<span class="md-ellipsis">
📖 使用指南
</span>
</a>
<nav class="md-nav" aria-label="📖 使用指南">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ai_1" class="md-nav__link">
<span class="md-ellipsis">
AI摘要控制
</span>
</a>
<nav class="md-nav" aria-label="AI摘要控制">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#1_2" class="md-nav__link">
<span class="md-ellipsis">
方法1: 页面级控制(推荐)
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#2" class="md-nav__link">
<span class="md-ellipsis">
方法2: 文件夹级控制
</span>
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_8" class="md-nav__link">
<span class="md-ellipsis">
🎨 显示效果
</span>
</a>
<nav class="md-nav" aria-label="🎨 显示效果">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ai_2" class="md-nav__link">
<span class="md-ellipsis">
AI摘要显示
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_9" class="md-nav__link">
<span class="md-ellipsis">
💰 成本说明
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_10" class="md-nav__link">
<span class="md-ellipsis">
⚙️ 高级配置
</span>
</a>
<nav class="md-nav" aria-label="⚙️ 高级配置">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#ai_3" class="md-nav__link">
<span class="md-ellipsis">
自定义AI服务
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_11" class="md-nav__link">
<span class="md-ellipsis">
自定义提示词
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_12" class="md-nav__link">
<span class="md-ellipsis">
缓存配置
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_13" class="md-nav__link">
<span class="md-ellipsis">
🌍 多语言支持
</span>
</a>
<nav class="md-nav" aria-label="🌍 多语言支持">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_14" class="md-nav__link">
<span class="md-ellipsis">
语言配置
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_15" class="md-nav__link">
<span class="md-ellipsis">
支持的语言
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_16" class="md-nav__link">
<span class="md-ellipsis">
📊 性能优化
</span>
</a>
<nav class="md-nav" aria-label="📊 性能优化">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_17" class="md-nav__link">
<span class="md-ellipsis">
已实现优化
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_18" class="md-nav__link">
<span class="md-ellipsis">
性能建议
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_19" class="md-nav__link">
<span class="md-ellipsis">
🤝 贡献指南
</span>
</a>
<nav class="md-nav" aria-label="🤝 贡献指南">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_20" class="md-nav__link">
<span class="md-ellipsis">
如何贡献
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_21" class="md-nav__link">
<span class="md-ellipsis">
开发环境
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_22" class="md-nav__link">
<span class="md-ellipsis">
📝 更新日志
</span>
</a>
<nav class="md-nav" aria-label="📝 更新日志">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#v130-2025-06-04-" class="md-nav__link">
<span class="md-ellipsis">
[v1.3.0] (2025-06-04) - 最新版本
</span>
</a>
<nav class="md-nav" aria-label="[v1.3.0] (2025-06-04) - 最新版本">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_23" class="md-nav__link">
<span class="md-ellipsis">
核心改进
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#v120-2025-06-03" class="md-nav__link">
<span class="md-ellipsis">
[v1.2.0] (2025-06-03)
</span>
</a>
<nav class="md-nav" aria-label="[v1.2.0] (2025-06-03)">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#_24" class="md-nav__link">
<span class="md-ellipsis">
✨ 主要新功能
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_25" class="md-nav__link">
<span class="md-ellipsis">
🔧 技术改进
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#v100-2025-06-01-" class="md-nav__link">
<span class="md-ellipsis">
[v1.0.0] (2025-06-01) - 初始版本
</span>
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="#_26" class="md-nav__link">
<span class="md-ellipsis">
🐛 问题反馈
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_27" class="md-nav__link">
<span class="md-ellipsis">
📄 许可证
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#_28" class="md-nav__link">
<span class="md-ellipsis">
🙏 致谢
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<nav class="md-tags" >
<a href="../../../tag/#tag:mkdocs" class="md-tag">Mkdocs</a>
</nav>
<a href="https://github.com/Wcowin/Mkdocs-Wcowin/edit/main/docs/blog/websitebeauty/Mkdocs-AI-Summary.md" title="编辑此页" class="md-content__button md-icon" rel="edit">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg>
</a>
<a href="https://github.com/Wcowin/Mkdocs-Wcowin/raw/main/docs/blog/websitebeauty/Mkdocs-AI-Summary.md" title="查看本页的源代码" class="md-content__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg>
</a>
<div class="admonition info">
<p class="admonition-title">💾 AI智能摘要 (智谱清言)</p>
<p>MkDocs AI Hooks是一款集成AI摘要和智能阅读统计功能的插件支持多AI服务自动生成80-120字摘要并提供多种配置选项提升文档智能化和用户体验。</p>
</div>
<div class="admonition info">
<p class="admonition-title">📖 阅读信息</p>
<p>阅读时间:<strong>2</strong> 分钟 | 中文字符:<strong>904</strong> | 有效代码行数:<strong>205</strong></p>
</div>
<h1 id="mkdocs-ai-hooks">MkDocs AI Hooks<a class="headerlink" href="#mkdocs-ai-hooks" title="Permanent link">&para;</a></h1>
<p><img alt="logo 2" class="img1" src="https://s1.imagehub.cc/images/2025/06/06/ee327dc2912fd2f31d38ee8a16a1e1ff.png" /></p>
<p>仓库地址:<a href="https://github.com/Wcowin/Mkdocs-AI-Summary">https://github.com/Wcowin/Mkdocs-AI-Summary</a><br />
🌐 <strong>在线演示</strong>:<a href="https://wcowin.work/Mkdocs-AI-Summary-Plus/">https://wcowin.work/Mkdocs-AI-Summary-Plus/</a></p>
<p align="center">
<img src="https://img.shields.io/badge/MkDocs-Hooks-526CFE?style=for-the-badge&logo=MaterialForMkDocs&logoColor=white" alt="MkDocs Hooks">
<img src="https://img.shields.io/badge/AI_Powered-DeepSeek-FF6B35?style=for-the-badge&logo=openai&logoColor=white" alt="AI Powered">
<img src="https://img.shields.io/badge/Python-3.7+-3776AB?style=for-the-badge&logo=python&logoColor=white" alt="Python 3.7+">
</p>
<p align="center">
<a href="https://github.com/Wcowin/mkdocs-ai-hooks/blob/main/README.md">中文</a> | <a href="https://github.com/Wcowin/mkdocs-ai-hooks/blob/main/README-en.md">English</a>
</p>
<p>🚀 <strong>您的MkDocs文档首选智能摘要</strong> <br />
这个项目利用MkDocs hooks为您的技术文档和博客添加AI驱动的摘要生成和智能阅读统计功能。</p>
<p><img alt="预览图1" src="https://s1.imagehub.cc/images/2025/06/03/d1563500263b22cfd0ffc3679993aa83.jpg" />
<img alt="预览图2" src="https://s1.imagehub.cc/images/2025/06/03/526b59b6a2e478f2ffa1629320e3e2ce.png" /></p>
<hr />
<h2 id="_1">✨ 功能特性<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<h3 id="ai">🤖 AI智能摘要<a class="headerlink" href="#ai" title="Permanent link">&para;</a></h3>
<ul>
<li><strong>多AI服务集成</strong>: 支持DeepSeek、OpenAI、Claude、Gemini等主流AI服务 </li>
<li><strong>自动摘要生成</strong>: 生成高质量的80-120字智能摘要 </li>
<li><strong>多语言支持</strong>: 支持中文、英文、双语摘要生成 </li>
<li><strong>智能内容清理</strong>: 自动过滤YAML、HTML、代码块等格式内容 </li>
<li><strong>备用摘要机制</strong>: API失败时提供基于关键词的本地摘要 </li>
<li><strong>智能缓存系统</strong>: 7天智能过期避免重复API调用 </li>
<li><strong>灵活配置</strong>: 支持文件夹级别和页面级别的精确控制 </li>
</ul>
<h3 id="_2">📊 智能阅读统计(可选)<a class="headerlink" href="#_2" title="Permanent link">&para;</a></h3>
<ul>
<li><strong>精准字符统计</strong>: 专门优化的中英文内容识别 </li>
<li><strong>智能代码检测</strong>: 识别30+编程语言和命令行代码 </li>
<li><strong>阅读时间估算</strong>: 基于语言特性的智能计算中文400字/分钟英文200词/分钟) </li>
<li><strong>美观信息展示</strong>: 使用MkDocs Material风格的信息框 </li>
</ul>
<h3 id="_3">🚀 智能化特性<a class="headerlink" href="#_3" title="Permanent link">&para;</a></h3>
<ul>
<li><strong>环境自适应</strong>: 自动识别CI/本地环境,本地或者部署都可选启用/禁用 </li>
<li><strong>自动语言识别</strong>: 支持30+编程语言和标记语言 </li>
<li><strong>内容类型检测</strong>: 区分代码、配置、命令行等不同内容 </li>
<li><strong>LRU缓存优化</strong>: 提升处理性能Todo </li>
<li><strong>完善错误处理</strong>: 异常处理和日志记录Todo</li>
</ul>
<hr />
<h2 id="_4">📦 快速安装<a class="headerlink" href="#_4" title="Permanent link">&para;</a></h2>
<h3 id="1">方法1: 直接下载(推荐)<a class="headerlink" href="#1" title="Permanent link">&para;</a></h3>
<p><strong>步骤1</strong>: 下载文件
- 从 <a href="https://github.com/Wcowin/mkdocs-ai-hooks/releases">Releases页面</a> 下载最新版本
- 或直接下载 <code>ai_summary.py</code>文件</p>
<p><strong>步骤2</strong>: 创建目录并放置文件
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-0-1">1</a></span>
<span class="normal"><a href="#__codelineno-0-2">2</a></span>
<span class="normal"><a href="#__codelineno-0-3">3</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-0-1" name="__codelineno-0-1"></a><span class="c1"># 在您的MkDocs项目根目录下执行</span>
<a id="__codelineno-0-2" name="__codelineno-0-2"></a>mkdir<span class="w"> </span>-p<span class="w"> </span>docs/overrides/hooks/
<a id="__codelineno-0-3" name="__codelineno-0-3"></a>mv<span class="w"> </span>ai_summary.py<span class="w"> </span>docs/overrides/hooks/
</code></pre></div></td></tr></table></div></p>
<p><strong>步骤3</strong>: 配置MkDocs主题以及覆写路径
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-1-1">1</a></span>
<span class="normal"><a href="#__codelineno-1-2">2</a></span>
<span class="normal"><a href="#__codelineno-1-3">3</a></span>
<span class="normal"><a href="#__codelineno-1-4">4</a></span>
<span class="normal"><a href="#__codelineno-1-5">5</a></span>
<span class="normal"><a href="#__codelineno-1-6">6</a></span>
<span class="normal"><a href="#__codelineno-1-7">7</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-1-1" name="__codelineno-1-1"></a><span class="c1"># 在 mkdocs.yml 中添加</span>
<a id="__codelineno-1-2" name="__codelineno-1-2"></a><span class="nt">theme</span><span class="p">:</span>
<a id="__codelineno-1-3" name="__codelineno-1-3"></a><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">material</span>
<a id="__codelineno-1-4" name="__codelineno-1-4"></a><span class="w"> </span><span class="nt">custom_dir</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">docs/overrides</span><span class="w"> </span><span class="c1"># 必需配置!!!</span>
<a id="__codelineno-1-5" name="__codelineno-1-5"></a><span class="w"> </span><span class="nt">features</span><span class="p">:</span>
<a id="__codelineno-1-6" name="__codelineno-1-6"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">content.code.copy</span>
<a id="__codelineno-1-7" name="__codelineno-1-7"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">content.code.select</span>
</code></pre></div></td></tr></table></div></p>
<h3 id="2-git">方法2: Git克隆<a class="headerlink" href="#2-git" title="Permanent link">&para;</a></h3>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-2-1">1</a></span>
<span class="normal"><a href="#__codelineno-2-2">2</a></span>
<span class="normal"><a href="#__codelineno-2-3">3</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-2-1" name="__codelineno-2-1"></a>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/Wcowin/mkdocs-ai-hooks.git
<a id="__codelineno-2-2" name="__codelineno-2-2"></a><span class="nb">cd</span><span class="w"> </span>mkdocs-ai-hooks<span class="w"> </span>
<a id="__codelineno-2-3" name="__codelineno-2-3"></a>pip<span class="w"> </span>install<span class="w"> </span>-r<span class="w"> </span>requirements.txt
</code></pre></div></td></tr></table></div>
<h3 id="_5">依赖安装<a class="headerlink" href="#_5" title="Permanent link">&para;</a></h3>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-3-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-3-1" name="__codelineno-3-1"></a>pip<span class="w"> </span>install<span class="w"> </span>-r<span class="w"> </span>requirements.txt
</code></pre></div></td></tr></table></div>
<hr />
<h2 id="_6">🚀 快速开始<a class="headerlink" href="#_6" title="Permanent link">&para;</a></h2>
<h3 id="1_1">1. 基础配置<a class="headerlink" href="#1_1" title="Permanent link">&para;</a></h3>
<p><strong>步骤1</strong>: 配置hooks
ai_summary.py务必放到docs/overrides/hooks目录下然后
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-4-1">1</a></span>
<span class="normal"><a href="#__codelineno-4-2">2</a></span>
<span class="normal"><a href="#__codelineno-4-3">3</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-4-1" name="__codelineno-4-1"></a><span class="c1"># 在 mkdocs.yml 中添加</span>
<a id="__codelineno-4-2" name="__codelineno-4-2"></a><span class="nt">hooks</span><span class="p">:</span>
<a id="__codelineno-4-3" name="__codelineno-4-3"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">docs/overrides/hooks/ai_summary.py</span><span class="w"> </span><span class="c1"># AI摘要hook</span>
</code></pre></div></td></tr></table></div>
<strong>步骤2</strong>: 本地配置
根目录下创建 <code>.env</code> 文件存放密钥(记得添加到 <code>.gitignore</code>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-5-1">1</a></span>
<span class="normal"><a href="#__codelineno-5-2">2</a></span>
<span class="normal"><a href="#__codelineno-5-3">3</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-5-1" name="__codelineno-5-1"></a><span class="c1"># .env 文件内容</span>
<a id="__codelineno-5-2" name="__codelineno-5-2"></a><span class="nv">DEEPSEEK_API_KEY</span><span class="o">=</span>your_deepseek_api_key_here
<a id="__codelineno-5-3" name="__codelineno-5-3"></a><span class="nv">OPENAI_API_KEY</span><span class="o">=</span>your_openai_api_key_here
</code></pre></div></td></tr></table></div></p>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-6-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-6-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-6-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-6-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-6-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-6-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-6-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-6-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-6-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-6-10">10</a></span>
<span class="normal"><a href="#__codelineno-6-11">11</a></span>
<span class="normal"><a href="#__codelineno-6-12">12</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-6-1" name="__codelineno-6-1"></a><span class="c1">#.gitignore 文件内容</span>
<a id="__codelineno-6-2" name="__codelineno-6-2"></a><span class="c1"># 环境变量文件(敏感信息)</span>
<a id="__codelineno-6-3" name="__codelineno-6-3"></a>.env
<a id="__codelineno-6-4" name="__codelineno-6-4"></a>.env.local
<a id="__codelineno-6-5" name="__codelineno-6-5"></a>.env.*.local
<a id="__codelineno-6-6" name="__codelineno-6-6"></a>*.key
<a id="__codelineno-6-7" name="__codelineno-6-7"></a>
<a id="__codelineno-6-8" name="__codelineno-6-8"></a><span class="c1"># MkDocs 构建输出目录</span>
<a id="__codelineno-6-9" name="__codelineno-6-9"></a>site/
<a id="__codelineno-6-10" name="__codelineno-6-10"></a>
<a id="__codelineno-6-11" name="__codelineno-6-11"></a><span class="c1"># AI 摘要缓存目录(项目根目录)- 需要被提交</span>
<a id="__codelineno-6-12" name="__codelineno-6-12"></a>!.ai_cache/
</code></pre></div></td></tr></table></div>
<p>到这里检查下目录树状图:
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-7-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-7-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-7-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-7-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-7-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-7-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-7-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-7-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-7-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-7-10">10</a></span>
<span class="normal"><a href="#__codelineno-7-11">11</a></span>
<span class="normal"><a href="#__codelineno-7-12">12</a></span>
<span class="normal"><a href="#__codelineno-7-13">13</a></span>
<span class="normal"><a href="#__codelineno-7-14">14</a></span>
<span class="normal"><a href="#__codelineno-7-15">15</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-7-1" name="__codelineno-7-1"></a>$ tree -a
<a id="__codelineno-7-2" name="__codelineno-7-2"></a>文件名
<a id="__codelineno-7-3" name="__codelineno-7-3"></a>├── .github
<a id="__codelineno-7-4" name="__codelineno-7-4"></a>│ ├── .DS_Store
<a id="__codelineno-7-5" name="__codelineno-7-5"></a>│ └── workflows
<a id="__codelineno-7-6" name="__codelineno-7-6"></a>│ └── ci.yml
<a id="__codelineno-7-7" name="__codelineno-7-7"></a>├── docs
<a id="__codelineno-7-8" name="__codelineno-7-8"></a>│ └── index.md
<a id="__codelineno-7-9" name="__codelineno-7-9"></a>| └── overrides
<a id="__codelineno-7-10" name="__codelineno-7-10"></a>│ └── hooks
<a id="__codelineno-7-11" name="__codelineno-7-11"></a>│ └── ai_summary.py
<a id="__codelineno-7-12" name="__codelineno-7-12"></a>├── .env
<a id="__codelineno-7-13" name="__codelineno-7-13"></a>├──.gitignore
<a id="__codelineno-7-14" name="__codelineno-7-14"></a>├── README.md
<a id="__codelineno-7-15" name="__codelineno-7-15"></a>└── mkdocs.yml
</code></pre></div></td></tr></table></div></p>
<h3 id="2-ai">2. 配置AI服务<a class="headerlink" href="#2-ai" title="Permanent link">&para;</a></h3>
<p><strong>选择AI服务提供商</strong><br />
- 🌟 <strong>DeepSeek</strong>(推荐):性价比高,中文表现优秀<br />
- 🔥 <strong>OpenAI</strong>:功能强大,广泛支持<br />
- ⚡ <strong>Claude</strong>:逻辑清晰,文本理解佳<br />
- 🧠 <strong>Gemini</strong>Google出品多语言支持 </p>
<p><strong>获取API密钥</strong>
- <a href="https://platform.deepseek.com/usage">DeepSeek</a> - 注册获取API密钥<br />
- <a href="https://github.com/chatanywhere/GPT_API_free">ChatAnywhere</a> - 免费OpenAI额度 </p>
<p><strong>获取的密钥存放于上一步创建的<code>.env</code> 文件中!!!</strong></p>
<h3 id="3">3. 设置参数<a class="headerlink" href="#3" title="Permanent link">&para;</a></h3>
<p><code>ai_summary.py</code> 中配置需要AI摘要的目录
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-8-1">1</a></span>
<span class="normal"><a href="#__codelineno-8-2">2</a></span>
<span class="normal"><a href="#__codelineno-8-3">3</a></span>
<span class="normal"><a href="#__codelineno-8-4">4</a></span>
<span class="normal"><a href="#__codelineno-8-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-8-1" name="__codelineno-8-1"></a><span class="c1"># 📂 启用AI摘要的文件夹</span>
<a id="__codelineno-8-2" name="__codelineno-8-2"></a><span class="bp">self</span><span class="o">.</span><span class="n">enabled_folders</span> <span class="o">=</span> <span class="p">[</span>
<a id="__codelineno-8-3" name="__codelineno-8-3"></a> <span class="s1">&#39;blog/&#39;</span><span class="p">,</span> <span class="c1"># 博客文章</span>
<a id="__codelineno-8-4" name="__codelineno-8-4"></a> <span class="c1"># 添加更多文件夹...</span>
<a id="__codelineno-8-5" name="__codelineno-8-5"></a><span class="p">]</span>
</code></pre></div></td></tr></table></div></p>
<h3 id="4">4. 本地运行和测试<a class="headerlink" href="#4" title="Permanent link">&para;</a></h3>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-9-1">1</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-9-1" name="__codelineno-9-1"></a>mkdocs<span class="w"> </span>serve<span class="w"> </span><span class="c1"># 本地预览</span>
</code></pre></div></td></tr></table></div>
<h3 id="5">5. 部署配置<a class="headerlink" href="#5" title="Permanent link">&para;</a></h3>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-10-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-10-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-10-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-10-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-10-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-10-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-10-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-10-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-10-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-10-10">10</a></span>
<span class="normal"><a href="#__codelineno-10-11">11</a></span>
<span class="normal"><a href="#__codelineno-10-12">12</a></span>
<span class="normal"><a href="#__codelineno-10-13">13</a></span>
<span class="normal"><a href="#__codelineno-10-14">14</a></span>
<span class="normal"><a href="#__codelineno-10-15">15</a></span>
<span class="normal"><a href="#__codelineno-10-16">16</a></span>
<span class="normal"><a href="#__codelineno-10-17">17</a></span>
<span class="normal"><a href="#__codelineno-10-18">18</a></span>
<span class="normal"><a href="#__codelineno-10-19">19</a></span>
<span class="normal"><a href="#__codelineno-10-20">20</a></span>
<span class="normal"><a href="#__codelineno-10-21">21</a></span>
<span class="normal"><a href="#__codelineno-10-22">22</a></span>
<span class="normal"><a href="#__codelineno-10-23">23</a></span>
<span class="normal"><a href="#__codelineno-10-24">24</a></span>
<span class="normal"><a href="#__codelineno-10-25">25</a></span>
<span class="normal"><a href="#__codelineno-10-26">26</a></span>
<span class="normal"><a href="#__codelineno-10-27">27</a></span>
<span class="normal"><a href="#__codelineno-10-28">28</a></span>
<span class="normal"><a href="#__codelineno-10-29">29</a></span>
<span class="normal"><a href="#__codelineno-10-30">30</a></span>
<span class="normal"><a href="#__codelineno-10-31">31</a></span>
<span class="normal"><a href="#__codelineno-10-32">32</a></span>
<span class="normal"><a href="#__codelineno-10-33">33</a></span>
<span class="normal"><a href="#__codelineno-10-34">34</a></span>
<span class="normal"><a href="#__codelineno-10-35">35</a></span>
<span class="normal"><a href="#__codelineno-10-36">36</a></span>
<span class="normal"><a href="#__codelineno-10-37">37</a></span>
<span class="normal"><a href="#__codelineno-10-38">38</a></span>
<span class="normal"><a href="#__codelineno-10-39">39</a></span>
<span class="normal"><a href="#__codelineno-10-40">40</a></span>
<span class="normal"><a href="#__codelineno-10-41">41</a></span>
<span class="normal"><a href="#__codelineno-10-42">42</a></span>
<span class="normal"><a href="#__codelineno-10-43">43</a></span>
<span class="normal"><a href="#__codelineno-10-44">44</a></span>
<span class="normal"><a href="#__codelineno-10-45">45</a></span>
<span class="normal"><a href="#__codelineno-10-46">46</a></span>
<span class="normal"><a href="#__codelineno-10-47">47</a></span>
<span class="normal"><a href="#__codelineno-10-48">48</a></span>
<span class="normal"><a href="#__codelineno-10-49">49</a></span>
<span class="normal"><a href="#__codelineno-10-50">50</a></span>
<span class="normal"><a href="#__codelineno-10-51">51</a></span>
<span class="normal"><a href="#__codelineno-10-52">52</a></span>
<span class="normal"><a href="#__codelineno-10-53">53</a></span>
<span class="normal"><a href="#__codelineno-10-54">54</a></span>
<span class="normal"><a href="#__codelineno-10-55">55</a></span>
<span class="normal"><a href="#__codelineno-10-56">56</a></span>
<span class="normal"><a href="#__codelineno-10-57">57</a></span>
<span class="normal"><a href="#__codelineno-10-58">58</a></span>
<span class="normal"><a href="#__codelineno-10-59">59</a></span>
<span class="normal"><a href="#__codelineno-10-60">60</a></span>
<span class="normal"><a href="#__codelineno-10-61">61</a></span>
<span class="normal"><a href="#__codelineno-10-62">62</a></span>
<span class="normal"><a href="#__codelineno-10-63">63</a></span>
<span class="normal"><a href="#__codelineno-10-64">64</a></span>
<span class="normal"><a href="#__codelineno-10-65">65</a></span>
<span class="normal"><a href="#__codelineno-10-66">66</a></span>
<span class="normal"><a href="#__codelineno-10-67">67</a></span>
<span class="normal"><a href="#__codelineno-10-68">68</a></span>
<span class="normal"><a href="#__codelineno-10-69">69</a></span>
<span class="normal"><a href="#__codelineno-10-70">70</a></span>
<span class="normal"><a href="#__codelineno-10-71">71</a></span>
<span class="normal"><a href="#__codelineno-10-72">72</a></span>
<span class="normal"><a href="#__codelineno-10-73">73</a></span>
<span class="normal"><a href="#__codelineno-10-74">74</a></span>
<span class="normal"><a href="#__codelineno-10-75">75</a></span>
<span class="normal"><a href="#__codelineno-10-76">76</a></span>
<span class="normal"><a href="#__codelineno-10-77">77</a></span>
<span class="normal"><a href="#__codelineno-10-78">78</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-10-1" name="__codelineno-10-1"></a><span class="c1">#ci.yml</span>
<a id="__codelineno-10-2" name="__codelineno-10-2"></a><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ci</span><span class="w"> </span>
<a id="__codelineno-10-3" name="__codelineno-10-3"></a><span class="nt">on</span><span class="p">:</span>
<a id="__codelineno-10-4" name="__codelineno-10-4"></a><span class="w"> </span><span class="nt">push</span><span class="p">:</span>
<a id="__codelineno-10-5" name="__codelineno-10-5"></a><span class="w"> </span><span class="nt">branches</span><span class="p">:</span>
<a id="__codelineno-10-6" name="__codelineno-10-6"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">master</span><span class="w"> </span>
<a id="__codelineno-10-7" name="__codelineno-10-7"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">main</span>
<a id="__codelineno-10-8" name="__codelineno-10-8"></a><span class="w"> </span><span class="c1"># 禁止从 fork 仓库访问 secrets</span>
<a id="__codelineno-10-9" name="__codelineno-10-9"></a><span class="w"> </span><span class="nt">pull_request</span><span class="p">:</span>
<a id="__codelineno-10-10" name="__codelineno-10-10"></a><span class="w"> </span><span class="nt">types</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="nv">closed</span><span class="p p-Indicator">]</span>
<a id="__codelineno-10-11" name="__codelineno-10-11"></a><span class="w"> </span><span class="nt">branches</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="nv">main</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="nv">master</span><span class="p p-Indicator">]</span>
<a id="__codelineno-10-12" name="__codelineno-10-12"></a><span class="nt">permissions</span><span class="p">:</span>
<a id="__codelineno-10-13" name="__codelineno-10-13"></a><span class="w"> </span><span class="nt">contents</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">write</span>
<a id="__codelineno-10-14" name="__codelineno-10-14"></a><span class="nt">jobs</span><span class="p">:</span>
<a id="__codelineno-10-15" name="__codelineno-10-15"></a><span class="w"> </span><span class="nt">deploy</span><span class="p">:</span>
<a id="__codelineno-10-16" name="__codelineno-10-16"></a><span class="w"> </span><span class="nt">runs-on</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">ubuntu-latest</span>
<a id="__codelineno-10-17" name="__codelineno-10-17"></a><span class="w"> </span><span class="nt">steps</span><span class="p">:</span>
<a id="__codelineno-10-18" name="__codelineno-10-18"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">actions/checkout@v4</span>
<a id="__codelineno-10-19" name="__codelineno-10-19"></a><span class="w"> </span><span class="nt">with</span><span class="p">:</span>
<a id="__codelineno-10-20" name="__codelineno-10-20"></a><span class="w"> </span><span class="nt">fetch-depth</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">0</span>
<a id="__codelineno-10-21" name="__codelineno-10-21"></a><span class="w"> </span><span class="nt">sparse-checkout</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">|</span>
<a id="__codelineno-10-22" name="__codelineno-10-22"></a><span class="w"> </span><span class="no">docs</span>
<a id="__codelineno-10-23" name="__codelineno-10-23"></a><span class="w"> </span><span class="no">includes</span>
<a id="__codelineno-10-24" name="__codelineno-10-24"></a><span class="w"> </span><span class="no">requirements.txt</span>
<a id="__codelineno-10-25" name="__codelineno-10-25"></a><span class="w"> </span><span class="no">.ai_cache</span>
<a id="__codelineno-10-26" name="__codelineno-10-26"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">actions/setup-python@v4</span>
<a id="__codelineno-10-27" name="__codelineno-10-27"></a><span class="w"> </span><span class="nt">with</span><span class="p">:</span>
<a id="__codelineno-10-28" name="__codelineno-10-28"></a><span class="w"> </span><span class="nt">python-version</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">3.x</span>
<a id="__codelineno-10-29" name="__codelineno-10-29"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Set cache ID</span>
<a id="__codelineno-10-30" name="__codelineno-10-30"></a><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">echo &quot;cache_id=$(date --utc &#39;+%V&#39;)&quot; &gt;&gt; $GITHUB_ENV</span><span class="w"> </span>
<a id="__codelineno-10-31" name="__codelineno-10-31"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">uses</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">actions/cache@v3</span>
<a id="__codelineno-10-32" name="__codelineno-10-32"></a><span class="w"> </span><span class="nt">with</span><span class="p">:</span>
<a id="__codelineno-10-33" name="__codelineno-10-33"></a><span class="w"> </span><span class="nt">key</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mkdocs-material-${{ github.run_number }}</span>
<a id="__codelineno-10-34" name="__codelineno-10-34"></a><span class="w"> </span><span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">.cache</span>
<a id="__codelineno-10-35" name="__codelineno-10-35"></a><span class="w"> </span><span class="nt">restore-keys</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">|</span>
<a id="__codelineno-10-36" name="__codelineno-10-36"></a><span class="w"> </span><span class="no">mkdocs-material-</span>
<a id="__codelineno-10-37" name="__codelineno-10-37"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">pip install mkdocs-git-revision-date-localized-plugin</span>
<a id="__codelineno-10-38" name="__codelineno-10-38"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">pip install mkdocs-git-authors-plugin</span>
<a id="__codelineno-10-39" name="__codelineno-10-39"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">pip install mkdocs-git-committers-plugin-2</span>
<a id="__codelineno-10-40" name="__codelineno-10-40"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">pip install markdown-callouts</span>
<a id="__codelineno-10-41" name="__codelineno-10-41"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">pip install mkdocs-rss-plugin</span>
<a id="__codelineno-10-42" name="__codelineno-10-42"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">pip install requests&gt;=2.25.0</span>
<a id="__codelineno-10-43" name="__codelineno-10-43"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">pip install python-dateutil&gt;=2.8.0</span>
<a id="__codelineno-10-44" name="__codelineno-10-44"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">pip install cachetools&gt;=4.2.0</span>
<a id="__codelineno-10-45" name="__codelineno-10-45"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">pip install python-dotenv&gt;=0.19.0</span>
<a id="__codelineno-10-46" name="__codelineno-10-46"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">pip install pymdown-extensions</span>
<a id="__codelineno-10-47" name="__codelineno-10-47"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">pip install mkdocs-material</span><span class="w"> </span>
<a id="__codelineno-10-48" name="__codelineno-10-48"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">pip install --upgrade --force-reinstall mkdocs-material</span>
<a id="__codelineno-10-49" name="__codelineno-10-49"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Deploy with AI Summary</span>
<a id="__codelineno-10-50" name="__codelineno-10-50"></a><span class="w"> </span><span class="nt">env</span><span class="p">:</span>
<a id="__codelineno-10-51" name="__codelineno-10-51"></a><span class="w"> </span><span class="c1"># AI摘要开关控制</span>
<a id="__codelineno-10-52" name="__codelineno-10-52"></a><span class="w"> </span><span class="nt">AI_SUMMARY_CI_ENABLED</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;true&#39;</span><span class="w"> </span><span class="c1"># CI部署环境启用AI摘要 (true=在CI中为文章生成AI摘要)</span>
<a id="__codelineno-10-53" name="__codelineno-10-53"></a><span class="w"> </span><span class="nt">AI_SUMMARY_CI_ONLY_CACHE</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;true&#39;</span><span class="w"> </span><span class="c1"># CI部署不生成新摘要 (true=使用本地部署过的摘要缓存不再重复调用API)</span>
<a id="__codelineno-10-54" name="__codelineno-10-54"></a><span class="w"> </span><span class="nt">AI_SUMMARY_CI_FALLBACK</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;true&#39;</span><span class="w"> </span><span class="c1"># CI部署启用备用摘要 (true=API失败时生成离线基础摘要)</span>
<a id="__codelineno-10-55" name="__codelineno-10-55"></a><span class="w"> </span><span class="c1"># AI_SUMMARY_LOCAL_ENABLED: &#39;false&#39; # 本地部署环境禁用AI摘要 (true=本地开发时也生成摘要)(不需要管这条)</span>
<a id="__codelineno-10-56" name="__codelineno-10-56"></a><span class="w"> </span><span class="c1"># AI_SUMMARY_CACHE_ENABLED: &#39;true&#39; # 本地启用缓存功能 (true=缓存摘要避免重复生成)(不需要管这条)</span>
<a id="__codelineno-10-57" name="__codelineno-10-57"></a><span class="w"> </span><span class="c1"># API密钥配置</span>
<a id="__codelineno-10-58" name="__codelineno-10-58"></a><span class="w"> </span><span class="nt">DEEPSEEK_API_KEY</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.DEEPSEEK_API_KEY }}</span>
<a id="__codelineno-10-59" name="__codelineno-10-59"></a><span class="w"> </span><span class="nt">OPENAI_API_KEY</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">${{ secrets.OPENAI_API_KEY }}</span>
<a id="__codelineno-10-60" name="__codelineno-10-60"></a><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mkdocs gh-deploy --force</span>
<a id="__codelineno-10-61" name="__codelineno-10-61"></a>
<a id="__codelineno-10-62" name="__codelineno-10-62"></a><span class="w"> </span><span class="c1"># 自动提交新生成的AI缓存文件</span>
<a id="__codelineno-10-63" name="__codelineno-10-63"></a><span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Auto-commit AI cache (if any new files)</span>
<a id="__codelineno-10-64" name="__codelineno-10-64"></a><span class="w"> </span><span class="nt">run</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">|</span>
<a id="__codelineno-10-65" name="__codelineno-10-65"></a><span class="w"> </span><span class="no">if [ -d &quot;.ai_cache&quot; ] &amp;&amp; [ &quot;$(ls -A .ai_cache 2&gt;/dev/null)&quot; ]; then</span>
<a id="__codelineno-10-66" name="__codelineno-10-66"></a><span class="w"> </span><span class="no">git config --local user.email &quot;action@github.com&quot;</span>
<a id="__codelineno-10-67" name="__codelineno-10-67"></a><span class="w"> </span><span class="no">git config --local user.name &quot;GitHub Action&quot;</span>
<a id="__codelineno-10-68" name="__codelineno-10-68"></a><span class="w"> </span><span class="no">git add .ai_cache/</span>
<a id="__codelineno-10-69" name="__codelineno-10-69"></a><span class="w"> </span><span class="no">if ! git diff --cached --quiet; then</span>
<a id="__codelineno-10-70" name="__codelineno-10-70"></a><span class="w"> </span><span class="no">git commit -m &quot;🤖 Auto-update AI summary cache [skip ci]&quot;</span>
<a id="__codelineno-10-71" name="__codelineno-10-71"></a><span class="w"> </span><span class="no">git push</span>
<a id="__codelineno-10-72" name="__codelineno-10-72"></a><span class="w"> </span><span class="no">echo &quot;✅ 自动提交了新的 AI 缓存文件&quot;</span>
<a id="__codelineno-10-73" name="__codelineno-10-73"></a><span class="w"> </span><span class="no">else</span>
<a id="__codelineno-10-74" name="__codelineno-10-74"></a><span class="w"> </span><span class="no">echo &quot; 没有新的缓存文件需要提交&quot;</span>
<a id="__codelineno-10-75" name="__codelineno-10-75"></a><span class="w"> </span><span class="no">fi</span>
<a id="__codelineno-10-76" name="__codelineno-10-76"></a><span class="w"> </span><span class="no">else</span>
<a id="__codelineno-10-77" name="__codelineno-10-77"></a><span class="w"> </span><span class="no">echo &quot; 没有找到缓存目录或缓存为空&quot;</span>
<a id="__codelineno-10-78" name="__codelineno-10-78"></a><span class="w"> </span><span class="no">fi</span>
</code></pre></div></td></tr></table></div>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-11-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-11-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-11-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-11-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-11-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-11-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-11-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-11-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-11-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-11-10">10</a></span>
<span class="normal"><a href="#__codelineno-11-11">11</a></span>
<span class="normal"><a href="#__codelineno-11-12">12</a></span>
<span class="normal"><a href="#__codelineno-11-13">13</a></span>
<span class="normal"><a href="#__codelineno-11-14">14</a></span>
<span class="normal"><a href="#__codelineno-11-15">15</a></span>
<span class="normal"><a href="#__codelineno-11-16">16</a></span>
<span class="normal"><a href="#__codelineno-11-17">17</a></span>
<span class="normal"><a href="#__codelineno-11-18">18</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-11-1" name="__codelineno-11-1"></a><span class="c1"># ai_summary.py 中配置</span>
<a id="__codelineno-11-2" name="__codelineno-11-2"></a><span class="c1"># AI摘要本地环境配置</span>
<a id="__codelineno-11-3" name="__codelineno-11-3"></a><span class="bp">self</span><span class="o">.</span><span class="n">ci_config</span> <span class="o">=</span> <span class="p">{</span>
<a id="__codelineno-11-4" name="__codelineno-11-4"></a> <span class="c1"># CI部署环境开关 (不用管只在ci.yml中设置有效)</span>
<a id="__codelineno-11-5" name="__codelineno-11-5"></a> <span class="s1">&#39;enabled_in_ci&#39;</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">&#39;AI_SUMMARY_CI_ENABLED&#39;</span><span class="p">,</span> <span class="s1">&#39;true&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span><span class="p">,</span>
<a id="__codelineno-11-6" name="__codelineno-11-6"></a>
<a id="__codelineno-11-7" name="__codelineno-11-7"></a> <span class="c1"># 本地部署环境开关 (true=本地开发时启用AI摘要)</span>
<a id="__codelineno-11-8" name="__codelineno-11-8"></a> <span class="s1">&#39;enabled_in_local&#39;</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">&#39;AI_SUMMARY_LOCAL_ENABLED&#39;</span><span class="p">,</span> <span class="s1">&#39;true&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span><span class="p">,</span>
<a id="__codelineno-11-9" name="__codelineno-11-9"></a>
<a id="__codelineno-11-10" name="__codelineno-11-10"></a> <span class="c1"># CI部署仅缓存模式(不用管只在ci.yml中设置有效)</span>
<a id="__codelineno-11-11" name="__codelineno-11-11"></a> <span class="s1">&#39;ci_only_cache&#39;</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">&#39;AI_SUMMARY_CI_ONLY_CACHE&#39;</span><span class="p">,</span> <span class="s1">&#39;false&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span><span class="p">,</span>
<a id="__codelineno-11-12" name="__codelineno-11-12"></a>
<a id="__codelineno-11-13" name="__codelineno-11-13"></a> <span class="c1"># 本地部署缓存功能开关 (true=启用缓存避免重复生成, false=总是生成新摘要)</span>
<a id="__codelineno-11-14" name="__codelineno-11-14"></a> <span class="s1">&#39;cache_enabled&#39;</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">&#39;AI_SUMMARY_CACHE_ENABLED&#39;</span><span class="p">,</span> <span class="s1">&#39;true&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span><span class="p">,</span>
<a id="__codelineno-11-15" name="__codelineno-11-15"></a>
<a id="__codelineno-11-16" name="__codelineno-11-16"></a> <span class="c1"># CI部署备用摘要开关 (不用管只在ci.yml中设置有效)</span>
<a id="__codelineno-11-17" name="__codelineno-11-17"></a> <span class="s1">&#39;ci_fallback_enabled&#39;</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">&#39;AI_SUMMARY_CI_FALLBACK&#39;</span><span class="p">,</span> <span class="s1">&#39;true&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;true&#39;</span><span class="p">,</span>
<a id="__codelineno-11-18" name="__codelineno-11-18"></a><span class="p">}</span>
</code></pre></div></td></tr></table></div>
<p><strong>几种运行模式</strong><br />
1. <strong>完全禁用</strong>: 本地和CI部署都不运行摘要生成<br />
2. <strong>仅CI部署启用</strong>: 本地禁用CI部署生成新摘要<br />
3. <strong>缓存模式</strong>本地已经生成过摘要CI部署使用缓存<strong>推荐。上方配置项中已默认CI部署的缓存模式可自行搭配选择</strong><br />
4. <strong>完全启用</strong>: 本地和CI部署都运行(API消耗会更多)</p>
<h3 id="6-github-secrets">6. GitHub Secrets配置<a class="headerlink" href="#6-github-secrets" title="Permanent link">&para;</a></h3>
<p><strong>步骤1</strong>: 设置Repository Secrets
1. 进入GitHub仓库 → <strong>Settings</strong><strong>Secrets and variables</strong><strong>Actions</strong>
2. 点击 <strong>New repository secret</strong> 添加:
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-12-1">1</a></span>
<span class="normal"><a href="#__codelineno-12-2">2</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-12-1" name="__codelineno-12-1"></a>DEEPSEEK_API_KEY=your_deepseek_api_key_here
<a id="__codelineno-12-2" name="__codelineno-12-2"></a>OPENAI_API_KEY=your_openai_api_key_here
</code></pre></div></td></tr></table></div>
<img alt="image" src="https://s1.imagehub.cc/images/2025/06/04/b5fd63d839bb6443c8560a5f690d2c41.png" /></p>
<hr />
<p>然后部署到GitHub Pages或其他平台即可。</p>
<p><strong>有报错可以去问ChatGPT或者在Issues中提问。</strong></p>
<h2 id="_7">📖 使用指南<a class="headerlink" href="#_7" title="Permanent link">&para;</a></h2>
<h3 id="ai_1">AI摘要控制<a class="headerlink" href="#ai_1" title="Permanent link">&para;</a></h3>
<h4 id="1_2">方法1: 页面级控制(推荐)<a class="headerlink" href="#1_2" title="Permanent link">&para;</a></h4>
<p>在Markdown文件最上面的yaml meta中</p>
<p><strong>启用AI摘要</strong>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-13-1">1</a></span>
<span class="normal"><a href="#__codelineno-13-2">2</a></span>
<span class="normal"><a href="#__codelineno-13-3">3</a></span>
<span class="normal"><a href="#__codelineno-13-4">4</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-13-1" name="__codelineno-13-1"></a><span class="nn">---</span>
<a id="__codelineno-13-2" name="__codelineno-13-2"></a><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">文章标题</span>
<a id="__codelineno-13-3" name="__codelineno-13-3"></a><span class="nt">ai_summary</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span><span class="w"> </span><span class="c1"># 启用AI摘要</span>
<a id="__codelineno-13-4" name="__codelineno-13-4"></a><span class="nn">---</span>
</code></pre></div></td></tr></table></div></p>
<p><strong>禁用AI摘要</strong>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-14-1">1</a></span>
<span class="normal"><a href="#__codelineno-14-2">2</a></span>
<span class="normal"><a href="#__codelineno-14-3">3</a></span>
<span class="normal"><a href="#__codelineno-14-4">4</a></span>
<span class="normal"><a href="#__codelineno-14-5">5</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-14-1" name="__codelineno-14-1"></a><span class="nn">---</span>
<a id="__codelineno-14-2" name="__codelineno-14-2"></a><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">文章标题</span>
<a id="__codelineno-14-3" name="__codelineno-14-3"></a><span class="nt">ai_summary</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span><span class="w"> </span><span class="c1"># 禁用AI摘要</span>
<a id="__codelineno-14-4" name="__codelineno-14-4"></a><span class="nt">description</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">自定义摘要内容</span><span class="w"> </span><span class="c1"># 可选手动摘要</span>
<a id="__codelineno-14-5" name="__codelineno-14-5"></a><span class="nn">---</span>
</code></pre></div></td></tr></table></div></p>
<h4 id="2">方法2: 文件夹级控制<a class="headerlink" href="#2" title="Permanent link">&para;</a></h4>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-15-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-15-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-15-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-15-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-15-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-15-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-15-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-15-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-15-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-15-10">10</a></span>
<span class="normal"><a href="#__codelineno-15-11">11</a></span>
<span class="normal"><a href="#__codelineno-15-12">12</a></span>
<span class="normal"><a href="#__codelineno-15-13">13</a></span>
<span class="normal"><a href="#__codelineno-15-14">14</a></span>
<span class="normal"><a href="#__codelineno-15-15">15</a></span>
<span class="normal"><a href="#__codelineno-15-16">16</a></span>
<span class="normal"><a href="#__codelineno-15-17">17</a></span>
<span class="normal"><a href="#__codelineno-15-18">18</a></span>
<span class="normal"><a href="#__codelineno-15-19">19</a></span>
<span class="normal"><a href="#__codelineno-15-20">20</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-15-1" name="__codelineno-15-1"></a><span class="c1"># 在 ai_summary.py 中配置</span>
<a id="__codelineno-15-2" name="__codelineno-15-2"></a><span class="c1"># 📂 可自定义的文件夹配置</span>
<a id="__codelineno-15-3" name="__codelineno-15-3"></a><span class="bp">self</span><span class="o">.</span><span class="n">enabled_folders</span> <span class="o">=</span> <span class="p">[</span>
<a id="__codelineno-15-4" name="__codelineno-15-4"></a> <span class="s1">&#39;blog/&#39;</span><span class="p">,</span> <span class="c1"># blog文件夹</span>
<a id="__codelineno-15-5" name="__codelineno-15-5"></a> <span class="s1">&#39;index.md&#39;</span><span class="p">,</span>
<a id="__codelineno-15-6" name="__codelineno-15-6"></a> <span class="c1"># &#39;develop/&#39;, # develop文件夹</span>
<a id="__codelineno-15-7" name="__codelineno-15-7"></a> <span class="c1"># &#39;posts/&#39;, # posts文件夹</span>
<a id="__codelineno-15-8" name="__codelineno-15-8"></a> <span class="c1"># &#39;trip/&#39;, # trip文件夹</span>
<a id="__codelineno-15-9" name="__codelineno-15-9"></a> <span class="c1"># &#39;about/&#39;, # about文件夹</span>
<a id="__codelineno-15-10" name="__codelineno-15-10"></a><span class="p">]</span>
<a id="__codelineno-15-11" name="__codelineno-15-11"></a>
<a id="__codelineno-15-12" name="__codelineno-15-12"></a><span class="c1"># 📋 Excluded files and folders</span>
<a id="__codelineno-15-13" name="__codelineno-15-13"></a><span class="bp">self</span><span class="o">.</span><span class="n">exclude_patterns</span> <span class="o">=</span> <span class="p">[</span>
<a id="__codelineno-15-14" name="__codelineno-15-14"></a> <span class="s1">&#39;404.md&#39;</span><span class="p">,</span> <span class="s1">&#39;tag.md&#39;</span><span class="p">,</span> <span class="s1">&#39;tags.md&#39;</span><span class="p">,</span>
<a id="__codelineno-15-15" name="__codelineno-15-15"></a><span class="p">]</span>
<a id="__codelineno-15-16" name="__codelineno-15-16"></a>
<a id="__codelineno-15-17" name="__codelineno-15-17"></a><span class="c1"># 📋 Excluded specific files</span>
<a id="__codelineno-15-18" name="__codelineno-15-18"></a><span class="bp">self</span><span class="o">.</span><span class="n">exclude_files</span> <span class="o">=</span> <span class="p">[</span>
<a id="__codelineno-15-19" name="__codelineno-15-19"></a> <span class="s1">&#39;blog/index.md&#39;</span><span class="p">,</span>
<a id="__codelineno-15-20" name="__codelineno-15-20"></a><span class="p">]</span>
</code></pre></div></td></tr></table></div>
<hr />
<h2 id="_8">🎨 显示效果<a class="headerlink" href="#_8" title="Permanent link">&para;</a></h2>
<h3 id="ai_2">AI摘要显示<a class="headerlink" href="#ai_2" title="Permanent link">&para;</a></h3>
<p><strong>实际效果预览</strong>
<img alt="image" src="https://s1.imagehub.cc/images/2025/06/04/152205c10ef1bfd7658b383a3e5e6e9f.png" /></p>
<h3 id="_9">💰 成本说明<a class="headerlink" href="#_9" title="Permanent link">&para;</a></h3>
<ul>
<li><strong>单次费用</strong>: 约0.03-0.05元(中大型文档)</li>
<li><strong>月度预估</strong>: 普通博客约1-5元</li>
<li><strong>免费额度</strong>: 多数AI服务商提供新用户免费额度</li>
</ul>
<hr />
<h2 id="_10">⚙️ 高级配置<a class="headerlink" href="#_10" title="Permanent link">&para;</a></h2>
<h3 id="ai_3">自定义AI服务<a class="headerlink" href="#ai_3" title="Permanent link">&para;</a></h3>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-16-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-16-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-16-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-16-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-16-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-16-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-16-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-16-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-16-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-16-10">10</a></span>
<span class="normal"><a href="#__codelineno-16-11">11</a></span>
<span class="normal"><a href="#__codelineno-16-12">12</a></span>
<span class="normal"><a href="#__codelineno-16-13">13</a></span>
<span class="normal"><a href="#__codelineno-16-14">14</a></span>
<span class="normal"><a href="#__codelineno-16-15">15</a></span>
<span class="normal"><a href="#__codelineno-16-16">16</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-16-1" name="__codelineno-16-1"></a><span class="c1"># 添加新的AI服务</span>
<a id="__codelineno-16-2" name="__codelineno-16-2"></a><span class="bp">self</span><span class="o">.</span><span class="n">ai_services</span> <span class="o">=</span> <span class="p">{</span>
<a id="__codelineno-16-3" name="__codelineno-16-3"></a> <span class="s1">&#39;your_service&#39;</span><span class="p">:</span> <span class="p">{</span>
<a id="__codelineno-16-4" name="__codelineno-16-4"></a> <span class="s1">&#39;url&#39;</span><span class="p">:</span> <span class="s1">&#39;https://api.yourservice.com/v1/chat/completions&#39;</span><span class="p">,</span>
<a id="__codelineno-16-5" name="__codelineno-16-5"></a> <span class="s1">&#39;model&#39;</span><span class="p">:</span> <span class="s1">&#39;your-model&#39;</span><span class="p">,</span>
<a id="__codelineno-16-6" name="__codelineno-16-6"></a> <span class="s1">&#39;api_key&#39;</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s1">&#39;YOUR_API_KEY&#39;</span><span class="p">),</span>
<a id="__codelineno-16-7" name="__codelineno-16-7"></a> <span class="s1">&#39;max_tokens&#39;</span><span class="p">:</span> <span class="mi">150</span><span class="p">,</span>
<a id="__codelineno-16-8" name="__codelineno-16-8"></a> <span class="s1">&#39;temperature&#39;</span><span class="p">:</span> <span class="mf">0.3</span>
<a id="__codelineno-16-9" name="__codelineno-16-9"></a> <span class="p">}</span>
<a id="__codelineno-16-10" name="__codelineno-16-10"></a><span class="p">}</span>
<a id="__codelineno-16-11" name="__codelineno-16-11"></a>
<a id="__codelineno-16-12" name="__codelineno-16-12"></a><span class="c1"># 默认使用的AI服务</span>
<a id="__codelineno-16-13" name="__codelineno-16-13"></a><span class="bp">self</span><span class="o">.</span><span class="n">default_service</span> <span class="o">=</span> <span class="s1">&#39;your_service&#39;</span>
<a id="__codelineno-16-14" name="__codelineno-16-14"></a>
<a id="__codelineno-16-15" name="__codelineno-16-15"></a><span class="c1"># 服务优先级(按顺序尝试)</span>
<a id="__codelineno-16-16" name="__codelineno-16-16"></a><span class="bp">self</span><span class="o">.</span><span class="n">service_fallback_order</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;openai&#39;</span><span class="p">,</span> <span class="s1">&#39;deepseek&#39;</span><span class="p">,</span> <span class="s1">&#39;claude&#39;</span><span class="p">,</span> <span class="s1">&#39;gemini&#39;</span><span class="p">]</span> <span class="c1"># 按顺序尝试</span>
</code></pre></div></td></tr></table></div>
<h3 id="_11">自定义提示词<a class="headerlink" href="#_11" title="Permanent link">&para;</a></h3>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-17-1"> 1</a></span>
<span class="normal"><a href="#__codelineno-17-2"> 2</a></span>
<span class="normal"><a href="#__codelineno-17-3"> 3</a></span>
<span class="normal"><a href="#__codelineno-17-4"> 4</a></span>
<span class="normal"><a href="#__codelineno-17-5"> 5</a></span>
<span class="normal"><a href="#__codelineno-17-6"> 6</a></span>
<span class="normal"><a href="#__codelineno-17-7"> 7</a></span>
<span class="normal"><a href="#__codelineno-17-8"> 8</a></span>
<span class="normal"><a href="#__codelineno-17-9"> 9</a></span>
<span class="normal"><a href="#__codelineno-17-10">10</a></span>
<span class="normal"><a href="#__codelineno-17-11">11</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-17-1" name="__codelineno-17-1"></a><span class="k">def</span><span class="w"> </span><span class="nf">generate_ai_summary</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">content</span><span class="p">,</span> <span class="n">page_title</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
<a id="__codelineno-17-2" name="__codelineno-17-2"></a> <span class="n">prompt</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;请为以下技术文档生成一个简洁的中文摘要80-120字</span>
<a id="__codelineno-17-3" name="__codelineno-17-3"></a>
<a id="__codelineno-17-4" name="__codelineno-17-4"></a><span class="s2"> 文章标题:</span><span class="si">{</span><span class="n">page_title</span><span class="si">}</span>
<a id="__codelineno-17-5" name="__codelineno-17-5"></a><span class="s2"> 文章内容:</span><span class="si">{</span><span class="n">content</span><span class="p">[:</span><span class="mi">2500</span><span class="p">]</span><span class="si">}</span>
<a id="__codelineno-17-6" name="__codelineno-17-6"></a>
<a id="__codelineno-17-7" name="__codelineno-17-7"></a><span class="s2"> 要求:</span>
<a id="__codelineno-17-8" name="__codelineno-17-8"></a><span class="s2"> 1. 突出核心技术要点</span>
<a id="__codelineno-17-9" name="__codelineno-17-9"></a><span class="s2"> 2. 使用简洁专业的语言</span>
<a id="__codelineno-17-10" name="__codelineno-17-10"></a><span class="s2"> 3. 长度控制在80-120字</span>
<a id="__codelineno-17-11" name="__codelineno-17-11"></a><span class="s2"> &quot;&quot;&quot;</span>
</code></pre></div></td></tr></table></div>
<h3 id="_12">缓存配置<a class="headerlink" href="#_12" title="Permanent link">&para;</a></h3>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-18-1">1</a></span>
<span class="normal"><a href="#__codelineno-18-2">2</a></span>
<span class="normal"><a href="#__codelineno-18-3">3</a></span>
<span class="normal"><a href="#__codelineno-18-4">4</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-18-1" name="__codelineno-18-1"></a><span class="c1"># 修改缓存过期时间</span>
<a id="__codelineno-18-2" name="__codelineno-18-2"></a><span class="n">cache_time</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromisoformat</span><span class="p">(</span><span class="n">cache_data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;timestamp&#39;</span><span class="p">,</span> <span class="s1">&#39;1970-01-01&#39;</span><span class="p">))</span>
<a id="__codelineno-18-3" name="__codelineno-18-3"></a><span class="k">if</span> <span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">-</span> <span class="n">cache_time</span><span class="p">)</span><span class="o">.</span><span class="n">days</span> <span class="o">&lt;</span> <span class="mi">30</span><span class="p">:</span> <span class="c1"># 改为30天</span>
<a id="__codelineno-18-4" name="__codelineno-18-4"></a> <span class="k">return</span> <span class="n">cache_data</span>
</code></pre></div></td></tr></table></div>
<hr />
<h2 id="_13">🌍 多语言支持<a class="headerlink" href="#_13" title="Permanent link">&para;</a></h2>
<h3 id="_14">语言配置<a class="headerlink" href="#_14" title="Permanent link">&para;</a></h3>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-19-1">1</a></span>
<span class="normal"><a href="#__codelineno-19-2">2</a></span>
<span class="normal"><a href="#__codelineno-19-3">3</a></span>
<span class="normal"><a href="#__codelineno-19-4">4</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-19-1" name="__codelineno-19-1"></a><span class="c1"># 在 ai_summary.py 中设置</span>
<a id="__codelineno-19-2" name="__codelineno-19-2"></a><span class="bp">self</span><span class="o">.</span><span class="n">summary_language</span> <span class="o">=</span> <span class="s1">&#39;zh&#39;</span> <span class="c1"># 中文摘要</span>
<a id="__codelineno-19-3" name="__codelineno-19-3"></a><span class="c1"># self.summary_language = &#39;en&#39; # 英文摘要</span>
<a id="__codelineno-19-4" name="__codelineno-19-4"></a><span class="c1"># self.summary_language = &#39;both&#39; # 双语摘要</span>
</code></pre></div></td></tr></table></div>
<h3 id="_15">支持的语言<a class="headerlink" href="#_15" title="Permanent link">&para;</a></h3>
<ul>
<li><strong>完全支持</strong>: 中文、English</li>
<li><strong>部分支持</strong>: 日本語です、한글、Français、Deutsch</li>
</ul>
<hr />
<h2 id="_16">📊 性能优化<a class="headerlink" href="#_16" title="Permanent link">&para;</a></h2>
<h3 id="_17">已实现优化<a class="headerlink" href="#_17" title="Permanent link">&para;</a></h3>
<ul>
<li><strong>LRU缓存</strong>: 函数级别缓存提升性能</li>
<li><strong>正则预编译</strong>: 提高文本处理速度</li>
<li><strong>智能过滤</strong>: 减少不必要的API调用</li>
<li><strong>内容哈希</strong>: 基于内容变化的智能缓存</li>
</ul>
<h3 id="_18">性能建议<a class="headerlink" href="#_18" title="Permanent link">&para;</a></h3>
<ul>
<li>使用 <code>ci_only_cache: true</code> 在CI环境中仅使用缓存</li>
<li>合理设置 <code>enabled_folders</code> 避免处理不必要的文件</li>
<li>定期清理过期缓存文件</li>
</ul>
<hr />
<h2 id="_19">🤝 贡献指南<a class="headerlink" href="#_19" title="Permanent link">&para;</a></h2>
<h3 id="_20">如何贡献<a class="headerlink" href="#_20" title="Permanent link">&para;</a></h3>
<ol>
<li><strong>Fork</strong> 这个仓库</li>
<li>创建特性分支</li>
<li>提交更改</li>
<li>推送分支</li>
<li>创建 <strong>Pull Request</strong></li>
</ol>
<h3 id="_21">开发环境<a class="headerlink" href="#_21" title="Permanent link">&para;</a></h3>
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-20-1">1</a></span>
<span class="normal"><a href="#__codelineno-20-2">2</a></span>
<span class="normal"><a href="#__codelineno-20-3">3</a></span></pre></div></td><td class="code"><div><pre><span></span><code><a id="__codelineno-20-1" name="__codelineno-20-1"></a>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/Wcowin/mkdocs-ai-hooks.git
<a id="__codelineno-20-2" name="__codelineno-20-2"></a><span class="nb">cd</span><span class="w"> </span>mkdocs-ai-hooks
<a id="__codelineno-20-3" name="__codelineno-20-3"></a>pip<span class="w"> </span>install<span class="w"> </span>-r<span class="w"> </span>requirements.txt
</code></pre></div></td></tr></table></div>
<hr />
<h2 id="_22">📝 更新日志<a class="headerlink" href="#_22" title="Permanent link">&para;</a></h2>
<h3 id="v130-2025-06-04-">[v1.3.0] (2025-06-04) - 最新版本<a class="headerlink" href="#v130-2025-06-04-" title="Permanent link">&para;</a></h3>
<h4 id="_23">核心改进<a class="headerlink" href="#_23" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>统一缓存架构</strong></li>
<li><strong>缓存路径统一为项目根目录 .ai_cache</strong></li>
<li><strong>本地和 CI 环境使用相同缓存策略</strong></li>
<li><strong>增强 CI/CD 支持</strong><strong>支持 CI 仅缓存模式,大幅减少部署时间</strong></li>
<li><strong>智能识别 15+ 部署平台GitHub Actions、GitLab CI 等)</strong></li>
<li><strong>可配置备用摘要机制</strong></li>
</ul>
<h3 id="v120-2025-06-03">[v1.2.0] (2025-06-03)<a class="headerlink" href="#v120-2025-06-03" title="Permanent link">&para;</a></h3>
<h4 id="_24">✨ 主要新功能<a class="headerlink" href="#_24" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>多AI服务支持</strong>: 集成DeepSeek、OpenAI、Gemini、Claude</li>
<li><strong>环境自适应</strong>: 自动识别CI/本地环境</li>
<li><strong>智能缓存系统</strong>: 内容哈希缓存7天自动过期</li>
<li><strong>安全配置</strong>: GitHub Secrets集成API密钥安全管理</li>
</ul>
<h4 id="_25">🔧 技术改进<a class="headerlink" href="#_25" title="Permanent link">&para;</a></h4>
<ul>
<li><strong>统一API接口</strong>: 自适配不同AI服务格式</li>
<li><strong>错误处理增强</strong>: 完善的异常处理机制</li>
<li><strong>性能优化</strong>: LRU缓存和正则预编译</li>
</ul>
<h3 id="v100-2025-06-01-">[v1.0.0] (2025-06-01) - 初始版本<a class="headerlink" href="#v100-2025-06-01-" title="Permanent link">&para;</a></h3>
<ul>
<li>🤖 <strong>AI智能摘要功能</strong> </li>
<li>📖 <strong>阅读时间统计功能</strong> </li>
<li>💾 <strong>基础缓存系统</strong> </li>
<li>🎯 <strong>基本配置选项</strong> </li>
</ul>
<hr />
<h2 id="_26">🐛 问题反馈<a class="headerlink" href="#_26" title="Permanent link">&para;</a></h2>
<p>遇到问题?请在 <a href="https://github.com/Wcowin/mkdocs-ai-hooks/issues">Issues</a> 中反馈。</p>
<p><strong>反馈时请包含</strong><br />
- MkDocs版本<br />
- Python版本<br />
- 完整错误信息<br />
- 复现步骤<br />
- 配置文件(去除敏感信息) </p>
<hr />
<h2 id="_27">📄 许可证<a class="headerlink" href="#_27" title="Permanent link">&para;</a></h2>
<p>本项目采用 <a href="https://github.com/Wcowin/mkdocs-ai-hooks/blob/main/LICENSE">MIT License</a> 开源协议。</p>
<hr />
<h2 id="_28">🙏 致谢<a class="headerlink" href="#_28" title="Permanent link">&para;</a></h2>
<p>感谢以下项目和服务: </p>
<ul>
<li><a href="https://www.mkdocs.org/">MkDocs</a> - 优秀的静态站点生成器 </li>
<li><a href="https://squidfunk.github.io/mkdocs-material/">Material for MkDocs</a> - 精美的主题 </li>
<li><a href="https://deepseek.com/">DeepSeek</a> - 高性价比的AI API服务</li>
<li>所有贡献者和使用者</li>
</ul>
<hr />
<h1 id="connect-with-me">Connect with me<a class="headerlink" href="#connect-with-me" title="Permanent link">&para;</a></h1>
<center>
**Telegram**
<p align="center">
<a href="https://t.me/wecowin" target="_blank">
<img src="https://pica.zhimg.com/80/v2-d5876bc0c8c756ecbba8ff410ed29c14_1440w.webp" alt="个人名片" style="border-radius: 10px;" width="50%">
</a>
</p>
**Wechat**
<!-- ![](https://s1.imagehub.cc/images/2024/02/02/bb9ee71b03ee7a3b87caad5cc4bcebff.jpeg) -->
<p align="center">
<img src="https://pic3.zhimg.com/80/v2-5ef3dde831c9d0a41fe35fabb0cb8784_1440w.webp" style="border-radius: 10px;" width="50%">
</p>
</center>
<h2 id="star-history">Star History<a class="headerlink" href="#star-history" title="Permanent link">&para;</a></h2>
<p><a href="https://www.star-history.com/#Wcowin/mkdocs-ai-hooks&amp;Date"><img alt="Star History Chart" src="https://api.star-history.com/svg?repos=Wcowin/mkdocs-ai-hooks&amp;type=Date" /></a></p>
<h2 id="_29">请作者喝杯咖啡<a class="headerlink" href="#_29" title="Permanent link">&para;</a></h2>
<p align="center">
<a href="https://s1.imagehub.cc/images/2025/05/11/36eb33bf18f9041667267605b6b99bd0.jpeg" target="_blank">
<center>
<img src="https://s1.imagehub.cc/images/2025/05/11/36eb33bf18f9041667267605b6b99bd0.jpeg" style="width: 450px; height: auto; border-radius: 25px;" >
</center>
</a>
</center>
<p align="center">
如果这个项目对您有帮助,请给它一个 ⭐ Star
</p>
<p align="center">
<a href="https://github.com/Wcowin/mkdocs-ai-hooks/stargazers">
<img src="https://img.shields.io/github/stars/Wcowin/mkdocs-ai-hooks?style=social" alt="Stars">
</a>
<a href="https://github.com/Wcowin/mkdocs-ai-hooks/network/members">
<img src="https://img.shields.io/github/forks/Wcowin/mkdocs-ai-hooks?style=social" alt="Forks">
</a>
</p>
📝 本项目致力于让MkDocs文档更加智能化和用户友好。如有建议或想法欢迎交流
<style>
.related-posts {
margin-top: 1.5rem;
padding-top: 0.75rem;
border-top: 1px solid rgba(0,0,0,0.1);
max-height: none !important; /* 防止Safari错误计算高度 */
overflow: visible !important; /* 防止内容被截断 */
}
.related-posts h3 {
margin-top: 0;
margin-bottom: 0.5rem;
font-size: 1.2rem;
font-weight: 500;
line-height: 1.3;
}
.related-posts ul {
margin: 0 0 0.5rem 0 !important; /* 强制覆盖可能的冲突样式 */
padding-left: 1.5rem;
list-style-position: outside;
}
.related-posts li {
margin-bottom: 0.25rem;
line-height: 1.4;
}
/* 暗色模式适配 */
[data-md-color-scheme="slate"] .related-posts {
border-top-color: rgba(255,255,255,0.1);
}
/* Safari特定修复 */
@supports (-webkit-hyphens:none) {
.related-posts {
display: block;
position: relative;
height: auto !important;
}
.related-posts ul {
position: static;
}
}
</style>
<div class="related-posts">
<h3>📚 相关文章推荐</h3>
<ul>
<li><a href="/Mkdocs-Wcowin/blog/websitebeauty/mkcomments/">为网站添加评论系统</a></li>
<li><a href="/Mkdocs-Wcowin/blog/Mkdocs/mkdocs1/">利用Mkdocs部署静态网页至GitHubpages</a></li>
<li><a href="/Mkdocs-Wcowin/blog/websitebeauty/recommend/">为MKdocs页面添加相关文章推荐</a></li>
<li><a href="/Mkdocs-Wcowin/blog/websitebeauty/Relativeaddress/">相对地址的一些问题</a></li>
<li><a href="/Mkdocs-Wcowin/blog/websitebeauty/footer/">页脚设置</a></li>
</ul>
</div>
<!--
Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
<!-- Render date of last update -->
<!-- Render date of creation -->
<!-- ---------------------------------------------------------------------- -->
<!-- Render authors -->
<!-- ---------------------------------------------------------------------- -->
<!-- Render committers from GitHub -->
<!-- Render committers from GitLab -->
<!-- Render committers -->
<!-- ---------------------------------------------------------------------- -->
<!-- Determine date of last update -->
<!-- Determine date of creation -->
<!-- Source file information -->
<aside class="md-source-file">
<!-- Date of last update -->
<span class="md-source-file__fact">
<span class="md-icon" title="最后更新">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg>
</span>
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-iso_date" title="2025年6月26日 03:07:39 UTC">2025-06-26</span>
</span>
<!-- Date of creation -->
<!-- Authors (git-authors plugin) -->
<!-- Authors (git-committers plugin) -->
<span class="md-source-file__fact">
<span class="md-icon" title="贡献者">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 2A10 10 0 0 0 2 12c0 4.42 2.87 8.17 6.84 9.5.5.08.66-.23.66-.5v-1.69c-2.77.6-3.36-1.34-3.36-1.34-.46-1.16-1.11-1.47-1.11-1.47-.91-.62.07-.6.07-.6 1 .07 1.53 1.03 1.53 1.03.87 1.52 2.34 1.07 2.91.83.09-.65.35-1.09.63-1.34-2.22-.25-4.55-1.11-4.55-4.92 0-1.11.38-2 1.03-2.71-.1-.25-.45-1.29.1-2.64 0 0 .84-.27 2.75 1.02.79-.22 1.65-.33 2.5-.33s1.71.11 2.5.33c1.91-1.29 2.75-1.02 2.75-1.02.55 1.35.2 2.39.1 2.64.65.71 1.03 1.6 1.03 2.71 0 3.82-2.34 4.66-4.57 4.91.36.31.69.92.69 1.85V21c0 .27.16.59.67.5C19.14 20.16 22 16.42 22 12A10 10 0 0 0 12 2"/></svg>
</span>
<span>GitHub</span>
<nav>
<a
href="https://github.com/Wcowin"
class="md-author"
title="@Wcowin"
>
<img
src="https://avatars.githubusercontent.com/u/99159173?v=4&size=72"
alt="Wcowin"
/>
</a>
<!-- More authors -->
</nav>
</span>
</aside>
<!--
Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
<!-- Determine feedback configuration -->
<!-- Determine whether to show feedback -->
<!-- Was this page helpful? -->
<form class="md-feedback" name="feedback" hidden>
<fieldset>
<legend class="md-feedback__title">
此页面有帮助吗?
</legend>
<div class="md-feedback__inner">
<!-- Feedback ratings -->
<div class="md-feedback__list">
<button
class="md-feedback__icon md-icon"
type="submit"
title="This page was helpful"
data-md-value="1"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M5 9v12H1V9zm4 12a2 2 0 0 1-2-2V9c0-.55.22-1.05.59-1.41L14.17 1l1.06 1.06c.27.27.44.64.44 1.05l-.03.32L14.69 8H21a2 2 0 0 1 2 2v2c0 .26-.05.5-.14.73l-3.02 7.05C19.54 20.5 18.83 21 18 21zm0-2h9.03L21 12v-2h-8.79l1.13-5.32L9 9.03z"/></svg>
</button>
<button
class="md-feedback__icon md-icon"
type="submit"
title="This page could be improved"
data-md-value="0"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 15V3h4v12zM15 3a2 2 0 0 1 2 2v10c0 .55-.22 1.05-.59 1.41L9.83 23l-1.06-1.06c-.27-.27-.44-.64-.44-1.06l.03-.31.95-4.57H3a2 2 0 0 1-2-2v-2c0-.26.05-.5.14-.73l3.02-7.05C4.46 3.5 5.17 3 6 3zm0 2H5.97L3 12v2h8.78l-1.13 5.32L15 14.97z"/></svg>
</button>
</div>
<!-- Feedback rating notes (shown after submission) -->
<div class="md-feedback__note">
<div data-md-value="1" hidden>
<!-- Determine title -->
<!-- Replace {url} and {title} placeholders in note -->
谢谢你的反馈!
</div>
<div data-md-value="0" hidden>
<!-- Determine title -->
<!-- Replace {url} and {title} placeholders in note -->
Thanks for your feedback! Help us improve this page by using our <a href="https://marketingplatform.google.com/about/analytics/" target="_blank" rel="noopener">feedback form</a>.
</div>
</div>
</div>
</fieldset>
</form>
<!--
Copyright (c) 2016-2023 Martin Donath <martin.donath@squidfunk.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to
deal in the Software without restriction, including without limitation the
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
sell copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
IN THE SOFTWARE.
-->
<!-- Comment system -->
</article>
</div>
<script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script>
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
</div>
<button type="button" class="md-top md-icon" data-md-component="top" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg>
回到页面顶部
</button>
</main>
<!-- Footer -->
<footer class="md-footer">
<!-- Link to previous and/or next page - 移到最上面 -->
<nav
class="md-footer__inner md-grid"
aria-label="页脚"
>
<!-- Link to previous page -->
<a
href="../../Mkdocs/mkdocs3/"
class="md-footer__link md-footer__link--prev"
aria-label="上一页: 3.解决Github Pages部署mkdocs自定义域名失效的问题"
>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 320 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M41.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.3 256l137.3-137.4c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z"/></svg>
</div>
<div class="md-footer__title">
<span class="md-footer__direction"> 上一页 </span>
<div class="md-ellipsis">3.解决Github Pages部署mkdocs自定义域名失效的问题</div>
</div>
</a>
<!-- Link to next page -->
<a
href="../recommend/"
class="md-footer__link md-footer__link--next"
aria-label="下一页: 添加相关推荐文章"
>
<div class="md-footer__title">
<span class="md-footer__direction"> 下一页 </span>
<div class="md-ellipsis">添加相关推荐文章</div>
</div>
<div class="md-footer__button md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg>
</div>
</a>
</nav>
<!-- Further information -->
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="footer-wrapper">
<!-- 访问统计区域 -->
<div class="footer-content">
<div class="footer-visit-count">
<div class="footer-item">
<!-- <span class="footer-icon">👀</span> -->
<span>本站访问量:</span>
<span id="finicount_views" class="footer-highlight"></span>
</div>
<div class="footer-item">
<!-- <span class="footer-icon">📝</span> -->
<a
href="https://icp.gov.moe/?keyword=20230640"
target="_blank"
rel="noopener noreferrer"
class="icp-link"
>萌ICP备20230640号</a>
</div>
<div class="footer-item runtime-info">
<!-- <span class="footer-icon">⏱️</span> -->
<span>本站已经运行</span>
<span id="box1" class="footer-highlight"></span>
</div>
</div>
</div>
<!-- 移动端简洁布局 (仿 footercopy.html) -->
<div class="footer-visit-count-mobile">
<span>本站访问量:</span>
<span id="finicount_views_mobile" class="footer-highlight"></span>
|
<a
href="https://icp.gov.moe/?keyword=20230640"
target="_blank"
rel="noopener noreferrer"
class="icp-link"
>萌ICP备20230640号</a>
<!-- |&nbsp; -->
<span class="runtime-info">
<span>本站已经运行</span>
<span id="box1_mobile"></span>
</span>
</div>
<!-- 版权信息和社交媒体水平布局 -->
<div class="footer-bottom-section">
<div class="md-footer-copyright">
<p>Copyright © 2022-2025 Wcowin</p>
<p>Made with <a href="https://squidfunk.github.io/mkdocs-material/" style="color: #518FC1; text-decoration: none;">Material for MkDocs</a></p>
</div>
<div class="footer-social">
<div class="md-social">
<a href="https://s1.imagehub.cc/images/2024/02/02/bb9ee71b03ee7a3b87caad5cc4bcebff.jpeg" target="_blank" rel="noopener" title="Wechat" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154m-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4m-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2M563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4m-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6m107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6"/></svg>
</a>
<a href="https://t.me/wecowin" target="_blank" rel="noopener" title="telegram" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M248 8C111.033 8 0 119.033 0 256s111.033 248 248 248 248-111.033 248-248S384.967 8 248 8m114.952 168.66c-3.732 39.215-19.881 134.378-28.1 178.3-3.476 18.584-10.322 24.816-16.948 25.425-14.4 1.326-25.338-9.517-39.287-18.661-21.827-14.308-34.158-23.215-55.346-37.177-24.485-16.135-8.612-25 5.342-39.5 3.652-3.793 67.107-61.51 68.335-66.746.153-.655.3-3.1-1.154-4.384s-3.59-.849-5.135-.5q-3.283.746-104.608 69.142-14.845 10.194-26.894 9.934c-8.855-.191-25.888-5.006-38.551-9.123-15.531-5.048-27.875-7.717-26.8-16.291q.84-6.7 18.45-13.7 108.446-47.248 144.628-62.3c68.872-28.647 83.183-33.623 92.511-33.789 2.052-.034 6.639.474 9.61 2.885a10.45 10.45 0 0 1 3.53 6.716 43.8 43.8 0 0 1 .417 9.769"/></svg>
</a>
<a href="https://twitter.com/wcowin_" target="_blank" rel="noopener" title="twitter.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8l164.9-188.5L26.8 48h145.6l100.5 132.9zm-24.8 373.8h39.1L151.1 88h-42z"/></svg>
</a>
<a href="https://github.com/Wcowin" target="_blank" rel="noopener" title="github.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
</a>
<a href="mailto:<wangkewen821@gmail.com>" target="_blank" rel="noopener" title="" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M64 112c-8.8 0-16 7.2-16 16v22.1l172.5 141.6c20.7 17 50.4 17 71.1 0L464 150.1V128c0-8.8-7.2-16-16-16zM48 212.2V384c0 8.8 7.2 16 16 16h384c8.8 0 16-7.2 16-16V212.2L322 328.8c-38.4 31.5-93.7 31.5-132 0zM0 128c0-35.3 28.7-64 64-64h384c35.3 0 64 28.7 64 64v256c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64z"/></svg>
</a>
<a href="https://space.bilibili.com/1407028951/lists/4566631?type=series" target="_blank" rel="noopener" title="space.bilibili.com" class="md-social__link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M488.6 104.1c16.7 18.1 24.4 39.7 23.3 65.7v202.4c-.4 26.4-9.2 48.1-26.5 65.1-17.2 17-39.1 25.9-65.5 26.7H92.02c-26.45-.8-48.21-9.8-65.28-27.2C9.682 419.4.767 396.5 0 368.2V169.8c.767-26 9.682-47.6 26.74-65.7C43.81 87.75 65.57 78.77 92.02 78h29.38L96.05 52.19c-5.75-5.73-8.63-13-8.63-21.79 0-8.8 2.88-16.06 8.63-21.797C101.8 2.868 109.1 0 117.9 0q13.2 0 21.9 8.603L213.1 78h88l74.5-69.397C381.7 2.868 389.2 0 398 0q13.2 0 21.9 8.603c5.7 5.737 8.6 12.997 8.6 21.797 0 8.79-2.9 16.06-8.6 21.79L394.6 78h29.3c26.4.77 48 9.75 64.7 26.1m-38.8 69.7c-.4-9.6-3.7-17.4-10.7-23.5-5.2-6.1-14-9.4-22.7-9.8H96.05c-9.59.4-17.45 3.7-23.58 9.8-6.14 6.1-9.4 13.9-9.78 23.5v194.4c0 9.2 3.26 17 9.78 23.5s14.38 9.8 23.58 9.8H416.4c9.2 0 17-3.3 23.3-9.8s9.7-14.3 10.1-23.5zm-264.3 42.7c6.3 6.3 9.7 14.1 10.1 23.2V273c-.4 9.2-3.7 16.9-9.8 23.2-6.2 6.3-14 9.5-23.6 9.5s-17.5-3.2-23.6-9.5-9.4-14-9.8-23.2v-33.3c.4-9.1 3.8-16.9 10.1-23.2s13.2-9.6 23.3-10c9.2.4 17 3.7 23.3 10m191.5 0c6.3 6.3 9.7 14.1 10.1 23.2V273c-.4 9.2-3.7 16.9-9.8 23.2s-14 9.5-23.6 9.5-17.4-3.2-23.6-9.5c-7-6.3-9.4-14-9.7-23.2v-33.3c.3-9.1 3.7-16.9 10-23.2s14.1-9.6 23.3-10c9.2.4 17 3.7 23.3 10"/></svg>
</a>
</div>
</div>
</div>
</div>
<script>
(function() {
// 避免变量冲突,将所有代码包装在立即执行函数中
function timingTime() {
const start = "2023-10-14T00:00:00";
const startTime = new Date(start).getTime();
const now = Date.now();
let diff = Math.floor((now - startTime) / 1000);
const days = Math.floor(diff / 86400);
diff %= 86400;
const hours = Math.floor(diff / 3600);
diff %= 3600;
const minutes = Math.floor(diff / 60);
const seconds = diff % 60;
return `${days}${hours}${minutes}${seconds}`;
}
// 简化的计时器更新函数
function updateTime() {
const el = document.getElementById("box1");
const elMobile = document.getElementById("box1_mobile");
const time = timingTime();
if (el) el.textContent = time;
if (elMobile) elMobile.textContent = time;
}
// 加载访问量计数器
async function loadVisitCounter() {
try {
const script = document.createElement('script');
script.src = '//finicounter.eu.org/finicounter.js';
script.async = true;
script.onerror = function() {
console.log('访问量计数器加载失败,使用备用显示');
const desktop = document.getElementById("finicount_views");
const mobile = document.getElementById("finicount_views_mobile");
if (desktop) desktop.textContent = '统计中...';
if (mobile) mobile.textContent = '统计中...';
};
document.head.appendChild(script);
} catch (e) {
console.log('访问量计数器初始化失败:', e);
}
}
// 同步访问量显示
function syncVisitCount() {
const desktop = document.getElementById("finicount_views");
const mobile = document.getElementById("finicount_views_mobile");
if (desktop && mobile && desktop.textContent && desktop.textContent !== '加载中...') {
mobile.textContent = desktop.textContent;
}
}
// 监听访问量更新
function setupVisitCountObserver() {
try {
const observer = new MutationObserver(syncVisitCount);
const visitCountTarget = document.getElementById("finicount_views");
if (visitCountTarget) {
observer.observe(visitCountTarget, { childList: true, subtree: true });
}
} catch (e) {
console.log('访问量监听器设置失败:', e);
}
}
// 初始化所有功能
function init() {
// 启动计时器
updateTime();
setInterval(updateTime, 1000);
// 加载访问量计数器
loadVisitCounter();
// 设置访问量同步
setupVisitCountObserver();
// 调试信息
console.log('页脚功能已启动');
console.log('当前时间:', timingTime());
}
// 确保DOM加载完成后再初始化
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();
</script>
<style>
/* 页脚背景配色方案 - 可根据喜好选择 */
/* 方案1: 现代深蓝灰色调 (当前使用) */
.md-footer {
background: linear-gradient(135deg, #1e293b 0%, #334155 100%);
}
.md-footer-meta {
background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
}
/* 方案2: 优雅紫色调 (取消注释使用)
.md-footer {
background: linear-gradient(135deg, #2d1b69 0%, #4c1d95 100%);
}
.md-footer-meta {
background: linear-gradient(135deg, #1e1b4b 0%, #2d1b69 100%);
}
*/
/* 方案3: 温暖深绿色调 (取消注释使用)
.md-footer {
background: linear-gradient(135deg, #14532d 0%, #166534 100%);
}
.md-footer-meta {
background: linear-gradient(135deg, #052e16 0%, #14532d 100%);
}
*/
/* 方案4: 经典深灰色调 (取消注释使用)
.md-footer {
background: linear-gradient(135deg, #374151 0%, #4b5563 100%);
}
.md-footer-meta {
background: linear-gradient(135deg, #1f2937 0%, #374151 100%);
}
*/
/* 整体页脚容器 */
.footer-wrapper {
width: 100%;
padding: 0.2rem 0;
text-align: center;
}
/* 版权信息和社交媒体水平布局 */
.footer-bottom-section {
max-width: 900px;
margin: 0.4rem auto 0;
padding: 0.4rem 1rem;
border-top: 1px solid rgba(255, 255, 255, 0.15);
display: flex;
justify-content: space-between;
align-items: center;
}
/* 版权信息 */
.md-footer-copyright {
text-align: left;
font-size: 0.75rem;
opacity: 0.8;
line-height: 1.2;
}
/* 社交媒体图标 */
.footer-social {
display: -webkit-flex;
display: flex;
gap: 0.3rem;
-webkit-align-items: center;
align-items: center;
}
/* Safari兼容性修复 */
.footer-social .md-social__link svg {
-webkit-transform: translateZ(0);
transform: translateZ(0);
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
opacity: 1 !important;
visibility: visible !important;
pointer-events: auto;
}
/* 强制Safari显示SVG图标 */
.footer-social .md-social__link {
opacity: 1 !important;
visibility: visible !important;
}
/* 内容区域样式 */
.footer-content {
max-width: 900px;
margin: 0 auto;
padding: 0.4rem 0 0;
}
.footer-visit-count {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.3rem;
font-size: 0.75rem;
color: var(--md-footer-fg-color--light);
}
.footer-item {
display: flex;
align-items: center;
justify-content: center;
padding: 0.4rem 0.8rem;
border-radius: 16px;
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.15);
backdrop-filter: blur(10px);
min-width: 160px;
font-size: 0.8rem;
transition: all 0.2s ease;
}
.footer-item:hover {
background: rgba(255, 255, 255, 0.15);
border-color: rgba(81, 143, 193, 0.4);
transform: translateY(-1px);
}
.footer-icon {
margin-right: 0.5rem;
font-size: 1rem;
}
.footer-highlight {
color: #939ba2;
font-weight: 600;
margin-left: 0.3rem;
}
.icp-link {
color: inherit;
text-decoration: none;
}
.icp-link:hover {
color: #518FC1;
}
/* 社交媒体图标样式 - 仅桌面端 */
@media (min-width: 76.1875em) {
.footer-social .md-social__link {
padding: 0.3rem;
border-radius: 50%;
background: rgba(255, 255, 255, 0.1);
border: 1px solid rgba(255, 255, 255, 0.1);
width: 2rem;
height: 2rem;
display: -webkit-inline-flex;
display: inline-flex;
-webkit-align-items: center;
align-items: center;
-webkit-justify-content: center;
justify-content: center;
-webkit-transition: all 0.2s ease;
transition: all 0.2s ease;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.footer-social .md-social__link svg {
width: 1.2rem;
height: 1.2rem;
fill: currentColor;
-webkit-flex-shrink: 0;
flex-shrink: 0;
}
.footer-social .md-social__link:hover {
background: rgba(81, 143, 193, 0.2);
border-color: rgba(81, 143, 193, 0.4);
}
}
/* 移动端社交媒体图标样式 - 恢复默认样式 */
@media (max-width: 76.1875em) {
.footer-social .md-social__link {
padding: 0.4rem;
background: transparent;
border: none;
width: auto;
height: auto;
display: inline-block;
border-radius: 0;
-webkit-transition: color 0.2s ease;
transition: color 0.2s ease;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.footer-social .md-social__link:hover {
background: transparent;
border: none;
color: var(--md-accent-fg-color);
}
.footer-social .md-social__link svg {
width: 1.6rem;
height: 1.6rem;
fill: currentColor;
-webkit-flex-shrink: 0;
flex-shrink: 0;
display: block;
}
}
/* 导航链接样式 */
.md-footer__link {
transition: opacity 0.2s ease;
}
.md-footer__link:hover {
opacity: 1;
}
/* 移动端响应式 - 使用 footercopy.html 样式 */
@media (max-width: 76.1875em) {
/* 隐藏桌面端的卡片式布局 */
.footer-visit-count {
display: none;
}
.footer-bottom-section {
flex-direction: column;
gap: 0.6rem;
text-align: center;
}
.md-footer-copyright {
text-align: center;
font-size: 0.75rem;
}
.footer-social .md-social__link {
width: 1.8rem;
height: 1.8rem;
}
/* 显示移动端的简洁布局 */
.footer-visit-count-mobile {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
gap: 0.4em 0.8em;
padding: 0.2em 0;
font-size: 0.75rem;
color: var(--md-footer-fg-color--light);
text-align: center;
}
.footer-visit-count-mobile > * {
white-space: nowrap;
}
.footer-visit-count-mobile .icp-link {
color: var(--md-footer-fg-color--light);
text-decoration: none;
}
.footer-visit-count-mobile .icp-link:hover {
color: #596875;
text-decoration: underline;
}
/* .runtime-info {
display: none; 移动端隐藏运行时间
} */
}
/* 桌面端隐藏移动端布局 */
@media (min-width: 76.1875em) {
.footer-visit-count-mobile {
display: none;
}
}
@media (min-width: 768px) {
.footer-visit-count {
flex-direction: row;
justify-content: center;
gap: 2rem;
}
}
/* 深色模式适配 */
[data-md-color-scheme="slate"] .md-footer {
background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
}
[data-md-color-scheme="slate"] .md-footer-meta {
background: linear-gradient(135deg, #020617 0%, #0f172a 100%);
}
[data-md-color-scheme="slate"] .footer-item {
background: rgba(255, 255, 255, 0.08);
border-color: rgba(255, 255, 255, 0.12);
}
[data-md-color-scheme="slate"] .footer-item:hover {
background: rgba(255, 255, 255, 0.12);
border-color: rgba(81, 143, 193, 0.3);
}
[data-md-color-scheme="slate"] .footer-social .md-social__link {
background: rgba(255, 255, 255, 0.08);
border-color: rgba(255, 255, 255, 0.12);
}
</style>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "../../..", "features": ["announce.dismiss", "navigation.tracking", "navigation.tabs", "navigation.sections", "navigation.top", "navigation.footer", "search.suggest", "search.highlight", "search.share", "navigation.expand", "navigation.indexes", "content.tabs.link", "content.tooltips", "content.code.copy", "content.action.edit", "content.action.view", "content.code.annotate"], "search": "../../../assets/javascripts/workers/search.d50fe291.min.js", "tags": null, "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}, "version": null}</script>
<script src="../../../assets/javascripts/bundle.56ea9cef.min.js"></script>
<script src="https://cdn.jsdelivr.net/gh/Wcowin/Wcowin.github.io@main/docs/javascripts/extra.js"></script>
<script src="../../../javascripts/mathjax.js"></script>
<script src="https://unpkg.com/mathjax@3/es5/tex-mml-chtml.js"></script>
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<script src="https://cdn.jsdelivr.net/gh/Wcowin/Wcowin.github.io@main/docs/javascripts/view.js"></script>
</body>
</html>