<!doctype html><html lang=en dir=ltr class=scroll-smooth data-default-appearance=light data-auto-appearance=true><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=theme-color content="#FFFFFF"><title>小记 | 为 Hugo 添加文章摘要 &#183; FloatSheep's Blog</title>
<meta name=title content="小记 | 为 Hugo 添加文章摘要 &#183; FloatSheep's Blog"><script type=text/javascript src=/js/appearance.min.8a082f81b27f3cb2ee528df0b0bdc39787034cf2cc34d4669fbc9977c929023c.js integrity="sha256-iggvgbJ/PLLuUo3wsL3Dl4cDTPLMNNRmn7yZd8kpAjw="></script><link type=text/css rel=stylesheet href=/css/main.bundle.min.5175b55751112ca802889fe1f86d954335179c7770d85c064aa8b00042fe2868.css integrity="sha256-UXW1V1ERLKgCiJ/h+G2VQzUXnHdw2FwGSqiwAEL+KGg="><script defer type=text/javascript id=script-bundle src=/js/main.bundle.min.e2f23ac92b690a4e99ab2dffef9aa96a95f7ec39636fb9fa7eeb70d55ba347ae.js integrity="sha256-4vI6yStpCk6Zqy3/75qpapX37Dljb7n6futw1VujR64=" data-copy=Copy data-copied=Copied></script><meta name=description content="
      
        为 Hugo 添加文章摘要
      
    "><link rel=canonical href=https://blog.hesiy.cn/posts/summary-posts/><link rel=apple-touch-icon sizes=180x180 href=/apple-touch-icon.png><link rel=icon type=image/png sizes=32x32 href=/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=/favicon-16x16.png><link rel=manifest href=/site.webmanifest><meta property="og:url" content="https://blog.hesiy.cn/posts/summary-posts/"><meta property="og:site_name" content="FloatSheep's Blog"><meta property="og:title" content="小记 | 为 Hugo 添加文章摘要"><meta property="og:description" content="为 Hugo 添加文章摘要"><meta property="og:locale" content="en"><meta property="og:type" content="article"><meta property="article:section" content="posts"><meta property="article:published_time" content="2024-02-03T12:29:19+08:00"><meta property="article:modified_time" content="2024-02-03T12:29:19+08:00"><meta property="article:tag" content="Hugo"><meta property="og:image" content="https://blog.hesiy.cn/posts/summary-posts/cover.svg"><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="https://blog.hesiy.cn/posts/summary-posts/cover.svg"><meta name=twitter:title content="小记 | 为 Hugo 添加文章摘要"><meta name=twitter:description content="为 Hugo 添加文章摘要"><script type=application/ld+json>{"@context":"https://schema.org","@type":"Article","articleSection":"所有文章","name":"小记 | 为 Hugo 添加文章摘要","headline":"小记 | 为 Hugo 添加文章摘要","abstract":"为 Hugo 添加文章摘要","inLanguage":"en","url":"https:\/\/blog.hesiy.cn\/posts\/summary-posts\/","author":{"@type":"Person","name":"FloatSheep"},"copyrightYear":"2024","dateCreated":"2024-02-03T12:29:19\u002b08:00","datePublished":"2024-02-03T12:29:19\u002b08:00","dateModified":"2024-02-03T12:29:19\u002b08:00","keywords":["hugo"],"mainEntityOfPage":"true","wordCount":"1172"}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":"https://blog.hesiy.cn/","name":"","position":1},{"@type":"ListItem","item":"https://blog.hesiy.cn/posts/","name":"所有文章","position":2},{"@type":"ListItem","item":"https://blog.hesiy.cn/categories/hugo/","name":"Hugo","position":3},{"@type":"ListItem","name":"小记 为 Hugo 添加文章摘要","position":4}]}</script><meta name=author content="FloatSheep"><link href=mailto:admin@hesiy.cn rel=me><link href=https://hesiy.cn/ rel=me><link href=https://github.com/FloatSheep rel=me><link href="https://music.163.com/#/user/home?id=1431228228" rel=me><link href=https://last.fm/user/FloatSheep rel=me><link href=https://space.bilibili.com/384597455 rel=me><script async src=https://umami.yurl.eu.org/script.js data-website-id=c4ab2812-12c5-44d6-9de3-cd6975a7967b></script><script>document.addEventListener("DOMContentLoaded",e=>{if("serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js?t="+(new Date).getTime(),{type:"module"}).then(function(e){console.log("Service Worker 注册成功:",e)}).catch(function(e){console.log("Service Worker 注册失败:",e)}),navigator.serviceWorker.addEventListener("message",e=>{e.data==="sw-updated"&&window.location.reload()}),window.fm||(window.fm={}),window.fm.refresh=()=>{navigator.serviceWorker.getRegistrations().then(e=>{e.forEach(e=>e.unregister())})},document.querySelector("#pagemap")){document.querySelector("#pagemap").addEventListener("mouseover",()=>{document.querySelector("#pagemap").classList.remove("fadeout"),document.querySelector("#pagemap").classList.add("fadein")}),document.querySelector("#pagemap").addEventListener("mouseout",()=>{document.querySelector("#pagemap").classList.remove("fadein"),document.querySelector("#pagemap").classList.add("fadeout")});let e=document.querySelector("#pagemap"),t=null;document.addEventListener("scroll",()=>{e.classList.remove("fadeout"),e.classList.add("fadein"),t&&clearTimeout(t),t=setTimeout(()=>{e.classList.remove("fadein"),e.classList.add("fadeout")},1e3)})}})</script><script src=/js/modules/mokerConsole.js></script><script src=/js/modules/messageBar.js></script><script src=/js/moduleEnable.js></script><script src=/js/snackbar/snackbar.min.js></script><script src=/js/disableKeyDown.js></script><link rel=stylesheet href=/js/snackbar/snackbar.min.css><script src=/js/switch-day-night.js></script><script src=/js/pagemap.js></script><link rel=preload href=https://mirrors.sustech.edu.cn/cdnjs/ajax/libs/lxgw-wenkai-screen-webfont/1.7.0/lxgwwenkaiscreen.css as=style onload='this.rel="stylesheet"'></head><body class="m-auto flex h-screen max-w-7xl flex-col bg-neutral px-6 text-lg leading-7 text-neutral-900 dark:bg-neutral-800 dark:text-neutral sm:px-14 md:px-24 lg:px-32"><div id=the-top class="absolute flex self-center"><a class="-translate-y-8 rounded-b-lg bg-primary-200 px-3 py-1 text-sm focus:translate-y-0 dark:bg-neutral-600" href=#main-content><span class="pe-2 font-bold text-primary-600 dark:text-primary-400">&darr;</span>Skip to main content</a></div><header id=order-header class="py-6 font-semibold text-neutral-900 dark:text-neutral print:hidden sm:py-10"><nav class="flex items-start justify-between sm:items-center"><div class="flex flex-row items-center"><a class="decoration-primary-500 hover:underline hover:decoration-2 hover:underline-offset-2" rel=me href=/>FloatSheep&rsquo;s Blog</a></div><ul class="flex list-none flex-col ltr:text-right rtl:text-left sm:flex-row"><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0.5"><a href=/posts/ title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">文章</span></a></li><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0.5"><a href=/categories/ title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">分类</span></a></li><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0.5"><a href=/circle/ title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">友圈</span></a></li><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0.5"><a href=/friends/ title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">友链</span></a></li><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0.5"><a href=/speak/ title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">说说</span></a></li><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0.5"><a href=/about/ title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">关于</span></a></li><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0.5"><a href=https://www.travellings.cn/go.html title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">开往</span></a></li><li class="group mb-1 sm:mb-0 sm:me-7 sm:last:me-0.5"><button id=search-button-1 title="Search (/)">
