Files
pages/2026/03/01/llm3.html
2026-03-13 17:15:19 +00:00

337 lines
26 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

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

<!DOCTYPE html>
<html lang="zh-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=1773422113" />
<!--[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("Sat, 14 Mar 2026 01:15:13 +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;" />
<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=模型部署"><em>模型部署</em></a> - <a rel="category tag" class="p-category" href="/search.html?keyword=使用体验"><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-14 01:15:13<br /> 总字数621774 - 文章数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>