This commit is contained in:
2026-03-27 09:18:54 +00:00
commit b3bc856e9c
314 changed files with 94516 additions and 0 deletions

308
2026/01/01/summary.html Normal file
View File

@@ -0,0 +1,308 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>年终总结 | Mayx的博客</title>
<meta name="generator" content="Jekyll v3.9.5" />
<meta property="og:title" content="年终总结" />
<meta name="author" content="mayx" />
<meta property="og:locale" content="zh_CN" />
<meta name="description" content="0 error(s), ∞ warning(s)" />
<meta property="og:description" content="0 error(s), ∞ warning(s)" />
<meta property="og:site_name" content="Mayx的博客" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2026-01-01T00:00:00+08:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="年终总结" />
<meta name="google-site-verification" content="huTYdEesm8NaFymixMNqflyCp6Jfvd615j5Wq1i2PHc" />
<meta name="msvalidate.01" content="0ADFCE64B3557DC4DC5F2DC224C5FDDD" />
<meta name="yandex-verification" content="fc0e535abed800be" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"mayx"},"dateModified":"2026-01-01T00:00:00+08:00","datePublished":"2026-01-01T00:00:00+08:00","description":"0 error(s), ∞ warning(s)","headline":"年终总结","mainEntityOfPage":{"@type":"WebPage","@id":"/2026/01/01/summary.html"},"publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://avatars0.githubusercontent.com/u/17966333"},"name":"mayx"},"url":"/2026/01/01/summary.html"}</script>
<!-- End Jekyll SEO tag -->
<link rel="canonical" href="https://mabbs.github.io/2026/01/01/summary.html" />
<link type="application/atom+xml" rel="alternate" href="/atom.xml" title="Mayx的博客" />
<link rel="alternate" type="application/rss+xml" title="Mayx的博客(RSS)" href="/rss.xml" />
<link rel="alternate" type="application/json" title="Mayx的博客(JSON Feed)" href="/feed.json" />
<link rel="stylesheet" href="/assets/css/style.css?v=1774603128" />
<!--[if !IE]> -->
<link rel="stylesheet" href="/Live2dHistoire/live2d/css/live2d.css" />
<!-- <![endif]-->
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Mayx的博客" />
<link rel="webmention" href="https://webmention.io/mabbs.github.io/webmention" />
<link rel="pingback" href="https://webmention.io/mabbs.github.io/xmlrpc" />
<link rel="preconnect" href="https://summary.mayx.eu.org" crossorigin="anonymous" />
<link rel="prefetch" href="https://www.blogsclub.org/badge/mabbs.github.io" as="image" />
<link rel="blogroll" type="text/xml" href="/blogroll.opml" />
<link rel="me" href="https://github.com/Mabbs" />
<script src="/assets/js/jquery.min.js"></script>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<script>
var lastUpdated = new Date("Fri, 27 Mar 2026 17:18:48 +0800");
var BlogAPI = "https://summary.mayx.eu.org";
</script>
<script src="/assets/js/main.js"></script>
<!--[if !IE]> -->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async="async" src="https://www.googletagmanager.com/gtag/js?id=UA-137710294-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-137710294-1');
</script>
<script src="/assets/js/instant.page.js" type="module"></script>
<!-- <![endif]-->
</head>
<body>
<!--[if !IE]> --><noscript><marquee style="top: -15px; position: relative;"><small>发现当前浏览器没有启用JavaScript这不影响你的浏览但可能会有一些功能无法使用……</small></marquee></noscript><!-- <![endif]-->
<!--[if IE]><marquee style="top: -15px; position: relative;"><small>发现当前浏览器为Internet Explorer这不影响你的浏览但可能会有一些功能无法使用……</small></marquee><![endif]-->
<div class="wrapper">
<header class="h-card">
<h1><a class="u-url u-uid p-name" rel="me" href="/">Mayx的博客</a></h1>
<img src="https://avatars0.githubusercontent.com/u/17966333" fetchpriority="high" class="u-photo" alt="Logo" style="width: 90%; max-width: 300px; max-height: 300px; border-radius: 25%;" />
<p class="p-note">Mayx's Home Page</p>
<form action="/search.html">
<input type="text" name="keyword" id="search-input-all" placeholder="Search blog posts.." />&#160;<input type="submit" value="搜索" />
</form>
<br />
<p class="view"><a class="u-url" href="/Mabbs/">About me</a></p>
<ul class="downloads">
<li style="width: 270px; border-right: none;"><a href="/MayxBlog.tgz">Download <strong>TGZ File</strong></a></li>
</ul>
</header>
<section class="h-entry">
<small><time class="date dt-published" datetime="2026-01-01T00:00:00+08:00">1 January 2026</time> - 字数统计750 - 阅读大约需要3分钟 - Hits: <span id="/2026/01/01/summary.html" class="visitors">Loading...</span></small>
<h1 class="p-name">年终总结</h1>
<p class="view">by <a class="p-author h-card" href="//github.com/Mabbs">mayx</a></p>
<div id="outdate" style="display:none;">
<hr /><p>
这是一篇创建于 <span id="outime"></span> 天前的文章,其中的信息可能已经有所发展或是发生改变。
</p>
</div>
<script>
daysold = Math.floor((new Date().getTime() - new Date("Thu, 01 Jan 2026 00:00:00 +0800").getTime()) / (24 * 60 * 60 * 1000));
if (daysold > 90) {
document.getElementById("outdate").style.display = "block";
document.getElementById("outime").innerHTML = daysold;
}
</script>
<hr />
<b>AI摘要</b>
<p id="ai-output">这篇文章介绍了作者对2025年的年终总结主要表达了对自身状态的担忧和对未来的不确定感。作者认为自己在记忆和思考能力方面有所下滑稳定性较低且未能抓住资产保值的机会。同时文章也记录了AI技术的飞速发展以及自己博客内容与时代脱节的现象。尽管对未来感到迷茫作者仍然抱有一丝希望期望在2026年做出正确的选择避免陷入危险。</p>
<hr />
<ul><li><a href="#2025年的状态">2025年的状态</a></li><li><a href="#2025年发生的事情">2025年发生的事情</a></li><li><a href="#展望2026年">展望2026年</a></li></ul>
<hr />
<main class="post-content e-content" role="main"><p>0 error(s), ∞ warning(s)<!--more--></p>
<h1 id="2025年的状态">
<a href="#2025年的状态"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 2025年的状态
</h1>
<p>在2025年感觉状态不如去年……由于没能做出正确的选择还是有点糟糕。不过总的来说还没有引发关键性的错误至少还能继续坚持下去。 </p><p>
在这一年中感觉记忆和思考能力都有所下滑看来是没把自己照顾好😂不过看看这一年写的文章看起来似乎比以前更流畅了这也许是因为和AI聊得多了以至于思维有点偏向AI了吧。 </p><p>
总的来说感觉自己的稳定性还是有点低了,但这可能不是我能独自解决的,也不知会有什么转机……</p>
<h1 id="2025年发生的事情">
<a href="#2025年发生的事情"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 2025年发生的事情
</h1>
<p>回顾了一下<a href="/2025/01/01/summary.html">去年的年终总结</a>,发现自己还是没能做到知行合一,在这一年里全球各类资产突然开始大幅升值,也就是说钱真的开始不值钱了……那时候想着买黄金,这一年下来却没能下定决心,最终错过了资产保值的机会。至于现在,似乎什么也做不了了……当然这对我的生活并没有造成什么严重的打击,只是感受到环境对自己的影响罢了。 </p><p>
至于AI……依然是一天比一天强而各个公司对AI的投入相比去年也是极大的提升当然出来的效果也是非常强那时候的AI还是挺容易出错但是现在AI解决问题的能力已经可以替代很多人了不只是文本生成模型今年的图像与视频生成模型也真的是发展到了以往完全不能想象的地步真的可以做到一句话想要什么就有什么了。 </p><p>
另外,今年写的博客内容过于围绕博客本身了,以至于似乎不太跟得上时代,虽然我的博客也确实有点老旧了😆。只是看看以前的文章,都还有一些面向未来的趋势,而今年就有点“考古”了。相比于考古,去展望未来显然是更有意义的事情,只不过……真的感觉脑子不太好使,未来会发生什么,已经完全无法预测了。</p>
<h1 id="展望2026年">
<a href="#展望2026年"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 展望2026年
</h1>
<p>虽然不知道未来会发生什么,但毕竟还没有造成关键性的错误,还有修正的余地,只能希望未来能够做出正确的选择,不要让自己陷入危险的境地吧。</p></main>
<small style="display: block">tags: <a rel="category tag" class="p-category" href="/search.html?keyword=%E6%80%BB%E7%BB%93"><em>总结</em></a> <span style="float: right;"><a href="https://gitlab.com/mayx/mayx.gitlab.io/tree/master/_posts/2026-01-01-summary.md">查看原始文件</a></span></small>
<h4 style="border-bottom: 1px solid #e5e5e5;margin: 2em 0 5px;">推荐文章</h4>
<p id="suggest-container">Loading...</p>
<script>
var suggest = $("#suggest-container");
$.get(BlogAPI + "/suggest?id=/2026/01/01/summary.html&update=" + lastUpdated.valueOf(), function (data) {
if (data.length) {
getSearchJSON(function (search) {
suggest.empty();
var searchMap = {};
for (var i = 0; i < search.length; i++) {
searchMap[search[i].url] = search[i];
}
var tooltip = $('<div class="content-tooltip"></div>').appendTo('body').hide();
for (var j = 0; j < data.length; j++) {
var item = searchMap[data[j].id];
if (item) {
var link = $('<a href="' + item.url + '">' + item.title + '</a>');
var contentPreview = item.content.substring(0, 100);
if (item.content.length > 100) {
contentPreview += "……";
}
link.hover(
function(e) {
tooltip.text($(this).data('content'))
.css({
top: e.pageY + 10,
left: e.pageX + 10
})
.show();
},
function() {
tooltip.hide();
}
).mousemove(function(e) {
tooltip.css({
top: e.pageY + 10,
left: e.pageX + 10
});
}).data('content', contentPreview);
suggest.append(link);
suggest.append(' - ' + item.date + '<br />');
}
}
});
} else {
suggest.html("暂无推荐文章……");
}
});
</script>
<br />
<div class="pagination">
<span class="prev">
<a href="/2025/12/01/linux.html">
上一篇在浏览器中运行Linux的各种方法
</a>
</span>
<br />
<span class="next">
<a href="/2026/02/08/xslt.html">
下一篇在Google杀死XSLT之后的XML美化方案
</a>
</span>
</div>
<!--[if !IE]> -->
<link rel="stylesheet" href="/assets/css/gitalk.css">
<script src="/assets/js/gitalk.min.js"></script>
<div id="gitalk-container"></div>
<script>
var gitalk = new Gitalk({
clientID: '36557aec4c3cb04f7ac6',
clientSecret: 'ac32993299751cb5a9ba81cf2b171cca65879cdb',
repo: 'mabbs.github.io',
owner: 'Mabbs',
admin: ['Mabbs'],
id: '/2026/01/01/summary', // Ensure uniqueness and length less than 50
distractionFreeMode: false, // Facebook-like distraction free mode
proxy: "https://cors-anywhere.mayx.eu.org/?https://github.com/login/oauth/access_token"
})
gitalk.render('gitalk-container')
</script>
<!-- <![endif]-->
</section>
<!--[if !IE]> -->
<div id="landlord" style="left:5px;bottom:0px;">
<div class="message" style="opacity:0"></div>
<canvas id="live2d" width="500" height="560" class="live2d"></canvas>
<div class="live_talk_input_body">
<form id="live_talk_input_form">
<div class="live_talk_input_name_body" >
<input type="checkbox" id="load_this" />
<input type="hidden" id="post_id" value="/2026/01/01/summary.html" />
<label for="load_this">
<span style="font-size: 11px; color: #fff;">&#160;想问这篇文章</span>
</label>
</div>
<div class="live_talk_input_text_body">
<input name="talk" type="text" class="live_talk_talk white_input" id="AIuserText" autocomplete="off" placeholder="要和我聊什么呀?" />
<button type="submit" class="live_talk_send_btn" id="talk_send">发送</button>
</div>
</form>
</div>
<input name="live_talk" id="live_talk" value="1" type="hidden" />
<div class="live_ico_box" style="display:none;">
<div class="live_ico_item type_info" id="showInfoBtn"></div>
<div class="live_ico_item type_talk" id="showTalkBtn"></div>
<div class="live_ico_item type_music" id="musicButton"></div>
<div class="live_ico_item type_youdu" id="youduButton"></div>
<div class="live_ico_item type_quit" id="hideButton"></div>
<input name="live_statu_val" id="live_statu_val" value="0" type="hidden" />
<audio src="" style="display:none;" id="live2d_bgm" data-bgm="0" preload="none"></audio>
<input id="duType" value="douqilai" type="hidden" />
</div>
</div>
<div id="open_live2d">召唤伊斯特瓦尔</div>
<!-- <![endif]-->
<footer>
<p>
<small>Made with ❤ by Mayx<br />Last updated at 2026-03-27 17:18:48<br /> 总字数621775 - 文章数180 - <a href="/rss.xml">Feed</a> - <a href="/README.html" >About</a></small>
</p>
</footer>
</div>
<script src="/assets/js/scale.fix.js"></script>
<!--[if !IE]> -->
<script src="/assets/js/main_new.js"></script>
<script src="/Live2dHistoire/live2d/js/live2d.js"></script>
<script src="/Live2dHistoire/live2d/js/message.js"></script>
<!-- <![endif]-->
</body>
</html>