<span class="group-dark:hover:text-primary-400 transition-colors group-hover:text-primary-600"><span class="icon relative inline-block px-1 align-text-bottom"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" viewBox="0 0 512 512"><path fill="currentcolor" d="M505 442.7 405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9.0 208 0S0 93.1.0 208s93.1 208 208 208c48.3.0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9.0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7.0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7.0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg>
</span></span><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2"></span></button></li></ul></nav></header><canvas id=pagemap></canvas><div class="relative flex grow flex-col"><main id=main-content class=grow><article><header class=max-w-prose><ol class="text-sm text-neutral-500 dark:text-neutral-400 print:hidden"><li class="hidden inline"><a class="dark:underline-neutral-600 decoration-neutral-300 hover:underline" href=/></a><span class="px-1 text-primary-500">/</span></li><li class=inline><a class="dark:underline-neutral-600 decoration-neutral-300 hover:underline" href=/posts/>所有文章</a><span class="px-1 text-primary-500">/</span></li><li class="hidden inline"><a class="dark:underline-neutral-600 decoration-neutral-300 hover:underline" href=/posts/summary-posts/>小记 | 为 Hugo 添加文章摘要</a><span class="px-1 text-primary-500">/</span></li></ol><h1 id=title class="mb-8 mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral">小记 | 为 Hugo 添加文章摘要</h1><div class="mb-10 text-base text-neutral-500 dark:text-neutral-400 print:hidden"><div class="flex flex-row flex-wrap items-center"><time datetime="2024-02-03 12:29:19 +0800 +0800">2024 年 02 月 03 日</time><span class="px-2 text-primary-500">&#183;</span><span>1172 words</span><span class="px-2 text-primary-500">&#183;</span><span title="Reading time">3 mins</span></div><div class="my-1 flex flex-wrap text-xs leading-relaxed text-neutral-500 dark:text-neutral-400"><a href=/categories/hugo/ class="mx-1 my-1 rounded-md border border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-primary-400">Hugo</a>
<a href=/tags/hugo/ class="mx-1 my-1 rounded-md border border-neutral-200 px-1 py-[1px] hover:border-primary-300 hover:text-primary-700 dark:border-neutral-600 dark:hover:border-primary-600 dark:hover:text-primary-400">Hugo</a></div></div><div class=prose><img class="mb-6 rounded-md" src=/posts/summary-posts/cover.svg alt loading=lazy></div></header><div id=summary-wrapper><div id=title><span id=summary-post class=name><span class=icon-robot><span class="icon relative inline-block px-1 align-text-bottom"><!doctype html><svg viewBox="0 0 1024 1024" p-id="6281" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M924 422.5h-56a4 4 0 00-4 4v248a4 4 0 004 4h56a4 4 0 004-4v-248a4 4 0 00-4-4zm-768 0h-56a4 4 0 00-4 4v248a4 4 0 004 4h56a4 4 0 004-4v-248a4 4 0 00-4-4zM792 288H544v-97.3a60 60 0 10-64 0V288H232a40 40 0 00-40 40v528a40 40 0 0040 40h560a40 40 0 0040-40V328a40 40 0 00-40-40zM378.7 566.7c-23.6.0-42.7-23.9-42.7-53.3s19.1-53.4 42.7-53.4 42.6 23.9 42.6 53.4-19.1 53.3-42.6 53.3zM605 748a4 4 0 01-4 4H424a4 4 0 01-4-4v-56a4 4 0 014-4h177a4 4 0 014 4zm40.3-181.3c-23.5.0-42.6-23.9-42.6-53.3s19.1-53.4 42.6-53.4 42.7 23.9 42.7 53.4-19.1 53.3-42.7 53.3z" fill="currentcolor"/></svg></span> </span><span class=text>文章摘要 </span><span class=icon-up><span class="icon relative inline-block px-1 align-text-bottom"><!doctype html><svg viewBox="0 0 1024 1024" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M874.965333 621.696l-60.330666 60.352-301.696-301.717333L211.2 682.048l-60.330667-60.352 331.861334-331.861333L512.938667 320 482.752 289.834667 512.938667 259.648l362.026666 362.048z" p-id="7270" fill="currentcolor"/></svg></span></span>
</span><span id=ai-logo class=logo>QwenGPT</span></div><div id=post-ai-result class=post-ai-result><span id=post-ai-result-text lass=text><span id=result-loading>加载中...</span></span></div><div id=meta><span class=tip>此内容根据文章生成，并经过人工审核，仅用于文章内容的解释与总结</span>
<a class=report href=mailto:admin@hesiy.cn>投诉</a></div></div><script>addEventListener("DOMContentLoaded",()=>{const c="https://fake-gpt.hesiy.cn",g=document.getElementById("posts-content"),e=document.getElementById("post-ai-result-text"),u=document.getElementById("result-loading"),o=document.getElementById("ai-logo"),p=document.getElementById("summary-post"),b=new URL(location.href),h=b.pathname.split("/").filter(e=>e!=="").pop(),f=g.textContent,d=c.endsWith("/")?`${c}api/summary`:`${c}/api/summary`,m={postId:h,content:f},l=()=>{const t=document.createElement("span");t.className="ai-cursor",e.appendChild(t)};l();let n,t=!1;const i=(e,s)=>{if(u&&u.remove(),o.classList.add("typing"),e<s.length){const t=document.querySelector(".ai-cursor");t.insertAdjacentText("beforebegin",s.charAt(e)),e++,n=setTimeout(()=>i(e,s),80)}else o.classList.remove("typing"),document.querySelector(".ai-cursor")?.remove(),t=!1},r=s=>{const r=e,o=s;let a=0;t=!0,clearTimeout(n),i(a,o)};let s=void 0;const v=()=>{fetch(`${d}?postId=${h}`,{method:"GET"}).then(e=>e.json()).then(t=>{t.isSave?(s=t.data,r(t.data)):fetch(d,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(m)}).then(e=>e.json()).then(e=>{e.code===1?(s=e.data,r(e.data)):console.error("Error:",e)}).catch(t=>{e.textContent=`${t}`,console.error("Fetch error:",t)})}).catch(t=>{e.textContent=`${t}`,console.error("Fetch error:",t)})};v();let a=!1;o.addEventListener("click",()=>{if(!t)if(a)s!==void 0&&(t=!0,a=!1,clearTimeout(n),e.textContent=``,l(),r(s));else{let s=0;const o="我是浮杨开发的摘要生成助理 QwenGPT，如你所见，这是一个使用 Qwen 14B 作为生成模型的工具。我在这里只负责显示，并仿照 GPT 的形式输出，如果你像我一样讨厌 Cloudflare Worker 的速度，又囊中羞涩，你也可以像我这样做，当然，你也可以使用 Tianli 开发的 TianliGPT 来更简单的实现 AI 摘要。当然，我的样式与代码很大一部分来自于無名大佬，感谢他的帮助！";t=!0,a=!0,clearTimeout(n),e.textContent=``,l(),setTimeout(()=>{i(s,o)},1e3)}}),p.addEventListener("click",()=>{location.href=`/posts/qwen-summary`})}),document.currentScript.remove()</script><section class="flex flex-col max-w-full mt-0 prose dark:prose-invert lg:flex-row"><div class="order-first px-0 lg:order-last lg:max-w-xs lg:ps-8"><div class="toc pe-5 lg:sticky lg:top-10 print:hidden"><details open class="-ms-5 mt-0 overflow-hidden rounded-lg ps-5"><summary class="block cursor-pointer bg-neutral-100 py-1 ps-5 text-lg font-semibold text-neutral-800 dark:bg-neutral-700 dark:text-neutral-100 lg:hidden">Table of Contents</summary><div class="border-s border-dotted border-neutral-300 py-2 ps-5 dark:border-neutral-600"><nav id=TableOfContents><ul><li><a href=#写这篇文章的原因>写这篇文章的原因？</a></li><li><a href=#准备>准备</a></li><li><a href=#获取-gemini-pro-的-api-密钥>获取 Gemini Pro 的 API 密钥</a></li><li><a href=#部署-api-proxy>部署 API Proxy</a></li><li><a href=#部署-api-转换>部署 API 转换</a></li><li><a href=#前端代码>前端代码</a></li></ul></nav></div></details></div></div><div id=posts-content class="min-w-0 min-h-0 max-w-prose grow"><blockquote><p>这篇文章适用于所有 Hugo 主题，对于不同的主题，你需要按需更改前端代码</p><p>对于 Hexo，你可以用 Tianli 的文章摘要</p></blockquote><h2 id=写这篇文章的原因 class="relative group">写这篇文章的原因？ <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#%e5%86%99%e8%bf%99%e7%af%87%e6%96%87%e7%ab%a0%e7%9a%84%e5%8e%9f%e5%9b%a0 aria-label=Anchor>#</a></span></h2><p>看到木木的博客上更新了篇利用 Gemini Pro 添加摘要的文章，所以就折腾了一下</p><h2 id=准备 class="relative group">准备 <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#%e5%87%86%e5%a4%87 aria-label=Anchor>#</a></span></h2><p>需要这些东西</p><ol><li>API 密钥（Gemini）</li><li>一个合适的网络，因为会用到 GitHub、Google、Vercel、Cloudflare</li><li>脑子</li></ol><h2 id=获取-gemini-pro-的-api-密钥 class="relative group">获取 Gemini Pro 的 API 密钥 <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#%e8%8e%b7%e5%8f%96-gemini-pro-%e7%9a%84-api-%e5%af%86%e9%92%a5 aria-label=Anchor>#</a></span></h2><p><a href=https://makersuite.google.com/ target=_blank rel=noreferrer>Google AI Studio</a></p><p>访问之后选中左边的 <strong>Get API Key</strong> 选项卡，选择 <strong>Create API Key in new project</strong></p><p>复制下来即可</p><h2 id=部署-api-proxy class="relative group">部署 API Proxy <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#%e9%83%a8%e7%bd%b2-api-proxy aria-label=Anchor>#</a></span></h2><p>这里有两个选择，Netlify 和 Vercel</p><p>目前 Netlify 注册（似乎只针对 +86 区号）需要拍身份证上传，毕竟是个境外平台</p><p>本文以 Vercel 演示</p><p><a href=https://github.com/antergone/palm-proxy target=_blank rel=noreferrer>antergone/palm-proxy</a></p><p>访问，复制仓库，Import 仓库为自己的，改个名字，完美</p><p><a href="https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fantergone%2Fpalm-proxy" target=_blank rel=noreferrer>https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fantergone%2Fpalm-proxy</a></p><p>把这串链接的 <strong>antergone</strong> 和 <strong>palm-proxy</strong> 改为你自己的用户名和仓库名，然后访问</p><h2 id=部署-api-转换 class="relative group">部署 API 转换 <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#%e9%83%a8%e7%bd%b2-api-%e8%bd%ac%e6%8d%a2 aria-label=Anchor>#</a></span></h2><p>我们需要把 <strong>Google</strong> 的 API 转换成 <strong>OpenAI</strong> 的 <strong>API</strong> 格式</p><p><a href=https://github.com/zuisong/gemini-openai-proxy target=_blank rel=noreferrer>zuisong/gemini-openai-proxy</a></p><p>进入 <code>dist</code> 目录，复制 <strong>main_cloudflare-workers.mjs</strong> 的内容，粘贴到新创建的 Cloudflare Worker 里面就行</p><p>然后修改一下内容，全局搜索 <code>BASE_URL</code> 把值改成你部署的 API Proxy</p><p>全局搜索 <code>apiKey</code> 把代码改成字符串，值写为你的 Gemini Pro API Key</p><p>自用设置（防盗链），全局搜索 <code>origin</code> 修改值为你的博客地址（可选）</p><h2 id=前端代码 class="relative group">前端代码 <span class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100"><a class="group-hover:text-primary-300 dark:group-hover:text-neutral-700" style=text-decoration-line:none!important href=#%e5%89%8d%e7%ab%af%e4%bb%a3%e7%a0%81 aria-label=Anchor>#</a></span></h2><blockquote><p>本节仅适用于 Hugo</p></blockquote><p>进入博客根目录，进入文件夹 <strong>layouts/partials</strong></p><p>新建 <code>gemini.html</code></p><p>内容如下</p><div class=highlight><pre tabindex=0 class=chroma><code class=language-html data-lang=html><span class=line><span class=cl><span class=p>&lt;</span><span class=nt>div</span> <span class=na>class</span><span class=o>=</span><span class=s>&#34;post-ai&#34;</span> <span class=na>onclick</span><span class=o>=</span><span class=s>&#34;geminiAI()&#34;</span><span class=p>&gt;</span>
</span></span><span class=line><span class=cl>  <span class=p>&lt;</span><span class=nt>img</span> <span class=na>alt</span><span class=o>=</span><span class=s>&#34;Static Badge&#34;</span> <span class=na>src</span><span class=o>=</span><span class=s>&#34;/gemini.svg&#34;</span> <span class=p>/&gt;</span>
</span></span><span class=line><span class=cl><span class=p>&lt;/</span><span class=nt>div</span><span class=p>&gt;</span>
</span></span><span class=line><span class=cl><span class=p>&lt;</span><span class=nt>style</span><span class=p>&gt;</span>
</span></span><span class=line><span class=cl>  <span class=p>@</span><span class=k>keyframes</span> <span class=nt>spin</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>    <span class=nt>from</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>      <span class=k>transform</span><span class=p>:</span> <span class=nb>rotate</span><span class=p>(</span><span class=mi>0</span><span class=kt>deg</span><span class=p>);</span>
</span></span><span class=line><span class=cl>    <span class=p>}</span>
</span></span><span class=line><span class=cl>    <span class=nt>to</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>      <span class=k>transform</span><span class=p>:</span> <span class=nb>rotate</span><span class=p>(</span><span class=mi>360</span><span class=kt>deg</span><span class=p>);</span>
</span></span><span class=line><span class=cl>    <span class=p>}</span>
</span></span><span class=line><span class=cl>  <span class=p>}</span>
</span></span><span class=line><span class=cl>  <span class=p>.</span><span class=nc>post-summary-result</span> <span class=nt>svg</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>    <span class=k>animation</span><span class=p>:</span> <span class=n>spin</span> <span class=mi>1</span><span class=kt>s</span> <span class=kc>infinite</span> <span class=kc>linear</span><span class=p>;</span>
</span></span><span class=line><span class=cl>  <span class=p>}</span>
</span></span><span class=line><span class=cl>  <span class=p>.</span><span class=nc>post-summary-result</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>    <span class=k>box-shadow</span><span class=p>:</span> <span class=nb>rgba</span><span class=p>(</span><span class=mi>0</span><span class=p>,</span> <span class=mi>0</span><span class=p>,</span> <span class=mi>0</span><span class=p>,</span> <span class=mf>0.05</span><span class=p>)</span> <span class=mi>0</span> <span class=mi>0</span> <span class=mi>0</span> <span class=mi>1</span><span class=kt>px</span><span class=p>;</span>
</span></span><span class=line><span class=cl>    <span class=k>background-color</span><span class=p>:</span> <span class=nf>var</span><span class=p>(</span><span class=o>--</span><span class=n>light</span><span class=o>-</span><span class=n>header</span><span class=p>);</span>
</span></span><span class=line><span class=cl>    <span class=k>border-radius</span><span class=p>:</span> <span class=mi>6</span><span class=kt>px</span><span class=p>;</span>
</span></span><span class=line><span class=cl>    <span class=k>padding</span><span class=p>:</span> <span class=mf>0.5</span><span class=kt>rem</span> <span class=mi>1</span><span class=kt>rem</span><span class=p>;</span>
</span></span><span class=line><span class=cl>    <span class=k>min-height</span><span class=p>:</span> <span class=mi>3</span><span class=kt>rem</span><span class=p>;</span>
</span></span><span class=line><span class=cl>    <span class=k>max-width</span><span class=p>:</span> <span class=mi>41</span><span class=kt>rem</span><span class=p>;</span>
</span></span><span class=line><span class=cl>  <span class=p>}</span>
</span></span><span class=line><span class=cl>  <span class=p>.</span><span class=nc>post-ai</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>    <span class=k>margin-bottom</span><span class=p>:</span> <span class=mi>1</span><span class=kt>rem</span><span class=p>;</span>
</span></span><span class=line><span class=cl>  <span class=p>}</span>
</span></span><span class=line><span class=cl><span class=p>&lt;/</span><span class=nt>style</span><span class=p>&gt;</span>
</span></span><span class=line><span class=cl><span class=p>&lt;</span><span class=nt>script</span><span class=p>&gt;</span>
</span></span><span class=line><span class=cl>  <span class=kd>let</span> <span class=nx>postAI</span> <span class=o>=</span> <span class=nb>document</span><span class=p>.</span><span class=nx>querySelector</span><span class=p>(</span><span class=s2>&#34;.post-ai&#34;</span><span class=p>);</span>
</span></span><span class=line><span class=cl>  <span class=kd>let</span> <span class=nx>postTile</span> <span class=o>=</span> <span class=nb>document</span><span class=p>.</span><span class=nx>getElementById</span><span class=p>(</span><span class=s2>&#34;title&#34;</span><span class=p>).</span><span class=nx>innerHTML</span><span class=p>;</span> <span class=c1>// 此处修改为你的博客 Title id
</span></span></span><span class=line><span class=cl><span class=c1></span>  <span class=kd>let</span> <span class=nx>element</span><span class=o>-</span><span class=nx>posts</span> <span class=o>=</span> <span class=sb>`&lt;div class=&#34;post-summary-result&#34;&gt;加载中...&lt;/div&gt;`</span><span class=p>;</span>
</span></span><span class=line><span class=cl>
</span></span><span class=line><span class=cl>  <span class=kr>async</span> <span class=kd>function</span> <span class=nx>geminiAI</span><span class=p>()</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>    <span class=c1>// 尝试获取现有的摘要或错误信息元素并移除
</span></span></span><span class=line><span class=cl><span class=c1></span>    <span class=kr>const</span> <span class=nx>existingResult</span> <span class=o>=</span> <span class=nb>document</span><span class=p>.</span><span class=nx>querySelector</span><span class=p>(</span><span class=s2>&#34;.post-summary-result&#34;</span><span class=p>);</span>
</span></span><span class=line><span class=cl>    <span class=k>if</span> <span class=p>(</span><span class=nx>existingResult</span><span class=p>)</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>      <span class=nx>existingResult</span><span class=p>.</span><span class=nx>remove</span><span class=p>();</span>
</span></span><span class=line><span class=cl>    <span class=p>}</span> <span class=k>else</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>      <span class=nx>postAI</span><span class=p>.</span><span class=nx>insertAdjacentHTML</span><span class=p>(</span>
</span></span><span class=line><span class=cl>        <span class=s2>&#34;afterend&#34;</span><span class=p>,</span>
</span></span><span class=line><span class=cl>        <span class=nx>element</span><span class=o>-</span><span class=nx>ai</span>
</span></span><span class=line><span class=cl>      <span class=p>);</span>
</span></span><span class=line><span class=cl>    <span class=p>}</span>
</span></span><span class=line><span class=cl>    <span class=kd>let</span> <span class=nx>GeminiFetch</span> <span class=o>=</span> <span class=s2>&#34;你部署的地址&#34;</span><span class=p>;</span>
</span></span><span class=line><span class=cl>
</span></span><span class=line><span class=cl>    <span class=k>try</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>      <span class=kd>let</span> <span class=nx>postAIResult</span> <span class=o>=</span> <span class=nb>document</span><span class=p>.</span><span class=nx>querySelector</span><span class=p>(</span><span class=s2>&#34;.post-summary-result&#34;</span><span class=p>);</span>
</span></span><span class=line><span class=cl>      <span class=kd>let</span> <span class=nx>input</span> <span class=o>=</span> <span class=nb>document</span><span class=p>.</span><span class=nx>getElementById</span><span class=p>(</span><span class=s2>&#34;posts-content&#34;</span><span class=p>).</span><span class=nx>innerHTML</span><span class=p>;</span> <span class=c1>// 此处修改为你的博客内容 ID
</span></span></span><span class=line><span class=cl><span class=c1></span>      <span class=kd>let</span> <span class=nx>inputHanzi</span> <span class=o>=</span> <span class=nx>input</span>
</span></span><span class=line><span class=cl>        <span class=p>.</span><span class=nx>replace</span><span class=p>(</span><span class=sr>/\n/g</span><span class=p>,</span> <span class=s2>&#34;&#34;</span><span class=p>)</span>
</span></span><span class=line><span class=cl>        <span class=p>.</span><span class=nx>replace</span><span class=p>(</span><span class=sr>/[ ]+/g</span><span class=p>,</span> <span class=s2>&#34; &#34;</span><span class=p>)</span>
</span></span><span class=line><span class=cl>        <span class=p>.</span><span class=nx>replace</span><span class=p>(</span><span class=sr>/&lt;pre&gt;[\s\S]*?&lt;\/pre&gt;/g</span><span class=p>,</span> <span class=s2>&#34;&#34;</span><span class=p>)</span>
</span></span><span class=line><span class=cl>        <span class=p>.</span><span class=nx>substring</span><span class=p>(</span><span class=mi>0</span><span class=p>,</span> <span class=mi>30000</span><span class=p>);</span>
</span></span><span class=line><span class=cl>      <span class=kd>let</span> <span class=nx>toAI</span> <span class=o>=</span> <span class=sb>`&#34;文章标题：</span><span class=si>${</span><span class=nx>postTile</span><span class=si>}</span><span class=sb>，具体内容：</span><span class=si>${</span><span class=nx>inputHanzi</span><span class=si>}</span><span class=sb>&#34;`</span><span class=p>;</span>
</span></span><span class=line><span class=cl>      <span class=kr>const</span> <span class=nx>res</span> <span class=o>=</span> <span class=kr>await</span> <span class=nx>fetch</span><span class=p>(</span><span class=nx>GeminiFetch</span><span class=p>,</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>        <span class=nx>headers</span><span class=o>:</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>          <span class=s2>&#34;Content-Type&#34;</span><span class=o>:</span> <span class=s2>&#34;application/json&#34;</span><span class=p>,</span>
</span></span><span class=line><span class=cl>        <span class=p>},</span>
</span></span><span class=line><span class=cl>        <span class=nx>method</span><span class=o>:</span> <span class=s2>&#34;POST&#34;</span><span class=p>,</span>
</span></span><span class=line><span class=cl>        <span class=nx>body</span><span class=o>:</span> <span class=nx>JSON</span><span class=p>.</span><span class=nx>stringify</span><span class=p>({</span>
</span></span><span class=line><span class=cl>          <span class=nx>model</span><span class=o>:</span> <span class=s2>&#34;gemini-pro&#34;</span><span class=p>,</span>
</span></span><span class=line><span class=cl>          <span class=nx>messages</span><span class=o>:</span> <span class=p>[</span>
</span></span><span class=line><span class=cl>            <span class=p>{</span>
</span></span><span class=line><span class=cl>              <span class=nx>role</span><span class=o>:</span> <span class=s2>&#34;system&#34;</span><span class=p>,</span>
</span></span><span class=line><span class=cl>              <span class=nx>content</span><span class=o>:</span> <span class=sb>`You are a highly skilled AI trained in language comprehension and summarization. I want you to read the text separated by triple quotes and summarize it into a concise abstract paragraph. The aim is to retain the most important points and provide a coherent and readable summary that can help one understand the main points of discussion without having to read the entire text. Avoid unnecessary details or tangent points.
</span></span></span><span class=line><span class=cl><span class=sb>Just give me output and nothing else. Do not enclose responses in quotation marks. Answer in Chinese. You must read the whole article and make the most concise summary possible, which summarizes the content well.You should output the content in its entirety, not leave some behind, and when you are complete, you should issue the DONE command. `</span><span class=p>,</span>
</span></span><span class=line><span class=cl>            <span class=p>},</span>
</span></span><span class=line><span class=cl>            <span class=p>{</span> <span class=nx>role</span><span class=o>:</span> <span class=s2>&#34;user&#34;</span><span class=p>,</span> <span class=nx>content</span><span class=o>:</span> <span class=nx>toAI</span> <span class=p>},</span>
</span></span><span class=line><span class=cl>          <span class=p>],</span>
</span></span><span class=line><span class=cl>          <span class=nx>temperature</span><span class=o>:</span> <span class=mf>0.7</span><span class=p>,</span>
</span></span><span class=line><span class=cl>          <span class=nx>stream</span><span class=o>:</span> <span class=kc>true</span><span class=p>,</span>
</span></span><span class=line><span class=cl>        <span class=p>}),</span>
</span></span><span class=line><span class=cl>      <span class=p>});</span>
</span></span><span class=line><span class=cl>      <span class=kr>const</span> <span class=nx>reader</span> <span class=o>=</span> <span class=nx>res</span><span class=p>.</span><span class=nx>body</span><span class=p>.</span><span class=nx>getReader</span><span class=p>();</span>
</span></span><span class=line><span class=cl>      <span class=k>while</span> <span class=p>(</span><span class=kc>true</span><span class=p>)</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>        <span class=kr>const</span> <span class=p>{</span> <span class=nx>value</span><span class=p>,</span> <span class=nx>done</span> <span class=p>}</span> <span class=o>=</span> <span class=kr>await</span> <span class=nx>reader</span><span class=p>.</span><span class=nx>read</span><span class=p>();</span>
</span></span><span class=line><span class=cl>        <span class=k>if</span> <span class=p>(</span><span class=nx>done</span><span class=p>)</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>          <span class=k>break</span><span class=p>;</span>
</span></span><span class=line><span class=cl>        <span class=p>}</span>
</span></span><span class=line><span class=cl>        <span class=kr>const</span> <span class=nx>text</span> <span class=o>=</span> <span class=k>new</span> <span class=nx>TextDecoder</span><span class=p>().</span><span class=nx>decode</span><span class=p>(</span><span class=nx>value</span><span class=p>);</span>
</span></span><span class=line><span class=cl>        <span class=kr>const</span> <span class=nx>match</span> <span class=o>=</span> <span class=nx>text</span><span class=p>.</span><span class=nx>match</span><span class=p>(</span><span class=sr>/DONE/</span><span class=p>);</span>
</span></span><span class=line><span class=cl>        <span class=k>if</span> <span class=p>(</span><span class=o>!</span><span class=nx>match</span><span class=p>)</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>          <span class=kr>const</span> <span class=nx>textJson</span> <span class=o>=</span> <span class=nx>JSON</span><span class=p>.</span><span class=nx>parse</span><span class=p>(</span><span class=nx>text</span><span class=p>.</span><span class=nx>substring</span><span class=p>(</span><span class=mi>5</span><span class=p>));</span>
</span></span><span class=line><span class=cl>          <span class=kr>const</span> <span class=nx>resData</span> <span class=o>=</span> <span class=nx>textJson</span><span class=p>.</span><span class=nx>choices</span><span class=p>[</span><span class=mi>0</span><span class=p>].</span><span class=nx>delta</span><span class=p>.</span><span class=nx>content</span><span class=p>;</span>
</span></span><span class=line><span class=cl>          <span class=k>if</span> <span class=p>(</span><span class=nx>resData</span><span class=p>.</span><span class=nx>length</span> <span class=o>&gt;</span> <span class=mi>0</span><span class=p>)</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>            <span class=nx>postAIResult</span><span class=p>.</span><span class=nx>textContent</span> <span class=o>+=</span> <span class=nx>resData</span><span class=p>;</span>
</span></span><span class=line><span class=cl>          <span class=p>}</span>
</span></span><span class=line><span class=cl>        <span class=p>}</span>
</span></span><span class=line><span class=cl>      <span class=p>}</span>
</span></span><span class=line><span class=cl>    <span class=p>}</span> <span class=k>catch</span> <span class=p>(</span><span class=nx>error</span><span class=p>)</span> <span class=p>{</span>
</span></span><span class=line><span class=cl>      <span class=c1>// 在 post-summary-result 元素内部显示错误信息
</span></span></span><span class=line><span class=cl><span class=c1></span>      <span class=kd>let</span> <span class=nx>postAIResult</span> <span class=o>=</span> <span class=nb>document</span><span class=p>.</span><span class=nx>querySelector</span><span class=p>(</span><span class=s2>&#34;.post-summary-result&#34;</span><span class=p>);</span>
</span></span><span class=line><span class=cl>      <span class=nx>postAIResult</span><span class=p>.</span><span class=nx>innerHTML</span> <span class=o>=</span>
</span></span><span class=line><span class=cl>        <span class=s1>&#39;&lt;div class=&#34;post-ai-error&#34;&gt;生成摘要时出错，请重试。&lt;/div&gt;&#39;</span><span class=p>;</span>
</span></span><span class=line><span class=cl>      <span class=nx>console</span><span class=p>.</span><span class=nx>log</span><span class=p>(</span><span class=nx>error</span><span class=p>);</span>
</span></span><span class=line><span class=cl>    <span class=p>}</span>
</span></span><span class=line><span class=cl>  <span class=p>}</span>
</span></span><span class=line><span class=cl><span class=p>&lt;/</span><span class=nt>script</span><span class=p>&gt;</span>
</span></span></code></pre></div><p>参照注释修改即可</p><p>对于 Hugo 中文章 id 和标题 id 的获取方法，可以打开 F12，用鼠标指针定位文章内容元素和标题元素，记录下类，进入 <strong>layouts/_default/single.html</strong> 中修改这些地方，加入 <code>id="title"</code> 和 <code>id="posts-content"</code> 就好</p><p>然后添加 svg 徽章，可以去一些网站上生成</p><p>部署完成！</p></div></section><footer class="pt-8 max-w-prose print:hidden"><div class=flex><picture class="!mb-0 !mt-0 me-4 w-24 h-auto rounded-full"><img width=4096 height=4096 class="!mb-0 !mt-0 me-4 w-24 h-auto rounded-full" alt=FloatSheep loading=lazy decoding=async src=/avatar_hu8c96a287a75bfd9f03af418858761485_108988_660x0_resize_q75_h2_box_2.webp srcset="/avatar_hu8c96a287a75bfd9f03af418858761485_108988_330x0_resize_q75_h2_box_2.webp 330w,/avatar_hu8c96a287a75bfd9f03af418858761485_108988_660x0_resize_q75_h2_box_2.webp 660w
,/avatar_hu8c96a287a75bfd9f03af418858761485_108988_1024x0_resize_q75_h2_box_2.webp 1024w
,/avatar_hu8c96a287a75bfd9f03af418858761485_108988_1320x0_resize_q75_h2_box_2.webp 1320w" sizes=100vw></picture><div class=place-self-center><div class="text-[0.6rem] uppercase leading-3 text-neutral-500 dark:text-neutral-400">Author</div><div class="font-semibold leading-6 text-neutral-800 dark:text-neutral-300">FloatSheep</div><div class="text-sm text-neutral-700 dark:text-neutral-400">On the other side of obstacles</div><div class="text-2xl sm:text-lg"><div class="flex flex-wrap text-neutral-400 dark:text-neutral-500"><a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href=mailto:admin@hesiy.cn target=_blank aria-label=Email rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 512 512"><path fill="currentcolor" d="M207.8 20.73c-93.45 18.32-168.7 93.66-187 187.1-27.64 140.9 68.65 266.2 199.1 285.1 19.01 2.888 36.17-12.26 36.17-31.49l1e-4-.6631c0-15.74-11.44-28.88-26.84-31.24-84.35-12.98-149.2-86.13-149.2-174.2.0-102.9 88.61-185.5 193.4-175.4 91.54 8.869 158.6 91.25 158.6 183.2v16.16c0 22.09-17.94 40.05-40 40.05s-40.01-17.96-40.01-40.05v-120.1c0-8.847-7.161-16.02-16.01-16.02l-31.98.0036c-7.299.0-13.2 4.992-15.12 11.68-24.85-12.15-54.24-16.38-86.06-5.106-38.75 13.73-68.12 48.91-73.72 89.64-9.483 69.01 43.81 128 110.9 128 26.44.0 50.43-9.544 69.59-24.88 24 31.3 65.23 48.69 109.4 37.49C465.2 369.3 496 324.1 495.1 277.2V256.3c0-149.2-133.9-265.632-287.3-235.57zM239.1 304.3c-26.47.0-48-21.56-48-48.05s21.53-48.05 48-48.05 48 21.56 48 48.05-20.6 48.05-48 48.05z"/></svg>
</span></a><a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href=https://hesiy.cn/ target=_blank aria-label=Link rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 640 512"><path fill="currentcolor" d="M172.5 131.1c55.6-55.59 148-55.59 203.6.0 50 50 57.4 129.7 16.3 187.2L391.3 319.9C381 334.2 361 337.6 346.7 327.3c-14.4-10.3-17.8-30.3-7.5-44.6L340.3 281.1C363.2 249 359.6 205.1 331.7 177.2c-31.4-31.4-82.5-31.4-114 0L105.5 289.5c-31.51 30.6-31.51 82.5.0 114C133.3 431.4 177.3 435 209.3 412.1L210.9 410.1C225.3 400.7 245.3 404 255.5 418.4 265.8 432.8 262.5 452.8 248.1 463.1L246.5 464.2c-58.4 41.1-136.3 34.5-186.29-15.4-56.469-56.5-56.469-148.1.0-204.5L172.5 131.1zM467.5 380c-56.5 56.5-148 56.5-204.5.0-50-50-56.5-128.8-15.4-186.3L248.7 192.1C258.1 177.8 278.1 174.4 293.3 184.7 307.7 194.1 311.1 214.1 300.8 229.3L299.7 230.9C276.8 262.1 280.4 306.9 308.3 334.8c31.4 31.4 82.5 31.4 114 0L534.5 222.5c31.5-31.5 31.5-83.4.0-114C506.7 80.63 462.7 76.99 430.7 99.9L429.1 101C414.7 111.3 394.7 107.1 384.5 93.58 374.2 79.2 377.5 59.21 391.9 48.94L393.5 47.82C451 6.731 529.8 13.25 579.8 63.24c56.5 56.46 56.5 148.06.0 204.46L467.5 380z"/></svg>
</span></a><a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href=https://github.com/FloatSheep target=_blank aria-label=Github rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 496 512"><path fill="currentcolor" 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.6zm-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.3zm44.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.9zM244.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 8zM97.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-1zm-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.7zm32.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-1zm-11.4-14.7c-1.6 1-1.6 3.6.0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9.0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg>
</span></a><a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href="https://music.163.com/#/user/home?id=1431228228" target=_blank aria-label=Neteasemusic rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><!doctype html><svg viewBox="0 0 1024 1024" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M628.76 5.89Q671.27-5.3 714.9 4.77q49.22 12.3 90.6 43.62 14.55 10.07 22.38 27.97 5.59 12.31 3.91 26.29-1.68 13.98-8.39 26.29-15.66 21.25-40.27 25.72-21.25 2.24-38.03-7.83l-17.9-13.42q-12.3-7.83-26.85-13.42t-30.21-5.59q-10.07 1.12-19.57 6.16-9.5 5.03-17.34 12.86-14.54 15.66-10.07 35.8l21.25 79.42q36.92 2.23 73.84 12.3 36.91 10.07 69.36 30.2 63.76 39.16 110.74 98.44 38.03 50.34 55.93 110.75 19.02 65.99 14.54 134.23-4.47 57.05-23.49 109.62-24.61 64.88-68.24 118.58t-102.92 90.62q-42.5 27.96-90.6 44.18-48.1 16.22-98.44 21.81-69.36 10.07-139.83-1.68-70.47-11.75-134.23-45.31-63.76-33.56-114.66-84.45t-84.46-114.1q-33.56-63.2-48.1-132.56-20.13-102.91 2.24-204.71 14.54-62.64 44.75-119.13t73.82-103.47q72.71-77.18 171.15-116.34 10.07-4.47 20.14-6.71 24.61-3.35 43.62 10.07 13.43 8.95 19.58 23.49 6.15 14.54 3.92 30.2-2.24 15.66-11.75 27.97t-25.17 17.91q-49.22 19.01-91.17 50.34-41.95 31.32-73.27 73.82-27.96 36.92-45.86 79.99-17.9 43.06-24.05 89.49t-.56 92.29 22.37 88.37q23.49 63.76 68.24 114.65Q306.6 840.39 367 871.73q72.71 38.03 155.49 38.03 68.23-1.12 130.87-23.49 55.93-20.14 100.68-60.41 41.39-35.79 67.12-85.01 13.42-24.61 21.25-51.46 11.19-38.03 12.31-78.3 1.12-40.27-10.07-79.42-10.07-32.44-28.53-60.4-18.46-27.97-44.18-50.35-22.38-19.01-48.1-34.67-22.38-12.31-48.1-17.9l35.79 136.47 5.59 32.44q1.12 35.8-10.06 69.91-11.19 34.12-33.56 60.4-22.37 26.29-51.45 43.63-29.09 17.34-61.53 22.94-35.8 6.71-71.59.55-35.8-6.15-65.44-25.17-29.64-19.01-50.33-46.42t-31.88-59.85q-12.31-35.8-13.42-74.95-2.24-41.39 8.38-81.66 10.63-40.27 35.24-74.95 27.97-40.27 68.8-68.24 40.83-27.96 88.93-41.38l-14.55-52.57q-8.94-29.09-6.7-59.29 2.23-30.2 15.65-57.05 14.55-30.2 40.27-52.58 29.09-23.49 64.88-34.67zM478.87 419.78q-25.73 27.96-33.56 63.76-6.71 33.55.0 65.99 3.36 17.9 12.87 34.12 9.5 16.22 24.05 27.41 25.73 16.78 55.94 11.18 26.84-5.59 45.3-26.29 18.46-20.69 19.58-48.65-2.24-12.31-5.6-25.73L558.3 372.79q-45.86 13.43-79.42 46.99z" fill="currentcolor"/></svg></span></a>
<a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href=https://last.fm/user/FloatSheep target=_blank aria-label=Lastfm rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 512 512"><path fill="currentcolor" d="M225.8 367.1l-18.8-51s-30.5 34-76.2 34c-40.5.0-69.2-35.2-69.2-91.5.0-72.1 36.4-97.9 72.1-97.9 66.5.0 74.8 53.3 100.9 134.9 18.8 56.9 54 102.6 155.4 102.6 72.7.0 122-22.3 122-80.9.0-72.9-62.7-80.6-115-92.1-25.8-5.9-33.4-16.4-33.4-34 0-19.9 15.8-31.7 41.6-31.7 28.2.0 43.4 10.6 45.7 35.8l58.6-7c-4.7-52.8-41.1-74.5-100.9-74.5-52.8.0-104.4 19.9-104.4 83.9.0 39.9 19.4 65.1 68 76.8 44.9 10.6 79.8 13.8 79.8 45.7.0 21.7-21.1 30.5-61 30.5-59.2.0-83.9-31.1-97.9-73.9-32-96.8-43.6-163-161.3-163C45.7 113.8.0 168.3.0 261c0 89.1 45.7 137.2 127.9 137.2 66.2.0 97.9-31.1 97.9-31.1z"/></svg>
</span></a><a class="px-1 transition-transform hover:scale-125 hover:text-primary-700 dark:hover:text-primary-400" style=will-change:transform href=https://space.bilibili.com/384597455 target=_blank aria-label=Bilibili rel="me noopener noreferrer"><span class="icon relative inline-block px-1 align-text-bottom"><!doctype html><svg t="1722428520489" class="icon" viewBox="0 0 1024 1024" p-id="4278" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M977.2 208.2c33.4 36.2 48.8 79.4 46.6 131.4v404.8c-.8 52.8-18.4 96.2-53 130.2-34.4 34-78.2 51.8-131 53.4H184.04c-52.9-1.6-96.42-19.6-130.56-54.4C19.364 838.8 1.534 793 0 736.4V339.6c1.534-52 19.364-95.2 53.48-131.4 34.14-32.7 77.66-50.66 130.56-52.2h58.76l-50.7-51.62c-11.5-11.46-17.26-26-17.26-43.58.0-17.6 5.76-32.12 17.26-43.594C203.6 5.736 218.2.0 235.8.0s32.2 5.736 43.8 17.206L426.2 156h176l149-138.794C763.4 5.736 778.4.0 796 0s32.2 5.736 43.8 17.206C851.2 28.68 857 43.2 857 60.8c0 17.58-5.8 32.12-17.2 43.58L789.2 156h58.6c52.8 1.54 96 19.5 129.4 52.2zm-77.6 139.4c-.8-19.2-7.4-34.8-21.4-47-10.4-12.2-28-18.8-45.4-19.6H192.1c-19.18.8-34.9 7.4-47.16 19.6-12.28 12.2-18.8 27.8-19.56 47v388.8c0 18.4 6.52 34 19.56 47S173.7 803 192.1 803H832.8c18.4.0 34-6.6 46.6-19.6s19.4-28.6 20.2-47V347.6zM371 433c12.6 12.6 19.4 28.2 20.2 46.4V546c-.8 18.4-7.4 33.8-19.6 46.4-12.4 12.6-28 19-47.2 19s-35-6.4-47.2-19-18.8-28-19.6-46.4v-66.6c.8-18.2 7.6-33.8 20.2-46.4 12.6-12.6 26.4-19.2 46.6-20 18.4.8 34 7.4 46.6 20zm383 0c12.6 12.6 19.4 28.2 20.2 46.4V546c-.8 18.4-7.4 33.8-19.6 46.4s-28 19-47.2 19-34.8-6.4-47.2-19c-14-12.6-18.8-28-19.4-46.4v-66.6c.6-18.2 7.4-33.8 20-46.4 12.6-12.6 28.2-19.2 46.6-20 18.4.8 34 7.4 46.6 20z" p-id="4279" fill="currentcolor"/></svg></span></a></div></div></div></div><div class=pt-8><hr class="border-dotted border-neutral-300 dark:border-neutral-600"><div class="flex justify-between pt-3"><span><a class="group flex" href=/posts/referer-skip/><span class="me-2 text-neutral-700 transition-transform group-hover:-translate-x-[2px] group-hover:text-primary-600 dark:text-neutral dark:group-hover:text-primary-400"><span class="ltr:inline rtl:hidden">&larr;</span><span class="ltr:hidden rtl:inline">&rarr;</span></span>
<span class="flex flex-col"><span class="mt-[0.1rem] leading-6 group-hover:underline group-hover:decoration-primary-500">技巧 ++ | 巧妙绕过 Referer 限制</span>
<span class="mt-[0.1rem] text-xs text-neutral-500 dark:text-neutral-400"><time datetime="2024-01-30 18:56:27 +0800 +0800">2024 年 01 月 30 日</time>
</span></span></a></span><span><a class="group flex text-right" href=/posts/home-server/><span class="flex flex-col"><span class="mt-[0.1rem] leading-6 group-hover:underline group-hover:decoration-primary-500">小记 | 家庭服务器指南</span>
<span class="mt-[0.1rem] text-xs text-neutral-500 dark:text-neutral-400"><time datetime="2024-02-07 15:05:18 +0800 +0800">2024 年 02 月 07 日</time>
</span></span><span class="ms-2 text-neutral-700 transition-transform group-hover:-translate-x-[-2px] group-hover:text-primary-600 dark:text-neutral dark:group-hover:text-primary-400"><span class="ltr:inline rtl:hidden">&rarr;</span><span class="ltr:hidden rtl:inline">&larr;</span></span></a></span></div></div><div class=pt-3><hr class="border-dotted border-neutral-300 dark:border-neutral-600"><div class=pt-3><link rel=stylesheet href=https://cdn.hesiy.cn/npm/@waline/client@latest/dist/waline.css><div id=comments-container><center><div class=loading></div></div></center></div><script type=module>
  import { init } from 'https://registry.npmmirror.com/@waline/client/latest/files/dist/waline.js';

  init({
    el: '#comments-container',
    serverURL: 'https://w-a.hesiy.cn',
    dark: 'html[class="scroll-smooth dark"]',
    search: false,
    reaction: [
      '//registry.npmmirror.com/@waline/emojis/1.2.0/files/tieba/tieba_agree.png',
      '//registry.npmmirror.com/@waline/emojis/1.2.0/files/tieba/tieba_look_down.png',
      '//registry.npmmirror.com/@waline/emojis/1.2.0/files/tieba/tieba_sunglasses.png',
      '//registry.npmmirror.com/@waline/emojis/1.2.0/files/tieba/tieba_pick_nose.png',
      '//registry.npmmirror.com/@waline/emojis/1.2.0/files/tieba/tieba_awkward.png',
    ],
    lang: 'zh-CN',
    emoji: [
      '//registry.npmmirror.com/@waline/emojis/1.2.0/files/bmoji',
    ],
  });
