PageSourceSearch

https://lyy0323.space/tech/projects/neo-classic/

html lyy0323.space collected 2026-10-03 23:20:27 UTC 26,727 bytes, 37 lines download raw bytes

1<!DOCTYPE html><html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="给国学社首页做的猜诗小游戏,翻个面就变成了测 LLM 的 benchmark。用 30 位当代诗人的 1,406 首作品,证明大模型在「背诗」而不是「懂诗」。ACL 2026 Oral。"><link rel="icon" type="image/png" href="/favicon.png"><title>Neo-Classic · 古典诗词 LLM 评测基准 · Tech</title><link rel="stylesheet" href="/_astro/index.1U9FhC2v.css">
2<link rel="stylesheet" href="/_astro/index.DrBanjAV.css"></head> <body class="grid-bg scanline pb-12">  <main class="min-h-screen px-4 sm:px-6 py-12 sm:py-20 max-w-3xl mx-auto"> <div class="mb-8 text-xs text-terminal-muted"> <a href="/" class="link-glow">~</a> <span class="mx-1">/</span> <a href="/tech/" class="link-glow">tech</a> <span class="mx-1">/</span> <a href="/tech/projects/" class="link-glow">projects</a> <span class="mx-1">/</span> <span class="text-terminal-text">neo-classic</span> </div> <div class="terminal-window mb-8"> <div class="terminal-header"> <div class="terminal-dot bg-red-500"></div> <div class="terminal-dot bg-yellow-500"></div> <div class="terminal-dot bg-green-500"></div> <span class="ml-3 text-xs text-terminal-muted">neo-classic/index.mdx</span> </div> <div class="p-5 sm:p-6"> <div class="mb-4"> <span class="prompt-symbol">❯ </span> <span class="cmd-text">cat index.mdx</span> </div> <div class="flex items-start gap-3 mb-4"> <span class="text-2xl">📊</span> <div> <h1 class="text-lg font-semibold text-terminal-amber font-lxgw"> Neo-Classic · 古典诗词 LLM 评测基准 </h1> <p class="text-sm text-terminal-muted font-lxgw mt-1"> 给国学社首页做的猜诗小游戏,翻个面就变成了测 LLM 的 benchmark。用 30 位当代诗人的 1,406 首作品,证明大模型在「背诗」而不是「懂诗」。ACL 2026 Oral。 </p> </div> </div> <div class="flex flex-wrap gap-4 text-xs border-t border-terminal-border pt-4 mb-4"> <div> <span class="text-terminal-muted">status: </span> <span class="text-terminal-green">● Active</span> </div> <div> <span class="text-terminal-muted">date: </span> <span class="text-terminal-text">2025-11</span> </div> <div> <span class="text-terminal-muted">category: </span> <span class="text-terminal-cyan">data</span> </div> </div> <div class="flex flex-wrap gap-1.5 mb-4"> <span class="text-[10px] px-1.5 py-0.5 rounded border border-terminal-border bg-terminal-bg text-terminal-cyan/70"> NLP </span><span class="text-[10px] px-1.5 py-0.5 rounded border border-terminal-border bg-terminal-bg text-terminal-cyan/70"> LLM </span><span class="text-[10px] px-1.5 py-0.5 rounded border border-terminal-border bg-terminal-bg text-terminal-cyan/70"> Benchmark </span><span class="text-[10px] px-1.5 py-0.5 rounded border border-terminal-border bg-terminal-bg text-terminal-cyan/70"> ACL </span><span class="text-[10px] px-1.5 py-0.5 rounded border border-terminal-border bg-terminal-bg text-terminal-cyan/70"> Product Management </span><span class="text-[10px] px-1.5 py-0.5 rounded border border-terminal-border bg-terminal-bg text-terminal-cyan/70"> 诗词 </span> </div> <div class="flex flex-wrap gap-3 border-t border-terminal-border pt-4"> <a href="https://sjtuguoxue.space/neo-classic" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1.5 px-4 py-2 rounded border border-terminal-green/40
3                  bg-terminal-green/10 text-terminal-green text-sm font-semibold
4                  hover:bg-terminal-green/20 hover:border-terminal-green/60 transition-all duration-200"> <span>↗</span> Live Site
5</a> <a href="https://github.com/lyy0323/NEO-CLASSIC" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1.5 px-4 py-2 rounded border border-terminal-border
6                  text-terminal-cyan text-sm hover:border-terminal-cyan/40 hover:bg-terminal-cyan/5 transition-all duration-200"> <span>↗</span> Source Code
7</a> </div> </div> </div> <div class="terminal-window"> <div class="terminal-header"> <div class="terminal-dot bg-red-500"></div> <div class="terminal-dot bg-yellow-500"></div> <div class="terminal-dot bg-green-500"></div> <span class="ml-3 text-xs text-terminal-muted">README.md</span> </div> <div class="p-5 sm:p-6 prose prose-invert prose-sm max-w-none
8        prose-headings:text-terminal-amber prose-headings:font-lxgw prose-headings:font-semibold
9        prose-p:text-terminal-text prose-p:font-lxgw prose-p:leading-relaxed
10        prose-strong:text-terminal-green
11        prose-a:text-terminal-cyan prose-a:no-underline hover:prose-a:text-terminal-green
12        prose-li:text-terminal-text prose-li:font-lxgw
13        prose-code:text-terminal-pink prose-code:bg-terminal-bg prose-code:px-1 prose-code:rounded
14        prose-hr:border-terminal-border"> <h2 id="这个项目是什么">这个项目是什么</h2>
15<p>NEO-CLASSIC 是一个古典诗词的大模型评测基准,被 ACL 2026 录用为 Oral Presentation。它的核心问题是:大语言模型在诗词任务上的高分,到底是因为它真的「理解」了格律和美学,还是因为它把唐诗三百首背下来了?</p>
16<p>我们的做法是用 30 位当代诗人的 1,406 首作品构建了一个「样本外」测试集——这些诗严格遵守古典格律,但从未出现在任何训练语料中。模型在这些「没见过」的诗上表现如何,才是它真实推理能力的体现。结果是:所有 SOTA 模型在当代诗上的表现比历史诗下降了 20–50%,在律诗排序任务上更是几乎全军覆没。</p>
17<h2 id="为什么做这个">为什么做这个</h2>
18<p>这个项目的起点其实不是一个学术假设,而是<a href="/tech/projects/poem-site/">南洋吟游</a>首页的猜诗小游戏。</p>
19<p>2025 年 11 月,我给诗歌网站做了一套互动游戏来促活:猜作者、猜词牌、完形填空、诗句排序、上下
19句匹配——六种玩法,社员上课摸鱼玩得很开心。做完之后我忽然意识到:这套题目格式直接拿给模型做,不就是一个现成的 LLM 评测框架吗?</p>
20<p>正面是给人类玩家的小游戏,背面是用来测模型的 benchmark。</p>
21<p>另一个现实是——我们手头有这个数据。国学社「南洋吟游」平台运营了四年,积累了 30 位当代诗人的大量严格遵循格律的原创作品。这些诗不在任何公开语料库里,天然就是最干净的 out-of-sample 测试集。有了数据,想办法讲一个好故事发 paper,就是顺理成章的事了。</p>
22<h2 id="我做了什么">我做了什么</h2>
23<p>这个项目里我既是产品经理也是 researcher。</p>
24<p><strong>评测框架设计</strong>上,五类探针任务(猜作者、猜词牌、填空、联句匹配、诗句排序)对应古典诗词从风格到篇章的不同约束层级。其中排序任务要求模型把打乱的律诗八句还原正确顺序——随机正确率只有 1/40320 ≈ 0.002%,是对全局结构规划能力的极端测试。</p>
25<p><strong>数据建设</strong>上,要说服 30 位诗人授权自己的作品用于 AI 评测,这件事比写代码更需要信任基础。大部分诗人因为和社团的长期关系,授权很顺利。但也有例外:有一位作者明确拒绝授权任何作品,我们尊重其决定,将其全部作品从 benchmark 中剔除;还有一位作者非常担心 LLM 会把自己的风格「学走」——这个担忧和画师群体对 AI 绘画的焦虑如出一辙,只不过发生在了诗词领域。</p>
26<p><strong>
26实验执行</strong>上,跑了 8 个模型(含 API 和本地部署),41 个子任务变体,每个 2,500 题。还设计了人类专家和人类普通玩家的对照实验。</p>
27<h2 id="过程中的思考">过程中的思考</h2>
28<p>做这个研究最有意思的发现,是排序任务中模型和人类截然相反的失败模式。</p>
29<p>我们把律诗排序的正确性拆解成三个层次:韵脚正确、对仗对正确、语义顺序正确。结果发现:模型最大的瓶颈在格律约束——最强的 Gemini 也只有 59% 的韵脚通过率、55% 的对仗识别率。但一旦模型把格律部分做对了,它的语义排序能力其实不比人类差。</p>
30<p>人类专家恰好反过来:格律约束对他们来说是肌肉记忆(86% 韵脚、80% 对仗),但他们反而更容易在语义连贯性上犯错——比如搞混首联和尾联,因为这两联押同样的韵,格律上完全等价,区分它们纯靠对诗意起承转合的理解。</p>
31<p>四个模型还各有各的「认知人格」:Gemini 是刻板的规则执行者,Qwen 是反复自我怀疑的递归验证者,GPT 是口若悬河但胡编乱造的演说家,DeepSeek 是语言功底深厚但缺乏全局规划的混沌分析师。每个模型的推理链读起来都像在看一个性格鲜明的考生答卷。</p>
32<p>另一个让我感触很深的变化是模型能力的飞速进步。2024 年的模型在这些任务上基本和随机猜差不多,但到了 2025 年,Gemini-3-Pro 在专家级律诗排序提示词下做对了 36%——这是一个惊人的飞跃。模型确实在肉眼可见地变强。这篇论文衡量的是「理解」这一面;关于 AI 诗词「创作」能力的故事,那是<a href="/tech/projects/ai-poetry/">另一个项目</a>里要聊的了。</p>
33<h2 id="qa">Q&amp;A</h2>
34<details><summary>Q: 用当代诗人的作品做测试集,怎么确保没有数据泄漏?</summary><p>我们做了 7-gram 和 14-gram 的相似度检测,对比了 <code>chinese-poetry</code> 历史语料库。7-gram 只命中 9 次(63 个字符,占总量 0.09%),来自偶尔引用的经典典故;14-gram 零命中。当代诗人的作品虽然遵循古典格律,但遣词造句和意象选择都是现代的,和唐宋诗词的重合度极低。</p></details>
35<details><summary>Q: 这个项目和南洋吟游诗歌网站是什么关系?</summary><p>可以说 NEO-CLASSIC 是南洋吟游生态的一个「副产品」——但这个副产品比主站还先发了顶会。网站首页的猜诗游戏提供了评测框架的原型,平台积累的诗人作品提供了数据基础,格律校验引擎提供了自动化标注能力。这些基础设施都不是为了发论文而建的,但它们恰好在对的时间凑齐了。</p></details>
36<details><summary>Q: 「供给侧决定」的研究路线靠谱吗?</summary><p>说实话,这个项目的起点确实是「我们手头有什么数据」而不是「学术界缺什么研究」。但我觉得这反而是它的优势——真实场景下积累的高质量数据,比为了发论文刻意构造的数据集更有说服力。当代诗人的作品是活的、有温度的语料,不是合成数据或人工标注的产物。reviewer 也认可了这一点:数据的独特性和不可替代性本身就是 contribution。</p></details>
37<details><summary>Q: 做完这个研究,你觉得 AI 离真正「读懂」古典诗词还有多远?</summary><p>比我一年前想象的要近,但「近」的方向和我预期的不一样。我原以为模型的短板在语义理解——读不懂诗在写什么。但实验告诉我,模型对语义的把握其实还行,真正的瓶颈在形式约束:平仄、押韵、对仗这些看起来「机械」的规则,反而是模型最搞不定的部分。这挺反直觉的——人类觉得最「死记硬背」的东西,模型反而学不会;人类觉得最需要「灵感」的语义连贯,模型反而做得不错。</p></details> </div> </div> <div class="mt-8 text-xs text-terminal-muted"> <span class="prompt-symbol">❯ </span> <span class="cmd-text">
37cd ..</span> <span class="mx-2">·</span> <a href="/tech/" class="link-glow">← back to tech</a> </div> </main>  <style>astro-island,astro-slot,astro-static-slot{display:contents}</style>
37<script>(()=>{var e=async t=>{await(await t())()};(self.Astro||(self.Astro={})).load=e;window.dispatchEvent(new Event("astro:load"));})();</script>
37<script>(()=>{var A=Object.defineProperty;var g=(i,o,a)=>o in i?A(i,o,{enumerable:!0,configurable:!0,writable:!0,value:a}):i[o]=a;var d=(i,o,a)=>g(i,typeof o!="symbol"?o+"":o,a);{let i={0:t=>m(t),1:t=>a(t),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(a(t)),5:t=>new Set(a(t)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(t),9:t=>new Uint16Array(t),10:t=>new Uint32Array(t),11:t=>1/0*t},o=t=>{let[l,e]=t;return l in i?i[l](e):void 0},a=t=>t.map(o),m=t=>typeof t!="object"||t===null?t:Object.fromEntries(Object.entries(t).map(([l,e])=>[l,o(e)]));class y extends HTMLElement{constructor(){super(...arguments);d(this,"Component");d(this,"hydrator");d(this,"hydrate",async()=>{var b;if(!this.hydrator||!this.isConnected)return;let e=(b=this.parentElement)==null?void 0:b.closest("astro-island[ssr]");if(e){e.addEventListener("astro:hydrate",this.hydrate,{once:!0});return}let c=this.querySelectorAll("astro-slot"),n={},h=this.querySelectorAll("template[data-astro-template]");for(let r of h){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(let r of c){let s=r.closest(this.tagName);s!=null&&s.isSameNode(this)&&(n[r.getAttribute("name")||"default"]=r.innerHTML)}let p;try{p=this.hasAttribute("props")?m(JSON.parse(this.getAttribute("props"))):{}}catch(r){let s=this.getAttribute("component-url")||"<unknown>",v=this.getAttribute("component-export");throw v&&(s+=` (export ${v})`),console.error(`[hydrate] Error parsing props for component ${s}`,this.getAttribute("props"),r),r}let u;await this.hydrator(this)(this.Component,p,n,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),this.dispatchEvent(new CustomEvent("astro:hydrate"))});d(this,"unmount",()=>{this.isConnected||this.dispatchEvent(new CustomEvent("astro:unmount"))})}disconnectedCallback(){document.removeEventListener("astro:after-swap",this.unmount),document.addEventListener("astro:after-swap",this.unmount,{once:!0})}connectedCallback(){if(!this.hasAttribute("await-children")||document.readyState==="interactive"||document.readyState==="complete")this.childrenConnectedCallback();else{let e=()=>{document.removeEventListener("DOMContentLoaded",e),c.disconnect(),this.childrenConnectedCallback()},c=new MutationObserver(()=>{var n;((n=this.lastChild)==null?void 0:n.nodeType)===Node.COMMENT_NODE&&this.lastChild.nodeValue==="astro:end"&&(this.lastChild.remove(),e())});c.observe(this,{childList:!0}),document.addEventListener("DOMContentLoaded",e)}}async childrenConnectedCallback(){let e=this.getAttribute("before-hydration-url");e&&await import(e),this.start()}async start(){let e=JSON.parse(this.getAttribute("opts")),c=this.getAttribute("client");if(Astro[c]===void 0){window.addEventListener(`astro:${c}`,()=>this.start(),{once:!0});return}try{await Astro[c](async()=>{let n=this.getAttribute("renderer-url"),[h,{default:p}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),u=this.getAttribute("component-export")||"default";if(!u.includes("."))this.Component=h[u];else{this.Component=h;for(let f of u.split("."))this.Component=this.Component[f]}return this.hydrator=p,this.hydrate},e,this)}catch(n){console.error(`[astro-island] Error hydrating ${this.getAttribute("component-url")}`,n)}}attributeChangedCallback(){this.hydrate()}}d(y,"observedAttributes",["props"]),customElements.get("astro-island")||customElements.define("astro-island",y)}})();</script>
37<astro-island uid="Z1vE0Fn" prefix="r1" component-url="/_astro/InteractiveTerminal.DFz7gwtr.js" component-export="default" renderer-url="/_astro/client.BKmgAojr.js" props="{&quot;projects&quot;:[1,[[0,{&quot;slug&quot;:[0,&quot;ai-poetry&quot;],&quot;title&quot;:[0,&quot;天权 · 古典诗词生成 Agent&quot;],&quot;description&quot;:[0,&quot;用 85 万首古诗词语料微调 Qwen3,搭了一个三模型协作的 Poetry Agent(生成 + 推敲 + 校验),格律正确率从单模型 58% 拉到 95%。现在在测试 training-free 方案——用新一代基模 + 格律 harness 直接约束解码。&quot;],&quot;category&quot;:[0,&quot;agent&quot;],&quot;tags&quot;:[1,[[0,&quot;LLM&quot;],[0,&quot;SFT&quot;],[0,&quot;DPO&quot;],[0,&quot;Agent&quot;],[0,&quot;NLP&quot;],[0,&quot;诗词&quot;]]],&quot;status&quot;:[0,&quot;active&quot;],&quot;date&quot;:[0,&quot;2024-11&quot;],&quot;url&quot;:[0],&quot;repo&quot;:[0]}],[0,{&quot;slug&quot;:[0,&quot;card-neo&quot;],&quot;title&quot;:[0,&quot;“Card-Neo · 卡牌体系重构”&quot;],&quot;description&quot;:[0,&quot;“为一款 AI 陪伴产品重构卡牌商业化体系。从成本模型、分级策略、叙事架构到数据看板的完整闭环。”&quot;],&quot;category&quot;:[0,&quot;app&quot;],&quot;tags&quot;:[1,[[0,&quot;Product Design&quot;],[0,&quot;Monetization&quot;],[0,&quot;Prompt Engineering&quot;],[0,&quot;Data Analytics&quot;]]],&quot;status&quot;:[0,&quot;active&quot;],&quot;date&quot;:[0,&quot;2026-03&quot;],&quot;url&quot;:[0],&quot;repo&quot;:[0]}],[0,{&quot;slug&quot;:[0,&quot;fangcun&quot;],&quot;title&quot;:[0,&quot;方寸 · 诗词创作画布&quot;],&quot;description&quot;:[0,&quot;给写诗的人做一个趁手的工具。实时格律检测、一页完成查韵选词填字出图,不用再在搜韵和微信之间跳来跳去。&quot;],&quot;category&quot;:[0,&quot;app&quot;],&quot;tags&quot;:[1,[[0,&quot;React&quot;],[0,&quot;Flask&quot;],[0,&quot;NLP&quot;],[0,&quot;Android&quot;],[0,&quot;Vercel&quot;],[0,&quot;Product Design&quot;]]],&quot;status&quot;:[0,&quot;active&quot;],&quot;date&quot;:[0,&quot;2026-02&quot;],&quot;url&quot;:[0,&quot;https://write.sjtuguoxue.space&quot;],&quot;repo&quot;:[0,&quot;https://github.com/lyy0323/fangcun&quot;]}],[0,{&quot;slug&quot;:[0,&quot;guotiao2026&quot;],&quot;title&quot;:[0,&quot;观澜 · 第十届上海高校国学挑战赛&quot;],&quot;description&quot;:[0,&quot;给国学社做的线上初赛系统 + 决赛交互式 slides engine + 实时计分。初赛开赛第一分钟修了个 race condition,决赛从 spec 到上线 4 天。&quot;],&quot;category&quot;:[0,&quot;app&quot;],&quot;tags&quot;:[1,[[0,&quot;React&quot;],[0,&quot;Astro&quot;],[0,&quot;FastAPI&quot;],[0,&quot;Interactive Slides&quot;],[0,&quot;Live Scoring&quot;],[0,&quot;AI-assisted Dev&quot;]]],&quot;status&quot;:[0,&quot;active&quot;],&quot;date&quot;:[0,&quot;2026-05&quot;],&quot;url&quot;:[0,&quot;https://guotiao2026.vercel.app/finals&quot;],&quot;repo&quot;:[0]}],[0,{&quot;slug&quot;:[0,&quot;ink&quot;],&quot;title&quot;:[0,&quot;Ink · 水墨诗集排版系统&quot;],&quot;description&quot;:[0,&quot;纯 CSS 程序化生成水墨画背景,搭配自研 InkScript 标记语言,在浏览器里排版精美的 A5 诗集页面。零依赖,写完直接 Ctrl+P 导出 PDF。&quot;],&quot;category&quot;:[0,&quot;tool&quot;],&quot;tags&quot;:[1,[[0,&quot;CSS&quot;],[0,&quot;SVG&quot;],[0,&quot;DSL&quot;],[0,&quot;排版&quot;],[0,&quot;诗词&quot;]]],&quot;status&quot;:[0,&quot;active&quot;],&quot;date&quot;:[0,&quot;2026-03&quot;],&quot;url&quot;:[0,&quot;https://lyy0323.space/ink/&quot;],&quot;repo&quot;:[0,&quot;https://github.com/lyy0323/ink&quot;]}],[0,{&quot;slug&quot;:[0,&quot;lingshu&quot;],&quot;title&quot;:[0,&quot;灵枢 · 学生社团智能知识中枢&quot;],&quot;description&quot;:[0,&quot;独立为国学社做的 AI 知识平台。Selenium 爬了 876 篇公众号推送,治理了 12 å¹´ 22GB 散落资料,在 Coze 上搭了 Agent。后来被更强的「开阳」替代了,但沉淀的知识库成了最大遗产。&quot;],&quot;category&quot;:[0,&quot;agent&quot;],&quot;tags&quot;:[1,[[0,&quot;Coze&quot;],[0,&quot;Selenium&quot;],[0,&quot;NLP&quot;],[0,&quot;LDA&quot;],[0,&quot;Python&quot;],[0,&quot;Knowledge Base&quot;]]],&quot;status&quot;:[0,&quot;archived&quot;],&quot;date&quot;:[0,&quot;2025-05&quot;],&quot;url&quot;:[0],&quot;repo&quot;:[0]}],[0,{&quot;slug&quot;:[0,&quot;handbook&quot;],&quot;title&quot;:[0,&quot;“星光手账 · Handbook”&quot;],&quot;description&quot;:[0,&quot;“独立提出、独立 own 的从 0 到 1 项目。一个用户×NPC 维度的策展编辑器,把散落在各功能的 AI 生成产物编排成可分享的手账。17 天从 PRD 到提测。”&quot;],&quot;category&quot;:[0,&quot;app&quot;],&quot;tags&quot;:[1,[[0,&quot;Full-stack&quot;],[0,&quot;Product Design&quot;],[0,&quot;React&quot;],[0,&quot;Go&quot;],[0,&quot;AI-assisted Dev&quot;]]],&quot;status&quot;:[0,&quot;active&quot;],&quot;date&quot;:[0,&quot;2026-05&quot;],&quot;url&quot;:[0],&quot;repo&quot;:[0]}],[0,{&quot;slug&quot;:[0,&quot;neo-classic&quot;],&quot;title&quot;:[0,&quot;Neo-Classic · 古典诗词 LLM 评测基准&quot;],&quot;description&quot;:[0,&quot;给国学社首页做的猜诗小游戏,翻个面就变成了测 LLM 的 benchmark。用 30 位当代诗人的 1,406 首作品,证明大模型在「背诗」而不是「懂诗」。ACL 2026 Oral。&quot;],&quot;category&quot;:[0,&quot;data&quot;],&quot;tags&quot;:[1,[[0,&quot;NLP&quot;],[0,&quot;LLM&quot;],[0,&quot;Benchmark&quot;],[0,&quot;ACL&quot;],[0,&quot;Product Management&quot;],[0,&quot;诗词&quot;]]],&quot;status&quot;:[0,&quot;active&quot;],&quot;date&quot;:[0,&quot;2025-11&quot;],&quot;url&quot;:[0,&quot;https://sjtuguoxue.space/neo-classic&quot;],&quot;repo&quot;:[0,&quot;https://github.com/lyy0323/NEO-CLASSIC&quot;]}],[0,{&quot;slug&quot;:[0,&quot;personal-site&quot;],&quot;title&quot;:[0,&quot;芋泥椰子冻 · 个人主页&quot;],&quot;description&quot;:[0,&quot;你正在看的这个网站。Terminal/Hacker 风格,Astro + React Islands 构建,底部有一个真的能用的命令行。从第一行代码到现在的所有功能,全部由我和 Claude Code 在一个下午结对完成。&quot;],&quot;category&quot;:[0,&quot;website&quot;],&quot;tags&quot;:[1,[[0,&quot;Astro&quot;],[0,&quot;React&quot;],[0,&quot;TypeScript&quot;],[0,&quot;Tailwind CSS&quot;],[0,&quot;MDX&quot;]]],&quot;status&quot;:[0,&quot;active&quot;],&quot;date&quot;:[0,&quot;2024-11&quot;],&quot;url&quot;:[0,&quot;https://lyy0323.space&quot;],&quot;repo&quot;:[0,&quot;https://github.com/lyy0323/lyy0323.github.io&quot;]}],[0,{&quot;slug&quot;:[0,&quot;nfc-collectibles&quot;],&quot;title&quot;:[0,&quot;数字藏品系统 · NFC Collectibles&quot;],&quot;description&quot;:[0,&quot;给国学社文创做的身份管理系统。每一件实物——NFC钥匙扣、线装书、明信片——都能在这里找到自己的数字身份,带校验码,可溯源。&quot;],&quot;category&quot;:[0,&quot;tool&quot;],&quot;tags&quot;:[1,[[0,&quot;Flask&quot;],[0,&quot;PostgreSQL&quot;],[0,&quot;NFC&quot;],[0,&quot;Vercel&quot;],[0,&quot;文创&quot;]]],&quot;status&quot;:[0,&quot;active&quot;],&quot;date&quot;:[0,&quot;2025-09&quot;],&quot;url&quot;:[0],&quot;repo&quot;:[0]}],[0,{&quot;slug&quot;:[0,&quot;poem-analytics&quot;],&quot;title&quot;:[0,&quot;诗迹 · 社员诗歌年度报告&quot;],&quot;description&quot;:[0,&quot;每年给国学社出一份年度报告:1646 首诗词的体裁分布、月度创作曲线、四季意象词云、年度热诗、作者风格画像。从 ECharts 图表到 Poetry-Prism 灵魂画像,把数据变成社员之间传播最广的内容。&quot;],&quot;category&quot;:[0,&quot;data&quot;],&quot;tags&quot;:[1,[[0,&quot;Python&quot;],[0,&quot;ECharts&quot;],[0,&quot;NLP&quot;],[0,&quot;Visualization&quot;],[0,&quot;诗词&quot;],[0,&quot;Data Analysis&quot;]]],&quot;status&quot;:[0,&quot;active&quot;],&quot;date&quot;:[0,&quot;2023-12&quot;],&quot;url&quot;:[0,&quot;https://mp.weixin.qq.com/s/RoCImUNKl97QmY8PwFSB0A&quot;],&quot;repo&quot;:[0]}],[0,{&quot;slug&quot;:[0,&quot;poem-site&quot;],&quot;title&quot;:[0,&quot;南洋吟游 · 社员诗歌平台&quot;],&quot;description&quot;:[0,&quot;从手机备忘录里的两三百首诗开始,长成了一个收录 6900+ 首作品、49 位作者、193w 访问量的诗歌生态平台。一个人,四年,从 JSON 到 SQLite,从手写 HTML 到 coding agent。&quot;],&quot;category&quot;:[0,&quot;website&quot;],&quot;tags&quot;:[1,[[0,&quot;Flask&quot;],[0,&quot;SQLite&quot;],[0,&quot;Product Management&quot;],[0,&quot;NLP&quot;],[0,&quot;诗词&quot;]]],&quot;status&quot;:[0,&quot;active&quot;],&quot;date&quot;:[0,&quot;2022-07&quot;],&quot;url&quot;:[0,&quot;https://sjtuguoxue.space&quot;],&quot;repo&quot;:[0]}],[0,{&quot;slug&quot;:[0,&quot;writing&quot;],&quot;title&quot;:[0,&quot;芋泥椰子冻 · 个人文字站&quot;],&quot;description&quot;:[0,&quot;一个写了十年诗的人给自己的文字造了一栋房子ã€
37‚风铃挂在门口,唱片摆在架上,椰子散落桌面——每一个入口都是一件拟态小作品。&quot;],&quot;category&quot;:[0,&quot;website&quot;],&quot;tags&quot;:[1,[[0,&quot;Jekyll&quot;],[0,&quot;Skeuomorphic&quot;],[0,&quot;CSS&quot;],[0,&quot;Web Audio&quot;],[0,&quot;诗词&quot;]]],&quot;status&quot;:[0,&quot;active&quot;],&quot;date&quot;:[0,&quot;2024-06&quot;],&quot;url&quot;:[0,&quot;https://lyy0323.space/writing/&quot;],&quot;repo&quot;:[0]}],[0,{&quot;slug&quot;:[0,&quot;yuefu-anniv&quot;],&quot;title&quot;:[0,&quot;弦歌四载 · 乐府部四周年线上展览&quot;],&quot;description&quot;:[0,&quot;给乐府部四周年生日会做的交互式网页展览。六首歌、同步歌词、创作故事,用全模态融合的方式呈现四年的产出——因为推文和视频都装不下乐府部做的事。&quot;],&quot;category&quot;:[0,&quot;art&quot;],&quot;tags&quot;:[1,[[0,&quot;React&quot;],[0,&quot;Framer Motion&quot;],[0,&quot;Tailwind CSS&quot;],[0,&quot;古风音乐&quot;],[0,&quot;Interactive&quot;]]],&quot;status&quot;:[0,&quot;archived&quot;],&quot;date&quot;:[0,&quot;2025-12&quot;],&quot;url&quot;:[0,&quot;https://yuefu4anniv.sjtuguoxue.space&quot;],&quot;repo&quot;:[0,&quot;https://github.com/lyy0323/yuefu4anniv&quot;]}]]]}" ssr client="load" opts="{&quot;name&quot;:&quot;InteractiveTerminal&quot;,&quot;value&quot;:true}" await-children><div class="fixed bottom-0 left-0 right-0 z-[9998] transition-all duration-300 h-10"><div class="flex items-center gap-2 px-4 py-2 bg-terminal-surface border-t border-terminal-border 
37cursor-pointer select-none h-10"><div class="terminal-dot bg-red-500 !w-2 !h-2"></div><div class="terminal-dot bg-yellow-500 !w-2 !h-2"></div><div class="terminal-dot bg-green-500 !w-2 !h-2"></div><span class="text-[10px] text-terminal-muted ml-1 flex-1">~ — press / to open terminal</span><span class="text-terminal-muted text-[10px] transition-transform duration-200 ">▲</span></div></div><!--astro:end--></astro-island> </body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.