341
2026/02/08/xslt.html Normal file
View File

@@ -0,0 +1,341 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>在Google杀死XSLT之后的XML美化方案 | Mayx的博客</title>
<meta name="generator" content="Jekyll v3.9.5" />
<meta property="og:title" content="在Google杀死XSLT之后的XML美化方案" />
<meta name="author" content="mayx" />
<meta property="og:locale" content="zh_CN" />
<meta name="description" content="即使没有了XSLT也不能让读者看到光秃秃的XML" />
<meta property="og:description" content="即使没有了XSLT也不能让读者看到光秃秃的XML" />
<meta property="og:site_name" content="Mayx的博客" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2026-02-08T00:00:00+08:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="在Google杀死XSLT之后的XML美化方案" />
<meta name="google-site-verification" content="huTYdEesm8NaFymixMNqflyCp6Jfvd615j5Wq1i2PHc" />
<meta name="msvalidate.01" content="0ADFCE64B3557DC4DC5F2DC224C5FDDD" />
<meta name="yandex-verification" content="fc0e535abed800be" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"mayx"},"dateModified":"2026-02-08T00:00:00+08:00","datePublished":"2026-02-08T00:00:00+08:00","description":"即使没有了XSLT也不能让读者看到光秃秃的XML","headline":"在Google杀死XSLT之后的XML美化方案","mainEntityOfPage":{"@type":"WebPage","@id":"/2026/02/08/xslt.html"},"publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://avatars0.githubusercontent.com/u/17966333"},"name":"mayx"},"url":"/2026/02/08/xslt.html"}</script>
<!-- End Jekyll SEO tag -->
<link rel="canonical" href="https://mabbs.github.io/2026/02/08/xslt.html" />
<link type="application/atom+xml" rel="alternate" href="/atom.xml" title="Mayx的博客" />
<link rel="alternate" type="application/rss+xml" title="Mayx的博客(RSS)" href="/rss.xml" />
<link rel="alternate" type="application/json" title="Mayx的博客(JSON Feed)" href="/feed.json" />
<link rel="stylesheet" href="/assets/css/style.css?v=1774603128" />
<!--[if !IE]> -->
<link rel="stylesheet" href="/Live2dHistoire/live2d/css/live2d.css" />
<!-- <![endif]-->
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Mayx的博客" />
<link rel="webmention" href="https://webmention.io/mabbs.github.io/webmention" />
<link rel="pingback" href="https://webmention.io/mabbs.github.io/xmlrpc" />
<link rel="preconnect" href="https://summary.mayx.eu.org" crossorigin="anonymous" />
<link rel="prefetch" href="https://www.blogsclub.org/badge/mabbs.github.io" as="image" />
<link rel="blogroll" type="text/xml" href="/blogroll.opml" />
<link rel="me" href="https://github.com/Mabbs" />
<script src="/assets/js/jquery.min.js"></script>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<script>
var lastUpdated = new Date("Fri, 27 Mar 2026 17:18:48 +0800");
var BlogAPI = "https://summary.mayx.eu.org";
</script>
<script src="/assets/js/main.js"></script>
<!--[if !IE]> -->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async="async" src="https://www.googletagmanager.com/gtag/js?id=UA-137710294-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-137710294-1');
</script>
<script src="/assets/js/instant.page.js" type="module"></script>
<!-- <![endif]-->
</head>
<body>
<!--[if !IE]> --><noscript><marquee style="top: -15px; position: relative;"><small>发现当前浏览器没有启用JavaScript这不影响你的浏览但可能会有一些功能无法使用……</small></marquee></noscript><!-- <![endif]-->
<!--[if IE]><marquee style="top: -15px; position: relative;"><small>发现当前浏览器为Internet Explorer这不影响你的浏览但可能会有一些功能无法使用……</small></marquee><![endif]-->
<div class="wrapper">
<header class="h-card">
<h1><a class="u-url u-uid p-name" rel="me" href="/">Mayx的博客</a></h1>
<img src="https://avatars0.githubusercontent.com/u/17966333" fetchpriority="high" class="u-photo" alt="Logo" style="width: 90%; max-width: 300px; max-height: 300px; border-radius: 25%;" />
<p class="p-note">Mayx's Home Page</p>
<form action="/search.html">
<input type="text" name="keyword" id="search-input-all" placeholder="Search blog posts.." />&#160;<input type="submit" value="搜索" />
</form>
<br />
<p class="view"><a class="u-url" href="/Mabbs/">About me</a></p>
<ul class="downloads">
<li style="width: 270px; border-right: none;"><a href="/MayxBlog.tgz">Download <strong>TGZ File</strong></a></li>
</ul>
</header>
<section class="h-entry">
<small><time class="date dt-published" datetime="2026-02-08T00:00:00+08:00">8 February 2026</time> - 字数统计2436 - 阅读大约需要8分钟 - Hits: <span id="/2026/02/08/xslt.html" class="visitors">Loading...</span></small>
<h1 class="p-name">在Google杀死XSLT之后的XML美化方案</h1>
<p class="view">by <a class="p-author h-card" href="//github.com/Mabbs">mayx</a></p>
<div id="outdate" style="display:none;">
<hr /><p>
这是一篇创建于 <span id="outime"></span> 天前的文章,其中的信息可能已经有所发展或是发生改变。
</p>
</div>
<script>
daysold = Math.floor((new Date().getTime() - new Date("Sun, 08 Feb 2026 00:00:00 +0800").getTime()) / (24 * 60 * 60 * 1000));
if (daysold > 90) {
document.getElementById("outdate").style.display = "block";
document.getElementById("outime").innerHTML = daysold;
}
</script>
<hr />
<b>AI摘要</b>
<p id="ai-output">这篇文章讲述了Google计划弃用XSLT技术以及作者对这一决定的调查和应对方案。Google基于XSLT用户占比低、库存在漏洞等原因建议将其从Web标准中删除。作者发现许多用户依赖XSLT进行博客订阅美化甚至将其作为博客框架。为了对抗这一趋势有人创建了网站https://xslt.rip并开发了Polyfill库通过WASM方式保持XSLT功能。虽然Polyfill库需要额外引用JS代码但作者已将其提交至CDNJS。随后作者探讨了替代方案包括使用纯CSS美化订阅源由AI生成feed.css以及混合XHTML的方式通过添加XHTML命名空间来实现链接等功能但这种方法会产生“不纯粹”的警告。文章最后总结技术可能会消失但总有其他技术可以解决问题并强调了适应浏览器厂商决策的重要性。</p>
<hr />
<ul><li><a href="#起因">起因</a></li><li><a href="#google杀死了xslt">Google杀死了XSLT</a></li><li><a href="#没有xslt之后的美化方案">没有XSLT之后的美化方案</a><ul><li><a href="#纯css">纯CSS</a></li><li><a href="#混合xhtml">混合XHTML</a></li></ul></li><li><a href="#感想">感想</a></li></ul>
<hr />
<main class="post-content e-content" role="main"><p>即使没有了XSLT也不能让读者看到光秃秃的XML<!--more--></p>
<h1 id="起因">
<a href="#起因"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 起因
</h1>
<p>在半年前,我写了一篇<a href="/2025/07/01/xslt.html">用XSLT美化博客XML文件</a>的文章自从那以后每次我在浏览其他人博客的时候都会看一眼对方博客有没有给自己的订阅文件做美化。不过就在前段时间我在浏览某个博客的时候发现他博客的订阅文件甚至连最基本的XML文档树都没有显示出来。这时候我打开开发者工具看了一眼源代码发现他也并没有使用<code class="language-plaintext highlighter-rouge">xml-stylesheet</code>之类的指令……而且控制台貌似报了些错好像是出现了什么CSP错误……于是我就想浏览器显示XML文档树的本质会不会其实也是一种XSLT之所以报错也有可能是浏览器在自动引用内置的XSLT时违反了CSP。所以我就问了问谷歌AI结果似乎真的是这样比如火狐浏览器就内置了一份<a href="https://github.com/mozilla-firefox/firefox/blob/main/dom/xml/resources/XMLPrettyPrint.xsl">XSLT文件</a>IE浏览器也有。正当我为XSLT的功能感到强大时谷歌AI随后提到<a href="https://developer.chrome.com/docs/web-platform/deprecating-xslt">Chrome浏览器决定弃用XSLT</a>所以以后不要再用XSLT了😰…… </p><p>
我给我的订阅文件加美化功能才半年怎么就要不能用了XSLT出现这么多年都还能用结果等我加上就要废弃了当时为了增加这个功能还是费了不少劲的怎么能让谷歌说没就没于是我就开始对这件事进行了调查。</p>
<h1 id="google杀死了xslt">
<a href="#google杀死了xslt"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> Google杀死了XSLT
</h1>
<p>从上面Chrome的弃用XSLT文档中可以发现这件事的始作俑者是<a href="https://github.com/mfreed7">Mason Freed</a>他在WHATWG中发起了一个<a href="https://github.com/whatwg/html/issues/11523">Issue</a>因为XSLT用的人很少以及实现XSLT的库很老而且容易出漏洞所以建议把XSLT从Web标准中删除。在这个Issue中可以发现有很多人表示不满毕竟这个功能对想要给自己订阅做美化的博主来说还是很有用的。为了对抗谷歌还有人做了个网站 <a href="https://xslt.rip">https://xslt.rip</a></p><p>
而且XSLT虽然用的人占比也许不高但从总量上应该还是挺多的除了用XSLT美化博客订阅的甚至还有用<a href="https://github.com/vgr-land/vgr-xslt-blog-framework">XSLT作为博客框架的</a>,另外还有一些人提出<a href="https://github.com/whatwg/html/issues/11582">一部分政府网站也有使用XSLT</a></p><p>
不过Freed看起来对这件事早有准备他做了一个<a href="https://github.com/mfreed7/xslt_polyfill">Polyfill库</a>通过WASM的方式让XSLT可以正常工作为了方便大家使用这个库我顺手给CDNJS发了个<a href="https://github.com/cdnjs/packages/pull/2118">PR</a>以后可以用CDN引用它了。不过使用这个库的前提是需要在订阅中加一段引用JS的代码像我博客中的Atom订阅用的是<a href="https://github.com/jekyll/jekyll-feed">jekyll-feed</a>插件,里面的格式都是写死的,就用不了了…… </p><p>
只不过现在已经没办法阻止谷歌了……而且其他浏览器也表示会跟进,看来我们唯一能做的就是去适应了。</p>
<h1 id="没有xslt之后的美化方案">
<a href="#没有xslt之后的美化方案"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 没有XSLT之后的美化方案
</h1>
<h2 id="纯css">
<a href="#纯css"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 纯CSS
</h2>
<p>虽然XSLT不能用但不代表<code class="language-plaintext highlighter-rouge">xml-stylesheet</code>指令就不能用了除了XSLT之外<code class="language-plaintext highlighter-rouge">xml-stylesheet</code>同样可以引用CSS。只是似乎完全没见过用CSS美化订阅源的也许是因为光用CSS能做到的事比较少吧想用CSS给XML文档加链接之类的估计就做不到了。 </p><p>
但目前能选择的也不多了既然大家都没写过用CSS美化订阅源那就让我来写一个吧然而我并不会写😅……那就只好让AI来写了我把需求说清楚之后AI就写出来了<a href="/assets/css/feed.css">feed.css</a>。试了一下效果还挺不错的我让AI写的这个版本无论是RSS还是Atom都可以使用如果有人感兴趣可以拿去用。可惜我的Atom订阅因为用的是插件的原因用不了😭只能加到用纯Liquid实现的RSS订阅上了。 </p><p>
但用纯CSS的缺点也很明显没办法操作文档的内容像修改日期格式的就做不了了而且也不能添加超链接……XML的标签本身对浏览器来说并没有内建的语义正常情况下也没法让浏览器把某个标签当作超链接。那难道就没办法了吗</p>
<h2 id="混合xhtml">
<a href="#混合xhtml"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 混合XHTML
</h2>
<p>如果完全不能修改XML内容那确实就没有办法了但如果能修改XML的内容那还是有办法的简单来说就是混入XHTML事实上Freed编写的Polyfill库原理上也是利用了XHTML只要在能作为XHTML的标签中添加XHTML的命名空间那么浏览器就可以理解它的语义并渲染像刚刚用纯CSS美化的订阅没有链接那就可以在根元素中添加命名空间<code class="language-plaintext highlighter-rouge">xmlns:xhtml="http://www.w3.org/1999/xhtml"</code>,然后在合适的位置写:</p>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;xhtml:a</span> <span class="na">href=</span><span class="s">"https://example.com"</span><span class="nt">&gt;</span>Read more -<span class="ni">&amp;gt;</span><span class="nt">&lt;/xhtml:a&gt;</span>
</code></pre></div></div>
<p>就可以了。只是这样有个缺点,这样写的订阅文件不够“纯粹”,用验证器验证会显示“<a href="https://validator.w3.org/feed/docs/warning/MisplacedXHTMLContent.html">Misplaced XHTML content</a>”警告。对有洁癖的人来说可能会有点难受😆。 </p><p>
不过如果能接受这种“不纯粹”,那么其实<code class="language-plaintext highlighter-rouge">xml-stylesheet</code>指令也没必要了,<code class="language-plaintext highlighter-rouge">link</code>标签一样可以用,包括<code class="language-plaintext highlighter-rouge">script</code>也是,所以有人写了一个<a href="https://github.com/dfabulich/style-xml-feeds-without-xslt">不使用XSLT美化XML</a>的库。 </p><p>
只不过这种方法和XSLT相比还是有一些缺陷要知道XSLT的本质是转换是把XML转换为HTML也就是说转出来的文档本质是HTML所有的DOM操作都和操作HTML是完全相同的但是在XML里混入XHTML标签就不一样了它的本质依然是XML文档只是嵌入了XHTML命名空间下的元素所以相应的DOM操作会有一些不同。如果是自己写的纯JS可能还好如果是用了jQuery之类假定DOM为HTML的库就会出现问题了因此这也就是那个Polyfill库的局限性用正常的XSLT执行<code class="language-plaintext highlighter-rouge">document.constructor</code>会显示<code class="language-plaintext highlighter-rouge">HTMLDocument</code>而用这个Polyfill库执行完则是显示<code class="language-plaintext highlighter-rouge">XMLDocument</code>。因此直接套用为浏览器原生XSLT编写的旧样式文件就有可能会出问题但如果要考虑改XSLT的话那还不如重新写JS然后用XHTML引入呢。</p>
<h1 id="感想">
<a href="#感想"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 感想
</h1>
<p>虽然有一些技术会因为各种各样的原因消失,但这不代表我们就要妥协一些东西,总有一些不同的技术可以解决相同的问题,所以我们只需要用其他的技术去实现就好了。不过这也是没办法的事情,毕竟没人能改变浏览器厂商们的决策啊😂。</p></main>
<small style="display: block">tags: <a rel="category tag" class="p-category" href="/search.html?keyword=XML"><em>XML</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=Feed"><em>Feed</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=XSLT"><em>XSLT</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=%E7%BE%8E%E5%8C%96"><em>美化</em></a> <span style="float: right;"><a href="https://gitlab.com/mayx/mayx.gitlab.io/tree/master/_posts/2026-02-08-xslt.md">查看原始文件</a></span></small>
<h4 style="border-bottom: 1px solid #e5e5e5;margin: 2em 0 5px;">推荐文章</h4>
<p id="suggest-container">Loading...</p>
<script>
var suggest = $("#suggest-container");
$.get(BlogAPI + "/suggest?id=/2026/02/08/xslt.html&update=" + lastUpdated.valueOf(), function (data) {
if (data.length) {
getSearchJSON(function (search) {
suggest.empty();
var searchMap = {};
for (var i = 0; i < search.length; i++) {
searchMap[search[i].url] = search[i];
}
var tooltip = $('<div class="content-tooltip"></div>').appendTo('body').hide();
for (var j = 0; j < data.length; j++) {
var item = searchMap[data[j].id];
if (item) {
var link = $('<a href="' + item.url + '">' + item.title + '</a>');
var contentPreview = item.content.substring(0, 100);
if (item.content.length > 100) {
contentPreview += "……";
}
link.hover(
function(e) {
tooltip.text($(this).data('content'))
.css({
top: e.pageY + 10,
left: e.pageX + 10
})
.show();
},
function() {
tooltip.hide();
}
).mousemove(function(e) {
tooltip.css({
top: e.pageY + 10,
left: e.pageX + 10
});
}).data('content', contentPreview);
suggest.append(link);
suggest.append(' - ' + item.date + '<br />');
}
}
});
} else {
suggest.html("暂无推荐文章……");
}
});
</script>
<br />
<div class="pagination">
<span class="prev">
<a href="/2026/01/01/summary.html">
上一篇:年终总结
</a>
</span>
<br />
<span class="next">
<a href="/2026/03/01/llm3.html">
下一篇近期LLM的部署与应用经历(3)
</a>
</span>
</div>
<!--[if !IE]> -->
<link rel="stylesheet" href="/assets/css/gitalk.css">
<script src="/assets/js/gitalk.min.js"></script>
<div id="gitalk-container"></div>
<script>
var gitalk = new Gitalk({
clientID: '36557aec4c3cb04f7ac6',
clientSecret: 'ac32993299751cb5a9ba81cf2b171cca65879cdb',
repo: 'mabbs.github.io',
owner: 'Mabbs',
admin: ['Mabbs'],
id: '/2026/02/08/xslt', // Ensure uniqueness and length less than 50
distractionFreeMode: false, // Facebook-like distraction free mode
proxy: "https://cors-anywhere.mayx.eu.org/?https://github.com/login/oauth/access_token"
})
gitalk.render('gitalk-container')
</script>
<!-- <![endif]-->
</section>
<!--[if !IE]> -->
<div id="landlord" style="left:5px;bottom:0px;">
<div class="message" style="opacity:0"></div>
<canvas id="live2d" width="500" height="560" class="live2d"></canvas>
<div class="live_talk_input_body">
<form id="live_talk_input_form">
<div class="live_talk_input_name_body" >
<input type="checkbox" id="load_this" />
<input type="hidden" id="post_id" value="/2026/02/08/xslt.html" />
<label for="load_this">
<span style="font-size: 11px; color: #fff;">&#160;想问这篇文章</span>
</label>
</div>
<div class="live_talk_input_text_body">
<input name="talk" type="text" class="live_talk_talk white_input" id="AIuserText" autocomplete="off" placeholder="要和我聊什么呀?" />
<button type="submit" class="live_talk_send_btn" id="talk_send">发送</button>
</div>
</form>
</div>
<input name="live_talk" id="live_talk" value="1" type="hidden" />
<div class="live_ico_box" style="display:none;">
<div class="live_ico_item type_info" id="showInfoBtn"></div>
<div class="live_ico_item type_talk" id="showTalkBtn"></div>
<div class="live_ico_item type_music" id="musicButton"></div>
<div class="live_ico_item type_youdu" id="youduButton"></div>
<div class="live_ico_item type_quit" id="hideButton"></div>
<input name="live_statu_val" id="live_statu_val" value="0" type="hidden" />
<audio src="" style="display:none;" id="live2d_bgm" data-bgm="0" preload="none"></audio>
<input id="duType" value="douqilai" type="hidden" />
</div>
</div>
<div id="open_live2d">召唤伊斯特瓦尔</div>
<!-- <![endif]-->
<footer>
<p>
<small>Made with ❤ by Mayx<br />Last updated at 2026-03-27 17:18:48<br /> 总字数621775 - 文章数180 - <a href="/rss.xml">Feed</a> - <a href="/README.html" >About</a></small>
</p>
</footer>
</div>
<script src="/assets/js/scale.fix.js"></script>
<!--[if !IE]> -->
<script src="/assets/js/main_new.js"></script>
<script src="/Live2dHistoire/live2d/js/live2d.js"></script>
<script src="/Live2dHistoire/live2d/js/message.js"></script>
<!-- <![endif]-->
</body>
</html>