</script></div></div></footer></article></main><footer id=order-footer class="py-10 print:hidden"><nav class="pb-4 text-base font-medium text-neutral-500 dark:text-neutral-400"><ul class="flex list-none flex-col sm:flex-row"><li class="group mb-1 ltr:text-right rtl:text-left sm:mb-0 sm:me-7 sm:last:me-0"><a href=https://www.foreverblog.cn/ title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">十年之约</span></a></li><li class="group mb-1 ltr:text-right rtl:text-left sm:mb-0 sm:me-7 sm:last:me-0"><a href=/copyright/ title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">版权声明</span></a></li><li class="group mb-1 ltr:text-right rtl:text-left sm:mb-0 sm:me-7 sm:last:me-0"><a href=/sitemap.xml title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">网站地图</span></a></li><li class="group mb-1 ltr:text-right rtl:text-left sm:mb-0 sm:me-7 sm:last:me-0"><a href=/policy/ title><span class="decoration-primary-500 group-hover:underline group-hover:decoration-2 group-hover:underline-offset-2">隐私政策</span></a></li></ul></nav><div class="flex items-center justify-between"><div><p class="text-sm text-neutral-500 dark:text-neutral-400">© 2023 FloatSheep🤔<br>全站约
26,185 字 / 相当于《小王子》法文原版</p><p class="text-xs text-neutral-500 dark:text-neutral-400"><span>图床支持 </span><a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href=https://www.dogecast.com/ target=_blank rel="noopener noreferrer">DogeDoge</a><br><script>function checkStatus(){function e(){return localStorage.getItem("cachedFont")==="true"}e()}checkStatus()</script>Powered by <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href=https://gohugo.io/ target=_blank rel="noopener noreferrer">Hugo</a> & <a class="hover:underline hover:decoration-primary-400 hover:text-primary-500" href=https://github.com/jpanther/congo target=_blank rel="noopener noreferrer">Congo</a></p><div class=timeContainer><span id=timeDate class="text-xs text-neutral-500 dark:text-neutral-400">锟斤拷</span><span id=times class="text-xs text-neutral-500 dark:text-neutral-400">锟斤拷</span>
<script>const now=new Date;function createtime(){const e=new Date("02/23/2020 15:46:12");now.setTime(now.getTime()+250),days=(now-e)/1e3/60/60/24,dnum=Math.floor(days),hours=(now-e)/1e3/60/60-24*dnum,hnum=Math.floor(hours),String(hnum).length==1&&(hnum="0"+hnum),minutes=(now-e)/1e3/60-24*60*dnum-60*hnum,mnum=Math.floor(minutes),String(mnum).length==1&&(mnum="0"+mnum),seconds=(now-e)/1e3-24*60*60*dnum-60*60*hnum-60*mnum,snum=Math.round(seconds),String(snum).length==1&&(snum="0"+snum),document.getElementById("timeDate").innerHTML="从初版博客起算，已运行 "+dnum+" 天 ",document.getElementById("times").innerHTML=hnum+" 小时 "+mnum+" 分 "+snum+" 秒"}setInterval("createtime()",250)</script></div></div><button id=refreshContainer onclick=window.fm.refresh() id=refresh-switcher type=button aria-label="Service Worker refresh controller"><div class="flex h-12 w-12 items-center justify-center dark:hidden" title="Refresh Service Worker"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 448 512"><path fill="currentcolor" d="M4e2 32H48C21.5 32 0 53.5.0 80v352c0 26.5 21.5 48 48 48h352c26.5.0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1.0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1.0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z"/></svg></span></div><div class="hidden h-12 w-12 items-center justify-center dark:flex" title="Refresh Service Worker"><span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 448 512"><path fill="currentcolor" d="M4e2 32H48C21.5 32 0 53.5.0 80v352c0 26.5 21.5 48 48 48h352c26.5.0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1.0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1.0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z"/></svg></span></div></button><div class="cursor-pointer text-sm text-neutral-700 hover:text-primary-600 dark:text-neutral dark:hover:text-primary-400"><button id=appearance-switcher-0 type=button aria-label="appearance switcher"><div class="flex h-12 w-12 items-center justify-center dark:flex" title="Switch to dark appearance"><theme-button value=light id=btn size=0.06></theme-button></div></button></div></div><script>function getCookie(e){const s=decodeURIComponent(document.cookie),t=s.split(";"),n=e+"=";for(let e=0;e<t.length;e++){const s=t[e].trim();if(s.indexOf(n)===0)return s.substring(n.length,s.length)}}document.addEventListener("DOMContentLoaded",e=>{document.mB&&typeof document.mB.show=="function"?getCookie("mbShow")!=="true"&&(document.mB.show("Service Worker 进行了重写！网页出现错误时，可以试试页面底部的两点按键！",!0,"我已知晓","#FFF","top-right",5e3),document.cookie="mbShow=true; path=/"):console.error("mB is not defined or show is not a function!"),pagemap(document.querySelector("#pagemap"),{viewport:null,styles:{"header,footer,section,article":"rgba(0,0,0,0.08)","h1,a":"rgba(0,0,0,0.10)","h2,h3,h4":"rgba(0,0,0,0.08)"},back:"rgba(0,0,0,0.02)",view:"rgba(0,0,0,0.05)",drag:"rgba(0,0,0,0.10)",interval:null})})</script></footer><div id=search-wrapper class="invisible fixed inset-0 z-50 flex h-screen w-screen cursor-default flex-col bg-neutral-500/50 p-4 backdrop-blur-sm dark:bg-neutral-900/50 sm:p-6 md:p-[10vh] lg:p-[12vh]" data-url=https://blog.hesiy.cn/><div id=search-modal class="top-20 mx-auto flex min-h-0 w-full max-w-3xl flex-col rounded-md border border-neutral-200 bg-neutral shadow-lg dark:border-neutral-700 dark:bg-neutral-800"><header class="relative z-10 flex flex-none items-center justify-between px-2"><form class="flex min-w-0 flex-auto items-center"><div class="flex h-8 w-8 items-center justify-center text-neutral-400"><span class="icon relative inline-block px-1 align-text-bottom"><svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="search" class="svg-inline--fa fa-search fa-w-16" role="img" viewBox="0 0 512 512"><path fill="currentcolor" d="M505 442.7 405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9.0 208 0S0 93.1.0 208s93.1 208 208 208c48.3.0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9.0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7.0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7.0 128 57.2 128 128 0 70.7-57.2 128-128 128z"/></svg></span></div><input type=search id=search-query class="mx-1 flex h-12 flex-auto appearance-none bg-transparent focus:outline-dotted focus:outline-2 focus:outline-transparent" placeholder=Search tabindex=0></form><button id=close-search-button class="flex h-8 w-8 items-center justify-center text-neutral-700 hover:text-primary-600 dark:text-neutral dark:hover:text-primary-400" title="Close (Esc)">
<span class="icon relative inline-block px-1 align-text-bottom"><svg viewBox="0 0 320 512"><path fill="currentcolor" d="M310.6 361.4c12.5 12.5 12.5 32.75.0 45.25C304.4 412.9 296.2 416 288 416s-16.38-3.125-22.62-9.375L160 301.3 54.63 406.6C48.38 412.9 40.19 416 32 416S15.63 412.9 9.375 406.6c-12.5-12.5-12.5-32.75.0-45.25l105.4-105.4L9.375 150.6c-12.5-12.5-12.5-32.75.0-45.25s32.75-12.5 45.25.0L160 210.8l105.4-105.4c12.5-12.5 32.75-12.5 45.25.0s12.5 32.75.0 45.25l-105.4 105.4L310.6 361.4z"/></svg></span></button></header><section class="flex-auto overflow-auto px-2"><ul id=search-results></ul></section></div></div></div></body></html>