337
2026/03/01/llm3.html Normal file
View File

@@ -0,0 +1,337 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>近期LLM的部署与应用经历(3) | Mayx的博客</title>
<meta name="generator" content="Jekyll v3.9.5" />
<meta property="og:title" content="近期LLM的部署与应用经历(3)" />
<meta name="author" content="mayx" />
<meta property="og:locale" content="zh_CN" />
<meta name="description" content="用更多的方式探索AI" />
<meta property="og:description" content="用更多的方式探索AI" />
<meta property="og:site_name" content="Mayx的博客" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2026-03-01T00:00:00+08:00" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="近期LLM的部署与应用经历(3)" />
<meta name="google-site-verification" content="huTYdEesm8NaFymixMNqflyCp6Jfvd615j5Wq1i2PHc" />
<meta name="msvalidate.01" content="0ADFCE64B3557DC4DC5F2DC224C5FDDD" />
<meta name="yandex-verification" content="fc0e535abed800be" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"mayx"},"dateModified":"2026-03-01T00:00:00+08:00","datePublished":"2026-03-01T00:00:00+08:00","description":"用更多的方式探索AI","headline":"近期LLM的部署与应用经历(3)","mainEntityOfPage":{"@type":"WebPage","@id":"/2026/03/01/llm3.html"},"publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://avatars0.githubusercontent.com/u/17966333"},"name":"mayx"},"url":"/2026/03/01/llm3.html"}</script>
<!-- End Jekyll SEO tag -->
<link rel="canonical" href="https://mabbs.github.io/2026/03/01/llm3.html" />
<link type="application/atom+xml" rel="alternate" href="/atom.xml" title="Mayx的博客" />
<link rel="alternate" type="application/rss+xml" title="Mayx的博客(RSS)" href="/rss.xml" />
<link rel="alternate" type="application/json" title="Mayx的博客(JSON Feed)" href="/feed.json" />
<link rel="stylesheet" href="/assets/css/style.css?v=1774603128" />
<!--[if !IE]> -->
<link rel="stylesheet" href="/Live2dHistoire/live2d/css/live2d.css" />
<!-- <![endif]-->
<link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Mayx的博客" />
<link rel="webmention" href="https://webmention.io/mabbs.github.io/webmention" />
<link rel="pingback" href="https://webmention.io/mabbs.github.io/xmlrpc" />
<link rel="preconnect" href="https://summary.mayx.eu.org" crossorigin="anonymous" />
<link rel="prefetch" href="https://www.blogsclub.org/badge/mabbs.github.io" as="image" />
<link rel="blogroll" type="text/xml" href="/blogroll.opml" />
<link rel="me" href="https://github.com/Mabbs" />
<script src="/assets/js/jquery.min.js"></script>
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<script>
var lastUpdated = new Date("Fri, 27 Mar 2026 17:18:48 +0800");
var BlogAPI = "https://summary.mayx.eu.org";
</script>
<script src="/assets/js/main.js"></script>
<!--[if !IE]> -->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async="async" src="https://www.googletagmanager.com/gtag/js?id=UA-137710294-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-137710294-1');
</script>
<script src="/assets/js/instant.page.js" type="module"></script>
<!-- <![endif]-->
</head>
<body>
<!--[if !IE]> --><noscript><marquee style="top: -15px; position: relative;"><small>发现当前浏览器没有启用JavaScript这不影响你的浏览但可能会有一些功能无法使用……</small></marquee></noscript><!-- <![endif]-->
<!--[if IE]><marquee style="top: -15px; position: relative;"><small>发现当前浏览器为Internet Explorer这不影响你的浏览但可能会有一些功能无法使用……</small></marquee><![endif]-->
<div class="wrapper">
<header class="h-card">
<h1><a class="u-url u-uid p-name" rel="me" href="/">Mayx的博客</a></h1>
<img src="https://avatars0.githubusercontent.com/u/17966333" fetchpriority="high" class="u-photo" alt="Logo" style="width: 90%; max-width: 300px; max-height: 300px; border-radius: 25%;" />
<p class="p-note">Mayx's Home Page</p>
<form action="/search.html">
<input type="text" name="keyword" id="search-input-all" placeholder="Search blog posts.." />&#160;<input type="submit" value="搜索" />
</form>
<br />
<p class="view"><a class="u-url" href="/Mabbs/">About me</a></p>
<ul class="downloads">
<li style="width: 270px; border-right: none;"><a href="/MayxBlog.tgz">Download <strong>TGZ File</strong></a></li>
</ul>
</header>
<section class="h-entry">
<small><time class="date dt-published" datetime="2026-03-01T00:00:00+08:00">1 March 2026</time> - 字数统计3325 - 阅读大约需要10分钟 - Hits: <span id="/2026/03/01/llm3.html" class="visitors">Loading...</span></small>
<h1 class="p-name">近期LLM的部署与应用经历(3)</h1>
<p class="view">by <a class="p-author h-card" href="//github.com/Mabbs">mayx</a></p>
<div id="outdate" style="display:none;">
<hr /><p>
这是一篇创建于 <span id="outime"></span> 天前的文章,其中的信息可能已经有所发展或是发生改变。
</p>
</div>
<script>
daysold = Math.floor((new Date().getTime() - new Date("Sun, 01 Mar 2026 00:00:00 +0800").getTime()) / (24 * 60 * 60 * 1000));
if (daysold > 90) {
document.getElementById("outdate").style.display = "block";
document.getElementById("outime").innerHTML = daysold;
}
</script>
<hr />
<b>AI摘要</b>
<p id="ai-output">这篇文章介绍了作者近期在LLM部署和应用方面的经历主要包括以下几个方面
首先作者升级硬件从单张RTX4090 48GiB升级到双路RTX4090 48GiB并购买了TRX40+TR 3960X的主板套装用于运行GPT-OSS模型。随后作者尝试使用vLLM框架替换Ollama并成功配置了GPT-OSS模型达到了接近190Tps的性能。
其次作者体验了DeepSeek 1M上下文模型发现其在处理长上下文任务时表现出色能够展现摘要无法捕捉的细节并成功生成简历、分析人格等。
此外作者还尝试使用DeepSeek重构Mabbs并发现DeepSeek能够识别作者的博客信息这表明训练样本中包含了作者的信息。
最后作者在8GiB内存的MacBook Pro上运行了LFM2.5-1.2B-Thinking模型并使用了Apollo软件体验了其快速的推理速度和良好的思考能力。作者总结认为AI的发展令人惊叹软件优化使其在有限硬件环境下也能运行。</p>
<hr />
<ul><li><a href="#起因">起因</a></li><li><a href="#在两张rtx4090-48g上运行gpt-oss">在两张RTX4090 48G上运行GPT-OSS</a></li><li><a href="#最近deepseek-1m上下文的使用体验">最近DeepSeek 1M上下文的使用体验</a></li><li><a href="#在8gib内存的macbook运行的新模型">在8GiB内存的MacBook运行的新模型</a></li><li><a href="#感想">感想</a></li></ul>
<hr />
<main class="post-content e-content" role="main"><p>用更多的方式探索AI<!--more--></p>
<h1 id="起因">
<a href="#起因"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 起因
</h1>
<p>在一年前,我<a href="/2025/02/22/llm.html">整了张RTX4090 48GiB魔改版</a>用来跑DeepSeek-R1 70B的4bit量化模型不过都已经过了这么长时间这个模型也已经是过时的东西了……我之前在<a href="/2025/05/07/mac-studio.html">Mac Studio M3 Ultra</a>上试了一下OpenAI在半年前出的gpt-oss-120b模型感觉效果还挺不错只不过因为M3 Ultra的GPU实际性能比不上正经高端的独显所以它在上下文很长的情况下还是有点慢因此我又整了张RTX4090 48GiB想整个双路试试更快的GPT-OSS模型总共96GiB的显存应该够跑这个模型了。</p>
<h1 id="在两张rtx4090-48g上运行gpt-oss">
<a href="#在两张rtx4090-48g上运行gpt-oss"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 在两张RTX4090 48G上运行GPT-OSS
</h1>
<p>既然现在我手头有两张4090了那继续用i5-8400处理器的主机似乎不太合适主要是那个主板就一个PCIe插槽想插两张显卡也做不到那买个新的不知道买啥……不管怎么说既然用这么高级的显卡至少得让它跑满。在两张显卡上跑模型似乎卡间的通信速度比较重要那最起码得整个支持2个PCIe4.0 x16的板U套装才行这种级别的没有消费级产品只能考虑服务器或工作站了。不过我对服务器和工作站了解得并不多所以就问了问AI哪个支持2个PCIe4.0 x16的平台最便宜结果AI推荐了TRX40+<a href="https://www.amd.com/zh-cn/support/downloads/drivers.html/processors/ryzen-threadripper/ryzen-threadripper-3000-series/amd-ryzen-threadripper-3960x.html">TR 3960X</a>于是就按照AI的说法整了一套。 </p><p>
这套板U差不多4000CNY价格倒是还行如果买现役的估计主板都比显卡贵了。但后来我发现这个并不是最便宜的😂搜了一下买寨版+<a href="https://www.amd.com/zh-cn/support/downloads/drivers.html/processors/epyc/epyc-7002-series/amd-epyc-7502.html">EPYC 7502</a>还能再便宜1000CNY而且通道数更多插4张显卡都没问题……不过买都买了就先用吧看来AI的话不能随便信😥。 </p><p>
之前我跑模型为了方便,基本上都用的是<a href="https://github.com/ollama/ollama">Ollama</a>不过听说Ollama多卡运行的效率很低而且多并发的效果不太好所以这次换了新电脑之后我想试试<a href="https://github.com/vllm-project/vllm">vLLM</a>据说一般生产级的AI都用的是这个框架。 </p><p>
安装vLLM倒是比想象得简单很多直接一句<code class="language-plaintext highlighter-rouge">pip install vllm</code>就可以了其实并没有比Ollama复杂多少。我看了一下<a href="https://developers.openai.com/cookbook/articles/gpt-oss/run-vllm/">OpenAI</a><a href="https://docs.vllm.ai/projects/recipes/en/latest/OpenAI/GPT-OSS.html">vLLM</a>运行GPT-OSS的官方文档发现启动也非常简单一般来说直接执行<code class="language-plaintext highlighter-rouge">vllm serve openai/gpt-oss-120b</code>就可以。不过直接执行是对于单卡的,我用两张卡需要加个<code class="language-plaintext highlighter-rouge">--tensor-parallel-size 2</code>参数启用张量并行不然会爆显存。另外考虑到这个模型本身占掉60多GiB的显存之后剩下30GiB还是看起来有点少所以额外加了个<code class="language-plaintext highlighter-rouge">--kv-cache-dtype fp8</code>参数降低上下文对显存的占用毕竟模型本身也就是4bit量化的加了这个应该不会对它的能力有什么影响。除此之外AI还给我推荐了个<code class="language-plaintext highlighter-rouge">--enable-chunked-prefill</code>参数,说是也能避免爆显存的问题。 </p><p>
一切准备好之后直接执行,程序就自动开始下载模型了,过了几个小时,终于下载完成,顺便一说启动的时候还显示推荐安装<code class="language-plaintext highlighter-rouge">torch_c_dlpack_ext</code>虽然不知道是干啥的但也顺手安装了。启动完成之后我试了一下效果非常好不并发的情况下直接用能达到接近190Tps可以说是相当快了而且这个模型的水平也算是开源中的上游水平应该算是又快又好吧……看来多来一张4090还是挺划算嘛。只不过这个东西基本上就我一个人用所以也没什么能测一下并发的场景……虽然很快但还是有点浪费性能吧。</p>
<h1 id="最近deepseek-1m上下文的使用体验">
<a href="#最近deepseek-1m上下文的使用体验"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 最近DeepSeek 1M上下文的使用体验
</h1>
<p>前段时间DeepSeek又出了新的模型最高可以支持1M长的上下文而且听说模型规模变小了所以速度也很快。可惜的是到目前为止还没有开放权重。当然就算开放权重了用2张4090估计也没有足够的显存分配给上下文至于Mac Studio感觉在长上下文的情况下运行速度应该会很慢…… </p><p>
不过我对这个1M上下文还是挺感兴趣因为好久之前我写过一篇<a href="/2025/04/22/ai-limit.html">关于LLM能力上限</a>的文章在那篇文章中其实我遇到的问题基本上也就是由上下文不足导致的。那既然现在DeepSeek支持了1M的上下文那我就应该试试之前因为局限性而妥协的一些东西了。 </p><p>
这次我没有用摘要,而是直接把包含整个博客内容的<a href="/search.json">search.json</a>文件上传到DeepSeek然后向它问了问我的一些问题。试了一下效果非常不错用摘要会省略的一些细节它基本上都可以展现出来我试了试让它给我生成一份简历它甚至在所有文章中找到了我的博客地址、GitHub和邮箱地址之前用摘要显然是做不到这一点的这个长上下文还是挺有用啊。 </p><p>
另外我还试了试让它根据文章内容分析十六型人格,并且我自己去答了一遍那个测试,结果也是相同的,说明它真的是在几秒内就读完了我的所有文章而且也完全理解了,真的是非常厉害。 </p><p>
只是拿AI分析我的文章也许只有我自己了😂实际上根本没人对我感兴趣也就只有我自己拿来给自己看……当然如果我的博客能比我活得长不知道会不会有未来人会对我感兴趣呢……总之对于现在肯定是毫无意义了。 </p><p>
除了这些之外我又试了一下让DeepSeek重构我的<a href="https://github.com/Mabbs/Mabbs.Project">Mabbs</a>这次生成效果看起来很不错了虽然代码我没细看不确定能不能运行但至少没有偷懒只写一点点一口气写了80KiB多的代码这也是长上下文带来的好处吧。总之目前这个长上下文的DeepSeek也算是突破了之前我认为的上限看来LLM真的是前景无限啊。 </p><p>
另外我发现这次更新的DeepSeek居然了解我的博客我问了一下它“你知道Mayx的博客是哪个博客吗它居然知道能说出域名而且还知道我的博客是关于技术的😎看来这次的训练样本中包含我的信息啊……所以我对这次的更新也挺有好感毕竟我的知识如果能成为AI的一部分也算是一种永恒吧。</p>
<h1 id="在8gib内存的macbook运行的新模型">
<a href="#在8gib内存的macbook运行的新模型"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 在8GiB内存的MacBook运行的新模型
</h1>
<p>在3年前我在<a href="/2023/04/05/ai.html">探索AI</a>在我只有8GiB内存的<a href="/2023/02/03/mbp.html">MacBook Pro</a>上运行了非常早期的LLM——Alpaca-7B那时候7B的LLM虽然能回答一些问题但答非所问的情况也非常多。不过最近我发现了一个有意思的LLM叫做<a href="https://huggingface.co/LiquidAI/LFM2.5-1.2B-Thinking">LFM2.5-1.2B-Thinking</a>它只用了12亿的参数就有思维链而且水平据说还挺强。这么长时间过去之后我倒也想看看我的MacBook能运行多聪明的模型所以就试着跑了一下它。 </p><p>
运行它也很容易一般用Ollama就可以但是Ollama只有TUI不能渲染Markdown我也不太想在我的Mac上整WebUI之类的东西……那有什么好的选择吗我去制作这个模型的公司官网看了一下他们制作这个模型本就是为了在端侧运行所以也专门制作了一个软件运行他们的模型叫做<a href="https://www.liquid.ai/apollo">Apollo</a>在手机和Mac上都可以用。我在我的Mac上安装试了一下效果很好首先速度非常快8bit量化正常情况下可以达到60多Tps即使是省电模式也能达到20多Tps。另外加上思维链它的思考能力也还不错虽然一些脑筋急转弯的题不算擅长但是正常对话回答问题之类的表现都很不错相比于之前7B的模型表现好太多了。当然考虑到都已经过去3年了能有这样的进步也很正常不过12亿参数就能有这样的智能还是相当可以啊。 </p><p>
这个模型之所以有这样的能力似乎是因为他们并不完全是Transformer架构而是使用的一种叫做LFM2的混合架构按照大家对他们公司Liquid AI以及这个架构名字的理解可能会觉得这个模型基于液态神经网络不过我让AI看了一下他们的代码似乎并不是他们用的是一种类似于Mamba的架构这种架构似乎就很擅长在小参数的模型下比Transformer模型表现的更好所以说这种变化也是算法进步带来的。 </p><p>
顺便一说这个Apollo除了运行他们自己的模型之外也能连接其他兼容OpenAI接口的模型正好可以用来连接我的GPT-OSS这样我就可以不需要下载一些浏览器套壳的重型应用来用我的模型了😝。</p>
<h1 id="感想">
<a href="#感想"><svg class='octicon' viewBox='0 0 16 16' version='1.1' width='16' height='32' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg></a> 感想
</h1>
<p>自从ChatGPT之后AI的发展真是越来越强了而且能看出来目前甚至并不需要多新多好的硬件就能让一般人获得还不错的智能当然训练也许还是要大量的硬件这么看来AI软件的发展还是相当有潜力。目前来看既然优化软件就能做得越来越好那也许在有限的硬件环境下可以期待无限的智能吧。</p></main>
<small style="display: block">tags: <a rel="category tag" class="p-category" href="/search.html?keyword=AI"><em>AI</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=LLM"><em>LLM</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=%E6%A8%A1%E5%9E%8B%E9%83%A8%E7%BD%B2"><em>模型部署</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=%E4%BD%BF%E7%94%A8%E4%BD%93%E9%AA%8C"><em>使用体验</em></a> <span style="float: right;"><a href="https://gitlab.com/mayx/mayx.gitlab.io/tree/master/_posts/2026-03-01-llm3.md">查看原始文件</a></span></small>
<h4 style="border-bottom: 1px solid #e5e5e5;margin: 2em 0 5px;">推荐文章</h4>
<p id="suggest-container">Loading...</p>
<script>
var suggest = $("#suggest-container");
$.get(BlogAPI + "/suggest?id=/2026/03/01/llm3.html&update=" + lastUpdated.valueOf(), function (data) {
if (data.length) {
getSearchJSON(function (search) {
suggest.empty();
var searchMap = {};
for (var i = 0; i < search.length; i++) {
searchMap[search[i].url] = search[i];
}
var tooltip = $('<div class="content-tooltip"></div>').appendTo('body').hide();
for (var j = 0; j < data.length; j++) {
var item = searchMap[data[j].id];
if (item) {
var link = $('<a href="' + item.url + '">' + item.title + '</a>');
var contentPreview = item.content.substring(0, 100);
if (item.content.length > 100) {
contentPreview += "……";
}
link.hover(
function(e) {
tooltip.text($(this).data('content'))
.css({
top: e.pageY + 10,
left: e.pageX + 10
})
.show();
},
function() {
tooltip.hide();
}
).mousemove(function(e) {
tooltip.css({
top: e.pageY + 10,
left: e.pageX + 10
});
}).data('content', contentPreview);
suggest.append(link);
suggest.append(' - ' + item.date + '<br />');
}
}
});
} else {
suggest.html("暂无推荐文章……");
}
});
</script>
<br />
<div class="pagination">
<span class="prev">
<a href="/2026/02/08/xslt.html">
上一篇在Google杀死XSLT之后的XML美化方案
</a>
</span>
<br />
</div>
<!--[if !IE]> -->
<link rel="stylesheet" href="/assets/css/gitalk.css">
<script src="/assets/js/gitalk.min.js"></script>
<div id="gitalk-container"></div>
<script>
var gitalk = new Gitalk({
clientID: '36557aec4c3cb04f7ac6',
clientSecret: 'ac32993299751cb5a9ba81cf2b171cca65879cdb',
repo: 'mabbs.github.io',
owner: 'Mabbs',
admin: ['Mabbs'],
id: '/2026/03/01/llm3', // Ensure uniqueness and length less than 50
distractionFreeMode: false, // Facebook-like distraction free mode
proxy: "https://cors-anywhere.mayx.eu.org/?https://github.com/login/oauth/access_token"
})
gitalk.render('gitalk-container')
</script>
<!-- <![endif]-->
</section>
<!--[if !IE]> -->
<div id="landlord" style="left:5px;bottom:0px;">
<div class="message" style="opacity:0"></div>
<canvas id="live2d" width="500" height="560" class="live2d"></canvas>
<div class="live_talk_input_body">
<form id="live_talk_input_form">
<div class="live_talk_input_name_body" >
<input type="checkbox" id="load_this" />
<input type="hidden" id="post_id" value="/2026/03/01/llm3.html" />
<label for="load_this">
<span style="font-size: 11px; color: #fff;">&#160;想问这篇文章</span>
</label>
</div>
<div class="live_talk_input_text_body">
<input name="talk" type="text" class="live_talk_talk white_input" id="AIuserText" autocomplete="off" placeholder="要和我聊什么呀?" />
<button type="submit" class="live_talk_send_btn" id="talk_send">发送</button>
</div>
</form>
</div>
<input name="live_talk" id="live_talk" value="1" type="hidden" />
<div class="live_ico_box" style="display:none;">
<div class="live_ico_item type_info" id="showInfoBtn"></div>
<div class="live_ico_item type_talk" id="showTalkBtn"></div>
<div class="live_ico_item type_music" id="musicButton"></div>
<div class="live_ico_item type_youdu" id="youduButton"></div>
<div class="live_ico_item type_quit" id="hideButton"></div>
<input name="live_statu_val" id="live_statu_val" value="0" type="hidden" />
<audio src="" style="display:none;" id="live2d_bgm" data-bgm="0" preload="none"></audio>
<input id="duType" value="douqilai" type="hidden" />
</div>
</div>
<div id="open_live2d">召唤伊斯特瓦尔</div>
<!-- <![endif]-->
<footer>
<p>
<small>Made with ❤ by Mayx<br />Last updated at 2026-03-27 17:18:48<br /> 总字数621775 - 文章数180 - <a href="/rss.xml">Feed</a> - <a href="/README.html" >About</a></small>
</p>
</footer>
</div>
<script src="/assets/js/scale.fix.js"></script>
<!--[if !IE]> -->
<script src="/assets/js/main_new.js"></script>
<script src="/Live2dHistoire/live2d/js/live2d.js"></script>
<script src="/Live2dHistoire/live2d/js/message.js"></script>
<!-- <![endif]-->
</body>
</html>