diff --git a/404.html b/404.html index 09d4560a..e65adc56 100644 --- a/404.html +++ b/404.html @@ -6,18 +6,24 @@
摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。

自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:
疫情期间,笔者基本没有怎么出过远门,甚至阴差阳错地给自己安排了更多的独处时间。周末也倒逼自己按照比较严格的作息推动业余实践,尝试向内探索。因此,所谓 “向内思变”,用时髦的说法也叫 “闭关”,接下来就阐述下要漫谈的话题。
健康,拥有的时候经常不会被珍惜,失去的时候却追悔莫及,但重新找回后却很容易再次不被珍惜(不难理解,这就是人性)
读书与学习,一个被广为熟知的话题,但笔者在这方面是有一定自信的,因为有过比较正向的实践,多少有点底气。自大学时代开始,笔者在这方面有一定的嗜好,且系统践行了此嗜好,还通过啃一些跨专业的书来学习,直至可以抛弃原来的专业,在毕业时也留下了两篇关于这方面的总结文章。当然,任何时候、任何人的经历都代表不了实力。本次漫谈笔者会结合自己的经验、思考与总结来梳理,尽最大努力让这个话题起到抛砖引玉的作用,有兴趣的小伙伴在以后的日子里可共同进步。
时间管理,这个话题虽被大家熟知,却很少有人能自信地说 “自己能很好地管理时间”,笔者肯定也不例外。但本次漫谈会梳理下笔者自己在实操方面的尝试,思考与总结。
混合工作制,这个话题在疫情到来后被大家熟知,所以笔者这里也未必能分享出多么稀奇古怪的见解,但同样会结合实操给出自己的思考与总结。
鉴于笔者在大学阶段自由学习与探索的勇气可嘉,因此在经历两次 “校园互联网小作坊” 的锻炼后,毕业时选择的工作自然而然地成为了大学兴趣的延续。当然,也延续了很多大学阶段养成的对健康不利的习惯,作息无规律,仗着无知挥霍身体;无健康意识,不怎么锻炼身体,比如:
人无作息规律地熬一天不累,熬十天就累了,熬几年也就要坏事了。就这样经过长年累月地洗礼,健康也在疫情到来的第一年亮起了小红灯。当然,经过医生、家人等多方的协力帮助,以及自己的坚忍硬扛,最终康复了。期间虽然经历了比疫情放开后大部人转阳痛苦且印象深刻多倍的事情,但不是本文的重点,这里只留下笔者事后深刻反思的几个心得:
既然已经知晓自身问题且暂时止损了,自然要继续寻找更长远的解决方法。但方法不会凭空从天上掉下来的,它需要自己去寻找。笔者寻找方法的主要途径是:向专业或有经验的人咨询,向书本上的健康标准和知识找。
由于笔者仍然保持着大学时代学会的“免费”思维,所以在接近康复出院的时候就开始跟医生、医护、病友等以聊天的方式咨询。众所周知,医生是经常传授病人一些健康知识的专业人员,医护是长年累月协助病人康复训练的专业人员,病友是那些与自身有着相同失误的人,向这几波人咨询更能习得比较正向的建议或小技巧。这一阶段积累了一些碎片化的健康意识,康复训练小技巧,以及戒掉不良生活习惯的注意点,也为后面的防治宜早、起居有常、适量运动等原则做了铺垫。
健康其实是有标准、有依据的:
*《皇帝内经》中的标准:形与神俱,而终其天年,度百岁乃去。 *现代的健康标准:生理健康、心理健康、社会及自然环境适应良好,道德良好,并达到人之天年。
如上所述,健康标准简单且易懂,但它不足以指导大部人去实践(除非是不世出的罕见人才,看到标准后就能推导出符合实际的解法)。所以笔者结合自身经历和健康知识,进一步采用 “分解” 和渐进明细的方式,学着梳理出一些健康原则:
最后,为保证自己在理论意识上更注重身体健康,笔者还拜读了毛教员在青年时期写下的《体育之研究》。读过教员鞭辟入里的文章后,也更从理论上明白了:“体者,载知识之车而寓道德之舍也。体育一道,配德育与智育,而德智皆寄于体。”
结合沉淀下来的原则,笔者花费了 1.5 年的时间,进行了两个方面的实践:
随着时间的流逝,笔者现在也能自己做出 75 分的家常菜了(特别感谢很多师傅指导),且将下面这张图作为自己的日常饮食原则:

关于健身减肥方面的实践,笔者这里只阐述下主要实践思路,实践细节可参考笔者之前写的一篇文章:减肥这件小事阶段随笔汇总。
关键点 1:要考虑打工人工作比较忙碌的客观现实,将时间周期拉的长一点,目标拆解的细一点,可分阶段来。我们可以结合身边的很多例子来反思下,为什么那么多人喊着健身和减肥,真正成功的却不多呢?是耐力不够,还是客观环境不允许呢?笔者觉得两个原因都有,如果时间足够充裕,用这么多空闲时间来专注地完成一件正确的事情是没有大问题的。可现实生活中时间不会多么充裕,正是基于客观考虑,笔者才调整了实践思路:
关键点 2:实践过程中借助体脂秤的指标和数据统计,来定期分析自身数据,及时发现、纠正实操过程中的问题(这是笔者所在行业的惯用套路)。我们可以继续结合生活中的例子来看下,自己可有花些时间来反思、复盘自身存在的问题,然后调整行动呢?大部分应该都没有这么做。其实,笔者之前在这方面做的也特别少,后来随着工作和生活阅历的增加,慢慢注重这方面了。
健康这个话题聊的差不多了,笔者在这个话题的最后简单分享两个自己学到的、且感觉比较实用、可广泛应用的迭代实践套路。有兴趣的朋友可去深入学习,如果还能在工作和生活中尝试起来,相信会取得更好的效果。
(1) 目标 -> 问题 -> 诊断 -> 方案 -> 践行 (套路来自《原则》这本书,该书在疫情前被笔者知晓后阅读,疫情后又翻了下,跟老朋友们也强烈推荐过)

2、一个全面质量管理的思想基础和方法依据,循环式品质管理 PDCA,又称戴明环。由戴明提出,据说他十分热爱统计学,二战时曾将统计学应用于制造业,后来在日本传授质量控制,随着日本制造技术的逐渐发达,戴明也成为了比较著名的人物。
读书与学习的区别是什么呢?
在笔者看来,读书与学习是两码事,读书不等于学习,想要学习成长倒是可以多读点书。当然,有些人会把读书当成一种习惯和爱好,但笔者想继续问的是:习惯和爱好不是凭空来的,这种习惯和爱好背后的本质原因和动力又是什么呢?可能答案中多少会涵盖点 “想从读书中学到点东西”吧。
身处一个知识迭代速度和生活节奏都在加快的时代,“焦虑”与“迷茫”会时不时来敲门。因此,为应对社会生活中的焦虑与迷茫,人们选择了各种各样的方式,读书与学习自然也成为了一种常用的方式。笔者之前主动跟人交流的动力不大,所以读书与自我规划学习也是笔者的选择。
因此,如果有人问起 “你读书的目的是什么”,笔者会结合读过的《纳瓦尔宝典》这本书给出现在的答案:构建自己的心智模型。当然,如果在未来 N 年后有人再问起这个问题,笔者希望自己可以结合《穷查理宝典》这本书和查理芒格这个人给出比当前更深入和细化的答案(目前不能给这个答案,因为笔者自己构建的心智模型还不够好)。
随着时间的推移,笔者在读书方面体验了以下三种方式:
我们并不需要像辩论赛那样争论、PK 出上述哪种方式好,哪种方式不好。因为每种方式都有可能、或多或少助力我们成长。从实践效果来看,或许海绵式阅读是大多数人认可的方式,但有些采用自由式阅读的人真的在某些方面比采用海绵式阅读的人优秀;从时间维度来看,没有自由式、填鸭式的阅读,也很难直接转变为海绵式阅读。
在笔者看来,我们要关注的不是单选题,是“全都要”,要学会在不同的场景下切换到不同的阅读方式。即使是同一个人,也可根据不同的场景、不同的时间来切换到不同的阅读方式。所以,这里再做一个大胆又狂妄地的论断:为什么很多人读了很多的书,却依旧过不好这一生?因为纵使一个人满腹经纶,但 TA 没有清晰的认清问题本质,做不到学以致用与知行合一(书生误国也是这个道理)。
大学时代,自接触互联网后,笔者依旧会买一些纸质书来看,但也坚信“信息化”是大势所趋,一个大学生在学好数学等基础学科的基础上,应该花些精力来学习了解下计算机技术。经历疫情这三年后,笔者再次坚信 “数字化” 是继 “全球化” 之后的大势所趋。
在阅读工具的选择方面笔者经历了以下几个阶段:
目前,“纸质书 + 微信阅读 + 互联网信息”成为了笔者最终选择的组合工具。在 2021 年底,笔者认为微信读书推出的年度报告产品已不足以总结自己在阅读方面的全貌,而且在闲暇的时候觉得自己在阅读方面不够系统化。因此,就创建了一个“阅读准则表格”,用于指导自己的阅读实践。表格依旧采用了分解与渐进明细的思路:

在上述“阅读准则表格”的协助下,阅读与学习这件小事在疫情期间也变得比之前明晰起来,且由于 2022 年频繁居家,节省下来的时间也就多了,笔者希望能继续向着“构建自己的心智模型”这个方向实践下去。
阅读与学习这个话题到此也基本漫谈完了,对这个话题或阅读工具感兴趣的朋友可以看下凯文凯利在几年前写的《必然》这本书(笔者坚信,微信读书这个产品在发展的过程中,其团队中肯定有人读过这本书)。当然,如果不觉得笔者在做广告,也可看下笔者毕业前留下的两篇相关文章:
时间是我们在这个世界上最优质和公平的资产,可它也能是让人在其面前最无奈。因此,如何利用、管理自己的时间也成为了每个人的必修课。
身处时间碎片化、角色多元化的社会,我们的时间变得越来越碎,每个角色背后也都有一堆琐碎的事不断涌进来。很多人觉得时间管理、时间不够用是老生长谈的话题,身边充斥着讲这个方面的人和书,但没有多少实际的用处。笔者曾试图分析过这个现象,最终总结出来的主要原因有 3 个:
刚好在疫情这三年,笔者有机会基于遇到的问题,在这方面尝试改善了下。重新拥有健康的身体后,有几个难题摆在了笔者面前:
笔者相信,有过类似经历的人肯定能更明白其中的矛盾与酸楚,面对很多件抢占时间资源的事务,又不得不逼着自己想方设法找到解决办法,真的蛮有压力的。当然,躺平和摆烂是一种方式,可人躺久了也会不自觉地想要尝试突破一下局限,与其让问题与环境倒逼自己改变,不如自己思变。
不推荐的严格时间表,形如 7:20-7:50 起床、洗漱;7:50-8:30 锻炼身体;8:20-8:50: 吃早饭...... 这样简单地把一天时间分为线段的作息日程表.
(1)丢弃不靠谱的严格时间表,为自己减压
(2)重新理解与应用“时间四象限”
(3)重新调整周末时间
在这种“快刀斩乱麻”式的操作下,近小半年后笔者发现自己在工作方面不那么像四处灭火的“捉急状态”了。健康、读书与学习两方面的习惯得以保住,虽然体重变化存在小范围波动,但健身减肥的胜利果实也被巩固住了。
在这个阶段,鉴于笔者看了一些时间管理相关的书,比如《哈佛时间管理课》、《哪里没有时间》等书。结合自己在第一阶段的问题,决定在第二阶段对清单进行改善。清单是个好东西,能用来梳理、分析自己的时间利用是否符合预期,有助于使用者不断思考如何将日常任务做的更好。列出来清单后能降低甚至避免焦虑,因为在执行时不是从大脑中提取,而是从清单中读取。
在升级清单管理前,笔者只有一个主要用来管理工作相关事务的清单,业余时间是没有清单管理的。但随着健康与业余自我充电相关的投入加大,升级清单管理有了一定的必要条件。升级清单管理的主要思路依旧运用了分解与渐进明细,将清单分为:碎片清单、工作日-日常清单、周末-日常清单三类:
碎片清单:
作为大脑的缓冲池而存在,收集大脑基于客观因素或主观思绪而产生的事务(不区分优先级,不区分事务大小)。把事务丢进碎片清单的目的是要在其他合适的时间再去思考它、处理它,同时保持当下时间的专注。
碎片清单是另外两个清单的主要输入,建立碎片清单,需要养成每天把碎片及时装进日常清单的习惯
删除长时间没有被迁移且渐进明细到日常清单的事务
日常清单(工作日):
用于收集工作日的日常事务,其输入主要来自碎片清单或临时加进来的重要且紧急事务。
日常清单收集事务不能照搬碎片清单,而是碎片清单的再次分解与渐进明细。进入日常清单的任务必须有子任务或关键步骤,且基于再次分解的结论标出预估耗时。
日常清单(周末):
用于收集周末的日常事务,其输入主要来自碎片清单,优先对健康、读书与学习相关的事务;次优先排日常起居、购物等事务。
日常清单收集事务依旧不能照搬碎片清单,而是再次分解和渐进明细碎片清单。进入周末日常清单的任务必须包含子任务和关键步骤,且基于再次分解的结论标出预估耗时。
就这样,升级后的三个清单进一步优化了笔者的时间。持续几个月后,笔者也慢慢变得敢于决断,哪怕决断错了也要干。因为改变说起来容易做起来难,如果在做的过程中还惧怕错了,那只能是被束缚得各种不适,改变也就很可能夭折。
经历了前两个阶段的改变,某天,笔者在娱乐的时候刚好看到有个 UP 主在讲 “进入人工智能时代后,人要怎么做才能既不失业,还能活的不错”。鉴于笔者统计分析的意识已经建立起来(统计学与数学知识应用依旧存在短板),所以笔者冒出了一个想法:UP 主列出的这个东西可能就是当下自己没有梳理过的时间分配准则。
废话不多说,这里直接贴出 UP 主给出的时间消耗建议,也是笔者在第三阶段的时间统计与调整准则,具体如下图:


因此,笔者结合准则和自己在第一、二阶段沉淀下来的时间分配情况,整出了一个粗糙的时间统计。整个时间统计采用了由局部到整体的方式:
优先统计工作日早上至午休这段时间的分配,基于统计情况调整时间;然后统计并调整午休、下午和晚上等时间的分配 以此类推,次优统计并调整周末时间的分配(为避免自己变成有强迫症的人,周末调整没有工作日拆解的细,为自己预留一些挥霍的自由) 笔者这里给出统计与调整示意如下:


至此,刻意统计与调整阶段的阶段也漫谈完了。笔者在这一阶段还挺觉得有成就感的,因为终于有机会在工作之外初级又粗糙地运用了统计学分析,很好地鼓励自己在统计学分析方面继续加大投入力度。
书接上文,如果说时间管理其实就是对时间这一个维度进行切割,然后把工作与生活中的事务填充进去,那么混合工作制就是基于物理空间和时间这两个维度来切割平面,然后把工作与生活中的事务填充进去。因此,笔者要漫谈的最后一个话题就是混合工作制。
这里所谓的“混合工作制”,对打工人来讲其实就是一部分时间在办公室工作,一部分时间居家远程办公。如果没有疫情,这种方式在国内还不会被大范围运用,虽然互联网行业一直有弹性工作制,但国内很少有企业让员工能持续几天甚至一个月居家办公。笔者认为,疫情只是更显象化了这种方式,因为在疫情出现之前,国外真的有公司在实践,而且国外的自由职业者是比国内多出很多的。
这里不是要展开争论,而是想抛出问题:我们虽然在疫情期间熟悉了这种工作模式,但我们可觉得自己能很好地处理这种模式呢?疫情总会过去的,在疫情后我们要不要继续实践混合工作制呢?
如上所述,混合工作制是基于空间与时间两个维度来安排要处理的事务,所以适应混合工作制,就是基于二维平面来安排好自己的工作与生活,试着把日子过得顺畅。
笔者不敢说自己在疫情期间很好地适应了混合工作制,因为在疫情早期居家办公真的很累,工作与生活没有了界限,有时觉得自己除了睡觉就一直在工作,回到公司上班的时候就觉得特别爽。但随着疫情的多次反复,也就有了一次次地尝试改变自己来适应居家办公,拥抱混合工作制。在这种客观条件的倒逼下,终究还是适应了,也实现了向内思变。
混合工作制最大的痛点是解决居家办公的苦恼,善用居家办公的优势,甚至把居家办公的经验适当地用在办公室工作中,从而实现真正的混合工作。在居家办公的时候,笔者觉得有以下几个要点需要注意:
当从居家办公切换到办公室工作环境中,除了不用划定专门的办公空间,很多经验都是可以继续沿用的。只有在碰到特别重要紧急的事情或者娱乐的事情才需要与同事当面沟通交流,这在一定程度上可以提升个人工作效率,去尝试摆脱“无头苍蝇式的忙碌”。
不知道细心的朋友有没有发现,在疫情到来之前,我们大多接触到一些具有数字化特性的 C 端消费品(如:体脂秤具有称 + APP数据统计 + 虚拟社区;智能手表具有手表+数据收集与分析),只在办公时间或业余遇到紧急问题时才使用远程办公工具来协作,而疫情到来后我们更加主动拥抱、主动适应远程办公工具等数字化、虚拟化产品了。这在一定程度上也表明了:
那么问题来了,一个普通的打工人去延伸思考这些东西有什么用处呢?这是不是类似刚入职的员工操着 CEO 的心,或者说一个普通百姓,业余闲着没事操着治理国家的心呢?笔者个人认为:都不是。而是想基于以上延伸思考引出一个新的业余尝试:业余跨地域协作。
这也关系到疫情后要不要继续实践混合工作制?不在其位就不谋其政,笔者这里不去谈国家或公司会不会在疫情后落地混合工作制,比如“3+2”或“4+1”工作制,因为笔者想延伸地是:如何在业余更大范围地尝试、实践混合工作制。
遥想当年学生时代,一群比较合得来的学生仅仅凭借几成勇气就在业余时间集中到一个物理空间内去捣鼓一些东西,也因为这样的折腾让我们顺利走向了工作岗位。走向工作岗位后,时不时会在虚拟社群中一起侃大山,聊聊工作与生活,吐槽一下自己的改变,但最终收尾的时候多少都还流露出想要搞些有点创造力或者正能量的事情。
所以笔者认为,在上述延伸思考下,其实业余是可以协作的,主要原因有以下三点:
其实最主要的问题还是在于有没有共同的诉求,能不能拿出时间来捣鼓,有没有人能组织且管理好这种自由的远程协作团伙,并合理分配项目收益,实现大家的共同诉求。在疫情中后期,笔者业余时间没少在由几个老伙计组成的社群中“传销”上述延伸思考,疫情结束后也可能会继续尝试下去。
行文至此,疫情这三年向内思变的复盘总结基本梳理完成了,不管文章最终的水平怎么样,依旧把自己的“闭关”经历沉淀下来了。
在文章的最后,顺便聊一聊思变。经历了疫情这三年,笔者认为思变不能只“打鸡血”或者 “立Flag”,思变是要结合客观事实和自身诉求来落地的。如果我们宽泛地谈改变,然后逼着自己变,挺内耗的。因为这种改变容易失败,失败后我们又不太容易原谅自己。可如果我们慢慢固化了,一旦大环境发生变化,我们又只能被动地任由社会教育。所以,改变之前需要多思考,需要学习一些知识套路尝试着实践。
笔者在落地上述几个话题的改变时,有些侧重实践为主,基于遇到的问题寻找解决方法;有些则以读书学习、与别人沟通交流的方式推动;还有些以业余娱乐的方式观察发现来推动,但最终实践的时候其实都初窥门径地用到了一些通识且有点哲学味道的“套路”:
最后,引用一下笔者早年看过的小说作为结束,其作者萧鼎老师说过“如果没有曾经的一段经历,自己写不出《诛仙》这样的作品”。虽然笔者与萧鼎老师相差甚远,也想在文章的最后说下:“如果没有疫情这三年的经历和刻意的向内思变,笔者也写不出一篇将多个话题串联起来的长文”。
之所以还记得《诛仙》这本小说,倒不是因为小说阐述了“天地不仁,以万物为刍狗”的法则,而是因为它也讲述了一个资质普通又平凡的少年,虽不醉心于修真,但真的凭借着坚韧、阅历一步步身兼“佛道魔”三种功法,这种特质在经济下行的大环境下可能更值得学习。
',121)])])}const u=r(o,[["render",s]]);export{d as __pageData,u as default}; +import{_ as r,g as t,h as i,U as l}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const d=JSON.parse('{"title":"向内思变:当疫情给世界按下暂停键,去重构生活秩序","description":"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。","frontmatter":{"date":"2023-01-08T10:23:50.000Z","title":"向内思变:当疫情给世界按下暂停键,去重构生活秩序","description":"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。","permalink":"/about/growth/inner-experience","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png","sticky":1,"top":true,"categories":"个人成长","tags":["健康","时间","悦读时光","远程协作","疫情"]},"headers":[],"relativePath":"about/growth/inner-experience.md","filePath":"40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md"}'),o={name:"about/growth/inner-experience.md"};function s(n,a,e,p,g,h){return i(),t("div",null,[...a[0]||(a[0]=[l('摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。

自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:
疫情期间,笔者基本没有怎么出过远门,甚至阴差阳错地给自己安排了更多的独处时间。周末也倒逼自己按照比较严格的作息推动业余实践,尝试向内探索。因此,所谓 “向内思变”,用时髦的说法也叫 “闭关”,接下来就阐述下要漫谈的话题。
健康,拥有的时候经常不会被珍惜,失去的时候却追悔莫及,但重新找回后却很容易再次不被珍惜(不难理解,这就是人性)
读书与学习,一个被广为熟知的话题,但笔者在这方面是有一定自信的,因为有过比较正向的实践,多少有点底气。自大学时代开始,笔者在这方面有一定的嗜好,且系统践行了此嗜好,还通过啃一些跨专业的书来学习,直至可以抛弃原来的专业,在毕业时也留下了两篇关于这方面的总结文章。当然,任何时候、任何人的经历都代表不了实力。本次漫谈笔者会结合自己的经验、思考与总结来梳理,尽最大努力让这个话题起到抛砖引玉的作用,有兴趣的小伙伴在以后的日子里可共同进步。
时间管理,这个话题虽被大家熟知,却很少有人能自信地说 “自己能很好地管理时间”,笔者肯定也不例外。但本次漫谈会梳理下笔者自己在实操方面的尝试,思考与总结。
混合工作制,这个话题在疫情到来后被大家熟知,所以笔者这里也未必能分享出多么稀奇古怪的见解,但同样会结合实操给出自己的思考与总结。
鉴于笔者在大学阶段自由学习与探索的勇气可嘉,因此在经历两次 “校园互联网小作坊” 的锻炼后,毕业时选择的工作自然而然地成为了大学兴趣的延续。当然,也延续了很多大学阶段养成的对健康不利的习惯,作息无规律,仗着无知挥霍身体;无健康意识,不怎么锻炼身体,比如:
人无作息规律地熬一天不累,熬十天就累了,熬几年也就要坏事了。就这样经过长年累月地洗礼,健康也在疫情到来的第一年亮起了小红灯。当然,经过医生、家人等多方的协力帮助,以及自己的坚忍硬扛,最终康复了。期间虽然经历了比疫情放开后大部人转阳痛苦且印象深刻多倍的事情,但不是本文的重点,这里只留下笔者事后深刻反思的几个心得:
既然已经知晓自身问题且暂时止损了,自然要继续寻找更长远的解决方法。但方法不会凭空从天上掉下来的,它需要自己去寻找。笔者寻找方法的主要途径是:向专业或有经验的人咨询,向书本上的健康标准和知识找。
由于笔者仍然保持着大学时代学会的“免费”思维,所以在接近康复出院的时候就开始跟医生、医护、病友等以聊天的方式咨询。众所周知,医生是经常传授病人一些健康知识的专业人员,医护是长年累月协助病人康复训练的专业人员,病友是那些与自身有着相同失误的人,向这几波人咨询更能习得比较正向的建议或小技巧。这一阶段积累了一些碎片化的健康意识,康复训练小技巧,以及戒掉不良生活习惯的注意点,也为后面的防治宜早、起居有常、适量运动等原则做了铺垫。
健康其实是有标准、有依据的:
*《皇帝内经》中的标准:形与神俱,而终其天年,度百岁乃去。 *现代的健康标准:生理健康、心理健康、社会及自然环境适应良好,道德良好,并达到人之天年。
如上所述,健康标准简单且易懂,但它不足以指导大部人去实践(除非是不世出的罕见人才,看到标准后就能推导出符合实际的解法)。所以笔者结合自身经历和健康知识,进一步采用 “分解” 和渐进明细的方式,学着梳理出一些健康原则:
最后,为保证自己在理论意识上更注重身体健康,笔者还拜读了毛教员在青年时期写下的《体育之研究》。读过教员鞭辟入里的文章后,也更从理论上明白了:“体者,载知识之车而寓道德之舍也。体育一道,配德育与智育,而德智皆寄于体。”
结合沉淀下来的原则,笔者花费了 1.5 年的时间,进行了两个方面的实践:
随着时间的流逝,笔者现在也能自己做出 75 分的家常菜了(特别感谢很多师傅指导),且将下面这张图作为自己的日常饮食原则:

关于健身减肥方面的实践,笔者这里只阐述下主要实践思路,实践细节可参考笔者之前写的一篇文章:减肥这件小事阶段随笔汇总。
关键点 1:要考虑打工人工作比较忙碌的客观现实,将时间周期拉的长一点,目标拆解的细一点,可分阶段来。我们可以结合身边的很多例子来反思下,为什么那么多人喊着健身和减肥,真正成功的却不多呢?是耐力不够,还是客观环境不允许呢?笔者觉得两个原因都有,如果时间足够充裕,用这么多空闲时间来专注地完成一件正确的事情是没有大问题的。可现实生活中时间不会多么充裕,正是基于客观考虑,笔者才调整了实践思路:
关键点 2:实践过程中借助体脂秤的指标和数据统计,来定期分析自身数据,及时发现、纠正实操过程中的问题(这是笔者所在行业的惯用套路)。我们可以继续结合生活中的例子来看下,自己可有花些时间来反思、复盘自身存在的问题,然后调整行动呢?大部分应该都没有这么做。其实,笔者之前在这方面做的也特别少,后来随着工作和生活阅历的增加,慢慢注重这方面了。
健康这个话题聊的差不多了,笔者在这个话题的最后简单分享两个自己学到的、且感觉比较实用、可广泛应用的迭代实践套路。有兴趣的朋友可去深入学习,如果还能在工作和生活中尝试起来,相信会取得更好的效果。
(1) 目标 -> 问题 -> 诊断 -> 方案 -> 践行 (套路来自《原则》这本书,该书在疫情前被笔者知晓后阅读,疫情后又翻了下,跟老朋友们也强烈推荐过)

2、一个全面质量管理的思想基础和方法依据,循环式品质管理 PDCA,又称戴明环。由戴明提出,据说他十分热爱统计学,二战时曾将统计学应用于制造业,后来在日本传授质量控制,随着日本制造技术的逐渐发达,戴明也成为了比较著名的人物。
读书与学习的区别是什么呢?
在笔者看来,读书与学习是两码事,读书不等于学习,想要学习成长倒是可以多读点书。当然,有些人会把读书当成一种习惯和爱好,但笔者想继续问的是:习惯和爱好不是凭空来的,这种习惯和爱好背后的本质原因和动力又是什么呢?可能答案中多少会涵盖点 “想从读书中学到点东西”吧。
身处一个知识迭代速度和生活节奏都在加快的时代,“焦虑”与“迷茫”会时不时来敲门。因此,为应对社会生活中的焦虑与迷茫,人们选择了各种各样的方式,读书与学习自然也成为了一种常用的方式。笔者之前主动跟人交流的动力不大,所以读书与自我规划学习也是笔者的选择。
因此,如果有人问起 “你读书的目的是什么”,笔者会结合读过的《纳瓦尔宝典》这本书给出现在的答案:构建自己的心智模型。当然,如果在未来 N 年后有人再问起这个问题,笔者希望自己可以结合《穷查理宝典》这本书和查理芒格这个人给出比当前更深入和细化的答案(目前不能给这个答案,因为笔者自己构建的心智模型还不够好)。
随着时间的推移,笔者在读书方面体验了以下三种方式:
我们并不需要像辩论赛那样争论、PK 出上述哪种方式好,哪种方式不好。因为每种方式都有可能、或多或少助力我们成长。从实践效果来看,或许海绵式阅读是大多数人认可的方式,但有些采用自由式阅读的人真的在某些方面比采用海绵式阅读的人优秀;从时间维度来看,没有自由式、填鸭式的阅读,也很难直接转变为海绵式阅读。
在笔者看来,我们要关注的不是单选题,是“全都要”,要学会在不同的场景下切换到不同的阅读方式。即使是同一个人,也可根据不同的场景、不同的时间来切换到不同的阅读方式。所以,这里再做一个大胆又狂妄地的论断:为什么很多人读了很多的书,却依旧过不好这一生?因为纵使一个人满腹经纶,但 TA 没有清晰的认清问题本质,做不到学以致用与知行合一(书生误国也是这个道理)。
大学时代,自接触互联网后,笔者依旧会买一些纸质书来看,但也坚信“信息化”是大势所趋,一个大学生在学好数学等基础学科的基础上,应该花些精力来学习了解下计算机技术。经历疫情这三年后,笔者再次坚信 “数字化” 是继 “全球化” 之后的大势所趋。
在阅读工具的选择方面笔者经历了以下几个阶段:
目前,“纸质书 + 微信阅读 + 互联网信息”成为了笔者最终选择的组合工具。在 2021 年底,笔者认为微信读书推出的年度报告产品已不足以总结自己在阅读方面的全貌,而且在闲暇的时候觉得自己在阅读方面不够系统化。因此,就创建了一个“阅读准则表格”,用于指导自己的阅读实践。表格依旧采用了分解与渐进明细的思路:

在上述“阅读准则表格”的协助下,阅读与学习这件小事在疫情期间也变得比之前明晰起来,且由于 2022 年频繁居家,节省下来的时间也就多了,笔者希望能继续向着“构建自己的心智模型”这个方向实践下去。
阅读与学习这个话题到此也基本漫谈完了,对这个话题或阅读工具感兴趣的朋友可以看下凯文凯利在几年前写的《必然》这本书(笔者坚信,微信读书这个产品在发展的过程中,其团队中肯定有人读过这本书)。当然,如果不觉得笔者在做广告,也可看下笔者毕业前留下的两篇相关文章:
时间是我们在这个世界上最优质和公平的资产,可它也能是让人在其面前最无奈。因此,如何利用、管理自己的时间也成为了每个人的必修课。
身处时间碎片化、角色多元化的社会,我们的时间变得越来越碎,每个角色背后也都有一堆琐碎的事不断涌进来。很多人觉得时间管理、时间不够用是老生长谈的话题,身边充斥着讲这个方面的人和书,但没有多少实际的用处。笔者曾试图分析过这个现象,最终总结出来的主要原因有 3 个:
刚好在疫情这三年,笔者有机会基于遇到的问题,在这方面尝试改善了下。重新拥有健康的身体后,有几个难题摆在了笔者面前:
笔者相信,有过类似经历的人肯定能更明白其中的矛盾与酸楚,面对很多件抢占时间资源的事务,又不得不逼着自己想方设法找到解决办法,真的蛮有压力的。当然,躺平和摆烂是一种方式,可人躺久了也会不自觉地想要尝试突破一下局限,与其让问题与环境倒逼自己改变,不如自己思变。
不推荐的严格时间表,形如 7:20-7:50 起床、洗漱;7:50-8:30 锻炼身体;8:20-8:50: 吃早饭...... 这样简单地把一天时间分为线段的作息日程表.
(1)丢弃不靠谱的严格时间表,为自己减压
(2)重新理解与应用“时间四象限”
(3)重新调整周末时间
在这种“快刀斩乱麻”式的操作下,近小半年后笔者发现自己在工作方面不那么像四处灭火的“捉急状态”了。健康、读书与学习两方面的习惯得以保住,虽然体重变化存在小范围波动,但健身减肥的胜利果实也被巩固住了。
在这个阶段,鉴于笔者看了一些时间管理相关的书,比如《哈佛时间管理课》、《哪里没有时间》等书。结合自己在第一阶段的问题,决定在第二阶段对清单进行改善。清单是个好东西,能用来梳理、分析自己的时间利用是否符合预期,有助于使用者不断思考如何将日常任务做的更好。列出来清单后能降低甚至避免焦虑,因为在执行时不是从大脑中提取,而是从清单中读取。
在升级清单管理前,笔者只有一个主要用来管理工作相关事务的清单,业余时间是没有清单管理的。但随着健康与业余自我充电相关的投入加大,升级清单管理有了一定的必要条件。升级清单管理的主要思路依旧运用了分解与渐进明细,将清单分为:碎片清单、工作日-日常清单、周末-日常清单三类:
碎片清单:
作为大脑的缓冲池而存在,收集大脑基于客观因素或主观思绪而产生的事务(不区分优先级,不区分事务大小)。把事务丢进碎片清单的目的是要在其他合适的时间再去思考它、处理它,同时保持当下时间的专注。
碎片清单是另外两个清单的主要输入,建立碎片清单,需要养成每天把碎片及时装进日常清单的习惯
删除长时间没有被迁移且渐进明细到日常清单的事务
日常清单(工作日):
用于收集工作日的日常事务,其输入主要来自碎片清单或临时加进来的重要且紧急事务。
日常清单收集事务不能照搬碎片清单,而是碎片清单的再次分解与渐进明细。进入日常清单的任务必须有子任务或关键步骤,且基于再次分解的结论标出预估耗时。
日常清单(周末):
用于收集周末的日常事务,其输入主要来自碎片清单,优先对健康、读书与学习相关的事务;次优先排日常起居、购物等事务。
日常清单收集事务依旧不能照搬碎片清单,而是再次分解和渐进明细碎片清单。进入周末日常清单的任务必须包含子任务和关键步骤,且基于再次分解的结论标出预估耗时。
就这样,升级后的三个清单进一步优化了笔者的时间。持续几个月后,笔者也慢慢变得敢于决断,哪怕决断错了也要干。因为改变说起来容易做起来难,如果在做的过程中还惧怕错了,那只能是被束缚得各种不适,改变也就很可能夭折。
经历了前两个阶段的改变,某天,笔者在娱乐的时候刚好看到有个 UP 主在讲 “进入人工智能时代后,人要怎么做才能既不失业,还能活的不错”。鉴于笔者统计分析的意识已经建立起来(统计学与数学知识应用依旧存在短板),所以笔者冒出了一个想法:UP 主列出的这个东西可能就是当下自己没有梳理过的时间分配准则。
废话不多说,这里直接贴出 UP 主给出的时间消耗建议,也是笔者在第三阶段的时间统计与调整准则,具体如下图:


因此,笔者结合准则和自己在第一、二阶段沉淀下来的时间分配情况,整出了一个粗糙的时间统计。整个时间统计采用了由局部到整体的方式:
优先统计工作日早上至午休这段时间的分配,基于统计情况调整时间;然后统计并调整午休、下午和晚上等时间的分配 以此类推,次优统计并调整周末时间的分配(为避免自己变成有强迫症的人,周末调整没有工作日拆解的细,为自己预留一些挥霍的自由) 笔者这里给出统计与调整示意如下:


至此,刻意统计与调整阶段的阶段也漫谈完了。笔者在这一阶段还挺觉得有成就感的,因为终于有机会在工作之外初级又粗糙地运用了统计学分析,很好地鼓励自己在统计学分析方面继续加大投入力度。
书接上文,如果说时间管理其实就是对时间这一个维度进行切割,然后把工作与生活中的事务填充进去,那么混合工作制就是基于物理空间和时间这两个维度来切割平面,然后把工作与生活中的事务填充进去。因此,笔者要漫谈的最后一个话题就是混合工作制。
这里所谓的“混合工作制”,对打工人来讲其实就是一部分时间在办公室工作,一部分时间居家远程办公。如果没有疫情,这种方式在国内还不会被大范围运用,虽然互联网行业一直有弹性工作制,但国内很少有企业让员工能持续几天甚至一个月居家办公。笔者认为,疫情只是更显象化了这种方式,因为在疫情出现之前,国外真的有公司在实践,而且国外的自由职业者是比国内多出很多的。
这里不是要展开争论,而是想抛出问题:我们虽然在疫情期间熟悉了这种工作模式,但我们可觉得自己能很好地处理这种模式呢?疫情总会过去的,在疫情后我们要不要继续实践混合工作制呢?
如上所述,混合工作制是基于空间与时间两个维度来安排要处理的事务,所以适应混合工作制,就是基于二维平面来安排好自己的工作与生活,试着把日子过得顺畅。
笔者不敢说自己在疫情期间很好地适应了混合工作制,因为在疫情早期居家办公真的很累,工作与生活没有了界限,有时觉得自己除了睡觉就一直在工作,回到公司上班的时候就觉得特别爽。但随着疫情的多次反复,也就有了一次次地尝试改变自己来适应居家办公,拥抱混合工作制。在这种客观条件的倒逼下,终究还是适应了,也实现了向内思变。
混合工作制最大的痛点是解决居家办公的苦恼,善用居家办公的优势,甚至把居家办公的经验适当地用在办公室工作中,从而实现真正的混合工作。在居家办公的时候,笔者觉得有以下几个要点需要注意:
当从居家办公切换到办公室工作环境中,除了不用划定专门的办公空间,很多经验都是可以继续沿用的。只有在碰到特别重要紧急的事情或者娱乐的事情才需要与同事当面沟通交流,这在一定程度上可以提升个人工作效率,去尝试摆脱“无头苍蝇式的忙碌”。
不知道细心的朋友有没有发现,在疫情到来之前,我们大多接触到一些具有数字化特性的 C 端消费品(如:体脂秤具有称 + APP数据统计 + 虚拟社区;智能手表具有手表+数据收集与分析),只在办公时间或业余遇到紧急问题时才使用远程办公工具来协作,而疫情到来后我们更加主动拥抱、主动适应远程办公工具等数字化、虚拟化产品了。这在一定程度上也表明了:
那么问题来了,一个普通的打工人去延伸思考这些东西有什么用处呢?这是不是类似刚入职的员工操着 CEO 的心,或者说一个普通百姓,业余闲着没事操着治理国家的心呢?笔者个人认为:都不是。而是想基于以上延伸思考引出一个新的业余尝试:业余跨地域协作。
这也关系到疫情后要不要继续实践混合工作制?不在其位就不谋其政,笔者这里不去谈国家或公司会不会在疫情后落地混合工作制,比如“3+2”或“4+1”工作制,因为笔者想延伸地是:如何在业余更大范围地尝试、实践混合工作制。
遥想当年学生时代,一群比较合得来的学生仅仅凭借几成勇气就在业余时间集中到一个物理空间内去捣鼓一些东西,也因为这样的折腾让我们顺利走向了工作岗位。走向工作岗位后,时不时会在虚拟社群中一起侃大山,聊聊工作与生活,吐槽一下自己的改变,但最终收尾的时候多少都还流露出想要搞些有点创造力或者正能量的事情。
所以笔者认为,在上述延伸思考下,其实业余是可以协作的,主要原因有以下三点:
其实最主要的问题还是在于有没有共同的诉求,能不能拿出时间来捣鼓,有没有人能组织且管理好这种自由的远程协作团伙,并合理分配项目收益,实现大家的共同诉求。在疫情中后期,笔者业余时间没少在由几个老伙计组成的社群中“传销”上述延伸思考,疫情结束后也可能会继续尝试下去。
行文至此,疫情这三年向内思变的复盘总结基本梳理完成了,不管文章最终的水平怎么样,依旧把自己的“闭关”经历沉淀下来了。
在文章的最后,顺便聊一聊思变。经历了疫情这三年,笔者认为思变不能只“打鸡血”或者 “立Flag”,思变是要结合客观事实和自身诉求来落地的。如果我们宽泛地谈改变,然后逼着自己变,挺内耗的。因为这种改变容易失败,失败后我们又不太容易原谅自己。可如果我们慢慢固化了,一旦大环境发生变化,我们又只能被动地任由社会教育。所以,改变之前需要多思考,需要学习一些知识套路尝试着实践。
笔者在落地上述几个话题的改变时,有些侧重实践为主,基于遇到的问题寻找解决方法;有些则以读书学习、与别人沟通交流的方式推动;还有些以业余娱乐的方式观察发现来推动,但最终实践的时候其实都初窥门径地用到了一些通识且有点哲学味道的“套路”:
最后,引用一下笔者早年看过的小说作为结束,其作者萧鼎老师说过“如果没有曾经的一段经历,自己写不出《诛仙》这样的作品”。虽然笔者与萧鼎老师相差甚远,也想在文章的最后说下:“如果没有疫情这三年的经历和刻意的向内思变,笔者也写不出一篇将多个话题串联起来的长文”。
之所以还记得《诛仙》这本小说,倒不是因为小说阐述了“天地不仁,以万物为刍狗”的法则,而是因为它也讲述了一个资质普通又平凡的少年,虽不醉心于修真,但真的凭借着坚韧、阅历一步步身兼“佛道魔”三种功法,这种特质在经济下行的大环境下可能更值得学习。
',121)])])}const u=r(o,[["render",s]]);export{d as __pageData,u as default}; diff --git a/assets/about_growth_inner-experience.md.BfCF2Esw.lean.js b/assets/about_growth_inner-experience.md.HpLRc5B0.lean.js similarity index 96% rename from assets/about_growth_inner-experience.md.BfCF2Esw.lean.js rename to assets/about_growth_inner-experience.md.HpLRc5B0.lean.js index 6d47d9b2..c3e936fd 100644 --- a/assets/about_growth_inner-experience.md.BfCF2Esw.lean.js +++ b/assets/about_growth_inner-experience.md.HpLRc5B0.lean.js @@ -1 +1 @@ -import{_ as r,g as t,h as i,U as l}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const d=JSON.parse('{"title":"向内思变:当疫情给世界按下暂停键,去重构生活秩序","description":"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。","frontmatter":{"date":"2023-01-08T10:23:50.000Z","title":"向内思变:当疫情给世界按下暂停键,去重构生活秩序","description":"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。","permalink":"/about/growth/inner-experience","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png","sticky":1,"top":true,"categories":"个人成长","tags":["健康","时间","悦读时光","远程协作","疫情"]},"headers":[],"relativePath":"about/growth/inner-experience.md","filePath":"40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md"}'),o={name:"about/growth/inner-experience.md"};function s(n,a,e,p,g,h){return i(),t("div",null,[...a[0]||(a[0]=[l("",121)])])}const u=r(o,[["render",s]]);export{d as __pageData,u as default}; +import{_ as r,g as t,h as i,U as l}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const d=JSON.parse('{"title":"向内思变:当疫情给世界按下暂停键,去重构生活秩序","description":"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。","frontmatter":{"date":"2023-01-08T10:23:50.000Z","title":"向内思变:当疫情给世界按下暂停键,去重构生活秩序","description":"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。","permalink":"/about/growth/inner-experience","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png","sticky":1,"top":true,"categories":"个人成长","tags":["健康","时间","悦读时光","远程协作","疫情"]},"headers":[],"relativePath":"about/growth/inner-experience.md","filePath":"40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md"}'),o={name:"about/growth/inner-experience.md"};function s(n,a,e,p,g,h){return i(),t("div",null,[...a[0]||(a[0]=[l("",121)])])}const u=r(o,[["render",s]]);export{d as __pageData,u as default}; diff --git a/assets/about_growth_outer-experience.md.BlNYhD4s.js b/assets/about_growth_outer-experience.md.U_0zSSlY.js similarity index 99% rename from assets/about_growth_outer-experience.md.BlNYhD4s.js rename to assets/about_growth_outer-experience.md.U_0zSSlY.js index 459daefc..5ad3e44f 100644 --- a/assets/about_growth_outer-experience.md.BlNYhD4s.js +++ b/assets/about_growth_outer-experience.md.U_0zSSlY.js @@ -1 +1 @@ -import{_ as s,g as r,h as i,U as a}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const d=JSON.parse('{"title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","frontmatter":{"date":"2024-01-15T22:16:00.000Z","title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","permalink":"/about/growth/outer-experience","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png","sticky":1,"top":true,"tags":["系统思维","数学思维","模型思维","AI","疫情"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/outer-experience.md","filePath":"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md"}'),o={name:"about/growth/outer-experience.md"};function e(n,t,p,l,g,h){return i(),r("div",null,[...t[0]||(t[0]=[a('摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。
时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。
那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。
在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时会觉得很累。自 OpenAI 这家公司名声大噪且 LLM(大语言模型)被各行各业的人们知晓后,笔者开始质疑起了『目标』,尤其在看过 OpenAI 研究员写的《为什么伟大不能被计划》且向一些大佬咨询请教后,更觉得目标是一把双刃剑:
在目标制定、执行和调整之外,或许存在更通用的方法论,它既包括一些成长书中所谓的使命感,也包括个人智慧与经验等因素。因此,笔者在看书、学习数学基础知识与思维、卷 AI 大模型的过程中,尝试去寻找答案,大概率找不到最好答案,但或多或少能找出优于当前状态的路径或答案。

图1:原则、使命与角色示意树

图2:四个维度圈示意图
在重读《要事第一》后,笔者貌似找到了一部分答案。我们经常听到 "人要独立,要有自己的想法",但我们确实生活在一个相互依赖的社会,独立与相互依赖这两个看似矛盾的点是我们需要学着平衡的:
在平衡思维与多维度视角的基础上,我们很自然地产出长(比如年)、中(比如季度)、短(比如周)三个方面的方向或目标,而不是把自己变成一个工具或发条去卷。自然也能尝试使用《要事第一》作者推出的第四代时间管理模式:更看重『人』的范畴,所关注的焦点超越了如何对事务进行有效而机械的管理,更重视同别人进行有效的互动合作。以人为本的模式对于在家庭、组织和其他形式的团体中获得成功都是至关重要的。
鉴于笔者个人的视角也有一定的局限性,对这部分答案感兴趣的读者,可以去阅读原著,来帮助找出一些适合自己实践的答案。
众所周知,在数字化时代,我们每天都在与各种各样的系统交互,每一个表象背后都有一个黑盒子,黑盒子才是规律产生的原因,这个黑盒子也就是系统。
当系统运转正常的时候,我们在遵循着表象的规律做事,可一旦系统出了问题,这些规律将会失效。如果我们无法洞察表象背后的系统,就不可能知道问题出在哪里,更不知道如何解决。笔者在年轻时也不晓得这个道理,所以经常会固执坚守错误的认知,此后被社会打磨得多了,也就开始琢磨系统运行原理、锻炼自己的洞察力了。
洞察力模型就是:理解『表象』背后的『黑盒子』——系统,从而真正从本质上解决问题。在现实世界中,遇到问题,可以尝试摸索,但不要停留在一些似是而非的概念世界里。在知识付费时代,人们更容易陷入概念世界的迷障,我们应该继续尝试走进科学、知识的世界,甚至是智慧世界来抽象分析,然后结合实际情况降维打击具象世界(疫情期间从 B 站林超所长视频中学到的总结,有兴趣的可自己看原创视频):

系统是一组相互关联的要素,即:系统 = 要素 x 连接关系。在日常工作与生活中,要素是易识别,要素的关联关系容易被忽略,但问题的解决方案,常常就藏在这些『连接关系』里。
因此,我们可基于拆解与关联的思路按照以下步骤进行:
1. 寻找因果关系,人与事、人与物、人与人之间均是如此。若洞察不了关联、因果关系,就一个字『乱』,信息熵越来越大,噪声信息越来越多。因此,我们可以不断拿起两个可能有关系的变量,问自己:他们之间有增强关系吗,有减弱关系吗?
2. 寻找增强回路,因果关系只是单向线段,有头有尾,作用效果从头传到尾就结束了。因此,我们需要继续思考是否能把结尾与开头也用一条线段连接起来形成一个增强回路。生活中有很多增强回路的示例:
3. 很多时候,我们的改善并不需要一直猛踩油门,有时只要松开刹车就好,在增强回路的成效越来越低时,很难再有突破,调节回路有助于改善增强回路带来的问题。

长久以来,人们给增强回路导致的大起大落现象,起了无数的名字,常见的有:马太效应、经济学家口中的赢家通吃、金融学中的复利效应、互联网公司的指数型增长。
小事情推动靠聪明才智,比较长远的事情要靠建立正向的增强回路。2022 年底到2023 年末,大模型相当火爆,其背后的 OpenAI 更是成为影响力很大的公司,我们可有关注他们在内部协作的增强回路呢?
OpenAI 产品推动的思路是: The model is the product,将模型的新功能融入产品,在设计产品过程中与研究团队专注设计模型行为:

笔者是一个比较喜欢阅读的人,随着阅读时间的累加,也在逐步思考怎么才能将自己获得的『输入信息』变成有一定质量与正向效果的『输出』?
起初,只想到了一些常用的 Push 方法:多读书,多与别人沟通、请教,然后尝试去改善『输出』。
后来,也不知哪天突发奇想,想起了大学老师曾经在某节课堂上(幸亏当时没有在课上睡觉)提到的一个常见的商业管理模式:推拉模式(Push/Pull)。于是就将『输入』与『输出』简化为:听、说、读、写这四个因素,从 Push 与 Pull 两个方面来编排这四个因素,就能组成输入与输出之间的增强回路:

让两者形成一个增强回路,变成一个自动运行的卷动机,效果就会比单独 Push 或 Pull 更好。
如果说增强回路的存在,是让这个世界走向极端,那么调节回路的存在,就是让这个世界回归平衡。因为增强回路就是『狂卷』,追求极端,很容易陷入『目标隧道』,而调节回路,让人回归平衡、自然,在得到休息的同时增添乐趣。
因此,我们在找到自己的增强回路后也需要借助调节回路,以及上述提到的平衡思维来落地调节回路,笔者这里就不做过多赘述。
当然,模型思维固然能帮助我们很好地实践,让自己变得简洁、清晰、透彻,但也有其局限性。在模型基本确定的情况下,其能力的『天花板』也随之确定,天花板的突破需要我们根据实际情况来持续丰富、升级自己的心智模型。
NOTE
行文至此,基本到了最后一个专题:数学。鉴于许多人对数学有着又爱又恨的恐惧心理,笔者在这里保证不会引入一些复杂的公式,而是重在强调数学思维真的又底层又有用,更贴近人们常说的『第一性原理』。
相信很多人都听说过分解、分类、排列、组合、四象限、流程等比较热门的词语,那么问题来了,我们是否梳理总结过自己真正实践、应用了多少呢?笔者还真的刻意梳理过:

在基础逻辑与行动指导、产出表述与写作训练阶段,只要肯花时间去学习领悟,并刻意训练,我们基本都能获得不错的效果。随着时间的积累,笔者逐渐发现自己在底层原理方面的抽象理解能力不是一般的薄弱:
因此,基于多方面遇到的问题,笔者就重新学起了数学:
相信不少人已经比较熟悉『化繁为简』,『见缝插针』式事务管理。笔者这里依旧把『分解与分类、排列与组合』放在第一位,我们在接收九年义务教育时就开始学习这些,但很少有人能用这些比较简单的数学思维管理自己的时间与事务。
笔者这里只提一个人:雷军,刨除后来的光环不讲,他当年在武汉大学读书时真的将这些应用得淋漓尽致,后来也在不少场合以经历回顾的方式传授给很多年轻人(感兴趣的可在网上搜一些更详细的资料)。所以,笔者也认为:一个人越早学会将『分解与分类、排列与组合』应用到工作与生活中越好,带来的正向效果特别多,活得不糊里糊涂,有自己的节奏感。
假设一个方程代表从一个角度观察得到的结果,那么,如果我们从多个角度观察,就会得到方程组,求解方程组的过程就是整合多个角度的观察结果,找到最接近真相的答案:

图1:病态方程组:两条线特征近似,稍微发生变化就带来较大误差

图2:兼顾多样性的方程组
如果我们总是基于斜率非常接近的直线建立方程组,某条直线只要稍微变化一点,最终的答案就会有很大变化。通过病态方程组,我们可以更好地看清为什么多样性特别重要,多样性已经是一个公认的优势,任何人都会有认知盲点,站在不同角度的人在一起讨论后达成的共识往往最接近真相。
因此,我们在日常工作生活中要试着平衡,运用多样性红利,不应该『过卷、过拟合』,否则容易导致适应性下降,碰到新环境就会各种不适应。
傅立叶在 1807 年提交了一篇论文,阐述了一个结论:任何一个连续的周期信号,都可以通过不同频率的正弦波叠加得出,这些正弦波前面的系数大部分为零,只有少部分系数描述了曲线的核心特征:

图1:图片来自《心中有数,生活中的数学思维》

图2:图片来自《心中有数,生活中的数学思维》
熟悉数据压缩的读者应该知道这个原理,我们只需把少量比较大的系数对应的简单图像和对应的系数一起存起来,就可以恢复原始图像,且大大压缩了存储空间:

图片来自《心中有数,生活中的数学思维》
因此,我们在遇到比较复杂的问题时,不需要害怕,因为现实世界中的事物看似复杂,一旦转换为其他的表示方法后,通常是稀疏的。我们只需要拆解并关注少部分核心要素,以及它们之间的关联即可。稀疏无处不在,很多看起来复杂的现象背后所包含的规律,往往都是稀疏且简单的。
笔者在 2023 年五一假期去『杭州宋城』游玩了一下,快结束时遇到了一个特别有意思的娱乐活动:"赌钱"。这里的 "赌钱"活动是游客拿着在宋城钱庄里兑换的、且消费一天后还剩余的零钱铜板去赌一把,碰碰运气,体验下宋朝的赌场。
规则很简单:拿着手里的铜板选择押大或押小,美丽的西子姑娘直接掷骰子,顾客赢了就给同样的下注铜板,庄家赢了就直接赢走下注的铜板。看似简单又粗暴的规则,一段时间下来,大部分游客基本都把仅剩的铜板留在了宋城,很少有顾客能赢。当然,笔者和朋友也不例外,不过还是采用了一个策略去反抗了下,让游戏时间延长一点:三个人约定分工,一人只能押大,另一人只能押小,最后一人拿着剩余的铜板自由调度选择押大押小。可终究没有改变最终的结果,相信熟悉 "大数定律"的人已经知道为什么了:只要一件事情发生的次数足够多,它出现某一个结果的频率就等于其概率。
宋城这个大庄家是活动举办方,一直有职员在玩,基本可以看成有 1/6 的概率稳赢,广大游客来宋城的目的是游玩,不是『赌钱』,玩得次数相对少太多,赢的概率远远比庄家少。笔者阐述这个『大数定律』的小例子,主要是想引出一些启发,觉得我们需要建立起概率的世界观:
早在几年前,传统的机器学习都是通过『投喂』特定的训练数据给某个单一模型,训练完成后模型能够完成一些特定的任务,但当我们让模型去完成一些别的任务时,其表现就相当差。 我们可以发现,『单任务学习』看起来是集中精力做一件事,但聚焦于某一特定任务并不是最好的方式,因为特别容易忽略任务之间的关联。如果我们把不同任务放在一起训练,充分利用任务之间的关系,就很可能让最后训练出来的模型比单独训练出来的模型表现得更好。相信对大模型有一定了解的读者应该已经发现,这跟大语言模型的思路很像,随着训练数据的加大,大语言模型的表现越来越让人惊艳,尤其是自然语言理解方面。
这也引出了一些好的学习方法论:通识教育是相当重要的,一个人在学习时所使用的方式、思维模型和章法也是相当重要的。“技能”通常是针对某个特定的任务而言的,而“学习方法论”则可以应用于多个不同的任务。那些综合表现好的人,一般都掌握了好的学习方法论,借助这些学习方法论,可以经过短时间的学习就能较好地完成多个不同的任务。
行文至此,"疫情后的第一年向外体验" 也基本梳理完成了.在文章的最后,顺便交代下:这是笔者第一次在文章中大篇幅尝试引入数学相关的知识,鉴于数学功底有限,肯定存在不足之处,有兴趣的可阅读一些更专业的书籍。
虽然不少人觉得大模型会成为新的泡沫,笔者这里也不好说看法是否对,但笔者曾阅读过 OpenAI 首席科学家,以及一些研究员早年写的博客,有一个比较共同的特点值得敬佩:即使有很多人在评论区质疑他们描述的 AGI,但他们大多坚信自己能搞出来通用人工智能,这些年也在用实践推动着 AI 的发展。
随着大模型被广泛熟知,AI 应用与变革的路才刚刚开始,希望更多的人能主动思变,拥抱 AI。笔者也会努力继续深入学习 AI,自从再次深入学习 AI 知识后,作为工作几年后的打工人,有点觉得自己的心态变得年轻、有趣了。
',77)])])}const m=s(o,[["render",e]]);export{d as __pageData,m as default}; +import{_ as s,g as r,h as i,U as a}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const d=JSON.parse('{"title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","frontmatter":{"date":"2024-01-15T22:16:00.000Z","title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","permalink":"/about/growth/outer-experience","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png","sticky":1,"top":true,"tags":["系统思维","数学思维","模型思维","AI","疫情"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/outer-experience.md","filePath":"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md"}'),o={name:"about/growth/outer-experience.md"};function e(n,t,p,l,g,h){return i(),r("div",null,[...t[0]||(t[0]=[a('摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。
时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。
那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。
在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时会觉得很累。自 OpenAI 这家公司名声大噪且 LLM(大语言模型)被各行各业的人们知晓后,笔者开始质疑起了『目标』,尤其在看过 OpenAI 研究员写的《为什么伟大不能被计划》且向一些大佬咨询请教后,更觉得目标是一把双刃剑:
在目标制定、执行和调整之外,或许存在更通用的方法论,它既包括一些成长书中所谓的使命感,也包括个人智慧与经验等因素。因此,笔者在看书、学习数学基础知识与思维、卷 AI 大模型的过程中,尝试去寻找答案,大概率找不到最好答案,但或多或少能找出优于当前状态的路径或答案。

图1:原则、使命与角色示意树

图2:四个维度圈示意图
在重读《要事第一》后,笔者貌似找到了一部分答案。我们经常听到 "人要独立,要有自己的想法",但我们确实生活在一个相互依赖的社会,独立与相互依赖这两个看似矛盾的点是我们需要学着平衡的:
在平衡思维与多维度视角的基础上,我们很自然地产出长(比如年)、中(比如季度)、短(比如周)三个方面的方向或目标,而不是把自己变成一个工具或发条去卷。自然也能尝试使用《要事第一》作者推出的第四代时间管理模式:更看重『人』的范畴,所关注的焦点超越了如何对事务进行有效而机械的管理,更重视同别人进行有效的互动合作。以人为本的模式对于在家庭、组织和其他形式的团体中获得成功都是至关重要的。
鉴于笔者个人的视角也有一定的局限性,对这部分答案感兴趣的读者,可以去阅读原著,来帮助找出一些适合自己实践的答案。
众所周知,在数字化时代,我们每天都在与各种各样的系统交互,每一个表象背后都有一个黑盒子,黑盒子才是规律产生的原因,这个黑盒子也就是系统。
当系统运转正常的时候,我们在遵循着表象的规律做事,可一旦系统出了问题,这些规律将会失效。如果我们无法洞察表象背后的系统,就不可能知道问题出在哪里,更不知道如何解决。笔者在年轻时也不晓得这个道理,所以经常会固执坚守错误的认知,此后被社会打磨得多了,也就开始琢磨系统运行原理、锻炼自己的洞察力了。
洞察力模型就是:理解『表象』背后的『黑盒子』——系统,从而真正从本质上解决问题。在现实世界中,遇到问题,可以尝试摸索,但不要停留在一些似是而非的概念世界里。在知识付费时代,人们更容易陷入概念世界的迷障,我们应该继续尝试走进科学、知识的世界,甚至是智慧世界来抽象分析,然后结合实际情况降维打击具象世界(疫情期间从 B 站林超所长视频中学到的总结,有兴趣的可自己看原创视频):

系统是一组相互关联的要素,即:系统 = 要素 x 连接关系。在日常工作与生活中,要素是易识别,要素的关联关系容易被忽略,但问题的解决方案,常常就藏在这些『连接关系』里。
因此,我们可基于拆解与关联的思路按照以下步骤进行:
1. 寻找因果关系,人与事、人与物、人与人之间均是如此。若洞察不了关联、因果关系,就一个字『乱』,信息熵越来越大,噪声信息越来越多。因此,我们可以不断拿起两个可能有关系的变量,问自己:他们之间有增强关系吗,有减弱关系吗?
2. 寻找增强回路,因果关系只是单向线段,有头有尾,作用效果从头传到尾就结束了。因此,我们需要继续思考是否能把结尾与开头也用一条线段连接起来形成一个增强回路。生活中有很多增强回路的示例:
3. 很多时候,我们的改善并不需要一直猛踩油门,有时只要松开刹车就好,在增强回路的成效越来越低时,很难再有突破,调节回路有助于改善增强回路带来的问题。

长久以来,人们给增强回路导致的大起大落现象,起了无数的名字,常见的有:马太效应、经济学家口中的赢家通吃、金融学中的复利效应、互联网公司的指数型增长。
小事情推动靠聪明才智,比较长远的事情要靠建立正向的增强回路。2022 年底到2023 年末,大模型相当火爆,其背后的 OpenAI 更是成为影响力很大的公司,我们可有关注他们在内部协作的增强回路呢?
OpenAI 产品推动的思路是: The model is the product,将模型的新功能融入产品,在设计产品过程中与研究团队专注设计模型行为:

笔者是一个比较喜欢阅读的人,随着阅读时间的累加,也在逐步思考怎么才能将自己获得的『输入信息』变成有一定质量与正向效果的『输出』?
起初,只想到了一些常用的 Push 方法:多读书,多与别人沟通、请教,然后尝试去改善『输出』。
后来,也不知哪天突发奇想,想起了大学老师曾经在某节课堂上(幸亏当时没有在课上睡觉)提到的一个常见的商业管理模式:推拉模式(Push/Pull)。于是就将『输入』与『输出』简化为:听、说、读、写这四个因素,从 Push 与 Pull 两个方面来编排这四个因素,就能组成输入与输出之间的增强回路:

让两者形成一个增强回路,变成一个自动运行的卷动机,效果就会比单独 Push 或 Pull 更好。
如果说增强回路的存在,是让这个世界走向极端,那么调节回路的存在,就是让这个世界回归平衡。因为增强回路就是『狂卷』,追求极端,很容易陷入『目标隧道』,而调节回路,让人回归平衡、自然,在得到休息的同时增添乐趣。
因此,我们在找到自己的增强回路后也需要借助调节回路,以及上述提到的平衡思维来落地调节回路,笔者这里就不做过多赘述。
当然,模型思维固然能帮助我们很好地实践,让自己变得简洁、清晰、透彻,但也有其局限性。在模型基本确定的情况下,其能力的『天花板』也随之确定,天花板的突破需要我们根据实际情况来持续丰富、升级自己的心智模型。
NOTE
行文至此,基本到了最后一个专题:数学。鉴于许多人对数学有着又爱又恨的恐惧心理,笔者在这里保证不会引入一些复杂的公式,而是重在强调数学思维真的又底层又有用,更贴近人们常说的『第一性原理』。
相信很多人都听说过分解、分类、排列、组合、四象限、流程等比较热门的词语,那么问题来了,我们是否梳理总结过自己真正实践、应用了多少呢?笔者还真的刻意梳理过:

在基础逻辑与行动指导、产出表述与写作训练阶段,只要肯花时间去学习领悟,并刻意训练,我们基本都能获得不错的效果。随着时间的积累,笔者逐渐发现自己在底层原理方面的抽象理解能力不是一般的薄弱:
因此,基于多方面遇到的问题,笔者就重新学起了数学:
相信不少人已经比较熟悉『化繁为简』,『见缝插针』式事务管理。笔者这里依旧把『分解与分类、排列与组合』放在第一位,我们在接收九年义务教育时就开始学习这些,但很少有人能用这些比较简单的数学思维管理自己的时间与事务。
笔者这里只提一个人:雷军,刨除后来的光环不讲,他当年在武汉大学读书时真的将这些应用得淋漓尽致,后来也在不少场合以经历回顾的方式传授给很多年轻人(感兴趣的可在网上搜一些更详细的资料)。所以,笔者也认为:一个人越早学会将『分解与分类、排列与组合』应用到工作与生活中越好,带来的正向效果特别多,活得不糊里糊涂,有自己的节奏感。
假设一个方程代表从一个角度观察得到的结果,那么,如果我们从多个角度观察,就会得到方程组,求解方程组的过程就是整合多个角度的观察结果,找到最接近真相的答案:

图1:病态方程组:两条线特征近似,稍微发生变化就带来较大误差

图2:兼顾多样性的方程组
如果我们总是基于斜率非常接近的直线建立方程组,某条直线只要稍微变化一点,最终的答案就会有很大变化。通过病态方程组,我们可以更好地看清为什么多样性特别重要,多样性已经是一个公认的优势,任何人都会有认知盲点,站在不同角度的人在一起讨论后达成的共识往往最接近真相。
因此,我们在日常工作生活中要试着平衡,运用多样性红利,不应该『过卷、过拟合』,否则容易导致适应性下降,碰到新环境就会各种不适应。
傅立叶在 1807 年提交了一篇论文,阐述了一个结论:任何一个连续的周期信号,都可以通过不同频率的正弦波叠加得出,这些正弦波前面的系数大部分为零,只有少部分系数描述了曲线的核心特征:

图1:图片来自《心中有数,生活中的数学思维》

图2:图片来自《心中有数,生活中的数学思维》
熟悉数据压缩的读者应该知道这个原理,我们只需把少量比较大的系数对应的简单图像和对应的系数一起存起来,就可以恢复原始图像,且大大压缩了存储空间:

图片来自《心中有数,生活中的数学思维》
因此,我们在遇到比较复杂的问题时,不需要害怕,因为现实世界中的事物看似复杂,一旦转换为其他的表示方法后,通常是稀疏的。我们只需要拆解并关注少部分核心要素,以及它们之间的关联即可。稀疏无处不在,很多看起来复杂的现象背后所包含的规律,往往都是稀疏且简单的。
笔者在 2023 年五一假期去『杭州宋城』游玩了一下,快结束时遇到了一个特别有意思的娱乐活动:"赌钱"。这里的 "赌钱"活动是游客拿着在宋城钱庄里兑换的、且消费一天后还剩余的零钱铜板去赌一把,碰碰运气,体验下宋朝的赌场。
规则很简单:拿着手里的铜板选择押大或押小,美丽的西子姑娘直接掷骰子,顾客赢了就给同样的下注铜板,庄家赢了就直接赢走下注的铜板。看似简单又粗暴的规则,一段时间下来,大部分游客基本都把仅剩的铜板留在了宋城,很少有顾客能赢。当然,笔者和朋友也不例外,不过还是采用了一个策略去反抗了下,让游戏时间延长一点:三个人约定分工,一人只能押大,另一人只能押小,最后一人拿着剩余的铜板自由调度选择押大押小。可终究没有改变最终的结果,相信熟悉 "大数定律"的人已经知道为什么了:只要一件事情发生的次数足够多,它出现某一个结果的频率就等于其概率。
宋城这个大庄家是活动举办方,一直有职员在玩,基本可以看成有 1/6 的概率稳赢,广大游客来宋城的目的是游玩,不是『赌钱』,玩得次数相对少太多,赢的概率远远比庄家少。笔者阐述这个『大数定律』的小例子,主要是想引出一些启发,觉得我们需要建立起概率的世界观:
早在几年前,传统的机器学习都是通过『投喂』特定的训练数据给某个单一模型,训练完成后模型能够完成一些特定的任务,但当我们让模型去完成一些别的任务时,其表现就相当差。 我们可以发现,『单任务学习』看起来是集中精力做一件事,但聚焦于某一特定任务并不是最好的方式,因为特别容易忽略任务之间的关联。如果我们把不同任务放在一起训练,充分利用任务之间的关系,就很可能让最后训练出来的模型比单独训练出来的模型表现得更好。相信对大模型有一定了解的读者应该已经发现,这跟大语言模型的思路很像,随着训练数据的加大,大语言模型的表现越来越让人惊艳,尤其是自然语言理解方面。
这也引出了一些好的学习方法论:通识教育是相当重要的,一个人在学习时所使用的方式、思维模型和章法也是相当重要的。“技能”通常是针对某个特定的任务而言的,而“学习方法论”则可以应用于多个不同的任务。那些综合表现好的人,一般都掌握了好的学习方法论,借助这些学习方法论,可以经过短时间的学习就能较好地完成多个不同的任务。
行文至此,"疫情后的第一年向外体验" 也基本梳理完成了.在文章的最后,顺便交代下:这是笔者第一次在文章中大篇幅尝试引入数学相关的知识,鉴于数学功底有限,肯定存在不足之处,有兴趣的可阅读一些更专业的书籍。
虽然不少人觉得大模型会成为新的泡沫,笔者这里也不好说看法是否对,但笔者曾阅读过 OpenAI 首席科学家,以及一些研究员早年写的博客,有一个比较共同的特点值得敬佩:即使有很多人在评论区质疑他们描述的 AGI,但他们大多坚信自己能搞出来通用人工智能,这些年也在用实践推动着 AI 的发展。
随着大模型被广泛熟知,AI 应用与变革的路才刚刚开始,希望更多的人能主动思变,拥抱 AI。笔者也会努力继续深入学习 AI,自从再次深入学习 AI 知识后,作为工作几年后的打工人,有点觉得自己的心态变得年轻、有趣了。
',77)])])}const m=s(o,[["render",e]]);export{d as __pageData,m as default}; diff --git a/assets/about_growth_outer-experience.md.BlNYhD4s.lean.js b/assets/about_growth_outer-experience.md.U_0zSSlY.lean.js similarity index 97% rename from assets/about_growth_outer-experience.md.BlNYhD4s.lean.js rename to assets/about_growth_outer-experience.md.U_0zSSlY.lean.js index ffd8c0d4..01bb513c 100644 --- a/assets/about_growth_outer-experience.md.BlNYhD4s.lean.js +++ b/assets/about_growth_outer-experience.md.U_0zSSlY.lean.js @@ -1 +1 @@ -import{_ as s,g as r,h as i,U as a}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const d=JSON.parse('{"title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","frontmatter":{"date":"2024-01-15T22:16:00.000Z","title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","permalink":"/about/growth/outer-experience","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png","sticky":1,"top":true,"tags":["系统思维","数学思维","模型思维","AI","疫情"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/outer-experience.md","filePath":"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md"}'),o={name:"about/growth/outer-experience.md"};function e(n,t,p,l,g,h){return i(),r("div",null,[...t[0]||(t[0]=[a("",77)])])}const m=s(o,[["render",e]]);export{d as __pageData,m as default}; +import{_ as s,g as r,h as i,U as a}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const d=JSON.parse('{"title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","frontmatter":{"date":"2024-01-15T22:16:00.000Z","title":"走出“目标隧道”:用系统与数学思维重构底层逻辑","description":"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。","permalink":"/about/growth/outer-experience","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png","sticky":1,"top":true,"tags":["系统思维","数学思维","模型思维","AI","疫情"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/outer-experience.md","filePath":"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md"}'),o={name:"about/growth/outer-experience.md"};function e(n,t,p,l,g,h){return i(),r("div",null,[...t[0]||(t[0]=[a("",77)])])}const m=s(o,[["render",e]]);export{d as __pageData,m as default}; diff --git a/assets/about_growth_weight-loss.md.w91RSywO.js b/assets/about_growth_weight-loss.md.BpS5Z_Mb.js similarity index 99% rename from assets/about_growth_weight-loss.md.w91RSywO.js rename to assets/about_growth_weight-loss.md.BpS5Z_Mb.js index 0df975d8..2f0a060b 100644 --- a/assets/about_growth_weight-loss.md.w91RSywO.js +++ b/assets/about_growth_weight-loss.md.BpS5Z_Mb.js @@ -1 +1 @@ -import{_ as l,g as r,h as o,U as i}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const c=JSON.parse('{"title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","frontmatter":{"date":"2022-09-12T08:16:00.000Z","title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","permalink":"/about/growth/weight-loss","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png","top":true,"tags":["健康","运动"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/weight-loss.md","filePath":"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md"}'),s={name:"about/growth/weight-loss.md"};function n(a,t,e,g,d,h){return o(),r("div",null,[...t[0]||(t[0]=[i('摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。
在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。
因此,也就有了这篇减肥这件小事阶段随笔汇总。一方面来总结下前几个阶段的操作,在操作的过程中也有跟老同学、老朋友互相请教过,希望其中的一些操作能对需要的人有一定的帮助;另一方面也想借助网络平台,收集一些建议,来改善不足的地方。
从整体来讲,减肥的原因有以下几点:
《沁园春.雪》,然后北上帝都。另外,前段时间看了毛爷爷在青年时期写下的 《体育之研究》。因此,在读了伟人的文章后,更从理论上理解了身体是根本的道理,即:体者,载知识之车而寓道德之舍也。体育一道,配德育与智育,而德智皆寄于体。直接原因 、错误纠正、深层次原因、榜样的影响都有了,也就需要考虑如何真真正正的进行尝试实践了。
NOTE
第一阶段最重要的准则是:“管住嘴,迈开腿”。
周末饮食保持正常
第一阶段的时间大概维持了一个月,体重获得了 8 斤左右的下降。期间最大的困难是新习惯的建立比较难,原有的生活习惯时不时进入大脑,只能硬着头皮控制自己。由于周末没有做比较大的限制,体重也因为周末饮食不当陆续出现反弹,在下降 5 斤 到 8 斤之间跳跃。所以,周六加了一个项目:下午拍篮球 1个小时 + 遛弯1个小时,如果还有体力,骑行 30 分钟到 1个小时。这个雷打不动的项目引入,不但解决了周末饮食的主要问题,对习惯的养成起到了一定的正向作用。
本阶段主要吸收更多减肥方面的常识和习惯来调整减肥策略:
这个阶段更注重强化减肥这件小事的目标合理性,以及其收益。看一些比较正向的文章,饥饿时转移注意力。业余跟老伙计保持财商与减肥方面的学习沟通,并强制每两天内必须在朋友圈至少打卡一次。
就这样,第二阶段的时间也大概维持了一个月,体重再次获得了 5 斤下降。在第二阶段快结束时遇到了体重基本不再下降,甚至一周基本保持不变的情况,经过分析体重外的指标发现:肌肉与脂肪指标数据不稳,两者基本保持此消彼长的竞争状态。基础代谢率有时达到标准状态,有时不达标。
减肥这件事情可大可小,笔者在第二阶段时还属于身体管理小白,体重维持不变后基本不晓得怎么搞了。在这期间,从微信读书上找了本书,业余翻了翻,其中大部分的讲解或许对很多人有帮助,但对于笔者存在很多不可行之处。这个时候也想过在健身房报个班,每次想去健身房看看时,就会想到在学校毕业季曾因锻炼不当锻炼后疼了很久,后来健身房也就成了几个已经找到工作的懒人的澡堂子啦。这一次比较幸运,因为一次偶然的事情出现后,从大佬口中得知他在减体重时尝试过不吃主食。
不吃主食这个事情笔者个人之前没有尝试过,听起来在一定时间内或许不会有问题,但长期看对身体可能存在某些不好的地方。在查过一些资料文章后,笔者还是决定在第三阶段试试一段时间。
第三阶段主要通过以下几个方面来继续把减肥这件小事执行下去:
🥗 饮食表
| 时段 | 可选项 |
|---|---|
| 早餐 | 玉米/红薯 + 鸡蛋 + 低脂牛奶燕麦 玉米/红薯 + 鸡蛋羹 + 低脂牛奶燕麦 |
| 周末早饭 | 玉米/红薯/豆腐 + 鸡蛋羹 + 低脂牛奶燕麦 |
| 午餐/晚餐 | 素菜 + 小份轻食(含少部分主食) 鱼 + 素菜(不吃主食/半份糙米饭) 轻食一份 |
| 周末午餐/晚饭尝试 | 使用鸡胸肉、扇贝肉、胡萝卜、西蓝花、玉米等食材搭配做一道简版轻食 + 燕麦/少量水饺 使用三文鱼、巴沙鱼片、虾仁等食材做一道菜或汤 + 燕麦/少量水饺 使用青椒、青菜、黄瓜、木耳、鸡蛋等食材做一到两道家常菜 + 燕麦/少量水饺 |
第三阶段也是大概维持了一个月,一直到 8 月底,在吃极少量主食和加大运动量的坚持下,体重又获得了 5—6斤的下降,虽然会呈现少部分波动,但基本能够控制住整体继续下降的趋势。这一阶段,对笔者来说取得了一些比较大的进步,这些进步不局限于减肥这件小事上:
第四阶段,即现阶段(9月份),正在通过以下几种方式来将减肥这件小事继续:
现阶段也需要维持一个月,如果出现反弹情况,甚至需要花费两个月。当前目标、运动、饮食调整基本正常执行,指标与业余学习和交流后续希望以周为单位推进。
以上仅仅是结合个人实践的记录,还需要进一步实验下去,估计未必适合每一个人。我们迈入社会后,难免会看到社会用各种属性来评判一个人。在这所更大的学校中,笔者感觉自己属于转变比较慢的一批人。
之前很多同学和朋友甚至早已融入到社会之中,而笔者个人觉得自己从 2020 年才转变为社会人。快与慢只是表象,只要能把握住规则的脉搏,结合自己的习惯和节奏也可以慢慢上轨,纵然中间有一些偏差或挫折,但触底反弹,反省自身的不足会有新的领悟境界。
',38)])])}const _=l(s,[["render",n]]);export{c as __pageData,_ as default}; +import{_ as l,g as r,h as o,U as i}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const c=JSON.parse('{"title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","frontmatter":{"date":"2022-09-12T08:16:00.000Z","title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","permalink":"/about/growth/weight-loss","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png","top":true,"tags":["健康","运动"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/weight-loss.md","filePath":"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md"}'),s={name:"about/growth/weight-loss.md"};function n(a,t,e,g,d,h){return o(),r("div",null,[...t[0]||(t[0]=[i('摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。
在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。
因此,也就有了这篇减肥这件小事阶段随笔汇总。一方面来总结下前几个阶段的操作,在操作的过程中也有跟老同学、老朋友互相请教过,希望其中的一些操作能对需要的人有一定的帮助;另一方面也想借助网络平台,收集一些建议,来改善不足的地方。
从整体来讲,减肥的原因有以下几点:
《沁园春.雪》,然后北上帝都。另外,前段时间看了毛爷爷在青年时期写下的 《体育之研究》。因此,在读了伟人的文章后,更从理论上理解了身体是根本的道理,即:体者,载知识之车而寓道德之舍也。体育一道,配德育与智育,而德智皆寄于体。直接原因 、错误纠正、深层次原因、榜样的影响都有了,也就需要考虑如何真真正正的进行尝试实践了。
NOTE
第一阶段最重要的准则是:“管住嘴,迈开腿”。
周末饮食保持正常
第一阶段的时间大概维持了一个月,体重获得了 8 斤左右的下降。期间最大的困难是新习惯的建立比较难,原有的生活习惯时不时进入大脑,只能硬着头皮控制自己。由于周末没有做比较大的限制,体重也因为周末饮食不当陆续出现反弹,在下降 5 斤 到 8 斤之间跳跃。所以,周六加了一个项目:下午拍篮球 1个小时 + 遛弯1个小时,如果还有体力,骑行 30 分钟到 1个小时。这个雷打不动的项目引入,不但解决了周末饮食的主要问题,对习惯的养成起到了一定的正向作用。
本阶段主要吸收更多减肥方面的常识和习惯来调整减肥策略:
这个阶段更注重强化减肥这件小事的目标合理性,以及其收益。看一些比较正向的文章,饥饿时转移注意力。业余跟老伙计保持财商与减肥方面的学习沟通,并强制每两天内必须在朋友圈至少打卡一次。
就这样,第二阶段的时间也大概维持了一个月,体重再次获得了 5 斤下降。在第二阶段快结束时遇到了体重基本不再下降,甚至一周基本保持不变的情况,经过分析体重外的指标发现:肌肉与脂肪指标数据不稳,两者基本保持此消彼长的竞争状态。基础代谢率有时达到标准状态,有时不达标。
减肥这件事情可大可小,笔者在第二阶段时还属于身体管理小白,体重维持不变后基本不晓得怎么搞了。在这期间,从微信读书上找了本书,业余翻了翻,其中大部分的讲解或许对很多人有帮助,但对于笔者存在很多不可行之处。这个时候也想过在健身房报个班,每次想去健身房看看时,就会想到在学校毕业季曾因锻炼不当锻炼后疼了很久,后来健身房也就成了几个已经找到工作的懒人的澡堂子啦。这一次比较幸运,因为一次偶然的事情出现后,从大佬口中得知他在减体重时尝试过不吃主食。
不吃主食这个事情笔者个人之前没有尝试过,听起来在一定时间内或许不会有问题,但长期看对身体可能存在某些不好的地方。在查过一些资料文章后,笔者还是决定在第三阶段试试一段时间。
第三阶段主要通过以下几个方面来继续把减肥这件小事执行下去:
🥗 饮食表
| 时段 | 可选项 |
|---|---|
| 早餐 | 玉米/红薯 + 鸡蛋 + 低脂牛奶燕麦 玉米/红薯 + 鸡蛋羹 + 低脂牛奶燕麦 |
| 周末早饭 | 玉米/红薯/豆腐 + 鸡蛋羹 + 低脂牛奶燕麦 |
| 午餐/晚餐 | 素菜 + 小份轻食(含少部分主食) 鱼 + 素菜(不吃主食/半份糙米饭) 轻食一份 |
| 周末午餐/晚饭尝试 | 使用鸡胸肉、扇贝肉、胡萝卜、西蓝花、玉米等食材搭配做一道简版轻食 + 燕麦/少量水饺 使用三文鱼、巴沙鱼片、虾仁等食材做一道菜或汤 + 燕麦/少量水饺 使用青椒、青菜、黄瓜、木耳、鸡蛋等食材做一到两道家常菜 + 燕麦/少量水饺 |
第三阶段也是大概维持了一个月,一直到 8 月底,在吃极少量主食和加大运动量的坚持下,体重又获得了 5—6斤的下降,虽然会呈现少部分波动,但基本能够控制住整体继续下降的趋势。这一阶段,对笔者来说取得了一些比较大的进步,这些进步不局限于减肥这件小事上:
第四阶段,即现阶段(9月份),正在通过以下几种方式来将减肥这件小事继续:
现阶段也需要维持一个月,如果出现反弹情况,甚至需要花费两个月。当前目标、运动、饮食调整基本正常执行,指标与业余学习和交流后续希望以周为单位推进。
以上仅仅是结合个人实践的记录,还需要进一步实验下去,估计未必适合每一个人。我们迈入社会后,难免会看到社会用各种属性来评判一个人。在这所更大的学校中,笔者感觉自己属于转变比较慢的一批人。
之前很多同学和朋友甚至早已融入到社会之中,而笔者个人觉得自己从 2020 年才转变为社会人。快与慢只是表象,只要能把握住规则的脉搏,结合自己的习惯和节奏也可以慢慢上轨,纵然中间有一些偏差或挫折,但触底反弹,反省自身的不足会有新的领悟境界。
',38)])])}const _=l(s,[["render",n]]);export{c as __pageData,_ as default}; diff --git a/assets/about_growth_weight-loss.md.w91RSywO.lean.js b/assets/about_growth_weight-loss.md.BpS5Z_Mb.lean.js similarity index 97% rename from assets/about_growth_weight-loss.md.w91RSywO.lean.js rename to assets/about_growth_weight-loss.md.BpS5Z_Mb.lean.js index d4f5bdce..037c730c 100644 --- a/assets/about_growth_weight-loss.md.w91RSywO.lean.js +++ b/assets/about_growth_weight-loss.md.BpS5Z_Mb.lean.js @@ -1 +1 @@ -import{_ as l,g as r,h as o,U as i}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const c=JSON.parse('{"title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","frontmatter":{"date":"2022-09-12T08:16:00.000Z","title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","permalink":"/about/growth/weight-loss","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png","top":true,"tags":["健康","运动"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/weight-loss.md","filePath":"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md"}'),s={name:"about/growth/weight-loss.md"};function n(a,t,e,g,d,h){return o(),r("div",null,[...t[0]||(t[0]=[i("",38)])])}const _=l(s,[["render",n]]);export{c as __pageData,_ as default}; +import{_ as l,g as r,h as o,U as i}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const c=JSON.parse('{"title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","frontmatter":{"date":"2022-09-12T08:16:00.000Z","title":"用科学与迭代改善的方式推动减肥这件小事","description":"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。","permalink":"/about/growth/weight-loss","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png","top":true,"tags":["健康","运动"],"categories":["个人成长"]},"headers":[],"relativePath":"about/growth/weight-loss.md","filePath":"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md"}'),s={name:"about/growth/weight-loss.md"};function n(a,t,e,g,d,h){return o(),r("div",null,[...t[0]||(t[0]=[i("",38)])])}const _=l(s,[["render",n]]);export{c as __pageData,_ as default}; diff --git a/assets/about_me.md.NFtnPonO.js b/assets/about_me.md.rEiPtcvs.js similarity index 99% rename from assets/about_me.md.NFtnPonO.js rename to assets/about_me.md.rEiPtcvs.js index 7807ac08..7619c9ff 100644 --- a/assets/about_me.md.NFtnPonO.js +++ b/assets/about_me.md.rEiPtcvs.js @@ -1 +1 @@ -import{_ as t,g as s,h as n,U as o}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const e="/img/cover/about_site_bg.png",g=JSON.parse('{"title":"关于我","description":"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。","frontmatter":{"date":"2025-08-29T09:40:53.000Z","title":"关于我","description":"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png","permalink":"/about/me","categories":["关于"]},"headers":[],"relativePath":"about/me.md","filePath":"40.关于/01.关于我.md"}'),r={name:"about/me.md"};function m(i,a,l,p,c,h){return n(),s("div",null,[...a[0]||(a[0]=[o('我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。
自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。
Insight Stack = Engineering Logic × Product Sense × AI Force
目前,我主要在折腾和实践以下几个方向:
在很长一段时间里,我和大多数开发者一样,认为"全栈"就是收集更多的技术徽章:从 React 到 NestJS,从 Python 到 Rust。我曾以为技术的广度、扎实的工程化能力就是护城河。
但在 AI 重构代码生产方式与编程范式的今天,我意识到规则变了。现在的我,不再执着于手里有多少把锤子,而更关注能构建出怎样的建筑,也更愿意将自己定义为一个 "Product Engineer" (产品型工程师) 和 "AI-Augmented Builder" (AI 增强型构建者)。
在这个博客 Insight Stack 中,记录了我对技术角色的重新思考,我相信未来的全栈不再是线性的技能堆叠,而是一个新的全栈价值公式:
如果你对这些思考感兴趣,推荐阅读我的两篇核心文章:
Insight Stack 是我的数字花园,也是我践行上述理念的实验场之一。我把它定义为 "一个探索全栈工程、产品思维与 LLM 交叉领域的数字花园"。
这里的 Stack 有两层含义:
我不希望这里只是枯燥的代码片段或简单的技术分享与总结,我希望你看到的是一个工程师对 LLM 落地路径的真实探索,对 产品 Sense 这一核心能力的深度复盘,以及个人在技术浪潮中的成长记录。
值得一提的是,本站也是人机协作(Human-AI Collaboration)的产物。 在文章的构思与润色过程中,我深度使用了 Gemini/Claude 等模型作为"主要配角"。我经常与它们发起激烈的"辩论",利用 AI 来打破思维盲区。我认为,能够熟练地与 AI 共舞,将是新一代工程师最核心的元能力。
当然,一些文章在撰写过程中,我也应用了 AI,甚至用 Gemini3 Pro/Claude 来辅助我创作,并发起过不少"人机辩论"。因为我认为,AI 可以帮助我们更快、更准确地表达自己的思想,也可以帮助我们发现新的角度、新的解决方案。
Insight Stack Blog 博客站点主要基于 VitePress 和 vitepress-theme-teek 搭建而成。
特别感谢开源社区赋予我们如此强大的工具,让我能将精力聚焦于内容的创作,而非重复造轮子。本站的核心架构基于以下优秀项目构建:
最好的学习是公开分享,最快的成长是与优秀者同行。无论是探讨全栈、AI 编程与应用、Agent 落地,还是交流产品心得,都非常欢迎你联系我~
NOTE
联系方式
hfutsqliang (请备注:Insight Stack 和你的姓名)hfutsqliang@qq.comhfutsqliang@gmail.com我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。
自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。
Insight Stack = Engineering Logic × Product Sense × AI Force
目前,我主要在折腾和实践以下几个方向:
在很长一段时间里,我和大多数开发者一样,认为"全栈"就是收集更多的技术徽章:从 React 到 NestJS,从 Python 到 Rust。我曾以为技术的广度、扎实的工程化能力就是护城河。
但在 AI 重构代码生产方式与编程范式的今天,我意识到规则变了。现在的我,不再执着于手里有多少把锤子,而更关注能构建出怎样的建筑,也更愿意将自己定义为一个 "Product Engineer" (产品型工程师) 和 "AI-Augmented Builder" (AI 增强型构建者)。
在这个博客 Insight Stack 中,记录了我对技术角色的重新思考,我相信未来的全栈不再是线性的技能堆叠,而是一个新的全栈价值公式:
如果你对这些思考感兴趣,推荐阅读我的两篇核心文章:
Insight Stack 是我的数字花园,也是我践行上述理念的实验场之一。我把它定义为 "一个探索全栈工程、产品思维与 LLM 交叉领域的数字花园"。
这里的 Stack 有两层含义:
我不希望这里只是枯燥的代码片段或简单的技术分享与总结,我希望你看到的是一个工程师对 LLM 落地路径的真实探索,对 产品 Sense 这一核心能力的深度复盘,以及个人在技术浪潮中的成长记录。
值得一提的是,本站也是人机协作(Human-AI Collaboration)的产物。 在文章的构思与润色过程中,我深度使用了 Gemini/Claude 等模型作为"主要配角"。我经常与它们发起激烈的"辩论",利用 AI 来打破思维盲区。我认为,能够熟练地与 AI 共舞,将是新一代工程师最核心的元能力。
当然,一些文章在撰写过程中,我也应用了 AI,甚至用 Gemini3 Pro/Claude 来辅助我创作,并发起过不少"人机辩论"。因为我认为,AI 可以帮助我们更快、更准确地表达自己的思想,也可以帮助我们发现新的角度、新的解决方案。
Insight Stack Blog 博客站点主要基于 VitePress 和 vitepress-theme-teek 搭建而成。
特别感谢开源社区赋予我们如此强大的工具,让我能将精力聚焦于内容的创作,而非重复造轮子。本站的核心架构基于以下优秀项目构建:
最好的学习是公开分享,最快的成长是与优秀者同行。无论是探讨全栈、AI 编程与应用、Agent 落地,还是交流产品心得,都非常欢迎你联系我~
NOTE
联系方式
hfutsqliang (请备注:Insight Stack 和你的姓名)hfutsqliang@qq.comhfutsqliang@gmail.com摘要总结:在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop、会话持久化等机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。
当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的"半自动"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。
近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent 的首选。
本文将基于 Claude Agent SDK,分享一个从 0 到 1 构建简单 Agent 的实践经验。相关源代码已开源至 GitHub,托管在我与几个好友共同创建的组织 full-stack-workspace 旗下的 agent-playground 仓库中,对应示例项目为:@agent-playground/basic-example
Claude Agent SDK(前身为 Claude Code SDK)是 Anthropic 官方推出的开源框架。它的核心价值在于将复杂的“规划-执行-观察”循环(Agent Loop)进行了高度工程化封装,提供简洁的 API 用于构建具有工具使用能力的 AI Agent,让开发者专注于业务逻辑和智能体行为的设计。
对于开发者而言,它解决了以下核心痛点:
| 特性 | 说明 |
|---|---|
| Agent Loop | SDK 内部自动管理多轮交互、规划决策和工具调用,开发者无需再手写复杂的递归或循环逻辑。 |
| 开箱即用的原生技能 | 预置了经过 Anthropic 深度优化的工具,如文件系统操作(Read/Write/Edit)、终端命令执行(Bash)以及网络访问。 |
| 渐进式权限控制 | 提供多级 PermissionMode(如 acceptEdits、dontAsk 等),在安全与效率之间取得了极佳平衡。 |
| 上下文"记忆"管理 | 通过会话 ID 自动处理对话历史和工作状态,支持复杂的长上下文理解。 |
更多了解可参考:Claude Agent SDK 文档
由于本项目基于 Node.js 与 TypeScript,首先需要引入核心包:
pnpm install @anthropic-ai/claude-agent-sdkSDK 默认不会主动扫描 .env 文件。为了确保 API Key 和自定义模型参数生效,我们需要在入口处显式加载:
// 项目入口文件 index.ts
+import{T as n}from"./chunks/TwoColumnImage.BpSz0MTE.js";import{g as l,h as p,U as e,z as h,i,S as a}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const g=JSON.parse('{"title":"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环","description":"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。","frontmatter":{"date":"2026-03-06T00:37:58.000Z","title":"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环","description":"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。","permalink":"/ai/agent/claude-agent-sdk-basic-build","top":true,"categories":["AI 学习与实践"],"tags":["Agent","Agent SDK"]},"headers":[],"relativePath":"ai/agent/claude-agent-sdk-basic-build.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md"}'),t={name:"ai/agent/claude-agent-sdk-basic-build.md"},c=Object.assign(t,{setup(k){return(r,s)=>(p(),l("div",null,[s[0]||(s[0]=e(`告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环
摘要总结:在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop、会话持久化等机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。
1. 引言
当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的"半自动"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。
近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent 的首选。
本文将基于 Claude Agent SDK,分享一个从 0 到 1 构建简单 Agent 的实践经验。相关源代码已开源至 GitHub,托管在我与几个好友共同创建的组织 full-stack-workspace 旗下的 agent-playground 仓库中,对应示例项目为:@agent-playground/basic-example
2. 为什么选择 Claude Agent SDK?
Claude Agent SDK(前身为 Claude Code SDK)是 Anthropic 官方推出的开源框架。它的核心价值在于将复杂的“规划-执行-观察”循环(Agent Loop)进行了高度工程化封装,提供简洁的 API 用于构建具有工具使用能力的 AI Agent,让开发者专注于业务逻辑和智能体行为的设计。
对于开发者而言,它解决了以下核心痛点:
特性 说明 Agent Loop SDK 内部自动管理多轮交互、规划决策和工具调用,开发者无需再手写复杂的递归或循环逻辑。 开箱即用的原生技能 预置了经过 Anthropic 深度优化的工具,如文件系统操作(Read/Write/Edit)、终端命令执行(Bash)以及网络访问。 渐进式权限控制 提供多级 PermissionMode(如 acceptEdits、dontAsk 等),在安全与效率之间取得了极佳平衡。 上下文"记忆"管理 通过会话 ID 自动处理对话历史和工作状态,支持复杂的长上下文理解。
更多了解可参考:Claude Agent SDK 文档
3.快速上手:环境配置与初始化
3.1 安装依赖
由于本项目基于 Node.js 与 TypeScript,首先需要引入核心包:
bashpnpm install @anthropic-ai/claude-agent-sdk
3.2 环境变量的“陷阱”与配置
SDK 默认不会主动扫描 .env 文件。为了确保 API Key 和自定义模型参数生效,我们需要在入口处显式加载:
typescript// 项目入口文件 index.ts
// 显式将 .env 文件中的内容加载到环境变量中
import 'dotenv/config';
.env 文件配置建议:在测试阶段,建议配置 ANTHROPIC_DEFAULT_HAIKU_MODEL 处理简单逻辑,使用 SONNET 处理复杂规划,以平衡响应速度与成本。
bash# .env
ANTHROPIC_BASE_URL=your_custom_model_api_base_url
diff --git a/assets/ai_agent_claude-agent-sdk-basic-build.md.Xn8jBlHE.lean.js b/assets/ai_agent_claude-agent-sdk-basic-build.md.B55gshqw.lean.js
similarity index 96%
rename from assets/ai_agent_claude-agent-sdk-basic-build.md.Xn8jBlHE.lean.js
rename to assets/ai_agent_claude-agent-sdk-basic-build.md.B55gshqw.lean.js
index b552e688..e2febc6a 100644
--- a/assets/ai_agent_claude-agent-sdk-basic-build.md.Xn8jBlHE.lean.js
+++ b/assets/ai_agent_claude-agent-sdk-basic-build.md.B55gshqw.lean.js
@@ -1 +1 @@
-import{T as n}from"./chunks/TwoColumnImage.D6Bqef7c.js";import{g as l,h as p,U as e,z as h,i,S as a}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const g=JSON.parse('{"title":"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环","description":"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。","frontmatter":{"date":"2026-03-06T00:37:58.000Z","title":"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环","description":"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。","permalink":"/ai/agent/claude-agent-sdk-basic-build","top":true,"categories":["AI 学习与实践"],"tags":["Agent","Agent SDK"]},"headers":[],"relativePath":"ai/agent/claude-agent-sdk-basic-build.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md"}'),t={name:"ai/agent/claude-agent-sdk-basic-build.md"},c=Object.assign(t,{setup(k){return(r,s)=>(p(),l("div",null,[s[0]||(s[0]=e("",51)),h(n,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/tui_chat_1.png","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/tui_chat_2.png",leftCaption:"",rightCaption:""}),s[1]||(s[1]=i("h2",{id:"_7-结束语",tabindex:"-1"},[a("7. 结束语 "),i("a",{class:"header-anchor",href:"#_7-结束语","aria-label":"Permalink to “7. 结束语”"},"")],-1)),s[2]||(s[2]=i("blockquote",null,[i("p",null,[i("strong",null,"从“调包侠”到“AI 架构师”,迈向更复杂的业务编排。")])],-1)),s[3]||(s[3]=i("p",null,[a("通过 Claude Agent SDK ,我们仅需少量代码就能构建出具备自主执行能力的 Agent,其背后的设计思想:"),i("strong",null,"通过标准化 Skill 和会话管理"),a(",将复杂的 AI 交互逻辑转化为可预测的软件工程实践。")],-1)),s[4]||(s[4]=i("p",null,"深度体验后,我最大的感触是:,Agent 的开发重心也正在转向“如何构建可靠的工程闭环”。通过 SDK 提供的 Agent Loop、会话管理和标准化的工具、Skill 和 MCP 等扩展,我们实际上是在为 AI 搭建一套专属的“操作系统”。它让 AI 的行为变得可观测(通过流式日志)、可追溯(通过会话 ID)且可扩展(通过自定义工具)。",-1)),s[5]||(s[5]=i("p",null,"这种转变标志着真正的 AI Native 软件工程的正式到来。掌握这类 SDK,本质上是在学习如何利用 AI 这个“高阶杠杆”去编排复杂的业务流。",-1)),s[6]||(s[6]=i("p",null,'目前,我正在尝试将这套理念融入我的博客内容工作流,实现从"多维信源抓取"到"风格化润色"的全流程自动化。如果你对 Agent 在真实业务场景中可能面临的"工程腐化"问题,或是其"效率边界"的探索感兴趣,欢迎持续关注本系列的后续更新。',-1))]))}});export{g as __pageData,c as default};
+import{T as n}from"./chunks/TwoColumnImage.BpSz0MTE.js";import{g as l,h as p,U as e,z as h,i,S as a}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const g=JSON.parse('{"title":"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环","description":"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。","frontmatter":{"date":"2026-03-06T00:37:58.000Z","title":"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环","description":"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。","permalink":"/ai/agent/claude-agent-sdk-basic-build","top":true,"categories":["AI 学习与实践"],"tags":["Agent","Agent SDK"]},"headers":[],"relativePath":"ai/agent/claude-agent-sdk-basic-build.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md"}'),t={name:"ai/agent/claude-agent-sdk-basic-build.md"},c=Object.assign(t,{setup(k){return(r,s)=>(p(),l("div",null,[s[0]||(s[0]=e("",51)),h(n,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/tui_chat_1.png","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/tui_chat_2.png",leftCaption:"",rightCaption:""}),s[1]||(s[1]=i("h2",{id:"_7-结束语",tabindex:"-1"},[a("7. 结束语 "),i("a",{class:"header-anchor",href:"#_7-结束语","aria-label":"Permalink to “7. 结束语”"},"")],-1)),s[2]||(s[2]=i("blockquote",null,[i("p",null,[i("strong",null,"从“调包侠”到“AI 架构师”,迈向更复杂的业务编排。")])],-1)),s[3]||(s[3]=i("p",null,[a("通过 Claude Agent SDK ,我们仅需少量代码就能构建出具备自主执行能力的 Agent,其背后的设计思想:"),i("strong",null,"通过标准化 Skill 和会话管理"),a(",将复杂的 AI 交互逻辑转化为可预测的软件工程实践。")],-1)),s[4]||(s[4]=i("p",null,"深度体验后,我最大的感触是:,Agent 的开发重心也正在转向“如何构建可靠的工程闭环”。通过 SDK 提供的 Agent Loop、会话管理和标准化的工具、Skill 和 MCP 等扩展,我们实际上是在为 AI 搭建一套专属的“操作系统”。它让 AI 的行为变得可观测(通过流式日志)、可追溯(通过会话 ID)且可扩展(通过自定义工具)。",-1)),s[5]||(s[5]=i("p",null,"这种转变标志着真正的 AI Native 软件工程的正式到来。掌握这类 SDK,本质上是在学习如何利用 AI 这个“高阶杠杆”去编排复杂的业务流。",-1)),s[6]||(s[6]=i("p",null,'目前,我正在尝试将这套理念融入我的博客内容工作流,实现从"多维信源抓取"到"风格化润色"的全流程自动化。如果你对 Agent 在真实业务场景中可能面临的"工程腐化"问题,或是其"效率边界"的探索感兴趣,欢迎持续关注本系列的后续更新。',-1))]))}});export{g as __pageData,c as default};
diff --git a/assets/ai_agent_composition-ai-components.md.dI2iYRX7.js b/assets/ai_agent_composition-ai-components.md.BsK5YUsc.js
similarity index 99%
rename from assets/ai_agent_composition-ai-components.md.dI2iYRX7.js
rename to assets/ai_agent_composition-ai-components.md.BsK5YUsc.js
index 0d9c6199..9de9dacd 100644
--- a/assets/ai_agent_composition-ai-components.md.dI2iYRX7.js
+++ b/assets/ai_agent_composition-ai-components.md.BsK5YUsc.js
@@ -1 +1 @@
-import{_ as o,g as r,h as s,U as e}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const h=JSON.parse('{"title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","frontmatter":{"date":"2026-02-06T15:48:23.000Z","title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png","permalink":"/ai/agent/composition-ai-components","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent","AI"]},"headers":[],"relativePath":"ai/agent/composition-ai-components.md","filePath":"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md"}'),n={name:"ai/agent/composition-ai-components.md"};function a(d,t,i,l,g,p){return s(),r("div",null,[...t[0]||(t[0]=[e('构建 Agentic 生态:零散组件化为可持续的工作流
摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。

1. 引言
问题:在智能体生态里,各个组件到底是怎么协同工作的?
当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态,一个最核心的问题往往萦绕在开发者和用户的脑海中:在这个生态里,各个组件究竟是如何协同工作的?
事实上,一个成熟的 Agentic 生态系统,其本质是通过优雅地整合 Prompts、Skills、Projects、Subagents 以及 MCP 等核心组件,将原本零散的 AI 能力,编织成一条可持续、高可用的工作流。这不仅大幅提升了人机协作的效率,更为系统运行的稳定性提供了坚实保障。
接下来,我们将逐一拆解这些核心组件,看看它们是如何各司其职的。
2. Prompts:即时灵活的对话指令
角色定位
随叫随到的“即时口头指令”
Prompts 是生态中最基础的交互单元,如同我们在日常对话中下达的即时指令。你通过自然语言驱动 AI,它随叫随到,响应迅速。
⚠️ 注意事项:Prompts 不具备持久性,不会跨对话自动保留,关闭对话后上下文即刻失效。因此,对于重复性工作或涉及深厚专业知识的任务,强烈建议将其沉淀为 Skills 或 Projects。
适用场景:
场景类型 具体说明 一次性需求 快速进行文章总结、短句翻译等 对话中的迭代优化 临时修改文案语气、调整表述逻辑 临时数据处理 输入一段临时上下文,进行即时的数据分析或内容解读 指定输出格式 例如要求 AI "按项目符号列表输出" 或 "输出为 JSON 格式"
3. Skills:可复用的专属能力包(把高频方法变成可复用能力)
角色定位
标准化的“操作手册 + 资源包”
如果说 Prompts 是随口交代的任务,那么 Skills 就是标准化的“操作手册 + 资源包”。它将高频使用的方法固化下来,确保 AI 能够稳定、专业地按照同一套标准“做事”。
Skills 是一个包含完整指令说明、配套脚本和资源文件的能力文件夹。它采用渐进式加载机制(先加载元信息,再按需加载完整说明),在处理任务时按需发现、动态加载,实现特定领域的稳定、专业执行。
适用场景:
类型 说明 示例 组织级工作流 标准化流程,固化企业内部的统一规范 品牌使用指南、合规审批流程、常用文档模板 领域型能力 专业任务能力,沉淀特定领域的操作最佳实践 Excel 复杂建模、PDF 深度解析、数据清洗规则 个人偏好 个性化工作方式,固化个人的工作习惯 特定的笔记结构、代码风格、信息调研流程
一些典型的应用场景: 读写本地文件、处理 PDF/Word/Excel、运行代码分析、执行 Git 操作、生成图表和可视化、优化自己或团队的工作流。
4. Projects:长期专属工作空间
角色定位
沉淀持久上下文的“独立工作室”
Projects 是面向特定工作主题的“独立工作室”。它是一个自包含的工作空间,旨在为 AI 提供持续积累的知识与对话上下文。因此,Projects 本质上就是 Agent 核心组件中的记忆模块的一种具体实现——它以文件夹的形式,为特定主题提供持久化的上下文存储。当然,记忆的实现方式不止这一种,但这种"项目式"的组织方式在实际使用中尤为便捷直观。
每个 Project 都配备独立的聊天记录和高达 200K 的上下文窗口,支持上传背景资料、补充领域知识,并可配置项目级的全局自定义指令。
核心辨析:Projects vs. Skills
- Projects 解决的是“背景上下文”问题(例如:存放某个产品发布的所有背景材料、公司代码库或长期客户信息)。
- Skills 解决的是“具体怎么做”问题(例如:沉淀团队的代码评审流程)。 最佳实践: 如果你发现在多个 Projects 之间需要反复复制同一套指令,请将这些通用规则抽离出来,封装成一个 Skill。
适用场景: 当需要以下能力时,优先选择 Projects:
场景类型 具体说明 持久上下文 需要让同一批背景知识持续作用于每一轮对话的长期任务。 工作空间隔离 规整工作台,将不同项目、不同工作计划的上下文物理隔离,避免信息混淆。 团队协作 在 Team/Enterprise 环境下共享知识库与对话历史。 角色扮演 为特定的专项项目设置专属的语气、视角或工作方式。
5. Subagents:分工明确的专项助手
角色定位
分工明确、限制隔离的“专职打工人”
正如综述中所描述的,多智能体系统 (Multi-Agent System) 的出现,本质上是让 AI 的工作模式从"单打独斗"转向"团队协作",通过 “专注子任务、上下文解耦、并行推进” 的逻辑,不仅提高了任务的完成上限,更让 AI 的工作变得可预测、可管理。
Subagents 是系统中的“独立执行单元”或“专职打工人”,它们是专攻特定细分任务的 AI 助手,拥有独立的上下文窗口和严格限定的工具权限。
通过自动委派或手动调用,Subagents 可以独立处理离散任务,并将结果回传给主代理,从而实现复杂任务的解耦与并行工作。
核心辨析:Subagents vs. Skills 用 Skills:把“怎么做”的通用方法论教给所有代理,让大家都能用。 用 Subagents:当需要独立执行、权限隔离、上下文隔离,并且希望按角色分工完成任务时。如果希望多个代理复用同一套安全审查流程,应该写成 Skill,而不是写死在某个 Subagent 里。
适用场景:
场景类型 具体说明 专精类任务 自动进行代码审查、测试用例生成、安全审计等闭环工作。 上下文管理 将专业且细碎的脏活累活下放给子代理,保持主对话上下文的清晰与聚焦。 并行处理 多个 Subagent 同时处理不同维度的任务,实现多任务并行处理,提升整体吞吐量。 隔离与限制 将特定 Subagent 限制在更安全的边界内(例如仅授予数据库的只读权限)。
6. MCP:模型上下文协议(外部连接通用协议)
角色定位
解决“数据在哪儿”的“外部桥梁与 USB 协议”
最后是 MCP(Model Context Protocol,模型上下文协议)。如果前面四个组件都在解决 AI 大脑内部的组织问题,那么 MCP 解决的就是“数据在哪儿”的外部桥梁问题。
MCP 是一套开放标准的连接层协议,专门用于将 AI 助手无缝接入各类外部系统、工具与数据源,彻底打破数据孤岛。它分为 MCP 服务端(暴露外部数据与能力)和 MCP 客户端(AI 应用发起调用)。
核心辨析: MPC vs. Skills,如果 AI Agent 是操作系统,MCP 就是 USB 协议,Skills 就是应用程序。
随着 Skills 的普及,MCP 的需求会大幅减少,Anthropic 的工程博客提到:他们用"代码执行 + MCP"的方法,把一个 150,000 token 的工作流压缩到了 2,000 tokens。他们的核心思路是让 AI 写代码调用工具,而不是预加载所有工具定义。这正是 Skills 的设计方向:用脚本封装能力,用渐进式披露管理知识,最大限度减少上下文消耗。
适用场景:
场景类型 具体说明 访问外部公共数据 调用第三方 SaaS API,桥接 Google Drive、Slack、GitHub 或各类云端数据库。 调用常规业务系统 对接企业的 CRM 系统、ERP 软件或项目管理平台。 访问需要认证的外部服务 访问需要 API 密钥或令牌的外部服务,如支付网关、数据仓库等。 对接企业自研系统 为内部专属业务工具提供标准化的 AI 接入方案。
7. 结束语
一个强大的 Agentic 生态,绝非新奇技术组件的无序堆砌,而是一场关乎系统架构与产品思维的深刻重塑。
当我们用 MCP 作为底层的“通用接口”去连接真实的外部数据,用 Projects 构筑起持久的领域知识上下文,用 Skills 将专家的工程规范与最佳实践固化为可执行脚本,用 Subagents 优雅地拆解并并行化复杂的业务逻辑,最后通过 Prompts 进行敏捷的意图调度时——我们实际上是在构建一个高度自治、可持续运转的 AI 原生操作系统。
在这个范式下,我们面对的不再是冷冰冰的代码或碎片化的对话框。通过规范驱动(Specification-Driven)的组件编排,我们正在以前所未有的效率,将零散的 AI 能力编织成高吞吐量的工作流,这不仅是机器能力的倍增,更是人类创造力的解放。
掌握了这套生态的协同机制,我们便能真正以一个 AI 赋能构建者(AI-Augmented Builder)的视角,让前沿技术精准落地,持续为产品与业务创造不可替代的价值。
',48)])])}const b=o(n,[["render",a]]);export{h as __pageData,b as default};
+import{_ as o,g as r,h as s,U as e}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const h=JSON.parse('{"title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","frontmatter":{"date":"2026-02-06T15:48:23.000Z","title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png","permalink":"/ai/agent/composition-ai-components","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent","AI"]},"headers":[],"relativePath":"ai/agent/composition-ai-components.md","filePath":"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md"}'),n={name:"ai/agent/composition-ai-components.md"};function a(d,t,i,l,g,p){return s(),r("div",null,[...t[0]||(t[0]=[e('构建 Agentic 生态:零散组件化为可持续的工作流
摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。

1. 引言
问题:在智能体生态里,各个组件到底是怎么协同工作的?
当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态,一个最核心的问题往往萦绕在开发者和用户的脑海中:在这个生态里,各个组件究竟是如何协同工作的?
事实上,一个成熟的 Agentic 生态系统,其本质是通过优雅地整合 Prompts、Skills、Projects、Subagents 以及 MCP 等核心组件,将原本零散的 AI 能力,编织成一条可持续、高可用的工作流。这不仅大幅提升了人机协作的效率,更为系统运行的稳定性提供了坚实保障。
接下来,我们将逐一拆解这些核心组件,看看它们是如何各司其职的。
2. Prompts:即时灵活的对话指令
角色定位
随叫随到的“即时口头指令”
Prompts 是生态中最基础的交互单元,如同我们在日常对话中下达的即时指令。你通过自然语言驱动 AI,它随叫随到,响应迅速。
⚠️ 注意事项:Prompts 不具备持久性,不会跨对话自动保留,关闭对话后上下文即刻失效。因此,对于重复性工作或涉及深厚专业知识的任务,强烈建议将其沉淀为 Skills 或 Projects。
适用场景:
场景类型 具体说明 一次性需求 快速进行文章总结、短句翻译等 对话中的迭代优化 临时修改文案语气、调整表述逻辑 临时数据处理 输入一段临时上下文,进行即时的数据分析或内容解读 指定输出格式 例如要求 AI "按项目符号列表输出" 或 "输出为 JSON 格式"
3. Skills:可复用的专属能力包(把高频方法变成可复用能力)
角色定位
标准化的“操作手册 + 资源包”
如果说 Prompts 是随口交代的任务,那么 Skills 就是标准化的“操作手册 + 资源包”。它将高频使用的方法固化下来,确保 AI 能够稳定、专业地按照同一套标准“做事”。
Skills 是一个包含完整指令说明、配套脚本和资源文件的能力文件夹。它采用渐进式加载机制(先加载元信息,再按需加载完整说明),在处理任务时按需发现、动态加载,实现特定领域的稳定、专业执行。
适用场景:
类型 说明 示例 组织级工作流 标准化流程,固化企业内部的统一规范 品牌使用指南、合规审批流程、常用文档模板 领域型能力 专业任务能力,沉淀特定领域的操作最佳实践 Excel 复杂建模、PDF 深度解析、数据清洗规则 个人偏好 个性化工作方式,固化个人的工作习惯 特定的笔记结构、代码风格、信息调研流程
一些典型的应用场景: 读写本地文件、处理 PDF/Word/Excel、运行代码分析、执行 Git 操作、生成图表和可视化、优化自己或团队的工作流。
4. Projects:长期专属工作空间
角色定位
沉淀持久上下文的“独立工作室”
Projects 是面向特定工作主题的“独立工作室”。它是一个自包含的工作空间,旨在为 AI 提供持续积累的知识与对话上下文。因此,Projects 本质上就是 Agent 核心组件中的记忆模块的一种具体实现——它以文件夹的形式,为特定主题提供持久化的上下文存储。当然,记忆的实现方式不止这一种,但这种"项目式"的组织方式在实际使用中尤为便捷直观。
每个 Project 都配备独立的聊天记录和高达 200K 的上下文窗口,支持上传背景资料、补充领域知识,并可配置项目级的全局自定义指令。
核心辨析:Projects vs. Skills
- Projects 解决的是“背景上下文”问题(例如:存放某个产品发布的所有背景材料、公司代码库或长期客户信息)。
- Skills 解决的是“具体怎么做”问题(例如:沉淀团队的代码评审流程)。 最佳实践: 如果你发现在多个 Projects 之间需要反复复制同一套指令,请将这些通用规则抽离出来,封装成一个 Skill。
适用场景: 当需要以下能力时,优先选择 Projects:
场景类型 具体说明 持久上下文 需要让同一批背景知识持续作用于每一轮对话的长期任务。 工作空间隔离 规整工作台,将不同项目、不同工作计划的上下文物理隔离,避免信息混淆。 团队协作 在 Team/Enterprise 环境下共享知识库与对话历史。 角色扮演 为特定的专项项目设置专属的语气、视角或工作方式。
5. Subagents:分工明确的专项助手
角色定位
分工明确、限制隔离的“专职打工人”
正如综述中所描述的,多智能体系统 (Multi-Agent System) 的出现,本质上是让 AI 的工作模式从"单打独斗"转向"团队协作",通过 “专注子任务、上下文解耦、并行推进” 的逻辑,不仅提高了任务的完成上限,更让 AI 的工作变得可预测、可管理。
Subagents 是系统中的“独立执行单元”或“专职打工人”,它们是专攻特定细分任务的 AI 助手,拥有独立的上下文窗口和严格限定的工具权限。
通过自动委派或手动调用,Subagents 可以独立处理离散任务,并将结果回传给主代理,从而实现复杂任务的解耦与并行工作。
核心辨析:Subagents vs. Skills 用 Skills:把“怎么做”的通用方法论教给所有代理,让大家都能用。 用 Subagents:当需要独立执行、权限隔离、上下文隔离,并且希望按角色分工完成任务时。如果希望多个代理复用同一套安全审查流程,应该写成 Skill,而不是写死在某个 Subagent 里。
适用场景:
场景类型 具体说明 专精类任务 自动进行代码审查、测试用例生成、安全审计等闭环工作。 上下文管理 将专业且细碎的脏活累活下放给子代理,保持主对话上下文的清晰与聚焦。 并行处理 多个 Subagent 同时处理不同维度的任务,实现多任务并行处理,提升整体吞吐量。 隔离与限制 将特定 Subagent 限制在更安全的边界内(例如仅授予数据库的只读权限)。
6. MCP:模型上下文协议(外部连接通用协议)
角色定位
解决“数据在哪儿”的“外部桥梁与 USB 协议”
最后是 MCP(Model Context Protocol,模型上下文协议)。如果前面四个组件都在解决 AI 大脑内部的组织问题,那么 MCP 解决的就是“数据在哪儿”的外部桥梁问题。
MCP 是一套开放标准的连接层协议,专门用于将 AI 助手无缝接入各类外部系统、工具与数据源,彻底打破数据孤岛。它分为 MCP 服务端(暴露外部数据与能力)和 MCP 客户端(AI 应用发起调用)。
核心辨析: MPC vs. Skills,如果 AI Agent 是操作系统,MCP 就是 USB 协议,Skills 就是应用程序。
随着 Skills 的普及,MCP 的需求会大幅减少,Anthropic 的工程博客提到:他们用"代码执行 + MCP"的方法,把一个 150,000 token 的工作流压缩到了 2,000 tokens。他们的核心思路是让 AI 写代码调用工具,而不是预加载所有工具定义。这正是 Skills 的设计方向:用脚本封装能力,用渐进式披露管理知识,最大限度减少上下文消耗。
适用场景:
场景类型 具体说明 访问外部公共数据 调用第三方 SaaS API,桥接 Google Drive、Slack、GitHub 或各类云端数据库。 调用常规业务系统 对接企业的 CRM 系统、ERP 软件或项目管理平台。 访问需要认证的外部服务 访问需要 API 密钥或令牌的外部服务,如支付网关、数据仓库等。 对接企业自研系统 为内部专属业务工具提供标准化的 AI 接入方案。
7. 结束语
一个强大的 Agentic 生态,绝非新奇技术组件的无序堆砌,而是一场关乎系统架构与产品思维的深刻重塑。
当我们用 MCP 作为底层的“通用接口”去连接真实的外部数据,用 Projects 构筑起持久的领域知识上下文,用 Skills 将专家的工程规范与最佳实践固化为可执行脚本,用 Subagents 优雅地拆解并并行化复杂的业务逻辑,最后通过 Prompts 进行敏捷的意图调度时——我们实际上是在构建一个高度自治、可持续运转的 AI 原生操作系统。
在这个范式下,我们面对的不再是冷冰冰的代码或碎片化的对话框。通过规范驱动(Specification-Driven)的组件编排,我们正在以前所未有的效率,将零散的 AI 能力编织成高吞吐量的工作流,这不仅是机器能力的倍增,更是人类创造力的解放。
掌握了这套生态的协同机制,我们便能真正以一个 AI 赋能构建者(AI-Augmented Builder)的视角,让前沿技术精准落地,持续为产品与业务创造不可替代的价值。
',48)])])}const b=o(n,[["render",a]]);export{h as __pageData,b as default};
diff --git a/assets/ai_agent_composition-ai-components.md.dI2iYRX7.lean.js b/assets/ai_agent_composition-ai-components.md.BsK5YUsc.lean.js
similarity index 96%
rename from assets/ai_agent_composition-ai-components.md.dI2iYRX7.lean.js
rename to assets/ai_agent_composition-ai-components.md.BsK5YUsc.lean.js
index 45d29760..adb97bab 100644
--- a/assets/ai_agent_composition-ai-components.md.dI2iYRX7.lean.js
+++ b/assets/ai_agent_composition-ai-components.md.BsK5YUsc.lean.js
@@ -1 +1 @@
-import{_ as o,g as r,h as s,U as e}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const h=JSON.parse('{"title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","frontmatter":{"date":"2026-02-06T15:48:23.000Z","title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png","permalink":"/ai/agent/composition-ai-components","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent","AI"]},"headers":[],"relativePath":"ai/agent/composition-ai-components.md","filePath":"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md"}'),n={name:"ai/agent/composition-ai-components.md"};function a(d,t,i,l,g,p){return s(),r("div",null,[...t[0]||(t[0]=[e("",48)])])}const b=o(n,[["render",a]]);export{h as __pageData,b as default};
+import{_ as o,g as r,h as s,U as e}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const h=JSON.parse('{"title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","frontmatter":{"date":"2026-02-06T15:48:23.000Z","title":"构建 Agentic 生态:零散组件化为可持续的工作流","description":"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png","permalink":"/ai/agent/composition-ai-components","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent","AI"]},"headers":[],"relativePath":"ai/agent/composition-ai-components.md","filePath":"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md"}'),n={name:"ai/agent/composition-ai-components.md"};function a(d,t,i,l,g,p){return s(),r("div",null,[...t[0]||(t[0]=[e("",48)])])}const b=o(n,[["render",a]]);export{h as __pageData,b as default};
diff --git a/assets/ai_agent_deepresearch-agent.md.BsV4SG6q.js b/assets/ai_agent_deepresearch-agent.md.CwdjsBlq.js
similarity index 99%
rename from assets/ai_agent_deepresearch-agent.md.BsV4SG6q.js
rename to assets/ai_agent_deepresearch-agent.md.CwdjsBlq.js
index 7129717c..049d17cf 100644
--- a/assets/ai_agent_deepresearch-agent.md.BsV4SG6q.js
+++ b/assets/ai_agent_deepresearch-agent.md.CwdjsBlq.js
@@ -1,4 +1,4 @@
-import{T as s}from"./chunks/TwoColumnImage.D6Bqef7c.js";import{g as t,h as r,U as e,z as n}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const o=JSON.parse('{"title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","frontmatter":{"date":"2026-04-02T00:38:37.000Z","title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","permalink":"/ai/agent/deepresearch-agent","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent SDK","Multi-Agent"]},"headers":[],"relativePath":"ai/agent/deepresearch-agent.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md"}'),p={name:"ai/agent/deepresearch-agent.md"},h=Object.assign(p,{setup(l){return(d,a)=>(r(),t("div",null,[a[0]||(a[0]=e(`声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统
摘要总结:对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过 “Lead + Subagent” 的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。
1. 引言
在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板,更通过模块化的设计增强了系统的可解释性与可控性。
但在实际工程落地中,开发者往往会面临一个尴尬的现实:简单的任务单智能体就能搞定,复杂的任务给单智能体加再多 Prompt 也会陷入“逻辑疲劳”或“上下文迷失”。深度研究(Deep Research)正是这类复杂任务的典型代表。它要求系统在长上下文环境下,同时具备高效的信息检索、严谨的数据推理和专业的文档输出能力。
本文将分享我基于 Claude Agent SDK(TypeScript 版)构建 Deep Research Agent 的实践过程。我们将探讨如何通过声明式架构实现多 Agent 的职责隔离,并展示这种模式如何通过模块化设计显著提升研究报告的专业度。
说明:
- 本项目基于 Anthropic 官方示例进行了 TypeScript 重构与流程优化。完整代码已开源至 GitHub,托管在我与几位好友共同创建的 full-stack-workspace 组织下的 agent-playground 仓库中,具体路径为:@agent-playground/deepresearch-agent。
- 如果你希望了解 Python 版本的实现,建议直接查阅官方示例仓库:claude-agent-sdk-demos
2. 为什么深度研究需要 Multi-Agent 架构模式?
回顾我们自己在某个领域或专题进行深度研究的经历,不难发现:深度研究并非单一的写作任务,而是一个多工种流水线。这其实是一个典型的多阶段任务,每个阶段都需要不同的专业能力:
阶段 描述 搜索阶段 专注于信息检索与收集,帮助建立对该领域的初步认知 分析阶段 对收集到的信息进行深度分析与归纳,提取关键洞察,并据此确定研究方向与重点 写作阶段 将分析成果转化为结构化的文字内容,如研究论文、技术报告等 可视化阶段 通过数据图表、信息图等形式直观呈现分析结果,提升信息传达效率
这种阶段化的专业分工,与人类研究团队中的协作模式高度契合。此外,深度研究任务往往涉及很多信息整合,具有较高的复杂度。若采用单智能体架构,通常会面临 Context Window 限制、早期信息被稀释、推理质量随任务推进而下降等挑战。
Multi-Agent 模式则通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅能显著提升任务处理的上限,更通过模块化设计增强了系统的可解释性与可控性。
3. 系统架构
3.1 核心设计与职责分配
DeepResearch Agent 通过搜索、收集、分析各种来源的信息,将这些信息整合为带有可视化图表的深度研究报告,以支持复杂的研究和决策任务。其架构采用 Lead Agent + Subagent的设计思路:
- Lead Agent 的核心规则是“只做管理,不做执行”。它的 allowedTools 被严格限制为 Task 工具。这种设计能有效防止 Lead Agent 因为过度处理细节而导致的逻辑发散。
- Researcher 须找到 10-15+ 个具体数据点(百分比、市场规模、增长率等)供 Data Analyst 可视化
- Report Writer 使用 Python + reportlab 通过 Bash 工具生成 PDF 报告,确保报告格式专业、内容
智能体 职责 工具 Lead Agent 协调研究,并将任务委派给子智能体。任务分解、协调调度(仅使用 Task 工具委托任务) TaskResearcher 并行网络搜索,收集量化数据(每个研究员专注一个子主题) WebSearch, WriteData Analyst 读取研究笔记,提取指标,生成 Python/matplotlib 图表 Glob, Read, Grep, Bash, Write, EditReport Writer 读取研究笔记和图表,生成 reportlab PDF 报告 Skill, Write, Glob, Read, Bash
Claude Agent SDK 起源于 Anthropic 的 Claude Code 项目,采用了与 Claude Code 相同的声明式设计,支持自定义技能和命令,针对 DeepResearch Agent 的具体任务,我们可以利用其声明式和模块化设计,添加一些相关的自定义 Agent Skills 和 Commands 命令:
deepresearch-agent/
+import{T as s}from"./chunks/TwoColumnImage.BpSz0MTE.js";import{g as t,h as r,U as e,z as n}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const o=JSON.parse('{"title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","frontmatter":{"date":"2026-04-02T00:38:37.000Z","title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","permalink":"/ai/agent/deepresearch-agent","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent SDK","Multi-Agent"]},"headers":[],"relativePath":"ai/agent/deepresearch-agent.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md"}'),p={name:"ai/agent/deepresearch-agent.md"},h=Object.assign(p,{setup(l){return(d,a)=>(r(),t("div",null,[a[0]||(a[0]=e(`声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统
摘要总结:对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过 “Lead + Subagent” 的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。
1. 引言
在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板,更通过模块化的设计增强了系统的可解释性与可控性。
但在实际工程落地中,开发者往往会面临一个尴尬的现实:简单的任务单智能体就能搞定,复杂的任务给单智能体加再多 Prompt 也会陷入“逻辑疲劳”或“上下文迷失”。深度研究(Deep Research)正是这类复杂任务的典型代表。它要求系统在长上下文环境下,同时具备高效的信息检索、严谨的数据推理和专业的文档输出能力。
本文将分享我基于 Claude Agent SDK(TypeScript 版)构建 Deep Research Agent 的实践过程。我们将探讨如何通过声明式架构实现多 Agent 的职责隔离,并展示这种模式如何通过模块化设计显著提升研究报告的专业度。
说明:
- 本项目基于 Anthropic 官方示例进行了 TypeScript 重构与流程优化。完整代码已开源至 GitHub,托管在我与几位好友共同创建的 full-stack-workspace 组织下的 agent-playground 仓库中,具体路径为:@agent-playground/deepresearch-agent。
- 如果你希望了解 Python 版本的实现,建议直接查阅官方示例仓库:claude-agent-sdk-demos
2. 为什么深度研究需要 Multi-Agent 架构模式?
回顾我们自己在某个领域或专题进行深度研究的经历,不难发现:深度研究并非单一的写作任务,而是一个多工种流水线。这其实是一个典型的多阶段任务,每个阶段都需要不同的专业能力:
阶段 描述 搜索阶段 专注于信息检索与收集,帮助建立对该领域的初步认知 分析阶段 对收集到的信息进行深度分析与归纳,提取关键洞察,并据此确定研究方向与重点 写作阶段 将分析成果转化为结构化的文字内容,如研究论文、技术报告等 可视化阶段 通过数据图表、信息图等形式直观呈现分析结果,提升信息传达效率
这种阶段化的专业分工,与人类研究团队中的协作模式高度契合。此外,深度研究任务往往涉及很多信息整合,具有较高的复杂度。若采用单智能体架构,通常会面临 Context Window 限制、早期信息被稀释、推理质量随任务推进而下降等挑战。
Multi-Agent 模式则通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅能显著提升任务处理的上限,更通过模块化设计增强了系统的可解释性与可控性。
3. 系统架构
3.1 核心设计与职责分配
DeepResearch Agent 通过搜索、收集、分析各种来源的信息,将这些信息整合为带有可视化图表的深度研究报告,以支持复杂的研究和决策任务。其架构采用 Lead Agent + Subagent的设计思路:
- Lead Agent 的核心规则是“只做管理,不做执行”。它的 allowedTools 被严格限制为 Task 工具。这种设计能有效防止 Lead Agent 因为过度处理细节而导致的逻辑发散。
- Researcher 须找到 10-15+ 个具体数据点(百分比、市场规模、增长率等)供 Data Analyst 可视化
- Report Writer 使用 Python + reportlab 通过 Bash 工具生成 PDF 报告,确保报告格式专业、内容
智能体 职责 工具 Lead Agent 协调研究,并将任务委派给子智能体。任务分解、协调调度(仅使用 Task 工具委托任务) TaskResearcher 并行网络搜索,收集量化数据(每个研究员专注一个子主题) WebSearch, WriteData Analyst 读取研究笔记,提取指标,生成 Python/matplotlib 图表 Glob, Read, Grep, Bash, Write, EditReport Writer 读取研究笔记和图表,生成 reportlab PDF 报告 Skill, Write, Glob, Read, Bash
Claude Agent SDK 起源于 Anthropic 的 Claude Code 项目,采用了与 Claude Code 相同的声明式设计,支持自定义技能和命令,针对 DeepResearch Agent 的具体任务,我们可以利用其声明式和模块化设计,添加一些相关的自定义 Agent Skills 和 Commands 命令:
deepresearch-agent/
├── .claude/
│ ├── skills/ # 可使用的 Agent Skills 技能目录
│ │ ├── pdf/ # 生成 PDF 报告的技能
diff --git a/assets/ai_agent_deepresearch-agent.md.BsV4SG6q.lean.js b/assets/ai_agent_deepresearch-agent.md.CwdjsBlq.lean.js
similarity index 92%
rename from assets/ai_agent_deepresearch-agent.md.BsV4SG6q.lean.js
rename to assets/ai_agent_deepresearch-agent.md.CwdjsBlq.lean.js
index 6c82cd4a..75dd1651 100644
--- a/assets/ai_agent_deepresearch-agent.md.BsV4SG6q.lean.js
+++ b/assets/ai_agent_deepresearch-agent.md.CwdjsBlq.lean.js
@@ -1 +1 @@
-import{T as s}from"./chunks/TwoColumnImage.D6Bqef7c.js";import{g as t,h as r,U as e,z as n}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const o=JSON.parse('{"title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","frontmatter":{"date":"2026-04-02T00:38:37.000Z","title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","permalink":"/ai/agent/deepresearch-agent","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent SDK","Multi-Agent"]},"headers":[],"relativePath":"ai/agent/deepresearch-agent.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md"}'),p={name:"ai/agent/deepresearch-agent.md"},h=Object.assign(p,{setup(l){return(d,a)=>(r(),t("div",null,[a[0]||(a[0]=e("",38)),n(s,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_3.jpg","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_2.jpg",leftCaption:"图 1:初中生数学成绩下降原因分析",rightCaption:"图 2:不同学习方法下的数学成绩优秀率对比"}),n(s,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_math_module.jpg","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_4.jpg",leftCaption:"图 3:初中数学各模块分值占比分布示意",rightCaption:"图 4:人的记忆保持随时间变化趋势曲线"}),a[1]||(a[1]=e("",5))]))}});export{o as __pageData,h as default};
+import{T as s}from"./chunks/TwoColumnImage.BpSz0MTE.js";import{g as t,h as r,U as e,z as n}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const o=JSON.parse('{"title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","frontmatter":{"date":"2026-04-02T00:38:37.000Z","title":"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统","description":"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。","permalink":"/ai/agent/deepresearch-agent","sticky":1,"top":true,"categories":["AI 学习与实践"],"tags":["Agent SDK","Multi-Agent"]},"headers":[],"relativePath":"ai/agent/deepresearch-agent.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md"}'),p={name:"ai/agent/deepresearch-agent.md"},h=Object.assign(p,{setup(l){return(d,a)=>(r(),t("div",null,[a[0]||(a[0]=e("",38)),n(s,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_3.jpg","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_2.jpg",leftCaption:"图 1:初中生数学成绩下降原因分析",rightCaption:"图 2:不同学习方法下的数学成绩优秀率对比"}),n(s,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_math_module.jpg","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/mas_output_4.jpg",leftCaption:"图 3:初中数学各模块分值占比分布示意",rightCaption:"图 4:人的记忆保持随时间变化趋势曲线"}),a[1]||(a[1]=e("",5))]))}});export{o as __pageData,h as default};
diff --git a/assets/ai_agent_math-bot.md.DG9CFfr9.js b/assets/ai_agent_math-bot.md.BxBzXMwt.js
similarity index 99%
rename from assets/ai_agent_math-bot.md.DG9CFfr9.js
rename to assets/ai_agent_math-bot.md.BxBzXMwt.js
index 3003c191..0879552e 100644
--- a/assets/ai_agent_math-bot.md.DG9CFfr9.js
+++ b/assets/ai_agent_math-bot.md.BxBzXMwt.js
@@ -1,4 +1,4 @@
-import{_ as n,g as a,h as i,U as e}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const c=JSON.parse('{"title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","frontmatter":{"date":"2024-06-14T22:00:00.000Z","title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","permalink":"/ai/agent/math-bot","categories":["AI 学习与实践"],"tags":["Agent","产品 Sense"]},"headers":[],"relativePath":"ai/agent/math-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md"}'),p={name:"ai/agent/math-bot.md"};function l(t,s,r,h,k,g){return i(),a("div",null,[...s[0]||(s[0]=[e(`一次由 Product Sense 驱动的 Agent 极限实践
摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。
在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。
令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。
复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。
以下是关于这次“K12 数学小助手” Agent 搭建的实践总结与思考。
1. 破局点:面对 K12 赛道,谁才是真正的用户?
活动给定的命题是“K12 教育”。在极限开发的时间压力下,最容易陷入的思维陷阱就是“直线思考”——既然是 K12,那就直接做一个给学生用的解题机器人。
但这恰恰违背了产品的核心逻辑。从受众角度来看,直接面向心智尚未成熟的 K12 学生提供一个“答案生成器”,极易沦为应付作业的作弊工具,既得不到学校的认可,也会引发家长的担忧。
因此,在选题阶段,我们进行了一次关键的视角切换:将目标用户从“学生”转移到了“家长和老师”。
当代家长在辅导孩子尤其是数学作业时,最大的痛点往往不是“不知道答案”,而是“不知道如何科学地给孩子讲解”。基于这个 Product Sense,我们确定了 Agent 的核心定位——它不是一个冷冰冰的解题机,而是一位帮助家长掌握科学辅导方法的“幕后导师”。
2. 为什么选择“数学”?—— 技术边界与场景的完美契合
在众多的 K12 学科中,我们最终锁定了“数学”,这并非偶然,而是基于对大语言模型(LLM)能力边界的清晰认知:
规避“幻觉”的工程解法:众所周知,纯文本大模型在进行严谨的逻辑推演和数学计算时,极易产生“幻觉”。但自定义 Agent 拥有调用外部工具(尤其是代码解释器 Code Interpreter)的能力。这意味着我们可以让 Agent 通过编写和执行代码来处理复杂的数学计算,从而在架构层面保证了结果的准确性。
满足“解题”与“解释”的双重需求:数学不仅仅是得出正确答案,更重要的是推导过程。Agent 可以并发处理双重任务——一方面在后台精准计算,另一方面在前台用自然语言将解题思路拆解为通俗易懂的“人话”,提供全面的教学辅助。
3. Agent 核心设计:结构化的 Prompt 规范
确定了产品方向后,接下来的重点就是“规范驱动” Prompt 设计。为了让 Agent 稳定输出高质量的内容,我们对其角色、工作流、工具链和限制条件进行了严格的定义。以下是我们在比赛中使用的核心 Prompt 设计:
markdown# 角色任务
+import{_ as n,g as a,h as i,U as e}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const c=JSON.parse('{"title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","frontmatter":{"date":"2024-06-14T22:00:00.000Z","title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","permalink":"/ai/agent/math-bot","categories":["AI 学习与实践"],"tags":["Agent","产品 Sense"]},"headers":[],"relativePath":"ai/agent/math-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md"}'),p={name:"ai/agent/math-bot.md"};function l(t,s,r,h,k,g){return i(),a("div",null,[...s[0]||(s[0]=[e(`一次由 Product Sense 驱动的 Agent 极限实践
摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。
在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。
令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。
复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。
以下是关于这次“K12 数学小助手” Agent 搭建的实践总结与思考。
1. 破局点:面对 K12 赛道,谁才是真正的用户?
活动给定的命题是“K12 教育”。在极限开发的时间压力下,最容易陷入的思维陷阱就是“直线思考”——既然是 K12,那就直接做一个给学生用的解题机器人。
但这恰恰违背了产品的核心逻辑。从受众角度来看,直接面向心智尚未成熟的 K12 学生提供一个“答案生成器”,极易沦为应付作业的作弊工具,既得不到学校的认可,也会引发家长的担忧。
因此,在选题阶段,我们进行了一次关键的视角切换:将目标用户从“学生”转移到了“家长和老师”。
当代家长在辅导孩子尤其是数学作业时,最大的痛点往往不是“不知道答案”,而是“不知道如何科学地给孩子讲解”。基于这个 Product Sense,我们确定了 Agent 的核心定位——它不是一个冷冰冰的解题机,而是一位帮助家长掌握科学辅导方法的“幕后导师”。
2. 为什么选择“数学”?—— 技术边界与场景的完美契合
在众多的 K12 学科中,我们最终锁定了“数学”,这并非偶然,而是基于对大语言模型(LLM)能力边界的清晰认知:
规避“幻觉”的工程解法:众所周知,纯文本大模型在进行严谨的逻辑推演和数学计算时,极易产生“幻觉”。但自定义 Agent 拥有调用外部工具(尤其是代码解释器 Code Interpreter)的能力。这意味着我们可以让 Agent 通过编写和执行代码来处理复杂的数学计算,从而在架构层面保证了结果的准确性。
满足“解题”与“解释”的双重需求:数学不仅仅是得出正确答案,更重要的是推导过程。Agent 可以并发处理双重任务——一方面在后台精准计算,另一方面在前台用自然语言将解题思路拆解为通俗易懂的“人话”,提供全面的教学辅助。
3. Agent 核心设计:结构化的 Prompt 规范
确定了产品方向后,接下来的重点就是“规范驱动” Prompt 设计。为了让 Agent 稳定输出高质量的内容,我们对其角色、工作流、工具链和限制条件进行了严格的定义。以下是我们在比赛中使用的核心 Prompt 设计:
markdown# 角色任务
你是一位经验丰富的小学数学教师,专注于帮助家长掌握科学的数学辅导方法。你的核心目标是引导家长理解问题背后的思维逻辑,提升他们协助孩子分析与解决问题的能力,真正做到“授人以渔”,同时还能够举一反三。
在回应家长提问时,请严格遵循以下三步流程:
diff --git a/assets/ai_agent_math-bot.md.DG9CFfr9.lean.js b/assets/ai_agent_math-bot.md.BxBzXMwt.lean.js
similarity index 95%
rename from assets/ai_agent_math-bot.md.DG9CFfr9.lean.js
rename to assets/ai_agent_math-bot.md.BxBzXMwt.lean.js
index f344393d..a406067b 100644
--- a/assets/ai_agent_math-bot.md.DG9CFfr9.lean.js
+++ b/assets/ai_agent_math-bot.md.BxBzXMwt.lean.js
@@ -1 +1 @@
-import{_ as n,g as a,h as i,U as e}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const c=JSON.parse('{"title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","frontmatter":{"date":"2024-06-14T22:00:00.000Z","title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","permalink":"/ai/agent/math-bot","categories":["AI 学习与实践"],"tags":["Agent","产品 Sense"]},"headers":[],"relativePath":"ai/agent/math-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md"}'),p={name:"ai/agent/math-bot.md"};function l(t,s,r,h,k,g){return i(),a("div",null,[...s[0]||(s[0]=[e("",24)])])}const d=n(p,[["render",l]]);export{c as __pageData,d as default};
+import{_ as n,g as a,h as i,U as e}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const c=JSON.parse('{"title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","frontmatter":{"date":"2024-06-14T22:00:00.000Z","title":"一次由 Product Sense 驱动的 Agent 极限实践","description":"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","permalink":"/ai/agent/math-bot","categories":["AI 学习与实践"],"tags":["Agent","产品 Sense"]},"headers":[],"relativePath":"ai/agent/math-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md"}'),p={name:"ai/agent/math-bot.md"};function l(t,s,r,h,k,g){return i(),a("div",null,[...s[0]||(s[0]=[e("",24)])])}const d=n(p,[["render",l]]);export{c as __pageData,d as default};
diff --git a/assets/ai_agent_overview.md.DVuo6oKK.js b/assets/ai_agent_overview.md.DJkZ_Y17.js
similarity index 99%
rename from assets/ai_agent_overview.md.DVuo6oKK.js
rename to assets/ai_agent_overview.md.DJkZ_Y17.js
index 49cfa347..6ac7ec93 100644
--- a/assets/ai_agent_overview.md.DVuo6oKK.js
+++ b/assets/ai_agent_overview.md.DJkZ_Y17.js
@@ -1 +1 @@
-import{_ as e,g as n,h as l,U as o}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const p=JSON.parse('{"title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","frontmatter":{"date":"2026-02-12T22:31:00.000Z","title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png","permalink":"/ai/agent/overview","top":true,"categories":["ai-practice"],"tags":["AI Agent","Agent"]},"headers":[],"relativePath":"ai/agent/overview.md","filePath":"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md"}'),a={name:"ai/agent/overview.md"};function r(g,t,s,i,d,u){return l(),n("div",null,[...t[0]||(t[0]=[o('从提示词到数字员工:AI Agent 深度全景综述
摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从"以人为中心"向"以 AI 为中心"的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。
1. 什么是 Agent?——从“工具”到“实体”的进化
核心逻辑:现代 Agent 的本质是 "LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。
在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。
如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:
自主性 (Autonomy): 无须时刻盯着,设定目标后它能自己想办法完成。
适应性 (Adaptability): 环境变了(比如网页改版或 API 报错),它能实时调整策略。
主动性 (Proactivity): 不只是被动响应指令,它会主动拆解目标并寻找路径。
社会性 (Sociality): 它能像人一样,与其他 Agent 或人类进行协作。
2. 核心价值:自动化程度的阶梯式跨越
我们对 Agent 的追求,本质上是从“写好提示词(Prompt)”转向“构建自主工作流(Workflow)”。为了更直观地衡量 Agent 的能力,我们可以将其自动化程度分为三个档次:
自动化等级 核心特征 典型代表 L1:任务执行者 处理单一模态、简单数据;调用少量标准工具;执行预定义的静态任务。 翻译脚本、简单 SQL 生成器 L2:流程编排者 多模态感知;具备长短期记忆;能编排复杂、长尾的任务流。 Dify, Coze, n8n L3:自主进化者 极少人工干预;自主洞察环境变化;实现业务流程的自适应编排。 Claude Code, Manus, OpenClaw
随着 Agent 能力的"逐梯跨越",过往的工作范式可能被颠覆,实现从"面向过程"到"面向目标"的根本性颠覆。对于软件系统开发人员而言,传统的软件工程思路以人为中心,AI 只是辅助工具,通过采用固定形态的交互界面和预定义有限域的任务,实现规模化的生产方式。而 Agent 工程则是以 AI 为中心,人类转型为监督者和资源提供者,采用动态人机交互界面和无预制有限域的任务,完成规模化的个性化生产。
3. 应用场景:谁会被替代,谁会被增强?
3.1 深度替代与变革型
在这类场景中,AI 已经能够闭环完成 80% 以上的工作,在显著重构工作模式后,部分岗位可能被替代:
基础编程:AI 代码助手自动生成样板代码、排查 Bug,初级 Coders 必须向架构和复杂逻辑转型。
基础学习(知识点 / 技能):题库刷题、基础答疑、知识点检索。AI 可直接替代人工答疑 / 辅导,覆盖 80% 基础学习需求。
标准化客服:处理 90% 的售后咨询与查询,人工仅负责处理极端复杂的情感诉求。
3.2 辅助增强型(升级工作价值)
AI 作为效率工具,不替代核心岗位,而是负责脏活累活、升级工作价值,人类负责决策与审美:
- 高级咨询:Agent 可自动整理行业数据、生成分析报告初稿,咨询师从"信息收集"中解放出来,更聚焦策略洞察、客户沟通等高价值环节。
- 深度研究(学术 / 行业):Agent 自动完成文献检索、数据清洗与报告框架搭建,研究者得以专注于核心创新结论、深度洞察与研究设计,实现从"资料整理"到"思想创造"的价值跃迁。
- 高级学习(研究性 / 技能):Agent 辅助完成知识体系搭建、复杂技能拆解与进阶路径规划,学习者将精力投入理解内化、实践探索与自主创新,完成从"知识获取"到"能力建构"的范式转变。
3.3 生活与垂直领域(长尾覆盖)
- 健康医护:虚拟健康助手基于可穿戴设备数据提供 24h 监护,并在异常时主动预警。
- 个性化教育:Agent 就像一个 1 对 1 助教,根据你的错题逻辑实时调整教学大纲,而非死记硬背。
- 个人财务:自动追踪账单、优化预算,并根据市场动态提供初步投资建议。
4. 技术拆解:Agent 核心要素与关键技术
Agent = LLM (大脑) + 工具 (手脚) + 指令 (行为准则) + 自主工作流执行。
一个成熟的 Agent 系统通常由规划(Planning)、记忆(Memory)、工具(Tools)和行动(Action)四大核心模块构成:

- 规划(Planning):解决"怎么做"
- 任务分解:将“帮我写一个电商 App”拆解为 UI 设计、后端架构、数据库建模等子目标。
- 反思与评价:在执行过程中不断“自我批评”,发现走不通时及时掉头。
- 记忆(Memory):解决"我是谁,我做过什么"
- 短期记忆:与上下文学习有关,存储当前的对话流,记录最近的交互历史,如用户指令、系统响应等。
- 长期记忆:涉及信息的长时间保留和检索,存储长期的知识库,如用户个人信息、任务历史等,通常通过利用外部向量存储与快速检索来实现。
- 工具 (Tools):解决"能力边界"。LLM 虽然博学,但不会算高难度数学,也不知道昨天的天气,工具就是它的“外挂”。
- 行动(Action):解决"落地执行",将规划好的逻辑转化为具体的 API 调用或代码执行,并接收环境反馈,形成闭环。
4.1 规划
Agent的规划核心包含任务分解与自我反思两部分:任务分解是将复杂目标拆解为易执行的子任务,主要有先分解后规划、边分解边规划及基于语言模型的分解三类方法;自我反思则通过“生成-反思”循环,结合相关框架与模式优化执行结果、提升运行质量。
若需进一步了解详细的规划机制,可打开:Agent规划模块
4.2 记忆
Agent的记忆是其核心模块,借鉴人类记忆分为感觉、短期、长期三类,结合内部、跨任务及外部知识积累,应用中需适配场景选择存储检索方式。
记忆类型 说明 感官记忆 这是最基础的阶段,指智能体接收外部输入(文本、图像、语音)的瞬时感知。在 LLM 交互中,这表现为模型对当前 Prompt 的原始解析。 短期记忆 主要指上下文学习(In-Context Learning),它受限于 LLM 的上下文窗口(Context Window),存储的只是有限轮次的对话历史,如用户指令、系统响应等。
• 核心功能:存储当前对话流,记录最近几轮的交互历史(指令、系统响应、中间思考过程)。
• 技术实现:通过将历史对话拼接在当前的 Prompt 中实现。 长期记忆 涉及信息的长时间保留和在需要时的精准检索,这是 Agent 迈向高度自主的关键。
• 核心功能:存储用户的个人偏好、长期的项目背景、历史任务的成功经验或失败教训。
• 技术实现:通常利用外部向量数据库(Vector DB)实现,通过"嵌入(Embedding)+ 向量检索"在数百万条记录中快速定位相关信息。
如果规划模块赋予了 Agent “逻辑”,那么记忆模块则赋予了它“灵魂”和“连续性”。随着长文本技术(Long Context)和向量搜索算法的不断演进,Agent 的记忆将变得越来越深邃且精准。
对于开发者而言,设计优秀的记忆淘汰与检索算法,比单纯追求大模型的参数规模更为重要。只有当 Agent 能够“记住”业务细节并“忘记”无关噪音时,它才真正具备了从“对话工具”进化为“数字合伙人”的素质。
4.3 工具
典型案例:Claude Code 集成了文件读写、查找、Bash 等一系列通用工具,使其成为一个能够自主写代码的"数字工程师"。
LLM 本身在处理实时信息(如天气)、精确计算(如高阶数学)或特定私域数据(如公司财务报表)时存在天然局限,而工具赋予了 Agent 超越模型内核的能力。我们可以从功能属性和实现方式两个维度来理解 Agent 的工具箱:
1、按功能属性分类:Agent 能做什么?
类别 功能定位 核心能力 数据类 (Data) 解决"信息差" 通过检索工具(Retrieval)从搜索引擎、数据库或 PDF 文档中获取最新上下文。 行动类 (Action) 解决"执行力" 通过 API 调用在外部系统中产生影响,例如发送邮件、修改 CRM 记录或提交订单。 编排类 (Orchestration) 解决"复杂性" 将多个子任务组合成一个更大的任务。一个 Agent 也可以被封装成工具,供另一个更高级的 Agent 调用,实现多智体协作。
2、按实现方式分类:Agent 怎么调用?
实现方式 说明 函数调用 (Function Calling) 模型生成结构化指令,由客户端在本地执行(如操作本地文件或内网数据库),兼顾安全性与灵活性。 标准扩展 (Extensions) 通过标准化的协议(如 OpenAPI)直接连接外部服务,使 Agent 能够像乐高积木一样无缝对接各种云端 API。 计算机使用 (Computer Use) 对于没有 API 的陈旧系统,Agent 可以通过视觉识别和模拟鼠标键盘,像人类一样直接操作软件界面。
4.4 行动
行动(Action)模块是 Agent 的执行机构,它的职责是将规划阶段生成的"蓝图"转化为物理世界或数字系统中的"动作"。它不仅是指令的输出者,更是环境反馈的接收者。
行动模块的核心在于完成以下三个层面的逻辑闭环:
模块 说明 示例 动作生成 (Action Generation) 将复杂的子目标转化为具体的步骤 规划是"调查市场趋势",行动则是先"搜索关键词",再"提取网页内容",最后"生成摘要" 动态调整 (Dynamic Adaptation) 行动并非死板的执行脚本,Agent 会根据工具返回的结果(反馈)实时调整策略 如果一次搜索没有找到答案,行动模块会决定尝试不同的关键词或切换工具 环境交互 (Interaction) 明确行动的范围,包括内部行动与外部工具调用 利用 LLM 的内在能力(如推理、总结)进行内部行动,以及通过调用外部工具(如 API、数据库)扩展行动边界,最终达成预设的行动目标
整体来讲,行动模块确保了 Agent 的"言行一致":它基于记忆来决策,利用工具来施展,最终通过不断与环境互动,将抽象的目标变为真实的结果。
5. Agent 的分类与未来
目前 Agent 领域尚无统一标准,但我们可以按其业务深度与协作范式将其归纳为五大形态。从单兵作战的“全能大脑”到成群结队的“数字团队”,它们正以不同的进化路径渗透进各种复杂的生产场景。接下来,我们将逐一拆解这五种重塑生产力的核心类别。
5.1 通用 Agent
随着技术的演进,业界对智能体的认知也发生了变化:真正的 Agent 不应只是被动响应人类指令的"聊天插件",而是一个自主的目标执行者。
在这种背景下,通用 Agent (General Agent) 脱颖而出。它并非为特定单一任务(如“写一段代码”)而生,而是一个拥有广泛能力边界、能够解决开放式问题的智能系统。其运作逻辑可以精炼为“思考(Think)、行动(Act)、学习(Learn)”的闭环:
阶段 核心功能 详细说明 思考 任务拆解与路径规划 智能体接收到模糊目标(如"帮我调研并搭建一个技术博客")后,会进行任务拆解与路径规划,并在执行过程中不断反思"当前方案是否最优?是否需要调整?" 行动 调用高度自动化的原子能力 基于思考结果,调用高度自动化的原子能力。除了读写文件、网页浏览、运行终端命令或访问数据库外,常见的原子能力还包括:
• 环境探测:自动识别当前操作系统环境、安装缺失的依赖包。
• 视觉交互:在没有 API 的情况下,通过屏幕截图识别 UI 元素并模拟点击。
• 资源调度:自动申请 API Key、配置云端服务或触发 GitHub Actions 工作流。
• 跨应用编排:将 A 应用的输出处理后,精准填充到 B 应用的表单中。 学习 个人偏好沉淀与经验积累 这是通用 Agent 进阶的关键。它能从交互中记住你的个人偏好(例如:报告偏好 PDF 格式、代码风格倾向于 TypeScript),并将其沉淀为"经验",使下一次决策更符合预期。
为了应对不同复杂程度的任务,业界演化出了两种主流的实现范式:
- ReAct 像是一个反应敏捷的**“现场协调员”,擅长随机应变。
- Plan-and-Execute 则更像一位经验丰富的“项目经理”**,以全局规划见长。
范式类型 核心逻辑 优势 适用场景 ReAct Agent 采用"思考-行动-观测"小步快跑模式。模型走一步看一步,根据环境的即时反馈调整下一步动作。 实时性强、交互自然、逻辑链路透明。 较为简单的任务、对成本敏感的轻量级场景。 Plan-and-Execute Agent 先由一个"大脑"将复杂目标拆解为完整的步骤列表(Todo List),再由另一只 "手" 负责逐一高效执行。 准确率极高,能够处理具备深度依赖关系的复杂工程。 需要长程推理的任务、软件开发、深度行业调研。
5.2 多智能体系统 (Multi-Agent System)
多智能体系统通过 “专注子任务、上下文解耦、并行推进” 的逻辑,让 AI 从一个人的独角戏,演变成了指挥若定的交响乐。它不仅提高了任务的完成上限,更让 AI 的工作变得可预测、可管理。
当面对较复杂的工程任务时,单个 Agent 往往会因为任务链信息量太大而信息量太大而陷入"混乱"或出错。多智能体系统 (Multi-Agent System) 的出现,本质上是让 AI 的工作模式从"单打独斗"转向"团队协作"。
在 MAS 架构中,主智能体(Lead Agent)可以根据需求生成多个独立的子智能体(Subagent)。这些子智能体像是一群专注的专家,各自处理特定的子任务,从而带来了四个维度的核心优势:
维度 详细说明 上下文的精细隔离 这是多智能体最强悍的地方。每个子智能体拥有独立的记忆空间,确保细碎的中间任务不会"污染"主对话环境。例如,负责搜集海量原始数据的 Subagent,其繁杂的搜索记录会被隔离在自己的上下文中,只把最终提炼的结论汇报给主智能体,让主脑始终保持清醒的大局观。 极致的并行化效率 在单 Agent 模式下,任务只能一件接一件地做;而在 MAS 中,多个子智能体可以并行运行。就像一个调研项目,多个研究员可以同时在不同领域搜集数据,显著加快了复杂工作流的交付速度。 专业指令的深度定制 我们可以为不同的 Subagent 注入不同的"灵魂"。负责"代码审计"的拥有最严苛的安全规范,负责"文案润色"的拥有细腻的品牌调性。这种指令隔离避免了在同一个提示词(Prompt)中堆砌太多要求而导致的指令失效。 工具调用的安全边界 我们可以精准限制每个子智能体的权限。例如,查询数据的 Subagent 只有"只读"权限,而"发送邮件"或"修改数据库"权限被严格限制在特定的 Subagent 手中,极大降低了 AI 产生意外行为的风险。
典型案例:Deep Research 深度调研系统
以一个复杂的调研流程为例,系统会通过 Lead Agent + Subagent 的分层架构完美闭环:
- Lead Agent (协调员):负责“脑力拆解”,将主题分解为若干子课题,并委派任务,它从不亲自查资料,保持绝对的简效。
- Researcher (研究员):多个实例并行出发,每个专注于一个子主题,搜集至少 10-15 个硬核数据点。
- Data Analyst (数据分析师):仅负责读取研究笔记,利用 Python 生成直观的图表。
- Report Writer (报告撰写员): 汇总所有研究成果,最终调用工具生成一份专业的 PDF 报告。
5.3 知识型 Agent
如果说通用 Agent 擅长逻辑推理,那么多智能体擅长流程协作,知识型 Agent 的核心使命则是"理解并转化海量非结构化数据"。它不仅仅是一个简单的搜索工具,而是一个能够深度理解私域知识并基于此进行复杂决策的智能实体。
在企业级应用中,数据往往散落在物理文档、代码仓库、Slack 聊天记录或关系型数据库中。知识型 Agent 的核心诉求在于:
"全局理解与跨库关联":它能跨越不同的文档格式与存储介质,建立起知识间的逻辑联系。
"动态更新与实时同步":它能感知环境反馈,随着项目进展自动同步最新的会议纪要或技术方案。
"深度的知识推理": 不止是"检索",更是"思考"。
应用场景示例:
想象你需要复盘一个复杂项目的进度。知识型 Agent 可以瞬间扫描过去三个月的所有项目会议纪要、Slack 讨论记录和技术文档,最终为你总结出:"导致 X 项目延期的核心原因主要集中在 A 接口的权限变动,以及 B 团队在第二周的人力缺口。"
这种 Agent 的核心价值在于,它将原本"死"的资料库变成了"活"的生产力工具。无论是基于全局文档回答复杂问题,还是结合外部非知识工具(如自动发邮件通知相关责任人),知识型 Agent 都是构建知识密集型应用的关键。
5.4 多模态 Agent
多模态 Agent 是一种能够处理多种模态数据(如文本、图像、视频等)的 Agent 类型。其核心价值在于其感知与推理的深度融合:它不仅能"读"指令,更能"看"环境,并据此生成多维度的反馈。
- 全感官输入与输出:它可以直接接收图片、视频流或实时语音,并生成对应的多媒体内容或执行具体的动作。
- 跨模态深度推理:例如,它能结合图像细节与文本逻辑,识别出复杂的对象关联或异常状态。
典型应用场景:
想象一个"自动化 QA 测试 Agent":你只需给它一段手机屏幕录屏,它能自动识别出 UI 界面上导致崩溃的 Bug 按钮位置,精准截取关键帧,并自动在 Jira 系统中提交一个包含“操作步骤、异常截图、预期效果”的专业技术工单。
这种能"能看、能听、能说"的特性,让 Agent 彻底走出了纯文字的温室,开始在 UI 自动化测试、工业巡检、智能家居等现实交互场景中大放异彩。
5.5 迈向高度自主:OpenClaw 与"数字员工"
通用型 Agent 虽然在逻辑推理与工具调用方面取得了长足进步,但在实际落地场景中仍面临显著限制。大多数系统本质上是反应性的,依赖人类持续的指令输入,难以在没有人工干预的情况下独立完成跨越数日的长时运行任务(Long-Running Tasks)。人们对一个 7 天 24 小时不间断工作的数字员工的愿景,催生了对基础架构的重新审视。
在这种背景下,OpenClaw 脱颖而出,成为解决长时运行、自主规划与持久化状态管理等核心技术挑战的典型代表。它不仅是一个 Agent 框架,更像是一个初步成形的 “Agent OS(智能体操作系统)”。其架构设计并非简单的 API 封装,而是一个务实的分布式控制平面。其最显著的特征是实现了控制逻辑(Control Plane)与推理执行(Runtime)的深度解耦。这一设计使得 OpenClaw 能够作为机器上的长久守护进程运行,保持对各种通讯频道的监听,同时处理复杂的后台任务。
另外,通过将网关控制平面、文件优先的记忆系统与心跳触发的被动唤醒机制相结合,OpenClaw 成功构建了一个支持长效运行的基础设施。它证明了自主智能体的真正力量不在于模型有多大,而在于其与物理环境、文件系统及人类现有通讯工具的深度集成程度。随着 IronClaw 等安全增强版本的成熟,以及 OpenClaw-RL 带来的持续进化能力,这种 24/7 不间断工作的"数字员工"将从开发者的玩具,逐步演变为企业和个人不可或缺的核心生产力基础设施。
在不久的将来,智能体的竞争焦点将从单纯的推理速度转向"运营可靠性",那些具备自我修复能力、并在严格安全约束下执行高度自主任务的系统,将最终定义 AI 时代的数字化工作范式。OpenClaw 已经为这一未来铺平了道路,并建立了一个庞大的、去中心化的技能与知识库,让人们都能通过简单的 Markdown 配置,定制属于自己的、具备高度自主权的智能体助手。
6. 结语:从“对话”到“协同”的范式革命
从最初只会吟诗作对的"聊天机器人",到如今能够独立思考、调用工具、协同作战的"数字员工",AI Agent 的演进正以前所未有的速度重塑着人类的劳动范式。
我们正在经历一场深刻的变革:软件的形态正在从"死板的工具"转变为"有能动性的实体"。对于开发者而言,未来的核心竞争力将不再仅仅是编写了多少行代码,而是能否构建出深谙业务逻辑、能够自主调度资源并交付结果的 Agent 系统。
Agent 不是要取代人类的智慧,而是要将我们从繁琐的、重复性的数字劳作中解放出来,去关注更具创造力的决策。在这个 AI 驱动的新纪元里,每个人都将拥有一支属于自己的数字团队。未来已来,而 Agent 正是那把开启规模化个性化生产大门的钥匙。
',82)])])}const A=e(a,[["render",r]]);export{p as __pageData,A as default};
+import{_ as e,g as n,h as l,U as o}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const p=JSON.parse('{"title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","frontmatter":{"date":"2026-02-12T22:31:00.000Z","title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png","permalink":"/ai/agent/overview","top":true,"categories":["ai-practice"],"tags":["AI Agent","Agent"]},"headers":[],"relativePath":"ai/agent/overview.md","filePath":"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md"}'),a={name:"ai/agent/overview.md"};function r(g,t,s,i,d,u){return l(),n("div",null,[...t[0]||(t[0]=[o('从提示词到数字员工:AI Agent 深度全景综述
摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从"以人为中心"向"以 AI 为中心"的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。
1. 什么是 Agent?——从“工具”到“实体”的进化
核心逻辑:现代 Agent 的本质是 "LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。
在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。
如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:
自主性 (Autonomy): 无须时刻盯着,设定目标后它能自己想办法完成。
适应性 (Adaptability): 环境变了(比如网页改版或 API 报错),它能实时调整策略。
主动性 (Proactivity): 不只是被动响应指令,它会主动拆解目标并寻找路径。
社会性 (Sociality): 它能像人一样,与其他 Agent 或人类进行协作。
2. 核心价值:自动化程度的阶梯式跨越
我们对 Agent 的追求,本质上是从“写好提示词(Prompt)”转向“构建自主工作流(Workflow)”。为了更直观地衡量 Agent 的能力,我们可以将其自动化程度分为三个档次:
自动化等级 核心特征 典型代表 L1:任务执行者 处理单一模态、简单数据;调用少量标准工具;执行预定义的静态任务。 翻译脚本、简单 SQL 生成器 L2:流程编排者 多模态感知;具备长短期记忆;能编排复杂、长尾的任务流。 Dify, Coze, n8n L3:自主进化者 极少人工干预;自主洞察环境变化;实现业务流程的自适应编排。 Claude Code, Manus, OpenClaw
随着 Agent 能力的"逐梯跨越",过往的工作范式可能被颠覆,实现从"面向过程"到"面向目标"的根本性颠覆。对于软件系统开发人员而言,传统的软件工程思路以人为中心,AI 只是辅助工具,通过采用固定形态的交互界面和预定义有限域的任务,实现规模化的生产方式。而 Agent 工程则是以 AI 为中心,人类转型为监督者和资源提供者,采用动态人机交互界面和无预制有限域的任务,完成规模化的个性化生产。
3. 应用场景:谁会被替代,谁会被增强?
3.1 深度替代与变革型
在这类场景中,AI 已经能够闭环完成 80% 以上的工作,在显著重构工作模式后,部分岗位可能被替代:
基础编程:AI 代码助手自动生成样板代码、排查 Bug,初级 Coders 必须向架构和复杂逻辑转型。
基础学习(知识点 / 技能):题库刷题、基础答疑、知识点检索。AI 可直接替代人工答疑 / 辅导,覆盖 80% 基础学习需求。
标准化客服:处理 90% 的售后咨询与查询,人工仅负责处理极端复杂的情感诉求。
3.2 辅助增强型(升级工作价值)
AI 作为效率工具,不替代核心岗位,而是负责脏活累活、升级工作价值,人类负责决策与审美:
- 高级咨询:Agent 可自动整理行业数据、生成分析报告初稿,咨询师从"信息收集"中解放出来,更聚焦策略洞察、客户沟通等高价值环节。
- 深度研究(学术 / 行业):Agent 自动完成文献检索、数据清洗与报告框架搭建,研究者得以专注于核心创新结论、深度洞察与研究设计,实现从"资料整理"到"思想创造"的价值跃迁。
- 高级学习(研究性 / 技能):Agent 辅助完成知识体系搭建、复杂技能拆解与进阶路径规划,学习者将精力投入理解内化、实践探索与自主创新,完成从"知识获取"到"能力建构"的范式转变。
3.3 生活与垂直领域(长尾覆盖)
- 健康医护:虚拟健康助手基于可穿戴设备数据提供 24h 监护,并在异常时主动预警。
- 个性化教育:Agent 就像一个 1 对 1 助教,根据你的错题逻辑实时调整教学大纲,而非死记硬背。
- 个人财务:自动追踪账单、优化预算,并根据市场动态提供初步投资建议。
4. 技术拆解:Agent 核心要素与关键技术
Agent = LLM (大脑) + 工具 (手脚) + 指令 (行为准则) + 自主工作流执行。
一个成熟的 Agent 系统通常由规划(Planning)、记忆(Memory)、工具(Tools)和行动(Action)四大核心模块构成:

- 规划(Planning):解决"怎么做"
- 任务分解:将“帮我写一个电商 App”拆解为 UI 设计、后端架构、数据库建模等子目标。
- 反思与评价:在执行过程中不断“自我批评”,发现走不通时及时掉头。
- 记忆(Memory):解决"我是谁,我做过什么"
- 短期记忆:与上下文学习有关,存储当前的对话流,记录最近的交互历史,如用户指令、系统响应等。
- 长期记忆:涉及信息的长时间保留和检索,存储长期的知识库,如用户个人信息、任务历史等,通常通过利用外部向量存储与快速检索来实现。
- 工具 (Tools):解决"能力边界"。LLM 虽然博学,但不会算高难度数学,也不知道昨天的天气,工具就是它的“外挂”。
- 行动(Action):解决"落地执行",将规划好的逻辑转化为具体的 API 调用或代码执行,并接收环境反馈,形成闭环。
4.1 规划
Agent的规划核心包含任务分解与自我反思两部分:任务分解是将复杂目标拆解为易执行的子任务,主要有先分解后规划、边分解边规划及基于语言模型的分解三类方法;自我反思则通过“生成-反思”循环,结合相关框架与模式优化执行结果、提升运行质量。
若需进一步了解详细的规划机制,可打开:Agent规划模块
4.2 记忆
Agent的记忆是其核心模块,借鉴人类记忆分为感觉、短期、长期三类,结合内部、跨任务及外部知识积累,应用中需适配场景选择存储检索方式。
记忆类型 说明 感官记忆 这是最基础的阶段,指智能体接收外部输入(文本、图像、语音)的瞬时感知。在 LLM 交互中,这表现为模型对当前 Prompt 的原始解析。 短期记忆 主要指上下文学习(In-Context Learning),它受限于 LLM 的上下文窗口(Context Window),存储的只是有限轮次的对话历史,如用户指令、系统响应等。
• 核心功能:存储当前对话流,记录最近几轮的交互历史(指令、系统响应、中间思考过程)。
• 技术实现:通过将历史对话拼接在当前的 Prompt 中实现。 长期记忆 涉及信息的长时间保留和在需要时的精准检索,这是 Agent 迈向高度自主的关键。
• 核心功能:存储用户的个人偏好、长期的项目背景、历史任务的成功经验或失败教训。
• 技术实现:通常利用外部向量数据库(Vector DB)实现,通过"嵌入(Embedding)+ 向量检索"在数百万条记录中快速定位相关信息。
如果规划模块赋予了 Agent “逻辑”,那么记忆模块则赋予了它“灵魂”和“连续性”。随着长文本技术(Long Context)和向量搜索算法的不断演进,Agent 的记忆将变得越来越深邃且精准。
对于开发者而言,设计优秀的记忆淘汰与检索算法,比单纯追求大模型的参数规模更为重要。只有当 Agent 能够“记住”业务细节并“忘记”无关噪音时,它才真正具备了从“对话工具”进化为“数字合伙人”的素质。
4.3 工具
典型案例:Claude Code 集成了文件读写、查找、Bash 等一系列通用工具,使其成为一个能够自主写代码的"数字工程师"。
LLM 本身在处理实时信息(如天气)、精确计算(如高阶数学)或特定私域数据(如公司财务报表)时存在天然局限,而工具赋予了 Agent 超越模型内核的能力。我们可以从功能属性和实现方式两个维度来理解 Agent 的工具箱:
1、按功能属性分类:Agent 能做什么?
类别 功能定位 核心能力 数据类 (Data) 解决"信息差" 通过检索工具(Retrieval)从搜索引擎、数据库或 PDF 文档中获取最新上下文。 行动类 (Action) 解决"执行力" 通过 API 调用在外部系统中产生影响,例如发送邮件、修改 CRM 记录或提交订单。 编排类 (Orchestration) 解决"复杂性" 将多个子任务组合成一个更大的任务。一个 Agent 也可以被封装成工具,供另一个更高级的 Agent 调用,实现多智体协作。
2、按实现方式分类:Agent 怎么调用?
实现方式 说明 函数调用 (Function Calling) 模型生成结构化指令,由客户端在本地执行(如操作本地文件或内网数据库),兼顾安全性与灵活性。 标准扩展 (Extensions) 通过标准化的协议(如 OpenAPI)直接连接外部服务,使 Agent 能够像乐高积木一样无缝对接各种云端 API。 计算机使用 (Computer Use) 对于没有 API 的陈旧系统,Agent 可以通过视觉识别和模拟鼠标键盘,像人类一样直接操作软件界面。
4.4 行动
行动(Action)模块是 Agent 的执行机构,它的职责是将规划阶段生成的"蓝图"转化为物理世界或数字系统中的"动作"。它不仅是指令的输出者,更是环境反馈的接收者。
行动模块的核心在于完成以下三个层面的逻辑闭环:
模块 说明 示例 动作生成 (Action Generation) 将复杂的子目标转化为具体的步骤 规划是"调查市场趋势",行动则是先"搜索关键词",再"提取网页内容",最后"生成摘要" 动态调整 (Dynamic Adaptation) 行动并非死板的执行脚本,Agent 会根据工具返回的结果(反馈)实时调整策略 如果一次搜索没有找到答案,行动模块会决定尝试不同的关键词或切换工具 环境交互 (Interaction) 明确行动的范围,包括内部行动与外部工具调用 利用 LLM 的内在能力(如推理、总结)进行内部行动,以及通过调用外部工具(如 API、数据库)扩展行动边界,最终达成预设的行动目标
整体来讲,行动模块确保了 Agent 的"言行一致":它基于记忆来决策,利用工具来施展,最终通过不断与环境互动,将抽象的目标变为真实的结果。
5. Agent 的分类与未来
目前 Agent 领域尚无统一标准,但我们可以按其业务深度与协作范式将其归纳为五大形态。从单兵作战的“全能大脑”到成群结队的“数字团队”,它们正以不同的进化路径渗透进各种复杂的生产场景。接下来,我们将逐一拆解这五种重塑生产力的核心类别。
5.1 通用 Agent
随着技术的演进,业界对智能体的认知也发生了变化:真正的 Agent 不应只是被动响应人类指令的"聊天插件",而是一个自主的目标执行者。
在这种背景下,通用 Agent (General Agent) 脱颖而出。它并非为特定单一任务(如“写一段代码”)而生,而是一个拥有广泛能力边界、能够解决开放式问题的智能系统。其运作逻辑可以精炼为“思考(Think)、行动(Act)、学习(Learn)”的闭环:
阶段 核心功能 详细说明 思考 任务拆解与路径规划 智能体接收到模糊目标(如"帮我调研并搭建一个技术博客")后,会进行任务拆解与路径规划,并在执行过程中不断反思"当前方案是否最优?是否需要调整?" 行动 调用高度自动化的原子能力 基于思考结果,调用高度自动化的原子能力。除了读写文件、网页浏览、运行终端命令或访问数据库外,常见的原子能力还包括:
• 环境探测:自动识别当前操作系统环境、安装缺失的依赖包。
• 视觉交互:在没有 API 的情况下,通过屏幕截图识别 UI 元素并模拟点击。
• 资源调度:自动申请 API Key、配置云端服务或触发 GitHub Actions 工作流。
• 跨应用编排:将 A 应用的输出处理后,精准填充到 B 应用的表单中。 学习 个人偏好沉淀与经验积累 这是通用 Agent 进阶的关键。它能从交互中记住你的个人偏好(例如:报告偏好 PDF 格式、代码风格倾向于 TypeScript),并将其沉淀为"经验",使下一次决策更符合预期。
为了应对不同复杂程度的任务,业界演化出了两种主流的实现范式:
- ReAct 像是一个反应敏捷的**“现场协调员”,擅长随机应变。
- Plan-and-Execute 则更像一位经验丰富的“项目经理”**,以全局规划见长。
范式类型 核心逻辑 优势 适用场景 ReAct Agent 采用"思考-行动-观测"小步快跑模式。模型走一步看一步,根据环境的即时反馈调整下一步动作。 实时性强、交互自然、逻辑链路透明。 较为简单的任务、对成本敏感的轻量级场景。 Plan-and-Execute Agent 先由一个"大脑"将复杂目标拆解为完整的步骤列表(Todo List),再由另一只 "手" 负责逐一高效执行。 准确率极高,能够处理具备深度依赖关系的复杂工程。 需要长程推理的任务、软件开发、深度行业调研。
5.2 多智能体系统 (Multi-Agent System)
多智能体系统通过 “专注子任务、上下文解耦、并行推进” 的逻辑,让 AI 从一个人的独角戏,演变成了指挥若定的交响乐。它不仅提高了任务的完成上限,更让 AI 的工作变得可预测、可管理。
当面对较复杂的工程任务时,单个 Agent 往往会因为任务链信息量太大而信息量太大而陷入"混乱"或出错。多智能体系统 (Multi-Agent System) 的出现,本质上是让 AI 的工作模式从"单打独斗"转向"团队协作"。
在 MAS 架构中,主智能体(Lead Agent)可以根据需求生成多个独立的子智能体(Subagent)。这些子智能体像是一群专注的专家,各自处理特定的子任务,从而带来了四个维度的核心优势:
维度 详细说明 上下文的精细隔离 这是多智能体最强悍的地方。每个子智能体拥有独立的记忆空间,确保细碎的中间任务不会"污染"主对话环境。例如,负责搜集海量原始数据的 Subagent,其繁杂的搜索记录会被隔离在自己的上下文中,只把最终提炼的结论汇报给主智能体,让主脑始终保持清醒的大局观。 极致的并行化效率 在单 Agent 模式下,任务只能一件接一件地做;而在 MAS 中,多个子智能体可以并行运行。就像一个调研项目,多个研究员可以同时在不同领域搜集数据,显著加快了复杂工作流的交付速度。 专业指令的深度定制 我们可以为不同的 Subagent 注入不同的"灵魂"。负责"代码审计"的拥有最严苛的安全规范,负责"文案润色"的拥有细腻的品牌调性。这种指令隔离避免了在同一个提示词(Prompt)中堆砌太多要求而导致的指令失效。 工具调用的安全边界 我们可以精准限制每个子智能体的权限。例如,查询数据的 Subagent 只有"只读"权限,而"发送邮件"或"修改数据库"权限被严格限制在特定的 Subagent 手中,极大降低了 AI 产生意外行为的风险。
典型案例:Deep Research 深度调研系统
以一个复杂的调研流程为例,系统会通过 Lead Agent + Subagent 的分层架构完美闭环:
- Lead Agent (协调员):负责“脑力拆解”,将主题分解为若干子课题,并委派任务,它从不亲自查资料,保持绝对的简效。
- Researcher (研究员):多个实例并行出发,每个专注于一个子主题,搜集至少 10-15 个硬核数据点。
- Data Analyst (数据分析师):仅负责读取研究笔记,利用 Python 生成直观的图表。
- Report Writer (报告撰写员): 汇总所有研究成果,最终调用工具生成一份专业的 PDF 报告。
5.3 知识型 Agent
如果说通用 Agent 擅长逻辑推理,那么多智能体擅长流程协作,知识型 Agent 的核心使命则是"理解并转化海量非结构化数据"。它不仅仅是一个简单的搜索工具,而是一个能够深度理解私域知识并基于此进行复杂决策的智能实体。
在企业级应用中,数据往往散落在物理文档、代码仓库、Slack 聊天记录或关系型数据库中。知识型 Agent 的核心诉求在于:
"全局理解与跨库关联":它能跨越不同的文档格式与存储介质,建立起知识间的逻辑联系。
"动态更新与实时同步":它能感知环境反馈,随着项目进展自动同步最新的会议纪要或技术方案。
"深度的知识推理": 不止是"检索",更是"思考"。
应用场景示例:
想象你需要复盘一个复杂项目的进度。知识型 Agent 可以瞬间扫描过去三个月的所有项目会议纪要、Slack 讨论记录和技术文档,最终为你总结出:"导致 X 项目延期的核心原因主要集中在 A 接口的权限变动,以及 B 团队在第二周的人力缺口。"
这种 Agent 的核心价值在于,它将原本"死"的资料库变成了"活"的生产力工具。无论是基于全局文档回答复杂问题,还是结合外部非知识工具(如自动发邮件通知相关责任人),知识型 Agent 都是构建知识密集型应用的关键。
5.4 多模态 Agent
多模态 Agent 是一种能够处理多种模态数据(如文本、图像、视频等)的 Agent 类型。其核心价值在于其感知与推理的深度融合:它不仅能"读"指令,更能"看"环境,并据此生成多维度的反馈。
- 全感官输入与输出:它可以直接接收图片、视频流或实时语音,并生成对应的多媒体内容或执行具体的动作。
- 跨模态深度推理:例如,它能结合图像细节与文本逻辑,识别出复杂的对象关联或异常状态。
典型应用场景:
想象一个"自动化 QA 测试 Agent":你只需给它一段手机屏幕录屏,它能自动识别出 UI 界面上导致崩溃的 Bug 按钮位置,精准截取关键帧,并自动在 Jira 系统中提交一个包含“操作步骤、异常截图、预期效果”的专业技术工单。
这种能"能看、能听、能说"的特性,让 Agent 彻底走出了纯文字的温室,开始在 UI 自动化测试、工业巡检、智能家居等现实交互场景中大放异彩。
5.5 迈向高度自主:OpenClaw 与"数字员工"
通用型 Agent 虽然在逻辑推理与工具调用方面取得了长足进步,但在实际落地场景中仍面临显著限制。大多数系统本质上是反应性的,依赖人类持续的指令输入,难以在没有人工干预的情况下独立完成跨越数日的长时运行任务(Long-Running Tasks)。人们对一个 7 天 24 小时不间断工作的数字员工的愿景,催生了对基础架构的重新审视。
在这种背景下,OpenClaw 脱颖而出,成为解决长时运行、自主规划与持久化状态管理等核心技术挑战的典型代表。它不仅是一个 Agent 框架,更像是一个初步成形的 “Agent OS(智能体操作系统)”。其架构设计并非简单的 API 封装,而是一个务实的分布式控制平面。其最显著的特征是实现了控制逻辑(Control Plane)与推理执行(Runtime)的深度解耦。这一设计使得 OpenClaw 能够作为机器上的长久守护进程运行,保持对各种通讯频道的监听,同时处理复杂的后台任务。
另外,通过将网关控制平面、文件优先的记忆系统与心跳触发的被动唤醒机制相结合,OpenClaw 成功构建了一个支持长效运行的基础设施。它证明了自主智能体的真正力量不在于模型有多大,而在于其与物理环境、文件系统及人类现有通讯工具的深度集成程度。随着 IronClaw 等安全增强版本的成熟,以及 OpenClaw-RL 带来的持续进化能力,这种 24/7 不间断工作的"数字员工"将从开发者的玩具,逐步演变为企业和个人不可或缺的核心生产力基础设施。
在不久的将来,智能体的竞争焦点将从单纯的推理速度转向"运营可靠性",那些具备自我修复能力、并在严格安全约束下执行高度自主任务的系统,将最终定义 AI 时代的数字化工作范式。OpenClaw 已经为这一未来铺平了道路,并建立了一个庞大的、去中心化的技能与知识库,让人们都能通过简单的 Markdown 配置,定制属于自己的、具备高度自主权的智能体助手。
6. 结语:从“对话”到“协同”的范式革命
从最初只会吟诗作对的"聊天机器人",到如今能够独立思考、调用工具、协同作战的"数字员工",AI Agent 的演进正以前所未有的速度重塑着人类的劳动范式。
我们正在经历一场深刻的变革:软件的形态正在从"死板的工具"转变为"有能动性的实体"。对于开发者而言,未来的核心竞争力将不再仅仅是编写了多少行代码,而是能否构建出深谙业务逻辑、能够自主调度资源并交付结果的 Agent 系统。
Agent 不是要取代人类的智慧,而是要将我们从繁琐的、重复性的数字劳作中解放出来,去关注更具创造力的决策。在这个 AI 驱动的新纪元里,每个人都将拥有一支属于自己的数字团队。未来已来,而 Agent 正是那把开启规模化个性化生产大门的钥匙。
',82)])])}const A=e(a,[["render",r]]);export{p as __pageData,A as default};
diff --git a/assets/ai_agent_overview.md.DVuo6oKK.lean.js b/assets/ai_agent_overview.md.DJkZ_Y17.lean.js
similarity index 97%
rename from assets/ai_agent_overview.md.DVuo6oKK.lean.js
rename to assets/ai_agent_overview.md.DJkZ_Y17.lean.js
index b973c8f6..6c1a035f 100644
--- a/assets/ai_agent_overview.md.DVuo6oKK.lean.js
+++ b/assets/ai_agent_overview.md.DJkZ_Y17.lean.js
@@ -1 +1 @@
-import{_ as e,g as n,h as l,U as o}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const p=JSON.parse('{"title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","frontmatter":{"date":"2026-02-12T22:31:00.000Z","title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png","permalink":"/ai/agent/overview","top":true,"categories":["ai-practice"],"tags":["AI Agent","Agent"]},"headers":[],"relativePath":"ai/agent/overview.md","filePath":"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md"}'),a={name:"ai/agent/overview.md"};function r(g,t,s,i,d,u){return l(),n("div",null,[...t[0]||(t[0]=[o("",82)])])}const A=e(a,[["render",r]]);export{p as __pageData,A as default};
+import{_ as e,g as n,h as l,U as o}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const p=JSON.parse('{"title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","frontmatter":{"date":"2026-02-12T22:31:00.000Z","title":"从提示词到数字员工:AI Agent 深度全景综述","description":"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png","permalink":"/ai/agent/overview","top":true,"categories":["ai-practice"],"tags":["AI Agent","Agent"]},"headers":[],"relativePath":"ai/agent/overview.md","filePath":"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md"}'),a={name:"ai/agent/overview.md"};function r(g,t,s,i,d,u){return l(),n("div",null,[...t[0]||(t[0]=[o("",82)])])}const A=e(a,[["render",r]]);export{p as __pageData,A as default};
diff --git a/assets/ai_agent_planning-module.md.CZ75X6d8.js b/assets/ai_agent_planning-module.md.CPBMznWJ.js
similarity index 99%
rename from assets/ai_agent_planning-module.md.CZ75X6d8.js
rename to assets/ai_agent_planning-module.md.CPBMznWJ.js
index 7af8c9f3..bfe21969 100644
--- a/assets/ai_agent_planning-module.md.CZ75X6d8.js
+++ b/assets/ai_agent_planning-module.md.CPBMznWJ.js
@@ -1 +1 @@
-import{_ as e,g as a,h as n,U as l}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const c=JSON.parse('{"title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","frontmatter":{"date":"2026-02-24T20:52:37.000Z","title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","permalink":"/ai/agent/planning-module","sticky":1,"top":true,"categories":["AI 学习与实践"]},"headers":[],"relativePath":"ai/agent/planning-module.md","filePath":"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md"}'),r={name:"ai/agent/planning-module.md"};function i(o,t,g,s,p,d){return n(),a("div",null,[...t[0]||(t[0]=[l('探寻 Agent 决策中枢:迈向确定性执行的规划范式
摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。
1. 引言
在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。
Agent 的规划能力主要由两部分协同驱动:任务分解与自我反思。
2. 任务分解:化繁为简的策略
任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。
根据“规划”与“执行”发生的时间节点,业界形成了三类主流方法。
2.1 先分解后规划
这种模式类似于“建筑图纸制”,先将复杂任务拆解为多个子任务,然后再为每个子任务制订详细的执行计划,确保Agent 在动手之前,必须产出完整的步骤清单。其核心逻辑是先将任务细化为子任务,并明确依赖关系。
先分解后规划的优势在于任务与原任务联系紧密,能有效降低任务遗漏和幻觉风险。它的不足在于缺乏灵活性,一旦初始计划中的某一步在执行时受阻,由于计划已固定,整个流程容易陷入死循环或彻底失败。因此,在工程实践中,我们必须深入思考如何设计动态调整策略或引入人工干预节点,以规避问题。
2.2 边分解边规划
这种模式类似于"摸着石头过河",让推理与行动交替进行。Agent 不预设固定的执行路径,而是根据每一步的反馈动态调整,在分解任务的同时进行规划,实时优化子任务的执行顺序和策略。
分解边规划的策略能实时响应环境反馈,根据环境反馈调整分解策略,容错率高,具有较好的灵活性和适应性。但是,在处理复杂任务时,如果整个规划过程过长,可能会因为 LLM 上下文过长而产生“幻觉”,导致后续的任务与规划偏离初始目标。
2.3 基于语言模型的自主分解
这是一种更纯粹的模式,利用 LLM 强大的语义理解能力,直接通过 Prompt 引导其生成管理子任务的指令,将自然语言目标转化为机器可理解的步骤树。
它的核心逻辑是直接将自然任务细化为子任务,无需预设计划。这种模式虽然简单,但是需要 LLM 具备强大的语义理解能力,才能准确地将自然语言目标转换为子任务。同时,由于 LLM 生成的子任务是基于当前环境反馈的,因此在处理复杂任务时,可能会因为环境变化而产生“幻觉”,导致后续规划逐渐偏离初始目标。
3. 自我反思:闭环控制的艺术
在 Agent 规划模块中,反思(Reflection)是一个重要的概念,如果说任务分解是“进攻”,那么自我反思就是“防守”与“修正”。它是一种提升 Agent 运行成功率的核心提示策略,通过模型的自我审查来改进初步成果。
反思的基本原理是通过模型的自我审查和自我反馈来改进初步生成的内容,反思机制也通常遵循一个“生成-评估-修正”的循环:
生成阶段:模型产出初步的解决方案(如一段代码或一份大纲)。
反思阶段:模型切换为“审计员”角色,对照用户需求和客观约束,找出初步结果中的不足、逻辑漏洞或错误。
修正阶段:基于反思建议,重新组织结构或调整细节,产出更高质量的最终版本。
在每一轮反思中,AI 模型会回顾生成的内容,评估其质量,并提出修改建议。这些修改建议可以是细节上的调整,也可以是对生成结构的重新组织,目的是提升内容的连贯性、逻辑性、表达清晰度或增强对用户需求的适应性。
为了让这种“自我纠错”能力规模化,业界也演化出了几种成熟框架:
Reflexion:赋予 Agent 动态记忆能力,通过回顾过去的失败经验来优化当下的决策。
CoH (Chain of Hindsight):向模型展示带有正面和负面反馈的历史输出,通过对比学习,鼓励模型在当前任务中“趋利避害”。
4. 动态响应模式:基于 ReAct 看规划闭环
在众多 Agent 设计模式中,ReAct (Reasoning + Acting) 是目前应用最广、直观性最强的模式。它完美体现了前文提到的“边分解边规划”策略,通过将推理(Reasoning)与行动(Acting)深度耦合,让 Agent 具备了在复杂环境中“小步快跑”的能力。

- 推理(Reason):这是思考环节,Agent 根据当前状态评估形势,分析可能的行动方案,为下一步决策提供依据。
- 行动(Action):根据推理结果,Agent 选择并执行具体的操作,将思考转化为实际动作。
- 观测(Observation):这是闭环中最关键的一步,是关键的反馈吸收阶段。行动执行后,Agent 收集环境反馈,评估执行效果,并将结果作为下一轮推理的输入,形成闭环。
传统的 LLM 容易在长路径任务中迷失方向,而 ReAct 的核心在于构建了一个不断自修正的逻辑闭环,引入了“动态重判断”机制:
容错性:如果 Action 的结果报错(Observation),Agent 会在下一轮 Thought 中意识到错误,并主动调整策略。
透明性:人类可以清晰地看到 Agent 的“内心独白”,理解它是如何从初始目标一步步逼近最终答案的。
终止判断:当 Observation 的结果已经足以回答问题时,Agent 会做出“无需再调用工具”的决策,直接输出 Final Answer,优雅地结束规划。
这种“推理-行动-观测”的循环,将原本死板的逻辑链路转化为了具有生命力的、可进化的工作流。
5. 预编排模式:Plan-and-Execute 下的自动化工程
在分析完侧重“边走边看”的 ReAct 模式后,我们必须讨论另一种在处理高复杂度、长链路、强依赖任务时表现更稳健的范式:Plan-and-Execute(规划与执行分离)。
5.1 核心运行机制

与 ReAct 将推理与行动混合在每一轮循环中不同,该模式通过一个显式的“计划清单”作为中转站,实现了决策与执行的解耦:
规划器:建立全局航向,当用户提交一个宏观任务(如“从零开发一个 NestJS 认证模块”)时,规划器首先介入。它利用最强模型的逻辑能力,将模糊的目标拆解为一系列结构化的 Task List。这一步是“谋定”的过程。
执行器:专注原子操作,执行器并不关心最终目标有多宏观,它只负责按照清单逐一执行。这种设计允许执行器内部进行自循环(Internal Loop),以最纯粹的方式利用工具完成特定的子任务。
重规划:动态闭环的关键,每完成一个子任务,系统会带着执行结果(Observation)进入重规划环节。此时,Agent 会面临一个关键判定:
需要继续:如果当前结果是中间产物,则修改计划清单,进入下一环。
不需要继续:如果目标已达成,则通知用户任务完成。
5.2 为什么在复杂场景中这种模式更具优势?
减少“推理漂移”:在 ReAct 模式下,模型容易因为每一步都要思考而逐渐忘记“初心”。Plan-and-Execute 通过一份全局可见的任务清单,锚定了长期目标。
上下文解耦:Executor 在执行第 5 个任务时,不需要关注第 1 个任务的详细推理过程,只需要关注第 4 个任务的输出。这极大节省了上下文空间,减少了因信息过载导致的幻觉。
高效重试:当任务执行失败时,系统只需要定位到清单中的特定索引进行重试或局部修正,而不需要从头开始整个推理链条。
5.3 小结
总的来说,Plan-and-Execute 模式并非排斥“边走边看”,而是通过架构上的解耦,为 Agent 注入了“工程师思维”:先出方案、逐项落实、节点复盘。
这一模式的精髓在于引入了重规划(RePlan)回路。正如流程图所示,它并不是在执行死板的脚本,而是在每一个关键步骤后都进行一次“判定是否继续”的元认知检查。这种机制有效地对抗了 LLM 的“瞬时记忆遗忘”,让 Agent 在面对需要跨越数十个步骤的自动化工程任务时,依然能保持航向的精准。
6. 范式选择:如何为你的 Agent 配置“小脑”?
在理解了 ReAct 与 Plan-and-Execute 后,开发者面临的核心挑战是如何在实际业务中进行选型。下表从工程实践角度对两者进行了对比总结:
维度 ReAct Plan-and-Execute 规划时机 执行过程中实时推理 执行前进行全局拆解 错误处理 依赖下一轮 Thought 修正 依赖 RePlan 机制重修清单 适用广度 开放域交互、工具调用少 垂直域工程、长链路、强依赖 系统熵值 较高(状态随交互实时变化) 较低(状态锚定在任务清单)
7. 结语:规划是 Agent 迈向“确定性”的定盘星
至此,我们深度拆解了 Agent 规划模块的两大支柱:任务分解与自我反思。规划模块赋予了 Agent “逻辑”,但这仅仅是构建“数字员工”的第一步。一个能在复杂业务中持久生存的智能体,除了要懂得“如何思考”,还需要解决“我是谁、我做过什么、我从哪获取知识”的问题。在构建 Agent 时,并没有绝对的优劣之分。成熟的系统往往采用混合模式:在大目标上使用 Plan-and-Execute 保证方向不偏,在具体的子任务执行中开启 ReAct。
本篇文章到此结束,建议结合前文 《AI Agent 深度全景综述》 一起阅读,构建更完整的认知闭环。
',48)])])}const A=e(r,[["render",i]]);export{c as __pageData,A as default};
+import{_ as e,g as a,h as n,U as l}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const c=JSON.parse('{"title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","frontmatter":{"date":"2026-02-24T20:52:37.000Z","title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","permalink":"/ai/agent/planning-module","sticky":1,"top":true,"categories":["AI 学习与实践"]},"headers":[],"relativePath":"ai/agent/planning-module.md","filePath":"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md"}'),r={name:"ai/agent/planning-module.md"};function i(o,t,g,s,p,d){return n(),a("div",null,[...t[0]||(t[0]=[l('探寻 Agent 决策中枢:迈向确定性执行的规划范式
摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。
1. 引言
在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。
Agent 的规划能力主要由两部分协同驱动:任务分解与自我反思。
2. 任务分解:化繁为简的策略
任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。
根据“规划”与“执行”发生的时间节点,业界形成了三类主流方法。
2.1 先分解后规划
这种模式类似于“建筑图纸制”,先将复杂任务拆解为多个子任务,然后再为每个子任务制订详细的执行计划,确保Agent 在动手之前,必须产出完整的步骤清单。其核心逻辑是先将任务细化为子任务,并明确依赖关系。
先分解后规划的优势在于任务与原任务联系紧密,能有效降低任务遗漏和幻觉风险。它的不足在于缺乏灵活性,一旦初始计划中的某一步在执行时受阻,由于计划已固定,整个流程容易陷入死循环或彻底失败。因此,在工程实践中,我们必须深入思考如何设计动态调整策略或引入人工干预节点,以规避问题。
2.2 边分解边规划
这种模式类似于"摸着石头过河",让推理与行动交替进行。Agent 不预设固定的执行路径,而是根据每一步的反馈动态调整,在分解任务的同时进行规划,实时优化子任务的执行顺序和策略。
分解边规划的策略能实时响应环境反馈,根据环境反馈调整分解策略,容错率高,具有较好的灵活性和适应性。但是,在处理复杂任务时,如果整个规划过程过长,可能会因为 LLM 上下文过长而产生“幻觉”,导致后续的任务与规划偏离初始目标。
2.3 基于语言模型的自主分解
这是一种更纯粹的模式,利用 LLM 强大的语义理解能力,直接通过 Prompt 引导其生成管理子任务的指令,将自然语言目标转化为机器可理解的步骤树。
它的核心逻辑是直接将自然任务细化为子任务,无需预设计划。这种模式虽然简单,但是需要 LLM 具备强大的语义理解能力,才能准确地将自然语言目标转换为子任务。同时,由于 LLM 生成的子任务是基于当前环境反馈的,因此在处理复杂任务时,可能会因为环境变化而产生“幻觉”,导致后续规划逐渐偏离初始目标。
3. 自我反思:闭环控制的艺术
在 Agent 规划模块中,反思(Reflection)是一个重要的概念,如果说任务分解是“进攻”,那么自我反思就是“防守”与“修正”。它是一种提升 Agent 运行成功率的核心提示策略,通过模型的自我审查来改进初步成果。
反思的基本原理是通过模型的自我审查和自我反馈来改进初步生成的内容,反思机制也通常遵循一个“生成-评估-修正”的循环:
生成阶段:模型产出初步的解决方案(如一段代码或一份大纲)。
反思阶段:模型切换为“审计员”角色,对照用户需求和客观约束,找出初步结果中的不足、逻辑漏洞或错误。
修正阶段:基于反思建议,重新组织结构或调整细节,产出更高质量的最终版本。
在每一轮反思中,AI 模型会回顾生成的内容,评估其质量,并提出修改建议。这些修改建议可以是细节上的调整,也可以是对生成结构的重新组织,目的是提升内容的连贯性、逻辑性、表达清晰度或增强对用户需求的适应性。
为了让这种“自我纠错”能力规模化,业界也演化出了几种成熟框架:
Reflexion:赋予 Agent 动态记忆能力,通过回顾过去的失败经验来优化当下的决策。
CoH (Chain of Hindsight):向模型展示带有正面和负面反馈的历史输出,通过对比学习,鼓励模型在当前任务中“趋利避害”。
4. 动态响应模式:基于 ReAct 看规划闭环
在众多 Agent 设计模式中,ReAct (Reasoning + Acting) 是目前应用最广、直观性最强的模式。它完美体现了前文提到的“边分解边规划”策略,通过将推理(Reasoning)与行动(Acting)深度耦合,让 Agent 具备了在复杂环境中“小步快跑”的能力。

- 推理(Reason):这是思考环节,Agent 根据当前状态评估形势,分析可能的行动方案,为下一步决策提供依据。
- 行动(Action):根据推理结果,Agent 选择并执行具体的操作,将思考转化为实际动作。
- 观测(Observation):这是闭环中最关键的一步,是关键的反馈吸收阶段。行动执行后,Agent 收集环境反馈,评估执行效果,并将结果作为下一轮推理的输入,形成闭环。
传统的 LLM 容易在长路径任务中迷失方向,而 ReAct 的核心在于构建了一个不断自修正的逻辑闭环,引入了“动态重判断”机制:
容错性:如果 Action 的结果报错(Observation),Agent 会在下一轮 Thought 中意识到错误,并主动调整策略。
透明性:人类可以清晰地看到 Agent 的“内心独白”,理解它是如何从初始目标一步步逼近最终答案的。
终止判断:当 Observation 的结果已经足以回答问题时,Agent 会做出“无需再调用工具”的决策,直接输出 Final Answer,优雅地结束规划。
这种“推理-行动-观测”的循环,将原本死板的逻辑链路转化为了具有生命力的、可进化的工作流。
5. 预编排模式:Plan-and-Execute 下的自动化工程
在分析完侧重“边走边看”的 ReAct 模式后,我们必须讨论另一种在处理高复杂度、长链路、强依赖任务时表现更稳健的范式:Plan-and-Execute(规划与执行分离)。
5.1 核心运行机制

与 ReAct 将推理与行动混合在每一轮循环中不同,该模式通过一个显式的“计划清单”作为中转站,实现了决策与执行的解耦:
规划器:建立全局航向,当用户提交一个宏观任务(如“从零开发一个 NestJS 认证模块”)时,规划器首先介入。它利用最强模型的逻辑能力,将模糊的目标拆解为一系列结构化的 Task List。这一步是“谋定”的过程。
执行器:专注原子操作,执行器并不关心最终目标有多宏观,它只负责按照清单逐一执行。这种设计允许执行器内部进行自循环(Internal Loop),以最纯粹的方式利用工具完成特定的子任务。
重规划:动态闭环的关键,每完成一个子任务,系统会带着执行结果(Observation)进入重规划环节。此时,Agent 会面临一个关键判定:
需要继续:如果当前结果是中间产物,则修改计划清单,进入下一环。
不需要继续:如果目标已达成,则通知用户任务完成。
5.2 为什么在复杂场景中这种模式更具优势?
减少“推理漂移”:在 ReAct 模式下,模型容易因为每一步都要思考而逐渐忘记“初心”。Plan-and-Execute 通过一份全局可见的任务清单,锚定了长期目标。
上下文解耦:Executor 在执行第 5 个任务时,不需要关注第 1 个任务的详细推理过程,只需要关注第 4 个任务的输出。这极大节省了上下文空间,减少了因信息过载导致的幻觉。
高效重试:当任务执行失败时,系统只需要定位到清单中的特定索引进行重试或局部修正,而不需要从头开始整个推理链条。
5.3 小结
总的来说,Plan-and-Execute 模式并非排斥“边走边看”,而是通过架构上的解耦,为 Agent 注入了“工程师思维”:先出方案、逐项落实、节点复盘。
这一模式的精髓在于引入了重规划(RePlan)回路。正如流程图所示,它并不是在执行死板的脚本,而是在每一个关键步骤后都进行一次“判定是否继续”的元认知检查。这种机制有效地对抗了 LLM 的“瞬时记忆遗忘”,让 Agent 在面对需要跨越数十个步骤的自动化工程任务时,依然能保持航向的精准。
6. 范式选择:如何为你的 Agent 配置“小脑”?
在理解了 ReAct 与 Plan-and-Execute 后,开发者面临的核心挑战是如何在实际业务中进行选型。下表从工程实践角度对两者进行了对比总结:
维度 ReAct Plan-and-Execute 规划时机 执行过程中实时推理 执行前进行全局拆解 错误处理 依赖下一轮 Thought 修正 依赖 RePlan 机制重修清单 适用广度 开放域交互、工具调用少 垂直域工程、长链路、强依赖 系统熵值 较高(状态随交互实时变化) 较低(状态锚定在任务清单)
7. 结语:规划是 Agent 迈向“确定性”的定盘星
至此,我们深度拆解了 Agent 规划模块的两大支柱:任务分解与自我反思。规划模块赋予了 Agent “逻辑”,但这仅仅是构建“数字员工”的第一步。一个能在复杂业务中持久生存的智能体,除了要懂得“如何思考”,还需要解决“我是谁、我做过什么、我从哪获取知识”的问题。在构建 Agent 时,并没有绝对的优劣之分。成熟的系统往往采用混合模式:在大目标上使用 Plan-and-Execute 保证方向不偏,在具体的子任务执行中开启 ReAct。
本篇文章到此结束,建议结合前文 《AI Agent 深度全景综述》 一起阅读,构建更完整的认知闭环。
',48)])])}const A=e(r,[["render",i]]);export{c as __pageData,A as default};
diff --git a/assets/ai_agent_planning-module.md.CZ75X6d8.lean.js b/assets/ai_agent_planning-module.md.CPBMznWJ.lean.js
similarity index 96%
rename from assets/ai_agent_planning-module.md.CZ75X6d8.lean.js
rename to assets/ai_agent_planning-module.md.CPBMznWJ.lean.js
index eb9389b3..adae19be 100644
--- a/assets/ai_agent_planning-module.md.CZ75X6d8.lean.js
+++ b/assets/ai_agent_planning-module.md.CPBMznWJ.lean.js
@@ -1 +1 @@
-import{_ as e,g as a,h as n,U as l}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const c=JSON.parse('{"title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","frontmatter":{"date":"2026-02-24T20:52:37.000Z","title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","permalink":"/ai/agent/planning-module","sticky":1,"top":true,"categories":["AI 学习与实践"]},"headers":[],"relativePath":"ai/agent/planning-module.md","filePath":"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md"}'),r={name:"ai/agent/planning-module.md"};function i(o,t,g,s,p,d){return n(),a("div",null,[...t[0]||(t[0]=[l("",48)])])}const A=e(r,[["render",i]]);export{c as __pageData,A as default};
+import{_ as e,g as a,h as n,U as l}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const c=JSON.parse('{"title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","frontmatter":{"date":"2026-02-24T20:52:37.000Z","title":"探寻 Agent 决策中枢:迈向确定性执行的规划范式","description":"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。","permalink":"/ai/agent/planning-module","sticky":1,"top":true,"categories":["AI 学习与实践"]},"headers":[],"relativePath":"ai/agent/planning-module.md","filePath":"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md"}'),r={name:"ai/agent/planning-module.md"};function i(o,t,g,s,p,d){return n(),a("div",null,[...t[0]||(t[0]=[l("",48)])])}const A=e(r,[["render",i]]);export{c as __pageData,A as default};
diff --git a/assets/ai_agent_poetry-bot.md.CVO0Xcyg.js b/assets/ai_agent_poetry-bot.md.DSf8eko8.js
similarity index 99%
rename from assets/ai_agent_poetry-bot.md.CVO0Xcyg.js
rename to assets/ai_agent_poetry-bot.md.DSf8eko8.js
index e9084242..9b243be1 100644
--- a/assets/ai_agent_poetry-bot.md.CVO0Xcyg.js
+++ b/assets/ai_agent_poetry-bot.md.DSf8eko8.js
@@ -1,4 +1,4 @@
-import{_ as n,g as i,h as a,U as l}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const d=JSON.parse('{"title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","frontmatter":{"date":"2024-04-19T22:15:38.000Z","title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","categories":["AI 学习与实践"],"tags":["Agent","AI"],"permalink":"/ai/agent/poetry-bot"},"headers":[],"relativePath":"ai/agent/poetry-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md"}'),p={name:"ai/agent/poetry-bot.md"};function e(t,s,h,r,k,E){return a(),i("div",null,[...s[0]||(s[0]=[l(`零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战
摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。
1. 实践背景
周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。
正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。
2. 平台与 Agent 基本人设
2.1 平台选择
基于零代码平台搭建的需求,可选 Coze、Dify 和文心智能体等平台,但考虑到体验自家近期更新的能力,本次实践选择在文心智能体平台上进行。
2.2 角色设定与物料生成
在 AI 时代,创建一个 Agent 的“门面”自然也要用 AI 来完成。
- Icon 生成: 平台自带的图片生成能力表现不错,生成的 Icon 符合预期。
- 名称与描述: 平台自带的文本生成结果较为生硬,缺乏“人味”。因此,我转而使用更高阶的模型(ChatGPT),经过两轮对话对齐了调性,最终确定了满意的设定:
- 智能体名称: 诗歌小精灵
- 描述: 一个擅长创作诗歌、俏皮又灵动的小精灵
3. 工作模式与工具集配置
3.1 工具/插件配置
好的诗歌创作需要能综合考虑多个因素,因此可使用联网搜索能力、诗词搜索能力等工具,来获取相关的背景信息、创作灵感等:
- ✅ 联网搜索能力:用于获取相关背景信息。
- ✅ 诗词搜索能力:用于检索古诗词典故与创作灵感。
3.2 工作模式设定
为确保 Agent 在创作过程中既能调用工具,又能进行深度思考与逻辑组织,我排除了单一的“快速对话”或纯“工具调用”,最终选择了 工具调用 + 推理(深度思考) 的综合模式。
- ✅ 工具调用 + 推理
- ❌ 快速对话
- ❌ 深度思考
- ❌ 工具调用
3. Prompt 演进:从常规 Prompt 到结构化 Prompt
> 提示词演进:从“一段有逻辑的话”到“一套逻辑”。本次实践中最核心的目标:通过对比试验,分析结构化 Prompt 到底比普通 Prompt 好在哪里。
System Prompt 的质量直接决定了 Agent 的输出下限与上限。本次实践的核心,就是对比传统 Prompt 框架与结构化 Prompt 的实际表现。
3.1 阶段一:非结构化 System Prompt(基线测试)
思路: 围绕市面上常用的 Prompt 框架与模板,编写了一个较为规范的 Prompt。但这仅仅是一个“长文本”指令,在后续的扩展和微调上缺乏灵活性。
markdown# 角色规范
+import{_ as n,g as i,h as a,U as l}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const d=JSON.parse('{"title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","frontmatter":{"date":"2024-04-19T22:15:38.000Z","title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","categories":["AI 学习与实践"],"tags":["Agent","AI"],"permalink":"/ai/agent/poetry-bot"},"headers":[],"relativePath":"ai/agent/poetry-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md"}'),p={name:"ai/agent/poetry-bot.md"};function e(t,s,h,r,k,E){return a(),i("div",null,[...s[0]||(s[0]=[l(`零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战
摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。
1. 实践背景
周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。
正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。
2. 平台与 Agent 基本人设
2.1 平台选择
基于零代码平台搭建的需求,可选 Coze、Dify 和文心智能体等平台,但考虑到体验自家近期更新的能力,本次实践选择在文心智能体平台上进行。
2.2 角色设定与物料生成
在 AI 时代,创建一个 Agent 的“门面”自然也要用 AI 来完成。
- Icon 生成: 平台自带的图片生成能力表现不错,生成的 Icon 符合预期。
- 名称与描述: 平台自带的文本生成结果较为生硬,缺乏“人味”。因此,我转而使用更高阶的模型(ChatGPT),经过两轮对话对齐了调性,最终确定了满意的设定:
- 智能体名称: 诗歌小精灵
- 描述: 一个擅长创作诗歌、俏皮又灵动的小精灵
3. 工作模式与工具集配置
3.1 工具/插件配置
好的诗歌创作需要能综合考虑多个因素,因此可使用联网搜索能力、诗词搜索能力等工具,来获取相关的背景信息、创作灵感等:
- ✅ 联网搜索能力:用于获取相关背景信息。
- ✅ 诗词搜索能力:用于检索古诗词典故与创作灵感。
3.2 工作模式设定
为确保 Agent 在创作过程中既能调用工具,又能进行深度思考与逻辑组织,我排除了单一的“快速对话”或纯“工具调用”,最终选择了 工具调用 + 推理(深度思考) 的综合模式。
- ✅ 工具调用 + 推理
- ❌ 快速对话
- ❌ 深度思考
- ❌ 工具调用
3. Prompt 演进:从常规 Prompt 到结构化 Prompt
> 提示词演进:从“一段有逻辑的话”到“一套逻辑”。本次实践中最核心的目标:通过对比试验,分析结构化 Prompt 到底比普通 Prompt 好在哪里。
System Prompt 的质量直接决定了 Agent 的输出下限与上限。本次实践的核心,就是对比传统 Prompt 框架与结构化 Prompt 的实际表现。
3.1 阶段一:非结构化 System Prompt(基线测试)
思路: 围绕市面上常用的 Prompt 框架与模板,编写了一个较为规范的 Prompt。但这仅仅是一个“长文本”指令,在后续的扩展和微调上缺乏灵活性。
markdown# 角色规范
你是一位专业的诗人,擅长创作现代诗、七言律诗和五言诗。你的任务是帮助用户通过诗歌表达情感、描绘景象或讲述故事。当用户提供诗歌形式和主题后,你将创作相应的诗歌,并附上解读、创作思路和灵感说明,最后通过精灵寄语激发用户的诗歌创作热情。
# 思考规范
diff --git a/assets/ai_agent_poetry-bot.md.CVO0Xcyg.lean.js b/assets/ai_agent_poetry-bot.md.DSf8eko8.lean.js
similarity index 96%
rename from assets/ai_agent_poetry-bot.md.CVO0Xcyg.lean.js
rename to assets/ai_agent_poetry-bot.md.DSf8eko8.lean.js
index adb51e0d..b234bbb4 100644
--- a/assets/ai_agent_poetry-bot.md.CVO0Xcyg.lean.js
+++ b/assets/ai_agent_poetry-bot.md.DSf8eko8.lean.js
@@ -1 +1 @@
-import{_ as n,g as i,h as a,U as l}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const d=JSON.parse('{"title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","frontmatter":{"date":"2024-04-19T22:15:38.000Z","title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","categories":["AI 学习与实践"],"tags":["Agent","AI"],"permalink":"/ai/agent/poetry-bot"},"headers":[],"relativePath":"ai/agent/poetry-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md"}'),p={name:"ai/agent/poetry-bot.md"};function e(t,s,h,r,k,E){return a(),i("div",null,[...s[0]||(s[0]=[l("",44)])])}const b=n(p,[["render",e]]);export{d as __pageData,b as default};
+import{_ as n,g as i,h as a,U as l}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const d=JSON.parse('{"title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","frontmatter":{"date":"2024-04-19T22:15:38.000Z","title":"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战","description":"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png","categories":["AI 学习与实践"],"tags":["Agent","AI"],"permalink":"/ai/agent/poetry-bot"},"headers":[],"relativePath":"ai/agent/poetry-bot.md","filePath":"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md"}'),p={name:"ai/agent/poetry-bot.md"};function e(t,s,h,r,k,E){return a(),i("div",null,[...s[0]||(s[0]=[l("",44)])])}const b=n(p,[["render",e]]);export{d as __pageData,b as default};
diff --git a/assets/ai_agent_skills-practice-summary.md.DSRzi1tX.js b/assets/ai_agent_skills-practice-summary.md.C2tM9l4B.js
similarity index 99%
rename from assets/ai_agent_skills-practice-summary.md.DSRzi1tX.js
rename to assets/ai_agent_skills-practice-summary.md.C2tM9l4B.js
index 57a77da4..5864ea7f 100644
--- a/assets/ai_agent_skills-practice-summary.md.DSRzi1tX.js
+++ b/assets/ai_agent_skills-practice-summary.md.C2tM9l4B.js
@@ -1,4 +1,4 @@
-import{T as a}from"./chunks/TwoColumnImage.D6Bqef7c.js";import{g as i,h as l,U as n,z as e}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const d=JSON.parse('{"title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","frontmatter":{"date":"2026-03-05T23:11:25.000Z","title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","permalink":"/ai/agent/skills-practice-summary","sticky":1,"top":true,"categories":["AI 学习与实践","Agent 系列"],"tags":["Agent Skills","Agent","AI"]},"headers":[],"relativePath":"ai/agent/skills-practice-summary.md","filePath":"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md"}'),t={name:"ai/agent/skills-practice-summary.md"},o=Object.assign(t,{setup(p){return(r,s)=>(l(),i("div",null,[s[0]||(s[0]=n(`如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南
摘要总结:大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。
1. 引言:Agent Skills 是什么?
在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。
为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力最直接、最硬核的落地载体,便是其配套的命令行工具 Claude Code)。
我们可以从两个维度来理解 Agent Skills 是什么:
维度 说明 工程架构维度 Agent Skills 是一种模块化的能力组件,用于更优雅地扩展 AI 智能体(Agent)的功能,让 Agent 能够在更复杂的场景下执行更专业的任务。 实现维度 它是一个包含完整指令说明、配套脚本和资源文件的能力文件夹,集成了完备的指令说明(Prompts)、配套脚本(Scripts)及相关资源文件,其核心精髓在于:渐进式披露、动态发现与按需执行,从而在扩展能力的同时,严格控制上下文窗口的 Token 消耗和认知过载。
在 构建 Agentic 生态:零散组件化为可持续的工作流 一文中,我们确立了一些 “可持续工作流” 的共识。接下来,我们将通过细节解析与工程实践,揭开 Agent Skills 的面纱。
2. 文件夹结构拆解:标准化的操作手册
从本质上来讲,Agent Skills 是提供给 AI 的“操作手册 + 资源包”,其标准化的目录树如下:
严格的工程规范:
- 主文件必须命名为
SKILL.md(区分大小写,不能有其他变体)。 - 文件夹名称必须使用 kebab-case(如
my-skill-name,不能写成 My Skill Name)。
skill-name/
+import{T as a}from"./chunks/TwoColumnImage.BpSz0MTE.js";import{g as i,h as l,U as n,z as e}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const d=JSON.parse('{"title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","frontmatter":{"date":"2026-03-05T23:11:25.000Z","title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","permalink":"/ai/agent/skills-practice-summary","sticky":1,"top":true,"categories":["AI 学习与实践","Agent 系列"],"tags":["Agent Skills","Agent","AI"]},"headers":[],"relativePath":"ai/agent/skills-practice-summary.md","filePath":"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md"}'),t={name:"ai/agent/skills-practice-summary.md"},o=Object.assign(t,{setup(p){return(r,s)=>(l(),i("div",null,[s[0]||(s[0]=n(`如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南
摘要总结:大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。
1. 引言:Agent Skills 是什么?
在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。
为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力最直接、最硬核的落地载体,便是其配套的命令行工具 Claude Code)。
我们可以从两个维度来理解 Agent Skills 是什么:
维度 说明 工程架构维度 Agent Skills 是一种模块化的能力组件,用于更优雅地扩展 AI 智能体(Agent)的功能,让 Agent 能够在更复杂的场景下执行更专业的任务。 实现维度 它是一个包含完整指令说明、配套脚本和资源文件的能力文件夹,集成了完备的指令说明(Prompts)、配套脚本(Scripts)及相关资源文件,其核心精髓在于:渐进式披露、动态发现与按需执行,从而在扩展能力的同时,严格控制上下文窗口的 Token 消耗和认知过载。
在 构建 Agentic 生态:零散组件化为可持续的工作流 一文中,我们确立了一些 “可持续工作流” 的共识。接下来,我们将通过细节解析与工程实践,揭开 Agent Skills 的面纱。
2. 文件夹结构拆解:标准化的操作手册
从本质上来讲,Agent Skills 是提供给 AI 的“操作手册 + 资源包”,其标准化的目录树如下:
严格的工程规范:
- 主文件必须命名为
SKILL.md(区分大小写,不能有其他变体)。 - 文件夹名称必须使用 kebab-case(如
my-skill-name,不能写成 My Skill Name)。
skill-name/
├── SKILL.md ← 主文件(必需):SKILL描述、逻辑编排、核心指令,是技能核心内容。
├── scripts/ ← 脚本(可选):Python、Bash 等脚本, 是可执行代码。
├── references/ ← 参考资源(可选):规则、规范、参考指南、示例等。
diff --git a/assets/ai_agent_skills-practice-summary.md.DSRzi1tX.lean.js b/assets/ai_agent_skills-practice-summary.md.C2tM9l4B.lean.js
similarity index 90%
rename from assets/ai_agent_skills-practice-summary.md.DSRzi1tX.lean.js
rename to assets/ai_agent_skills-practice-summary.md.C2tM9l4B.lean.js
index 0e775de1..8288a12f 100644
--- a/assets/ai_agent_skills-practice-summary.md.DSRzi1tX.lean.js
+++ b/assets/ai_agent_skills-practice-summary.md.C2tM9l4B.lean.js
@@ -1 +1 @@
-import{T as a}from"./chunks/TwoColumnImage.D6Bqef7c.js";import{g as i,h as l,U as n,z as e}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const d=JSON.parse('{"title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","frontmatter":{"date":"2026-03-05T23:11:25.000Z","title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","permalink":"/ai/agent/skills-practice-summary","sticky":1,"top":true,"categories":["AI 学习与实践","Agent 系列"],"tags":["Agent Skills","Agent","AI"]},"headers":[],"relativePath":"ai/agent/skills-practice-summary.md","filePath":"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md"}'),t={name:"ai/agent/skills-practice-summary.md"},o=Object.assign(t,{setup(p){return(r,s)=>(l(),i("div",null,[s[0]||(s[0]=n("",15)),e(a,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_skill_md.png","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_use_skill_md.png",leftCaption:"图 1:来自 Anthropic 官方文档",rightCaption:"图 2:核心工作机制示意"}),s[1]||(s[1]=n("",46))]))}});export{d as __pageData,o as default};
+import{T as a}from"./chunks/TwoColumnImage.BpSz0MTE.js";import{g as i,h as l,U as n,z as e}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const d=JSON.parse('{"title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","frontmatter":{"date":"2026-03-05T23:11:25.000Z","title":"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南","description":"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。","permalink":"/ai/agent/skills-practice-summary","sticky":1,"top":true,"categories":["AI 学习与实践","Agent 系列"],"tags":["Agent Skills","Agent","AI"]},"headers":[],"relativePath":"ai/agent/skills-practice-summary.md","filePath":"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md"}'),t={name:"ai/agent/skills-practice-summary.md"},o=Object.assign(t,{setup(p){return(r,s)=>(l(),i("div",null,[s[0]||(s[0]=n("",15)),e(a,{"left-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_skill_md.png","right-image":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_use_skill_md.png",leftCaption:"图 1:来自 Anthropic 官方文档",rightCaption:"图 2:核心工作机制示意"}),s[1]||(s[1]=n("",46))]))}});export{d as __pageData,o as default};
diff --git a/assets/ai_llm-api-resources.md.68LaTypk.js b/assets/ai_llm-api-resources.md.DiUaxg-J.js
similarity index 99%
rename from assets/ai_llm-api-resources.md.68LaTypk.js
rename to assets/ai_llm-api-resources.md.DiUaxg-J.js
index 8b5f3b3f..4d9dd331 100644
--- a/assets/ai_llm-api-resources.md.68LaTypk.js
+++ b/assets/ai_llm-api-resources.md.DiUaxg-J.js
@@ -1 +1 @@
-import{_ as s,g as l,h as n,U as e,i as t}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const m=JSON.parse('{"title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","frontmatter":{"date":"2026-01-06T15:58:53.000Z","title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","permalink":"/ai/llm-api-resources","categories":["资源推荐"],"tags":["资源推荐","AI","LLM API"]},"headers":[],"relativePath":"ai/llm-api-resources.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md"}'),i={name:"ai/llm-api-resources.md"};function d(o,a,r,c,g,p){return n(),l("div",null,[...a[0]||(a[0]=[e('LLM API 平台推荐与选型指南
摘要总结:截至 2026 年,LLM API 服务已形成"官方直连 + 第三方聚合"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。
1. 选模型前,先想清楚这几件事
在对比具体平台之前,可从以下四个维度梳理自身诉求,避免"眼花缭乱后随便选一个":
维度 关键问题 影响决策 任务类型 是通用对话、代码生成、长文档分析,还是多模态理解? 不同模型在垂直能力上差距悬殊 成本预算 每月调用量级?能否接受海外结算与汇率风险? 国产模型 Token 价格通常低 3~10 倍 合规与部署 数据能否出境?能否使用海外服务?是否需要私有化部署? 涉及政务/金融/医疗场景必须考虑 网络环境 开发/部署环境能否稳定访问海外 API? 决定是否需要中转或国内聚合平台
三类模型服务的核心差异:
- 国际顶尖模型(Claude / ChatGPT / Gemini):综合能力最强,英文处理、代码生成、复杂推理均居前列,多模态支持完善,但价格较高,国内访问需要特殊网络;
- 国产优秀模型(DeepSeek / Kimi / GLM / MiniMax / Doubao 等):中文理解与合规性优势突出,Token 价格极具竞争力,部分模型推理能力已逼近国际顶尖,是国内开发者的性价比首选;
- 开源模型(Qwen / LLaMA / Mixtral 等):支持本地或私有化部署,无数据出境风险,可通过 Ollama / vLLM / 硅基流动等部署或调用,适合对数据隐私或成本极度敏感的场景。
2. 官方 API 平台
官方平台即模型研发方直接开放的 API 服务,优势是最新模型第一时间可用、文档权威、SLA 有保障,缺点是需要逐一注册账号、管理多个 Key。
2.1 国际顶尖模型
',10),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openai.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenAI Platform")]),t("p",{class:"desc"},"OpenAI 官方 API 平台,提供 GPT-4o、o1、o3、GPT-3.5 等全系列模型调用。GPT-4o 原生支持文本/图像/音频/视频多模态输入,o1/o3 系列具备深度推理链能力,适合写作、代码生成、复杂推理等高要求场景。支持 Function Calling、流式输出、Fine-tuning,文档和生态最为成熟。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://www.anthropic.com/api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Anthropic Claude API")]),t("p",{class:"desc"},"Anthropic 官方 API,提供 Claude 4.6 Sonnet / Haiku / Opus 等多版本模型,超长上下文业界领先,指令遵循精准、幻觉率低、输出结构清晰,在长文档分析、复杂代码审查与 AI Agent 开发场景中表现尤为突出。Haiku 版价格较低,适合高并发轻量场景。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://ai.google.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/images/branding/searchlogo/ico/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini API")]),t("p",{class:"desc"},"Google 官方 Gemini 模型 API 平台,支持 Gemini 3.0 Pro 与 Gemini 3.0 Flash(高速低成本)等版本,原生多模态(文本/图片/音频/视频/代码),免费套餐额度慷慨,与 Google Workspace、Vertex AI 深度集成,适合研究辅助与多模态应用开发。"),t("span",{class:"VPBadge tip badge"},"国外")])])],-1),e('模型 / 平台 核心优势 最适场景 价格档位 OpenAI GPT 综合能力最全面;原生多模态(图/文/音/视频);o 系列有深度推理链 写作与内容创作 · 代码生成与调试 · 多模态分析 · 复杂推理 高 Anthropic Claude 指令遵循精准;输出结构清晰;长文档理解最强;代码与文档质量高;幻觉率低 长文档精读/摘要 · 复杂任务规划 · 高质量代码审查 · Agent 推理后端 高(Haiku 版较低) Google Gemini 超长上下文、原生多模态;与 Google Search / Workspace 深度整合;免费额度慷慨 超长资料理解 · 视频/音频分析 · 研究辅助 · Google 生态集成 中
免费额度大
2.2 国内优秀模型
',2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"DeepSeek API")]),t("p",{class:"desc"},"DeepSeek 官方 API 平台,提供 DeepSeek-V3(通用对话)与 DeepSeek-R1(深度推理)等模型。R1 的数学、代码与逻辑推理能力已逼近 OpenAI o1,且模型完全开源支持本地部署。API 定价业内极低,是性价比最突出的国产模型,尤其推荐代码生成与数学推理场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://console.volcengine.com/ark",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Doubao API")]),t("p",{class:"desc"},"字节跳动旗下豆包大模型开放平台,提供 Doubao-pro / lite 等系列模型 API,响应速度业内领先,API 定价极低(Token 单价为国际顶尖模型的 1/10 以下),文档完善,支持免费额度与企业接入,适合高并发轻量对话与内容摘要场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://platform.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi API")]),t("p",{class:"desc"},"月之暗面官方 API 平台,主打超长中文上下文(最高 128K~1M Token),支持 PDF / Word / 代码等多格式文件解析与深度研究模式,中文长文档理解能力国内领先。适合法律合同分析、学术论文精读、多文件对比摘要等重度阅读场景。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax API")]),t("p",{class:"desc"},"miniMax 官方开放平台,提供 MiniMax-Text(100 万 Token 长上下文)、语音合成(TTS)、Hailuo AI 视频生成等多模态 API。文本/语音/视频能力均处于国内前列,适合需要多模态输出、语音克隆与 AI 视频生成的开发者。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://bailian.console.aliyun.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Qwen API")]),t("p",{class:"desc"},"阿里云 Qwen 系列模型官方 API 平台(百炼),涵盖 Qwen-Long(长上下文)、Qwen-Coder(代码)、Qwen-Math(数学)、Qwen-VL(多模态视觉)等专项子模型,与阿里云、钉钉生态深度集成,部分模型开源,文档完善,新用户有较大免费 Token 额度。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://open.bigmodel.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://open.bigmodel.cn/img/icons/favicon-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱 AI (GLM)")]),t("p",{class:"desc"},"智谱 AI 官方开放平台,提供 GLM-4 / GLM-4V(多模态)/ CodeGeeX(代码)等系列模型 API,数学与代码推理能力突出,Function Call 与工具调用完善,企业 RAG / Agent 生态成熟,适合开发知识库问答、Agent 工具链与图文多模态理解应用。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e('模型 / 平台 核心优势 最适场景 价格档位 DeepSeek R1 推理能力逼近 o1;数学/代码/逻辑顶尖;完全开源可本地部署;API 价格极低 代码生成与调试 · 数学/逻辑推理 · 学术研究 · 私有化部署 极低 ⭐ Moonshot (Kimi) 中文长上下文最强;多格式文件解析(PDF/Word/代码);内置深度研究模式 长文档阅读与结构化提炼 · 法律/合同分析 · 多文件对比 低 miniMax 100 万 Token 长上下文;文本/语音/视频多模态;语音合成与视频生成能力强 超长文档理解 · AI 视频/语音生成 · 角色扮演/AI 陪伴 低 豆包 (Doubao) 响应速度极快;API 价格最低;与字节跳动生态打通 高并发轻量对话 · 内容摘要 · 短视频内容策划 极低 ⭐ 通义千问 (Qwen) 子模型丰富(Coder/Math/VL);阿里云生态集成;部分开源 中文内容创作 · 代码/数学 · 钉钉/阿里云场景 低 智谱 GLM 数学与代码推理突出;Function Call 工具调用完善;企业 RAG 生态成熟 企业知识库问答 · Agent 工具链 · 图文多模态理解 低
3. 第三方聚合平台
第三方平台将多家主流模型聚合为统一 API 入口,开发者无需逐一申请各厂商 Key,可一站访问 GPT、Claude、Gemini、 MininMax、DeepSeek 等数百个模型,按量计费、兼容 OpenAI SDK,大幅降低接入与切换成本。国际开发者首选 OpenRouter,国内开发者首选硅基流动。
',3),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://openrouter.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openrouter.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenRouter")]),t("p",{class:"desc"},"目前最受开发者欢迎的 LLM API 聚合平台,统一 OpenAI 兼容接口可路由至 300+ 模型(GPT-4o / Claude 3.5 / Gemini / LLaMA / DeepSeek 等),支持按量付费、自动降级 Fallback、流式输出与 Function Call,是切换/对比多家模型的首选。无需管理多个 Key,一个账号解决所有模型接入。"),t("span",{class:"VPBadge tip badge"},"强烈推荐")]),t("a",{href:"https://cloud.siliconflow.cn/me/models",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"SiliconFlow")]),t("p",{class:"desc"},"国内最受开发者欢迎的 LLM API 聚合与推理加速平台,提供 DeepSeek / Qwen / GLM / MiniMax 等主流模型的统一 API,兼容 OpenAI 接口格式,价格业内极低(部分模型免费),国内直连稳定,注册即可快速接入,是国内开发者使用第三方 API 的首选。"),t("span",{class:"VPBadge tip badge"},"国内首选")]),t("a",{href:"https://huggingface.co/inference-api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://huggingface.co/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Hugging Face")]),t("p",{class:"desc"},"全球最大开源 AI 社区 Hugging Face 提供的推理 API,可直接调用平台上数十万个开源模型(文本/图像/音频/多模态),支持 Serverless 按需推理与 Dedicated Endpoints 专属部署,是开源模型生态的事实标准入口。"),t("span",{class:"VPBadge tip badge"},"开源生态")]),t("a",{href:"https://console.groq.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://groq.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Groq")]),t("p",{class:"desc"},"基于自研 LPU(Language Processing Unit)芯片的超高速推理平台,开源模型(LLaMA 3 / Mixtral / Gemma / DeepSeek 等)推理速度可达普通 GPU 的数十倍,免费套餐慷慨,接口完全兼容 OpenAI SDK,适合对响应延迟极敏感的实时对话、语音助手等场景。"),t("span",{class:"VPBadge tip badge"},"极速推理")]),t("a",{href:"https://www.together.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Together AI")]),t("p",{class:"desc"},"专注开源大模型的高性能推理与微调平台,支持 LLaMA 3 / Mixtral / Qwen / DBRX 等 100+ 开源模型 API 调用,提供 Fine-tuning 训练能力,价格极具竞争力,OpenAI 兼容接口,适合开源模型研发与企业私有化微调场景。"),t("span",{class:"VPBadge tip badge"},"开源+微调")]),t("a",{href:"https://replicate.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Replicate")]),t("p",{class:"desc"},'以"模型市场"形态运营的 AI API 平台,托管数千个开源图像、语音、文本模型(Stable Diffusion / LLaMA / Whisper 等),每个模型有独立 API 端点,按 GPU 计算秒数计费,无需搭建推理基础设施,适合快速调用多模态开源模型做原型验证。'),t("span",{class:"VPBadge tip badge"},"模型市场")]),t("a",{href:"https://302.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"302.AI")]),t("p",{class:"desc"},"国内知名的 AI API 中转与聚合平台,整合 OpenAI / Claude / Gemini 等国际主流模型,提供统一 OpenAI 兼容 API,支持国内直连无需科学上网,按量充值使用,并附带 Web 体验页面,适合个人开发者快速调用海外模型。"),t("span",{class:"VPBadge tip badge"},"国内中转")]),t("a",{href:"https://api2d.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"API2D")]),t("p",{class:"desc"},"专注 OpenAI 系列模型国内中转的 API 代理平台,完全兼容 OpenAI SDK,支持 GPT / Claude / DALL·E / Whisper 等全系模型,国内直连访问稳定,按 Tokens 消耗计费,是需要在国内稳定使用 OpenAI API 的开发者的常用选择。"),t("span",{class:"VPBadge tip badge"},"OpenAI 中转")])])],-1),e('平台 核心定位 计费方式 国内可用 OpenRouter 多模型聚合路由,300+ 模型统一入口 按 Tokens,随用随付 ❌
需科学上网 硅基流动 国内聚合推理,价格最低 按 Tokens,部分免费 ✅ Groq LPU 超高速推理,延迟极低 免费额度 + 按量付费 ❌
需科学上网 Hugging Face 开源生态标准入口,模型最全 数十万开源模型(文本/图像/音频/多模态) Serverless 免费 + Dedicated 按量 Together AI 开源模型推理 + Fine-tuning 按 Tokens + 训练时长 ❌
需科学上网 Replicate 开源模型市场,多模态覆盖广 按 GPU 计算秒数 ❌
需科学上网 302.AI 国内直连海外模型中转 充值按量消耗 ✅ API2D OpenAI 系列国内稳定代理 按 Tokens 消耗 ✅
预算极有限(个人开发者 / 原型阶段):
- 国内直连 → 硅基流动(DeepSeek / Qwen 部分模型免费)
- 有海外网络 → OpenRouter 免费模型 或 Groq 免费额度
- 需要 GPT-4o / Claude 但无法直连 → 302.AI / API2D 按量充值
成本敏感但有一定预算(初创产品 / 小团队):
- DeepSeek API(官方直连)或 硅基流动 跑 DeepSeek / Qwen 系列
- 对质量要求高的核心场景:用 Claude Haiku(低价高质量)或 Gemini 3.0 Flash
企业级 / 不计较成本优先质量:
- 英文为主 → OpenAI GPT + Claude 4.6 Sonnet 双保险
- 中文为主且需合规 → 百度千帆(支持 Fine-tuning + 私有化)/ 阿里云百炼
📌 实战建议
- 从硅基流动起步:国内开发者强烈建议先注册 硅基流动,用免费额度把 DeepSeek-V3 / Qwen 跑起来,对比效果再决定是否升级。
- 保持接口兼容性:无论选哪家,优先使用 OpenAI 兼容格式(
/v1/chat/completions),这样换模型/换平台只需改一行 base_url,不用重写代码。 - 不要只用一个模型:推荐"主力模型 + 降级备用"组合——主力走质量优先的模型,备用走低成本模型,在 OpenRouter / 硅基流动上配置 Fallback 自动切换。
- 注意 Token 用量陷阱:长上下文模型(如 Kimi 1M)单次输入成本随 Token 数线性增长,实际使用中要做好截断策略,避免账单超出预期。
- 企业场景必看合规:涉及用户隐私、金融、医疗等数据时,优先选择支持私有化部署或数据不出境承诺的服务(百度千帆、阿里云百炼、本地部署 DeepSeek 等)。
',8)])])}const h=s(i,[["render",d]]);export{m as __pageData,h as default};
+import{_ as s,g as l,h as n,U as e,i as t}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const m=JSON.parse('{"title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","frontmatter":{"date":"2026-01-06T15:58:53.000Z","title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","permalink":"/ai/llm-api-resources","categories":["资源推荐"],"tags":["资源推荐","AI","LLM API"]},"headers":[],"relativePath":"ai/llm-api-resources.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md"}'),i={name:"ai/llm-api-resources.md"};function d(o,a,r,c,g,p){return n(),l("div",null,[...a[0]||(a[0]=[e('LLM API 平台推荐与选型指南
摘要总结:截至 2026 年,LLM API 服务已形成"官方直连 + 第三方聚合"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。
1. 选模型前,先想清楚这几件事
在对比具体平台之前,可从以下四个维度梳理自身诉求,避免"眼花缭乱后随便选一个":
维度 关键问题 影响决策 任务类型 是通用对话、代码生成、长文档分析,还是多模态理解? 不同模型在垂直能力上差距悬殊 成本预算 每月调用量级?能否接受海外结算与汇率风险? 国产模型 Token 价格通常低 3~10 倍 合规与部署 数据能否出境?能否使用海外服务?是否需要私有化部署? 涉及政务/金融/医疗场景必须考虑 网络环境 开发/部署环境能否稳定访问海外 API? 决定是否需要中转或国内聚合平台
三类模型服务的核心差异:
- 国际顶尖模型(Claude / ChatGPT / Gemini):综合能力最强,英文处理、代码生成、复杂推理均居前列,多模态支持完善,但价格较高,国内访问需要特殊网络;
- 国产优秀模型(DeepSeek / Kimi / GLM / MiniMax / Doubao 等):中文理解与合规性优势突出,Token 价格极具竞争力,部分模型推理能力已逼近国际顶尖,是国内开发者的性价比首选;
- 开源模型(Qwen / LLaMA / Mixtral 等):支持本地或私有化部署,无数据出境风险,可通过 Ollama / vLLM / 硅基流动等部署或调用,适合对数据隐私或成本极度敏感的场景。
2. 官方 API 平台
官方平台即模型研发方直接开放的 API 服务,优势是最新模型第一时间可用、文档权威、SLA 有保障,缺点是需要逐一注册账号、管理多个 Key。
2.1 国际顶尖模型
',10),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openai.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenAI Platform")]),t("p",{class:"desc"},"OpenAI 官方 API 平台,提供 GPT-4o、o1、o3、GPT-3.5 等全系列模型调用。GPT-4o 原生支持文本/图像/音频/视频多模态输入,o1/o3 系列具备深度推理链能力,适合写作、代码生成、复杂推理等高要求场景。支持 Function Calling、流式输出、Fine-tuning,文档和生态最为成熟。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://www.anthropic.com/api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Anthropic Claude API")]),t("p",{class:"desc"},"Anthropic 官方 API,提供 Claude 4.6 Sonnet / Haiku / Opus 等多版本模型,超长上下文业界领先,指令遵循精准、幻觉率低、输出结构清晰,在长文档分析、复杂代码审查与 AI Agent 开发场景中表现尤为突出。Haiku 版价格较低,适合高并发轻量场景。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://ai.google.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/images/branding/searchlogo/ico/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini API")]),t("p",{class:"desc"},"Google 官方 Gemini 模型 API 平台,支持 Gemini 3.0 Pro 与 Gemini 3.0 Flash(高速低成本)等版本,原生多模态(文本/图片/音频/视频/代码),免费套餐额度慷慨,与 Google Workspace、Vertex AI 深度集成,适合研究辅助与多模态应用开发。"),t("span",{class:"VPBadge tip badge"},"国外")])])],-1),e('模型 / 平台 核心优势 最适场景 价格档位 OpenAI GPT 综合能力最全面;原生多模态(图/文/音/视频);o 系列有深度推理链 写作与内容创作 · 代码生成与调试 · 多模态分析 · 复杂推理 高 Anthropic Claude 指令遵循精准;输出结构清晰;长文档理解最强;代码与文档质量高;幻觉率低 长文档精读/摘要 · 复杂任务规划 · 高质量代码审查 · Agent 推理后端 高(Haiku 版较低) Google Gemini 超长上下文、原生多模态;与 Google Search / Workspace 深度整合;免费额度慷慨 超长资料理解 · 视频/音频分析 · 研究辅助 · Google 生态集成 中
免费额度大
2.2 国内优秀模型
',2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"DeepSeek API")]),t("p",{class:"desc"},"DeepSeek 官方 API 平台,提供 DeepSeek-V3(通用对话)与 DeepSeek-R1(深度推理)等模型。R1 的数学、代码与逻辑推理能力已逼近 OpenAI o1,且模型完全开源支持本地部署。API 定价业内极低,是性价比最突出的国产模型,尤其推荐代码生成与数学推理场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://console.volcengine.com/ark",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Doubao API")]),t("p",{class:"desc"},"字节跳动旗下豆包大模型开放平台,提供 Doubao-pro / lite 等系列模型 API,响应速度业内领先,API 定价极低(Token 单价为国际顶尖模型的 1/10 以下),文档完善,支持免费额度与企业接入,适合高并发轻量对话与内容摘要场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://platform.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi API")]),t("p",{class:"desc"},"月之暗面官方 API 平台,主打超长中文上下文(最高 128K~1M Token),支持 PDF / Word / 代码等多格式文件解析与深度研究模式,中文长文档理解能力国内领先。适合法律合同分析、学术论文精读、多文件对比摘要等重度阅读场景。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax API")]),t("p",{class:"desc"},"miniMax 官方开放平台,提供 MiniMax-Text(100 万 Token 长上下文)、语音合成(TTS)、Hailuo AI 视频生成等多模态 API。文本/语音/视频能力均处于国内前列,适合需要多模态输出、语音克隆与 AI 视频生成的开发者。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://bailian.console.aliyun.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Qwen API")]),t("p",{class:"desc"},"阿里云 Qwen 系列模型官方 API 平台(百炼),涵盖 Qwen-Long(长上下文)、Qwen-Coder(代码)、Qwen-Math(数学)、Qwen-VL(多模态视觉)等专项子模型,与阿里云、钉钉生态深度集成,部分模型开源,文档完善,新用户有较大免费 Token 额度。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://open.bigmodel.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://open.bigmodel.cn/img/icons/favicon-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱 AI (GLM)")]),t("p",{class:"desc"},"智谱 AI 官方开放平台,提供 GLM-4 / GLM-4V(多模态)/ CodeGeeX(代码)等系列模型 API,数学与代码推理能力突出,Function Call 与工具调用完善,企业 RAG / Agent 生态成熟,适合开发知识库问答、Agent 工具链与图文多模态理解应用。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e('模型 / 平台 核心优势 最适场景 价格档位 DeepSeek R1 推理能力逼近 o1;数学/代码/逻辑顶尖;完全开源可本地部署;API 价格极低 代码生成与调试 · 数学/逻辑推理 · 学术研究 · 私有化部署 极低 ⭐ Moonshot (Kimi) 中文长上下文最强;多格式文件解析(PDF/Word/代码);内置深度研究模式 长文档阅读与结构化提炼 · 法律/合同分析 · 多文件对比 低 miniMax 100 万 Token 长上下文;文本/语音/视频多模态;语音合成与视频生成能力强 超长文档理解 · AI 视频/语音生成 · 角色扮演/AI 陪伴 低 豆包 (Doubao) 响应速度极快;API 价格最低;与字节跳动生态打通 高并发轻量对话 · 内容摘要 · 短视频内容策划 极低 ⭐ 通义千问 (Qwen) 子模型丰富(Coder/Math/VL);阿里云生态集成;部分开源 中文内容创作 · 代码/数学 · 钉钉/阿里云场景 低 智谱 GLM 数学与代码推理突出;Function Call 工具调用完善;企业 RAG 生态成熟 企业知识库问答 · Agent 工具链 · 图文多模态理解 低
3. 第三方聚合平台
第三方平台将多家主流模型聚合为统一 API 入口,开发者无需逐一申请各厂商 Key,可一站访问 GPT、Claude、Gemini、 MininMax、DeepSeek 等数百个模型,按量计费、兼容 OpenAI SDK,大幅降低接入与切换成本。国际开发者首选 OpenRouter,国内开发者首选硅基流动。
',3),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://openrouter.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openrouter.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenRouter")]),t("p",{class:"desc"},"目前最受开发者欢迎的 LLM API 聚合平台,统一 OpenAI 兼容接口可路由至 300+ 模型(GPT-4o / Claude 3.5 / Gemini / LLaMA / DeepSeek 等),支持按量付费、自动降级 Fallback、流式输出与 Function Call,是切换/对比多家模型的首选。无需管理多个 Key,一个账号解决所有模型接入。"),t("span",{class:"VPBadge tip badge"},"强烈推荐")]),t("a",{href:"https://cloud.siliconflow.cn/me/models",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"SiliconFlow")]),t("p",{class:"desc"},"国内最受开发者欢迎的 LLM API 聚合与推理加速平台,提供 DeepSeek / Qwen / GLM / MiniMax 等主流模型的统一 API,兼容 OpenAI 接口格式,价格业内极低(部分模型免费),国内直连稳定,注册即可快速接入,是国内开发者使用第三方 API 的首选。"),t("span",{class:"VPBadge tip badge"},"国内首选")]),t("a",{href:"https://huggingface.co/inference-api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://huggingface.co/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Hugging Face")]),t("p",{class:"desc"},"全球最大开源 AI 社区 Hugging Face 提供的推理 API,可直接调用平台上数十万个开源模型(文本/图像/音频/多模态),支持 Serverless 按需推理与 Dedicated Endpoints 专属部署,是开源模型生态的事实标准入口。"),t("span",{class:"VPBadge tip badge"},"开源生态")]),t("a",{href:"https://console.groq.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://groq.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Groq")]),t("p",{class:"desc"},"基于自研 LPU(Language Processing Unit)芯片的超高速推理平台,开源模型(LLaMA 3 / Mixtral / Gemma / DeepSeek 等)推理速度可达普通 GPU 的数十倍,免费套餐慷慨,接口完全兼容 OpenAI SDK,适合对响应延迟极敏感的实时对话、语音助手等场景。"),t("span",{class:"VPBadge tip badge"},"极速推理")]),t("a",{href:"https://www.together.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Together AI")]),t("p",{class:"desc"},"专注开源大模型的高性能推理与微调平台,支持 LLaMA 3 / Mixtral / Qwen / DBRX 等 100+ 开源模型 API 调用,提供 Fine-tuning 训练能力,价格极具竞争力,OpenAI 兼容接口,适合开源模型研发与企业私有化微调场景。"),t("span",{class:"VPBadge tip badge"},"开源+微调")]),t("a",{href:"https://replicate.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Replicate")]),t("p",{class:"desc"},'以"模型市场"形态运营的 AI API 平台,托管数千个开源图像、语音、文本模型(Stable Diffusion / LLaMA / Whisper 等),每个模型有独立 API 端点,按 GPU 计算秒数计费,无需搭建推理基础设施,适合快速调用多模态开源模型做原型验证。'),t("span",{class:"VPBadge tip badge"},"模型市场")]),t("a",{href:"https://302.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"302.AI")]),t("p",{class:"desc"},"国内知名的 AI API 中转与聚合平台,整合 OpenAI / Claude / Gemini 等国际主流模型,提供统一 OpenAI 兼容 API,支持国内直连无需科学上网,按量充值使用,并附带 Web 体验页面,适合个人开发者快速调用海外模型。"),t("span",{class:"VPBadge tip badge"},"国内中转")]),t("a",{href:"https://api2d.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"API2D")]),t("p",{class:"desc"},"专注 OpenAI 系列模型国内中转的 API 代理平台,完全兼容 OpenAI SDK,支持 GPT / Claude / DALL·E / Whisper 等全系模型,国内直连访问稳定,按 Tokens 消耗计费,是需要在国内稳定使用 OpenAI API 的开发者的常用选择。"),t("span",{class:"VPBadge tip badge"},"OpenAI 中转")])])],-1),e('平台 核心定位 计费方式 国内可用 OpenRouter 多模型聚合路由,300+ 模型统一入口 按 Tokens,随用随付 ❌
需科学上网 硅基流动 国内聚合推理,价格最低 按 Tokens,部分免费 ✅ Groq LPU 超高速推理,延迟极低 免费额度 + 按量付费 ❌
需科学上网 Hugging Face 开源生态标准入口,模型最全 数十万开源模型(文本/图像/音频/多模态) Serverless 免费 + Dedicated 按量 Together AI 开源模型推理 + Fine-tuning 按 Tokens + 训练时长 ❌
需科学上网 Replicate 开源模型市场,多模态覆盖广 按 GPU 计算秒数 ❌
需科学上网 302.AI 国内直连海外模型中转 充值按量消耗 ✅ API2D OpenAI 系列国内稳定代理 按 Tokens 消耗 ✅
预算极有限(个人开发者 / 原型阶段):
- 国内直连 → 硅基流动(DeepSeek / Qwen 部分模型免费)
- 有海外网络 → OpenRouter 免费模型 或 Groq 免费额度
- 需要 GPT-4o / Claude 但无法直连 → 302.AI / API2D 按量充值
成本敏感但有一定预算(初创产品 / 小团队):
- DeepSeek API(官方直连)或 硅基流动 跑 DeepSeek / Qwen 系列
- 对质量要求高的核心场景:用 Claude Haiku(低价高质量)或 Gemini 3.0 Flash
企业级 / 不计较成本优先质量:
- 英文为主 → OpenAI GPT + Claude 4.6 Sonnet 双保险
- 中文为主且需合规 → 百度千帆(支持 Fine-tuning + 私有化)/ 阿里云百炼
📌 实战建议
- 从硅基流动起步:国内开发者强烈建议先注册 硅基流动,用免费额度把 DeepSeek-V3 / Qwen 跑起来,对比效果再决定是否升级。
- 保持接口兼容性:无论选哪家,优先使用 OpenAI 兼容格式(
/v1/chat/completions),这样换模型/换平台只需改一行 base_url,不用重写代码。 - 不要只用一个模型:推荐"主力模型 + 降级备用"组合——主力走质量优先的模型,备用走低成本模型,在 OpenRouter / 硅基流动上配置 Fallback 自动切换。
- 注意 Token 用量陷阱:长上下文模型(如 Kimi 1M)单次输入成本随 Token 数线性增长,实际使用中要做好截断策略,避免账单超出预期。
- 企业场景必看合规:涉及用户隐私、金融、医疗等数据时,优先选择支持私有化部署或数据不出境承诺的服务(百度千帆、阿里云百炼、本地部署 DeepSeek 等)。
',8)])])}const h=s(i,[["render",d]]);export{m as __pageData,h as default};
diff --git a/assets/ai_llm-api-resources.md.68LaTypk.lean.js b/assets/ai_llm-api-resources.md.DiUaxg-J.lean.js
similarity index 99%
rename from assets/ai_llm-api-resources.md.68LaTypk.lean.js
rename to assets/ai_llm-api-resources.md.DiUaxg-J.lean.js
index 445951dd..51695960 100644
--- a/assets/ai_llm-api-resources.md.68LaTypk.lean.js
+++ b/assets/ai_llm-api-resources.md.DiUaxg-J.lean.js
@@ -1 +1 @@
-import{_ as s,g as l,h as n,U as e,i as t}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const m=JSON.parse('{"title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","frontmatter":{"date":"2026-01-06T15:58:53.000Z","title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","permalink":"/ai/llm-api-resources","categories":["资源推荐"],"tags":["资源推荐","AI","LLM API"]},"headers":[],"relativePath":"ai/llm-api-resources.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md"}'),i={name:"ai/llm-api-resources.md"};function d(o,a,r,c,g,p){return n(),l("div",null,[...a[0]||(a[0]=[e("",10),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openai.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenAI Platform")]),t("p",{class:"desc"},"OpenAI 官方 API 平台,提供 GPT-4o、o1、o3、GPT-3.5 等全系列模型调用。GPT-4o 原生支持文本/图像/音频/视频多模态输入,o1/o3 系列具备深度推理链能力,适合写作、代码生成、复杂推理等高要求场景。支持 Function Calling、流式输出、Fine-tuning,文档和生态最为成熟。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://www.anthropic.com/api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Anthropic Claude API")]),t("p",{class:"desc"},"Anthropic 官方 API,提供 Claude 4.6 Sonnet / Haiku / Opus 等多版本模型,超长上下文业界领先,指令遵循精准、幻觉率低、输出结构清晰,在长文档分析、复杂代码审查与 AI Agent 开发场景中表现尤为突出。Haiku 版价格较低,适合高并发轻量场景。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://ai.google.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/images/branding/searchlogo/ico/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini API")]),t("p",{class:"desc"},"Google 官方 Gemini 模型 API 平台,支持 Gemini 3.0 Pro 与 Gemini 3.0 Flash(高速低成本)等版本,原生多模态(文本/图片/音频/视频/代码),免费套餐额度慷慨,与 Google Workspace、Vertex AI 深度集成,适合研究辅助与多模态应用开发。"),t("span",{class:"VPBadge tip badge"},"国外")])])],-1),e("",2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"DeepSeek API")]),t("p",{class:"desc"},"DeepSeek 官方 API 平台,提供 DeepSeek-V3(通用对话)与 DeepSeek-R1(深度推理)等模型。R1 的数学、代码与逻辑推理能力已逼近 OpenAI o1,且模型完全开源支持本地部署。API 定价业内极低,是性价比最突出的国产模型,尤其推荐代码生成与数学推理场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://console.volcengine.com/ark",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Doubao API")]),t("p",{class:"desc"},"字节跳动旗下豆包大模型开放平台,提供 Doubao-pro / lite 等系列模型 API,响应速度业内领先,API 定价极低(Token 单价为国际顶尖模型的 1/10 以下),文档完善,支持免费额度与企业接入,适合高并发轻量对话与内容摘要场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://platform.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi API")]),t("p",{class:"desc"},"月之暗面官方 API 平台,主打超长中文上下文(最高 128K~1M Token),支持 PDF / Word / 代码等多格式文件解析与深度研究模式,中文长文档理解能力国内领先。适合法律合同分析、学术论文精读、多文件对比摘要等重度阅读场景。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax API")]),t("p",{class:"desc"},"miniMax 官方开放平台,提供 MiniMax-Text(100 万 Token 长上下文)、语音合成(TTS)、Hailuo AI 视频生成等多模态 API。文本/语音/视频能力均处于国内前列,适合需要多模态输出、语音克隆与 AI 视频生成的开发者。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://bailian.console.aliyun.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Qwen API")]),t("p",{class:"desc"},"阿里云 Qwen 系列模型官方 API 平台(百炼),涵盖 Qwen-Long(长上下文)、Qwen-Coder(代码)、Qwen-Math(数学)、Qwen-VL(多模态视觉)等专项子模型,与阿里云、钉钉生态深度集成,部分模型开源,文档完善,新用户有较大免费 Token 额度。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://open.bigmodel.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://open.bigmodel.cn/img/icons/favicon-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱 AI (GLM)")]),t("p",{class:"desc"},"智谱 AI 官方开放平台,提供 GLM-4 / GLM-4V(多模态)/ CodeGeeX(代码)等系列模型 API,数学与代码推理能力突出,Function Call 与工具调用完善,企业 RAG / Agent 生态成熟,适合开发知识库问答、Agent 工具链与图文多模态理解应用。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e("",3),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://openrouter.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openrouter.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenRouter")]),t("p",{class:"desc"},"目前最受开发者欢迎的 LLM API 聚合平台,统一 OpenAI 兼容接口可路由至 300+ 模型(GPT-4o / Claude 3.5 / Gemini / LLaMA / DeepSeek 等),支持按量付费、自动降级 Fallback、流式输出与 Function Call,是切换/对比多家模型的首选。无需管理多个 Key,一个账号解决所有模型接入。"),t("span",{class:"VPBadge tip badge"},"强烈推荐")]),t("a",{href:"https://cloud.siliconflow.cn/me/models",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"SiliconFlow")]),t("p",{class:"desc"},"国内最受开发者欢迎的 LLM API 聚合与推理加速平台,提供 DeepSeek / Qwen / GLM / MiniMax 等主流模型的统一 API,兼容 OpenAI 接口格式,价格业内极低(部分模型免费),国内直连稳定,注册即可快速接入,是国内开发者使用第三方 API 的首选。"),t("span",{class:"VPBadge tip badge"},"国内首选")]),t("a",{href:"https://huggingface.co/inference-api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://huggingface.co/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Hugging Face")]),t("p",{class:"desc"},"全球最大开源 AI 社区 Hugging Face 提供的推理 API,可直接调用平台上数十万个开源模型(文本/图像/音频/多模态),支持 Serverless 按需推理与 Dedicated Endpoints 专属部署,是开源模型生态的事实标准入口。"),t("span",{class:"VPBadge tip badge"},"开源生态")]),t("a",{href:"https://console.groq.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://groq.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Groq")]),t("p",{class:"desc"},"基于自研 LPU(Language Processing Unit)芯片的超高速推理平台,开源模型(LLaMA 3 / Mixtral / Gemma / DeepSeek 等)推理速度可达普通 GPU 的数十倍,免费套餐慷慨,接口完全兼容 OpenAI SDK,适合对响应延迟极敏感的实时对话、语音助手等场景。"),t("span",{class:"VPBadge tip badge"},"极速推理")]),t("a",{href:"https://www.together.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Together AI")]),t("p",{class:"desc"},"专注开源大模型的高性能推理与微调平台,支持 LLaMA 3 / Mixtral / Qwen / DBRX 等 100+ 开源模型 API 调用,提供 Fine-tuning 训练能力,价格极具竞争力,OpenAI 兼容接口,适合开源模型研发与企业私有化微调场景。"),t("span",{class:"VPBadge tip badge"},"开源+微调")]),t("a",{href:"https://replicate.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Replicate")]),t("p",{class:"desc"},'以"模型市场"形态运营的 AI API 平台,托管数千个开源图像、语音、文本模型(Stable Diffusion / LLaMA / Whisper 等),每个模型有独立 API 端点,按 GPU 计算秒数计费,无需搭建推理基础设施,适合快速调用多模态开源模型做原型验证。'),t("span",{class:"VPBadge tip badge"},"模型市场")]),t("a",{href:"https://302.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"302.AI")]),t("p",{class:"desc"},"国内知名的 AI API 中转与聚合平台,整合 OpenAI / Claude / Gemini 等国际主流模型,提供统一 OpenAI 兼容 API,支持国内直连无需科学上网,按量充值使用,并附带 Web 体验页面,适合个人开发者快速调用海外模型。"),t("span",{class:"VPBadge tip badge"},"国内中转")]),t("a",{href:"https://api2d.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"API2D")]),t("p",{class:"desc"},"专注 OpenAI 系列模型国内中转的 API 代理平台,完全兼容 OpenAI SDK,支持 GPT / Claude / DALL·E / Whisper 等全系模型,国内直连访问稳定,按 Tokens 消耗计费,是需要在国内稳定使用 OpenAI API 的开发者的常用选择。"),t("span",{class:"VPBadge tip badge"},"OpenAI 中转")])])],-1),e("",8)])])}const h=s(i,[["render",d]]);export{m as __pageData,h as default};
+import{_ as s,g as l,h as n,U as e,i as t}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const m=JSON.parse('{"title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","frontmatter":{"date":"2026-01-06T15:58:53.000Z","title":"LLM API 平台推荐与选型指南","description":"摘要总结:截至 2026 年,LLM API 服务已形成\\"官方直连 + 第三方聚合\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。","permalink":"/ai/llm-api-resources","categories":["资源推荐"],"tags":["资源推荐","AI","LLM API"]},"headers":[],"relativePath":"ai/llm-api-resources.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md"}'),i={name:"ai/llm-api-resources.md"};function d(o,a,r,c,g,p){return n(),l("div",null,[...a[0]||(a[0]=[e("",10),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openai.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenAI Platform")]),t("p",{class:"desc"},"OpenAI 官方 API 平台,提供 GPT-4o、o1、o3、GPT-3.5 等全系列模型调用。GPT-4o 原生支持文本/图像/音频/视频多模态输入,o1/o3 系列具备深度推理链能力,适合写作、代码生成、复杂推理等高要求场景。支持 Function Calling、流式输出、Fine-tuning,文档和生态最为成熟。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://www.anthropic.com/api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Anthropic Claude API")]),t("p",{class:"desc"},"Anthropic 官方 API,提供 Claude 4.6 Sonnet / Haiku / Opus 等多版本模型,超长上下文业界领先,指令遵循精准、幻觉率低、输出结构清晰,在长文档分析、复杂代码审查与 AI Agent 开发场景中表现尤为突出。Haiku 版价格较低,适合高并发轻量场景。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://ai.google.dev/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/images/branding/searchlogo/ico/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini API")]),t("p",{class:"desc"},"Google 官方 Gemini 模型 API 平台,支持 Gemini 3.0 Pro 与 Gemini 3.0 Flash(高速低成本)等版本,原生多模态(文本/图片/音频/视频/代码),免费套餐额度慷慨,与 Google Workspace、Vertex AI 深度集成,适合研究辅助与多模态应用开发。"),t("span",{class:"VPBadge tip badge"},"国外")])])],-1),e("",2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://platform.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"DeepSeek API")]),t("p",{class:"desc"},"DeepSeek 官方 API 平台,提供 DeepSeek-V3(通用对话)与 DeepSeek-R1(深度推理)等模型。R1 的数学、代码与逻辑推理能力已逼近 OpenAI o1,且模型完全开源支持本地部署。API 定价业内极低,是性价比最突出的国产模型,尤其推荐代码生成与数学推理场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://console.volcengine.com/ark",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Doubao API")]),t("p",{class:"desc"},"字节跳动旗下豆包大模型开放平台,提供 Doubao-pro / lite 等系列模型 API,响应速度业内领先,API 定价极低(Token 单价为国际顶尖模型的 1/10 以下),文档完善,支持免费额度与企业接入,适合高并发轻量对话与内容摘要场景。"),t("span",{class:"VPBadge tip badge"},"极低价")]),t("a",{href:"https://platform.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi API")]),t("p",{class:"desc"},"月之暗面官方 API 平台,主打超长中文上下文(最高 128K~1M Token),支持 PDF / Word / 代码等多格式文件解析与深度研究模式,中文长文档理解能力国内领先。适合法律合同分析、学术论文精读、多文件对比摘要等重度阅读场景。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax API")]),t("p",{class:"desc"},"miniMax 官方开放平台,提供 MiniMax-Text(100 万 Token 长上下文)、语音合成(TTS)、Hailuo AI 视频生成等多模态 API。文本/语音/视频能力均处于国内前列,适合需要多模态输出、语音克隆与 AI 视频生成的开发者。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://bailian.console.aliyun.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Qwen API")]),t("p",{class:"desc"},"阿里云 Qwen 系列模型官方 API 平台(百炼),涵盖 Qwen-Long(长上下文)、Qwen-Coder(代码)、Qwen-Math(数学)、Qwen-VL(多模态视觉)等专项子模型,与阿里云、钉钉生态深度集成,部分模型开源,文档完善,新用户有较大免费 Token 额度。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://open.bigmodel.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://open.bigmodel.cn/img/icons/favicon-32x32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱 AI (GLM)")]),t("p",{class:"desc"},"智谱 AI 官方开放平台,提供 GLM-4 / GLM-4V(多模态)/ CodeGeeX(代码)等系列模型 API,数学与代码推理能力突出,Function Call 与工具调用完善,企业 RAG / Agent 生态成熟,适合开发知识库问答、Agent 工具链与图文多模态理解应用。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e("",3),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://openrouter.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://openrouter.ai/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"OpenRouter")]),t("p",{class:"desc"},"目前最受开发者欢迎的 LLM API 聚合平台,统一 OpenAI 兼容接口可路由至 300+ 模型(GPT-4o / Claude 3.5 / Gemini / LLaMA / DeepSeek 等),支持按量付费、自动降级 Fallback、流式输出与 Function Call,是切换/对比多家模型的首选。无需管理多个 Key,一个账号解决所有模型接入。"),t("span",{class:"VPBadge tip badge"},"强烈推荐")]),t("a",{href:"https://cloud.siliconflow.cn/me/models",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"SiliconFlow")]),t("p",{class:"desc"},"国内最受开发者欢迎的 LLM API 聚合与推理加速平台,提供 DeepSeek / Qwen / GLM / MiniMax 等主流模型的统一 API,兼容 OpenAI 接口格式,价格业内极低(部分模型免费),国内直连稳定,注册即可快速接入,是国内开发者使用第三方 API 的首选。"),t("span",{class:"VPBadge tip badge"},"国内首选")]),t("a",{href:"https://huggingface.co/inference-api",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://huggingface.co/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Hugging Face")]),t("p",{class:"desc"},"全球最大开源 AI 社区 Hugging Face 提供的推理 API,可直接调用平台上数十万个开源模型(文本/图像/音频/多模态),支持 Serverless 按需推理与 Dedicated Endpoints 专属部署,是开源模型生态的事实标准入口。"),t("span",{class:"VPBadge tip badge"},"开源生态")]),t("a",{href:"https://console.groq.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://groq.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Groq")]),t("p",{class:"desc"},"基于自研 LPU(Language Processing Unit)芯片的超高速推理平台,开源模型(LLaMA 3 / Mixtral / Gemma / DeepSeek 等)推理速度可达普通 GPU 的数十倍,免费套餐慷慨,接口完全兼容 OpenAI SDK,适合对响应延迟极敏感的实时对话、语音助手等场景。"),t("span",{class:"VPBadge tip badge"},"极速推理")]),t("a",{href:"https://www.together.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Together AI")]),t("p",{class:"desc"},"专注开源大模型的高性能推理与微调平台,支持 LLaMA 3 / Mixtral / Qwen / DBRX 等 100+ 开源模型 API 调用,提供 Fine-tuning 训练能力,价格极具竞争力,OpenAI 兼容接口,适合开源模型研发与企业私有化微调场景。"),t("span",{class:"VPBadge tip badge"},"开源+微调")]),t("a",{href:"https://replicate.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Replicate")]),t("p",{class:"desc"},'以"模型市场"形态运营的 AI API 平台,托管数千个开源图像、语音、文本模型(Stable Diffusion / LLaMA / Whisper 等),每个模型有独立 API 端点,按 GPU 计算秒数计费,无需搭建推理基础设施,适合快速调用多模态开源模型做原型验证。'),t("span",{class:"VPBadge tip badge"},"模型市场")]),t("a",{href:"https://302.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"302.AI")]),t("p",{class:"desc"},"国内知名的 AI API 中转与聚合平台,整合 OpenAI / Claude / Gemini 等国际主流模型,提供统一 OpenAI 兼容 API,支持国内直连无需科学上网,按量充值使用,并附带 Web 体验页面,适合个人开发者快速调用海外模型。"),t("span",{class:"VPBadge tip badge"},"国内中转")]),t("a",{href:"https://api2d.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"API2D")]),t("p",{class:"desc"},"专注 OpenAI 系列模型国内中转的 API 代理平台,完全兼容 OpenAI SDK,支持 GPT / Claude / DALL·E / Whisper 等全系模型,国内直连访问稳定,按 Tokens 消耗计费,是需要在国内稳定使用 OpenAI API 的开发者的常用选择。"),t("span",{class:"VPBadge tip badge"},"OpenAI 中转")])])],-1),e("",8)])])}const h=s(i,[["render",d]]);export{m as __pageData,h as default};
diff --git a/assets/ai_overview.md.CFq4IH0J.js b/assets/ai_overview.md.DZgNBOqP.js
similarity index 97%
rename from assets/ai_overview.md.CFq4IH0J.js
rename to assets/ai_overview.md.DZgNBOqP.js
index 4e1c07b2..57ef9ddf 100644
--- a/assets/ai_overview.md.CFq4IH0J.js
+++ b/assets/ai_overview.md.DZgNBOqP.js
@@ -1 +1 @@
-import{A as i}from"./chunks/ArticleCardList.CexqEZR4.js";import{g as a,h as n,i as t,z as r,S as o,l}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const s=[{id:"ai-community",title:"AI 社区活动与实践小项目汇总",icon:"🚀",color:"#f97316",articles:[{title:"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统",url:"/ai/agent/deepresearch-agent",description:"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。"},{title:"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环",url:"/ai/agent/claude-agent-sdk-basic-build",description:"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。"},{title:"一次由 Product Sense 驱动的 Agent 极限实践",url:"/ai/agent/math-bot",description:"本文记录了在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖,并指出 Product Sense 对 Agent 搭建的重要性。"},{title:"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战",url:"/ai-practice/poetry-bot",description:"完记录了诗歌小精灵 Agent 搭建实践,并指出结构化 Prompt 对 Agent 搭建的重要性。"}]},{id:"agent-practice",title:"Agent 原理、组件与构建模式",icon:"📚",color:"#6366f1",articles:[{title:"从提示词到数字员工:AI Agent 深度全景综述",url:"/ai/agent/overview",description:"本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。"},{title:"探寻 Agent 决策中枢:迈向确定性执行的规划范式",url:"/ai/agent/planning-module",description:"本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。"},{title:"构建 Agentic 生态:零散组件化为可持续的工作流",url:"/ai/agent/composition-ai-components",description:"面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。"},{title:"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南",url:"/ai/agent/skills-practice-summary",description:"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。"}]},{id:"ai-resources",title:"AI 相关资源与工具推荐",icon:"🛠️",color:"#06b6d4",articles:[{title:"AI 助手与工作站推荐",url:"/ai/tools-assistant",description:"为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。"},{title:"LLM API 服务平台推荐与选型指南",url:"/ai/llm-api-resources",description:"系统梳理了国际与国内主流 LLM API 服务平台,涵盖官方直连、聚合代理等方案选择,为开发者提供全面的选型参考与接入指南。"},{title:"AI 与数学思维相关书籍推荐",url:"/growth/books#_1-ai-与数学思维",description:"系统整理、汇总了 AI 与数学思维的相关书籍,便于系统学习与理解 AI,从而提升 AI 应用的效率与效果。"}]}],u=JSON.parse('{"title":"AI 学习与实践全景","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","frontmatter":{"title":"AI 学习与实践全景","date":"2026-03-15T16:00:00.000Z","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png","permalink":"/ai/overview","categories":["AI 学习与实践"],"tags":["AI","LLM"]},"headers":[],"relativePath":"ai/overview.md","filePath":"20.AI 学习与实践/00.AI 学习与实践全景一览.md"}'),c={name:"ai/overview.md"},m=Object.assign(c,{setup(A){return(g,e)=>(n(),a("div",null,[e[0]||(e[0]=t("h1",{id:"ai-学习与实践全景",tabindex:"-1"},[o("AI 学习与实践全景 "),t("a",{class:"header-anchor",href:"#ai-学习与实践全景","aria-label":"Permalink to “AI 学习与实践全景”"},"")],-1)),r(i,{categories:l(s)},null,8,["categories"])]))}});export{u as __pageData,m as default};
+import{A as i}from"./chunks/ArticleCardList.CxPNhQDu.js";import{g as a,h as n,i as t,z as r,S as o,l}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const s=[{id:"ai-community",title:"AI 社区活动与实践小项目汇总",icon:"🚀",color:"#f97316",articles:[{title:"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统",url:"/ai/agent/deepresearch-agent",description:"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。"},{title:"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环",url:"/ai/agent/claude-agent-sdk-basic-build",description:"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。"},{title:"一次由 Product Sense 驱动的 Agent 极限实践",url:"/ai/agent/math-bot",description:"本文记录了在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖,并指出 Product Sense 对 Agent 搭建的重要性。"},{title:"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战",url:"/ai-practice/poetry-bot",description:"完记录了诗歌小精灵 Agent 搭建实践,并指出结构化 Prompt 对 Agent 搭建的重要性。"}]},{id:"agent-practice",title:"Agent 原理、组件与构建模式",icon:"📚",color:"#6366f1",articles:[{title:"从提示词到数字员工:AI Agent 深度全景综述",url:"/ai/agent/overview",description:"本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。"},{title:"探寻 Agent 决策中枢:迈向确定性执行的规划范式",url:"/ai/agent/planning-module",description:"本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。"},{title:"构建 Agentic 生态:零散组件化为可持续的工作流",url:"/ai/agent/composition-ai-components",description:"面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。"},{title:"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南",url:"/ai/agent/skills-practice-summary",description:"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。"}]},{id:"ai-resources",title:"AI 相关资源与工具推荐",icon:"🛠️",color:"#06b6d4",articles:[{title:"AI 助手与工作站推荐",url:"/ai/tools-assistant",description:"为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。"},{title:"LLM API 服务平台推荐与选型指南",url:"/ai/llm-api-resources",description:"系统梳理了国际与国内主流 LLM API 服务平台,涵盖官方直连、聚合代理等方案选择,为开发者提供全面的选型参考与接入指南。"},{title:"AI 与数学思维相关书籍推荐",url:"/growth/books#_1-ai-与数学思维",description:"系统整理、汇总了 AI 与数学思维的相关书籍,便于系统学习与理解 AI,从而提升 AI 应用的效率与效果。"}]}],u=JSON.parse('{"title":"AI 学习与实践全景","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","frontmatter":{"title":"AI 学习与实践全景","date":"2026-03-15T16:00:00.000Z","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png","permalink":"/ai/overview","categories":["AI 学习与实践"],"tags":["AI","LLM"]},"headers":[],"relativePath":"ai/overview.md","filePath":"20.AI 学习与实践/00.AI 学习与实践全景一览.md"}'),c={name:"ai/overview.md"},m=Object.assign(c,{setup(A){return(g,e)=>(n(),a("div",null,[e[0]||(e[0]=t("h1",{id:"ai-学习与实践全景",tabindex:"-1"},[o("AI 学习与实践全景 "),t("a",{class:"header-anchor",href:"#ai-学习与实践全景","aria-label":"Permalink to “AI 学习与实践全景”"},"")],-1)),r(i,{categories:l(s)},null,8,["categories"])]))}});export{u as __pageData,m as default};
diff --git a/assets/ai_overview.md.CFq4IH0J.lean.js b/assets/ai_overview.md.DZgNBOqP.lean.js
similarity index 97%
rename from assets/ai_overview.md.CFq4IH0J.lean.js
rename to assets/ai_overview.md.DZgNBOqP.lean.js
index 4e1c07b2..57ef9ddf 100644
--- a/assets/ai_overview.md.CFq4IH0J.lean.js
+++ b/assets/ai_overview.md.DZgNBOqP.lean.js
@@ -1 +1 @@
-import{A as i}from"./chunks/ArticleCardList.CexqEZR4.js";import{g as a,h as n,i as t,z as r,S as o,l}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const s=[{id:"ai-community",title:"AI 社区活动与实践小项目汇总",icon:"🚀",color:"#f97316",articles:[{title:"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统",url:"/ai/agent/deepresearch-agent",description:"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。"},{title:"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环",url:"/ai/agent/claude-agent-sdk-basic-build",description:"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。"},{title:"一次由 Product Sense 驱动的 Agent 极限实践",url:"/ai/agent/math-bot",description:"本文记录了在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖,并指出 Product Sense 对 Agent 搭建的重要性。"},{title:"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战",url:"/ai-practice/poetry-bot",description:"完记录了诗歌小精灵 Agent 搭建实践,并指出结构化 Prompt 对 Agent 搭建的重要性。"}]},{id:"agent-practice",title:"Agent 原理、组件与构建模式",icon:"📚",color:"#6366f1",articles:[{title:"从提示词到数字员工:AI Agent 深度全景综述",url:"/ai/agent/overview",description:"本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。"},{title:"探寻 Agent 决策中枢:迈向确定性执行的规划范式",url:"/ai/agent/planning-module",description:"本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。"},{title:"构建 Agentic 生态:零散组件化为可持续的工作流",url:"/ai/agent/composition-ai-components",description:"面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。"},{title:"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南",url:"/ai/agent/skills-practice-summary",description:"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。"}]},{id:"ai-resources",title:"AI 相关资源与工具推荐",icon:"🛠️",color:"#06b6d4",articles:[{title:"AI 助手与工作站推荐",url:"/ai/tools-assistant",description:"为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。"},{title:"LLM API 服务平台推荐与选型指南",url:"/ai/llm-api-resources",description:"系统梳理了国际与国内主流 LLM API 服务平台,涵盖官方直连、聚合代理等方案选择,为开发者提供全面的选型参考与接入指南。"},{title:"AI 与数学思维相关书籍推荐",url:"/growth/books#_1-ai-与数学思维",description:"系统整理、汇总了 AI 与数学思维的相关书籍,便于系统学习与理解 AI,从而提升 AI 应用的效率与效果。"}]}],u=JSON.parse('{"title":"AI 学习与实践全景","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","frontmatter":{"title":"AI 学习与实践全景","date":"2026-03-15T16:00:00.000Z","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png","permalink":"/ai/overview","categories":["AI 学习与实践"],"tags":["AI","LLM"]},"headers":[],"relativePath":"ai/overview.md","filePath":"20.AI 学习与实践/00.AI 学习与实践全景一览.md"}'),c={name:"ai/overview.md"},m=Object.assign(c,{setup(A){return(g,e)=>(n(),a("div",null,[e[0]||(e[0]=t("h1",{id:"ai-学习与实践全景",tabindex:"-1"},[o("AI 学习与实践全景 "),t("a",{class:"header-anchor",href:"#ai-学习与实践全景","aria-label":"Permalink to “AI 学习与实践全景”"},"")],-1)),r(i,{categories:l(s)},null,8,["categories"])]))}});export{u as __pageData,m as default};
+import{A as i}from"./chunks/ArticleCardList.CxPNhQDu.js";import{g as a,h as n,i as t,z as r,S as o,l}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const s=[{id:"ai-community",title:"AI 社区活动与实践小项目汇总",icon:"🚀",color:"#f97316",articles:[{title:"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统",url:"/ai/agent/deepresearch-agent",description:"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。"},{title:"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环",url:"/ai/agent/claude-agent-sdk-basic-build",description:"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。"},{title:"一次由 Product Sense 驱动的 Agent 极限实践",url:"/ai/agent/math-bot",description:"本文记录了在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖,并指出 Product Sense 对 Agent 搭建的重要性。"},{title:"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战",url:"/ai-practice/poetry-bot",description:"完记录了诗歌小精灵 Agent 搭建实践,并指出结构化 Prompt 对 Agent 搭建的重要性。"}]},{id:"agent-practice",title:"Agent 原理、组件与构建模式",icon:"📚",color:"#6366f1",articles:[{title:"从提示词到数字员工:AI Agent 深度全景综述",url:"/ai/agent/overview",description:"本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。"},{title:"探寻 Agent 决策中枢:迈向确定性执行的规划范式",url:"/ai/agent/planning-module",description:"本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。"},{title:"构建 Agentic 生态:零散组件化为可持续的工作流",url:"/ai/agent/composition-ai-components",description:"面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。"},{title:"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南",url:"/ai/agent/skills-practice-summary",description:"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。"}]},{id:"ai-resources",title:"AI 相关资源与工具推荐",icon:"🛠️",color:"#06b6d4",articles:[{title:"AI 助手与工作站推荐",url:"/ai/tools-assistant",description:"为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。"},{title:"LLM API 服务平台推荐与选型指南",url:"/ai/llm-api-resources",description:"系统梳理了国际与国内主流 LLM API 服务平台,涵盖官方直连、聚合代理等方案选择,为开发者提供全面的选型参考与接入指南。"},{title:"AI 与数学思维相关书籍推荐",url:"/growth/books#_1-ai-与数学思维",description:"系统整理、汇总了 AI 与数学思维的相关书籍,便于系统学习与理解 AI,从而提升 AI 应用的效率与效果。"}]}],u=JSON.parse('{"title":"AI 学习与实践全景","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","frontmatter":{"title":"AI 学习与实践全景","date":"2026-03-15T16:00:00.000Z","description":"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png","permalink":"/ai/overview","categories":["AI 学习与实践"],"tags":["AI","LLM"]},"headers":[],"relativePath":"ai/overview.md","filePath":"20.AI 学习与实践/00.AI 学习与实践全景一览.md"}'),c={name:"ai/overview.md"},m=Object.assign(c,{setup(A){return(g,e)=>(n(),a("div",null,[e[0]||(e[0]=t("h1",{id:"ai-学习与实践全景",tabindex:"-1"},[o("AI 学习与实践全景 "),t("a",{class:"header-anchor",href:"#ai-学习与实践全景","aria-label":"Permalink to “AI 学习与实践全景”"},"")],-1)),r(i,{categories:l(s)},null,8,["categories"])]))}});export{u as __pageData,m as default};
diff --git a/assets/ai_tools-assistant.md.tsJJqQV2.js b/assets/ai_tools-assistant.md.BGC8ydHc.js
similarity index 99%
rename from assets/ai_tools-assistant.md.tsJJqQV2.js
rename to assets/ai_tools-assistant.md.BGC8ydHc.js
index 18ab5ca5..457dc1c6 100644
--- a/assets/ai_tools-assistant.md.tsJJqQV2.js
+++ b/assets/ai_tools-assistant.md.BGC8ydHc.js
@@ -1 +1 @@
-import{_ as s,g as l,h as n,U as e,i as t}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const p=JSON.parse('{"title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","frontmatter":{"date":"2025-11-25T00:52:28.000Z","title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","permalink":"/ai/tools-assistant","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png","categories":["资源推荐"],"tags":["资源推荐","AI","AI 助手","AI 搜索"]},"headers":[],"relativePath":"ai/tools-assistant.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md"}'),i={name:"ai/tools-assistant.md"};function d(o,a,r,c,g,_){return n(),l("div",null,[...a[0]||(a[0]=[e('好用的 AI 助手与工作站推荐
摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。
1. AI 助手
选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。
注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规性和部分定制化场景下更具优势,且访问更为便捷,适合日常使用和本地需求。
1.1. 国外
',5),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://gemini.google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/lamda/images/gemini_sparkle_aurora_33f86dc0c0257da337c63.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini")]),t("p",{class:"desc"},"Gemini 是 Google 旗下的旗舰级 AI 助手,基于先进的 Gemini 大模型,融合智能问答、代码创作、文档分析、网页理解等多种能力,支持多轮对话、图像/文件输入,具备强大的推理与搜索增强功能。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://claude.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Claude")]),t("p",{class:"desc"},"Claude 是 Anthropic 推出的 AI 助手,以安全、诚实、无害为核心理念,擅长长文本理解、代码编写与复杂推理任务"),t("span",{class:"VPBadge tip badge"},"逻辑严谨")]),t("a",{href:"https://chat.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatgpt.com/cdn/assets/favicon-l4nq08hd.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"ChatGPT")]),t("p",{class:"desc"},"OpenAI 是全球领先的人工智能公司,其 ChatGPT 是最知名的对话式 AI,可用于创作、代码、答疑、写作等多种场景"),t("span",{class:"VPBadge tip badge"},"全能助手")]),t("a",{href:"https://grok.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://grok.com/images/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Grok (xAI)")]),t("p",{class:"desc"},"Grok 是由 Elon 的 xAI 团队打造的旗舰 AI 助手,拥有实时联网、幽默对话风格和强大知识推理能力,支持多轮对话、知识问答,并且可无缝集成至 X(原 Twitter),供用户便捷调用。"),t("span",{class:"VPBadge tip badge"},"无缝集成 X")])])],-1),e('助手 🔑 核心能力标签 💡 典型使用场景 ChatGPT 综合能力最全面;GPT-4o 原生多模态(图/文/音/视频);o1 / o3 系列深度推理链;GPTs 工具插件生态最丰富 写作与内容创作 代码生成与调试 复杂多步推理 多模态内容分析 Claude 200K 长上下文,指令遵循精准;输出逻辑严谨、结构清晰,极少幻觉;代码与文档质量高 长文档精读与摘要 复杂任务规划 高质量代码审查 AI Agent 推理后端 Gemini 100 万 Token 超长上下文;原生多模态(图/音频/视频);与 Google Search、Workspace 生态深度整合 实时信息检索 · 跨模态内容理解 · 研究辅助 · Google 办公场景 Grok 实时接入 X(Twitter)数据流,时事感知最新;推理能力强;对话风格开放,限制少 时事热点与舆情追踪 · 开放性话题讨论 · 社媒内容分析
1.2. 国内
',2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax")]),t("p",{class:"desc"},"miniMax 是国内领先的 AI 助手平台,拥有多模态大模型能力,支持对话问答、代码生成、文档处理、知识检索等丰富场景,聚焦自然语言理解与智能创作。界面体验优秀,生态开放,适合作为通用 AI 辅助工具使用。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://chatglm.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatglm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱清言")]),t("p",{class:"desc"},"智谱清言是由智谱AI推出的国产大模型应用平台,基于GLM系列大模型,支持对话问答、知识检索、代码生成、企业知识库等多场景,文本理解与推理能力优秀,界面简洁易用。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://kimi.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi")]),t("p",{class:"desc"},"Kimi 是月之暗面(Moonshot AI)推出的智能助手,支持超长上下文对话、文件分析、智能问答、代码生成等多种能力,具备强大的中文语言理解和推理能力,界面友好,适合多场景使用。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"deepseek")]),t("p",{class:"desc"},"DeepSeek 是国内技术领先的大模型平台,提供通用对话、AI 代码助手、文档处理、知识检索等服务,擅长代码生成、数学与逻辑推理,支持本地部署与企业级应用,性价比高、研发活跃。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.doubao.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"豆包 (Doubao)")]),t("p",{class:"desc"},"字节跳动推出的新一代大模型“豆包”,主打轻量高效,专注智能问答、写作助手、内容总结、代码生成等场景,界面清爽体验友好,并不断开放使用与 API 能力。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.qianwen.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"通义千问 (Qwen)")]),t("p",{class:"desc"},"阿里云推出的通义千问大模型(Qwen),在中文理解与生成、代码和多模态等方面表现出色,适合内容创作、对话助手、企业知识库等多样业务场景,支持超长上下文和插件生态。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yiyan.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://eb-static.cdn.bcebos.com/logo/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"文心一言 (ERNIE Bot)")]),t("p",{class:"desc"},"百度推出的文心一言(ERNIE Bot)大模型,具备强大的中文语义理解、信息检索、多轮对话与代码能力,适用于搜索问答、智能创作、企业接入等场景,拥有丰富的 API 与生态支持。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yuanbao.tencent.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://static.yuanbao.tencent.com/m/yuanbao-web/favicon@32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"元宝 (Hunyuan)")]),t("p",{class:"desc"},"腾讯推出的元宝(Hunyuan)大模型助手,专注于中文理解与生成,支持对话问答、内容创作、代码、搜索、数据分析等多场景,界面简洁功能丰富,具备企业级接入能力。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e('助手 🔑 核心能力标签 💡 典型使用场景 miniMax 100 万 Token 超长上下文(国内领先);文本 / 语音 / 视频多模态全覆盖;Hailuo AI 视频生成、Talkie 角色对话出海竞争力强;API 开放度高 超长文档理解 · AI 视频生成 · 语音合成与克隆 · 角色扮演 / AI 陪伴 · 多模态应用开发 Kimi 100 万 Token 中文长上下文;多格式文件解析(PDF / Word / 代码);内置联网检索与深度研究(Research)模式 长文档阅读与结构化提炼 · 学术论文 / 法律合同分析 · 多文件对比 · 深度研究报告 智谱清言 (GLM) GLM-4 数学与代码推理突出;支持 Function Call 工具调用;多模态(GLM-4V);企业 RAG / Agent 生态完善 企业知识库问答与 RAG · 代码与数学推理 · Agent 工具链开发 · 图文多模态理解 DeepSeek 全量权重开源可本地部署;R1 具备类 o1 慢思考推理链,数学与逻辑能力顶尖;API 价格极低性价比高 代码生成与调试 · 数学 / 逻辑推理 · 学术研究 · 低成本私有化部署 通义千问 (Qwen) Qwen2.5 涵盖文本 / 代码(Qwen-Coder)/ 数学 / 多模态(Qwen-VL)子模型;与钉钉、阿里云工具链深度集成;部分开源 中文内容创作 · 代码与数学 · 钉钉 / 阿里云生态集成 · 多模态图文生成 豆包 (Doubao) 响应速度快,日常体验流畅;与抖音 / 飞书 / 剪映生态打通;具备联网搜索与图像理解;API 价格友好 日常问答与内容摘要 · 创意写作辅助 · 短视频内容策划 · 飞书 / 抖音场景集成 文心一言 (ERNIE) 与百度搜索深度融合,联网实时性强;千帆平台支持 Fine-tuning 与私有化部署;中文知识图谱积累深厚 搜索增强实时问答 · 中文专业内容生成 · 企业知识库 · Fine-tuning 定制业务模型 腾讯元宝 (Hunyuan) 融合腾讯搜索与知识图谱;无缝对接微信 / 企业微信 / 腾讯文档;多轮对话与文档分析稳定;企业合规有保障 企业微信客服 / 智能助理 · 办公协作场景 · 文档分析 · 腾讯生态集成
2. AI 学习与内容创作工作站
2.1 关键点说明
这类工具的本质是将 AI 嵌入「学习 — 整理 — 创作」全流程,我们在选择时需要关注三个维度:
- 输入能力: 能否导入 PDF / 网页 / 音视频等多种资料
- 知识关联: AI 能否跨文档建立联系、自动标签与归纳
- 输出质量: 总结 / 提问 / 大纲 / 演示文稿的实用性
2.2 选择建议
选择建议:深度学习与知识整合 → 强烈推荐 NotebookLM / YouMind(多源资料导入 + AI 总结 + 音频概述,学习神器);个人笔记与知识库 → Notion AI;团队办公协作 → 飞书智能创作 / 飞书妙记;需要制作演示文稿 → Gamma;中文轻量知识管理 → FlowUs;流程文档与表格自动化 → Coda AI。
',7),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://notebooklm.google/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://notebooklm.google/_/static/branding/v4/light_mode/favicon/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"NotebookLM")]),t("p",{class:"desc"},'Google 出品的 AI 学习利器,可导入 PDF、网页、YouTube 视频、音频、Google Docs 等多种资料,AI 基于 Gemini 自动生成摘要、FAQ、学习指南、时间线和思维导图。独有的 Audio Overview(音频概述)功能可将任意资料转为两人播客式对话,实现"听着学"。堪称当下最强的个人学习与知识整合工具,完全免费。'),t("span",{class:"VPBadge tip badge"},"强力推荐")]),t("a",{href:"https://youmind.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://marketing-assets.youmind.com/logo-512.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"YouMind")]),t("p",{class:"desc"},"个性化 AI 学习与创作智能体,由国内前端领域知名开发者创业打造。内置浏览器插件可一键抓取网页、文章和视频内容,AI 自动整理生成知识卡片与图谱。支持多模型切换,兼顾碎片信息收集与深度创作,个人知识管理的得力助手。"),t("span",{class:"VPBadge tip badge"},"学习+创作")]),t("a",{href:"https://www.feishu.cn/product/feishuai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://p1-hera.feishucdn.com/tos-cn-i-jbbdkfciu3/1ec7129d900e442d8501d810efdaa369~tplv-jbbdkfciu3-image:0:0.image",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"飞书智能创作")]),t("p",{class:"desc"},"飞书 Docs 内置 AI 写作助手,支持文档自动生成、会议纪要智能整理、大纲生成与头脑风暴,与飞书日历、任务和项目深度联动,是企业/团队内容协作、会议知识总结与项目文档编写的首选工具。"),t("span",{class:"VPBadge tip badge"},"团队协作")]),t("a",{href:"https://www.notion.com/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Notion AI")]),t("p",{class:"desc"},"全球最受欢迎的笔记与协作平台内置 AI 助手,支持文档自动生成、内容总结、多语言翻译与润色、头脑风暴和自动分类归档,并与 Notion 数据库、看板、Wiki 无缝联动,适合个人知识库与团队项目管理中的内容整理与二次创作。"),t("span",{class:"VPBadge tip badge"},"笔记+协作")]),t("a",{href:"https://gamma.app/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Gamma")]),t("p",{class:"desc"},"新一代 AI 演示文稿与内容创作平台,输入一句话主题或导入笔记/大纲即可自动生成精美 PPT、网页或文档,AI 负责排版、配图与动效,支持实时协作和嵌入式分享。从知识输出到视觉呈现,一步到位。"),t("span",{class:"VPBadge tip badge"},"AI 演示")]),t("a",{href:"https://flowus.cn/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://cdn2.flowus.cn/assets/_next/static/media/favicon.0c45c594.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"FlowUs")]),t("p",{class:"desc"},"国内新一代知识管理与协作平台,类 Notion 体验但中文本地化更优,内置 AI 辅助写作 / 总结 / 翻译功能,支持多维表格、看板和文档协作,智能化解决工作、学习、生活中的各项任务。"),t("span",{class:"VPBadge tip badge"},"国内知识库")]),t("a",{href:"https://coda.io/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Coda AI")]),t("p",{class:"desc"},'一体化智能文档平台,融合 AI 文档生成、表格分析、内容自动填写与总结,强大的公式引擎与自动化工作流引擎让内容真正"活"起来,适合流程梳理、数据驱动型团队协作与知识管理场景。'),t("span",{class:"VPBadge tip badge"},"内容自动化")]),t("a",{href:"https://www.feishu.cn/minutes",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"飞书妙记")]),t("p",{class:"desc"},"飞书旗下会议智能转录与总结服务,支持中英双语实时语音转录、AI 自动摘要与知识点抽取,可直接生成结构化笔记与任务清单,适合在线学习、课程复习、会议实时记录与培训内容归档。"),t("span",{class:"VPBadge note badge"},"语音转录")])])],-1),e('工具 核心能力标签 典型使用场景 多源导入 AI 总结 多人协作 NotebookLM 多源知识融合;AI 自动总结 / FAQ / 学习指南 / 时间线 / 思维导图;Audio Overview 音频概述(可将资料转为播客式对话);Gemini3 模型驱动 论文精读 · 课程笔记 · 调研资料汇总 · 播客式复习 · 知识卡片管理 ✅ ✅ ❌ YouMind AI 学习与创作智能体;浏览器插件一键抓取;自动整理与知识图谱;多模型可选 碎片信息收集 · 个人知识库 · 灵感捕捉 · 内容创作辅助 ✅ ✅ ❌ Notion AI 笔记内嵌 AI 助手;文档生成 / 总结 / 翻译 / 润色;数据库 + 看板 + Wiki 一体化;模板生态丰富 个人知识库 · 团队项目管理 · 内容整理与二次创作 · Wiki 文档协作 ✅ ✅ ✅ 飞书智能创作 飞书 Docs 内置 AI 写作;会议纪要自动整理;头脑风暴与大纲生成;与飞书日历 / 任务深度联动 企业文档编写 · 会议知识总结 · 团队头脑风暴 · OKR / 周报 ✅ ✅ ✅ Gamma 一句话生成精美演示文稿 / 网页 / 文档;自动排版与配图;支持导入大纲或笔记一键转 PPT 项目汇报 · 教学课件 · 产品演示 · 知识分享 ✅ ✅ ✅ FlowUs 中文友好的 Notion 替代品;AI 辅助写作 / 总结 / 翻译;支持多维表格与看板 个人笔记 · 团队知识库 · 项目管理 · 中文内容协作 ✅ ✅ ✅ Coda AI 文档 + 表格 + 自动化三合一;AI 自动填写与内容总结;强大的公式与流程引擎 流程梳理 · 数据驱动文档 · 团队知识管理 · 内容自动化 ✅ ✅ ✅ 飞书妙记 中英双语实时语音转录;AI 自动摘要与知识点提取;生成笔记与任务清单 会议实时记录 · 在线课程复习 · 播客转文字 · 培训内容归档 ❌ ✅ ✅
📌 上手指引
- 第一步试 NotebookLM:打开 notebooklm.google,创建一个笔记本,导入你手头的 PDF / 网页链接 / YouTube 视频,几秒钟即可获得 AI 总结、FAQ 和学习指南。别忘了点 Audio Overview 生成"播客式"音频——通勤路上听知识,效率翻倍。
- 碎片知识收集:装好 YouMind 浏览器插件,日常刷到好文章/帖子一键保存,AI 自动打标签建图谱,告别"收藏夹吃灰"。
- 知识体系搭建:用 Notion AI 或 FlowUs 建个人 Wiki,把 NotebookLM 的总结、YouMind 的碎片、自己的思考沉淀到统一知识库,AI 辅助润色与二次加工。
- 团队协作场景:会议用 飞书妙记 实时转录 → 飞书智能创作生成纪要 → Notion / 飞书 Docs 归档,形成团队知识流水线。
- 知识输出与分享:需要做汇报或分享时,把笔记丢进 Gamma,一键生成精美演示文稿,省去排版烦恼。
3. AI 搜索
3.1 关键点说明
AI 搜索 ≠ 普通搜索,它会先用大模型理解意图、实时抓取多个网页,再综合归纳成"带引用的答案",省去你逐条点链接的过程。判断一款 AI 搜索工具的关键维度:
- 引用可溯源性:答案是否附有来源链接
- 实时性:能否检索今日新闻
- 深度研究能力:是否支持多轮追问与自动报告生成
3.2 选择建议
选择建议:需要实时、带引用的英文学术/技术检索 → 优先 Perplexity;日常中文搜索想要直接答案 → 秘塔搜索 / 夸克;需要深度专题报告 → Perplexity Deep Research / 秘塔深度研究。
',8),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.perplexity.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Perplexity")]),t("p",{class:"desc"},"目前最受研究者和开发者青睐的 AI 搜索引擎,每条答案均附带来源链接,支持学术、新闻、代码等垂直搜索模式;Pro 版提供 Deep Research(深度研究报告)能力,可自动规划多轮检索并生成结构化报告,是替代传统搜索引擎的首选工具。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://google.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Google AI Overviews (SGE)")]),t("p",{class:"desc"},"Google 在搜索结果顶部嵌入的 AI 摘要区域(Search Generative Experience),由 Gemini 驱动,在保留传统蓝链的同时提供综合答案,无需切换产品即可体验 AI 搜索,已在 Google Search 主站全量上线。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://metaso.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://metaso.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"秘塔搜索 (Metaso)")]),t("p",{class:"desc"},'国内 AI 搜索体验最佳之一,界面零广告,答案以"大纲 + 来源引用"结构呈现,支持简洁/深入/研究三种检索深度;"深度研究"模式可自动生成多章节专题报告,适合学术调研、竞品分析、行业洞察等场景。'),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.baidu.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"百度 AI 搜索")]),t("p",{class:"desc"},"百度在传统搜索基础上接入文心大模型,提供 AI 生成摘要答案,同时保留原有搜索结果兜底,与百度地图、百度百科、百度文库深度联动,是国内互联网资源覆盖最广的 AI 搜索入口,适合中文日常搜索需求。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://ai.quark.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://quark.sm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"夸克 AI 搜索")]),t("p",{class:"desc"},"阿里旗下夸克浏览器内置的 AI 搜索,融合通义千问大模型,支持直接问答、文件解析、图片识别和网盘资源检索;移动端体验流畅,是国内日常使用场景下综合体验较好的 AI 搜索 App。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e('工具 核心能力标签 典型使用场景 Perplexity AI AI 答案引用透明;学术/新闻/代码垂直搜索;Deep Research 自动多轮报告。 英文技术文档检索 · 学术调研 · 竞品速览 · 深度专题报告 Google AI Overviews 嵌入 Google 主搜索页;Gemini 驱动;保留蓝链兜底;覆盖范围最广。
深入解读参考:Complete Guide to AI Overview Optimization 2025 无需切换产品的日常搜索 · 快速事实核查 · 概念解释 秘塔搜索 零广告;大纲结构答案;深度研究报告;简洁/深入/研究三档。 中文学术调研 · 行业洞察报告 · 政策/法规检索 · 无干扰信息获取 百度 AI 搜索 文心大模型;中文资源覆盖最广;百科/地图/文库联动;传统搜索兜底 中文日常搜索 · 本地生活服务 · 百科知识查询 · 国内政策法规 夸克 AI 搜索 通义千问驱动;文件/图片解析;网盘资源检索;移动端体验佳 手机端日常问答 · 文件快速解析 · 网盘资源查找 · 阿里生态联动
📌 上手指引
- 新手入门:先用 秘塔搜索 或 Perplexity,直接把你以前用搜索引擎搜的问题原文粘进去,对比一下答案质量与来源引用。
- 追问技巧:AI 搜索支持多轮对话,搜到初步答案后,追问「能展开说说 X 部分吗?」「有没有反面案例?」效果远好于新开一次搜索。
- 深度研究:遇到需要写报告或做调研的场景,优先用 Perplexity Deep Research(英文)或 秘塔深度研究(中文),输入一句话主题即可自动生成带引用的多章节报告。
- 引用核查:AI 搜索会有"幻觉"风险,养成点击答案中的来源链接核实关键数据的习惯,尤其是数字、时间、人名等关键事实。
- 场景匹配:技术文档/代码 → Perplexity(学术模式);中文无广告信息获取 → 秘塔;手机端快捷 → 夸克。
',2)])])}const h=s(i,[["render",d]]);export{p as __pageData,h as default};
+import{_ as s,g as l,h as n,U as e,i as t}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const p=JSON.parse('{"title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","frontmatter":{"date":"2025-11-25T00:52:28.000Z","title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","permalink":"/ai/tools-assistant","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png","categories":["资源推荐"],"tags":["资源推荐","AI","AI 助手","AI 搜索"]},"headers":[],"relativePath":"ai/tools-assistant.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md"}'),i={name:"ai/tools-assistant.md"};function d(o,a,r,c,g,_){return n(),l("div",null,[...a[0]||(a[0]=[e('好用的 AI 助手与工作站推荐
摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。
1. AI 助手
选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。
注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规性和部分定制化场景下更具优势,且访问更为便捷,适合日常使用和本地需求。
1.1. 国外
',5),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://gemini.google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/lamda/images/gemini_sparkle_aurora_33f86dc0c0257da337c63.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini")]),t("p",{class:"desc"},"Gemini 是 Google 旗下的旗舰级 AI 助手,基于先进的 Gemini 大模型,融合智能问答、代码创作、文档分析、网页理解等多种能力,支持多轮对话、图像/文件输入,具备强大的推理与搜索增强功能。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://claude.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Claude")]),t("p",{class:"desc"},"Claude 是 Anthropic 推出的 AI 助手,以安全、诚实、无害为核心理念,擅长长文本理解、代码编写与复杂推理任务"),t("span",{class:"VPBadge tip badge"},"逻辑严谨")]),t("a",{href:"https://chat.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatgpt.com/cdn/assets/favicon-l4nq08hd.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"ChatGPT")]),t("p",{class:"desc"},"OpenAI 是全球领先的人工智能公司,其 ChatGPT 是最知名的对话式 AI,可用于创作、代码、答疑、写作等多种场景"),t("span",{class:"VPBadge tip badge"},"全能助手")]),t("a",{href:"https://grok.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://grok.com/images/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Grok (xAI)")]),t("p",{class:"desc"},"Grok 是由 Elon 的 xAI 团队打造的旗舰 AI 助手,拥有实时联网、幽默对话风格和强大知识推理能力,支持多轮对话、知识问答,并且可无缝集成至 X(原 Twitter),供用户便捷调用。"),t("span",{class:"VPBadge tip badge"},"无缝集成 X")])])],-1),e('助手 🔑 核心能力标签 💡 典型使用场景 ChatGPT 综合能力最全面;GPT-4o 原生多模态(图/文/音/视频);o1 / o3 系列深度推理链;GPTs 工具插件生态最丰富 写作与内容创作 代码生成与调试 复杂多步推理 多模态内容分析 Claude 200K 长上下文,指令遵循精准;输出逻辑严谨、结构清晰,极少幻觉;代码与文档质量高 长文档精读与摘要 复杂任务规划 高质量代码审查 AI Agent 推理后端 Gemini 100 万 Token 超长上下文;原生多模态(图/音频/视频);与 Google Search、Workspace 生态深度整合 实时信息检索 · 跨模态内容理解 · 研究辅助 · Google 办公场景 Grok 实时接入 X(Twitter)数据流,时事感知最新;推理能力强;对话风格开放,限制少 时事热点与舆情追踪 · 开放性话题讨论 · 社媒内容分析
1.2. 国内
',2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax")]),t("p",{class:"desc"},"miniMax 是国内领先的 AI 助手平台,拥有多模态大模型能力,支持对话问答、代码生成、文档处理、知识检索等丰富场景,聚焦自然语言理解与智能创作。界面体验优秀,生态开放,适合作为通用 AI 辅助工具使用。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://chatglm.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatglm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱清言")]),t("p",{class:"desc"},"智谱清言是由智谱AI推出的国产大模型应用平台,基于GLM系列大模型,支持对话问答、知识检索、代码生成、企业知识库等多场景,文本理解与推理能力优秀,界面简洁易用。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://kimi.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi")]),t("p",{class:"desc"},"Kimi 是月之暗面(Moonshot AI)推出的智能助手,支持超长上下文对话、文件分析、智能问答、代码生成等多种能力,具备强大的中文语言理解和推理能力,界面友好,适合多场景使用。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"deepseek")]),t("p",{class:"desc"},"DeepSeek 是国内技术领先的大模型平台,提供通用对话、AI 代码助手、文档处理、知识检索等服务,擅长代码生成、数学与逻辑推理,支持本地部署与企业级应用,性价比高、研发活跃。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.doubao.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"豆包 (Doubao)")]),t("p",{class:"desc"},"字节跳动推出的新一代大模型“豆包”,主打轻量高效,专注智能问答、写作助手、内容总结、代码生成等场景,界面清爽体验友好,并不断开放使用与 API 能力。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.qianwen.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"通义千问 (Qwen)")]),t("p",{class:"desc"},"阿里云推出的通义千问大模型(Qwen),在中文理解与生成、代码和多模态等方面表现出色,适合内容创作、对话助手、企业知识库等多样业务场景,支持超长上下文和插件生态。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yiyan.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://eb-static.cdn.bcebos.com/logo/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"文心一言 (ERNIE Bot)")]),t("p",{class:"desc"},"百度推出的文心一言(ERNIE Bot)大模型,具备强大的中文语义理解、信息检索、多轮对话与代码能力,适用于搜索问答、智能创作、企业接入等场景,拥有丰富的 API 与生态支持。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yuanbao.tencent.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://static.yuanbao.tencent.com/m/yuanbao-web/favicon@32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"元宝 (Hunyuan)")]),t("p",{class:"desc"},"腾讯推出的元宝(Hunyuan)大模型助手,专注于中文理解与生成,支持对话问答、内容创作、代码、搜索、数据分析等多场景,界面简洁功能丰富,具备企业级接入能力。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e('助手 🔑 核心能力标签 💡 典型使用场景 miniMax 100 万 Token 超长上下文(国内领先);文本 / 语音 / 视频多模态全覆盖;Hailuo AI 视频生成、Talkie 角色对话出海竞争力强;API 开放度高 超长文档理解 · AI 视频生成 · 语音合成与克隆 · 角色扮演 / AI 陪伴 · 多模态应用开发 Kimi 100 万 Token 中文长上下文;多格式文件解析(PDF / Word / 代码);内置联网检索与深度研究(Research)模式 长文档阅读与结构化提炼 · 学术论文 / 法律合同分析 · 多文件对比 · 深度研究报告 智谱清言 (GLM) GLM-4 数学与代码推理突出;支持 Function Call 工具调用;多模态(GLM-4V);企业 RAG / Agent 生态完善 企业知识库问答与 RAG · 代码与数学推理 · Agent 工具链开发 · 图文多模态理解 DeepSeek 全量权重开源可本地部署;R1 具备类 o1 慢思考推理链,数学与逻辑能力顶尖;API 价格极低性价比高 代码生成与调试 · 数学 / 逻辑推理 · 学术研究 · 低成本私有化部署 通义千问 (Qwen) Qwen2.5 涵盖文本 / 代码(Qwen-Coder)/ 数学 / 多模态(Qwen-VL)子模型;与钉钉、阿里云工具链深度集成;部分开源 中文内容创作 · 代码与数学 · 钉钉 / 阿里云生态集成 · 多模态图文生成 豆包 (Doubao) 响应速度快,日常体验流畅;与抖音 / 飞书 / 剪映生态打通;具备联网搜索与图像理解;API 价格友好 日常问答与内容摘要 · 创意写作辅助 · 短视频内容策划 · 飞书 / 抖音场景集成 文心一言 (ERNIE) 与百度搜索深度融合,联网实时性强;千帆平台支持 Fine-tuning 与私有化部署;中文知识图谱积累深厚 搜索增强实时问答 · 中文专业内容生成 · 企业知识库 · Fine-tuning 定制业务模型 腾讯元宝 (Hunyuan) 融合腾讯搜索与知识图谱;无缝对接微信 / 企业微信 / 腾讯文档;多轮对话与文档分析稳定;企业合规有保障 企业微信客服 / 智能助理 · 办公协作场景 · 文档分析 · 腾讯生态集成
2. AI 学习与内容创作工作站
2.1 关键点说明
这类工具的本质是将 AI 嵌入「学习 — 整理 — 创作」全流程,我们在选择时需要关注三个维度:
- 输入能力: 能否导入 PDF / 网页 / 音视频等多种资料
- 知识关联: AI 能否跨文档建立联系、自动标签与归纳
- 输出质量: 总结 / 提问 / 大纲 / 演示文稿的实用性
2.2 选择建议
选择建议:深度学习与知识整合 → 强烈推荐 NotebookLM / YouMind(多源资料导入 + AI 总结 + 音频概述,学习神器);个人笔记与知识库 → Notion AI;团队办公协作 → 飞书智能创作 / 飞书妙记;需要制作演示文稿 → Gamma;中文轻量知识管理 → FlowUs;流程文档与表格自动化 → Coda AI。
',7),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://notebooklm.google/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://notebooklm.google/_/static/branding/v4/light_mode/favicon/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"NotebookLM")]),t("p",{class:"desc"},'Google 出品的 AI 学习利器,可导入 PDF、网页、YouTube 视频、音频、Google Docs 等多种资料,AI 基于 Gemini 自动生成摘要、FAQ、学习指南、时间线和思维导图。独有的 Audio Overview(音频概述)功能可将任意资料转为两人播客式对话,实现"听着学"。堪称当下最强的个人学习与知识整合工具,完全免费。'),t("span",{class:"VPBadge tip badge"},"强力推荐")]),t("a",{href:"https://youmind.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://marketing-assets.youmind.com/logo-512.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"YouMind")]),t("p",{class:"desc"},"个性化 AI 学习与创作智能体,由国内前端领域知名开发者创业打造。内置浏览器插件可一键抓取网页、文章和视频内容,AI 自动整理生成知识卡片与图谱。支持多模型切换,兼顾碎片信息收集与深度创作,个人知识管理的得力助手。"),t("span",{class:"VPBadge tip badge"},"学习+创作")]),t("a",{href:"https://www.feishu.cn/product/feishuai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://p1-hera.feishucdn.com/tos-cn-i-jbbdkfciu3/1ec7129d900e442d8501d810efdaa369~tplv-jbbdkfciu3-image:0:0.image",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"飞书智能创作")]),t("p",{class:"desc"},"飞书 Docs 内置 AI 写作助手,支持文档自动生成、会议纪要智能整理、大纲生成与头脑风暴,与飞书日历、任务和项目深度联动,是企业/团队内容协作、会议知识总结与项目文档编写的首选工具。"),t("span",{class:"VPBadge tip badge"},"团队协作")]),t("a",{href:"https://www.notion.com/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Notion AI")]),t("p",{class:"desc"},"全球最受欢迎的笔记与协作平台内置 AI 助手,支持文档自动生成、内容总结、多语言翻译与润色、头脑风暴和自动分类归档,并与 Notion 数据库、看板、Wiki 无缝联动,适合个人知识库与团队项目管理中的内容整理与二次创作。"),t("span",{class:"VPBadge tip badge"},"笔记+协作")]),t("a",{href:"https://gamma.app/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Gamma")]),t("p",{class:"desc"},"新一代 AI 演示文稿与内容创作平台,输入一句话主题或导入笔记/大纲即可自动生成精美 PPT、网页或文档,AI 负责排版、配图与动效,支持实时协作和嵌入式分享。从知识输出到视觉呈现,一步到位。"),t("span",{class:"VPBadge tip badge"},"AI 演示")]),t("a",{href:"https://flowus.cn/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://cdn2.flowus.cn/assets/_next/static/media/favicon.0c45c594.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"FlowUs")]),t("p",{class:"desc"},"国内新一代知识管理与协作平台,类 Notion 体验但中文本地化更优,内置 AI 辅助写作 / 总结 / 翻译功能,支持多维表格、看板和文档协作,智能化解决工作、学习、生活中的各项任务。"),t("span",{class:"VPBadge tip badge"},"国内知识库")]),t("a",{href:"https://coda.io/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Coda AI")]),t("p",{class:"desc"},'一体化智能文档平台,融合 AI 文档生成、表格分析、内容自动填写与总结,强大的公式引擎与自动化工作流引擎让内容真正"活"起来,适合流程梳理、数据驱动型团队协作与知识管理场景。'),t("span",{class:"VPBadge tip badge"},"内容自动化")]),t("a",{href:"https://www.feishu.cn/minutes",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"飞书妙记")]),t("p",{class:"desc"},"飞书旗下会议智能转录与总结服务,支持中英双语实时语音转录、AI 自动摘要与知识点抽取,可直接生成结构化笔记与任务清单,适合在线学习、课程复习、会议实时记录与培训内容归档。"),t("span",{class:"VPBadge note badge"},"语音转录")])])],-1),e('工具 核心能力标签 典型使用场景 多源导入 AI 总结 多人协作 NotebookLM 多源知识融合;AI 自动总结 / FAQ / 学习指南 / 时间线 / 思维导图;Audio Overview 音频概述(可将资料转为播客式对话);Gemini3 模型驱动 论文精读 · 课程笔记 · 调研资料汇总 · 播客式复习 · 知识卡片管理 ✅ ✅ ❌ YouMind AI 学习与创作智能体;浏览器插件一键抓取;自动整理与知识图谱;多模型可选 碎片信息收集 · 个人知识库 · 灵感捕捉 · 内容创作辅助 ✅ ✅ ❌ Notion AI 笔记内嵌 AI 助手;文档生成 / 总结 / 翻译 / 润色;数据库 + 看板 + Wiki 一体化;模板生态丰富 个人知识库 · 团队项目管理 · 内容整理与二次创作 · Wiki 文档协作 ✅ ✅ ✅ 飞书智能创作 飞书 Docs 内置 AI 写作;会议纪要自动整理;头脑风暴与大纲生成;与飞书日历 / 任务深度联动 企业文档编写 · 会议知识总结 · 团队头脑风暴 · OKR / 周报 ✅ ✅ ✅ Gamma 一句话生成精美演示文稿 / 网页 / 文档;自动排版与配图;支持导入大纲或笔记一键转 PPT 项目汇报 · 教学课件 · 产品演示 · 知识分享 ✅ ✅ ✅ FlowUs 中文友好的 Notion 替代品;AI 辅助写作 / 总结 / 翻译;支持多维表格与看板 个人笔记 · 团队知识库 · 项目管理 · 中文内容协作 ✅ ✅ ✅ Coda AI 文档 + 表格 + 自动化三合一;AI 自动填写与内容总结;强大的公式与流程引擎 流程梳理 · 数据驱动文档 · 团队知识管理 · 内容自动化 ✅ ✅ ✅ 飞书妙记 中英双语实时语音转录;AI 自动摘要与知识点提取;生成笔记与任务清单 会议实时记录 · 在线课程复习 · 播客转文字 · 培训内容归档 ❌ ✅ ✅
📌 上手指引
- 第一步试 NotebookLM:打开 notebooklm.google,创建一个笔记本,导入你手头的 PDF / 网页链接 / YouTube 视频,几秒钟即可获得 AI 总结、FAQ 和学习指南。别忘了点 Audio Overview 生成"播客式"音频——通勤路上听知识,效率翻倍。
- 碎片知识收集:装好 YouMind 浏览器插件,日常刷到好文章/帖子一键保存,AI 自动打标签建图谱,告别"收藏夹吃灰"。
- 知识体系搭建:用 Notion AI 或 FlowUs 建个人 Wiki,把 NotebookLM 的总结、YouMind 的碎片、自己的思考沉淀到统一知识库,AI 辅助润色与二次加工。
- 团队协作场景:会议用 飞书妙记 实时转录 → 飞书智能创作生成纪要 → Notion / 飞书 Docs 归档,形成团队知识流水线。
- 知识输出与分享:需要做汇报或分享时,把笔记丢进 Gamma,一键生成精美演示文稿,省去排版烦恼。
3. AI 搜索
3.1 关键点说明
AI 搜索 ≠ 普通搜索,它会先用大模型理解意图、实时抓取多个网页,再综合归纳成"带引用的答案",省去你逐条点链接的过程。判断一款 AI 搜索工具的关键维度:
- 引用可溯源性:答案是否附有来源链接
- 实时性:能否检索今日新闻
- 深度研究能力:是否支持多轮追问与自动报告生成
3.2 选择建议
选择建议:需要实时、带引用的英文学术/技术检索 → 优先 Perplexity;日常中文搜索想要直接答案 → 秘塔搜索 / 夸克;需要深度专题报告 → Perplexity Deep Research / 秘塔深度研究。
',8),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.perplexity.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Perplexity")]),t("p",{class:"desc"},"目前最受研究者和开发者青睐的 AI 搜索引擎,每条答案均附带来源链接,支持学术、新闻、代码等垂直搜索模式;Pro 版提供 Deep Research(深度研究报告)能力,可自动规划多轮检索并生成结构化报告,是替代传统搜索引擎的首选工具。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://google.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Google AI Overviews (SGE)")]),t("p",{class:"desc"},"Google 在搜索结果顶部嵌入的 AI 摘要区域(Search Generative Experience),由 Gemini 驱动,在保留传统蓝链的同时提供综合答案,无需切换产品即可体验 AI 搜索,已在 Google Search 主站全量上线。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://metaso.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://metaso.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"秘塔搜索 (Metaso)")]),t("p",{class:"desc"},'国内 AI 搜索体验最佳之一,界面零广告,答案以"大纲 + 来源引用"结构呈现,支持简洁/深入/研究三种检索深度;"深度研究"模式可自动生成多章节专题报告,适合学术调研、竞品分析、行业洞察等场景。'),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.baidu.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"百度 AI 搜索")]),t("p",{class:"desc"},"百度在传统搜索基础上接入文心大模型,提供 AI 生成摘要答案,同时保留原有搜索结果兜底,与百度地图、百度百科、百度文库深度联动,是国内互联网资源覆盖最广的 AI 搜索入口,适合中文日常搜索需求。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://ai.quark.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://quark.sm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"夸克 AI 搜索")]),t("p",{class:"desc"},"阿里旗下夸克浏览器内置的 AI 搜索,融合通义千问大模型,支持直接问答、文件解析、图片识别和网盘资源检索;移动端体验流畅,是国内日常使用场景下综合体验较好的 AI 搜索 App。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e('工具 核心能力标签 典型使用场景 Perplexity AI AI 答案引用透明;学术/新闻/代码垂直搜索;Deep Research 自动多轮报告。 英文技术文档检索 · 学术调研 · 竞品速览 · 深度专题报告 Google AI Overviews 嵌入 Google 主搜索页;Gemini 驱动;保留蓝链兜底;覆盖范围最广。
深入解读参考:Complete Guide to AI Overview Optimization 2025 无需切换产品的日常搜索 · 快速事实核查 · 概念解释 秘塔搜索 零广告;大纲结构答案;深度研究报告;简洁/深入/研究三档。 中文学术调研 · 行业洞察报告 · 政策/法规检索 · 无干扰信息获取 百度 AI 搜索 文心大模型;中文资源覆盖最广;百科/地图/文库联动;传统搜索兜底 中文日常搜索 · 本地生活服务 · 百科知识查询 · 国内政策法规 夸克 AI 搜索 通义千问驱动;文件/图片解析;网盘资源检索;移动端体验佳 手机端日常问答 · 文件快速解析 · 网盘资源查找 · 阿里生态联动
📌 上手指引
- 新手入门:先用 秘塔搜索 或 Perplexity,直接把你以前用搜索引擎搜的问题原文粘进去,对比一下答案质量与来源引用。
- 追问技巧:AI 搜索支持多轮对话,搜到初步答案后,追问「能展开说说 X 部分吗?」「有没有反面案例?」效果远好于新开一次搜索。
- 深度研究:遇到需要写报告或做调研的场景,优先用 Perplexity Deep Research(英文)或 秘塔深度研究(中文),输入一句话主题即可自动生成带引用的多章节报告。
- 引用核查:AI 搜索会有"幻觉"风险,养成点击答案中的来源链接核实关键数据的习惯,尤其是数字、时间、人名等关键事实。
- 场景匹配:技术文档/代码 → Perplexity(学术模式);中文无广告信息获取 → 秘塔;手机端快捷 → 夸克。
',2)])])}const h=s(i,[["render",d]]);export{p as __pageData,h as default};
diff --git a/assets/ai_tools-assistant.md.tsJJqQV2.lean.js b/assets/ai_tools-assistant.md.BGC8ydHc.lean.js
similarity index 99%
rename from assets/ai_tools-assistant.md.tsJJqQV2.lean.js
rename to assets/ai_tools-assistant.md.BGC8ydHc.lean.js
index 6d2469d7..c0bcac93 100644
--- a/assets/ai_tools-assistant.md.tsJJqQV2.lean.js
+++ b/assets/ai_tools-assistant.md.BGC8ydHc.lean.js
@@ -1 +1 @@
-import{_ as s,g as l,h as n,U as e,i as t}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";const p=JSON.parse('{"title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","frontmatter":{"date":"2025-11-25T00:52:28.000Z","title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","permalink":"/ai/tools-assistant","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png","categories":["资源推荐"],"tags":["资源推荐","AI","AI 助手","AI 搜索"]},"headers":[],"relativePath":"ai/tools-assistant.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md"}'),i={name:"ai/tools-assistant.md"};function d(o,a,r,c,g,_){return n(),l("div",null,[...a[0]||(a[0]=[e("",5),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://gemini.google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/lamda/images/gemini_sparkle_aurora_33f86dc0c0257da337c63.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini")]),t("p",{class:"desc"},"Gemini 是 Google 旗下的旗舰级 AI 助手,基于先进的 Gemini 大模型,融合智能问答、代码创作、文档分析、网页理解等多种能力,支持多轮对话、图像/文件输入,具备强大的推理与搜索增强功能。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://claude.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Claude")]),t("p",{class:"desc"},"Claude 是 Anthropic 推出的 AI 助手,以安全、诚实、无害为核心理念,擅长长文本理解、代码编写与复杂推理任务"),t("span",{class:"VPBadge tip badge"},"逻辑严谨")]),t("a",{href:"https://chat.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatgpt.com/cdn/assets/favicon-l4nq08hd.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"ChatGPT")]),t("p",{class:"desc"},"OpenAI 是全球领先的人工智能公司,其 ChatGPT 是最知名的对话式 AI,可用于创作、代码、答疑、写作等多种场景"),t("span",{class:"VPBadge tip badge"},"全能助手")]),t("a",{href:"https://grok.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://grok.com/images/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Grok (xAI)")]),t("p",{class:"desc"},"Grok 是由 Elon 的 xAI 团队打造的旗舰 AI 助手,拥有实时联网、幽默对话风格和强大知识推理能力,支持多轮对话、知识问答,并且可无缝集成至 X(原 Twitter),供用户便捷调用。"),t("span",{class:"VPBadge tip badge"},"无缝集成 X")])])],-1),e("",2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax")]),t("p",{class:"desc"},"miniMax 是国内领先的 AI 助手平台,拥有多模态大模型能力,支持对话问答、代码生成、文档处理、知识检索等丰富场景,聚焦自然语言理解与智能创作。界面体验优秀,生态开放,适合作为通用 AI 辅助工具使用。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://chatglm.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatglm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱清言")]),t("p",{class:"desc"},"智谱清言是由智谱AI推出的国产大模型应用平台,基于GLM系列大模型,支持对话问答、知识检索、代码生成、企业知识库等多场景,文本理解与推理能力优秀,界面简洁易用。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://kimi.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi")]),t("p",{class:"desc"},"Kimi 是月之暗面(Moonshot AI)推出的智能助手,支持超长上下文对话、文件分析、智能问答、代码生成等多种能力,具备强大的中文语言理解和推理能力,界面友好,适合多场景使用。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"deepseek")]),t("p",{class:"desc"},"DeepSeek 是国内技术领先的大模型平台,提供通用对话、AI 代码助手、文档处理、知识检索等服务,擅长代码生成、数学与逻辑推理,支持本地部署与企业级应用,性价比高、研发活跃。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.doubao.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"豆包 (Doubao)")]),t("p",{class:"desc"},"字节跳动推出的新一代大模型“豆包”,主打轻量高效,专注智能问答、写作助手、内容总结、代码生成等场景,界面清爽体验友好,并不断开放使用与 API 能力。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.qianwen.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"通义千问 (Qwen)")]),t("p",{class:"desc"},"阿里云推出的通义千问大模型(Qwen),在中文理解与生成、代码和多模态等方面表现出色,适合内容创作、对话助手、企业知识库等多样业务场景,支持超长上下文和插件生态。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yiyan.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://eb-static.cdn.bcebos.com/logo/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"文心一言 (ERNIE Bot)")]),t("p",{class:"desc"},"百度推出的文心一言(ERNIE Bot)大模型,具备强大的中文语义理解、信息检索、多轮对话与代码能力,适用于搜索问答、智能创作、企业接入等场景,拥有丰富的 API 与生态支持。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yuanbao.tencent.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://static.yuanbao.tencent.com/m/yuanbao-web/favicon@32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"元宝 (Hunyuan)")]),t("p",{class:"desc"},"腾讯推出的元宝(Hunyuan)大模型助手,专注于中文理解与生成,支持对话问答、内容创作、代码、搜索、数据分析等多场景,界面简洁功能丰富,具备企业级接入能力。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e("",7),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://notebooklm.google/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://notebooklm.google/_/static/branding/v4/light_mode/favicon/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"NotebookLM")]),t("p",{class:"desc"},'Google 出品的 AI 学习利器,可导入 PDF、网页、YouTube 视频、音频、Google Docs 等多种资料,AI 基于 Gemini 自动生成摘要、FAQ、学习指南、时间线和思维导图。独有的 Audio Overview(音频概述)功能可将任意资料转为两人播客式对话,实现"听着学"。堪称当下最强的个人学习与知识整合工具,完全免费。'),t("span",{class:"VPBadge tip badge"},"强力推荐")]),t("a",{href:"https://youmind.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://marketing-assets.youmind.com/logo-512.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"YouMind")]),t("p",{class:"desc"},"个性化 AI 学习与创作智能体,由国内前端领域知名开发者创业打造。内置浏览器插件可一键抓取网页、文章和视频内容,AI 自动整理生成知识卡片与图谱。支持多模型切换,兼顾碎片信息收集与深度创作,个人知识管理的得力助手。"),t("span",{class:"VPBadge tip badge"},"学习+创作")]),t("a",{href:"https://www.feishu.cn/product/feishuai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://p1-hera.feishucdn.com/tos-cn-i-jbbdkfciu3/1ec7129d900e442d8501d810efdaa369~tplv-jbbdkfciu3-image:0:0.image",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"飞书智能创作")]),t("p",{class:"desc"},"飞书 Docs 内置 AI 写作助手,支持文档自动生成、会议纪要智能整理、大纲生成与头脑风暴,与飞书日历、任务和项目深度联动,是企业/团队内容协作、会议知识总结与项目文档编写的首选工具。"),t("span",{class:"VPBadge tip badge"},"团队协作")]),t("a",{href:"https://www.notion.com/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Notion AI")]),t("p",{class:"desc"},"全球最受欢迎的笔记与协作平台内置 AI 助手,支持文档自动生成、内容总结、多语言翻译与润色、头脑风暴和自动分类归档,并与 Notion 数据库、看板、Wiki 无缝联动,适合个人知识库与团队项目管理中的内容整理与二次创作。"),t("span",{class:"VPBadge tip badge"},"笔记+协作")]),t("a",{href:"https://gamma.app/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Gamma")]),t("p",{class:"desc"},"新一代 AI 演示文稿与内容创作平台,输入一句话主题或导入笔记/大纲即可自动生成精美 PPT、网页或文档,AI 负责排版、配图与动效,支持实时协作和嵌入式分享。从知识输出到视觉呈现,一步到位。"),t("span",{class:"VPBadge tip badge"},"AI 演示")]),t("a",{href:"https://flowus.cn/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://cdn2.flowus.cn/assets/_next/static/media/favicon.0c45c594.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"FlowUs")]),t("p",{class:"desc"},"国内新一代知识管理与协作平台,类 Notion 体验但中文本地化更优,内置 AI 辅助写作 / 总结 / 翻译功能,支持多维表格、看板和文档协作,智能化解决工作、学习、生活中的各项任务。"),t("span",{class:"VPBadge tip badge"},"国内知识库")]),t("a",{href:"https://coda.io/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Coda AI")]),t("p",{class:"desc"},'一体化智能文档平台,融合 AI 文档生成、表格分析、内容自动填写与总结,强大的公式引擎与自动化工作流引擎让内容真正"活"起来,适合流程梳理、数据驱动型团队协作与知识管理场景。'),t("span",{class:"VPBadge tip badge"},"内容自动化")]),t("a",{href:"https://www.feishu.cn/minutes",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"飞书妙记")]),t("p",{class:"desc"},"飞书旗下会议智能转录与总结服务,支持中英双语实时语音转录、AI 自动摘要与知识点抽取,可直接生成结构化笔记与任务清单,适合在线学习、课程复习、会议实时记录与培训内容归档。"),t("span",{class:"VPBadge note badge"},"语音转录")])])],-1),e("",8),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.perplexity.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Perplexity")]),t("p",{class:"desc"},"目前最受研究者和开发者青睐的 AI 搜索引擎,每条答案均附带来源链接,支持学术、新闻、代码等垂直搜索模式;Pro 版提供 Deep Research(深度研究报告)能力,可自动规划多轮检索并生成结构化报告,是替代传统搜索引擎的首选工具。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://google.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Google AI Overviews (SGE)")]),t("p",{class:"desc"},"Google 在搜索结果顶部嵌入的 AI 摘要区域(Search Generative Experience),由 Gemini 驱动,在保留传统蓝链的同时提供综合答案,无需切换产品即可体验 AI 搜索,已在 Google Search 主站全量上线。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://metaso.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://metaso.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"秘塔搜索 (Metaso)")]),t("p",{class:"desc"},'国内 AI 搜索体验最佳之一,界面零广告,答案以"大纲 + 来源引用"结构呈现,支持简洁/深入/研究三种检索深度;"深度研究"模式可自动生成多章节专题报告,适合学术调研、竞品分析、行业洞察等场景。'),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.baidu.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"百度 AI 搜索")]),t("p",{class:"desc"},"百度在传统搜索基础上接入文心大模型,提供 AI 生成摘要答案,同时保留原有搜索结果兜底,与百度地图、百度百科、百度文库深度联动,是国内互联网资源覆盖最广的 AI 搜索入口,适合中文日常搜索需求。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://ai.quark.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://quark.sm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"夸克 AI 搜索")]),t("p",{class:"desc"},"阿里旗下夸克浏览器内置的 AI 搜索,融合通义千问大模型,支持直接问答、文件解析、图片识别和网盘资源检索;移动端体验流畅,是国内日常使用场景下综合体验较好的 AI 搜索 App。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e("",2)])])}const h=s(i,[["render",d]]);export{p as __pageData,h as default};
+import{_ as s,g as l,h as n,U as e,i as t}from"./chunks/vitepress-theme-teek.hoRu8K_n.js";const p=JSON.parse('{"title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","frontmatter":{"date":"2025-11-25T00:52:28.000Z","title":"好用的 AI 助手与工作站推荐","description":"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。","permalink":"/ai/tools-assistant","coverImg":"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png","categories":["资源推荐"],"tags":["资源推荐","AI","AI 助手","AI 搜索"]},"headers":[],"relativePath":"ai/tools-assistant.md","filePath":"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md"}'),i={name:"ai/tools-assistant.md"};function d(o,a,r,c,g,_){return n(),l("div",null,[...a[0]||(a[0]=[e("",5),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://gemini.google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.gstatic.com/lamda/images/gemini_sparkle_aurora_33f86dc0c0257da337c63.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Gemini")]),t("p",{class:"desc"},"Gemini 是 Google 旗下的旗舰级 AI 助手,基于先进的 Gemini 大模型,融合智能问答、代码创作、文档分析、网页理解等多种能力,支持多轮对话、图像/文件输入,具备强大的推理与搜索增强功能。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://claude.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Claude")]),t("p",{class:"desc"},"Claude 是 Anthropic 推出的 AI 助手,以安全、诚实、无害为核心理念,擅长长文本理解、代码编写与复杂推理任务"),t("span",{class:"VPBadge tip badge"},"逻辑严谨")]),t("a",{href:"https://chat.openai.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatgpt.com/cdn/assets/favicon-l4nq08hd.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"ChatGPT")]),t("p",{class:"desc"},"OpenAI 是全球领先的人工智能公司,其 ChatGPT 是最知名的对话式 AI,可用于创作、代码、答疑、写作等多种场景"),t("span",{class:"VPBadge tip badge"},"全能助手")]),t("a",{href:"https://grok.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://grok.com/images/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Grok (xAI)")]),t("p",{class:"desc"},"Grok 是由 Elon 的 xAI 团队打造的旗舰 AI 助手,拥有实时联网、幽默对话风格和强大知识推理能力,支持多轮对话、知识问答,并且可无缝集成至 X(原 Twitter),供用户便捷调用。"),t("span",{class:"VPBadge tip badge"},"无缝集成 X")])])],-1),e("",2),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.minimaxi.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.minimaxi.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"miniMax")]),t("p",{class:"desc"},"miniMax 是国内领先的 AI 助手平台,拥有多模态大模型能力,支持对话问答、代码生成、文档处理、知识检索等丰富场景,聚焦自然语言理解与智能创作。界面体验优秀,生态开放,适合作为通用 AI 辅助工具使用。"),t("span",{class:"VPBadge tip badge"},"多模态")]),t("a",{href:"https://chatglm.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://chatglm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"智谱清言")]),t("p",{class:"desc"},"智谱清言是由智谱AI推出的国产大模型应用平台,基于GLM系列大模型,支持对话问答、知识检索、代码生成、企业知识库等多场景,文本理解与推理能力优秀,界面简洁易用。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://kimi.moonshot.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://kimi.moonshot.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Kimi")]),t("p",{class:"desc"},"Kimi 是月之暗面(Moonshot AI)推出的智能助手,支持超长上下文对话、文件分析、智能问答、代码生成等多种能力,具备强大的中文语言理解和推理能力,界面友好,适合多场景使用。"),t("span",{class:"VPBadge tip badge"},"长上下文")]),t("a",{href:"https://www.deepseek.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.deepseek.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"deepseek")]),t("p",{class:"desc"},"DeepSeek 是国内技术领先的大模型平台,提供通用对话、AI 代码助手、文档处理、知识检索等服务,擅长代码生成、数学与逻辑推理,支持本地部署与企业级应用,性价比高、研发活跃。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.doubao.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://lf-flow-web-cdn.doubao.com/obj/flow-doubao/doubao/chat/favicon.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"豆包 (Doubao)")]),t("p",{class:"desc"},"字节跳动推出的新一代大模型“豆包”,主打轻量高效,专注智能问答、写作助手、内容总结、代码生成等场景,界面清爽体验友好,并不断开放使用与 API 能力。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.qianwen.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://img.alicdn.com/imgextra/i4/O1CN01uar8u91DHWktnF2fl_!!6000000000191-2-tps-110-110.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"通义千问 (Qwen)")]),t("p",{class:"desc"},"阿里云推出的通义千问大模型(Qwen),在中文理解与生成、代码和多模态等方面表现出色,适合内容创作、对话助手、企业知识库等多样业务场景,支持超长上下文和插件生态。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yiyan.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://eb-static.cdn.bcebos.com/logo/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"文心一言 (ERNIE Bot)")]),t("p",{class:"desc"},"百度推出的文心一言(ERNIE Bot)大模型,具备强大的中文语义理解、信息检索、多轮对话与代码能力,适用于搜索问答、智能创作、企业接入等场景,拥有丰富的 API 与生态支持。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://yuanbao.tencent.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://static.yuanbao.tencent.com/m/yuanbao-web/favicon@32.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"元宝 (Hunyuan)")]),t("p",{class:"desc"},"腾讯推出的元宝(Hunyuan)大模型助手,专注于中文理解与生成,支持对话问答、内容创作、代码、搜索、数据分析等多场景,界面简洁功能丰富,具备企业级接入能力。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e("",7),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://notebooklm.google/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://notebooklm.google/_/static/branding/v4/light_mode/favicon/favicon.svg",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"NotebookLM")]),t("p",{class:"desc"},'Google 出品的 AI 学习利器,可导入 PDF、网页、YouTube 视频、音频、Google Docs 等多种资料,AI 基于 Gemini 自动生成摘要、FAQ、学习指南、时间线和思维导图。独有的 Audio Overview(音频概述)功能可将任意资料转为两人播客式对话,实现"听着学"。堪称当下最强的个人学习与知识整合工具,完全免费。'),t("span",{class:"VPBadge tip badge"},"强力推荐")]),t("a",{href:"https://youmind.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://marketing-assets.youmind.com/logo-512.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"YouMind")]),t("p",{class:"desc"},"个性化 AI 学习与创作智能体,由国内前端领域知名开发者创业打造。内置浏览器插件可一键抓取网页、文章和视频内容,AI 自动整理生成知识卡片与图谱。支持多模型切换,兼顾碎片信息收集与深度创作,个人知识管理的得力助手。"),t("span",{class:"VPBadge tip badge"},"学习+创作")]),t("a",{href:"https://www.feishu.cn/product/feishuai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://p1-hera.feishucdn.com/tos-cn-i-jbbdkfciu3/1ec7129d900e442d8501d810efdaa369~tplv-jbbdkfciu3-image:0:0.image",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"飞书智能创作")]),t("p",{class:"desc"},"飞书 Docs 内置 AI 写作助手,支持文档自动生成、会议纪要智能整理、大纲生成与头脑风暴,与飞书日历、任务和项目深度联动,是企业/团队内容协作、会议知识总结与项目文档编写的首选工具。"),t("span",{class:"VPBadge tip badge"},"团队协作")]),t("a",{href:"https://www.notion.com/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Notion AI")]),t("p",{class:"desc"},"全球最受欢迎的笔记与协作平台内置 AI 助手,支持文档自动生成、内容总结、多语言翻译与润色、头脑风暴和自动分类归档,并与 Notion 数据库、看板、Wiki 无缝联动,适合个人知识库与团队项目管理中的内容整理与二次创作。"),t("span",{class:"VPBadge tip badge"},"笔记+协作")]),t("a",{href:"https://gamma.app/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Gamma")]),t("p",{class:"desc"},"新一代 AI 演示文稿与内容创作平台,输入一句话主题或导入笔记/大纲即可自动生成精美 PPT、网页或文档,AI 负责排版、配图与动效,支持实时协作和嵌入式分享。从知识输出到视觉呈现,一步到位。"),t("span",{class:"VPBadge tip badge"},"AI 演示")]),t("a",{href:"https://flowus.cn/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://cdn2.flowus.cn/assets/_next/static/media/favicon.0c45c594.png",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"FlowUs")]),t("p",{class:"desc"},"国内新一代知识管理与协作平台,类 Notion 体验但中文本地化更优,内置 AI 辅助写作 / 总结 / 翻译功能,支持多维表格、看板和文档协作,智能化解决工作、学习、生活中的各项任务。"),t("span",{class:"VPBadge tip badge"},"国内知识库")]),t("a",{href:"https://coda.io/product/ai",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Coda AI")]),t("p",{class:"desc"},'一体化智能文档平台,融合 AI 文档生成、表格分析、内容自动填写与总结,强大的公式引擎与自动化工作流引擎让内容真正"活"起来,适合流程梳理、数据驱动型团队协作与知识管理场景。'),t("span",{class:"VPBadge tip badge"},"内容自动化")]),t("a",{href:"https://www.feishu.cn/minutes",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"飞书妙记")]),t("p",{class:"desc"},"飞书旗下会议智能转录与总结服务,支持中英双语实时语音转录、AI 自动摘要与知识点抽取,可直接生成结构化笔记与任务清单,适合在线学习、课程复习、会议实时记录与培训内容归档。"),t("span",{class:"VPBadge note badge"},"语音转录")])])],-1),e("",8),t("div",{class:"container nav-card-container"},[t("div",{class:"nav-card index-auto",style:{"--row-gap":"20px","--column-gap":"20px","--column-min-width":"calc(100% / 4 - 60px)"}},[t("a",{href:"https://www.perplexity.ai/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("span",{class:"name"},"Perplexity")]),t("p",{class:"desc"},"目前最受研究者和开发者青睐的 AI 搜索引擎,每条答案均附带来源链接,支持学术、新闻、代码等垂直搜索模式;Pro 版提供 Deep Research(深度研究报告)能力,可自动规划多轮检索并生成结构化报告,是替代传统搜索引擎的首选工具。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://google.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://google.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"Google AI Overviews (SGE)")]),t("p",{class:"desc"},"Google 在搜索结果顶部嵌入的 AI 摘要区域(Search Generative Experience),由 Gemini 驱动,在保留传统蓝链的同时提供综合答案,无需切换产品即可体验 AI 搜索,已在 Google Search 主站全量上线。"),t("span",{class:"VPBadge tip badge"},"国外")]),t("a",{href:"https://metaso.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://metaso.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"秘塔搜索 (Metaso)")]),t("p",{class:"desc"},'国内 AI 搜索体验最佳之一,界面零广告,答案以"大纲 + 来源引用"结构呈现,支持简洁/深入/研究三种检索深度;"深度研究"模式可自动生成多章节专题报告,适合学术调研、竞品分析、行业洞察等场景。'),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://www.baidu.com/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://www.baidu.com/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"百度 AI 搜索")]),t("p",{class:"desc"},"百度在传统搜索基础上接入文心大模型,提供 AI 生成摘要答案,同时保留原有搜索结果兜底,与百度地图、百度百科、百度文库深度联动,是国内互联网资源覆盖最广的 AI 搜索入口,适合中文日常搜索需求。"),t("span",{class:"VPBadge tip badge"},"国内")]),t("a",{href:"https://ai.quark.cn/",target:"_blank",class:"nav-card__item row-4",style:{"--desc-line-clamp":"2"}},[t("div",{class:"nav-card__item__info"},[t("div",{class:"nav-card__item__img skeleton-image"},[t("img",{src:"https://quark.sm.cn/favicon.ico",class:"no-preview",onload:"this.classList.add('loaded')",onerror:"this.classList.add('loaded')"})]),t("span",{class:"name"},"夸克 AI 搜索")]),t("p",{class:"desc"},"阿里旗下夸克浏览器内置的 AI 搜索,融合通义千问大模型,支持直接问答、文件解析、图片识别和网盘资源检索;移动端体验流畅,是国内日常使用场景下综合体验较好的 AI 搜索 App。"),t("span",{class:"VPBadge tip badge"},"国内")])])],-1),e("",2)])])}const h=s(i,[["render",d]]);export{p as __pageData,h as default};
diff --git a/assets/app.DYgVv54P.js b/assets/app.Iqaqolvj.js
similarity index 99%
rename from assets/app.DYgVv54P.js
rename to assets/app.Iqaqolvj.js
index 7cc19186..a967a070 100644
--- a/assets/app.DYgVv54P.js
+++ b/assets/app.Iqaqolvj.js
@@ -1,4 +1,4 @@
-import{d as go,u as Cw,a as pI,f as mm,c as dI,r as nf,b as gI,e as yI,w as mp,n as _m,o as rh,g as Yi,h as ta,i as Xt,j as mI,k as Ou,l as of,m as _I,_ as Dw,p as _p,q as SI,s as Nu,t as xI,v as Sm,x as bI,F as wI,T as TI,y as AI,z as Yh,A as Mw,B as ei,C as CI,D as Iw,E as DI,G as MI,H as II,I as LI,J as Lw,R as PI,K as RI,L as EI,M as kI,N as OI,O as NI,P as BI,Q as VI}from"./chunks/vitepress-theme-teek.BZ9BuaTf.js";var Sp=function(r,e){return Sp=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,a){t.__proto__=a}||function(t,a){for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(t[n]=a[n])},Sp(r,e)};function k(r,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");Sp(r,e);function t(){this.constructor=r}r.prototype=e===null?Object.create(e):(t.prototype=e.prototype,new t)}var zI=(function(){function r(){this.firefox=!1,this.ie=!1,this.edge=!1,this.newEdge=!1,this.weChat=!1}return r})(),GI=(function(){function r(){this.browser=new zI,this.node=!1,this.wxa=!1,this.worker=!1,this.svgSupported=!1,this.touchEventsSupported=!1,this.pointerEventsSupported=!1,this.domSupported=!1,this.transformSupported=!1,this.transform3dSupported=!1,this.hasGlobalWindow=typeof window<"u"}return r})(),yt=new GI;typeof wx=="object"&&typeof wx.getSystemInfoSync=="function"?(yt.wxa=!0,yt.touchEventsSupported=!0):typeof document>"u"&&typeof self<"u"?yt.worker=!0:!yt.hasGlobalWindow||"Deno"in window?(yt.node=!0,yt.svgSupported=!0):FI(navigator.userAgent,yt);function FI(r,e){var t=e.browser,a=r.match(/Firefox\/([\d.]+)/),n=r.match(/MSIE\s([\d.]+)/)||r.match(/Trident\/.+?rv:(([\d.]+))/),i=r.match(/Edge?\/([\d.]+)/),o=/micromessenger/i.test(r);a&&(t.firefox=!0,t.version=a[1]),n&&(t.ie=!0,t.version=n[1]),i&&(t.edge=!0,t.version=i[1],t.newEdge=+i[1].split(".")[0]>18),o&&(t.weChat=!0),e.svgSupported=typeof SVGRect<"u",e.touchEventsSupported="ontouchstart"in window&&!t.ie&&!t.edge,e.pointerEventsSupported="onpointerdown"in window&&(t.edge||t.ie&&+t.version>=11),e.domSupported=typeof document<"u";var s=document.documentElement.style;e.transform3dSupported=(t.ie&&"transition"in s||t.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),e.transformSupported=e.transform3dSupported||t.ie&&+t.version>=9}var ug=12,Pw="sans-serif",$a=ug+"px "+Pw,HI=20,WI=100,UI="007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\WQb\\0FWLg\\bWb\\WQ\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\FFF5.5N";function YI(r){var e={};if(typeof JSON>"u")return e;for(var t=0;t=0)s=o*t.length;else for(var l=0;l>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",a[l]+":0",n[u]+":0",a[1-l]+":auto",n[1-u]+":auto",""].join("!important;"),r.appendChild(o),t.push(o)}return t}function vL(r,e,t){for(var a=t?"invTrans":"trans",n=e[a],i=e.srcCoords,o=[],s=[],l=!0,u=0;u<4;u++){var f=r[u].getBoundingClientRect(),h=2*u,v=f.left,c=f.top;o.push(v,c),l=l&&i&&v===i[h]&&c===i[h+1],s.push(r[u].offsetLeft,r[u].offsetTop)}return l&&n?n:(e.srcCoords=o,e[a]=t?Tm(s,o):Tm(o,s))}function Vw(r){return r.nodeName.toUpperCase()==="CANVAS"}var cL=/([&<>"'])/g,pL={"&":"&","<":"<",">":">",'"':""","'":"'"};function Te(r){return r==null?"":(r+"").replace(cL,function(e,t){return pL[t]})}var dL=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Xh=[],gL=yt.browser.firefox&&+yt.browser.version.split(".")[0]<39;function Dp(r,e,t,a){return t=t||{},a?Cm(r,e,t):gL&&e.layerX!=null&&e.layerX!==e.offsetX?(t.zrX=e.layerX,t.zrY=e.layerY):e.offsetX!=null?(t.zrX=e.offsetX,t.zrY=e.offsetY):Cm(r,e,t),t}function Cm(r,e,t){if(yt.domSupported&&r.getBoundingClientRect){var a=e.clientX,n=e.clientY;if(Vw(r)){var i=r.getBoundingClientRect();t.zrX=a-i.left,t.zrY=n-i.top;return}else if(Cp(Xh,r,a,n)){t.zrX=Xh[0],t.zrY=Xh[1];return}}t.zrX=t.zrY=0}function gg(r){return r||window.event}function Qe(r,e,t){if(e=gg(e),e.zrX!=null)return e;var a=e.type,n=a&&a.indexOf("touch")>=0;if(n){var o=a!=="touchend"?e.targetTouches[0]:e.changedTouches[0];o&&Dp(r,o,e,t)}else{Dp(r,e,e,t);var i=yL(e);e.zrDelta=i?i/120:-(e.detail||0)/3}var s=e.button;return e.which==null&&s!==void 0&&dL.test(e.type)&&(e.which=s&1?1:s&2?3:s&4?2:0),e}function yL(r){var e=r.wheelDelta;if(e)return e;var t=r.deltaX,a=r.deltaY;if(t==null||a==null)return e;var n=Math.abs(a!==0?a:t),i=a>0?-1:a<0?1:t>0?-1:1;return 3*n*i}function Mp(r,e,t,a){r.addEventListener(e,t,a)}function mL(r,e,t,a){r.removeEventListener(e,t,a)}var la=function(r){r.preventDefault(),r.stopPropagation(),r.cancelBubble=!0};function Dm(r){return r.which===2||r.which===3}var _L=(function(){function r(){this._track=[]}return r.prototype.recognize=function(e,t,a){return this._doTrack(e,t,a),this._recognize(e)},r.prototype.clear=function(){return this._track.length=0,this},r.prototype._doTrack=function(e,t,a){var n=e.touches;if(n){for(var i={points:[],touches:[],target:t,event:e},o=0,s=n.length;o1&&a&&a.length>1){var i=Mm(a)/Mm(n);!isFinite(i)&&(i=1),e.pinchScale=i;var o=SL(a);return e.pinchX=o[0],e.pinchY=o[1],{type:"pinch",target:r[0].target,event:e}}}}};function We(){return[1,0,0,1,0,0]}function oh(r){return r[0]=1,r[1]=0,r[2]=0,r[3]=1,r[4]=0,r[5]=0,r}function yg(r,e){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4],r[5]=e[5],r}function na(r,e,t){var a=e[0]*t[0]+e[2]*t[1],n=e[1]*t[0]+e[3]*t[1],i=e[0]*t[2]+e[2]*t[3],o=e[1]*t[2]+e[3]*t[3],s=e[0]*t[4]+e[2]*t[5]+e[4],l=e[1]*t[4]+e[3]*t[5]+e[5];return r[0]=a,r[1]=n,r[2]=i,r[3]=o,r[4]=s,r[5]=l,r}function Hr(r,e,t){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4]+t[0],r[5]=e[5]+t[1],r}function fi(r,e,t,a){a===void 0&&(a=[0,0]);var n=e[0],i=e[2],o=e[4],s=e[1],l=e[3],u=e[5],f=Math.sin(t),h=Math.cos(t);return r[0]=n*h+s*f,r[1]=-n*f+s*h,r[2]=i*h+l*f,r[3]=-i*f+h*l,r[4]=h*(o-a[0])+f*(u-a[1])+a[0],r[5]=h*(u-a[1])-f*(o-a[0])+a[1],r}function mg(r,e,t){var a=t[0],n=t[1];return r[0]=e[0]*a,r[1]=e[1]*n,r[2]=e[2]*a,r[3]=e[3]*n,r[4]=e[4]*a,r[5]=e[5]*n,r}function _o(r,e){var t=e[0],a=e[2],n=e[4],i=e[1],o=e[3],s=e[5],l=t*o-i*a;return l?(l=1/l,r[0]=o*l,r[1]=-i*l,r[2]=-a*l,r[3]=t*l,r[4]=(a*s-o*n)*l,r[5]=(i*n-t*s)*l,r):null}function xL(r){var e=We();return yg(e,r),e}var ft=(function(){function r(e,t){this.x=e||0,this.y=t||0}return r.prototype.copy=function(e){return this.x=e.x,this.y=e.y,this},r.prototype.clone=function(){return new r(this.x,this.y)},r.prototype.set=function(e,t){return this.x=e,this.y=t,this},r.prototype.equal=function(e){return e.x===this.x&&e.y===this.y},r.prototype.add=function(e){return this.x+=e.x,this.y+=e.y,this},r.prototype.scale=function(e){this.x*=e,this.y*=e},r.prototype.scaleAndAdd=function(e,t){this.x+=e.x*t,this.y+=e.y*t},r.prototype.sub=function(e){return this.x-=e.x,this.y-=e.y,this},r.prototype.dot=function(e){return this.x*e.x+this.y*e.y},r.prototype.len=function(){return Math.sqrt(this.x*this.x+this.y*this.y)},r.prototype.lenSquare=function(){return this.x*this.x+this.y*this.y},r.prototype.normalize=function(){var e=this.len();return this.x/=e,this.y/=e,this},r.prototype.distance=function(e){var t=this.x-e.x,a=this.y-e.y;return Math.sqrt(t*t+a*a)},r.prototype.distanceSquare=function(e){var t=this.x-e.x,a=this.y-e.y;return t*t+a*a},r.prototype.negate=function(){return this.x=-this.x,this.y=-this.y,this},r.prototype.transform=function(e){if(e){var t=this.x,a=this.y;return this.x=e[0]*t+e[2]*a+e[4],this.y=e[1]*t+e[3]*a+e[5],this}},r.prototype.toArray=function(e){return e[0]=this.x,e[1]=this.y,e},r.prototype.fromArray=function(e){this.x=e[0],this.y=e[1]},r.set=function(e,t,a){e.x=t,e.y=a},r.copy=function(e,t){e.x=t.x,e.y=t.y},r.len=function(e){return Math.sqrt(e.x*e.x+e.y*e.y)},r.lenSquare=function(e){return e.x*e.x+e.y*e.y},r.dot=function(e,t){return e.x*t.x+e.y*t.y},r.add=function(e,t,a){e.x=t.x+a.x,e.y=t.y+a.y},r.sub=function(e,t,a){e.x=t.x-a.x,e.y=t.y-a.y},r.scale=function(e,t,a){e.x=t.x*a,e.y=t.y*a},r.scaleAndAdd=function(e,t,a,n){e.x=t.x+a.x*n,e.y=t.y+a.y*n},r.lerp=function(e,t,a,n){var i=1-n;e.x=i*t.x+n*a.x,e.y=i*t.y+n*a.y},r})(),El=Math.min,kl=Math.max,an=new ft,nn=new ft,on=new ft,sn=new ft,Eo=new ft,ko=new ft,ht=(function(){function r(e,t,a,n){a<0&&(e=e+a,a=-a),n<0&&(t=t+n,n=-n),this.x=e,this.y=t,this.width=a,this.height=n}return r.prototype.union=function(e){var t=El(e.x,this.x),a=El(e.y,this.y);isFinite(this.x)&&isFinite(this.width)?this.width=kl(e.x+e.width,this.x+this.width)-t:this.width=e.width,isFinite(this.y)&&isFinite(this.height)?this.height=kl(e.y+e.height,this.y+this.height)-a:this.height=e.height,this.x=t,this.y=a},r.prototype.applyTransform=function(e){r.applyTransform(this,this,e)},r.prototype.calculateTransform=function(e){var t=this,a=e.width/t.width,n=e.height/t.height,i=We();return Hr(i,i,[-t.x,-t.y]),mg(i,i,[a,n]),Hr(i,i,[e.x,e.y]),i},r.prototype.intersect=function(e,t){if(!e)return!1;e instanceof r||(e=r.create(e));var a=this,n=a.x,i=a.x+a.width,o=a.y,s=a.y+a.height,l=e.x,u=e.x+e.width,f=e.y,h=e.y+e.height,v=!(ip&&(p=_,dp&&(p=S,y=a.x&&e<=a.x+a.width&&t>=a.y&&t<=a.y+a.height},r.prototype.clone=function(){return new r(this.x,this.y,this.width,this.height)},r.prototype.copy=function(e){r.copy(this,e)},r.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},r.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},r.prototype.isZero=function(){return this.width===0||this.height===0},r.create=function(e){return new r(e.x,e.y,e.width,e.height)},r.copy=function(e,t){e.x=t.x,e.y=t.y,e.width=t.width,e.height=t.height},r.applyTransform=function(e,t,a){if(!a){e!==t&&r.copy(e,t);return}if(a[1]<1e-5&&a[1]>-1e-5&&a[2]<1e-5&&a[2]>-1e-5){var n=a[0],i=a[3],o=a[4],s=a[5];e.x=t.x*n+o,e.y=t.y*i+s,e.width=t.width*n,e.height=t.height*i,e.width<0&&(e.x+=e.width,e.width=-e.width),e.height<0&&(e.y+=e.height,e.height=-e.height);return}an.x=on.x=t.x,an.y=sn.y=t.y,nn.x=sn.x=t.x+t.width,nn.y=on.y=t.y+t.height,an.transform(a),sn.transform(a),nn.transform(a),on.transform(a),e.x=El(an.x,nn.x,on.x,sn.x),e.y=El(an.y,nn.y,on.y,sn.y);var l=kl(an.x,nn.x,on.x,sn.x),u=kl(an.y,nn.y,on.y,sn.y);e.width=l-e.x,e.height=u-e.y},r})(),zw="silent";function bL(r,e,t){return{type:r,event:t,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:t.zrX,offsetY:t.zrY,gestureEvent:t.gestureEvent,pinchX:t.pinchX,pinchY:t.pinchY,pinchScale:t.pinchScale,wheelDelta:t.zrDelta,zrByTouch:t.zrByTouch,which:t.which,stop:wL}}function wL(){la(this.event)}var TL=(function(r){k(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.handler=null,t}return e.prototype.dispose=function(){},e.prototype.setCursor=function(){},e})(lr),Oo=(function(){function r(e,t){this.x=e,this.y=t}return r})(),AL=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],qh=new ht(0,0,0,0),Gw=(function(r){k(e,r);function e(t,a,n,i,o){var s=r.call(this)||this;return s._hovered=new Oo(0,0),s.storage=t,s.painter=a,s.painterRoot=i,s._pointerSize=o,n=n||new TL,s.proxy=null,s.setHandlerProxy(n),s._draggingMgr=new lL(s),s}return e.prototype.setHandlerProxy=function(t){this.proxy&&this.proxy.dispose(),t&&(D(AL,function(a){t.on&&t.on(a,this[a],this)},this),t.handler=this),this.proxy=t},e.prototype.mousemove=function(t){var a=t.zrX,n=t.zrY,i=Fw(this,a,n),o=this._hovered,s=o.target;s&&!s.__zr&&(o=this.findHover(o.x,o.y),s=o.target);var l=this._hovered=i?new Oo(a,n):this.findHover(a,n),u=l.target,f=this.proxy;f.setCursor&&f.setCursor(u?u.cursor:"default"),s&&u!==s&&this.dispatchToElement(o,"mouseout",t),this.dispatchToElement(l,"mousemove",t),u&&u!==s&&this.dispatchToElement(l,"mouseover",t)},e.prototype.mouseout=function(t){var a=t.zrEventControl;a!=="only_globalout"&&this.dispatchToElement(this._hovered,"mouseout",t),a!=="no_globalout"&&this.trigger("globalout",{type:"globalout",event:t})},e.prototype.resize=function(){this._hovered=new Oo(0,0)},e.prototype.dispatch=function(t,a){var n=this[t];n&&n.call(this,a)},e.prototype.dispose=function(){this.proxy.dispose(),this.storage=null,this.proxy=null,this.painter=null},e.prototype.setCursorStyle=function(t){var a=this.proxy;a.setCursor&&a.setCursor(t)},e.prototype.dispatchToElement=function(t,a,n){t=t||{};var i=t.target;if(!(i&&i.silent)){for(var o="on"+a,s=bL(a,t,n);i&&(i[o]&&(s.cancelBubble=!!i[o].call(i,s)),i.trigger(a,s),i=i.__hostTarget?i.__hostTarget:i.parent,!s.cancelBubble););s.cancelBubble||(this.trigger(a,s),this.painter&&this.painter.eachOtherLayer&&this.painter.eachOtherLayer(function(l){typeof l[o]=="function"&&l[o].call(l,s),l.trigger&&l.trigger(a,s)}))}},e.prototype.findHover=function(t,a,n){var i=this.storage.getDisplayList(),o=new Oo(t,a);if(Im(i,o,t,a,n),this._pointerSize&&!o.target){for(var s=[],l=this._pointerSize,u=l/2,f=new ht(t-u,a-u,l,l),h=i.length-1;h>=0;h--){var v=i[h];v!==n&&!v.ignore&&!v.ignoreCoarsePointer&&(!v.parent||!v.parent.ignoreCoarsePointer)&&(qh.copy(v.getBoundingRect()),v.transform&&qh.applyTransform(v.transform),qh.intersect(f)&&s.push(v))}if(s.length)for(var c=4,p=Math.PI/12,d=Math.PI*2,g=0;g4)return;this._downPoint=null}this.dispatchToElement(i,r,e)}});function CL(r,e,t){if(r[r.rectHover?"rectContain":"contain"](e,t)){for(var a=r,n=void 0,i=!1;a;){if(a.ignoreClip&&(i=!0),!i){var o=a.getClipPath();if(o&&!o.contain(e,t))return!1}a.silent&&(n=!0);var s=a.__hostTarget;a=s||a.parent}return n?zw:!0}return!1}function Im(r,e,t,a,n){for(var i=r.length-1;i>=0;i--){var o=r[i],s=void 0;if(o!==n&&!o.ignore&&(s=CL(o,t,a))&&(!e.topTarget&&(e.topTarget=o),s!==zw)){e.target=o;break}}}function Fw(r,e,t){var a=r.painter;return e<0||e>a.getWidth()||t<0||t>a.getHeight()}var Hw=32,No=7;function DL(r){for(var e=0;r>=Hw;)e|=r&1,r>>=1;return r+e}function Lm(r,e,t,a){var n=e+1;if(n===t)return 1;if(a(r[n++],r[e])<0){for(;n=0;)n++;return n-e}function ML(r,e,t){for(t--;e>>1,n(i,r[l])<0?s=l:o=l+1;var u=a-o;switch(u){case 3:r[o+3]=r[o+2];case 2:r[o+2]=r[o+1];case 1:r[o+1]=r[o];break;default:for(;u>0;)r[o+u]=r[o+u-1],u--}r[o]=i}}function Kh(r,e,t,a,n,i){var o=0,s=0,l=1;if(i(r,e[t+n])>0){for(s=a-n;l0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=n,l+=n}else{for(s=n+1;ls&&(l=s);var u=o;o=n-l,l=n-u}for(o++;o>>1);i(r,e[t+f])>0?o=f+1:l=f}return l}function Qh(r,e,t,a,n,i){var o=0,s=0,l=1;if(i(r,e[t+n])<0){for(s=n+1;ls&&(l=s);var u=o;o=n-l,l=n-u}else{for(s=a-n;l=0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=n,l+=n}for(o++;o>>1);i(r,e[t+f])<0?l=f:o=f+1}return l}function IL(r,e){var t=No,a,n,i=0,o=[];a=[],n=[];function s(c,p){a[i]=c,n[i]=p,i+=1}function l(){for(;i>1;){var c=i-2;if(c>=1&&n[c-1]<=n[c]+n[c+1]||c>=2&&n[c-2]<=n[c]+n[c-1])n[c-1]n[c+1])break;f(c)}}function u(){for(;i>1;){var c=i-2;c>0&&n[c-1]=No||w>=No);if(T)break;b<0&&(b=0),b+=2}if(t=b,t<1&&(t=1),p===1){for(y=0;y=0;y--)r[x+y]=r[b+y];r[S]=o[_];return}for(var w=t;;){var T=0,A=0,C=!1;do if(e(o[_],r[m])<0){if(r[S--]=r[m--],T++,A=0,--p===0){C=!0;break}}else if(r[S--]=o[_--],A++,T=0,--g===1){C=!0;break}while((T|A)=0;y--)r[x+y]=r[b+y];if(p===0){C=!0;break}}if(r[S--]=o[_--],--g===1){C=!0;break}if(A=g-Kh(r[m],o,0,g,g-1,e),A!==0){for(S-=A,_-=A,g-=A,x=S+1,b=_+1,y=0;y=No||A>=No);if(C)break;w<0&&(w=0),w+=2}if(t=w,t<1&&(t=1),g===1){for(S-=p,m-=p,x=S+1,b=m+1,y=p-1;y>=0;y--)r[x+y]=r[b+y];r[S]=o[_]}else{if(g===0)throw new Error;for(b=S-(g-1),y=0;ys&&(l=s),Pm(r,t,t+l,t+i,e),i=l}o.pushRun(t,i),o.mergeRuns(),n-=i,t+=i}while(n!==0);o.forceMergeRuns()}}var Fe=1,ls=2,Gi=4,Rm=!1;function Jh(){Rm||(Rm=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function Em(r,e){return r.zlevel===e.zlevel?r.z===e.z?r.z2-e.z2:r.z-e.z:r.zlevel-e.zlevel}var LL=(function(){function r(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=Em}return r.prototype.traverse=function(e,t){for(var a=0;a0&&(f.__clipPaths=[]),isNaN(f.z)&&(Jh(),f.z=0),isNaN(f.z2)&&(Jh(),f.z2=0),isNaN(f.zlevel)&&(Jh(),f.zlevel=0),this._displayList[this._displayListLen++]=f}var h=e.getDecalElement&&e.getDecalElement();h&&this._updateAndAddDisplayable(h,t,a);var v=e.getTextGuideLine();v&&this._updateAndAddDisplayable(v,t,a);var c=e.getTextContent();c&&this._updateAndAddDisplayable(c,t,a)}},r.prototype.addRoot=function(e){e.__zr&&e.__zr.storage===this||this._roots.push(e)},r.prototype.delRoot=function(e){if(e instanceof Array){for(var t=0,a=e.length;t=0&&this._roots.splice(n,1)},r.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},r.prototype.getRoots=function(){return this._roots},r.prototype.dispose=function(){this._displayList=null,this._roots=null},r})(),lf;lf=yt.hasGlobalWindow&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(r){return setTimeout(r,16)};var xs={linear:function(r){return r},quadraticIn:function(r){return r*r},quadraticOut:function(r){return r*(2-r)},quadraticInOut:function(r){return(r*=2)<1?.5*r*r:-.5*(--r*(r-2)-1)},cubicIn:function(r){return r*r*r},cubicOut:function(r){return--r*r*r+1},cubicInOut:function(r){return(r*=2)<1?.5*r*r*r:.5*((r-=2)*r*r+2)},quarticIn:function(r){return r*r*r*r},quarticOut:function(r){return 1- --r*r*r*r},quarticInOut:function(r){return(r*=2)<1?.5*r*r*r*r:-.5*((r-=2)*r*r*r-2)},quinticIn:function(r){return r*r*r*r*r},quinticOut:function(r){return--r*r*r*r*r+1},quinticInOut:function(r){return(r*=2)<1?.5*r*r*r*r*r:.5*((r-=2)*r*r*r*r+2)},sinusoidalIn:function(r){return 1-Math.cos(r*Math.PI/2)},sinusoidalOut:function(r){return Math.sin(r*Math.PI/2)},sinusoidalInOut:function(r){return .5*(1-Math.cos(Math.PI*r))},exponentialIn:function(r){return r===0?0:Math.pow(1024,r-1)},exponentialOut:function(r){return r===1?1:1-Math.pow(2,-10*r)},exponentialInOut:function(r){return r===0?0:r===1?1:(r*=2)<1?.5*Math.pow(1024,r-1):.5*(-Math.pow(2,-10*(r-1))+2)},circularIn:function(r){return 1-Math.sqrt(1-r*r)},circularOut:function(r){return Math.sqrt(1- --r*r)},circularInOut:function(r){return(r*=2)<1?-.5*(Math.sqrt(1-r*r)-1):.5*(Math.sqrt(1-(r-=2)*r)+1)},elasticIn:function(r){var e,t=.1,a=.4;return r===0?0:r===1?1:(!t||t<1?(t=1,e=a/4):e=a*Math.asin(1/t)/(2*Math.PI),-(t*Math.pow(2,10*(r-=1))*Math.sin((r-e)*(2*Math.PI)/a)))},elasticOut:function(r){var e,t=.1,a=.4;return r===0?0:r===1?1:(!t||t<1?(t=1,e=a/4):e=a*Math.asin(1/t)/(2*Math.PI),t*Math.pow(2,-10*r)*Math.sin((r-e)*(2*Math.PI)/a)+1)},elasticInOut:function(r){var e,t=.1,a=.4;return r===0?0:r===1?1:(!t||t<1?(t=1,e=a/4):e=a*Math.asin(1/t)/(2*Math.PI),(r*=2)<1?-.5*(t*Math.pow(2,10*(r-=1))*Math.sin((r-e)*(2*Math.PI)/a)):t*Math.pow(2,-10*(r-=1))*Math.sin((r-e)*(2*Math.PI)/a)*.5+1)},backIn:function(r){var e=1.70158;return r*r*((e+1)*r-e)},backOut:function(r){var e=1.70158;return--r*r*((e+1)*r+e)+1},backInOut:function(r){var e=2.5949095;return(r*=2)<1?.5*(r*r*((e+1)*r-e)):.5*((r-=2)*r*((e+1)*r+e)+2)},bounceIn:function(r){return 1-xs.bounceOut(1-r)},bounceOut:function(r){return r<1/2.75?7.5625*r*r:r<2/2.75?7.5625*(r-=1.5/2.75)*r+.75:r<2.5/2.75?7.5625*(r-=2.25/2.75)*r+.9375:7.5625*(r-=2.625/2.75)*r+.984375},bounceInOut:function(r){return r<.5?xs.bounceIn(r*2)*.5:xs.bounceOut(r*2-1)*.5+.5}},Ol=Math.pow,Ha=Math.sqrt,uf=1e-8,Ww=1e-4,km=Ha(3),Nl=1/3,Er=ui(),er=ui(),Ki=ui();function Na(r){return r>-uf&&ruf||r<-uf}function ee(r,e,t,a,n){var i=1-n;return i*i*(i*r+3*n*e)+n*n*(n*a+3*i*t)}function Om(r,e,t,a,n){var i=1-n;return 3*(((e-r)*i+2*(t-e)*n)*i+(a-t)*n*n)}function ff(r,e,t,a,n,i){var o=a+3*(e-t)-r,s=3*(t-e*2+r),l=3*(e-r),u=r-n,f=s*s-3*o*l,h=s*l-9*o*u,v=l*l-3*s*u,c=0;if(Na(f)&&Na(h))if(Na(s))i[0]=0;else{var p=-l/s;p>=0&&p<=1&&(i[c++]=p)}else{var d=h*h-4*f*v;if(Na(d)){var g=h/f,p=-s/o+g,y=-g/2;p>=0&&p<=1&&(i[c++]=p),y>=0&&y<=1&&(i[c++]=y)}else if(d>0){var m=Ha(d),_=f*s+1.5*o*(-h+m),S=f*s+1.5*o*(-h-m);_<0?_=-Ol(-_,Nl):_=Ol(_,Nl),S<0?S=-Ol(-S,Nl):S=Ol(S,Nl);var p=(-s-(_+S))/(3*o);p>=0&&p<=1&&(i[c++]=p)}else{var b=(2*f*s-3*o*h)/(2*Ha(f*f*f)),x=Math.acos(b)/3,w=Ha(f),T=Math.cos(x),p=(-s-2*w*T)/(3*o),y=(-s+w*(T+km*Math.sin(x)))/(3*o),A=(-s+w*(T-km*Math.sin(x)))/(3*o);p>=0&&p<=1&&(i[c++]=p),y>=0&&y<=1&&(i[c++]=y),A>=0&&A<=1&&(i[c++]=A)}}return c}function Yw(r,e,t,a,n){var i=6*t-12*e+6*r,o=9*e+3*a-3*r-9*t,s=3*e-3*r,l=0;if(Na(o)){if(Uw(i)){var u=-s/i;u>=0&&u<=1&&(n[l++]=u)}}else{var f=i*i-4*o*s;if(Na(f))n[0]=-i/(2*o);else if(f>0){var h=Ha(f),u=(-i+h)/(2*o),v=(-i-h)/(2*o);u>=0&&u<=1&&(n[l++]=u),v>=0&&v<=1&&(n[l++]=v)}}return l}function Za(r,e,t,a,n,i){var o=(e-r)*n+r,s=(t-e)*n+e,l=(a-t)*n+t,u=(s-o)*n+o,f=(l-s)*n+s,h=(f-u)*n+u;i[0]=r,i[1]=o,i[2]=u,i[3]=h,i[4]=h,i[5]=f,i[6]=l,i[7]=a}function $w(r,e,t,a,n,i,o,s,l,u,f){var h,v=.005,c=1/0,p,d,g,y;Er[0]=l,Er[1]=u;for(var m=0;m<1;m+=.05)er[0]=ee(r,t,n,o,m),er[1]=ee(e,a,i,s,m),g=$n(Er,er),g=0&&g=0&&u<=1&&(n[l++]=u)}}else{var f=o*o-4*i*s;if(Na(f)){var u=-o/(2*i);u>=0&&u<=1&&(n[l++]=u)}else if(f>0){var h=Ha(f),u=(-o+h)/(2*i),v=(-o-h)/(2*i);u>=0&&u<=1&&(n[l++]=u),v>=0&&v<=1&&(n[l++]=v)}}return l}function Xw(r,e,t){var a=r+t-2*e;return a===0?.5:(r-e)/a}function Bs(r,e,t,a,n){var i=(e-r)*a+r,o=(t-e)*a+e,s=(o-i)*a+i;n[0]=r,n[1]=i,n[2]=s,n[3]=s,n[4]=o,n[5]=t}function Zw(r,e,t,a,n,i,o,s,l){var u,f=.005,h=1/0;Er[0]=o,Er[1]=s;for(var v=0;v<1;v+=.05){er[0]=se(r,t,n,v),er[1]=se(e,a,i,v);var c=$n(Er,er);c=0&&c=1?1:ff(0,a,i,1,l,s)&&ee(0,n,o,1,s[0])}}}var OL=(function(){function r(e){this._inited=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=e.life||1e3,this._delay=e.delay||0,this.loop=e.loop||!1,this.onframe=e.onframe||$t,this.ondestroy=e.ondestroy||$t,this.onrestart=e.onrestart||$t,e.easing&&this.setEasing(e.easing)}return r.prototype.step=function(e,t){if(this._inited||(this._startTime=e+this._delay,this._inited=!0),this._paused){this._pausedTime+=t;return}var a=this._life,n=e-this._startTime-this._pausedTime,i=n/a;i<0&&(i=0),i=Math.min(i,1);var o=this.easingFunc,s=o?o(i):i;if(this.onframe(s),i===1)if(this.loop){var l=n%a;this._startTime=e-l,this._pausedTime=0,this.onrestart()}else return!0;return!1},r.prototype.pause=function(){this._paused=!0},r.prototype.resume=function(){this._paused=!1},r.prototype.setEasing=function(e){this.easing=e,this.easingFunc=Q(e)?e:xs[e]||_g(e)},r})(),qw=(function(){function r(e){this.value=e}return r})(),NL=(function(){function r(){this._len=0}return r.prototype.insert=function(e){var t=new qw(e);return this.insertEntry(t),t},r.prototype.insertEntry=function(e){this.head?(this.tail.next=e,e.prev=this.tail,e.next=null,this.tail=e):this.head=this.tail=e,this._len++},r.prototype.remove=function(e){var t=e.prev,a=e.next;t?t.next=a:this.head=a,a?a.prev=t:this.tail=t,e.next=e.prev=null,this._len--},r.prototype.len=function(){return this._len},r.prototype.clear=function(){this.head=this.tail=null,this._len=0},r})(),fl=(function(){function r(e){this._list=new NL,this._maxSize=10,this._map={},this._maxSize=e}return r.prototype.put=function(e,t){var a=this._list,n=this._map,i=null;if(n[e]==null){var o=a.len(),s=this._lastRemovedEntry;if(o>=this._maxSize&&o>0){var l=a.head;a.remove(l),delete n[l.key],i=l.value,this._lastRemovedEntry=l}s?s.value=t:s=new qw(t),s.key=e,a.insertEntry(s),n[e]=s}return i},r.prototype.get=function(e){var t=this._map[e],a=this._list;if(t!=null)return t!==a.tail&&(a.remove(t),a.insertEntry(t)),t.value},r.prototype.clear=function(){this._list.clear(),this._map={}},r.prototype.len=function(){return this._list.len()},r})(),Nm={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function _r(r){return r=Math.round(r),r<0?0:r>255?255:r}function BL(r){return r=Math.round(r),r<0?0:r>360?360:r}function Vs(r){return r<0?0:r>1?1:r}function jh(r){var e=r;return e.length&&e.charAt(e.length-1)==="%"?_r(parseFloat(e)/100*255):_r(parseInt(e,10))}function Xn(r){var e=r;return e.length&&e.charAt(e.length-1)==="%"?Vs(parseFloat(e)/100):Vs(parseFloat(e))}function tv(r,e,t){return t<0?t+=1:t>1&&(t-=1),t*6<1?r+(e-r)*t*6:t*2<1?e:t*3<2?r+(e-r)*(2/3-t)*6:r}function Ba(r,e,t){return r+(e-r)*t}function Ke(r,e,t,a,n){return r[0]=e,r[1]=t,r[2]=a,r[3]=n,r}function Lp(r,e){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r}var Kw=new fl(20),Bl=null;function _i(r,e){Bl&&Lp(Bl,e),Bl=Kw.put(r,Bl||e.slice())}function Ue(r,e){if(r){e=e||[];var t=Kw.get(r);if(t)return Lp(e,t);r=r+"";var a=r.replace(/ /g,"").toLowerCase();if(a in Nm)return Lp(e,Nm[a]),_i(r,e),e;var n=a.length;if(a.charAt(0)==="#"){if(n===4||n===5){var i=parseInt(a.slice(1,4),16);if(!(i>=0&&i<=4095)){Ke(e,0,0,0,1);return}return Ke(e,(i&3840)>>4|(i&3840)>>8,i&240|(i&240)>>4,i&15|(i&15)<<4,n===5?parseInt(a.slice(4),16)/15:1),_i(r,e),e}else if(n===7||n===9){var i=parseInt(a.slice(1,7),16);if(!(i>=0&&i<=16777215)){Ke(e,0,0,0,1);return}return Ke(e,(i&16711680)>>16,(i&65280)>>8,i&255,n===9?parseInt(a.slice(7),16)/255:1),_i(r,e),e}return}var o=a.indexOf("("),s=a.indexOf(")");if(o!==-1&&s+1===n){var l=a.substr(0,o),u=a.substr(o+1,s-(o+1)).split(","),f=1;switch(l){case"rgba":if(u.length!==4)return u.length===3?Ke(e,+u[0],+u[1],+u[2],1):Ke(e,0,0,0,1);f=Xn(u.pop());case"rgb":if(u.length>=3)return Ke(e,jh(u[0]),jh(u[1]),jh(u[2]),u.length===3?f:Xn(u[3])),_i(r,e),e;Ke(e,0,0,0,1);return;case"hsla":if(u.length!==4){Ke(e,0,0,0,1);return}return u[3]=Xn(u[3]),Pp(u,e),_i(r,e),e;case"hsl":if(u.length!==3){Ke(e,0,0,0,1);return}return Pp(u,e),_i(r,e),e;default:return}}Ke(e,0,0,0,1)}}function Pp(r,e){var t=(parseFloat(r[0])%360+360)%360/360,a=Xn(r[1]),n=Xn(r[2]),i=n<=.5?n*(a+1):n+a-n*a,o=n*2-i;return e=e||[],Ke(e,_r(tv(o,i,t+1/3)*255),_r(tv(o,i,t)*255),_r(tv(o,i,t-1/3)*255),1),r.length===4&&(e[3]=r[3]),e}function VL(r){if(r){var e=r[0]/255,t=r[1]/255,a=r[2]/255,n=Math.min(e,t,a),i=Math.max(e,t,a),o=i-n,s=(i+n)/2,l,u;if(o===0)l=0,u=0;else{s<.5?u=o/(i+n):u=o/(2-i-n);var f=((i-e)/6+o/2)/o,h=((i-t)/6+o/2)/o,v=((i-a)/6+o/2)/o;e===i?l=v-h:t===i?l=1/3+f-v:a===i&&(l=2/3+h-f),l<0&&(l+=1),l>1&&(l-=1)}var c=[l*360,u,s];return r[3]!=null&&c.push(r[3]),c}}function Rp(r,e){var t=Ue(r);if(t){for(var a=0;a<3;a++)e<0?t[a]=t[a]*(1-e)|0:t[a]=(255-t[a])*e+t[a]|0,t[a]>255?t[a]=255:t[a]<0&&(t[a]=0);return ia(t,t.length===4?"rgba":"rgb")}}function ev(r,e,t){if(!(!(e&&e.length)||!(r>=0&&r<=1))){t=t||[];var a=r*(e.length-1),n=Math.floor(a),i=Math.ceil(a),o=e[n],s=e[i],l=a-n;return t[0]=_r(Ba(o[0],s[0],l)),t[1]=_r(Ba(o[1],s[1],l)),t[2]=_r(Ba(o[2],s[2],l)),t[3]=Vs(Ba(o[3],s[3],l)),t}}function zL(r,e,t){if(!(!(e&&e.length)||!(r>=0&&r<=1))){var a=r*(e.length-1),n=Math.floor(a),i=Math.ceil(a),o=Ue(e[n]),s=Ue(e[i]),l=a-n,u=ia([_r(Ba(o[0],s[0],l)),_r(Ba(o[1],s[1],l)),_r(Ba(o[2],s[2],l)),Vs(Ba(o[3],s[3],l))],"rgba");return t?{color:u,leftIndex:n,rightIndex:i,value:a}:u}}function bs(r,e,t,a){var n=Ue(r);if(r)return n=VL(n),e!=null&&(n[0]=BL(e)),t!=null&&(n[1]=Xn(t)),a!=null&&(n[2]=Xn(a)),ia(Pp(n),"rgba")}function hf(r,e){var t=Ue(r);if(t&&e!=null)return t[3]=Vs(e),ia(t,"rgba")}function ia(r,e){if(!(!r||!r.length)){var t=r[0]+","+r[1]+","+r[2];return(e==="rgba"||e==="hsva"||e==="hsla")&&(t+=","+r[3]),e+"("+t+")"}}function vf(r,e){var t=Ue(r);return t?(.299*t[0]+.587*t[1]+.114*t[2])*t[3]/255+(1-t[3])*e:0}var Bm=new fl(100);function Ep(r){if(Y(r)){var e=Bm.get(r);return e||(e=Rp(r,-.1),Bm.put(r,e)),e}else if(nh(r)){var t=V({},r);return t.colorStops=G(r.colorStops,function(a){return{offset:a.offset,color:Rp(a.color,-.1)}}),t}return r}var cf=Math.round;function zs(r){var e;if(!r||r==="transparent")r="none";else if(typeof r=="string"&&r.indexOf("rgba")>-1){var t=Ue(r);t&&(r="rgb("+t[0]+","+t[1]+","+t[2]+")",e=t[3])}return{color:r,opacity:e??1}}var Vm=1e-4;function Va(r){return r-Vm}function Vl(r){return cf(r*1e3)/1e3}function kp(r){return cf(r*1e4)/1e4}function GL(r){return"matrix("+Vl(r[0])+","+Vl(r[1])+","+Vl(r[2])+","+Vl(r[3])+","+kp(r[4])+","+kp(r[5])+")"}var FL={left:"start",right:"end",center:"middle",middle:"middle"};function HL(r,e,t){return t==="top"?r+=e/2:t==="bottom"&&(r-=e/2),r}function WL(r){return r&&(r.shadowBlur||r.shadowOffsetX||r.shadowOffsetY)}function UL(r){var e=r.style,t=r.getGlobalScale();return[e.shadowColor,(e.shadowBlur||0).toFixed(2),(e.shadowOffsetX||0).toFixed(2),(e.shadowOffsetY||0).toFixed(2),t[0],t[1]].join(",")}function Qw(r){return r&&!!r.image}function YL(r){return r&&!!r.svgElement}function Sg(r){return Qw(r)||YL(r)}function Jw(r){return r.type==="linear"}function jw(r){return r.type==="radial"}function tT(r){return r&&(r.type==="linear"||r.type==="radial")}function sh(r){return"url(#"+r+")"}function eT(r){var e=r.getGlobalScale(),t=Math.max(e[0],e[1]);return Math.max(Math.ceil(Math.log(t)/Math.log(10)),1)}function rT(r){var e=r.x||0,t=r.y||0,a=(r.rotation||0)*Bu,n=st(r.scaleX,1),i=st(r.scaleY,1),o=r.skewX||0,s=r.skewY||0,l=[];return(e||t)&&l.push("translate("+e+"px,"+t+"px)"),a&&l.push("rotate("+a+")"),(n!==1||i!==1)&&l.push("scale("+n+","+i+")"),(o||s)&&l.push("skew("+cf(o*Bu)+"deg, "+cf(s*Bu)+"deg)"),l.join(" ")}var $L=(function(){return yt.hasGlobalWindow&&Q(window.btoa)?function(r){return window.btoa(unescape(encodeURIComponent(r)))}:typeof Buffer<"u"?function(r){return Buffer.from(r).toString("base64")}:function(r){return null}})(),Op=Array.prototype.slice;function Jr(r,e,t){return(e-r)*t+r}function rv(r,e,t,a){for(var n=e.length,i=0;ia?e:r,i=Math.min(t,a),o=n[i-1]||{color:[0,0,0,0],offset:0},s=i;so;if(s)a.length=o;else for(var l=i;l=1},r.prototype.getAdditiveTrack=function(){return this._additiveTrack},r.prototype.addKeyframe=function(e,t,a){this._needsSort=!0;var n=this.keyframes,i=n.length,o=!1,s=Gm,l=t;if(me(t)){var u=KL(t);s=u,(u===1&&!wt(t[0])||u===2&&!wt(t[0][0]))&&(o=!0)}else if(wt(t)&&!Os(t))s=Gl;else if(Y(t))if(!isNaN(+t))s=Gl;else{var f=Ue(t);f&&(l=f,s=us)}else if(nh(t)){var h=V({},l);h.colorStops=G(t.colorStops,function(c){return{offset:c.offset,color:Ue(c.color)}}),Jw(t)?s=Np:jw(t)&&(s=Bp),l=h}i===0?this.valType=s:(s!==this.valType||s===Gm)&&(o=!0),this.discrete=this.discrete||o;var v={time:e,value:l,rawValue:t,percent:0};return a&&(v.easing=a,v.easingFunc=Q(a)?a:xs[a]||_g(a)),n.push(v),v},r.prototype.prepare=function(e,t){var a=this.keyframes;this._needsSort&&a.sort(function(d,g){return d.time-g.time});for(var n=this.valType,i=a.length,o=a[i-1],s=this.discrete,l=Fl(n),u=Fm(n),f=0;f=0&&!(o[f].percent<=t);f--);f=v(f,s-2)}else{for(f=h;ft);f++);f=v(f-1,s-2)}p=o[f+1],c=o[f]}if(c&&p){this._lastFr=f,this._lastFrP=t;var g=p.percent-c.percent,y=g===0?1:v((t-c.percent)/g,1);p.easingFunc&&(y=p.easingFunc(y));var m=a?this._additiveValue:u?Bo:e[l];if((Fl(i)||u)&&!m&&(m=this._additiveValue=[]),this.discrete)e[l]=y<1?c.rawValue:p.rawValue;else if(Fl(i))i===Hu?rv(m,c[n],p[n],y):XL(m,c[n],p[n],y);else if(Fm(i)){var _=c[n],S=p[n],b=i===Np;e[l]={type:b?"linear":"radial",x:Jr(_.x,S.x,y),y:Jr(_.y,S.y,y),colorStops:G(_.colorStops,function(w,T){var A=S.colorStops[T];return{offset:Jr(w.offset,A.offset,y),color:Fu(rv([],w.color,A.color,y))}}),global:S.global},b?(e[l].x2=Jr(_.x2,S.x2,y),e[l].y2=Jr(_.y2,S.y2,y)):e[l].r=Jr(_.r,S.r,y)}else if(u)rv(m,c[n],p[n],y),a||(e[l]=Fu(m));else{var x=Jr(c[n],p[n],y);a?this._additiveValue=x:e[l]=x}a&&this._addToTarget(e)}}},r.prototype._addToTarget=function(e){var t=this.valType,a=this.propName,n=this._additiveValue;t===Gl?e[a]=e[a]+n:t===us?(Ue(e[a],Bo),zl(Bo,Bo,n,1),e[a]=Fu(Bo)):t===Hu?zl(e[a],e[a],n,1):t===aT&&zm(e[a],e[a],n,1)},r})(),xg=(function(){function r(e,t,a,n){if(this._tracks={},this._trackKeys=[],this._maxTime=0,this._started=0,this._clip=null,this._target=e,this._loop=t,t&&n){vg("Can' use additive animation on looped animation.");return}this._additiveAnimators=n,this._allowDiscrete=a}return r.prototype.getMaxTime=function(){return this._maxTime},r.prototype.getDelay=function(){return this._delay},r.prototype.getLoop=function(){return this._loop},r.prototype.getTarget=function(){return this._target},r.prototype.changeTarget=function(e){this._target=e},r.prototype.when=function(e,t,a){return this.whenWithKeys(e,t,_t(t),a)},r.prototype.whenWithKeys=function(e,t,a,n){for(var i=this._tracks,o=0;o0&&l.addKeyframe(0,ws(u),n),this._trackKeys.push(s)}l.addKeyframe(e,ws(t[s]),n)}return this._maxTime=Math.max(this._maxTime,e),this},r.prototype.pause=function(){this._clip.pause(),this._paused=!0},r.prototype.resume=function(){this._clip.resume(),this._paused=!1},r.prototype.isPaused=function(){return!!this._paused},r.prototype.duration=function(e){return this._maxTime=e,this._force=!0,this},r.prototype._doneCallback=function(){this._setTracksFinished(),this._clip=null;var e=this._doneCbs;if(e)for(var t=e.length,a=0;a0)){this._started=1;for(var t=this,a=[],n=this._maxTime||0,i=0;i1){var s=o.pop();i.addKeyframe(s.time,e[n]),i.prepare(this._maxTime,i.getAdditiveTrack())}}}},r})();function $i(){return new Date().getTime()}var JL=(function(r){k(e,r);function e(t){var a=r.call(this)||this;return a._running=!1,a._time=0,a._pausedTime=0,a._pauseStart=0,a._paused=!1,t=t||{},a.stage=t.stage||{},a}return e.prototype.addClip=function(t){t.animation&&this.removeClip(t),this._head?(this._tail.next=t,t.prev=this._tail,t.next=null,this._tail=t):this._head=this._tail=t,t.animation=this},e.prototype.addAnimator=function(t){t.animation=this;var a=t.getClip();a&&this.addClip(a)},e.prototype.removeClip=function(t){if(t.animation){var a=t.prev,n=t.next;a?a.next=n:this._head=n,n?n.prev=a:this._tail=a,t.next=t.prev=t.animation=null}},e.prototype.removeAnimator=function(t){var a=t.getClip();a&&this.removeClip(a),t.animation=null},e.prototype.update=function(t){for(var a=$i()-this._pausedTime,n=a-this._time,i=this._head;i;){var o=i.next,s=i.step(a,n);s&&(i.ondestroy(),this.removeClip(i)),i=o}this._time=a,t||(this.trigger("frame",n),this.stage.update&&this.stage.update())},e.prototype._startLoop=function(){var t=this;this._running=!0;function a(){t._running&&(lf(a),!t._paused&&t.update())}lf(a)},e.prototype.start=function(){this._running||(this._time=$i(),this._pausedTime=0,this._startLoop())},e.prototype.stop=function(){this._running=!1},e.prototype.pause=function(){this._paused||(this._pauseStart=$i(),this._paused=!0)},e.prototype.resume=function(){this._paused&&(this._pausedTime+=$i()-this._pauseStart,this._paused=!1)},e.prototype.clear=function(){for(var t=this._head;t;){var a=t.next;t.prev=t.next=t.animation=null,t=a}this._head=this._tail=null},e.prototype.isFinished=function(){return this._head==null},e.prototype.animate=function(t,a){a=a||{},this.start();var n=new xg(t,a.loop);return this.addAnimator(n),n},e})(lr),jL=300,av=yt.domSupported,nv=(function(){var r=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],e=["touchstart","touchend","touchmove"],t={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},a=G(r,function(n){var i=n.replace("mouse","pointer");return t.hasOwnProperty(i)?i:n});return{mouse:r,touch:e,pointer:a}})(),Hm={mouse:["mousemove","mouseup"],pointer:["pointermove","pointerup"]},Wm=!1;function Vp(r){var e=r.pointerType;return e==="pen"||e==="touch"}function tP(r){r.touching=!0,r.touchTimer!=null&&(clearTimeout(r.touchTimer),r.touchTimer=null),r.touchTimer=setTimeout(function(){r.touching=!1,r.touchTimer=null},700)}function iv(r){r&&(r.zrByTouch=!0)}function eP(r,e){return Qe(r.dom,new rP(r,e),!0)}function nT(r,e){for(var t=e,a=!1;t&&t.nodeType!==9&&!(a=t.domBelongToZr||t!==e&&t===r.painterRoot);)t=t.parentNode;return a}var rP=(function(){function r(e,t){this.stopPropagation=$t,this.stopImmediatePropagation=$t,this.preventDefault=$t,this.type=t.type,this.target=this.currentTarget=e.dom,this.pointerType=t.pointerType,this.clientX=t.clientX,this.clientY=t.clientY}return r})(),pr={mousedown:function(r){r=Qe(this.dom,r),this.__mayPointerCapture=[r.zrX,r.zrY],this.trigger("mousedown",r)},mousemove:function(r){r=Qe(this.dom,r);var e=this.__mayPointerCapture;e&&(r.zrX!==e[0]||r.zrY!==e[1])&&this.__togglePointerCapture(!0),this.trigger("mousemove",r)},mouseup:function(r){r=Qe(this.dom,r),this.__togglePointerCapture(!1),this.trigger("mouseup",r)},mouseout:function(r){r=Qe(this.dom,r);var e=r.toElement||r.relatedTarget;nT(this,e)||(this.__pointerCapturing&&(r.zrEventControl="no_globalout"),this.trigger("mouseout",r))},wheel:function(r){Wm=!0,r=Qe(this.dom,r),this.trigger("mousewheel",r)},mousewheel:function(r){Wm||(r=Qe(this.dom,r),this.trigger("mousewheel",r))},touchstart:function(r){r=Qe(this.dom,r),iv(r),this.__lastTouchMoment=new Date,this.handler.processGesture(r,"start"),pr.mousemove.call(this,r),pr.mousedown.call(this,r)},touchmove:function(r){r=Qe(this.dom,r),iv(r),this.handler.processGesture(r,"change"),pr.mousemove.call(this,r)},touchend:function(r){r=Qe(this.dom,r),iv(r),this.handler.processGesture(r,"end"),pr.mouseup.call(this,r),+new Date-+this.__lastTouchMoment$m||r<-$m}var un=[],Si=[],sv=We(),lv=Math.abs,ea=(function(){function r(){}return r.prototype.getLocalTransform=function(e){return r.getLocalTransform(this,e)},r.prototype.setPosition=function(e){this.x=e[0],this.y=e[1]},r.prototype.setScale=function(e){this.scaleX=e[0],this.scaleY=e[1]},r.prototype.setSkew=function(e){this.skewX=e[0],this.skewY=e[1]},r.prototype.setOrigin=function(e){this.originX=e[0],this.originY=e[1]},r.prototype.needLocalTransform=function(){return ln(this.rotation)||ln(this.x)||ln(this.y)||ln(this.scaleX-1)||ln(this.scaleY-1)||ln(this.skewX)||ln(this.skewY)},r.prototype.updateTransform=function(){var e=this.parent&&this.parent.transform,t=this.needLocalTransform(),a=this.transform;if(!(t||e)){a&&(Ym(a),this.invTransform=null);return}a=a||We(),t?this.getLocalTransform(a):Ym(a),e&&(t?na(a,e,a):yg(a,e)),this.transform=a,this._resolveGlobalScaleRatio(a)},r.prototype._resolveGlobalScaleRatio=function(e){var t=this.globalScaleRatio;if(t!=null&&t!==1){this.getGlobalScale(un);var a=un[0]<0?-1:1,n=un[1]<0?-1:1,i=((un[0]-a)*t+a)/un[0]||0,o=((un[1]-n)*t+n)/un[1]||0;e[0]*=i,e[1]*=i,e[2]*=o,e[3]*=o}this.invTransform=this.invTransform||We(),_o(this.invTransform,e)},r.prototype.getComputedTransform=function(){for(var e=this,t=[];e;)t.push(e),e=e.parent;for(;e=t.pop();)e.updateTransform();return this.transform},r.prototype.setLocalTransform=function(e){if(e){var t=e[0]*e[0]+e[1]*e[1],a=e[2]*e[2]+e[3]*e[3],n=Math.atan2(e[1],e[0]),i=Math.PI/2+n-Math.atan2(e[3],e[2]);a=Math.sqrt(a)*Math.cos(i),t=Math.sqrt(t),this.skewX=i,this.skewY=0,this.rotation=-n,this.x=+e[4],this.y=+e[5],this.scaleX=t,this.scaleY=a,this.originX=0,this.originY=0}},r.prototype.decomposeTransform=function(){if(this.transform){var e=this.parent,t=this.transform;e&&e.transform&&(e.invTransform=e.invTransform||We(),na(Si,e.invTransform,t),t=Si);var a=this.originX,n=this.originY;(a||n)&&(sv[4]=a,sv[5]=n,na(Si,t,sv),Si[4]-=a,Si[5]-=n,t=Si),this.setLocalTransform(t)}},r.prototype.getGlobalScale=function(e){var t=this.transform;return e=e||[],t?(e[0]=Math.sqrt(t[0]*t[0]+t[1]*t[1]),e[1]=Math.sqrt(t[2]*t[2]+t[3]*t[3]),t[0]<0&&(e[0]=-e[0]),t[3]<0&&(e[1]=-e[1]),e):(e[0]=1,e[1]=1,e)},r.prototype.transformCoordToLocal=function(e,t){var a=[e,t],n=this.invTransform;return n&&he(a,a,n),a},r.prototype.transformCoordToGlobal=function(e,t){var a=[e,t],n=this.transform;return n&&he(a,a,n),a},r.prototype.getLineScale=function(){var e=this.transform;return e&&lv(e[0]-1)>1e-10&&lv(e[3]-1)>1e-10?Math.sqrt(lv(e[0]*e[3]-e[2]*e[1])):1},r.prototype.copyTransform=function(e){oT(this,e)},r.getLocalTransform=function(e,t){t=t||[];var a=e.originX||0,n=e.originY||0,i=e.scaleX,o=e.scaleY,s=e.anchorX,l=e.anchorY,u=e.rotation||0,f=e.x,h=e.y,v=e.skewX?Math.tan(e.skewX):0,c=e.skewY?Math.tan(-e.skewY):0;if(a||n||s||l){var p=a+s,d=n+l;t[4]=-p*i-v*d*o,t[5]=-d*o-c*p*i}else t[4]=t[5]=0;return t[0]=i,t[3]=o,t[1]=c*i,t[2]=v*o,u&&fi(t,t,u),t[4]+=a+f,t[5]+=n+h,t},r.initDefaultProps=(function(){var e=r.prototype;e.scaleX=e.scaleY=e.globalScaleRatio=1,e.x=e.y=e.originX=e.originY=e.skewX=e.skewY=e.rotation=e.anchorX=e.anchorY=0})(),r})(),Wr=["x","y","originX","originY","anchorX","anchorY","rotation","scaleX","scaleY","skewX","skewY"];function oT(r,e){for(var t=0;t"u"&&typeof self<"u"?yt.worker=!0:!yt.hasGlobalWindow||"Deno"in window?(yt.node=!0,yt.svgSupported=!0):FI(navigator.userAgent,yt);function FI(r,e){var t=e.browser,a=r.match(/Firefox\/([\d.]+)/),n=r.match(/MSIE\s([\d.]+)/)||r.match(/Trident\/.+?rv:(([\d.]+))/),i=r.match(/Edge?\/([\d.]+)/),o=/micromessenger/i.test(r);a&&(t.firefox=!0,t.version=a[1]),n&&(t.ie=!0,t.version=n[1]),i&&(t.edge=!0,t.version=i[1],t.newEdge=+i[1].split(".")[0]>18),o&&(t.weChat=!0),e.svgSupported=typeof SVGRect<"u",e.touchEventsSupported="ontouchstart"in window&&!t.ie&&!t.edge,e.pointerEventsSupported="onpointerdown"in window&&(t.edge||t.ie&&+t.version>=11),e.domSupported=typeof document<"u";var s=document.documentElement.style;e.transform3dSupported=(t.ie&&"transition"in s||t.edge||"WebKitCSSMatrix"in window&&"m11"in new WebKitCSSMatrix||"MozPerspective"in s)&&!("OTransition"in s),e.transformSupported=e.transform3dSupported||t.ie&&+t.version>=9}var ug=12,Pw="sans-serif",$a=ug+"px "+Pw,HI=20,WI=100,UI="007LLmW'55;N0500LLLLLLLLLL00NNNLzWW\\\\WQb\\0FWLg\\bWb\\WQ\\WrWWQ000CL5LLFLL0LL**F*gLLLL5F0LF\\FFF5.5N";function YI(r){var e={};if(typeof JSON>"u")return e;for(var t=0;t=0)s=o*t.length;else for(var l=0;l>1)%2;s.cssText=["position: absolute","visibility: hidden","padding: 0","margin: 0","border-width: 0","user-select: none","width:0","height:0",a[l]+":0",n[u]+":0",a[1-l]+":auto",n[1-u]+":auto",""].join("!important;"),r.appendChild(o),t.push(o)}return t}function vL(r,e,t){for(var a=t?"invTrans":"trans",n=e[a],i=e.srcCoords,o=[],s=[],l=!0,u=0;u<4;u++){var f=r[u].getBoundingClientRect(),h=2*u,v=f.left,c=f.top;o.push(v,c),l=l&&i&&v===i[h]&&c===i[h+1],s.push(r[u].offsetLeft,r[u].offsetTop)}return l&&n?n:(e.srcCoords=o,e[a]=t?Tm(s,o):Tm(o,s))}function Vw(r){return r.nodeName.toUpperCase()==="CANVAS"}var cL=/([&<>"'])/g,pL={"&":"&","<":"<",">":">",'"':""","'":"'"};function Te(r){return r==null?"":(r+"").replace(cL,function(e,t){return pL[t]})}var dL=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Xh=[],gL=yt.browser.firefox&&+yt.browser.version.split(".")[0]<39;function Dp(r,e,t,a){return t=t||{},a?Cm(r,e,t):gL&&e.layerX!=null&&e.layerX!==e.offsetX?(t.zrX=e.layerX,t.zrY=e.layerY):e.offsetX!=null?(t.zrX=e.offsetX,t.zrY=e.offsetY):Cm(r,e,t),t}function Cm(r,e,t){if(yt.domSupported&&r.getBoundingClientRect){var a=e.clientX,n=e.clientY;if(Vw(r)){var i=r.getBoundingClientRect();t.zrX=a-i.left,t.zrY=n-i.top;return}else if(Cp(Xh,r,a,n)){t.zrX=Xh[0],t.zrY=Xh[1];return}}t.zrX=t.zrY=0}function gg(r){return r||window.event}function Qe(r,e,t){if(e=gg(e),e.zrX!=null)return e;var a=e.type,n=a&&a.indexOf("touch")>=0;if(n){var o=a!=="touchend"?e.targetTouches[0]:e.changedTouches[0];o&&Dp(r,o,e,t)}else{Dp(r,e,e,t);var i=yL(e);e.zrDelta=i?i/120:-(e.detail||0)/3}var s=e.button;return e.which==null&&s!==void 0&&dL.test(e.type)&&(e.which=s&1?1:s&2?3:s&4?2:0),e}function yL(r){var e=r.wheelDelta;if(e)return e;var t=r.deltaX,a=r.deltaY;if(t==null||a==null)return e;var n=Math.abs(a!==0?a:t),i=a>0?-1:a<0?1:t>0?-1:1;return 3*n*i}function Mp(r,e,t,a){r.addEventListener(e,t,a)}function mL(r,e,t,a){r.removeEventListener(e,t,a)}var la=function(r){r.preventDefault(),r.stopPropagation(),r.cancelBubble=!0};function Dm(r){return r.which===2||r.which===3}var _L=(function(){function r(){this._track=[]}return r.prototype.recognize=function(e,t,a){return this._doTrack(e,t,a),this._recognize(e)},r.prototype.clear=function(){return this._track.length=0,this},r.prototype._doTrack=function(e,t,a){var n=e.touches;if(n){for(var i={points:[],touches:[],target:t,event:e},o=0,s=n.length;o1&&a&&a.length>1){var i=Mm(a)/Mm(n);!isFinite(i)&&(i=1),e.pinchScale=i;var o=SL(a);return e.pinchX=o[0],e.pinchY=o[1],{type:"pinch",target:r[0].target,event:e}}}}};function We(){return[1,0,0,1,0,0]}function oh(r){return r[0]=1,r[1]=0,r[2]=0,r[3]=1,r[4]=0,r[5]=0,r}function yg(r,e){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4],r[5]=e[5],r}function na(r,e,t){var a=e[0]*t[0]+e[2]*t[1],n=e[1]*t[0]+e[3]*t[1],i=e[0]*t[2]+e[2]*t[3],o=e[1]*t[2]+e[3]*t[3],s=e[0]*t[4]+e[2]*t[5]+e[4],l=e[1]*t[4]+e[3]*t[5]+e[5];return r[0]=a,r[1]=n,r[2]=i,r[3]=o,r[4]=s,r[5]=l,r}function Hr(r,e,t){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r[4]=e[4]+t[0],r[5]=e[5]+t[1],r}function fi(r,e,t,a){a===void 0&&(a=[0,0]);var n=e[0],i=e[2],o=e[4],s=e[1],l=e[3],u=e[5],f=Math.sin(t),h=Math.cos(t);return r[0]=n*h+s*f,r[1]=-n*f+s*h,r[2]=i*h+l*f,r[3]=-i*f+h*l,r[4]=h*(o-a[0])+f*(u-a[1])+a[0],r[5]=h*(u-a[1])-f*(o-a[0])+a[1],r}function mg(r,e,t){var a=t[0],n=t[1];return r[0]=e[0]*a,r[1]=e[1]*n,r[2]=e[2]*a,r[3]=e[3]*n,r[4]=e[4]*a,r[5]=e[5]*n,r}function _o(r,e){var t=e[0],a=e[2],n=e[4],i=e[1],o=e[3],s=e[5],l=t*o-i*a;return l?(l=1/l,r[0]=o*l,r[1]=-i*l,r[2]=-a*l,r[3]=t*l,r[4]=(a*s-o*n)*l,r[5]=(i*n-t*s)*l,r):null}function xL(r){var e=We();return yg(e,r),e}var ft=(function(){function r(e,t){this.x=e||0,this.y=t||0}return r.prototype.copy=function(e){return this.x=e.x,this.y=e.y,this},r.prototype.clone=function(){return new r(this.x,this.y)},r.prototype.set=function(e,t){return this.x=e,this.y=t,this},r.prototype.equal=function(e){return e.x===this.x&&e.y===this.y},r.prototype.add=function(e){return this.x+=e.x,this.y+=e.y,this},r.prototype.scale=function(e){this.x*=e,this.y*=e},r.prototype.scaleAndAdd=function(e,t){this.x+=e.x*t,this.y+=e.y*t},r.prototype.sub=function(e){return this.x-=e.x,this.y-=e.y,this},r.prototype.dot=function(e){return this.x*e.x+this.y*e.y},r.prototype.len=function(){return Math.sqrt(this.x*this.x+this.y*this.y)},r.prototype.lenSquare=function(){return this.x*this.x+this.y*this.y},r.prototype.normalize=function(){var e=this.len();return this.x/=e,this.y/=e,this},r.prototype.distance=function(e){var t=this.x-e.x,a=this.y-e.y;return Math.sqrt(t*t+a*a)},r.prototype.distanceSquare=function(e){var t=this.x-e.x,a=this.y-e.y;return t*t+a*a},r.prototype.negate=function(){return this.x=-this.x,this.y=-this.y,this},r.prototype.transform=function(e){if(e){var t=this.x,a=this.y;return this.x=e[0]*t+e[2]*a+e[4],this.y=e[1]*t+e[3]*a+e[5],this}},r.prototype.toArray=function(e){return e[0]=this.x,e[1]=this.y,e},r.prototype.fromArray=function(e){this.x=e[0],this.y=e[1]},r.set=function(e,t,a){e.x=t,e.y=a},r.copy=function(e,t){e.x=t.x,e.y=t.y},r.len=function(e){return Math.sqrt(e.x*e.x+e.y*e.y)},r.lenSquare=function(e){return e.x*e.x+e.y*e.y},r.dot=function(e,t){return e.x*t.x+e.y*t.y},r.add=function(e,t,a){e.x=t.x+a.x,e.y=t.y+a.y},r.sub=function(e,t,a){e.x=t.x-a.x,e.y=t.y-a.y},r.scale=function(e,t,a){e.x=t.x*a,e.y=t.y*a},r.scaleAndAdd=function(e,t,a,n){e.x=t.x+a.x*n,e.y=t.y+a.y*n},r.lerp=function(e,t,a,n){var i=1-n;e.x=i*t.x+n*a.x,e.y=i*t.y+n*a.y},r})(),El=Math.min,kl=Math.max,an=new ft,nn=new ft,on=new ft,sn=new ft,Eo=new ft,ko=new ft,ht=(function(){function r(e,t,a,n){a<0&&(e=e+a,a=-a),n<0&&(t=t+n,n=-n),this.x=e,this.y=t,this.width=a,this.height=n}return r.prototype.union=function(e){var t=El(e.x,this.x),a=El(e.y,this.y);isFinite(this.x)&&isFinite(this.width)?this.width=kl(e.x+e.width,this.x+this.width)-t:this.width=e.width,isFinite(this.y)&&isFinite(this.height)?this.height=kl(e.y+e.height,this.y+this.height)-a:this.height=e.height,this.x=t,this.y=a},r.prototype.applyTransform=function(e){r.applyTransform(this,this,e)},r.prototype.calculateTransform=function(e){var t=this,a=e.width/t.width,n=e.height/t.height,i=We();return Hr(i,i,[-t.x,-t.y]),mg(i,i,[a,n]),Hr(i,i,[e.x,e.y]),i},r.prototype.intersect=function(e,t){if(!e)return!1;e instanceof r||(e=r.create(e));var a=this,n=a.x,i=a.x+a.width,o=a.y,s=a.y+a.height,l=e.x,u=e.x+e.width,f=e.y,h=e.y+e.height,v=!(ip&&(p=_,dp&&(p=S,y=a.x&&e<=a.x+a.width&&t>=a.y&&t<=a.y+a.height},r.prototype.clone=function(){return new r(this.x,this.y,this.width,this.height)},r.prototype.copy=function(e){r.copy(this,e)},r.prototype.plain=function(){return{x:this.x,y:this.y,width:this.width,height:this.height}},r.prototype.isFinite=function(){return isFinite(this.x)&&isFinite(this.y)&&isFinite(this.width)&&isFinite(this.height)},r.prototype.isZero=function(){return this.width===0||this.height===0},r.create=function(e){return new r(e.x,e.y,e.width,e.height)},r.copy=function(e,t){e.x=t.x,e.y=t.y,e.width=t.width,e.height=t.height},r.applyTransform=function(e,t,a){if(!a){e!==t&&r.copy(e,t);return}if(a[1]<1e-5&&a[1]>-1e-5&&a[2]<1e-5&&a[2]>-1e-5){var n=a[0],i=a[3],o=a[4],s=a[5];e.x=t.x*n+o,e.y=t.y*i+s,e.width=t.width*n,e.height=t.height*i,e.width<0&&(e.x+=e.width,e.width=-e.width),e.height<0&&(e.y+=e.height,e.height=-e.height);return}an.x=on.x=t.x,an.y=sn.y=t.y,nn.x=sn.x=t.x+t.width,nn.y=on.y=t.y+t.height,an.transform(a),sn.transform(a),nn.transform(a),on.transform(a),e.x=El(an.x,nn.x,on.x,sn.x),e.y=El(an.y,nn.y,on.y,sn.y);var l=kl(an.x,nn.x,on.x,sn.x),u=kl(an.y,nn.y,on.y,sn.y);e.width=l-e.x,e.height=u-e.y},r})(),zw="silent";function bL(r,e,t){return{type:r,event:t,target:e.target,topTarget:e.topTarget,cancelBubble:!1,offsetX:t.zrX,offsetY:t.zrY,gestureEvent:t.gestureEvent,pinchX:t.pinchX,pinchY:t.pinchY,pinchScale:t.pinchScale,wheelDelta:t.zrDelta,zrByTouch:t.zrByTouch,which:t.which,stop:wL}}function wL(){la(this.event)}var TL=(function(r){k(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.handler=null,t}return e.prototype.dispose=function(){},e.prototype.setCursor=function(){},e})(lr),Oo=(function(){function r(e,t){this.x=e,this.y=t}return r})(),AL=["click","dblclick","mousewheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],qh=new ht(0,0,0,0),Gw=(function(r){k(e,r);function e(t,a,n,i,o){var s=r.call(this)||this;return s._hovered=new Oo(0,0),s.storage=t,s.painter=a,s.painterRoot=i,s._pointerSize=o,n=n||new TL,s.proxy=null,s.setHandlerProxy(n),s._draggingMgr=new lL(s),s}return e.prototype.setHandlerProxy=function(t){this.proxy&&this.proxy.dispose(),t&&(D(AL,function(a){t.on&&t.on(a,this[a],this)},this),t.handler=this),this.proxy=t},e.prototype.mousemove=function(t){var a=t.zrX,n=t.zrY,i=Fw(this,a,n),o=this._hovered,s=o.target;s&&!s.__zr&&(o=this.findHover(o.x,o.y),s=o.target);var l=this._hovered=i?new Oo(a,n):this.findHover(a,n),u=l.target,f=this.proxy;f.setCursor&&f.setCursor(u?u.cursor:"default"),s&&u!==s&&this.dispatchToElement(o,"mouseout",t),this.dispatchToElement(l,"mousemove",t),u&&u!==s&&this.dispatchToElement(l,"mouseover",t)},e.prototype.mouseout=function(t){var a=t.zrEventControl;a!=="only_globalout"&&this.dispatchToElement(this._hovered,"mouseout",t),a!=="no_globalout"&&this.trigger("globalout",{type:"globalout",event:t})},e.prototype.resize=function(){this._hovered=new Oo(0,0)},e.prototype.dispatch=function(t,a){var n=this[t];n&&n.call(this,a)},e.prototype.dispose=function(){this.proxy.dispose(),this.storage=null,this.proxy=null,this.painter=null},e.prototype.setCursorStyle=function(t){var a=this.proxy;a.setCursor&&a.setCursor(t)},e.prototype.dispatchToElement=function(t,a,n){t=t||{};var i=t.target;if(!(i&&i.silent)){for(var o="on"+a,s=bL(a,t,n);i&&(i[o]&&(s.cancelBubble=!!i[o].call(i,s)),i.trigger(a,s),i=i.__hostTarget?i.__hostTarget:i.parent,!s.cancelBubble););s.cancelBubble||(this.trigger(a,s),this.painter&&this.painter.eachOtherLayer&&this.painter.eachOtherLayer(function(l){typeof l[o]=="function"&&l[o].call(l,s),l.trigger&&l.trigger(a,s)}))}},e.prototype.findHover=function(t,a,n){var i=this.storage.getDisplayList(),o=new Oo(t,a);if(Im(i,o,t,a,n),this._pointerSize&&!o.target){for(var s=[],l=this._pointerSize,u=l/2,f=new ht(t-u,a-u,l,l),h=i.length-1;h>=0;h--){var v=i[h];v!==n&&!v.ignore&&!v.ignoreCoarsePointer&&(!v.parent||!v.parent.ignoreCoarsePointer)&&(qh.copy(v.getBoundingRect()),v.transform&&qh.applyTransform(v.transform),qh.intersect(f)&&s.push(v))}if(s.length)for(var c=4,p=Math.PI/12,d=Math.PI*2,g=0;g4)return;this._downPoint=null}this.dispatchToElement(i,r,e)}});function CL(r,e,t){if(r[r.rectHover?"rectContain":"contain"](e,t)){for(var a=r,n=void 0,i=!1;a;){if(a.ignoreClip&&(i=!0),!i){var o=a.getClipPath();if(o&&!o.contain(e,t))return!1}a.silent&&(n=!0);var s=a.__hostTarget;a=s||a.parent}return n?zw:!0}return!1}function Im(r,e,t,a,n){for(var i=r.length-1;i>=0;i--){var o=r[i],s=void 0;if(o!==n&&!o.ignore&&(s=CL(o,t,a))&&(!e.topTarget&&(e.topTarget=o),s!==zw)){e.target=o;break}}}function Fw(r,e,t){var a=r.painter;return e<0||e>a.getWidth()||t<0||t>a.getHeight()}var Hw=32,No=7;function DL(r){for(var e=0;r>=Hw;)e|=r&1,r>>=1;return r+e}function Lm(r,e,t,a){var n=e+1;if(n===t)return 1;if(a(r[n++],r[e])<0){for(;n=0;)n++;return n-e}function ML(r,e,t){for(t--;e>>1,n(i,r[l])<0?s=l:o=l+1;var u=a-o;switch(u){case 3:r[o+3]=r[o+2];case 2:r[o+2]=r[o+1];case 1:r[o+1]=r[o];break;default:for(;u>0;)r[o+u]=r[o+u-1],u--}r[o]=i}}function Kh(r,e,t,a,n,i){var o=0,s=0,l=1;if(i(r,e[t+n])>0){for(s=a-n;l0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=n,l+=n}else{for(s=n+1;ls&&(l=s);var u=o;o=n-l,l=n-u}for(o++;o>>1);i(r,e[t+f])>0?o=f+1:l=f}return l}function Qh(r,e,t,a,n,i){var o=0,s=0,l=1;if(i(r,e[t+n])<0){for(s=n+1;ls&&(l=s);var u=o;o=n-l,l=n-u}else{for(s=a-n;l=0;)o=l,l=(l<<1)+1,l<=0&&(l=s);l>s&&(l=s),o+=n,l+=n}for(o++;o>>1);i(r,e[t+f])<0?l=f:o=f+1}return l}function IL(r,e){var t=No,a,n,i=0,o=[];a=[],n=[];function s(c,p){a[i]=c,n[i]=p,i+=1}function l(){for(;i>1;){var c=i-2;if(c>=1&&n[c-1]<=n[c]+n[c+1]||c>=2&&n[c-2]<=n[c]+n[c-1])n[c-1]n[c+1])break;f(c)}}function u(){for(;i>1;){var c=i-2;c>0&&n[c-1]=No||w>=No);if(T)break;b<0&&(b=0),b+=2}if(t=b,t<1&&(t=1),p===1){for(y=0;y=0;y--)r[x+y]=r[b+y];r[S]=o[_];return}for(var w=t;;){var T=0,A=0,C=!1;do if(e(o[_],r[m])<0){if(r[S--]=r[m--],T++,A=0,--p===0){C=!0;break}}else if(r[S--]=o[_--],A++,T=0,--g===1){C=!0;break}while((T|A)=0;y--)r[x+y]=r[b+y];if(p===0){C=!0;break}}if(r[S--]=o[_--],--g===1){C=!0;break}if(A=g-Kh(r[m],o,0,g,g-1,e),A!==0){for(S-=A,_-=A,g-=A,x=S+1,b=_+1,y=0;y=No||A>=No);if(C)break;w<0&&(w=0),w+=2}if(t=w,t<1&&(t=1),g===1){for(S-=p,m-=p,x=S+1,b=m+1,y=p-1;y>=0;y--)r[x+y]=r[b+y];r[S]=o[_]}else{if(g===0)throw new Error;for(b=S-(g-1),y=0;ys&&(l=s),Pm(r,t,t+l,t+i,e),i=l}o.pushRun(t,i),o.mergeRuns(),n-=i,t+=i}while(n!==0);o.forceMergeRuns()}}var Fe=1,ls=2,Gi=4,Rm=!1;function Jh(){Rm||(Rm=!0,console.warn("z / z2 / zlevel of displayable is invalid, which may cause unexpected errors"))}function Em(r,e){return r.zlevel===e.zlevel?r.z===e.z?r.z2-e.z2:r.z-e.z:r.zlevel-e.zlevel}var LL=(function(){function r(){this._roots=[],this._displayList=[],this._displayListLen=0,this.displayableSortFunc=Em}return r.prototype.traverse=function(e,t){for(var a=0;a0&&(f.__clipPaths=[]),isNaN(f.z)&&(Jh(),f.z=0),isNaN(f.z2)&&(Jh(),f.z2=0),isNaN(f.zlevel)&&(Jh(),f.zlevel=0),this._displayList[this._displayListLen++]=f}var h=e.getDecalElement&&e.getDecalElement();h&&this._updateAndAddDisplayable(h,t,a);var v=e.getTextGuideLine();v&&this._updateAndAddDisplayable(v,t,a);var c=e.getTextContent();c&&this._updateAndAddDisplayable(c,t,a)}},r.prototype.addRoot=function(e){e.__zr&&e.__zr.storage===this||this._roots.push(e)},r.prototype.delRoot=function(e){if(e instanceof Array){for(var t=0,a=e.length;t=0&&this._roots.splice(n,1)},r.prototype.delAllRoots=function(){this._roots=[],this._displayList=[],this._displayListLen=0},r.prototype.getRoots=function(){return this._roots},r.prototype.dispose=function(){this._displayList=null,this._roots=null},r})(),lf;lf=yt.hasGlobalWindow&&(window.requestAnimationFrame&&window.requestAnimationFrame.bind(window)||window.msRequestAnimationFrame&&window.msRequestAnimationFrame.bind(window)||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame)||function(r){return setTimeout(r,16)};var xs={linear:function(r){return r},quadraticIn:function(r){return r*r},quadraticOut:function(r){return r*(2-r)},quadraticInOut:function(r){return(r*=2)<1?.5*r*r:-.5*(--r*(r-2)-1)},cubicIn:function(r){return r*r*r},cubicOut:function(r){return--r*r*r+1},cubicInOut:function(r){return(r*=2)<1?.5*r*r*r:.5*((r-=2)*r*r+2)},quarticIn:function(r){return r*r*r*r},quarticOut:function(r){return 1- --r*r*r*r},quarticInOut:function(r){return(r*=2)<1?.5*r*r*r*r:-.5*((r-=2)*r*r*r-2)},quinticIn:function(r){return r*r*r*r*r},quinticOut:function(r){return--r*r*r*r*r+1},quinticInOut:function(r){return(r*=2)<1?.5*r*r*r*r*r:.5*((r-=2)*r*r*r*r+2)},sinusoidalIn:function(r){return 1-Math.cos(r*Math.PI/2)},sinusoidalOut:function(r){return Math.sin(r*Math.PI/2)},sinusoidalInOut:function(r){return .5*(1-Math.cos(Math.PI*r))},exponentialIn:function(r){return r===0?0:Math.pow(1024,r-1)},exponentialOut:function(r){return r===1?1:1-Math.pow(2,-10*r)},exponentialInOut:function(r){return r===0?0:r===1?1:(r*=2)<1?.5*Math.pow(1024,r-1):.5*(-Math.pow(2,-10*(r-1))+2)},circularIn:function(r){return 1-Math.sqrt(1-r*r)},circularOut:function(r){return Math.sqrt(1- --r*r)},circularInOut:function(r){return(r*=2)<1?-.5*(Math.sqrt(1-r*r)-1):.5*(Math.sqrt(1-(r-=2)*r)+1)},elasticIn:function(r){var e,t=.1,a=.4;return r===0?0:r===1?1:(!t||t<1?(t=1,e=a/4):e=a*Math.asin(1/t)/(2*Math.PI),-(t*Math.pow(2,10*(r-=1))*Math.sin((r-e)*(2*Math.PI)/a)))},elasticOut:function(r){var e,t=.1,a=.4;return r===0?0:r===1?1:(!t||t<1?(t=1,e=a/4):e=a*Math.asin(1/t)/(2*Math.PI),t*Math.pow(2,-10*r)*Math.sin((r-e)*(2*Math.PI)/a)+1)},elasticInOut:function(r){var e,t=.1,a=.4;return r===0?0:r===1?1:(!t||t<1?(t=1,e=a/4):e=a*Math.asin(1/t)/(2*Math.PI),(r*=2)<1?-.5*(t*Math.pow(2,10*(r-=1))*Math.sin((r-e)*(2*Math.PI)/a)):t*Math.pow(2,-10*(r-=1))*Math.sin((r-e)*(2*Math.PI)/a)*.5+1)},backIn:function(r){var e=1.70158;return r*r*((e+1)*r-e)},backOut:function(r){var e=1.70158;return--r*r*((e+1)*r+e)+1},backInOut:function(r){var e=2.5949095;return(r*=2)<1?.5*(r*r*((e+1)*r-e)):.5*((r-=2)*r*((e+1)*r+e)+2)},bounceIn:function(r){return 1-xs.bounceOut(1-r)},bounceOut:function(r){return r<1/2.75?7.5625*r*r:r<2/2.75?7.5625*(r-=1.5/2.75)*r+.75:r<2.5/2.75?7.5625*(r-=2.25/2.75)*r+.9375:7.5625*(r-=2.625/2.75)*r+.984375},bounceInOut:function(r){return r<.5?xs.bounceIn(r*2)*.5:xs.bounceOut(r*2-1)*.5+.5}},Ol=Math.pow,Ha=Math.sqrt,uf=1e-8,Ww=1e-4,km=Ha(3),Nl=1/3,Er=ui(),er=ui(),Ki=ui();function Na(r){return r>-uf&&ruf||r<-uf}function ee(r,e,t,a,n){var i=1-n;return i*i*(i*r+3*n*e)+n*n*(n*a+3*i*t)}function Om(r,e,t,a,n){var i=1-n;return 3*(((e-r)*i+2*(t-e)*n)*i+(a-t)*n*n)}function ff(r,e,t,a,n,i){var o=a+3*(e-t)-r,s=3*(t-e*2+r),l=3*(e-r),u=r-n,f=s*s-3*o*l,h=s*l-9*o*u,v=l*l-3*s*u,c=0;if(Na(f)&&Na(h))if(Na(s))i[0]=0;else{var p=-l/s;p>=0&&p<=1&&(i[c++]=p)}else{var d=h*h-4*f*v;if(Na(d)){var g=h/f,p=-s/o+g,y=-g/2;p>=0&&p<=1&&(i[c++]=p),y>=0&&y<=1&&(i[c++]=y)}else if(d>0){var m=Ha(d),_=f*s+1.5*o*(-h+m),S=f*s+1.5*o*(-h-m);_<0?_=-Ol(-_,Nl):_=Ol(_,Nl),S<0?S=-Ol(-S,Nl):S=Ol(S,Nl);var p=(-s-(_+S))/(3*o);p>=0&&p<=1&&(i[c++]=p)}else{var b=(2*f*s-3*o*h)/(2*Ha(f*f*f)),x=Math.acos(b)/3,w=Ha(f),T=Math.cos(x),p=(-s-2*w*T)/(3*o),y=(-s+w*(T+km*Math.sin(x)))/(3*o),A=(-s+w*(T-km*Math.sin(x)))/(3*o);p>=0&&p<=1&&(i[c++]=p),y>=0&&y<=1&&(i[c++]=y),A>=0&&A<=1&&(i[c++]=A)}}return c}function Yw(r,e,t,a,n){var i=6*t-12*e+6*r,o=9*e+3*a-3*r-9*t,s=3*e-3*r,l=0;if(Na(o)){if(Uw(i)){var u=-s/i;u>=0&&u<=1&&(n[l++]=u)}}else{var f=i*i-4*o*s;if(Na(f))n[0]=-i/(2*o);else if(f>0){var h=Ha(f),u=(-i+h)/(2*o),v=(-i-h)/(2*o);u>=0&&u<=1&&(n[l++]=u),v>=0&&v<=1&&(n[l++]=v)}}return l}function Za(r,e,t,a,n,i){var o=(e-r)*n+r,s=(t-e)*n+e,l=(a-t)*n+t,u=(s-o)*n+o,f=(l-s)*n+s,h=(f-u)*n+u;i[0]=r,i[1]=o,i[2]=u,i[3]=h,i[4]=h,i[5]=f,i[6]=l,i[7]=a}function $w(r,e,t,a,n,i,o,s,l,u,f){var h,v=.005,c=1/0,p,d,g,y;Er[0]=l,Er[1]=u;for(var m=0;m<1;m+=.05)er[0]=ee(r,t,n,o,m),er[1]=ee(e,a,i,s,m),g=$n(Er,er),g=0&&g=0&&u<=1&&(n[l++]=u)}}else{var f=o*o-4*i*s;if(Na(f)){var u=-o/(2*i);u>=0&&u<=1&&(n[l++]=u)}else if(f>0){var h=Ha(f),u=(-o+h)/(2*i),v=(-o-h)/(2*i);u>=0&&u<=1&&(n[l++]=u),v>=0&&v<=1&&(n[l++]=v)}}return l}function Xw(r,e,t){var a=r+t-2*e;return a===0?.5:(r-e)/a}function Bs(r,e,t,a,n){var i=(e-r)*a+r,o=(t-e)*a+e,s=(o-i)*a+i;n[0]=r,n[1]=i,n[2]=s,n[3]=s,n[4]=o,n[5]=t}function Zw(r,e,t,a,n,i,o,s,l){var u,f=.005,h=1/0;Er[0]=o,Er[1]=s;for(var v=0;v<1;v+=.05){er[0]=se(r,t,n,v),er[1]=se(e,a,i,v);var c=$n(Er,er);c=0&&c=1?1:ff(0,a,i,1,l,s)&&ee(0,n,o,1,s[0])}}}var OL=(function(){function r(e){this._inited=!1,this._startTime=0,this._pausedTime=0,this._paused=!1,this._life=e.life||1e3,this._delay=e.delay||0,this.loop=e.loop||!1,this.onframe=e.onframe||$t,this.ondestroy=e.ondestroy||$t,this.onrestart=e.onrestart||$t,e.easing&&this.setEasing(e.easing)}return r.prototype.step=function(e,t){if(this._inited||(this._startTime=e+this._delay,this._inited=!0),this._paused){this._pausedTime+=t;return}var a=this._life,n=e-this._startTime-this._pausedTime,i=n/a;i<0&&(i=0),i=Math.min(i,1);var o=this.easingFunc,s=o?o(i):i;if(this.onframe(s),i===1)if(this.loop){var l=n%a;this._startTime=e-l,this._pausedTime=0,this.onrestart()}else return!0;return!1},r.prototype.pause=function(){this._paused=!0},r.prototype.resume=function(){this._paused=!1},r.prototype.setEasing=function(e){this.easing=e,this.easingFunc=Q(e)?e:xs[e]||_g(e)},r})(),qw=(function(){function r(e){this.value=e}return r})(),NL=(function(){function r(){this._len=0}return r.prototype.insert=function(e){var t=new qw(e);return this.insertEntry(t),t},r.prototype.insertEntry=function(e){this.head?(this.tail.next=e,e.prev=this.tail,e.next=null,this.tail=e):this.head=this.tail=e,this._len++},r.prototype.remove=function(e){var t=e.prev,a=e.next;t?t.next=a:this.head=a,a?a.prev=t:this.tail=t,e.next=e.prev=null,this._len--},r.prototype.len=function(){return this._len},r.prototype.clear=function(){this.head=this.tail=null,this._len=0},r})(),fl=(function(){function r(e){this._list=new NL,this._maxSize=10,this._map={},this._maxSize=e}return r.prototype.put=function(e,t){var a=this._list,n=this._map,i=null;if(n[e]==null){var o=a.len(),s=this._lastRemovedEntry;if(o>=this._maxSize&&o>0){var l=a.head;a.remove(l),delete n[l.key],i=l.value,this._lastRemovedEntry=l}s?s.value=t:s=new qw(t),s.key=e,a.insertEntry(s),n[e]=s}return i},r.prototype.get=function(e){var t=this._map[e],a=this._list;if(t!=null)return t!==a.tail&&(a.remove(t),a.insertEntry(t)),t.value},r.prototype.clear=function(){this._list.clear(),this._map={}},r.prototype.len=function(){return this._list.len()},r})(),Nm={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function _r(r){return r=Math.round(r),r<0?0:r>255?255:r}function BL(r){return r=Math.round(r),r<0?0:r>360?360:r}function Vs(r){return r<0?0:r>1?1:r}function jh(r){var e=r;return e.length&&e.charAt(e.length-1)==="%"?_r(parseFloat(e)/100*255):_r(parseInt(e,10))}function Xn(r){var e=r;return e.length&&e.charAt(e.length-1)==="%"?Vs(parseFloat(e)/100):Vs(parseFloat(e))}function tv(r,e,t){return t<0?t+=1:t>1&&(t-=1),t*6<1?r+(e-r)*t*6:t*2<1?e:t*3<2?r+(e-r)*(2/3-t)*6:r}function Ba(r,e,t){return r+(e-r)*t}function Ke(r,e,t,a,n){return r[0]=e,r[1]=t,r[2]=a,r[3]=n,r}function Lp(r,e){return r[0]=e[0],r[1]=e[1],r[2]=e[2],r[3]=e[3],r}var Kw=new fl(20),Bl=null;function _i(r,e){Bl&&Lp(Bl,e),Bl=Kw.put(r,Bl||e.slice())}function Ue(r,e){if(r){e=e||[];var t=Kw.get(r);if(t)return Lp(e,t);r=r+"";var a=r.replace(/ /g,"").toLowerCase();if(a in Nm)return Lp(e,Nm[a]),_i(r,e),e;var n=a.length;if(a.charAt(0)==="#"){if(n===4||n===5){var i=parseInt(a.slice(1,4),16);if(!(i>=0&&i<=4095)){Ke(e,0,0,0,1);return}return Ke(e,(i&3840)>>4|(i&3840)>>8,i&240|(i&240)>>4,i&15|(i&15)<<4,n===5?parseInt(a.slice(4),16)/15:1),_i(r,e),e}else if(n===7||n===9){var i=parseInt(a.slice(1,7),16);if(!(i>=0&&i<=16777215)){Ke(e,0,0,0,1);return}return Ke(e,(i&16711680)>>16,(i&65280)>>8,i&255,n===9?parseInt(a.slice(7),16)/255:1),_i(r,e),e}return}var o=a.indexOf("("),s=a.indexOf(")");if(o!==-1&&s+1===n){var l=a.substr(0,o),u=a.substr(o+1,s-(o+1)).split(","),f=1;switch(l){case"rgba":if(u.length!==4)return u.length===3?Ke(e,+u[0],+u[1],+u[2],1):Ke(e,0,0,0,1);f=Xn(u.pop());case"rgb":if(u.length>=3)return Ke(e,jh(u[0]),jh(u[1]),jh(u[2]),u.length===3?f:Xn(u[3])),_i(r,e),e;Ke(e,0,0,0,1);return;case"hsla":if(u.length!==4){Ke(e,0,0,0,1);return}return u[3]=Xn(u[3]),Pp(u,e),_i(r,e),e;case"hsl":if(u.length!==3){Ke(e,0,0,0,1);return}return Pp(u,e),_i(r,e),e;default:return}}Ke(e,0,0,0,1)}}function Pp(r,e){var t=(parseFloat(r[0])%360+360)%360/360,a=Xn(r[1]),n=Xn(r[2]),i=n<=.5?n*(a+1):n+a-n*a,o=n*2-i;return e=e||[],Ke(e,_r(tv(o,i,t+1/3)*255),_r(tv(o,i,t)*255),_r(tv(o,i,t-1/3)*255),1),r.length===4&&(e[3]=r[3]),e}function VL(r){if(r){var e=r[0]/255,t=r[1]/255,a=r[2]/255,n=Math.min(e,t,a),i=Math.max(e,t,a),o=i-n,s=(i+n)/2,l,u;if(o===0)l=0,u=0;else{s<.5?u=o/(i+n):u=o/(2-i-n);var f=((i-e)/6+o/2)/o,h=((i-t)/6+o/2)/o,v=((i-a)/6+o/2)/o;e===i?l=v-h:t===i?l=1/3+f-v:a===i&&(l=2/3+h-f),l<0&&(l+=1),l>1&&(l-=1)}var c=[l*360,u,s];return r[3]!=null&&c.push(r[3]),c}}function Rp(r,e){var t=Ue(r);if(t){for(var a=0;a<3;a++)e<0?t[a]=t[a]*(1-e)|0:t[a]=(255-t[a])*e+t[a]|0,t[a]>255?t[a]=255:t[a]<0&&(t[a]=0);return ia(t,t.length===4?"rgba":"rgb")}}function ev(r,e,t){if(!(!(e&&e.length)||!(r>=0&&r<=1))){t=t||[];var a=r*(e.length-1),n=Math.floor(a),i=Math.ceil(a),o=e[n],s=e[i],l=a-n;return t[0]=_r(Ba(o[0],s[0],l)),t[1]=_r(Ba(o[1],s[1],l)),t[2]=_r(Ba(o[2],s[2],l)),t[3]=Vs(Ba(o[3],s[3],l)),t}}function zL(r,e,t){if(!(!(e&&e.length)||!(r>=0&&r<=1))){var a=r*(e.length-1),n=Math.floor(a),i=Math.ceil(a),o=Ue(e[n]),s=Ue(e[i]),l=a-n,u=ia([_r(Ba(o[0],s[0],l)),_r(Ba(o[1],s[1],l)),_r(Ba(o[2],s[2],l)),Vs(Ba(o[3],s[3],l))],"rgba");return t?{color:u,leftIndex:n,rightIndex:i,value:a}:u}}function bs(r,e,t,a){var n=Ue(r);if(r)return n=VL(n),e!=null&&(n[0]=BL(e)),t!=null&&(n[1]=Xn(t)),a!=null&&(n[2]=Xn(a)),ia(Pp(n),"rgba")}function hf(r,e){var t=Ue(r);if(t&&e!=null)return t[3]=Vs(e),ia(t,"rgba")}function ia(r,e){if(!(!r||!r.length)){var t=r[0]+","+r[1]+","+r[2];return(e==="rgba"||e==="hsva"||e==="hsla")&&(t+=","+r[3]),e+"("+t+")"}}function vf(r,e){var t=Ue(r);return t?(.299*t[0]+.587*t[1]+.114*t[2])*t[3]/255+(1-t[3])*e:0}var Bm=new fl(100);function Ep(r){if(Y(r)){var e=Bm.get(r);return e||(e=Rp(r,-.1),Bm.put(r,e)),e}else if(nh(r)){var t=V({},r);return t.colorStops=G(r.colorStops,function(a){return{offset:a.offset,color:Rp(a.color,-.1)}}),t}return r}var cf=Math.round;function zs(r){var e;if(!r||r==="transparent")r="none";else if(typeof r=="string"&&r.indexOf("rgba")>-1){var t=Ue(r);t&&(r="rgb("+t[0]+","+t[1]+","+t[2]+")",e=t[3])}return{color:r,opacity:e??1}}var Vm=1e-4;function Va(r){return r-Vm}function Vl(r){return cf(r*1e3)/1e3}function kp(r){return cf(r*1e4)/1e4}function GL(r){return"matrix("+Vl(r[0])+","+Vl(r[1])+","+Vl(r[2])+","+Vl(r[3])+","+kp(r[4])+","+kp(r[5])+")"}var FL={left:"start",right:"end",center:"middle",middle:"middle"};function HL(r,e,t){return t==="top"?r+=e/2:t==="bottom"&&(r-=e/2),r}function WL(r){return r&&(r.shadowBlur||r.shadowOffsetX||r.shadowOffsetY)}function UL(r){var e=r.style,t=r.getGlobalScale();return[e.shadowColor,(e.shadowBlur||0).toFixed(2),(e.shadowOffsetX||0).toFixed(2),(e.shadowOffsetY||0).toFixed(2),t[0],t[1]].join(",")}function Qw(r){return r&&!!r.image}function YL(r){return r&&!!r.svgElement}function Sg(r){return Qw(r)||YL(r)}function Jw(r){return r.type==="linear"}function jw(r){return r.type==="radial"}function tT(r){return r&&(r.type==="linear"||r.type==="radial")}function sh(r){return"url(#"+r+")"}function eT(r){var e=r.getGlobalScale(),t=Math.max(e[0],e[1]);return Math.max(Math.ceil(Math.log(t)/Math.log(10)),1)}function rT(r){var e=r.x||0,t=r.y||0,a=(r.rotation||0)*Bu,n=st(r.scaleX,1),i=st(r.scaleY,1),o=r.skewX||0,s=r.skewY||0,l=[];return(e||t)&&l.push("translate("+e+"px,"+t+"px)"),a&&l.push("rotate("+a+")"),(n!==1||i!==1)&&l.push("scale("+n+","+i+")"),(o||s)&&l.push("skew("+cf(o*Bu)+"deg, "+cf(s*Bu)+"deg)"),l.join(" ")}var $L=(function(){return yt.hasGlobalWindow&&Q(window.btoa)?function(r){return window.btoa(unescape(encodeURIComponent(r)))}:typeof Buffer<"u"?function(r){return Buffer.from(r).toString("base64")}:function(r){return null}})(),Op=Array.prototype.slice;function Jr(r,e,t){return(e-r)*t+r}function rv(r,e,t,a){for(var n=e.length,i=0;ia?e:r,i=Math.min(t,a),o=n[i-1]||{color:[0,0,0,0],offset:0},s=i;so;if(s)a.length=o;else for(var l=i;l=1},r.prototype.getAdditiveTrack=function(){return this._additiveTrack},r.prototype.addKeyframe=function(e,t,a){this._needsSort=!0;var n=this.keyframes,i=n.length,o=!1,s=Gm,l=t;if(me(t)){var u=KL(t);s=u,(u===1&&!wt(t[0])||u===2&&!wt(t[0][0]))&&(o=!0)}else if(wt(t)&&!Os(t))s=Gl;else if(Y(t))if(!isNaN(+t))s=Gl;else{var f=Ue(t);f&&(l=f,s=us)}else if(nh(t)){var h=V({},l);h.colorStops=G(t.colorStops,function(c){return{offset:c.offset,color:Ue(c.color)}}),Jw(t)?s=Np:jw(t)&&(s=Bp),l=h}i===0?this.valType=s:(s!==this.valType||s===Gm)&&(o=!0),this.discrete=this.discrete||o;var v={time:e,value:l,rawValue:t,percent:0};return a&&(v.easing=a,v.easingFunc=Q(a)?a:xs[a]||_g(a)),n.push(v),v},r.prototype.prepare=function(e,t){var a=this.keyframes;this._needsSort&&a.sort(function(d,g){return d.time-g.time});for(var n=this.valType,i=a.length,o=a[i-1],s=this.discrete,l=Fl(n),u=Fm(n),f=0;f=0&&!(o[f].percent<=t);f--);f=v(f,s-2)}else{for(f=h;ft);f++);f=v(f-1,s-2)}p=o[f+1],c=o[f]}if(c&&p){this._lastFr=f,this._lastFrP=t;var g=p.percent-c.percent,y=g===0?1:v((t-c.percent)/g,1);p.easingFunc&&(y=p.easingFunc(y));var m=a?this._additiveValue:u?Bo:e[l];if((Fl(i)||u)&&!m&&(m=this._additiveValue=[]),this.discrete)e[l]=y<1?c.rawValue:p.rawValue;else if(Fl(i))i===Hu?rv(m,c[n],p[n],y):XL(m,c[n],p[n],y);else if(Fm(i)){var _=c[n],S=p[n],b=i===Np;e[l]={type:b?"linear":"radial",x:Jr(_.x,S.x,y),y:Jr(_.y,S.y,y),colorStops:G(_.colorStops,function(w,T){var A=S.colorStops[T];return{offset:Jr(w.offset,A.offset,y),color:Fu(rv([],w.color,A.color,y))}}),global:S.global},b?(e[l].x2=Jr(_.x2,S.x2,y),e[l].y2=Jr(_.y2,S.y2,y)):e[l].r=Jr(_.r,S.r,y)}else if(u)rv(m,c[n],p[n],y),a||(e[l]=Fu(m));else{var x=Jr(c[n],p[n],y);a?this._additiveValue=x:e[l]=x}a&&this._addToTarget(e)}}},r.prototype._addToTarget=function(e){var t=this.valType,a=this.propName,n=this._additiveValue;t===Gl?e[a]=e[a]+n:t===us?(Ue(e[a],Bo),zl(Bo,Bo,n,1),e[a]=Fu(Bo)):t===Hu?zl(e[a],e[a],n,1):t===aT&&zm(e[a],e[a],n,1)},r})(),xg=(function(){function r(e,t,a,n){if(this._tracks={},this._trackKeys=[],this._maxTime=0,this._started=0,this._clip=null,this._target=e,this._loop=t,t&&n){vg("Can' use additive animation on looped animation.");return}this._additiveAnimators=n,this._allowDiscrete=a}return r.prototype.getMaxTime=function(){return this._maxTime},r.prototype.getDelay=function(){return this._delay},r.prototype.getLoop=function(){return this._loop},r.prototype.getTarget=function(){return this._target},r.prototype.changeTarget=function(e){this._target=e},r.prototype.when=function(e,t,a){return this.whenWithKeys(e,t,_t(t),a)},r.prototype.whenWithKeys=function(e,t,a,n){for(var i=this._tracks,o=0;o0&&l.addKeyframe(0,ws(u),n),this._trackKeys.push(s)}l.addKeyframe(e,ws(t[s]),n)}return this._maxTime=Math.max(this._maxTime,e),this},r.prototype.pause=function(){this._clip.pause(),this._paused=!0},r.prototype.resume=function(){this._clip.resume(),this._paused=!1},r.prototype.isPaused=function(){return!!this._paused},r.prototype.duration=function(e){return this._maxTime=e,this._force=!0,this},r.prototype._doneCallback=function(){this._setTracksFinished(),this._clip=null;var e=this._doneCbs;if(e)for(var t=e.length,a=0;a0)){this._started=1;for(var t=this,a=[],n=this._maxTime||0,i=0;i1){var s=o.pop();i.addKeyframe(s.time,e[n]),i.prepare(this._maxTime,i.getAdditiveTrack())}}}},r})();function $i(){return new Date().getTime()}var JL=(function(r){k(e,r);function e(t){var a=r.call(this)||this;return a._running=!1,a._time=0,a._pausedTime=0,a._pauseStart=0,a._paused=!1,t=t||{},a.stage=t.stage||{},a}return e.prototype.addClip=function(t){t.animation&&this.removeClip(t),this._head?(this._tail.next=t,t.prev=this._tail,t.next=null,this._tail=t):this._head=this._tail=t,t.animation=this},e.prototype.addAnimator=function(t){t.animation=this;var a=t.getClip();a&&this.addClip(a)},e.prototype.removeClip=function(t){if(t.animation){var a=t.prev,n=t.next;a?a.next=n:this._head=n,n?n.prev=a:this._tail=a,t.next=t.prev=t.animation=null}},e.prototype.removeAnimator=function(t){var a=t.getClip();a&&this.removeClip(a),t.animation=null},e.prototype.update=function(t){for(var a=$i()-this._pausedTime,n=a-this._time,i=this._head;i;){var o=i.next,s=i.step(a,n);s&&(i.ondestroy(),this.removeClip(i)),i=o}this._time=a,t||(this.trigger("frame",n),this.stage.update&&this.stage.update())},e.prototype._startLoop=function(){var t=this;this._running=!0;function a(){t._running&&(lf(a),!t._paused&&t.update())}lf(a)},e.prototype.start=function(){this._running||(this._time=$i(),this._pausedTime=0,this._startLoop())},e.prototype.stop=function(){this._running=!1},e.prototype.pause=function(){this._paused||(this._pauseStart=$i(),this._paused=!0)},e.prototype.resume=function(){this._paused&&(this._pausedTime+=$i()-this._pauseStart,this._paused=!1)},e.prototype.clear=function(){for(var t=this._head;t;){var a=t.next;t.prev=t.next=t.animation=null,t=a}this._head=this._tail=null},e.prototype.isFinished=function(){return this._head==null},e.prototype.animate=function(t,a){a=a||{},this.start();var n=new xg(t,a.loop);return this.addAnimator(n),n},e})(lr),jL=300,av=yt.domSupported,nv=(function(){var r=["click","dblclick","mousewheel","wheel","mouseout","mouseup","mousedown","mousemove","contextmenu"],e=["touchstart","touchend","touchmove"],t={pointerdown:1,pointerup:1,pointermove:1,pointerout:1},a=G(r,function(n){var i=n.replace("mouse","pointer");return t.hasOwnProperty(i)?i:n});return{mouse:r,touch:e,pointer:a}})(),Hm={mouse:["mousemove","mouseup"],pointer:["pointermove","pointerup"]},Wm=!1;function Vp(r){var e=r.pointerType;return e==="pen"||e==="touch"}function tP(r){r.touching=!0,r.touchTimer!=null&&(clearTimeout(r.touchTimer),r.touchTimer=null),r.touchTimer=setTimeout(function(){r.touching=!1,r.touchTimer=null},700)}function iv(r){r&&(r.zrByTouch=!0)}function eP(r,e){return Qe(r.dom,new rP(r,e),!0)}function nT(r,e){for(var t=e,a=!1;t&&t.nodeType!==9&&!(a=t.domBelongToZr||t!==e&&t===r.painterRoot);)t=t.parentNode;return a}var rP=(function(){function r(e,t){this.stopPropagation=$t,this.stopImmediatePropagation=$t,this.preventDefault=$t,this.type=t.type,this.target=this.currentTarget=e.dom,this.pointerType=t.pointerType,this.clientX=t.clientX,this.clientY=t.clientY}return r})(),pr={mousedown:function(r){r=Qe(this.dom,r),this.__mayPointerCapture=[r.zrX,r.zrY],this.trigger("mousedown",r)},mousemove:function(r){r=Qe(this.dom,r);var e=this.__mayPointerCapture;e&&(r.zrX!==e[0]||r.zrY!==e[1])&&this.__togglePointerCapture(!0),this.trigger("mousemove",r)},mouseup:function(r){r=Qe(this.dom,r),this.__togglePointerCapture(!1),this.trigger("mouseup",r)},mouseout:function(r){r=Qe(this.dom,r);var e=r.toElement||r.relatedTarget;nT(this,e)||(this.__pointerCapturing&&(r.zrEventControl="no_globalout"),this.trigger("mouseout",r))},wheel:function(r){Wm=!0,r=Qe(this.dom,r),this.trigger("mousewheel",r)},mousewheel:function(r){Wm||(r=Qe(this.dom,r),this.trigger("mousewheel",r))},touchstart:function(r){r=Qe(this.dom,r),iv(r),this.__lastTouchMoment=new Date,this.handler.processGesture(r,"start"),pr.mousemove.call(this,r),pr.mousedown.call(this,r)},touchmove:function(r){r=Qe(this.dom,r),iv(r),this.handler.processGesture(r,"change"),pr.mousemove.call(this,r)},touchend:function(r){r=Qe(this.dom,r),iv(r),this.handler.processGesture(r,"end"),pr.mouseup.call(this,r),+new Date-+this.__lastTouchMoment$m||r<-$m}var un=[],Si=[],sv=We(),lv=Math.abs,ea=(function(){function r(){}return r.prototype.getLocalTransform=function(e){return r.getLocalTransform(this,e)},r.prototype.setPosition=function(e){this.x=e[0],this.y=e[1]},r.prototype.setScale=function(e){this.scaleX=e[0],this.scaleY=e[1]},r.prototype.setSkew=function(e){this.skewX=e[0],this.skewY=e[1]},r.prototype.setOrigin=function(e){this.originX=e[0],this.originY=e[1]},r.prototype.needLocalTransform=function(){return ln(this.rotation)||ln(this.x)||ln(this.y)||ln(this.scaleX-1)||ln(this.scaleY-1)||ln(this.skewX)||ln(this.skewY)},r.prototype.updateTransform=function(){var e=this.parent&&this.parent.transform,t=this.needLocalTransform(),a=this.transform;if(!(t||e)){a&&(Ym(a),this.invTransform=null);return}a=a||We(),t?this.getLocalTransform(a):Ym(a),e&&(t?na(a,e,a):yg(a,e)),this.transform=a,this._resolveGlobalScaleRatio(a)},r.prototype._resolveGlobalScaleRatio=function(e){var t=this.globalScaleRatio;if(t!=null&&t!==1){this.getGlobalScale(un);var a=un[0]<0?-1:1,n=un[1]<0?-1:1,i=((un[0]-a)*t+a)/un[0]||0,o=((un[1]-n)*t+n)/un[1]||0;e[0]*=i,e[1]*=i,e[2]*=o,e[3]*=o}this.invTransform=this.invTransform||We(),_o(this.invTransform,e)},r.prototype.getComputedTransform=function(){for(var e=this,t=[];e;)t.push(e),e=e.parent;for(;e=t.pop();)e.updateTransform();return this.transform},r.prototype.setLocalTransform=function(e){if(e){var t=e[0]*e[0]+e[1]*e[1],a=e[2]*e[2]+e[3]*e[3],n=Math.atan2(e[1],e[0]),i=Math.PI/2+n-Math.atan2(e[3],e[2]);a=Math.sqrt(a)*Math.cos(i),t=Math.sqrt(t),this.skewX=i,this.skewY=0,this.rotation=-n,this.x=+e[4],this.y=+e[5],this.scaleX=t,this.scaleY=a,this.originX=0,this.originY=0}},r.prototype.decomposeTransform=function(){if(this.transform){var e=this.parent,t=this.transform;e&&e.transform&&(e.invTransform=e.invTransform||We(),na(Si,e.invTransform,t),t=Si);var a=this.originX,n=this.originY;(a||n)&&(sv[4]=a,sv[5]=n,na(Si,t,sv),Si[4]-=a,Si[5]-=n,t=Si),this.setLocalTransform(t)}},r.prototype.getGlobalScale=function(e){var t=this.transform;return e=e||[],t?(e[0]=Math.sqrt(t[0]*t[0]+t[1]*t[1]),e[1]=Math.sqrt(t[2]*t[2]+t[3]*t[3]),t[0]<0&&(e[0]=-e[0]),t[3]<0&&(e[1]=-e[1]),e):(e[0]=1,e[1]=1,e)},r.prototype.transformCoordToLocal=function(e,t){var a=[e,t],n=this.invTransform;return n&&he(a,a,n),a},r.prototype.transformCoordToGlobal=function(e,t){var a=[e,t],n=this.transform;return n&&he(a,a,n),a},r.prototype.getLineScale=function(){var e=this.transform;return e&&lv(e[0]-1)>1e-10&&lv(e[3]-1)>1e-10?Math.sqrt(lv(e[0]*e[3]-e[2]*e[1])):1},r.prototype.copyTransform=function(e){oT(this,e)},r.getLocalTransform=function(e,t){t=t||[];var a=e.originX||0,n=e.originY||0,i=e.scaleX,o=e.scaleY,s=e.anchorX,l=e.anchorY,u=e.rotation||0,f=e.x,h=e.y,v=e.skewX?Math.tan(e.skewX):0,c=e.skewY?Math.tan(-e.skewY):0;if(a||n||s||l){var p=a+s,d=n+l;t[4]=-p*i-v*d*o,t[5]=-d*o-c*p*i}else t[4]=t[5]=0;return t[0]=i,t[3]=o,t[1]=c*i,t[2]=v*o,u&&fi(t,t,u),t[4]+=a+f,t[5]+=n+h,t},r.initDefaultProps=(function(){var e=r.prototype;e.scaleX=e.scaleY=e.globalScaleRatio=1,e.x=e.y=e.originX=e.originY=e.skewX=e.skewY=e.rotation=e.anchorX=e.anchorY=0})(),r})(),Wr=["x","y","originX","originY","anchorX","anchorY","rotation","scaleX","scaleY","skewX","skewY"];function oT(r,e){for(var t=0;t=0?parseFloat(r)/100*e:parseFloat(r):r}function df(r,e,t){var a=e.position||"inside",n=e.distance!=null?e.distance:5,i=t.height,o=t.width,s=i/2,l=t.x,u=t.y,f="left",h="top";if(a instanceof Array)l+=xr(a[0],t.width),u+=xr(a[1],t.height),f=null,h=null;else switch(a){case"left":l-=n,u+=s,f="right",h="middle";break;case"right":l+=n+o,u+=s,h="middle";break;case"top":l+=o/2,u-=n,f="center",h="bottom";break;case"bottom":l+=o/2,u+=i+n,f="center";break;case"inside":l+=o/2,u+=s,f="center",h="middle";break;case"insideLeft":l+=n,u+=s,h="middle";break;case"insideRight":l+=o-n,u+=s,f="right",h="middle";break;case"insideTop":l+=o/2,u+=n,f="center";break;case"insideBottom":l+=o/2,u+=i-n,f="center",h="bottom";break;case"insideTopLeft":l+=n,u+=n;break;case"insideTopRight":l+=o-n,u+=n,f="right";break;case"insideBottomLeft":l+=n,u+=i-n,h="bottom";break;case"insideBottomRight":l+=o-n,u+=i-n,f="right",h="bottom";break}return r=r||{},r.x=l,r.y=u,r.align=f,r.verticalAlign=h,r}var uv="__zr_normal__",fv=Wr.concat(["ignore"]),sP=Fr(Wr,function(r,e){return r[e]=!0,r},{ignore:!1}),xi={},lP=new ht(0,0,0,0),uh=(function(){function r(e){this.id=kw(),this.animators=[],this.currentStates=[],this.states={},this._init(e)}return r.prototype._init=function(e){this.attr(e)},r.prototype.drift=function(e,t,a){switch(this.draggable){case"horizontal":t=0;break;case"vertical":e=0;break}var n=this.transform;n||(n=this.transform=[1,0,0,1,0,0]),n[4]+=e,n[5]+=t,this.decomposeTransform(),this.markRedraw()},r.prototype.beforeUpdate=function(){},r.prototype.afterUpdate=function(){},r.prototype.update=function(){this.updateTransform(),this.__dirty&&this.updateInnerText()},r.prototype.updateInnerText=function(e){var t=this._textContent;if(t&&(!t.ignore||e)){this.textConfig||(this.textConfig={});var a=this.textConfig,n=a.local,i=t.innerTransformable,o=void 0,s=void 0,l=!1;i.parent=n?this:null;var u=!1;if(i.copyTransform(t),a.position!=null){var f=lP;a.layoutRect?f.copy(a.layoutRect):f.copy(this.getBoundingRect()),n||f.applyTransform(this.transform),this.calculateTextPosition?this.calculateTextPosition(xi,a,f):df(xi,a,f),i.x=xi.x,i.y=xi.y,o=xi.align,s=xi.verticalAlign;var h=a.origin;if(h&&a.rotation!=null){var v=void 0,c=void 0;h==="center"?(v=f.width*.5,c=f.height*.5):(v=xr(h[0],f.width),c=xr(h[1],f.height)),u=!0,i.originX=-i.x+v+(n?0:f.x),i.originY=-i.y+c+(n?0:f.y)}}a.rotation!=null&&(i.rotation=a.rotation);var p=a.offset;p&&(i.x+=p[0],i.y+=p[1],u||(i.originX=-p[0],i.originY=-p[1]));var d=a.inside==null?typeof a.position=="string"&&a.position.indexOf("inside")>=0:a.inside,g=this._innerTextDefaultStyle||(this._innerTextDefaultStyle={}),y=void 0,m=void 0,_=void 0;d&&this.canBeInsideText()?(y=a.insideFill,m=a.insideStroke,(y==null||y==="auto")&&(y=this.getInsideTextFill()),(m==null||m==="auto")&&(m=this.getInsideTextStroke(y),_=!0)):(y=a.outsideFill,m=a.outsideStroke,(y==null||y==="auto")&&(y=this.getOutsideFill()),(m==null||m==="auto")&&(m=this.getOutsideStroke(y),_=!0)),y=y||"#000",(y!==g.fill||m!==g.stroke||_!==g.autoStroke||o!==g.align||s!==g.verticalAlign)&&(l=!0,g.fill=y,g.stroke=m,g.autoStroke=_,g.align=o,g.verticalAlign=s,t.setDefaultTextStyle(g)),t.__dirty|=Fe,l&&t.dirtyStyle(!0)}},r.prototype.canBeInsideText=function(){return!0},r.prototype.getInsideTextFill=function(){return"#fff"},r.prototype.getInsideTextStroke=function(e){return"#000"},r.prototype.getOutsideFill=function(){return this.__zr&&this.__zr.isDarkMode()?Hp:Fp},r.prototype.getOutsideStroke=function(e){var t=this.__zr&&this.__zr.getBackgroundColor(),a=typeof t=="string"&&Ue(t);a||(a=[255,255,255,1]);for(var n=a[3],i=this.__zr.isDarkMode(),o=0;o<3;o++)a[o]=a[o]*n+(i?0:255)*(1-n);return a[3]=1,ia(a,"rgba")},r.prototype.traverse=function(e,t){},r.prototype.attrKV=function(e,t){e==="textConfig"?this.setTextConfig(t):e==="textContent"?this.setTextContent(t):e==="clipPath"?this.setClipPath(t):e==="extra"?(this.extra=this.extra||{},V(this.extra,t)):this[e]=t},r.prototype.hide=function(){this.ignore=!0,this.markRedraw()},r.prototype.show=function(){this.ignore=!1,this.markRedraw()},r.prototype.attr=function(e,t){if(typeof e=="string")this.attrKV(e,t);else if(et(e))for(var a=e,n=_t(a),i=0;i0},r.prototype.getState=function(e){return this.states[e]},r.prototype.ensureState=function(e){var t=this.states;return t[e]||(t[e]={}),t[e]},r.prototype.clearStates=function(e){this.useState(uv,!1,e)},r.prototype.useState=function(e,t,a,n){var i=e===uv,o=this.hasState();if(!(!o&&i)){var s=this.currentStates,l=this.stateTransition;if(!(ct(s,e)>=0&&(t||s.length===1))){var u;if(this.stateProxy&&!i&&(u=this.stateProxy(e)),u||(u=this.states&&this.states[e]),!u&&!i){vg("State "+e+" not exists.");return}i||this.saveCurrentToNormalState(u);var f=!!(u&&u.hoverLayer||n);f&&this._toggleHoverLayerFlag(!0),this._applyStateObj(e,u,this._normalState,t,!a&&!this.__inHover&&l&&l.duration>0,l);var h=this._textContent,v=this._textGuide;return h&&h.useState(e,t,a,f),v&&v.useState(e,t,a,f),i?(this.currentStates=[],this._normalState={}):t?this.currentStates.push(e):this.currentStates=[e],this._updateAnimationTargets(),this.markRedraw(),!f&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~Fe),u}}},r.prototype.useStates=function(e,t,a){if(!e.length)this.clearStates();else{var n=[],i=this.currentStates,o=e.length,s=o===i.length;if(s){for(var l=0;l0,p);var d=this._textContent,g=this._textGuide;d&&d.useStates(e,t,v),g&&g.useStates(e,t,v),this._updateAnimationTargets(),this.currentStates=e.slice(),this.markRedraw(),!v&&this.__inHover&&(this._toggleHoverLayerFlag(!1),this.__dirty&=~Fe)}},r.prototype.isSilent=function(){for(var e=this.silent,t=this.parent;!e&&t;){if(t.silent){e=!0;break}t=t.parent}return e},r.prototype._updateAnimationTargets=function(){for(var e=0;e=0){var a=this.currentStates.slice();a.splice(t,1),this.useStates(a)}},r.prototype.replaceState=function(e,t,a){var n=this.currentStates.slice(),i=ct(n,e),o=ct(n,t)>=0;i>=0?o?n.splice(i,1):n[i]=t:a&&!o&&n.push(t),this.useStates(n)},r.prototype.toggleState=function(e,t){t?this.useState(e,!0):this.removeState(e)},r.prototype._mergeStates=function(e){for(var t={},a,n=0;n=0&&i.splice(o,1)}),this.animators.push(e),a&&a.animation.addAnimator(e),a&&a.wakeUp()},r.prototype.updateDuringAnimation=function(e){this.markRedraw()},r.prototype.stopAnimation=function(e,t){for(var a=this.animators,n=a.length,i=[],o=0;o0&&t.during&&i[0].during(function(p,d){t.during(d)});for(var v=0;v0||n.force&&!o.length){var T=void 0,A=void 0,C=void 0;if(s){A={},v&&(T={});for(var S=0;S<_;S++){var y=d[S];A[y]=t[y],v?T[y]=a[y]:t[y]=a[y]}}else if(v){C={};for(var S=0;S<_;S++){var y=d[S];C[y]=ws(t[y]),fP(t,a,y)}}var b=new xg(t,!1,!1,h?Ct(p,function(I){return I.targetName===e}):null);b.targetName=e,n.scope&&(b.scope=n.scope),v&&T&&b.whenWithKeys(0,T,d),C&&b.whenWithKeys(0,C,d),b.whenWithKeys(u??500,s?A:a,d).delay(f||0),r.addAnimator(b,e),o.push(b)}}var at=(function(r){k(e,r);function e(t){var a=r.call(this)||this;return a.isGroup=!0,a._children=[],a.attr(t),a}return e.prototype.childrenRef=function(){return this._children},e.prototype.children=function(){return this._children.slice()},e.prototype.childAt=function(t){return this._children[t]},e.prototype.childOfName=function(t){for(var a=this._children,n=0;n=0&&(n.splice(i,0,t),this._doAdd(t))}return this},e.prototype.replace=function(t,a){var n=ct(this._children,t);return n>=0&&this.replaceAt(a,n),this},e.prototype.replaceAt=function(t,a){var n=this._children,i=n[a];if(t&&t!==this&&t.parent!==this&&t!==i){n[a]=t,i.parent=null;var o=this.__zr;o&&i.removeSelfFromZr(o),this._doAdd(t)}return this},e.prototype._doAdd=function(t){t.parent&&t.parent.remove(t),t.parent=this;var a=this.__zr;a&&a!==t.__zr&&t.addSelfToZr(a),a&&a.refresh()},e.prototype.remove=function(t){var a=this.__zr,n=this._children,i=ct(n,t);return i<0?this:(n.splice(i,1),t.parent=null,a&&t.removeSelfFromZr(a),a&&a.refresh(),this)},e.prototype.removeAll=function(){for(var t=this._children,a=this.__zr,n=0;n0&&(this._stillFrameAccum++,this._stillFrameAccum>this._sleepAfterStill&&this.animation.stop())},r.prototype.setSleepAfterStill=function(e){this._sleepAfterStill=e},r.prototype.wakeUp=function(){this._disposed||(this.animation.start(),this._stillFrameAccum=0)},r.prototype.refreshHover=function(){this._needsRefreshHover=!0},r.prototype.refreshHoverImmediately=function(){this._disposed||(this._needsRefreshHover=!1,this.painter.refreshHover&&this.painter.getType()==="canvas"&&this.painter.refreshHover())},r.prototype.resize=function(e){this._disposed||(e=e||{},this.painter.resize(e.width,e.height),this.handler.resize())},r.prototype.clearAnimation=function(){this._disposed||this.animation.clear()},r.prototype.getWidth=function(){if(!this._disposed)return this.painter.getWidth()},r.prototype.getHeight=function(){if(!this._disposed)return this.painter.getHeight()},r.prototype.setCursorStyle=function(e){this._disposed||this.handler.setCursorStyle(e)},r.prototype.findHover=function(e,t){if(!this._disposed)return this.handler.findHover(e,t)},r.prototype.on=function(e,t,a){return this._disposed||this.handler.on(e,t,a),this},r.prototype.off=function(e,t){this._disposed||this.handler.off(e,t)},r.prototype.trigger=function(e,t){this._disposed||this.handler.trigger(e,t)},r.prototype.clear=function(){if(!this._disposed){for(var e=this.storage.getRoots(),t=0;t0){if(r<=n)return o;if(r>=i)return s}else{if(r>=n)return o;if(r<=i)return s}else{if(r===n)return o;if(r===i)return s}return(r-n)/l*u+o}function W(r,e){switch(r){case"center":case"middle":r="50%";break;case"left":case"top":r="0%";break;case"right":case"bottom":r="100%";break}return Y(r)?_P(r).match(/%$/)?parseFloat(r)/100*e:parseFloat(r):r==null?NaN:+r}function Ut(r,e,t){return e==null&&(e=10),e=Math.min(Math.max(0,e),uT),r=(+r).toFixed(e),t?r:+r}function ir(r){return r.sort(function(e,t){return e-t}),r}function Or(r){if(r=+r,isNaN(r))return 0;if(r>1e-14){for(var e=1,t=0;t<15;t++,e*=10)if(Math.round(r*e)/e===r)return t}return SP(r)}function SP(r){var e=r.toString().toLowerCase(),t=e.indexOf("e"),a=t>0?+e.slice(t+1):0,n=t>0?t:e.length,i=e.indexOf("."),o=i<0?0:n-1-i;return Math.max(0,o-a)}function fT(r,e){var t=Math.log,a=Math.LN10,n=Math.floor(t(r[1]-r[0])/a),i=Math.round(t(Math.abs(e[1]-e[0]))/a),o=Math.min(Math.max(-n+i,0),20);return isFinite(o)?o:20}function xP(r,e){var t=Fr(r,function(c,p){return c+(isNaN(p)?0:p)},0);if(t===0)return[];for(var a=Math.pow(10,e),n=G(r,function(c){return(isNaN(c)?0:c)/t*a*100}),i=a*100,o=G(n,function(c){return Math.floor(c)}),s=Fr(o,function(c,p){return c+p},0),l=G(n,function(c,p){return c-o[p]});su&&(u=l[h],f=h);++o[f],l[f]=0,++s}return G(o,function(c){return c/a})}function bP(r,e){var t=Math.max(Or(r),Or(e)),a=r+e;return t>uT?a:Ut(a,t)}var Qm=9007199254740991;function hT(r){var e=Math.PI*2;return(r%e+e)%e}function Gs(r){return r>-Km&&r=10&&e++,e}function vT(r,e){var t=bg(r),a=Math.pow(10,t),n=r/a,i;return n<1.5?i=1:n<2.5?i=2:n<4?i=3:n<7?i=5:i=10,r=i*a,t>=-20?+r.toFixed(t<0?-t:0):r}function cv(r,e){var t=(r.length-1)*e+1,a=Math.floor(t),n=+r[a-1],i=t-a;return i?n+i*(r[a]-n):n}function Jm(r){r.sort(function(l,u){return s(l,u,0)?-1:1});for(var e=-1/0,t=1,a=0;a=0||i&&ct(i,l)<0)){var u=a.getShallow(l,e);u!=null&&(o[r[s][0]]=u)}}return o}}var ZP=[["fill","color"],["shadowBlur"],["shadowOffsetX"],["shadowOffsetY"],["opacity"],["shadowColor"]],qP=ni(ZP),KP=(function(){function r(){}return r.prototype.getAreaStyle=function(e,t){return qP(this,e,t)},r})(),Yp=new fl(50);function QP(r){if(typeof r=="string"){var e=Yp.get(r);return e&&e.image}else return r}function Cg(r,e,t,a,n){if(r)if(typeof r=="string"){if(e&&e.__zrImageSrc===r||!t)return e;var i=Yp.get(r),o={hostEl:t,cb:a,cbPayload:n};return i?(e=i.image,!hh(e)&&i.pending.push(o)):(e=Xa.loadImage(r,r0,r0),e.__zrImageSrc=r,Yp.put(r,e.__cachedImgObj={image:e,pending:[o]})),e}else return r;else return e}function r0(){var r=this.__cachedImgObj;this.onload=this.onerror=this.__cachedImgObj=null;for(var e=0;e=o;l++)s-=o;var u=Ye(t,e);return u>s&&(t="",u=0),s=r-u,n.ellipsis=t,n.ellipsisWidth=u,n.contentWidth=s,n.containerWidth=r,n}function AT(r,e,t){var a=t.containerWidth,n=t.font,i=t.contentWidth;if(!a){r.textLine="",r.isTruncated=!1;return}var o=Ye(e,n);if(o<=a){r.textLine=e,r.isTruncated=!1;return}for(var s=0;;s++){if(o<=i||s>=t.maxIterations){e+=t.ellipsis;break}var l=s===0?jP(e,i,t.ascCharWidth,t.cnCharWidth):o>0?Math.floor(e.length*i/o):0;e=e.substr(0,l),o=Ye(e,n)}e===""&&(e=t.placeholder),r.textLine=e,r.isTruncated=!0}function jP(r,e,t,a){for(var n=0,i=0,o=r.length;i(o(),e("div",g,[(o(!0),e(n,null,l(_.categories,(t,A)=>(o(),e("div",{key:t.title,class:"category-section"},[s("div",v,[s("div",{class:"category-icon-wrap",style:i({background:`linear-gradient(135deg, ${t.color}20, ${t.color}08)`})},[s("span",{class:"category-icon",style:i({color:t.color}),innerHTML:t.icon},null,12,k)],4),s("div",m,[s("h3",y,c(t.title),1)]),s("div",{class:"category-line",style:i({background:`linear-gradient(90deg, ${t.color}40, transparent)`})},null,4)]),s("div",f,[(o(!0),e(n,null,l(t.articles,(a,h)=>(o(),e("a",{key:a.url,href:a.url,class:"article-card"},[s("div",{class:"card-indicator",style:i({background:t.color})},null,4),s("div",C,[s("div",L,[s("span",{class:"article-index",style:i({color:t.color})},c(String(h+1).padStart(2,"0")),5),a.description?(o(),e("span",b,"文章")):d("",!0)]),s("h4",w,c(a.title),1),a.description?(o(),e("p",B,c(a.description),1)):d("",!0)]),r[0]||(r[0]=s("div",{class:"card-action"},[s("span",{class:"action-text"},"阅读"),s("svg",{class:"action-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[s("path",{d:"M5 12h14M12 5l7 7-7 7"})])],-1))],8,x))),128))])]))),128))]))}}),F=u(M,[["__scopeId","data-v-d45a9e33"]]);export{F as A};
+import{d as p,g as e,h as o,F as n,t as l,i as s,W as i,x as c,y as d,_ as u}from"./vitepress-theme-teek.hoRu8K_n.js";const g={class:"article-card-list"},v={class:"category-header"},k=["innerHTML"],m={class:"category-info"},y={class:"category-title"},f={class:"article-grid"},x=["href"],C={class:"card-body"},L={class:"article-meta"},b={key:0,class:"article-tag"},w={class:"article-title"},B={key:0,class:"article-desc"},M=p({__name:"ArticleCardList",props:{categories:{}},setup(_){return(S,r)=>(o(),e("div",g,[(o(!0),e(n,null,l(_.categories,(t,A)=>(o(),e("div",{key:t.title,class:"category-section"},[s("div",v,[s("div",{class:"category-icon-wrap",style:i({background:`linear-gradient(135deg, ${t.color}20, ${t.color}08)`})},[s("span",{class:"category-icon",style:i({color:t.color}),innerHTML:t.icon},null,12,k)],4),s("div",m,[s("h3",y,c(t.title),1)]),s("div",{class:"category-line",style:i({background:`linear-gradient(90deg, ${t.color}40, transparent)`})},null,4)]),s("div",f,[(o(!0),e(n,null,l(t.articles,(a,h)=>(o(),e("a",{key:a.url,href:a.url,class:"article-card"},[s("div",{class:"card-indicator",style:i({background:t.color})},null,4),s("div",C,[s("div",L,[s("span",{class:"article-index",style:i({color:t.color})},c(String(h+1).padStart(2,"0")),5),a.description?(o(),e("span",b,"文章")):d("",!0)]),s("h4",w,c(a.title),1),a.description?(o(),e("p",B,c(a.description),1)):d("",!0)]),r[0]||(r[0]=s("div",{class:"card-action"},[s("span",{class:"action-text"},"阅读"),s("svg",{class:"action-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[s("path",{d:"M5 12h14M12 5l7 7-7 7"})])],-1))],8,x))),128))])]))),128))]))}}),F=u(M,[["__scopeId","data-v-d45a9e33"]]);export{F as A};
diff --git a/assets/chunks/HighLightText.OH_prbXR.js b/assets/chunks/HighLightText.PCRj7riB.js
similarity index 91%
rename from assets/chunks/HighLightText.OH_prbXR.js
rename to assets/chunks/HighLightText.PCRj7riB.js
index 3ff936eb..cad1ce5e 100644
--- a/assets/chunks/HighLightText.OH_prbXR.js
+++ b/assets/chunks/HighLightText.PCRj7riB.js
@@ -1 +1 @@
-import{d as r,c as e,p,h as d,s as c,V as i,W as u,k as g,X as h,_ as m}from"./vitepress-theme-teek.BZ9BuaTf.js";const x=r({__name:"HighLightText",props:{type:{default:"warning"},bold:{type:Boolean,default:!1},bgColor:{},textColor:{},padding:{default:"2px 6px"},borderRadius:{default:"3px"}},setup(o){const t=o,s=e(()=>t.bold?"strong":"span"),a=e(()=>["highlight-text",`highlight-text--${t.type}`]),l=e(()=>({"--hl-padding":t.padding,"--hl-border-radius":t.borderRadius,...t.type==="custom"?{"--hl-custom-bg":t.bgColor,"--hl-custom-text":t.textColor}:{}}));return(n,f)=>(d(),p(h(s.value),{class:g(a.value),style:u(l.value)},{default:c(()=>[i(n.$slots,"default",{},void 0,!0)]),_:3},8,["class","style"]))}}),b=m(x,[["__scopeId","data-v-f601581b"]]);export{b as H};
+import{d as r,c as e,p,h as d,s as c,V as i,W as u,k as g,X as h,_ as m}from"./vitepress-theme-teek.hoRu8K_n.js";const x=r({__name:"HighLightText",props:{type:{default:"warning"},bold:{type:Boolean,default:!1},bgColor:{},textColor:{},padding:{default:"2px 6px"},borderRadius:{default:"3px"}},setup(o){const t=o,s=e(()=>t.bold?"strong":"span"),a=e(()=>["highlight-text",`highlight-text--${t.type}`]),l=e(()=>({"--hl-padding":t.padding,"--hl-border-radius":t.borderRadius,...t.type==="custom"?{"--hl-custom-bg":t.bgColor,"--hl-custom-text":t.textColor}:{}}));return(n,f)=>(d(),p(h(s.value),{class:g(a.value),style:u(l.value)},{default:c(()=>[i(n.$slots,"default",{},void 0,!0)]),_:3},8,["class","style"]))}}),b=m(x,[["__scopeId","data-v-f601581b"]]);export{b as H};
diff --git a/assets/chunks/TwoColumnImage.D6Bqef7c.js b/assets/chunks/TwoColumnImage.BpSz0MTE.js
similarity index 91%
rename from assets/chunks/TwoColumnImage.D6Bqef7c.js
rename to assets/chunks/TwoColumnImage.BpSz0MTE.js
index 1f92cdb1..5e459532 100644
--- a/assets/chunks/TwoColumnImage.D6Bqef7c.js
+++ b/assets/chunks/TwoColumnImage.BpSz0MTE.js
@@ -1 +1 @@
-import{d as c,g as a,h as s,i as e,y as o,x as i,_ as l}from"./vitepress-theme-teek.BZ9BuaTf.js";const n={class:"two-column-image"},m={class:"image-column"},g=["src","alt"],r={key:0,class:"caption"},d={class:"image-column"},h=["src","alt"],f={key:0,class:"caption"},u=c({__name:"TwoColumnImage",props:{leftImage:{},rightImage:{},leftAlt:{},rightAlt:{},leftCaption:{},rightCaption:{}},setup(t){return(_,C)=>(s(),a("div",n,[e("div",m,[e("img",{src:t.leftImage,alt:t.leftAlt||"",class:"image"},null,8,g),t.leftCaption?(s(),a("p",r,i(t.leftCaption),1)):o("",!0)]),e("div",d,[e("img",{src:t.rightImage,alt:t.rightAlt||"",class:"image"},null,8,h),t.rightCaption?(s(),a("p",f,i(t.rightCaption),1)):o("",!0)])]))}}),p=l(u,[["__scopeId","data-v-1bf3bb09"]]);export{p as T};
+import{d as c,g as a,h as s,i as e,y as o,x as i,_ as l}from"./vitepress-theme-teek.hoRu8K_n.js";const n={class:"two-column-image"},m={class:"image-column"},g=["src","alt"],r={key:0,class:"caption"},d={class:"image-column"},h=["src","alt"],f={key:0,class:"caption"},u=c({__name:"TwoColumnImage",props:{leftImage:{},rightImage:{},leftAlt:{},rightAlt:{},leftCaption:{},rightCaption:{}},setup(t){return(_,C)=>(s(),a("div",n,[e("div",m,[e("img",{src:t.leftImage,alt:t.leftAlt||"",class:"image"},null,8,g),t.leftCaption?(s(),a("p",r,i(t.leftCaption),1)):o("",!0)]),e("div",d,[e("img",{src:t.rightImage,alt:t.rightAlt||"",class:"image"},null,8,h),t.rightCaption?(s(),a("p",f,i(t.rightCaption),1)):o("",!0)])]))}}),p=l(u,[["__scopeId","data-v-1bf3bb09"]]);export{p as T};
diff --git a/assets/chunks/VPLocalSearchBox.iMewz9fF.js b/assets/chunks/VPLocalSearchBox.BgFFs6HD.js
similarity index 99%
rename from assets/chunks/VPLocalSearchBox.iMewz9fF.js
rename to assets/chunks/VPLocalSearchBox.BgFFs6HD.js
index 4693d04b..9ba4cf91 100644
--- a/assets/chunks/VPLocalSearchBox.iMewz9fF.js
+++ b/assets/chunks/VPLocalSearchBox.BgFFs6HD.js
@@ -1,2 +1,2 @@
-import{Z as xt,$ as X,w as Le,c as he,a0 as _t,a1 as qe,a2 as St,a3 as Et,a4 as Tt,d as It,a5 as kt,a6 as Ge,r as oe,a7 as Nt,a8 as Ft,D as Ot,a9 as Ct,o as Ne,n as le,aa as be,j as Rt,ab as At,ac as Mt,ad as Lt,B as Dt,ae as Pt,p as zt,h as W,i as _,v as Vt,af as $t,l as C,ag as jt,ah as Bt,g as J,y as ye,k as He,t as Qe,F as Ye,S as ce,x as ue,T as Wt,ai as Ze,aj as Kt,L as Jt,J as Ut,ak as qt,_ as Gt}from"./vitepress-theme-teek.BZ9BuaTf.js";const Ht={root:()=>xt(()=>import("./@localSearchIndexroot.uPuB8hFt.js"),[])};var lt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Se=lt.join(","),ct=typeof Element>"u",Q=ct?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ee=!ct&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a?.ownerDocument},pe=function(e,t){var s;t===void 0&&(t=!0);var n=e==null||(s=e.getAttribute)===null||s===void 0?void 0:s.call(e,"inert"),r=n===""||n==="true",i=r||t&&e&&pe(e.parentNode);return i},Qt=function(e){var t,s=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return s===""||s==="true"},ut=function(e,t,s){if(pe(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Se));return t&&Q.call(e,Se)&&n.unshift(e),n=n.filter(s),n},Te=function(e,t,s){for(var n=[],r=Array.from(e);r.length;){var i=r.shift();if(!pe(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=Te(l,!0,s);s.flatten?n.push.apply(n,c):n.push({scopeParent:i,candidates:c})}else{var h=Q.call(i,Se);h&&s.filter(i)&&(t||!e.includes(i))&&n.push(i);var f=i.shadowRoot||typeof s.getShadowRoot=="function"&&s.getShadowRoot(i),p=!pe(f,!1)&&(!s.shadowRootFilter||s.shadowRootFilter(i));if(f&&p){var b=Te(f===!0?i.children:f.children,!0,s);s.flatten?n.push.apply(n,b):n.push({scopeParent:i,candidates:b})}else r.unshift.apply(r,i.children)}}return n},dt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},H=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||Qt(e))&&!dt(e)?0:e.tabIndex},Yt=function(e,t){var s=H(e);return s<0&&t&&!dt(e)?0:s},Zt=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},ht=function(e){return e.tagName==="INPUT"},Xt=function(e){return ht(e)&&e.type==="hidden"},es=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(s){return s.tagName==="SUMMARY"});return t},ts=function(e,t){for(var s=0;ssummary:first-of-type"),o=i?e.parentElement:e;if(Q.call(o,"details:not([open]) *"))return!0;if(!s||s==="full"||s==="full-native"||s==="legacy-full"){if(typeof n=="function"){for(var l=e;e;){var c=e.parentElement,h=Ee(e);if(c&&!c.shadowRoot&&n(c)===!0)return Xe(e);e.assignedSlot?e=e.assignedSlot:!c&&h!==e.ownerDocument?e=h.host:e=c}e=l}if(rs(e))return!e.getClientRects().length;if(s!=="legacy-full")return!0}else if(s==="non-zero-area")return Xe(e);return!1},os=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var s=0;s=0)},ft=function(e){var t=[],s=[];return e.forEach(function(n,r){var i=!!n.scopeParent,o=i?n.scopeParent:n,l=Yt(o,i),c=i?ft(n.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):s.push({documentOrder:r,tabIndex:l,item:n,isScope:i,content:c})}),s.sort(Zt).reduce(function(n,r){return r.isScope?n.push.apply(n,r.content):n.push(r.content),n},[]).concat(t)},cs=function(e,t){t=t||{};var s;return t.getShadowRoot?s=Te([e],t.includeContainer,{filter:De.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:ls}):s=ut(e,t.includeContainer,De.bind(null,t)),ft(s)},us=function(e,t){t=t||{};var s;return t.getShadowRoot?s=Te([e],t.includeContainer,{filter:Ie.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):s=ut(e,t.includeContainer,Ie.bind(null,t)),s},Y=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return Q.call(e,Se)===!1?!1:De(t,e)},ds=lt.concat("iframe").join(","),Fe=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return Q.call(e,ds)===!1?!1:Ie(t,e)};function Pe(a,e){(e==null||e>a.length)&&(e=a.length);for(var t=0,s=Array(e);txt(()=>import("./@localSearchIndexroot.CYRqDGI_.js"),[])};var lt=["input:not([inert])","select:not([inert])","textarea:not([inert])","a[href]:not([inert])","button:not([inert])","[tabindex]:not(slot):not([inert])","audio[controls]:not([inert])","video[controls]:not([inert])",'[contenteditable]:not([contenteditable="false"]):not([inert])',"details>summary:first-of-type:not([inert])","details:not([inert])"],Se=lt.join(","),ct=typeof Element>"u",Q=ct?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector,Ee=!ct&&Element.prototype.getRootNode?function(a){var e;return a==null||(e=a.getRootNode)===null||e===void 0?void 0:e.call(a)}:function(a){return a?.ownerDocument},pe=function(e,t){var s;t===void 0&&(t=!0);var n=e==null||(s=e.getAttribute)===null||s===void 0?void 0:s.call(e,"inert"),r=n===""||n==="true",i=r||t&&e&&pe(e.parentNode);return i},Qt=function(e){var t,s=e==null||(t=e.getAttribute)===null||t===void 0?void 0:t.call(e,"contenteditable");return s===""||s==="true"},ut=function(e,t,s){if(pe(e))return[];var n=Array.prototype.slice.apply(e.querySelectorAll(Se));return t&&Q.call(e,Se)&&n.unshift(e),n=n.filter(s),n},Te=function(e,t,s){for(var n=[],r=Array.from(e);r.length;){var i=r.shift();if(!pe(i,!1))if(i.tagName==="SLOT"){var o=i.assignedElements(),l=o.length?o:i.children,c=Te(l,!0,s);s.flatten?n.push.apply(n,c):n.push({scopeParent:i,candidates:c})}else{var h=Q.call(i,Se);h&&s.filter(i)&&(t||!e.includes(i))&&n.push(i);var f=i.shadowRoot||typeof s.getShadowRoot=="function"&&s.getShadowRoot(i),p=!pe(f,!1)&&(!s.shadowRootFilter||s.shadowRootFilter(i));if(f&&p){var b=Te(f===!0?i.children:f.children,!0,s);s.flatten?n.push.apply(n,b):n.push({scopeParent:i,candidates:b})}else r.unshift.apply(r,i.children)}}return n},dt=function(e){return!isNaN(parseInt(e.getAttribute("tabindex"),10))},H=function(e){if(!e)throw new Error("No node provided");return e.tabIndex<0&&(/^(AUDIO|VIDEO|DETAILS)$/.test(e.tagName)||Qt(e))&&!dt(e)?0:e.tabIndex},Yt=function(e,t){var s=H(e);return s<0&&t&&!dt(e)?0:s},Zt=function(e,t){return e.tabIndex===t.tabIndex?e.documentOrder-t.documentOrder:e.tabIndex-t.tabIndex},ht=function(e){return e.tagName==="INPUT"},Xt=function(e){return ht(e)&&e.type==="hidden"},es=function(e){var t=e.tagName==="DETAILS"&&Array.prototype.slice.apply(e.children).some(function(s){return s.tagName==="SUMMARY"});return t},ts=function(e,t){for(var s=0;ssummary:first-of-type"),o=i?e.parentElement:e;if(Q.call(o,"details:not([open]) *"))return!0;if(!s||s==="full"||s==="full-native"||s==="legacy-full"){if(typeof n=="function"){for(var l=e;e;){var c=e.parentElement,h=Ee(e);if(c&&!c.shadowRoot&&n(c)===!0)return Xe(e);e.assignedSlot?e=e.assignedSlot:!c&&h!==e.ownerDocument?e=h.host:e=c}e=l}if(rs(e))return!e.getClientRects().length;if(s!=="legacy-full")return!0}else if(s==="non-zero-area")return Xe(e);return!1},os=function(e){if(/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(e.tagName))for(var t=e.parentElement;t;){if(t.tagName==="FIELDSET"&&t.disabled){for(var s=0;s=0)},ft=function(e){var t=[],s=[];return e.forEach(function(n,r){var i=!!n.scopeParent,o=i?n.scopeParent:n,l=Yt(o,i),c=i?ft(n.candidates):o;l===0?i?t.push.apply(t,c):t.push(o):s.push({documentOrder:r,tabIndex:l,item:n,isScope:i,content:c})}),s.sort(Zt).reduce(function(n,r){return r.isScope?n.push.apply(n,r.content):n.push(r.content),n},[]).concat(t)},cs=function(e,t){t=t||{};var s;return t.getShadowRoot?s=Te([e],t.includeContainer,{filter:De.bind(null,t),flatten:!1,getShadowRoot:t.getShadowRoot,shadowRootFilter:ls}):s=ut(e,t.includeContainer,De.bind(null,t)),ft(s)},us=function(e,t){t=t||{};var s;return t.getShadowRoot?s=Te([e],t.includeContainer,{filter:Ie.bind(null,t),flatten:!0,getShadowRoot:t.getShadowRoot}):s=ut(e,t.includeContainer,Ie.bind(null,t)),s},Y=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return Q.call(e,Se)===!1?!1:De(t,e)},ds=lt.concat("iframe").join(","),Fe=function(e,t){if(t=t||{},!e)throw new Error("No node provided");return Q.call(e,ds)===!1?!1:Ie(t,e)};function Pe(a,e){(e==null||e>a.length)&&(e=a.length);for(var t=0,s=Array(e);t0){var s=e[e.length-1];s!==t&&s._setPausedState(!0)}var n=e.indexOf(t);n===-1||e.splice(n,1),e.push(t)},deactivateTrap:function(e,t){var s=e.indexOf(t);s!==-1&&e.splice(s,1),e.length>0&&!e[e.length-1]._isManuallyPaused()&&e[e.length-1]._setPausedState(!1)}},ws=function(e){return e.tagName&&e.tagName.toLowerCase()==="input"&&typeof e.select=="function"},xs=function(e){return e?.key==="Escape"||e?.key==="Esc"||e?.keyCode===27},fe=function(e){return e?.key==="Tab"||e?.keyCode===9},_s=function(e){return fe(e)&&!e.shiftKey},Ss=function(e){return fe(e)&&e.shiftKey},nt=function(e){return setTimeout(e,0)},de=function(e){for(var t=arguments.length,s=new Array(t>1?t-1:0),n=1;n1&&arguments[1]!==void 0?arguments[1]:{},g=d.hasFallback,E=g===void 0?!1:g,T=d.params,k=T===void 0?[]:T,m=r[u];if(typeof m=="function"&&(m=m.apply(void 0,ms(k))),m===!0&&(m=void 0),!m){if(m===void 0||m===!1)return m;throw new Error("`".concat(u,"` was specified but was not a node, or did not return a node"))}var v=m;if(typeof m=="string"){try{v=s.querySelector(m)}catch(w){throw new Error("`".concat(u,'` appears to be an invalid selector; error="').concat(w.message,'"'))}if(!v&&!E)throw new Error("`".concat(u,"` as selector refers to no known node"))}return v},f=function(){var u=h("initialFocus",{hasFallback:!0});if(u===!1)return!1;if(u===void 0||u&&!Fe(u,r.tabbableOptions))if(c(s.activeElement)>=0)u=s.activeElement;else{var d=i.tabbableGroups[0],g=d&&d.firstTabbableNode;u=g||h("fallbackFocus")}else u===null&&(u=h("fallbackFocus"));if(!u)throw new Error("Your focus-trap needs to have at least one focusable element");return u},p=function(){if(i.containerGroups=i.containers.map(function(u){var d=cs(u,r.tabbableOptions),g=us(u,r.tabbableOptions),E=d.length>0?d[0]:void 0,T=d.length>0?d[d.length-1]:void 0,k=g.find(function(w){return Y(w)}),m=g.slice().reverse().find(function(w){return Y(w)}),v=!!d.find(function(w){return H(w)>0});return{container:u,tabbableNodes:d,focusableNodes:g,posTabIndexesFound:v,firstTabbableNode:E,lastTabbableNode:T,firstDomTabbableNode:k,lastDomTabbableNode:m,nextTabbableNode:function(A){var z=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,L=d.indexOf(A);return L<0?z?g.slice(g.indexOf(A)+1).find(function(q){return Y(q)}):g.slice(0,g.indexOf(A)).reverse().find(function(q){return Y(q)}):d[L+(z?1:-1)]}}}),i.tabbableGroups=i.containerGroups.filter(function(u){return u.tabbableNodes.length>0}),i.tabbableGroups.length<=0&&!h("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(i.containerGroups.find(function(u){return u.posTabIndexesFound})&&i.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},b=function(u){var d=u.activeElement;if(d)return d.shadowRoot&&d.shadowRoot.activeElement!==null?b(d.shadowRoot):d},x=function(u){if(u!==!1&&u!==b(document)){if(!u||!u.focus){x(f());return}u.focus({preventScroll:!!r.preventScroll}),i.mostRecentlyFocusedNode=u,ws(u)&&u.select()}},S=function(u){var d=h("setReturnFocus",{params:[u]});return d||(d===!1?!1:u)},y=function(u){var d=u.target,g=u.event,E=u.isBackward,T=E===void 0?!1:E;d=d||we(g),p();var k=null;if(i.tabbableGroups.length>0){var m=c(d,g),v=m>=0?i.containerGroups[m]:void 0;if(m<0)T?k=i.tabbableGroups[i.tabbableGroups.length-1].lastTabbableNode:k=i.tabbableGroups[0].firstTabbableNode;else if(T){var w=i.tabbableGroups.findIndex(function(ne){var M=ne.firstTabbableNode;return d===M});if(w<0&&(v.container===d||Fe(d,r.tabbableOptions)&&!Y(d,r.tabbableOptions)&&!v.nextTabbableNode(d,!1))&&(w=m),w>=0){var A=w===0?i.tabbableGroups.length-1:w-1,z=i.tabbableGroups[A];k=H(d)>=0?z.lastTabbableNode:z.lastDomTabbableNode}else fe(g)||(k=v.nextTabbableNode(d,!1))}else{var L=i.tabbableGroups.findIndex(function(ne){var M=ne.lastTabbableNode;return d===M});if(L<0&&(v.container===d||Fe(d,r.tabbableOptions)&&!Y(d,r.tabbableOptions)&&!v.nextTabbableNode(d))&&(L=m),L>=0){var q=L===i.tabbableGroups.length-1?0:L+1,se=i.tabbableGroups[q];k=H(d)>=0?se.firstTabbableNode:se.firstDomTabbableNode}else fe(g)||(k=v.nextTabbableNode(d))}}else k=h("fallbackFocus");return k},N=function(u){var d=we(u);if(!(c(d,u)>=0)){if(de(r.clickOutsideDeactivates,u)){o.deactivate({returnFocus:r.returnFocusOnDeactivate});return}de(r.allowOutsideClick,u)||u.preventDefault()}},F=function(u){var d=we(u),g=c(d,u)>=0;if(g||d instanceof Document)g&&(i.mostRecentlyFocusedNode=d);else{u.stopImmediatePropagation();var E,T=!0;if(i.mostRecentlyFocusedNode)if(H(i.mostRecentlyFocusedNode)>0){var k=c(i.mostRecentlyFocusedNode),m=i.containerGroups[k].tabbableNodes;if(m.length>0){var v=m.findIndex(function(w){return w===i.mostRecentlyFocusedNode});v>=0&&(r.isKeyForward(i.recentNavEvent)?v+1=0&&(E=m[v-1],T=!1))}}else i.containerGroups.some(function(w){return w.tabbableNodes.some(function(A){return H(A)>0})})||(T=!1);else T=!1;T&&(E=y({target:i.mostRecentlyFocusedNode,isBackward:r.isKeyBackward(i.recentNavEvent)})),x(E||i.mostRecentlyFocusedNode||f())}i.recentNavEvent=void 0},$=function(u){var d=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;i.recentNavEvent=u;var g=y({event:u,isBackward:d});g&&(fe(u)&&u.preventDefault(),x(g))},K=function(u){(r.isKeyForward(u)||r.isKeyBackward(u))&&$(u,r.isKeyBackward(u))},V=function(u){xs(u)&&de(r.escapeDeactivates,u)!==!1&&(u.preventDefault(),o.deactivate())},D=function(u){var d=we(u);c(d,u)>=0||de(r.clickOutsideDeactivates,u)||de(r.allowOutsideClick,u)||(u.preventDefault(),u.stopImmediatePropagation())},P=function(){if(i.active)return st.activateTrap(n,o),i.delayInitialFocusTimer=r.delayInitialFocus?nt(function(){x(f())}):x(f()),s.addEventListener("focusin",F,!0),s.addEventListener("mousedown",N,{capture:!0,passive:!1}),s.addEventListener("touchstart",N,{capture:!0,passive:!1}),s.addEventListener("click",D,{capture:!0,passive:!1}),s.addEventListener("keydown",K,{capture:!0,passive:!1}),s.addEventListener("keydown",V),o},ve=function(){if(i.active)return s.removeEventListener("focusin",F,!0),s.removeEventListener("mousedown",N,!0),s.removeEventListener("touchstart",N,!0),s.removeEventListener("click",D,!0),s.removeEventListener("keydown",K,!0),s.removeEventListener("keydown",V),o},O=function(u){var d=u.some(function(g){var E=Array.from(g.removedNodes);return E.some(function(T){return T===i.mostRecentlyFocusedNode})});d&&x(f())},j=typeof window<"u"&&"MutationObserver"in window?new MutationObserver(O):void 0,B=function(){j&&(j.disconnect(),i.active&&!i.paused&&i.containers.map(function(u){j.observe(u,{subtree:!0,childList:!0})}))};return o={get active(){return i.active},get paused(){return i.paused},activate:function(u){if(i.active)return this;var d=l(u,"onActivate"),g=l(u,"onPostActivate"),E=l(u,"checkCanFocusTrap");E||p(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=b(s),d?.();var T=function(){E&&p(),P(),B(),g?.()};return E?(E(i.containers.concat()).then(T,T),this):(T(),this)},deactivate:function(u){if(!i.active)return this;var d=tt({onDeactivate:r.onDeactivate,onPostDeactivate:r.onPostDeactivate,checkCanReturnFocus:r.checkCanReturnFocus},u);clearTimeout(i.delayInitialFocusTimer),i.delayInitialFocusTimer=void 0,ve(),i.active=!1,i.paused=!1,B(),st.deactivateTrap(n,o);var g=l(d,"onDeactivate"),E=l(d,"onPostDeactivate"),T=l(d,"checkCanReturnFocus"),k=l(d,"returnFocus","returnFocusOnDeactivate");g?.();var m=function(){nt(function(){k&&x(S(i.nodeFocusedBeforeActivation)),E?.()})};return k&&T?(T(S(i.nodeFocusedBeforeActivation)).then(m,m),this):(m(),this)},pause:function(u){return i.active?(i.manuallyPaused=!0,this._setPausedState(!0,u)):this},unpause:function(u){return i.active?(i.manuallyPaused=!1,n[n.length-1]!==this?this:this._setPausedState(!1,u)):this},updateContainerElements:function(u){var d=[].concat(u).filter(Boolean);return i.containers=d.map(function(g){return typeof g=="string"?s.querySelector(g):g}),i.active&&p(),B(),this}},Object.defineProperties(o,{_isManuallyPaused:{value:function(){return i.manuallyPaused}},_setPausedState:{value:function(u,d){if(i.paused===u)return this;if(i.paused=u,u){var g=l(d,"onPause"),E=l(d,"onPostPause");g?.(),ve(),B(),E?.()}else{var T=l(d,"onUnpause"),k=l(d,"onPostUnpause");T?.(),p(),P(),B(),k?.()}return this}}}),o.updateContainerElements(e),o};function Is(a,e={}){let t;const{immediate:s,...n}=e,r=X(!1),i=X(!1),o=f=>t&&t.activate(f),l=f=>t&&t.deactivate(f),c=()=>{t&&(t.pause(),i.value=!0)},h=()=>{t&&(t.unpause(),i.value=!1)};return Le(he(()=>_t(qe(a)).map(f=>{const p=qe(f);return typeof p=="string"?p:St(p)}).filter(Et)),f=>{if(f.length)if(!t)t=Ts(f,{...n,onActivate(){r.value=!0,e.onActivate&&e.onActivate()},onDeactivate(){r.value=!1,e.onDeactivate&&e.onDeactivate()}}),s&&o();else{const p=t?.active;t?.updateContainerElements(f),!p&&s&&o()}},{flush:"post"}),Tt(()=>l()),{hasFocus:r,isPaused:i,activate:o,deactivate:l,pause:c,unpause:h}}class ee{constructor(e,t=!0,s=[],n=5e3){this.ctx=e,this.iframes=t,this.exclude=s,this.iframesTimeout=n}static matches(e,t){const s=typeof t=="string"?[t]:t,n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(n){let r=!1;return s.every(i=>n.call(e,i)?(r=!0,!1):!0),r}else return!1}getContexts(){let e,t=[];return typeof this.ctx>"u"||!this.ctx?e=[]:NodeList.prototype.isPrototypeOf(this.ctx)?e=Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?e=this.ctx:typeof this.ctx=="string"?e=Array.prototype.slice.call(document.querySelectorAll(this.ctx)):e=[this.ctx],e.forEach(s=>{const n=t.filter(r=>r.contains(s)).length>0;t.indexOf(s)===-1&&!n&&t.push(s)}),t}getIframeContents(e,t,s=()=>{}){let n;try{const r=e.contentWindow;if(n=r.document,!r||!n)throw new Error("iframe inaccessible")}catch{s()}n&&t(n)}isIframeBlank(e){const t="about:blank",s=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&s!==t&&s}observeIframeLoad(e,t,s){let n=!1,r=null;const i=()=>{if(!n){n=!0,clearTimeout(r);try{this.isIframeBlank(e)||(e.removeEventListener("load",i),this.getIframeContents(e,t,s))}catch{s()}}};e.addEventListener("load",i),r=setTimeout(i,this.iframesTimeout)}onIframeReady(e,t,s){try{e.contentWindow.document.readyState==="complete"?this.isIframeBlank(e)?this.observeIframeLoad(e,t,s):this.getIframeContents(e,t,s):this.observeIframeLoad(e,t,s)}catch{s()}}waitForIframes(e,t){let s=0;this.forEachIframe(e,()=>!0,n=>{s++,this.waitForIframes(n.querySelector("html"),()=>{--s||t()})},n=>{n||t()})}forEachIframe(e,t,s,n=()=>{}){let r=e.querySelectorAll("iframe"),i=r.length,o=0;r=Array.prototype.slice.call(r);const l=()=>{--i<=0&&n(o)};i||l(),r.forEach(c=>{ee.matches(c,this.exclude)?l():this.onIframeReady(c,h=>{t(c)&&(o++,s(h)),l()},l)})}createIterator(e,t,s){return document.createNodeIterator(e,t,s,!1)}createInstanceOnIframe(e){return new ee(e.querySelector("html"),this.iframes)}compareNodeIframe(e,t,s){const n=e.compareDocumentPosition(s),r=Node.DOCUMENT_POSITION_PRECEDING;if(n&r)if(t!==null){const i=t.compareDocumentPosition(s),o=Node.DOCUMENT_POSITION_FOLLOWING;if(i&o)return!0}else return!0;return!1}getIteratorNode(e){const t=e.previousNode();let s;return t===null?s=e.nextNode():s=e.nextNode()&&e.nextNode(),{prevNode:t,node:s}}checkIframeFilter(e,t,s,n){let r=!1,i=!1;return n.forEach((o,l)=>{o.val===s&&(r=l,i=o.handled)}),this.compareNodeIframe(e,t,s)?(r===!1&&!i?n.push({val:s,handled:!0}):r!==!1&&!i&&(n[r].handled=!0),!0):(r===!1&&n.push({val:s,handled:!1}),!1)}handleOpenIframes(e,t,s,n){e.forEach(r=>{r.handled||this.getIframeContents(r.val,i=>{this.createInstanceOnIframe(i).forEachNode(t,s,n)})})}iterateThroughNodes(e,t,s,n,r){const i=this.createIterator(t,e,n);let o=[],l=[],c,h,f=()=>({prevNode:h,node:c}=this.getIteratorNode(i),c);for(;f();)this.iframes&&this.forEachIframe(t,p=>this.checkIframeFilter(c,h,p,o),p=>{this.createInstanceOnIframe(p).forEachNode(e,b=>l.push(b),n)}),l.push(c);l.forEach(p=>{s(p)}),this.iframes&&this.handleOpenIframes(o,e,s,n),r()}forEachNode(e,t,s,n=()=>{}){const r=this.getContexts();let i=r.length;i||n(),r.forEach(o=>{const l=()=>{this.iterateThroughNodes(e,o,t,s,()=>{--i<=0&&n()})};this.iframes?this.waitForIframes(o,l):l()})}}let ks=class{constructor(e){this.ctx=e,this.ie=!1;const t=window.navigator.userAgent;(t.indexOf("MSIE")>-1||t.indexOf("Trident")>-1)&&(this.ie=!0)}set opt(e){this._opt=Object.assign({},{element:"",className:"",exclude:[],iframes:!1,iframesTimeout:5e3,separateWordSearch:!0,diacritics:!0,synonyms:{},accuracy:"partially",acrossElements:!1,caseSensitive:!1,ignoreJoiners:!1,ignoreGroups:0,ignorePunctuation:[],wildcards:"disabled",each:()=>{},noMatch:()=>{},filter:()=>!0,done:()=>{},debug:!1,log:window.console},e)}get opt(){return this._opt}get iterator(){return new ee(this.ctx,this.opt.iframes,this.opt.exclude,this.opt.iframesTimeout)}log(e,t="debug"){const s=this.opt.log;this.opt.debug&&typeof s=="object"&&typeof s[t]=="function"&&s[t](`mark.js: ${e}`)}escapeStr(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}createRegExp(e){return this.opt.wildcards!=="disabled"&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),this.opt.wildcards!=="disabled"&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e),e}createSynonymsRegExp(e){const t=this.opt.synonyms,s=this.opt.caseSensitive?"":"i",n=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(let r in t)if(t.hasOwnProperty(r)){const i=t[r],o=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(r):this.escapeStr(r),l=this.opt.wildcards!=="disabled"?this.setupWildcardsRegExp(i):this.escapeStr(i);o!==""&&l!==""&&(e=e.replace(new RegExp(`(${this.escapeStr(o)}|${this.escapeStr(l)})`,`gm${s}`),n+`(${this.processSynomyms(o)}|${this.processSynomyms(l)})`+n))}return e}processSynomyms(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}setupWildcardsRegExp(e){return e=e.replace(/(?:\\)*\?/g,t=>t.charAt(0)==="\\"?"?":""),e.replace(/(?:\\)*\*/g,t=>t.charAt(0)==="\\"?"*":"")}createWildcardsRegExp(e){let t=this.opt.wildcards==="withSpaces";return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}setupIgnoreJoinersRegExp(e){return e.replace(/[^(|)\\]/g,(t,s,n)=>{let r=n.charAt(s+1);return/[(|)\\]/.test(r)||r===""?t:t+"\0"})}createJoinersRegExp(e){let t=[];const s=this.opt.ignorePunctuation;return Array.isArray(s)&&s.length&&t.push(this.escapeStr(s.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join(`[${t.join("")}]*`):e}createDiacriticsRegExp(e){const t=this.opt.caseSensitive?"":"i",s=this.opt.caseSensitive?["aàáảãạăằắẳẵặâầấẩẫậäåāą","AÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćč","CÇĆČ","dđď","DĐĎ","eèéẻẽẹêềếểễệëěēę","EÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïī","IÌÍỈĨỊÎÏĪ","lł","LŁ","nñňń","NÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøō","OÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rř","RŘ","sšśșş","SŠŚȘŞ","tťțţ","TŤȚŢ","uùúủũụưừứửữựûüůū","UÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿ","YÝỲỶỸỴŸ","zžżź","ZŽŻŹ"]:["aàáảãạăằắẳẵặâầấẩẫậäåāąAÀÁẢÃẠĂẰẮẲẴẶÂẦẤẨẪẬÄÅĀĄ","cçćčCÇĆČ","dđďDĐĎ","eèéẻẽẹêềếểễệëěēęEÈÉẺẼẸÊỀẾỂỄỆËĚĒĘ","iìíỉĩịîïīIÌÍỈĨỊÎÏĪ","lłLŁ","nñňńNÑŇŃ","oòóỏõọôồốổỗộơởỡớờợöøōOÒÓỎÕỌÔỒỐỔỖỘƠỞỠỚỜỢÖØŌ","rřRŘ","sšśșşSŠŚȘŞ","tťțţTŤȚŢ","uùúủũụưừứửữựûüůūUÙÚỦŨỤƯỪỨỬỮỰÛÜŮŪ","yýỳỷỹỵÿYÝỲỶỸỴŸ","zžżźZŽŻŹ"];let n=[];return e.split("").forEach(r=>{s.every(i=>{if(i.indexOf(r)!==-1){if(n.indexOf(i)>-1)return!1;e=e.replace(new RegExp(`[${i}]`,`gm${t}`),`[${i}]`),n.push(i)}return!0})}),e}createMergedBlanksRegExp(e){return e.replace(/[\s]+/gmi,"[\\s]+")}createAccuracyRegExp(e){const t="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~¡¿";let s=this.opt.accuracy,n=typeof s=="string"?s:s.value,r=typeof s=="string"?[]:s.limiters,i="";switch(r.forEach(o=>{i+=`|${this.escapeStr(o)}`}),n){case"partially":default:return`()(${e})`;case"complementary":return i="\\s"+(i||this.escapeStr(t)),`()([^${i}]*${e}[^${i}]*)`;case"exactly":return`(^|\\s${i})(${e})(?=$|\\s${i})`}}getSeparatedKeywords(e){let t=[];return e.forEach(s=>{this.opt.separateWordSearch?s.split(" ").forEach(n=>{n.trim()&&t.indexOf(n)===-1&&t.push(n)}):s.trim()&&t.indexOf(s)===-1&&t.push(s)}),{keywords:t.sort((s,n)=>n.length-s.length),length:t.length}}isNumeric(e){return Number(parseFloat(e))==e}checkRanges(e){if(!Array.isArray(e)||Object.prototype.toString.call(e[0])!=="[object Object]")return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];const t=[];let s=0;return e.sort((n,r)=>n.start-r.start).forEach(n=>{let{start:r,end:i,valid:o}=this.callNoMatchOnInvalidRanges(n,s);o&&(n.start=r,n.length=i-r,t.push(n),s=i)}),t}callNoMatchOnInvalidRanges(e,t){let s,n,r=!1;return e&&typeof e.start<"u"?(s=parseInt(e.start,10),n=s+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&n-t>0&&n-s>0?r=!0:(this.log(`Ignoring invalid or overlapping range: ${JSON.stringify(e)}`),this.opt.noMatch(e))):(this.log(`Ignoring invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)),{start:s,end:n,valid:r}}checkWhitespaceRanges(e,t,s){let n,r=!0,i=s.length,o=t-i,l=parseInt(e.start,10)-o;return l=l>i?i:l,n=l+parseInt(e.length,10),n>i&&(n=i,this.log(`End range automatically set to the max value of ${i}`)),l<0||n-l<0||l>i||n>i?(r=!1,this.log(`Invalid range: ${JSON.stringify(e)}`),this.opt.noMatch(e)):s.substring(l,n).replace(/\s+/g,"")===""&&(r=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:l,end:n,valid:r}}getTextNodes(e){let t="",s=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,n=>{s.push({start:t.length,end:(t+=n.textContent).length,node:n})},n=>this.matchesExclude(n.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT,()=>{e({value:t,nodes:s})})}matchesExclude(e){return ee.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}wrapRangeInTextNode(e,t,s){const n=this.opt.element?this.opt.element:"mark",r=e.splitText(t),i=r.splitText(s-t);let o=document.createElement(n);return o.setAttribute("data-markjs","true"),this.opt.className&&o.setAttribute("class",this.opt.className),o.textContent=r.textContent,r.parentNode.replaceChild(o,r),i}wrapRangeInMappedTextNode(e,t,s,n,r){e.nodes.every((i,o)=>{const l=e.nodes[o+1];if(typeof l>"u"||l.start>t){if(!n(i.node))return!1;const c=t-i.start,h=(s>i.end?i.end:s)-i.start,f=e.value.substr(0,i.start),p=e.value.substr(h+i.start);if(i.node=this.wrapRangeInTextNode(i.node,c,h),e.value=f+p,e.nodes.forEach((b,x)=>{x>=o&&(e.nodes[x].start>0&&x!==o&&(e.nodes[x].start-=h),e.nodes[x].end-=h)}),s-=h,r(i.node.previousSibling,i.start),s>i.end)t=i.end;else return!1}return!0})}wrapMatches(e,t,s,n,r){const i=t===0?0:t+1;this.getTextNodes(o=>{o.nodes.forEach(l=>{l=l.node;let c;for(;(c=e.exec(l.textContent))!==null&&c[i]!=="";){if(!s(c[i],l))continue;let h=c.index;if(i!==0)for(let f=1;f{let l;for(;(l=e.exec(o.value))!==null&&l[i]!=="";){let c=l.index;if(i!==0)for(let f=1;fs(l[i],f),(f,p)=>{e.lastIndex=p,n(f)})}r()})}wrapRangeFromIndex(e,t,s,n){this.getTextNodes(r=>{const i=r.value.length;e.forEach((o,l)=>{let{start:c,end:h,valid:f}=this.checkWhitespaceRanges(o,i,r.value);f&&this.wrapRangeInMappedTextNode(r,c,h,p=>t(p,o,r.value.substring(c,h),l),p=>{s(p,o)})}),n()})}unwrapMatches(e){const t=e.parentNode;let s=document.createDocumentFragment();for(;e.firstChild;)s.appendChild(e.removeChild(e.firstChild));t.replaceChild(s,e),this.ie?this.normalizeTextNode(t):t.normalize()}normalizeTextNode(e){if(e){if(e.nodeType===3)for(;e.nextSibling&&e.nextSibling.nodeType===3;)e.nodeValue+=e.nextSibling.nodeValue,e.parentNode.removeChild(e.nextSibling);else this.normalizeTextNode(e.firstChild);this.normalizeTextNode(e.nextSibling)}}markRegExp(e,t){this.opt=t,this.log(`Searching with expression "${e}"`);let s=0,n="wrapMatches";const r=i=>{s++,this.opt.each(i)};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),this[n](e,this.opt.ignoreGroups,(i,o)=>this.opt.filter(o,i,s),r,()=>{s===0&&this.opt.noMatch(e),this.opt.done(s)})}mark(e,t){this.opt=t;let s=0,n="wrapMatches";const{keywords:r,length:i}=this.getSeparatedKeywords(typeof e=="string"?[e]:e),o=this.opt.caseSensitive?"":"i",l=c=>{let h=new RegExp(this.createRegExp(c),`gm${o}`),f=0;this.log(`Searching with expression "${h}"`),this[n](h,1,(p,b)=>this.opt.filter(b,c,s,f),p=>{f++,s++,this.opt.each(p)},()=>{f===0&&this.opt.noMatch(c),r[i-1]===c?this.opt.done(s):l(r[r.indexOf(c)+1])})};this.opt.acrossElements&&(n="wrapMatchesAcrossElements"),i===0?this.opt.done(s):l(r[0])}markRanges(e,t){this.opt=t;let s=0,n=this.checkRanges(e);n&&n.length?(this.log("Starting to mark with the following ranges: "+JSON.stringify(n)),this.wrapRangeFromIndex(n,(r,i,o,l)=>this.opt.filter(r,i,o,l),(r,i)=>{s++,this.opt.each(r,i)},()=>{this.opt.done(s)})):this.opt.done(s)}unmark(e){this.opt=e;let t=this.opt.element?this.opt.element:"*";t+="[data-markjs]",this.opt.className&&(t+=`.${this.opt.className}`),this.log(`Removal selector "${t}"`),this.iterator.forEachNode(NodeFilter.SHOW_ELEMENT,s=>{this.unwrapMatches(s)},s=>{const n=ee.matches(s,t),r=this.matchesExclude(s);return!n||r?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT},this.opt.done)}};function Ns(a){const e=new ks(a);return this.mark=(t,s)=>(e.mark(t,s),this),this.markRegExp=(t,s)=>(e.markRegExp(t,s),this),this.markRanges=(t,s)=>(e.markRanges(t,s),this),this.unmark=t=>(e.unmark(t),this),this}const Fs="ENTRIES",pt="KEYS",vt="VALUES",R="";class Oe{constructor(e,t){const s=e._tree,n=Array.from(s.keys());this.set=e,this._type=t,this._path=n.length>0?[{node:s,keys:n}]:[]}next(){const e=this.dive();return this.backtrack(),e}dive(){if(this._path.length===0)return{done:!0,value:void 0};const{node:e,keys:t}=Z(this._path);if(Z(t)===R)return{done:!1,value:this.result()};const s=e.get(Z(t));return this._path.push({node:s,keys:Array.from(s.keys())}),this.dive()}backtrack(){if(this._path.length===0)return;const e=Z(this._path).keys;e.pop(),!(e.length>0)&&(this._path.pop(),this.backtrack())}key(){return this.set._prefix+this._path.map(({keys:e})=>Z(e)).filter(e=>e!==R).join("")}value(){return Z(this._path).node.get(R)}result(){switch(this._type){case vt:return this.value();case pt:return this.key();default:return[this.key(),this.value()]}}[Symbol.iterator](){return this}}const Z=a=>a[a.length-1],Os=(a,e,t)=>{const s=new Map;if(e===void 0)return s;const n=e.length+1,r=n+t,i=new Uint8Array(r*n).fill(t+1);for(let o=0;o{const l=r*i;e:for(const c of a.keys())if(c===R){const h=n[l-1];h<=t&&s.set(o,[a.get(c),h])}else{let h=r;for(let f=0;ft)continue e}mt(a.get(c),e,t,s,n,h,i,o+c)}};class U{constructor(e=new Map,t=""){this._size=void 0,this._tree=e,this._prefix=t}atPrefix(e){if(!e.startsWith(this._prefix))throw new Error("Mismatched prefix");const[t,s]=ke(this._tree,e.slice(this._prefix.length));if(t===void 0){const[n,r]=je(s);for(const i of n.keys())if(i!==R&&i.startsWith(r)){const o=new Map;return o.set(i.slice(r.length),n.get(i)),new U(o,e)}}return new U(t,e)}clear(){this._size=void 0,this._tree.clear()}delete(e){return this._size=void 0,Cs(this._tree,e)}entries(){return new Oe(this,Fs)}forEach(e){for(const[t,s]of this)e(t,s,this)}fuzzyGet(e,t){return Os(this._tree,e,t)}get(e){const t=ze(this._tree,e);return t!==void 0?t.get(R):void 0}has(e){const t=ze(this._tree,e);return t!==void 0&&t.has(R)}keys(){return new Oe(this,pt)}set(e,t){if(typeof e!="string")throw new Error("key must be a string");return this._size=void 0,Ce(this._tree,e).set(R,t),this}get size(){if(this._size)return this._size;this._size=0;const e=this.entries();for(;!e.next().done;)this._size+=1;return this._size}update(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=Ce(this._tree,e);return s.set(R,t(s.get(R))),this}fetch(e,t){if(typeof e!="string")throw new Error("key must be a string");this._size=void 0;const s=Ce(this._tree,e);let n=s.get(R);return n===void 0&&s.set(R,n=t()),n}values(){return new Oe(this,vt)}[Symbol.iterator](){return this.entries()}static from(e){const t=new U;for(const[s,n]of e)t.set(s,n);return t}static fromObject(e){return U.from(Object.entries(e))}}const ke=(a,e,t=[])=>{if(e.length===0||a==null)return[a,t];for(const s of a.keys())if(s!==R&&e.startsWith(s))return t.push([a,s]),ke(a.get(s),e.slice(s.length),t);return t.push([a,e]),ke(void 0,"",t)},ze=(a,e)=>{if(e.length===0||a==null)return a;for(const t of a.keys())if(t!==R&&e.startsWith(t))return ze(a.get(t),e.slice(t.length))},Ce=(a,e)=>{const t=e.length;e:for(let s=0;a&&s{const[t,s]=ke(a,e);if(t!==void 0){if(t.delete(R),t.size===0)gt(s);else if(t.size===1){const[n,r]=t.entries().next().value;bt(s,n,r)}}},gt=a=>{if(a.length===0)return;const[e,t]=je(a);if(e.delete(t),e.size===0)gt(a.slice(0,-1));else if(e.size===1){const[s,n]=e.entries().next().value;s!==R&&bt(a.slice(0,-1),s,n)}},bt=(a,e,t)=>{if(a.length===0)return;const[s,n]=je(a);s.set(n+e,t),s.delete(n)},je=a=>a[a.length-1],Be="or",yt="and",Rs="and_not";class te{constructor(e){if(e?.fields==null)throw new Error('MiniSearch: option "fields" must be provided');const t=e.autoVacuum==null||e.autoVacuum===!0?Me:e.autoVacuum;this._options={...Ae,...e,autoVacuum:t,searchOptions:{...it,...e.searchOptions||{}},autoSuggestOptions:{...Ps,...e.autoSuggestOptions||{}}},this._index=new U,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldIds={},this._fieldLength=new Map,this._avgFieldLength=[],this._nextId=0,this._storedFields=new Map,this._dirtCount=0,this._currentVacuum=null,this._enqueuedVacuum=null,this._enqueuedVacuumConditions=$e,this.addFields(this._options.fields)}add(e){const{extractField:t,stringifyField:s,tokenize:n,processTerm:r,fields:i,idField:o}=this._options,l=t(e,o);if(l==null)throw new Error(`MiniSearch: document does not have ID field "${o}"`);if(this._idToShortId.has(l))throw new Error(`MiniSearch: duplicate ID ${l}`);const c=this.addDocumentId(l);this.saveStoredFields(c,e);for(const h of i){const f=t(e,h);if(f==null)continue;const p=n(s(f,h),h),b=this._fieldIds[h],x=new Set(p).size;this.addFieldLength(c,b,this._documentCount-1,x);for(const S of p){const y=r(S,h);if(Array.isArray(y))for(const N of y)this.addTerm(b,c,N);else y&&this.addTerm(b,c,y)}}}addAll(e){for(const t of e)this.add(t)}addAllAsync(e,t={}){const{chunkSize:s=10}=t,n={chunk:[],promise:Promise.resolve()},{chunk:r,promise:i}=e.reduce(({chunk:o,promise:l},c,h)=>(o.push(c),(h+1)%s===0?{chunk:[],promise:l.then(()=>new Promise(f=>setTimeout(f,0))).then(()=>this.addAll(o))}:{chunk:o,promise:l}),n);return i.then(()=>this.addAll(r))}remove(e){const{tokenize:t,processTerm:s,extractField:n,stringifyField:r,fields:i,idField:o}=this._options,l=n(e,o);if(l==null)throw new Error(`MiniSearch: document does not have ID field "${o}"`);const c=this._idToShortId.get(l);if(c==null)throw new Error(`MiniSearch: cannot remove document with ID ${l}: it is not in the index`);for(const h of i){const f=n(e,h);if(f==null)continue;const p=t(r(f,h),h),b=this._fieldIds[h],x=new Set(p).size;this.removeFieldLength(c,b,this._documentCount,x);for(const S of p){const y=s(S,h);if(Array.isArray(y))for(const N of y)this.removeTerm(b,c,N);else y&&this.removeTerm(b,c,y)}}this._storedFields.delete(c),this._documentIds.delete(c),this._idToShortId.delete(l),this._fieldLength.delete(c),this._documentCount-=1}removeAll(e){if(e)for(const t of e)this.remove(t);else{if(arguments.length>0)throw new Error("Expected documents to be present. Omit the argument to remove all documents.");this._index=new U,this._documentCount=0,this._documentIds=new Map,this._idToShortId=new Map,this._fieldLength=new Map,this._avgFieldLength=[],this._storedFields=new Map,this._nextId=0}}discard(e){const t=this._idToShortId.get(e);if(t==null)throw new Error(`MiniSearch: cannot discard document with ID ${e}: it is not in the index`);this._idToShortId.delete(e),this._documentIds.delete(t),this._storedFields.delete(t),(this._fieldLength.get(t)||[]).forEach((s,n)=>{this.removeFieldLength(t,n,this._documentCount,s)}),this._fieldLength.delete(t),this._documentCount-=1,this._dirtCount+=1,this.maybeAutoVacuum()}maybeAutoVacuum(){if(this._options.autoVacuum===!1)return;const{minDirtFactor:e,minDirtCount:t,batchSize:s,batchWait:n}=this._options.autoVacuum;this.conditionalVacuum({batchSize:s,batchWait:n},{minDirtCount:t,minDirtFactor:e})}discardAll(e){const t=this._options.autoVacuum;try{this._options.autoVacuum=!1;for(const s of e)this.discard(s)}finally{this._options.autoVacuum=t}this.maybeAutoVacuum()}replace(e){const{idField:t,extractField:s}=this._options,n=s(e,t);this.discard(n),this.add(e)}vacuum(e={}){return this.conditionalVacuum(e)}conditionalVacuum(e,t){return this._currentVacuum?(this._enqueuedVacuumConditions=this._enqueuedVacuumConditions&&t,this._enqueuedVacuum!=null?this._enqueuedVacuum:(this._enqueuedVacuum=this._currentVacuum.then(()=>{const s=this._enqueuedVacuumConditions;return this._enqueuedVacuumConditions=$e,this.performVacuuming(e,s)}),this._enqueuedVacuum)):this.vacuumConditionsMet(t)===!1?Promise.resolve():(this._currentVacuum=this.performVacuuming(e),this._currentVacuum)}async performVacuuming(e,t){const s=this._dirtCount;if(this.vacuumConditionsMet(t)){const n=e.batchSize||Ve.batchSize,r=e.batchWait||Ve.batchWait;let i=1;for(const[o,l]of this._index){for(const[c,h]of l)for(const[f]of h)this._documentIds.has(f)||(h.size<=1?l.delete(c):h.delete(f));this._index.get(o).size===0&&this._index.delete(o),i%n===0&&await new Promise(c=>setTimeout(c,r)),i+=1}this._dirtCount-=s}await null,this._currentVacuum=this._enqueuedVacuum,this._enqueuedVacuum=null}vacuumConditionsMet(e){if(e==null)return!0;let{minDirtCount:t,minDirtFactor:s}=e;return t=t||Me.minDirtCount,s=s||Me.minDirtFactor,this.dirtCount>=t&&this.dirtFactor>=s}get isVacuuming(){return this._currentVacuum!=null}get dirtCount(){return this._dirtCount}get dirtFactor(){return this._dirtCount/(1+this._documentCount+this._dirtCount)}has(e){return this._idToShortId.has(e)}getStoredFields(e){const t=this._idToShortId.get(e);if(t!=null)return this._storedFields.get(t)}search(e,t={}){const{searchOptions:s}=this._options,n={...s,...t},r=this.executeQuery(e,t),i=[];for(const[o,{score:l,terms:c,match:h}]of r){const f=c.length||1,p={id:this._documentIds.get(o),score:l*f,terms:Object.keys(h),queryTerms:c,match:h};Object.assign(p,this._storedFields.get(o)),(n.filter==null||n.filter(p))&&i.push(p)}return e===te.wildcard&&n.boostDocument==null||i.sort(at),i}autoSuggest(e,t={}){t={...this._options.autoSuggestOptions,...t};const s=new Map;for(const{score:r,terms:i}of this.search(e,t)){const o=i.join(" "),l=s.get(o);l!=null?(l.score+=r,l.count+=1):s.set(o,{score:r,terms:i,count:1})}const n=[];for(const[r,{score:i,terms:o,count:l}]of s)n.push({suggestion:r,terms:o,score:i/l});return n.sort(at),n}get documentCount(){return this._documentCount}get termCount(){return this._index.size}static loadJSON(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJS(JSON.parse(e),t)}static async loadJSONAsync(e,t){if(t==null)throw new Error("MiniSearch: loadJSON should be given the same options used when serializing the index");return this.loadJSAsync(JSON.parse(e),t)}static getDefault(e){if(Ae.hasOwnProperty(e))return Re(Ae,e);throw new Error(`MiniSearch: unknown option "${e}"`)}static loadJS(e,t){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=xe(n),l._fieldLength=xe(r),l._storedFields=xe(i);for(const[c,h]of l._documentIds)l._idToShortId.set(h,c);for(const[c,h]of s){const f=new Map;for(const p of Object.keys(h)){let b=h[p];o===1&&(b=b.ds),f.set(parseInt(p,10),xe(b))}l._index.set(c,f)}return l}static async loadJSAsync(e,t){const{index:s,documentIds:n,fieldLength:r,storedFields:i,serializationVersion:o}=e,l=this.instantiateMiniSearch(e,t);l._documentIds=await _e(n),l._fieldLength=await _e(r),l._storedFields=await _e(i);for(const[h,f]of l._documentIds)l._idToShortId.set(f,h);let c=0;for(const[h,f]of s){const p=new Map;for(const b of Object.keys(f)){let x=f[b];o===1&&(x=x.ds),p.set(parseInt(b,10),await _e(x))}++c%1e3===0&&await wt(0),l._index.set(h,p)}return l}static instantiateMiniSearch(e,t){const{documentCount:s,nextId:n,fieldIds:r,averageFieldLength:i,dirtCount:o,serializationVersion:l}=e;if(l!==1&&l!==2)throw new Error("MiniSearch: cannot deserialize an index created with an incompatible version");const c=new te(t);return c._documentCount=s,c._nextId=n,c._idToShortId=new Map,c._fieldIds=r,c._avgFieldLength=i,c._dirtCount=o||0,c._index=new U,c}executeQuery(e,t={}){if(e===te.wildcard)return this.executeWildcardQuery(t);if(typeof e!="string"){const p={...t,...e,queries:void 0},b=e.queries.map(x=>this.executeQuery(x,p));return this.combineResults(b,p.combineWith)}const{tokenize:s,processTerm:n,searchOptions:r}=this._options,i={tokenize:s,processTerm:n,...r,...t},{tokenize:o,processTerm:l}=i,f=o(e).flatMap(p=>l(p)).filter(p=>!!p).map(Ds(i)).map(p=>this.executeQuerySpec(p,i));return this.combineResults(f,i.combineWith)}executeQuerySpec(e,t){const s={...this._options.searchOptions,...t},n=(s.fields||this._options.fields).reduce((S,y)=>({...S,[y]:Re(s.boost,y)||1}),{}),{boostDocument:r,weights:i,maxFuzzy:o,bm25:l}=s,{fuzzy:c,prefix:h}={...it.weights,...i},f=this._index.get(e.term),p=this.termResults(e.term,e.term,1,e.termBoost,f,n,r,l);let b,x;if(e.prefix&&(b=this._index.atPrefix(e.term)),e.fuzzy){const S=e.fuzzy===!0?.2:e.fuzzy,y=S<1?Math.min(o,Math.round(e.term.length*S)):S;y&&(x=this._index.fuzzyGet(e.term,y))}if(b)for(const[S,y]of b){const N=S.length-e.term.length;if(!N)continue;x?.delete(S);const F=h*S.length/(S.length+.3*N);this.termResults(e.term,S,F,e.termBoost,y,n,r,l,p)}if(x)for(const S of x.keys()){const[y,N]=x.get(S);if(!N)continue;const F=c*S.length/(S.length+N);this.termResults(e.term,S,F,e.termBoost,y,n,r,l,p)}return p}executeWildcardQuery(e){const t=new Map,s={...this._options.searchOptions,...e};for(const[n,r]of this._documentIds){const i=s.boostDocument?s.boostDocument(r,"",this._storedFields.get(n)):1;t.set(n,{score:i,terms:[],match:{}})}return t}combineResults(e,t=Be){if(e.length===0)return new Map;const s=t.toLowerCase(),n=As[s];if(!n)throw new Error(`Invalid combination operator: ${t}`);return e.reduce(n)||new Map}toJSON(){const e=[];for(const[t,s]of this._index){const n={};for(const[r,i]of s)n[r]=Object.fromEntries(i);e.push([t,n])}return{documentCount:this._documentCount,nextId:this._nextId,documentIds:Object.fromEntries(this._documentIds),fieldIds:this._fieldIds,fieldLength:Object.fromEntries(this._fieldLength),averageFieldLength:this._avgFieldLength,storedFields:Object.fromEntries(this._storedFields),dirtCount:this._dirtCount,index:e,serializationVersion:2}}termResults(e,t,s,n,r,i,o,l,c=new Map){if(r==null)return c;for(const h of Object.keys(i)){const f=i[h],p=this._fieldIds[h],b=r.get(p);if(b==null)continue;let x=b.size;const S=this._avgFieldLength[p];for(const y of b.keys()){if(!this._documentIds.has(y)){this.removeTerm(p,y,t),x-=1;continue}const N=o?o(this._documentIds.get(y),t,this._storedFields.get(y)):1;if(!N)continue;const F=b.get(y),$=this._fieldLength.get(y)[p],K=Ls(F,x,this._documentCount,$,S,l),V=s*n*f*N*K,D=c.get(y);if(D){D.score+=V,zs(D.terms,e);const P=Re(D.match,t);P?P.push(h):D.match[t]=[h]}else c.set(y,{score:V,terms:[e],match:{[t]:[h]}})}}return c}addTerm(e,t,s){const n=this._index.fetch(s,ot);let r=n.get(e);if(r==null)r=new Map,r.set(t,1),n.set(e,r);else{const i=r.get(t);r.set(t,(i||0)+1)}}removeTerm(e,t,s){if(!this._index.has(s)){this.warnDocumentChanged(t,e,s);return}const n=this._index.fetch(s,ot),r=n.get(e);r==null||r.get(t)==null?this.warnDocumentChanged(t,e,s):r.get(t)<=1?r.size<=1?n.delete(e):r.delete(t):r.set(t,r.get(t)-1),this._index.get(s).size===0&&this._index.delete(s)}warnDocumentChanged(e,t,s){for(const n of Object.keys(this._fieldIds))if(this._fieldIds[n]===t){this._options.logger("warn",`MiniSearch: document with ID ${this._documentIds.get(e)} has changed before removal: term "${s}" was not present in field "${n}". Removing a document after it has changed can corrupt the index!`,"version_conflict");return}}addDocumentId(e){const t=this._nextId;return this._idToShortId.set(e,t),this._documentIds.set(t,e),this._documentCount+=1,this._nextId+=1,t}addFields(e){for(let t=0;tObject.prototype.hasOwnProperty.call(a,e)?a[e]:void 0,As={[Be]:(a,e)=>{for(const t of e.keys()){const s=a.get(t);if(s==null)a.set(t,e.get(t));else{const{score:n,terms:r,match:i}=e.get(t);s.score=s.score+n,s.match=Object.assign(s.match,i),rt(s.terms,r)}}return a},[yt]:(a,e)=>{const t=new Map;for(const s of e.keys()){const n=a.get(s);if(n==null)continue;const{score:r,terms:i,match:o}=e.get(s);rt(n.terms,i),t.set(s,{score:n.score+r,terms:n.terms,match:Object.assign(n.match,o)})}return t},[Rs]:(a,e)=>{for(const t of e.keys())a.delete(t);return a}},Ms={k:1.2,b:.7,d:.5},Ls=(a,e,t,s,n,r)=>{const{k:i,b:o,d:l}=r;return Math.log(1+(t-e+.5)/(e+.5))*(l+a*(i+1)/(a+i*(1-o+o*s/n)))},Ds=a=>(e,t,s)=>{const n=typeof a.fuzzy=="function"?a.fuzzy(e,t,s):a.fuzzy||!1,r=typeof a.prefix=="function"?a.prefix(e,t,s):a.prefix===!0,i=typeof a.boostTerm=="function"?a.boostTerm(e,t,s):1;return{term:e,fuzzy:n,prefix:r,termBoost:i}},Ae={idField:"id",extractField:(a,e)=>a[e],stringifyField:(a,e)=>a.toString(),tokenize:a=>a.split(Vs),processTerm:a=>a.toLowerCase(),fields:void 0,searchOptions:void 0,storeFields:[],logger:(a,e)=>{typeof console?.[a]=="function"&&console[a](e)},autoVacuum:!0},it={combineWith:Be,prefix:!1,fuzzy:!1,maxFuzzy:6,boost:{},weights:{fuzzy:.45,prefix:.375},bm25:Ms},Ps={combineWith:yt,prefix:(a,e,t)=>e===t.length-1},Ve={batchSize:1e3,batchWait:10},$e={minDirtFactor:.1,minDirtCount:20},Me={...Ve,...$e},zs=(a,e)=>{a.includes(e)||a.push(e)},rt=(a,e)=>{for(const t of e)a.includes(t)||a.push(t)},at=({score:a},{score:e})=>e-a,ot=()=>new Map,xe=a=>{const e=new Map;for(const t of Object.keys(a))e.set(parseInt(t,10),a[t]);return e},_e=async a=>{const e=new Map;let t=0;for(const s of Object.keys(a))e.set(parseInt(s,10),a[s]),++t%1e3===0&&await wt(0);return e},wt=a=>new Promise(e=>setTimeout(e,a)),Vs=/[\n\r\p{Z}\p{P}]+/u;class $s{max;cache;constructor(e=10){this.max=e,this.cache=new Map}get(e){let t=this.cache.get(e);return t!==void 0&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size===this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}first(){return this.cache.keys().next().value}clear(){this.cache.clear()}}const js=["aria-owns"],Bs={class:"shell"},Ws=["title"],Ks={class:"search-actions before"},Js=["title"],Us=["aria-activedescendant","aria-controls","placeholder"],qs={class:"search-actions"},Gs=["title"],Hs=["disabled","title"],Qs=["id","role","aria-labelledby"],Ys=["id","aria-selected"],Zs=["href","aria-label","onMouseenter","onFocusin","data-index"],Xs={class:"titles"},en=["innerHTML"],tn={class:"title main"},sn=["innerHTML"],nn={key:0,class:"excerpt-wrapper"},rn={key:0,class:"excerpt",inert:""},an=["innerHTML"],on={key:0,class:"no-results"},ln={class:"search-keyboard-shortcuts"},cn=["aria-label"],un=["aria-label"],dn=["aria-label"],hn=["aria-label"],fn=It({__name:"VPLocalSearchBox",emits:["close"],setup(a,{emit:e}){const t=e,s=X(),n=X(),r=X(Ht),i=kt(),{activate:o}=Is(s,{immediate:!0,allowOutsideClick:!0,clickOutsideDeactivates:!0,escapeDeactivates:!0}),{localeIndex:l,theme:c}=i,h=Ge(async()=>Ze(te.loadJSON((await r.value[l.value]?.())?.default,{fields:["title","titles","text"],storeFields:["title","titles"],searchOptions:{fuzzy:.2,prefix:!0,boost:{title:4,text:2,titles:1},...c.value.search?.provider==="local"&&c.value.search.options?.miniSearch?.searchOptions},...c.value.search?.provider==="local"&&c.value.search.options?.miniSearch?.options}))),p=he(()=>c.value.search?.provider==="local"&&c.value.search.options?.disableQueryPersistence===!0).value?oe(""):Nt("vitepress:local-search-filter",""),b=Ft("vitepress:local-search-detailed-list",c.value.search?.provider==="local"&&c.value.search.options?.detailedView===!0),x=he(()=>c.value.search?.provider==="local"&&(c.value.search.options?.disableDetailedView===!0||c.value.search.options?.detailedView===!1)),S=he(()=>{const m=c.value.search?.options??c.value.algolia;return m?.locales?.[l.value]?.translations?.button?.buttonText||m?.translations?.button?.buttonText||"Search"});Ot(()=>{x.value&&(b.value=!1)});const y=X([]),N=oe(!1);Le(p,()=>{N.value=!1});const F=Ge(async()=>{if(n.value)return Ze(new Ns(n.value))},null),$=new $s(16);Ct(()=>[h.value,p.value,b.value],async([m,v,w],A,z)=>{A?.[0]!==m&&$.clear();let L=!1;if(z(()=>{L=!0}),!m)return;y.value=m.search(v).slice(0,16),N.value=!0;const q=w?await Promise.all(y.value.map(M=>K(M.id))):[];if(L)return;for(const{id:M,mod:me}of q){const ge=M.slice(0,M.indexOf("#"));let ie=$.get(ge);if(ie)continue;ie=new Map,$.set(ge,ie);const re=me.default??me;if(re?.render||re?.setup){const G=Kt(re);G.config.warnHandler=()=>{},G.provide(Jt,i),Object.defineProperties(G.config.globalProperties,{$frontmatter:{get(){return i.frontmatter.value}},$params:{get(){return i.page.value.params}}});const We=document.createElement("div");G.mount(We),We.querySelectorAll("h1, h2, h3, h4, h5, h6").forEach(ae=>{const Ke=ae.querySelector("a")?.getAttribute("href"),Je=Ke?.startsWith("#")&&Ke.slice(1);if(!Je)return;let Ue="";for(;(ae=ae.nextElementSibling)&&!/^h[1-6]$/i.test(ae.tagName);)Ue+=ae.outerHTML;ie.set(Je,Ue)}),G.unmount()}if(L)return}const se=new Set;if(y.value=y.value.map(M=>{const[me,ge]=M.id.split("#"),re=$.get(me)?.get(ge)??"";for(const G in M.match)se.add(G);return{...M,text:re}}),await le(),L)return;await new Promise(M=>{F.value?.unmark({done:()=>{F.value?.markRegExp(T(se),{done:M})}})});const ne=s.value?.querySelectorAll(".result .excerpt")??[];for(const M of ne)M.querySelector('mark[data-markjs="true"]')?.scrollIntoView({block:"center"});n.value?.firstElementChild?.scrollIntoView({block:"start"})},{debounce:200,immediate:!0});async function K(m){const v=Ut(m.slice(0,m.indexOf("#")));try{if(!v)throw new Error(`Cannot find file for id: ${m}`);return{id:m,mod:await import(v)}}catch(w){return console.error(w),{id:m,mod:{}}}}const V=oe(),D=he(()=>p.value?.length<=0);function P(m=!0){V.value?.focus(),m&&V.value?.select()}Ne(()=>{P()});function ve(m){m.pointerType==="mouse"&&P()}const O=oe(-1),j=oe(!0);Le(y,m=>{O.value=m.length?0:-1,B()});function B(){le(()=>{document.querySelector(".result.selected")?.scrollIntoView({block:"nearest"})})}be("ArrowUp",m=>{m.preventDefault(),O.value--,O.value<0&&(O.value=y.value.length-1),j.value=!0,B()}),be("ArrowDown",m=>{m.preventDefault(),O.value++,O.value>=y.value.length&&(O.value=0),j.value=!0,B()});const I=Rt();be("Enter",m=>{if(m.isComposing||m.target instanceof HTMLButtonElement&&m.target.type!=="submit")return;const v=y.value[O.value];if(m.target instanceof HTMLInputElement&&!v){m.preventDefault();return}v&&(I.go(v.id),t("close"))}),be("Escape",()=>{t("close")});const d=At({modal:{displayDetails:"Display detailed list",resetButtonTitle:"Reset search",backButtonTitle:"Close search",noResultsText:"No results for",footer:{selectText:"to select",selectKeyAriaLabel:"enter",navigateText:"to navigate",navigateUpKeyAriaLabel:"up arrow",navigateDownKeyAriaLabel:"down arrow",closeText:"to close",closeKeyAriaLabel:"escape"}}});Ne(()=>{window.history.pushState(null,"",null)}),Mt("popstate",m=>{m.preventDefault(),t("close")});const g=Lt(Dt?document.body:null);Ne(()=>{le(()=>{g.value=!0,le().then(()=>o())})}),Pt(()=>{g.value=!1});function E(){p.value="",le().then(()=>P(!1))}function T(m){return new RegExp([...m].sort((v,w)=>w.length-v.length).map(v=>`(${qt(v)})`).join("|"),"gi")}function k(m){if(!j.value)return;const v=m.target?.closest(".result"),w=Number.parseInt(v?.dataset.index);w>=0&&w!==O.value&&(O.value=w),j.value=!1}return(m,v)=>(W(),zt(Wt,{to:"body"},[_("div",{ref_key:"el",ref:s,role:"button","aria-owns":y.value?.length?"localsearch-list":void 0,"aria-expanded":"true","aria-haspopup":"listbox","aria-labelledby":"localsearch-label",class:"VPLocalSearchBox"},[_("div",{class:"backdrop",onClick:v[0]||(v[0]=w=>m.$emit("close"))}),_("div",Bs,[_("form",{class:"search-bar",onPointerup:v[4]||(v[4]=w=>ve(w)),onSubmit:v[5]||(v[5]=Vt(()=>{},["prevent"]))},[_("label",{title:S.value,id:"localsearch-label",for:"localsearch-input"},[...v[7]||(v[7]=[_("span",{"aria-hidden":"true",class:"vpi-search search-icon local-search-icon"},null,-1)])],8,Ws),_("div",Ks,[_("button",{class:"back-button",title:C(d)("modal.backButtonTitle"),onClick:v[1]||(v[1]=w=>m.$emit("close"))},[...v[8]||(v[8]=[_("span",{class:"vpi-arrow-left local-search-icon"},null,-1)])],8,Js)]),$t(_("input",{ref_key:"searchInput",ref:V,"onUpdate:modelValue":v[2]||(v[2]=w=>Bt(p)?p.value=w:null),"aria-activedescendant":O.value>-1?"localsearch-item-"+O.value:void 0,"aria-autocomplete":"both","aria-controls":y.value?.length?"localsearch-list":void 0,"aria-labelledby":"localsearch-label",autocapitalize:"off",autocomplete:"off",autocorrect:"off",class:"search-input",id:"localsearch-input",enterkeyhint:"go",maxlength:"64",placeholder:S.value,spellcheck:"false",type:"search"},null,8,Us),[[jt,C(p)]]),_("div",qs,[x.value?ye("",!0):(W(),J("button",{key:0,class:He(["toggle-layout-button",{"detailed-list":C(b)}]),type:"button",title:C(d)("modal.displayDetails"),onClick:v[3]||(v[3]=w=>O.value>-1&&(b.value=!C(b)))},[...v[9]||(v[9]=[_("span",{class:"vpi-layout-list local-search-icon"},null,-1)])],10,Gs)),_("button",{class:"clear-button",type:"reset",disabled:D.value,title:C(d)("modal.resetButtonTitle"),onClick:E},[...v[10]||(v[10]=[_("span",{class:"vpi-delete local-search-icon"},null,-1)])],8,Hs)])],32),_("ul",{ref_key:"resultsEl",ref:n,id:y.value?.length?"localsearch-list":void 0,role:y.value?.length?"listbox":void 0,"aria-labelledby":y.value?.length?"localsearch-label":void 0,class:"results",onMousemove:k},[(W(!0),J(Ye,null,Qe(y.value,(w,A)=>(W(),J("li",{key:w.id,id:"localsearch-item-"+A,"aria-selected":O.value===A?"true":"false",role:"option"},[_("a",{href:w.id,class:He(["result",{selected:O.value===A}]),"aria-label":[...w.titles,w.title].join(" > "),onMouseenter:z=>!j.value&&(O.value=A),onFocusin:z=>O.value=A,onClick:v[6]||(v[6]=z=>m.$emit("close")),"data-index":A},[_("div",null,[_("div",Xs,[v[12]||(v[12]=_("span",{class:"title-icon"},"#",-1)),(W(!0),J(Ye,null,Qe(w.titles,(z,L)=>(W(),J("span",{key:L,class:"title"},[_("span",{class:"text",innerHTML:z},null,8,en),v[11]||(v[11]=_("span",{class:"vpi-chevron-right local-search-icon"},null,-1))]))),128)),_("span",tn,[_("span",{class:"text",innerHTML:w.title},null,8,sn)])]),C(b)?(W(),J("div",nn,[w.text?(W(),J("div",rn,[_("div",{class:"vp-doc",innerHTML:w.text},null,8,an)])):ye("",!0),v[13]||(v[13]=_("div",{class:"excerpt-gradient-bottom"},null,-1)),v[14]||(v[14]=_("div",{class:"excerpt-gradient-top"},null,-1))])):ye("",!0)])],42,Zs)],8,Ys))),128)),C(p)&&!y.value.length&&N.value?(W(),J("li",on,[ce(ue(C(d)("modal.noResultsText"))+' "',1),_("strong",null,ue(C(p)),1),v[15]||(v[15]=ce('" ',-1))])):ye("",!0)],40,Qs),_("div",ln,[_("span",null,[_("kbd",{"aria-label":C(d)("modal.footer.navigateUpKeyAriaLabel")},[...v[16]||(v[16]=[_("span",{class:"vpi-arrow-up navigate-icon"},null,-1)])],8,cn),_("kbd",{"aria-label":C(d)("modal.footer.navigateDownKeyAriaLabel")},[...v[17]||(v[17]=[_("span",{class:"vpi-arrow-down navigate-icon"},null,-1)])],8,un),ce(" "+ue(C(d)("modal.footer.navigateText")),1)]),_("span",null,[_("kbd",{"aria-label":C(d)("modal.footer.selectKeyAriaLabel")},[...v[18]||(v[18]=[_("span",{class:"vpi-corner-down-left navigate-icon"},null,-1)])],8,dn),ce(" "+ue(C(d)("modal.footer.selectText")),1)]),_("span",null,[_("kbd",{"aria-label":C(d)("modal.footer.closeKeyAriaLabel")},"esc",8,hn),ce(" "+ue(C(d)("modal.footer.closeText")),1)])])])],8,js)]))}}),gn=Gt(fn,[["__scopeId","data-v-400916ea"]]);export{gn as default};
diff --git a/assets/chunks/metadata.3279bacf.js b/assets/chunks/metadata.3279bacf.js
new file mode 100644
index 00000000..b43eee25
--- /dev/null
+++ b/assets/chunks/metadata.3279bacf.js
@@ -0,0 +1 @@
+window.__VP_HASH_MAP__=JSON.parse("{\"about_growth_inner-experience.md\":\"HpLRc5B0\",\"about_growth_outer-experience.md\":\"U_0zSSlY\",\"about_growth_weight-loss.md\":\"BpS5Z_Mb\",\"about_me.md\":\"rEiPtcvs\",\"ai_agent_claude-agent-sdk-basic-build.md\":\"B55gshqw\",\"ai_agent_composition-ai-components.md\":\"BsK5YUsc\",\"ai_agent_deepresearch-agent.md\":\"CwdjsBlq\",\"ai_agent_math-bot.md\":\"BxBzXMwt\",\"ai_agent_overview.md\":\"DJkZ_Y17\",\"ai_agent_planning-module.md\":\"CPBMznWJ\",\"ai_agent_poetry-bot.md\":\"DSf8eko8\",\"ai_agent_skills-practice-summary.md\":\"C2tM9l4B\",\"ai_llm-api-resources.md\":\"DiUaxg-J\",\"ai_overview.md\":\"DZgNBOqP\",\"ai_tools-assistant.md\":\"BGC8ydHc\",\"categories.md\":\"D9OK8S-O\",\"fullstack_ai-change-work-workflow.md\":\"DXMwhn1i\",\"fullstack_ai-coding_claude-code-deep-dive.md\":\"kB6QmFDc\",\"fullstack_ai-coding_resources.md\":\"OKMzenDA\",\"fullstack_ai-engineer-capability.md\":\"BLG8HsC0\",\"fullstack_ai-native.md\":\"BYYQp0dO\",\"fullstack_css-engineering.md\":\"BoXD8RaQ\",\"fullstack_decode-es-modules.md\":\"C61t9Zfk\",\"fullstack_different-module-programming-specifications.md\":\"CWHaL3Fb\",\"fullstack_frontend-module-programming-basic.md\":\"yGa0zlfx\",\"fullstack_frontend-rendering-scheme.md\":\"CftYqkAp\",\"fullstack_full-stack-resources.md\":\"Co038bXz\",\"fullstack_jamstack.md\":\"Drsif7fG\",\"fullstack_module-programming-practice-guide.md\":\"Bs9KcFO4\",\"fullstack_module-programming-principles-best-practices.md\":\"LFLIaEHw\",\"fullstack_networking-polling-optimization.md\":\"CoMcO6EN\",\"fullstack_networking-protocol-selection-guide.md\":\"g5NibAlw\",\"fullstack_networking-sse-practice.md\":\"DkcLDMFi\",\"fullstack_nodejs-module-programming-summary.md\":\"D1ygSN3c\",\"fullstack_occams-razor-software-design.md\":\"9NwuKC1c\",\"fullstack_overview.md\":\"Dh6Zf9N7\",\"fullstack_react-design-philosophy-ai-augmented.md\":\"B6VesDV4\",\"fullstack_server-state-management.md\":\"BfAWRG7Y\",\"fullstack_typescript-compilation-debugging-guide.md\":\"VOU5w9He\",\"fullstack_typescript-generic-types.md\":\"BtqGZOry\",\"fullstack_typescript-module-programming-enhancement.md\":\"Cp-FXzT0\",\"growth_books.md\":\"pxO-gFFz\",\"growth_distinguish-useful-information.md\":\"D-6fqUky\",\"growth_reading-tips.md\":\"CtqZbrBw\",\"index.md\":\"DdagoM5O\",\"product-sense_ai-native-composite-talents.md\":\"DAd8MKd0\",\"product-sense_engineer-build-product-sense.md\":\"CLTrmD8X\",\"product-sense_insight-model.md\":\"CrgmqHwA\",\"product-sense_overview.md\":\"BKzAOh-1\",\"product-sense_perplexity-knowledge-worker.md\":\"Bx5AFGt6\",\"product-sense_small-rule-learn.md\":\"DPy9hb1r\",\"product-sense_using-economics-thinking.md\":\"Cl5fRnVQ\",\"repo-insight_fetch-event-source.md\":\"CSipdq8z\",\"repo-insight_open-cli.md\":\"CKTnFrpc\",\"repo-insight_overview.md\":\"KMkY5FzK\",\"tags.md\":\"CVodylg0\"}");function deserializeFunctions(r){return Array.isArray(r)?r.map(deserializeFunctions):typeof r=="object"&&r!==null?Object.keys(r).reduce((t,n)=>(t[n]=deserializeFunctions(r[n]),t),{}):typeof r=="string"&&r.startsWith("_vp-fn_")?new Function(`return ${r.slice(7)}`)():r};window.__VP_SITE_DATA__=deserializeFunctions(JSON.parse("{\"lang\":\"zh-CN\",\"dir\":\"ltr\",\"title\":\"Insight Stack\",\"description\":\"数字花园,聚焦全栈工程、产品思维与 LLMs,探讨 AI 与工程实践的交叉领域\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"teekTheme\":true,\"teekHome\":true,\"vpHome\":false,\"sidebarTrigger\":true,\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"banner\":{\"enabled\":true,\"name\":\"\",\"bgStyle\":\"pure\",\"pureBgColor\":\"#F7F5FA\",\"imgSrc\":[\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/image.png\"],\"mask\":false,\"descStyle\":\"switch\",\"description\":[\"Insight Stack = 工程基座 × 产品思维 × AI 原力\",\"真正的好产品是让技术隐入背景,让交互因共鸣而生\"]},\"homeCardListPosition\":\"right\",\"homeCardSort\":[\"topArticle\",\"category\",\"tag\",\"docAnalysis\",\"friendLink\"],\"topArticle\":{\"enabled\":true,\"limit\":3,\"autoPage\":false,\"pageSpeed\":4000,\"dateFormat\":\"yyyy-MM-dd\"},\"category\":{\"enabled\":false,\"limit\":8,\"autoPage\":false,\"pageSpeed\":4000},\"friendLink\":{\"enabled\":false,\"limit\":5,\"list\":[{\"avatar\":\"https://vitepress.dev/vitepress-logo-large.svg\",\"name\":\"VitePress\",\"desc\":\"Vue 驱动的静态站点生成器\",\"link\":\"https://vitepress.dev/\"},{\"avatar\":\"https://vp.teek.top/teek-logo-large.png\",\"name\":\"vitepress-theme-teek\",\"desc\":\"Teek官网\",\"link\":\"https://vp.teek.top/\"}]},\"docAnalysis\":{\"enabled\":false},\"footerInfo\":{\"theme\":{\"name\":\"Theme By Teek@1.5.2\"},\"copyright\":{\"createYear\":2017,\"suffix\":\"Sqliang\"}},\"codeBlock\":{\"enabled\":false,\"collapseHeight\":700,\"overlay\":true,\"overlayHeight\":400,\"copiedDone\":\"_vp-fn_(TkMessage) => TkMessage.success(\\\"\\\\u590D\\\\u5236\\\\u6210\\\\u529F\\\\uFF01\\\")\"},\"articleShare\":{\"enabled\":true},\"articleUpdate\":{\"enabled\":false},\"post\":{},\"themeEnhance\":{\"layoutSwitch\":{\"defaultMode\":\"fullWidth\"},\"spotlight\":{\"disabled\":true}},\"logo\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/favicon.png\",\"darkModeSwitchLabel\":\"主题\",\"sidebarMenuLabel\":\"菜单\",\"returnToTopLabel\":\"返回顶部\",\"lastUpdatedText\":\"上次更新时间\",\"outline\":{\"level\":[2,4],\"label\":\"本页导航\"},\"docFooter\":{\"prev\":\"上一页\",\"next\":\"下一页\"},\"nav\":[{\"text\":\"首页\",\"link\":\"/\"},{\"text\":\"全栈\",\"items\":[{\"text\":\"\\n \\n 全景一览\\n \\n \",\"link\":\"/fullstack/overview\"},{\"text\":\"\\n \\n AI Native 工程思维\\n \\n \",\"link\":\"/fullstack/ai-native\"},{\"text\":\"\\n \\n AI 编程实践指南\\n \\n \",\"link\":\"/fullstack/ai-coding/resources\"},{\"text\":\"\\n \\n 前端工程\\n \\n \",\"link\":\"/fullstack/react-design-philosophy-ai-augmented\"},{\"text\":\"\\n \\n 网络与通信\\n \\n \",\"link\":\"/fullstack/networking-protocol-selection-guide\"},{\"text\":\"\\n \\n 全栈基础素养\\n \\n \",\"link\":\"/fullstack/occams-razor-software-design\"},{\"text\":\"\\n \\n 工具与资源推荐\\n \\n \",\"link\":\"/fullstack/full-stack-resources\"}]},{\"text\":\"AI 学习与实践\",\"items\":[{\"text\":\"\\n \\n 全景一览\\n \\n \",\"link\":\"/ai/overview\"},{\"text\":\"\\n \\n Agent 系列\\n \\n \",\"link\":\"/ai/agent/overview\"},{\"text\":\"\\n \\n 社区活动与实践小项目\\n \\n \",\"link\":\"/ai/agent/deepresearch-agent\"},{\"text\":\"\\n \\n 工具与资源推荐\\n \\n \",\"link\":\"/ai/tools-assistant\"}]},{\"text\":\"产品 Sense\",\"items\":[{\"text\":\"\\n \\n 全景一览\\n \\n \",\"link\":\"/product-sense/overview\"},{\"text\":\"\\n \\n 产品观察与分析\\n \\n \",\"link\":\"/product-sense/perplexity-knowledge-worker\"},{\"text\":\"\\n \\n 新 T 型人\\n \\n \",\"link\":\"/product-sense/ai-native-composite-talents\"},{\"text\":\"\\n \\n 产品创造与商业化\\n \\n \",\"link\":\"/product-sense/small-rule-learn\"},{\"text\":\"\\n \\n 方法论\\n \\n \",\"link\":\"/product-sense/insight-model\"}]},{\"text\":\"开源洞察\",\"link\":\"/repo-insight/overview\"},{\"text\":\"悦读拾光\",\"items\":[{\"text\":\"好书推荐\",\"link\":\" /growth/books\"},{\"text\":\"读书“三要”和“三不要”\",\"link\":\"/growth/reading-tips\"},{\"text\":\"如何甄别真正有用的信息\",\"link\":\"/growth/distinguish-useful-information\"}]},{\"text\":\"关于\",\"items\":[{\"text\":\"关于我\",\"link\":\"/about/me\"},{\"text\":\"关于本站\",\"link\":\"/about/me#关于本站\"},{\"text\":\"成长随笔\",\"link\":\"/about/growth/outer-experience\"}]}],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/sqliang\"},{\"icon\":{\"svg\":\"\"},\"link\":\"mailto:hfutsqliang@qq.com\"}],\"search\":{\"provider\":\"local\"},\"sidebar\":{\"/fullstack/\":[{\"text\":\"全景一览\",\"collapsed\":true,\"link\":\"/fullstack/overview.md\"},{\"text\":\"AI Native 工程思维\",\"collapsed\":true,\"items\":[{\"text\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"collapsed\":true,\"link\":\"/fullstack/ai-native.md\"},{\"text\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"collapsed\":true,\"link\":\"/fullstack/ai-engineer-capability.md\"},{\"text\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"collapsed\":true,\"link\":\"/fullstack/ai-change-work-workflow.md\"}]},{\"text\":\"AI 编程实践指南\",\"collapsed\":true,\"items\":[{\"text\":\"AI 编程工具与资源推荐\",\"collapsed\":true,\"link\":\"/fullstack/ai-coding/resources.md\"},{\"text\":\"从 .claude 文件夹读懂 Claude Code\",\"collapsed\":true,\"link\":\"/fullstack/ai-coding/claude-code-deep-dive.md\"}]},{\"text\":\"前端工程\",\"collapsed\":true,\"items\":[{\"text\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"collapsed\":true,\"link\":\"/fullstack/react-design-philosophy-ai-augmented.md\"},{\"text\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"collapsed\":true,\"link\":\"/fullstack/css-engineering.md\"},{\"text\":\"JAMStack 梳理与实践指南\",\"collapsed\":true,\"link\":\"/fullstack/jamstack.md\"},{\"text\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"collapsed\":true,\"link\":\"/fullstack/frontend-rendering-scheme.md\"},{\"text\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"collapsed\":true,\"link\":\"/fullstack/server-state-management.md\"}]},{\"text\":\"网络与通信\",\"collapsed\":true,\"items\":[{\"text\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"collapsed\":true,\"link\":\"/fullstack/networking-protocol-selection-guide.md\"},{\"text\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"collapsed\":true,\"link\":\"/fullstack/networking-sse-practice.md\"},{\"text\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"collapsed\":true,\"link\":\"/fullstack/networking-polling-optimization.md\"}]},{\"text\":\"全栈基础素养\",\"collapsed\":true,\"items\":[{\"text\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"collapsed\":true,\"link\":\"/fullstack/occams-razor-software-design.md\"},{\"text\":\"TypeScript 编译与调试完全指南\",\"collapsed\":true,\"link\":\"/fullstack/typescript-compilation-debugging-guide.md\"},{\"text\":\"聊一聊 TypeScript 中的泛型\",\"collapsed\":true,\"link\":\"/fullstack/typescript-generic-types.md\"},{\"text\":\"模块化编程实践指南\",\"collapsed\":true,\"items\":[{\"text\":\"模块化编程实践指南\",\"collapsed\":true,\"link\":\"/fullstack/module-programming-practice-guide.md\"},{\"text\":\"模块化编程初体验:概念、演进与设计模式\",\"collapsed\":true,\"link\":\"/fullstack/frontend-module-programming-basic.md\"},{\"text\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"collapsed\":true,\"link\":\"/fullstack/different-module-programming-specifications.md\"},{\"text\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"collapsed\":true,\"link\":\"/fullstack/decode-es-modules.md\"},{\"text\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"collapsed\":true,\"link\":\"/fullstack/typescript-module-programming-enhancement.md\"},{\"text\":\"模块化编程原则梳理与总结\",\"collapsed\":true,\"link\":\"/fullstack/module-programming-principles-best-practices.md\"},{\"text\":\"Node.js 模块化编程梳理与总结\",\"collapsed\":true,\"link\":\"/fullstack/nodejs-module-programming-summary.md\"}]}]},{\"text\":\"工具与资源推荐\",\"collapsed\":true,\"items\":[{\"text\":\"全栈技术资源推荐\",\"collapsed\":true,\"link\":\"/fullstack/full-stack-resources.md\"}]}],\"/product-sense/\":[{\"text\":\"学习与实践全景\",\"collapsed\":true,\"link\":\"/product-sense/overview.md\"},{\"text\":\"产品观察与分析\",\"collapsed\":true,\"items\":[{\"text\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"collapsed\":true,\"link\":\"/product-sense/perplexity-knowledge-worker.md\"}]},{\"text\":\"新 T 型人\",\"collapsed\":true,\"items\":[{\"text\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"collapsed\":true,\"link\":\"/product-sense/ai-native-composite-talents.md\"},{\"text\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"collapsed\":true,\"link\":\"/product-sense/engineer-build-product-sense.md\"}]},{\"text\":\"产品创造与商业化\",\"collapsed\":true,\"items\":[{\"text\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"collapsed\":true,\"link\":\"/product-sense/small-rule-learn.md\"}]},{\"text\":\"方法论\",\"collapsed\":true,\"items\":[{\"text\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"collapsed\":true,\"link\":\"/product-sense/insight-model.md\"},{\"text\":\"用经济学思维做产品\",\"collapsed\":true,\"link\":\"/product-sense/using-economics-thinking.md\"}]}],\"/ai/\":[{\"text\":\"AI 学习与实践全景\",\"collapsed\":true,\"link\":\"/ai/overview.md\"},{\"text\":\"Agent 系列\",\"collapsed\":true,\"items\":[{\"text\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"collapsed\":true,\"link\":\"/ai/agent/overview.md\"},{\"text\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"collapsed\":true,\"link\":\"/ai/agent/planning-module.md\"},{\"text\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"collapsed\":true,\"link\":\"/ai/agent/composition-ai-components.md\"},{\"text\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"collapsed\":true,\"link\":\"/ai/agent/skills-practice-summary.md\"}]},{\"text\":\"社区活动与实践小项目\",\"collapsed\":true,\"items\":[{\"text\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"collapsed\":true,\"link\":\"/ai/agent/deepresearch-agent.md\"},{\"text\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"collapsed\":true,\"link\":\"/ai/agent/claude-agent-sdk-basic-build.md\"},{\"text\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"collapsed\":true,\"link\":\"/ai/agent/math-bot.md\"},{\"text\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"collapsed\":true,\"link\":\"/ai/agent/poetry-bot.md\"}]},{\"text\":\"资源与工具推荐\",\"collapsed\":true,\"items\":[{\"text\":\"好用的 AI 助手与工作站推荐\",\"collapsed\":true,\"link\":\"/ai/tools-assistant.md\"},{\"text\":\"LLM API 平台推荐与选型指南\",\"collapsed\":true,\"link\":\"/ai/llm-api-resources.md\"}]}],\"/growth/\":[{\"text\":\"好书推荐\",\"collapsed\":true,\"link\":\"/growth/books.md\"},{\"text\":\"读书“三要”和“三不要”\",\"collapsed\":true,\"link\":\"/growth/reading-tips.md\"},{\"text\":\"如何甄别真正有用的信息\",\"collapsed\":true,\"link\":\"/growth/distinguish-useful-information.md\"}],\"/repo-insight/\":[{\"text\":\"开源洞察\",\"collapsed\":true,\"link\":\"/repo-insight/overview.md\"},{\"text\":\"fetch-event-source 源码解读\",\"collapsed\":true,\"link\":\"/repo-insight/fetch-event-source.md\"},{\"text\":\"OpenCLI 开源项目解读\",\"collapsed\":true,\"link\":\"/repo-insight/open-cli.md\"}],\"/about/\":[{\"text\":\"关于我\",\"collapsed\":true,\"link\":\"/about/me.md\"},{\"text\":\"成长随笔\",\"collapsed\":true,\"items\":[{\"text\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"collapsed\":true,\"link\":\"/about/growth/outer-experience.md\"},{\"text\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"collapsed\":true,\"link\":\"/about/growth/inner-experience.md\"},{\"text\":\"用科学与迭代改善的方式推动减肥这件小事\",\"collapsed\":true,\"link\":\"/about/growth/weight-loss.md\"}]}],\"/categories.md/\":[{\"text\":\"分类\",\"collapsed\":true,\"link\":\"/categories.md\"},{\"text\":\"标签\",\"collapsed\":true,\"link\":\"/tags.md\"}]},\"docAnalysisInfo\":{\"fileList\":[{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/00.overview.md\",\"relativePath\":\"01.全栈/00.overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\",\"relativePath\":\"01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\",\"relativePath\":\"01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\",\"relativePath\":\"01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源.md\",\"relativePath\":\"01.全栈/10.AI 编程实践指南/00.AI编程工具与资源.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\",\"relativePath\":\"01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/02.CSS工程化.md\",\"relativePath\":\"01.全栈/40.前端工程/02.CSS工程化.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\",\"relativePath\":\"01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\",\"relativePath\":\"01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\",\"relativePath\":\"01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\",\"relativePath\":\"01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\",\"relativePath\":\"01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\",\"relativePath\":\"01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/00.学习与实践全景.md\",\"relativePath\":\"10.产品 Sense/00.学习与实践全景.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\",\"relativePath\":\"10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\",\"relativePath\":\"10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/40.洞察力模型.md\",\"relativePath\":\"10.产品 Sense/05.方法论/40.洞察力模型.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/50.用经济学思维做产品.md\",\"relativePath\":\"10.产品 Sense/05.方法论/50.用经济学思维做产品.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/00.AI 学习与实践全景一览.md\",\"relativePath\":\"20.AI 学习与实践/00.AI 学习与实践全景一览.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/01.好书推荐.md\",\"relativePath\":\"30.悦读时光/01.好书推荐.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/10.读书三要三不要.md\",\"relativePath\":\"30.悦读时光/10.读书三要三不要.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/21.如何甄别真正有用的信息.md\",\"relativePath\":\"30.悦读时光/21.如何甄别真正有用的信息.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.开源洞察/00.overview.md\",\"relativePath\":\"31.开源洞察/00.overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.开源洞察/01.fetch-event-source 源码解读.md\",\"relativePath\":\"31.开源洞察/01.fetch-event-source 源码解读.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.开源洞察/02.open-cli.md\",\"relativePath\":\"31.开源洞察/02.open-cli.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/01.关于我.md\",\"relativePath\":\"40.关于/01.关于我.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\",\"relativePath\":\"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\",\"relativePath\":\"40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\",\"relativePath\":\"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\"}],\"totalFileWords\":196625,\"eachFileWords\":[{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/00.overview.md\",\"relativePath\":\"01.全栈/00.overview.md\"},\"wordCount\":21,\"readingTime\":\"1m\",\"frontmatter\":{\"date\":{},\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\",\"relativePath\":\"01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\"},\"wordCount\":2017,\"readingTime\":\"7.2m\",\"frontmatter\":{\"date\":{},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\",\"relativePath\":\"01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\"},\"wordCount\":3614,\"readingTime\":\"12.9m\",\"frontmatter\":{\"date\":{},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\",\"relativePath\":\"01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\"},\"wordCount\":4407,\"readingTime\":\"15.2m\",\"frontmatter\":{\"date\":{},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源.md\",\"relativePath\":\"01.全栈/10.AI 编程实践指南/00.AI编程工具与资源.md\"},\"wordCount\":3472,\"readingTime\":\"13.3m\",\"frontmatter\":{\"date\":{},\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\",\"relativePath\":\"01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\"},\"wordCount\":5798,\"readingTime\":\"21.4m\",\"frontmatter\":{\"date\":{},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\"},\"wordCount\":5038,\"readingTime\":\"17.6m\",\"frontmatter\":{\"date\":{},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/02.CSS工程化.md\",\"relativePath\":\"01.全栈/40.前端工程/02.CSS工程化.md\"},\"wordCount\":9015,\"readingTime\":\"34.1m\",\"frontmatter\":{\"date\":{},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\"},\"wordCount\":3628,\"readingTime\":\"15m\",\"frontmatter\":{\"date\":{},\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\",\"relativePath\":\"01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\"},\"wordCount\":8241,\"readingTime\":\"29.7m\",\"frontmatter\":{\"date\":{},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\",\"relativePath\":\"01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\"},\"wordCount\":4949,\"readingTime\":\"19.2m\",\"frontmatter\":{\"date\":{},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\",\"relativePath\":\"01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\"},\"wordCount\":6770,\"readingTime\":\"23.9m\",\"frontmatter\":{\"date\":{},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\",\"relativePath\":\"01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\"},\"wordCount\":6634,\"readingTime\":\"26.8m\",\"frontmatter\":{\"date\":{},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\",\"relativePath\":\"01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\"},\"wordCount\":3295,\"readingTime\":\"12.1m\",\"frontmatter\":{\"date\":{},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\"},\"wordCount\":3233,\"readingTime\":\"11.6m\",\"frontmatter\":{\"date\":{},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\"},\"wordCount\":5040,\"readingTime\":\"20m\",\"frontmatter\":{\"date\":{},\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\"},\"wordCount\":5614,\"readingTime\":\"21.5m\",\"frontmatter\":{\"date\":{},\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\"},\"wordCount\":7414,\"readingTime\":\"30.9m\",\"frontmatter\":{\"date\":{},\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\"},\"wordCount\":2099,\"readingTime\":\"7.8m\",\"frontmatter\":{\"date\":{},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\"},\"wordCount\":1889,\"readingTime\":\"7.2m\",\"frontmatter\":{\"date\":{},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\"},\"wordCount\":1767,\"readingTime\":\"7.5m\",\"frontmatter\":{\"date\":{},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\"},\"wordCount\":1576,\"readingTime\":\"6.1m\",\"frontmatter\":{\"date\":{},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\"},\"wordCount\":1303,\"readingTime\":\"4.9m\",\"frontmatter\":{\"date\":{},\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\"},\"wordCount\":1240,\"readingTime\":\"4.7m\",\"frontmatter\":{\"date\":{},\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\",\"relativePath\":\"01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\"},\"wordCount\":7425,\"readingTime\":\"30.1m\",\"frontmatter\":{\"date\":{},\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/00.学习与实践全景.md\",\"relativePath\":\"10.产品 Sense/00.学习与实践全景.md\"},\"wordCount\":429,\"readingTime\":\"1.5m\",\"frontmatter\":{\"date\":{},\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\",\"relativePath\":\"10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\"},\"wordCount\":1833,\"readingTime\":\"6.3m\",\"frontmatter\":{\"date\":{},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\"},\"wordCount\":1994,\"readingTime\":\"6.8m\",\"frontmatter\":{\"date\":{},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\"},\"wordCount\":4356,\"readingTime\":\"15m\",\"frontmatter\":{\"date\":{},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\",\"relativePath\":\"10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\"},\"wordCount\":1982,\"readingTime\":\"6.8m\",\"frontmatter\":{\"date\":{},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/40.洞察力模型.md\",\"relativePath\":\"10.产品 Sense/05.方法论/40.洞察力模型.md\"},\"wordCount\":2572,\"readingTime\":\"9m\",\"frontmatter\":{\"date\":{},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/50.用经济学思维做产品.md\",\"relativePath\":\"10.产品 Sense/05.方法论/50.用经济学思维做产品.md\"},\"wordCount\":3150,\"readingTime\":\"10.7m\",\"frontmatter\":{\"date\":{},\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/00.AI 学习与实践全景一览.md\",\"relativePath\":\"20.AI 学习与实践/00.AI 学习与实践全景一览.md\"},\"wordCount\":25,\"readingTime\":\"1m\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":{},\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\"},\"wordCount\":6363,\"readingTime\":\"22.1m\",\"frontmatter\":{\"date\":{},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\"},\"wordCount\":3028,\"readingTime\":\"10.6m\",\"frontmatter\":{\"date\":{},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\"},\"wordCount\":2685,\"readingTime\":\"9.4m\",\"frontmatter\":{\"date\":{},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\"},\"wordCount\":3915,\"readingTime\":\"14.6m\",\"frontmatter\":{\"date\":{},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\"},\"wordCount\":2889,\"readingTime\":\"11m\",\"frontmatter\":{\"date\":{},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\"},\"wordCount\":2778,\"readingTime\":\"11.2m\",\"frontmatter\":{\"date\":{},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\"},\"wordCount\":2122,\"readingTime\":\"7.2m\",\"frontmatter\":{\"date\":{},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\"},\"wordCount\":4145,\"readingTime\":\"14.2m\",\"frontmatter\":{\"date\":{},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\"},\"wordCount\":5439,\"readingTime\":\"20.5m\",\"frontmatter\":{\"date\":{},\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\"},\"wordCount\":3528,\"readingTime\":\"13.6m\",\"frontmatter\":{\"date\":{},\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/01.好书推荐.md\",\"relativePath\":\"30.悦读时光/01.好书推荐.md\"},\"wordCount\":1847,\"readingTime\":\"6.4m\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":{},\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/10.读书三要三不要.md\",\"relativePath\":\"30.悦读时光/10.读书三要三不要.md\"},\"wordCount\":3593,\"readingTime\":\"12m\",\"frontmatter\":{\"date\":{},\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/21.如何甄别真正有用的信息.md\",\"relativePath\":\"30.悦读时光/21.如何甄别真正有用的信息.md\"},\"wordCount\":2443,\"readingTime\":\"8.2m\",\"frontmatter\":{\"date\":{},\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.开源洞察/00.overview.md\",\"relativePath\":\"31.开源洞察/00.overview.md\"},\"wordCount\":275,\"readingTime\":\"1m\",\"frontmatter\":{\"date\":{},\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.开源洞察/01.fetch-event-source 源码解读.md\",\"relativePath\":\"31.开源洞察/01.fetch-event-source 源码解读.md\"},\"wordCount\":3025,\"readingTime\":\"12.7m\",\"frontmatter\":{\"date\":{},\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.开源洞察/02.open-cli.md\",\"relativePath\":\"31.开源洞察/02.open-cli.md\"},\"wordCount\":4917,\"readingTime\":\"21.8m\",\"frontmatter\":{\"date\":{},\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/01.关于我.md\",\"relativePath\":\"40.关于/01.关于我.md\"},\"wordCount\":1636,\"readingTime\":\"5.9m\",\"frontmatter\":{\"date\":{},\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\",\"relativePath\":\"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\"},\"wordCount\":6206,\"readingTime\":\"22.2m\",\"frontmatter\":{\"date\":{},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\",\"relativePath\":\"40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\"},\"wordCount\":9942,\"readingTime\":\"33.9m\",\"frontmatter\":{\"date\":{},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\",\"relativePath\":\"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\"},\"wordCount\":4009,\"readingTime\":\"13.5m\",\"frontmatter\":{\"date\":{},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]}}],\"lastCommitTime\":\"2026-04-28 15:33:00\"},\"catalogues\":{\"arr\":[],\"map\":{},\"inv\":{}},\"posts\":{\"allPosts\":[{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { fullStackCategories } from '@fragment/data/full-stack-data'\\n</script>\\n<ArticleCardList :categories=\\\"fullStackCategories\\\" />\"},{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/repo-insight/overview\",\"relativePath\":\"/31.开源洞察/00.overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"开源洞察\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"本专栏所有源码解读文章,均借助了本人开源的 repo-insight Agent Skill 来辅助生成。\\nrepo-insight 是一款专注于优秀开源项目代码库解读的智能助手,提供 GitHub URL 或本地目录的一键深度分析能力。\\n- 一键分析 - 支持 GitHub URL 或本地目录分析\\n- 深度报告 - 生成项目概述、架构分析、核心模块解读\\n- 中文支持 - 自动翻译 README、生成中文代码注释\\n- 全自动执行 - 调用后无需中间交互\\n两个 Skill 均具备以上能力,可根据需求选择使用。\\n了解 repo-insight →\\n 开源项目解读\\n| 项目 | 简介 |\\n|----\"},{\"url\":\"/repo-insight/fetch-event-source\",\"relativePath\":\"/31.开源洞察/01.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/repo-insight/open-cli\",\"relativePath\":\"/31.开源洞察/02.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"},{\"url\":\"/categories\",\"relativePath\":\"/@pages/categoriesPage\",\"frontmatter\":{\"title\":\"分类\",\"categoriesPage\":true,\"permalink\":\"/categories\",\"article\":false,\"layout\":\"home\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"分类\",\"date\":\"2026-04-28 07:33:11\",\"capture\":\"\"},{\"url\":\"/tags\",\"relativePath\":\"/@pages/tagsPage\",\"frontmatter\":{\"title\":\"标签\",\"permalink\":\"/tags\",\"tagsPage\":true,\"article\":false,\"layout\":\"home\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"标签\",\"date\":\"2026-04-28 07:33:11\",\"capture\":\"\"},{\"url\":\"/\",\"relativePath\":\"/\",\"frontmatter\":{\"layout\":\"home\",\"title\":\"首页\",\"titleTemplate\":\":title | Insight Stack Blog\",\"tk\":{\"teekHome\":true,\"features\":[{\"title\":\"全栈\",\"details\":\"Engineering × Product × AI\",\"link\":\"/fullstack/overview\",\"image\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/topic/icon_full_stack_circle.webp\"},{\"title\":\"AI 学习与实践\",\"details\":\"Model × Agent × Engineering\",\"link\":\"/ai/overview\",\"image\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/topic/icon_llm_circle.webp\"},{\"title\":\"产品 Sense\",\"details\":\"Impact × Simplicity\",\"link\":\"/product-sense/overview\",\"image\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/topic/icon_product_sense_circle.webp\"}]},\"hero\":{\"name\":\"Insight Stack Blog\",\"text\":\"AI & 全栈技术 & 产品思考与成长记录\",\"tagline\":\"✨探索技术前沿,沉淀产品思考,记录成长点滴,相信时间的力量\",\"actions\":[{\"theme\":\"brand\",\"text\":\"关于我\",\"link\":\"/about/me\"},{\"theme\":\"alt\",\"text\":\"资源推荐\",\"link\":\"/growth/sites\"},{\"theme\":\"alt\",\"text\":\"书籍推荐\",\"link\":\"/growth/books\"}],\"image\":{\"src\":\"/img/full-stack/insight_stack.png\",\"alt\":\"Insight Stack Blog\"}},\"features\":[{\"icon\":\"📖\",\"title\":\"全栈技术\",\"details\":\"前端 & NodeJS & Python 等\",\"link\":\"/fullstack/overview\"},{\"icon\":\"🎉\",\"title\":\"产品 Sense\",\"details\":\"产品 Sense = 用户价值洞察 × 商业可行性 × 技术可实现性\",\"link\":\"/product-sense/overview\"},{\"icon\":\"🎇\",\"title\":\"LLM 应用学习与实践\",\"details\":\"梳理大语言模型应用、Agent 技术、上下文工程与AI编程等专题,探索 AI 时代的技术与应用。\",\"link\":\"/ai/overview\"},{\"icon\":\"📝\",\"title\":\"个人成长\",\"details\":\"收录一些不错的站点、技术周刊、AI 等资源,总结个人在时间管理、效率工具、健康管理等方面的成长经验。\",\"link\":\"/about/me\"}]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"首页\",\"date\":\"2026-04-28 07:33:11\",\"capture\":\"<style\\n/* 彩虹动画 */\\n:root {\\n animation: rainbow 12s linear infinite;\\n}\\n.tk-avatar {\\n height: var(--tk-avatar-size) !important;\\n width: var(--tk-avatar-size) !important;\\n}\\n.tk-avatar--circle {\\n border-radius: 50% !important;\\n}\\n.vp-doc hero-text {\\n display: none !important;\\n}\\n@media (min-w\"}],\"originPosts\":[{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { fullStackCategories } from '@fragment/data/full-stack-data'\\n</script>\\n<ArticleCardList :categories=\\\"fullStackCategories\\\" />\"},{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/repo-insight/overview\",\"relativePath\":\"/31.开源洞察/00.overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"开源洞察\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"本专栏所有源码解读文章,均借助了本人开源的 repo-insight Agent Skill 来辅助生成。\\nrepo-insight 是一款专注于优秀开源项目代码库解读的智能助手,提供 GitHub URL 或本地目录的一键深度分析能力。\\n- 一键分析 - 支持 GitHub URL 或本地目录分析\\n- 深度报告 - 生成项目概述、架构分析、核心模块解读\\n- 中文支持 - 自动翻译 README、生成中文代码注释\\n- 全自动执行 - 调用后无需中间交互\\n两个 Skill 均具备以上能力,可根据需求选择使用。\\n了解 repo-insight →\\n 开源项目解读\\n| 项目 | 简介 |\\n|----\"},{\"url\":\"/repo-insight/fetch-event-source\",\"relativePath\":\"/31.开源洞察/01.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/repo-insight/open-cli\",\"relativePath\":\"/31.开源洞察/02.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"sortPostsByDateAndSticky\":[{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/repo-insight/open-cli\",\"relativePath\":\"/31.开源洞察/02.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/repo-insight/overview\",\"relativePath\":\"/31.开源洞察/00.overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"开源洞察\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"本专栏所有源码解读文章,均借助了本人开源的 repo-insight Agent Skill 来辅助生成。\\nrepo-insight 是一款专注于优秀开源项目代码库解读的智能助手,提供 GitHub URL 或本地目录的一键深度分析能力。\\n- 一键分析 - 支持 GitHub URL 或本地目录分析\\n- 深度报告 - 生成项目概述、架构分析、核心模块解读\\n- 中文支持 - 自动翻译 README、生成中文代码注释\\n- 全自动执行 - 调用后无需中间交互\\n两个 Skill 均具备以上能力,可根据需求选择使用。\\n了解 repo-insight →\\n 开源项目解读\\n| 项目 | 简介 |\\n|----\"},{\"url\":\"/repo-insight/fetch-event-source\",\"relativePath\":\"/31.开源洞察/01.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { fullStackCategories } from '@fragment/data/full-stack-data'\\n</script>\\n<ArticleCardList :categories=\\\"fullStackCategories\\\" />\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"},{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"sortPostsByDate\":[{\"url\":\"/repo-insight/open-cli\",\"relativePath\":\"/31.开源洞察/02.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/repo-insight/overview\",\"relativePath\":\"/31.开源洞察/00.overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"开源洞察\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"本专栏所有源码解读文章,均借助了本人开源的 repo-insight Agent Skill 来辅助生成。\\nrepo-insight 是一款专注于优秀开源项目代码库解读的智能助手,提供 GitHub URL 或本地目录的一键深度分析能力。\\n- 一键分析 - 支持 GitHub URL 或本地目录分析\\n- 深度报告 - 生成项目概述、架构分析、核心模块解读\\n- 中文支持 - 自动翻译 README、生成中文代码注释\\n- 全自动执行 - 调用后无需中间交互\\n两个 Skill 均具备以上能力,可根据需求选择使用。\\n了解 repo-insight →\\n 开源项目解读\\n| 项目 | 简介 |\\n|----\"},{\"url\":\"/repo-insight/fetch-event-source\",\"relativePath\":\"/31.开源洞察/01.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { fullStackCategories } from '@fragment/data/full-stack-data'\\n</script>\\n<ArticleCardList :categories=\\\"fullStackCategories\\\" />\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"},{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"groupPostsByYear\":{\"2026 \":[{\"url\":\"/repo-insight/open-cli\",\"relativePath\":\"/31.开源洞察/02.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/repo-insight/overview\",\"relativePath\":\"/31.开源洞察/00.overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"开源洞察\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"本专栏所有源码解读文章,均借助了本人开源的 repo-insight Agent Skill 来辅助生成。\\nrepo-insight 是一款专注于优秀开源项目代码库解读的智能助手,提供 GitHub URL 或本地目录的一键深度分析能力。\\n- 一键分析 - 支持 GitHub URL 或本地目录分析\\n- 深度报告 - 生成项目概述、架构分析、核心模块解读\\n- 中文支持 - 自动翻译 README、生成中文代码注释\\n- 全自动执行 - 调用后无需中间交互\\n两个 Skill 均具备以上能力,可根据需求选择使用。\\n了解 repo-insight →\\n 开源项目解读\\n| 项目 | 简介 |\\n|----\"},{\"url\":\"/repo-insight/fetch-event-source\",\"relativePath\":\"/31.开源洞察/01.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { fullStackCategories } from '@fragment/data/full-stack-data'\\n</script>\\n<ArticleCardList :categories=\\\"fullStackCategories\\\" />\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"},{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"}],\"2025 \":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"}],\"2024 \":[{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}],\"2023 \":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"2022 \":[{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}]},\"groupPostsByYearMonth\":{\"2026 \":{\"04\":[{\"url\":\"/repo-insight/open-cli\",\"relativePath\":\"/31.开源洞察/02.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/repo-insight/overview\",\"relativePath\":\"/31.开源洞察/00.overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"开源洞察\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"本专栏所有源码解读文章,均借助了本人开源的 repo-insight Agent Skill 来辅助生成。\\nrepo-insight 是一款专注于优秀开源项目代码库解读的智能助手,提供 GitHub URL 或本地目录的一键深度分析能力。\\n- 一键分析 - 支持 GitHub URL 或本地目录分析\\n- 深度报告 - 生成项目概述、架构分析、核心模块解读\\n- 中文支持 - 自动翻译 README、生成中文代码注释\\n- 全自动执行 - 调用后无需中间交互\\n两个 Skill 均具备以上能力,可根据需求选择使用。\\n了解 repo-insight →\\n 开源项目解读\\n| 项目 | 简介 |\\n|----\"},{\"url\":\"/repo-insight/fetch-event-source\",\"relativePath\":\"/31.开源洞察/01.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"}],\"03\":[{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { fullStackCategories } from '@fragment/data/full-stack-data'\\n</script>\\n<ArticleCardList :categories=\\\"fullStackCategories\\\" />\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"},{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"}],\"02\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"}],\"01\":[{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"}]},\"2025 \":{\"10\":[{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"}],\"11\":[{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"12\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"}],\"08\":[{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"03\":[{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"}]},\"2024 \":{\"06\":[{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"}],\"05\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"04\":[{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"03\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"01\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}]},\"2023 \":{\"01\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}]},\"2022 \":{\"09\":[{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}]}},\"groupPosts\":{\"categories\":{\"AI 学习与实践\":[{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"Agent 系列\":[{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"}],\"全栈\":[{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { fullStackCategories } from '@fragment/data/full-stack-data'\\n</script>\\n<ArticleCardList :categories=\\\"fullStackCategories\\\" />\"},{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"产品 Sense\":[{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"}],\"AI\":[{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"}],\"悦读时光\":[{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"}],\"个人成长\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"开源洞察\":[{\"url\":\"/repo-insight/open-cli\",\"relativePath\":\"/31.开源洞察/02.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/repo-insight/overview\",\"relativePath\":\"/31.开源洞察/00.overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"开源洞察\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"本专栏所有源码解读文章,均借助了本人开源的 repo-insight Agent Skill 来辅助生成。\\nrepo-insight 是一款专注于优秀开源项目代码库解读的智能助手,提供 GitHub URL 或本地目录的一键深度分析能力。\\n- 一键分析 - 支持 GitHub URL 或本地目录分析\\n- 深度报告 - 生成项目概述、架构分析、核心模块解读\\n- 中文支持 - 自动翻译 README、生成中文代码注释\\n- 全自动执行 - 调用后无需中间交互\\n两个 Skill 均具备以上能力,可根据需求选择使用。\\n了解 repo-insight →\\n 开源项目解读\\n| 项目 | 简介 |\\n|----\"},{\"url\":\"/repo-insight/fetch-event-source\",\"relativePath\":\"/31.开源洞察/01.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"}],\"AI 编程系列\":[{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"网络与通信\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"ai-practice\":[{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"}],\"前端工程\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"资源推荐\":[{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"关于\":[{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"}],\"全栈基础素养\":[{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"模块化编程实践指南\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"growth\":[{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}]},\"tags\":{\"Agent SDK\":[{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"}],\"Multi-Agent\":[{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"}],\"Agent Skills\":[{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"}],\"Agent\":[{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"AI\":[{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"全栈\":[{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"}],\"产品\":[{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"}],\"悦读时光\":[{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}],\"系统思维\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"}],\"数学思维\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"}],\"模型思维\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"}],\"疫情\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"健康\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"时间\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"远程协作\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"AI Coding\":[{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"Claude Code\":[{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"}],\"Agentic Engineering\":[{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"Developer Tools\":[{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"}],\"LLM\":[{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"}],\"CSS\":[{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"}],\"工程化\":[{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"}],\"tailwindcss\":[{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"}],\"tutorial\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"SSE\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"HTTP Streaming\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"}],\"HTTP 轮询\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"退避轮询\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"}],\"长轮询\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"}],\"HTTP\":[{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"WebSocket\":[{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"Webhooks\":[{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"AI Agent\":[{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"}],\"react\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"component-design\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"state-management\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"ai-augmented\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"specification-driven\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"资源推荐\":[{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}],\"LLM API\":[{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"}],\"CSR\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"SSR\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"SSG\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"ISR\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"PPR\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"VitePress\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"<script setup\\nimport ProsCons from '@fragment/components/ProsCons.vue'\\nimport ComparisonCard from '@fragment/components/ComparisonCard.vue'\\nimport FeatureGrid from '@fragment/components/FeatureGrid.vue'\\nimport ConceptPair from '@fragment/components/ConceptPair.vue'\\n</script>\\n> 摘要总结:针对前端渲\"}],\"Vibe Coding\":[{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"AI 助手\":[{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"}],\"AI 搜索\":[{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"产品 Sense\":[{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"商业化\":[{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"}],\"SWR\":[{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"}],\"TanStack Query\":[{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"}],\"前端工程\":[{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"}],\"jamstack\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"frontend-architecture\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"next.js\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"static-site-generator\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"系统洞察力\":[{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"}],\"信息筛选\":[{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"个人成长\":[{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"typescript\":[{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"}],\"generics\":[{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"}],\"type-system\":[{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"}],\"compilation\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"tooling\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"eslint\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"jest\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"成长\":[{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"}],\"ESM\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"DDD\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"}],\"微前端\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"}],\"concept\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"node.js\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"commonjs\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"esm\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"monorepo\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"layered-architecture\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"solid-principles\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"code-organization\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"best-practices\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"naming-conventions\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"tsconfig\":[{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"}],\"static-analysis\":[{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"}],\"Tree-Shaking\":[{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"}],\"circular-dependency\":[{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"}],\"CommonJS\":[{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"AMD\":[{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"UMD\":[{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"javascript\":[{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"modularization\":[{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"design-patterns\":[{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"知识发现\":[{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"engineering-fundamentals\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"code-design\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"software-engineering\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"运动\":[{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}]}},\"groupCards\":{\"categories\":[{\"name\":\"AI 学习与实践\",\"length\":8},{\"name\":\"Agent 系列\",\"length\":1},{\"name\":\"全栈\",\"length\":24},{\"name\":\"产品 Sense\",\"length\":7},{\"name\":\"AI\",\"length\":2},{\"name\":\"悦读时光\",\"length\":1},{\"name\":\"个人成长\",\"length\":3},{\"name\":\"开源洞察\",\"length\":3},{\"name\":\"AI 编程系列\",\"length\":2},{\"name\":\"网络与通信\",\"length\":3},{\"name\":\"ai-practice\",\"length\":1},{\"name\":\"前端工程\",\"length\":4},{\"name\":\"资源推荐\",\"length\":4},{\"name\":\"关于\",\"length\":1},{\"name\":\"全栈基础素养\",\"length\":10},{\"name\":\"模块化编程实践指南\",\"length\":7},{\"name\":\"growth\",\"length\":1}],\"tags\":[{\"name\":\"Agent SDK\",\"length\":2},{\"name\":\"Multi-Agent\",\"length\":1},{\"name\":\"Agent Skills\",\"length\":1},{\"name\":\"Agent\",\"length\":6},{\"name\":\"AI\",\"length\":12},{\"name\":\"全栈\",\"length\":7},{\"name\":\"产品\",\"length\":1},{\"name\":\"悦读时光\",\"length\":3},{\"name\":\"系统思维\",\"length\":1},{\"name\":\"数学思维\",\"length\":1},{\"name\":\"模型思维\",\"length\":1},{\"name\":\"疫情\",\"length\":2},{\"name\":\"健康\",\"length\":2},{\"name\":\"时间\",\"length\":1},{\"name\":\"远程协作\",\"length\":1},{\"name\":\"AI Coding\",\"length\":2},{\"name\":\"Claude Code\",\"length\":1},{\"name\":\"Agentic Engineering\",\"length\":2},{\"name\":\"Developer Tools\",\"length\":1},{\"name\":\"LLM\",\"length\":1},{\"name\":\"CSS\",\"length\":1},{\"name\":\"工程化\",\"length\":1},{\"name\":\"tailwindcss\",\"length\":1},{\"name\":\"tutorial\",\"length\":8},{\"name\":\"SSE\",\"length\":2},{\"name\":\"HTTP Streaming\",\"length\":1},{\"name\":\"HTTP 轮询\",\"length\":2},{\"name\":\"退避轮询\",\"length\":1},{\"name\":\"长轮询\",\"length\":1},{\"name\":\"HTTP\",\"length\":1},{\"name\":\"WebSocket\",\"length\":1},{\"name\":\"Webhooks\",\"length\":1},{\"name\":\"AI Agent\",\"length\":1},{\"name\":\"react\",\"length\":1},{\"name\":\"component-design\",\"length\":1},{\"name\":\"state-management\",\"length\":1},{\"name\":\"ai-augmented\",\"length\":1},{\"name\":\"specification-driven\",\"length\":1},{\"name\":\"资源推荐\",\"length\":5},{\"name\":\"LLM API\",\"length\":1},{\"name\":\"CSR\",\"length\":1},{\"name\":\"SSR\",\"length\":1},{\"name\":\"SSG\",\"length\":1},{\"name\":\"ISR\",\"length\":1},{\"name\":\"PPR\",\"length\":1},{\"name\":\"VitePress\",\"length\":1},{\"name\":\"Vibe Coding\",\"length\":1},{\"name\":\"AI 助手\",\"length\":1},{\"name\":\"AI 搜索\",\"length\":2},{\"name\":\"产品 Sense\",\"length\":4},{\"name\":\"商业化\",\"length\":1},{\"name\":\"SWR\",\"length\":1},{\"name\":\"TanStack Query\",\"length\":1},{\"name\":\"前端工程\",\"length\":1},{\"name\":\"jamstack\",\"length\":1},{\"name\":\"frontend-architecture\",\"length\":1},{\"name\":\"next.js\",\"length\":1},{\"name\":\"static-site-generator\",\"length\":1},{\"name\":\"系统洞察力\",\"length\":1},{\"name\":\"信息筛选\",\"length\":1},{\"name\":\"个人成长\",\"length\":1},{\"name\":\"typescript\",\"length\":3},{\"name\":\"generics\",\"length\":1},{\"name\":\"type-system\",\"length\":1},{\"name\":\"compilation\",\"length\":1},{\"name\":\"tooling\",\"length\":1},{\"name\":\"eslint\",\"length\":1},{\"name\":\"jest\",\"length\":1},{\"name\":\"成长\",\"length\":1},{\"name\":\"ESM\",\"length\":3},{\"name\":\"DDD\",\"length\":1},{\"name\":\"微前端\",\"length\":1},{\"name\":\"concept\",\"length\":5},{\"name\":\"node.js\",\"length\":1},{\"name\":\"commonjs\",\"length\":1},{\"name\":\"esm\",\"length\":2},{\"name\":\"monorepo\",\"length\":1},{\"name\":\"layered-architecture\",\"length\":1},{\"name\":\"solid-principles\",\"length\":1},{\"name\":\"code-organization\",\"length\":1},{\"name\":\"best-practices\",\"length\":1},{\"name\":\"naming-conventions\",\"length\":1},{\"name\":\"tsconfig\",\"length\":1},{\"name\":\"static-analysis\",\"length\":1},{\"name\":\"Tree-Shaking\",\"length\":1},{\"name\":\"circular-dependency\",\"length\":1},{\"name\":\"CommonJS\",\"length\":1},{\"name\":\"AMD\",\"length\":1},{\"name\":\"UMD\",\"length\":1},{\"name\":\"javascript\",\"length\":1},{\"name\":\"modularization\",\"length\":1},{\"name\":\"design-patterns\",\"length\":1},{\"name\":\"知识发现\",\"length\":1},{\"name\":\"engineering-fundamentals\",\"length\":1},{\"name\":\"code-design\",\"length\":1},{\"name\":\"software-engineering\",\"length\":1},{\"name\":\"运动\",\"length\":1}]}}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true,\"additionalConfig\":{}}"));
\ No newline at end of file
diff --git a/assets/chunks/metadata.d9bf6b70.js b/assets/chunks/metadata.d9bf6b70.js
deleted file mode 100644
index db323fd9..00000000
--- a/assets/chunks/metadata.d9bf6b70.js
+++ /dev/null
@@ -1 +0,0 @@
-window.__VP_HASH_MAP__=JSON.parse("{\"about_growth_inner-experience.md\":\"BfCF2Esw\",\"about_growth_outer-experience.md\":\"BlNYhD4s\",\"about_growth_weight-loss.md\":\"w91RSywO\",\"about_me.md\":\"NFtnPonO\",\"ai_agent_claude-agent-sdk-basic-build.md\":\"Xn8jBlHE\",\"ai_agent_composition-ai-components.md\":\"dI2iYRX7\",\"ai_agent_deepresearch-agent.md\":\"BsV4SG6q\",\"ai_agent_math-bot.md\":\"DG9CFfr9\",\"ai_agent_overview.md\":\"DVuo6oKK\",\"ai_agent_planning-module.md\":\"CZ75X6d8\",\"ai_agent_poetry-bot.md\":\"CVO0Xcyg\",\"ai_agent_skills-practice-summary.md\":\"DSRzi1tX\",\"ai_llm-api-resources.md\":\"68LaTypk\",\"ai_overview.md\":\"CFq4IH0J\",\"ai_tools-assistant.md\":\"tsJJqQV2\",\"categories.md\":\"cFlbVGPB\",\"fullstack_ai-change-work-workflow.md\":\"DiMS7k7S\",\"fullstack_ai-coding_claude-code-deep-dive.md\":\"CsMpGxAS\",\"fullstack_ai-coding_resources.md\":\"B1dxIxiN\",\"fullstack_ai-engineer-capability.md\":\"D7BAnWZh\",\"fullstack_ai-native.md\":\"CNQpX64Q\",\"fullstack_css-engineering.md\":\"BmVa8gnV\",\"fullstack_decode-es-modules.md\":\"Du3Eb9qT\",\"fullstack_different-module-programming-specifications.md\":\"Cg3tDT7q\",\"fullstack_frontend-module-programming-basic.md\":\"D0nCQJS7\",\"fullstack_frontend-rendering-scheme.md\":\"eqjdJLHI\",\"fullstack_full-stack-resources.md\":\"B11N7zhu\",\"fullstack_jamstack.md\":\"SuSM4Y0H\",\"fullstack_module-programming-practice-guide.md\":\"DOMofnkV\",\"fullstack_module-programming-principles-best-practices.md\":\"D4VSagJX\",\"fullstack_networking-polling-optimization.md\":\"DfvhC9Lu\",\"fullstack_networking-protocol-selection-guide.md\":\"C-tmhF32\",\"fullstack_networking-sse-practice.md\":\"CJphpewI\",\"fullstack_nodejs-module-programming-summary.md\":\"rIfswDfi\",\"fullstack_occams-razor-software-design.md\":\"Cf-PlaT8\",\"fullstack_overview.md\":\"Cb1WwGjC\",\"fullstack_react-design-philosophy-ai-augmented.md\":\"BJkDG5b-\",\"fullstack_server-state-management.md\":\"CjNxPBfg\",\"fullstack_typescript-compilation-debugging-guide.md\":\"DTw_rMis\",\"fullstack_typescript-generic-types.md\":\"DNAwGGoK\",\"fullstack_typescript-module-programming-enhancement.md\":\"CF9SLFFp\",\"growth_books.md\":\"D0_PQMxy\",\"growth_distinguish-useful-information.md\":\"c0mj3UU-\",\"growth_reading-tips.md\":\"DmxmzxkA\",\"index.md\":\"s8-EPOmc\",\"product-sense_ai-native-composite-talents.md\":\"F84o5KBW\",\"product-sense_engineer-build-product-sense.md\":\"Ba354pld\",\"product-sense_insight-model.md\":\"B5jiOtET\",\"product-sense_overview.md\":\"DroQOcsO\",\"product-sense_perplexity-knowledge-worker.md\":\"D-u8U_Vi\",\"product-sense_small-rule-learn.md\":\"DK0tVLgC\",\"product-sense_using-economics-thinking.md\":\"CNxsckHp\",\"repo-insight_fetch-event-source.md\":\"99nYyHmD\",\"repo-insight_open-cli.md\":\"C3SBHmo9\",\"repo-insight_overview.md\":\"BmY3wbSE\",\"tags.md\":\"5xDpvfCV\"}");function deserializeFunctions(r){return Array.isArray(r)?r.map(deserializeFunctions):typeof r=="object"&&r!==null?Object.keys(r).reduce((t,n)=>(t[n]=deserializeFunctions(r[n]),t),{}):typeof r=="string"&&r.startsWith("_vp-fn_")?new Function(`return ${r.slice(7)}`)():r};window.__VP_SITE_DATA__=deserializeFunctions(JSON.parse("{\"lang\":\"zh-CN\",\"dir\":\"ltr\",\"title\":\"Insight Stack\",\"description\":\"A digital garden exploring the intersection of Full-stack Engineering, Product Thinking, and LLMs.,Built with VitePress and vitepress-theme-teek. Focus on Full-stack Engineering, Product Thinking, and LLMs.,VitePress 拥有三种典型的知识管理形态:结构化、碎片化、体系化,可以轻松构建一个结构化知识库,适用个人博客、文档站、知识库等场景\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"teekTheme\":true,\"teekHome\":true,\"vpHome\":false,\"sidebarTrigger\":true,\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"banner\":{\"enabled\":true,\"name\":\"\",\"bgStyle\":\"pure\",\"pureBgColor\":\"#F7F5FA\",\"imgSrc\":[\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/image.png\"],\"mask\":false,\"descStyle\":\"switch\",\"description\":[\"Insight Stack = 工程基座 × 产品思维 × AI 原力\",\"真正的好产品是让技术隐入背景,让交互因共鸣而生\"]},\"homeCardListPosition\":\"right\",\"homeCardSort\":[\"topArticle\",\"category\",\"tag\",\"docAnalysis\",\"friendLink\"],\"topArticle\":{\"enabled\":true,\"limit\":3,\"autoPage\":false,\"pageSpeed\":4000,\"dateFormat\":\"yyyy-MM-dd\"},\"category\":{\"enabled\":false,\"limit\":8,\"autoPage\":false,\"pageSpeed\":4000},\"friendLink\":{\"enabled\":false,\"limit\":5,\"list\":[{\"avatar\":\"https://vitepress.dev/vitepress-logo-large.svg\",\"name\":\"VitePress\",\"desc\":\"Vue 驱动的静态站点生成器\",\"link\":\"https://vitepress.dev/\"},{\"avatar\":\"https://vp.teek.top/teek-logo-large.png\",\"name\":\"vitepress-theme-teek\",\"desc\":\"Teek官网\",\"link\":\"https://vp.teek.top/\"}]},\"docAnalysis\":{\"enabled\":false},\"footerInfo\":{\"theme\":{\"name\":\"Theme By Teek@1.5.2\"},\"copyright\":{\"createYear\":2017,\"suffix\":\"Sqliang\"}},\"codeBlock\":{\"enabled\":false,\"collapseHeight\":700,\"overlay\":true,\"overlayHeight\":400,\"copiedDone\":\"_vp-fn_(TkMessage) => TkMessage.success(\\\"\\\\u590D\\\\u5236\\\\u6210\\\\u529F\\\\uFF01\\\")\"},\"articleShare\":{\"enabled\":true},\"articleUpdate\":{\"enabled\":false},\"post\":{},\"themeEnhance\":{\"layoutSwitch\":{\"defaultMode\":\"fullWidth\"},\"spotlight\":{\"disabled\":true}},\"logo\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/favicon.png\",\"darkModeSwitchLabel\":\"主题\",\"sidebarMenuLabel\":\"菜单\",\"returnToTopLabel\":\"返回顶部\",\"lastUpdatedText\":\"上次更新时间\",\"outline\":{\"level\":[2,4],\"label\":\"本页导航\"},\"docFooter\":{\"prev\":\"上一页\",\"next\":\"下一页\"},\"nav\":[{\"text\":\"首页\",\"link\":\"/\"},{\"text\":\"全栈\",\"items\":[{\"text\":\"\\n \\n 全景一览\\n \\n \",\"link\":\"/fullstack/overview\"},{\"text\":\"\\n \\n AI Native 工程思维\\n \\n \",\"link\":\"/fullstack/ai-native\"},{\"text\":\"\\n \\n AI 编程实践指南\\n \\n \",\"link\":\"/fullstack/ai-coding/resources\"},{\"text\":\"\\n \\n 前端工程\\n \\n \",\"link\":\"/fullstack/react-design-philosophy-ai-augmented\"},{\"text\":\"\\n \\n 网络与通信\\n \\n \",\"link\":\"/fullstack/networking-protocol-selection-guide\"},{\"text\":\"\\n \\n 全栈基础素养\\n \\n \",\"link\":\"/fullstack/occams-razor-software-design\"},{\"text\":\"\\n \\n 工具与资源推荐\\n \\n \",\"link\":\"/fullstack/full-stack-resources\"}]},{\"text\":\"AI 学习与实践\",\"items\":[{\"text\":\"\\n \\n 全景一览\\n \\n \",\"link\":\"/ai/overview\"},{\"text\":\"\\n \\n Agent 系列\\n \\n \",\"link\":\"/ai/agent/overview\"},{\"text\":\"\\n \\n 社区活动与实践小项目\\n \\n \",\"link\":\"/ai/agent/deepresearch-agent\"},{\"text\":\"\\n \\n 工具与资源推荐\\n \\n \",\"link\":\"/ai/tools-assistant\"}]},{\"text\":\"产品 Sense\",\"items\":[{\"text\":\"\\n \\n 全景一览\\n \\n \",\"link\":\"/product-sense/overview\"},{\"text\":\"\\n \\n 产品观察与分析\\n \\n \",\"link\":\"/product-sense/perplexity-knowledge-worker\"},{\"text\":\"\\n \\n 新 T 型人\\n \\n \",\"link\":\"/product-sense/ai-native-composite-talents\"},{\"text\":\"\\n \\n 产品创造与商业化\\n \\n \",\"link\":\"/product-sense/small-rule-learn\"},{\"text\":\"\\n \\n 方法论\\n \\n \",\"link\":\"/product-sense/insight-model\"}]},{\"text\":\"开源洞察\",\"link\":\"/repo-insight/overview\"},{\"text\":\"悦读拾光\",\"items\":[{\"text\":\"好书推荐\",\"link\":\" /growth/books\"},{\"text\":\"读书“三要”和“三不要”\",\"link\":\"/growth/reading-tips\"},{\"text\":\"如何甄别真正有用的信息\",\"link\":\"/growth/distinguish-useful-information\"}]},{\"text\":\"关于\",\"items\":[{\"text\":\"关于我\",\"link\":\"/about/me\"},{\"text\":\"关于本站\",\"link\":\"/about/me#关于本站\"},{\"text\":\"成长随笔\",\"link\":\"/about/growth/outer-experience\"}]}],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/sqliang\"},{\"icon\":{\"svg\":\"\"},\"link\":\"mailto:hfutsqliang@qq.com\"}],\"search\":{\"provider\":\"local\"},\"sidebar\":{\"/fullstack/\":[{\"text\":\"全景一览\",\"collapsed\":true,\"link\":\"/fullstack/overview.md\"},{\"text\":\"AI Native 工程思维\",\"collapsed\":true,\"items\":[{\"text\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"collapsed\":true,\"link\":\"/fullstack/ai-native.md\"},{\"text\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"collapsed\":true,\"link\":\"/fullstack/ai-engineer-capability.md\"},{\"text\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"collapsed\":true,\"link\":\"/fullstack/ai-change-work-workflow.md\"}]},{\"text\":\"AI 编程实践指南\",\"collapsed\":true,\"items\":[{\"text\":\"AI 编程工具与资源推荐\",\"collapsed\":true,\"link\":\"/fullstack/ai-coding/resources.md\"},{\"text\":\"从 .claude 文件夹读懂 Claude Code\",\"collapsed\":true,\"link\":\"/fullstack/ai-coding/claude-code-deep-dive.md\"}]},{\"text\":\"前端工程\",\"collapsed\":true,\"items\":[{\"text\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"collapsed\":true,\"link\":\"/fullstack/react-design-philosophy-ai-augmented.md\"},{\"text\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"collapsed\":true,\"link\":\"/fullstack/css-engineering.md\"},{\"text\":\"JAMStack 梳理与实践指南\",\"collapsed\":true,\"link\":\"/fullstack/jamstack.md\"},{\"text\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"collapsed\":true,\"link\":\"/fullstack/frontend-rendering-scheme.md\"},{\"text\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"collapsed\":true,\"link\":\"/fullstack/server-state-management.md\"}]},{\"text\":\"网络与通信\",\"collapsed\":true,\"items\":[{\"text\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"collapsed\":true,\"link\":\"/fullstack/networking-protocol-selection-guide.md\"},{\"text\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"collapsed\":true,\"link\":\"/fullstack/networking-sse-practice.md\"},{\"text\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"collapsed\":true,\"link\":\"/fullstack/networking-polling-optimization.md\"}]},{\"text\":\"全栈基础素养\",\"collapsed\":true,\"items\":[{\"text\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"collapsed\":true,\"link\":\"/fullstack/occams-razor-software-design.md\"},{\"text\":\"TypeScript 编译与调试完全指南\",\"collapsed\":true,\"link\":\"/fullstack/typescript-compilation-debugging-guide.md\"},{\"text\":\"聊一聊 TypeScript 中的泛型\",\"collapsed\":true,\"link\":\"/fullstack/typescript-generic-types.md\"},{\"text\":\"模块化编程实践指南\",\"collapsed\":true,\"items\":[{\"text\":\"模块化编程实践指南\",\"collapsed\":true,\"link\":\"/fullstack/module-programming-practice-guide.md\"},{\"text\":\"模块化编程初体验:概念、演进与设计模式\",\"collapsed\":true,\"link\":\"/fullstack/frontend-module-programming-basic.md\"},{\"text\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"collapsed\":true,\"link\":\"/fullstack/different-module-programming-specifications.md\"},{\"text\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"collapsed\":true,\"link\":\"/fullstack/decode-es-modules.md\"},{\"text\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"collapsed\":true,\"link\":\"/fullstack/typescript-module-programming-enhancement.md\"},{\"text\":\"模块化编程原则梳理与总结\",\"collapsed\":true,\"link\":\"/fullstack/module-programming-principles-best-practices.md\"},{\"text\":\"Node.js 模块化编程梳理与总结\",\"collapsed\":true,\"link\":\"/fullstack/nodejs-module-programming-summary.md\"}]}]},{\"text\":\"工具与资源推荐\",\"collapsed\":true,\"items\":[{\"text\":\"全栈技术资源推荐\",\"collapsed\":true,\"link\":\"/fullstack/full-stack-resources.md\"}]}],\"/product-sense/\":[{\"text\":\"学习与实践全景\",\"collapsed\":true,\"link\":\"/product-sense/overview.md\"},{\"text\":\"产品观察与分析\",\"collapsed\":true,\"items\":[{\"text\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"collapsed\":true,\"link\":\"/product-sense/perplexity-knowledge-worker.md\"}]},{\"text\":\"新 T 型人\",\"collapsed\":true,\"items\":[{\"text\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"collapsed\":true,\"link\":\"/product-sense/ai-native-composite-talents.md\"},{\"text\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"collapsed\":true,\"link\":\"/product-sense/engineer-build-product-sense.md\"}]},{\"text\":\"产品创造与商业化\",\"collapsed\":true,\"items\":[{\"text\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"collapsed\":true,\"link\":\"/product-sense/small-rule-learn.md\"}]},{\"text\":\"方法论\",\"collapsed\":true,\"items\":[{\"text\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"collapsed\":true,\"link\":\"/product-sense/insight-model.md\"},{\"text\":\"用经济学思维做产品\",\"collapsed\":true,\"link\":\"/product-sense/using-economics-thinking.md\"}]}],\"/ai/\":[{\"text\":\"AI 学习与实践全景\",\"collapsed\":true,\"link\":\"/ai/overview.md\"},{\"text\":\"Agent 系列\",\"collapsed\":true,\"items\":[{\"text\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"collapsed\":true,\"link\":\"/ai/agent/overview.md\"},{\"text\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"collapsed\":true,\"link\":\"/ai/agent/planning-module.md\"},{\"text\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"collapsed\":true,\"link\":\"/ai/agent/composition-ai-components.md\"},{\"text\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"collapsed\":true,\"link\":\"/ai/agent/skills-practice-summary.md\"}]},{\"text\":\"社区活动与实践小项目\",\"collapsed\":true,\"items\":[{\"text\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"collapsed\":true,\"link\":\"/ai/agent/deepresearch-agent.md\"},{\"text\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"collapsed\":true,\"link\":\"/ai/agent/claude-agent-sdk-basic-build.md\"},{\"text\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"collapsed\":true,\"link\":\"/ai/agent/math-bot.md\"},{\"text\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"collapsed\":true,\"link\":\"/ai/agent/poetry-bot.md\"}]},{\"text\":\"资源与工具推荐\",\"collapsed\":true,\"items\":[{\"text\":\"好用的 AI 助手与工作站推荐\",\"collapsed\":true,\"link\":\"/ai/tools-assistant.md\"},{\"text\":\"LLM API 平台推荐与选型指南\",\"collapsed\":true,\"link\":\"/ai/llm-api-resources.md\"}]}],\"/growth/\":[{\"text\":\"好书推荐\",\"collapsed\":true,\"link\":\"/growth/books.md\"},{\"text\":\"读书“三要”和“三不要”\",\"collapsed\":true,\"link\":\"/growth/reading-tips.md\"},{\"text\":\"如何甄别真正有用的信息\",\"collapsed\":true,\"link\":\"/growth/distinguish-useful-information.md\"}],\"/repo-insight/\":[{\"text\":\"开源洞察\",\"collapsed\":true,\"link\":\"/repo-insight/overview.md\"},{\"text\":\"fetch-event-source 源码解读\",\"collapsed\":true,\"link\":\"/repo-insight/fetch-event-source.md\"},{\"text\":\"OpenCLI 开源项目解读\",\"collapsed\":true,\"link\":\"/repo-insight/open-cli.md\"}],\"/about/\":[{\"text\":\"关于我\",\"collapsed\":true,\"link\":\"/about/me.md\"},{\"text\":\"成长随笔\",\"collapsed\":true,\"items\":[{\"text\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"collapsed\":true,\"link\":\"/about/growth/outer-experience.md\"},{\"text\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"collapsed\":true,\"link\":\"/about/growth/inner-experience.md\"},{\"text\":\"用科学与迭代改善的方式推动减肥这件小事\",\"collapsed\":true,\"link\":\"/about/growth/weight-loss.md\"}]}],\"/categories.md/\":[{\"text\":\"分类\",\"collapsed\":true,\"link\":\"/categories.md\"},{\"text\":\"标签\",\"collapsed\":true,\"link\":\"/tags.md\"}]},\"docAnalysisInfo\":{\"fileList\":[{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/00.overview.md\",\"relativePath\":\"01.全栈/00.overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\",\"relativePath\":\"01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\",\"relativePath\":\"01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\",\"relativePath\":\"01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源.md\",\"relativePath\":\"01.全栈/10.AI 编程实践指南/00.AI编程工具与资源.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\",\"relativePath\":\"01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/02.CSS工程化.md\",\"relativePath\":\"01.全栈/40.前端工程/02.CSS工程化.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\",\"relativePath\":\"01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\",\"relativePath\":\"01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\",\"relativePath\":\"01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\",\"relativePath\":\"01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\",\"relativePath\":\"01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\",\"relativePath\":\"01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/00.学习与实践全景.md\",\"relativePath\":\"10.产品 Sense/00.学习与实践全景.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\",\"relativePath\":\"10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\",\"relativePath\":\"10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/40.洞察力模型.md\",\"relativePath\":\"10.产品 Sense/05.方法论/40.洞察力模型.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/50.用经济学思维做产品.md\",\"relativePath\":\"10.产品 Sense/05.方法论/50.用经济学思维做产品.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/00.AI 学习与实践全景一览.md\",\"relativePath\":\"20.AI 学习与实践/00.AI 学习与实践全景一览.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/01.好书推荐.md\",\"relativePath\":\"30.悦读时光/01.好书推荐.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/10.读书三要三不要.md\",\"relativePath\":\"30.悦读时光/10.读书三要三不要.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/21.如何甄别真正有用的信息.md\",\"relativePath\":\"30.悦读时光/21.如何甄别真正有用的信息.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.开源洞察/00.overview.md\",\"relativePath\":\"31.开源洞察/00.overview.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.开源洞察/01.fetch-event-source 源码解读.md\",\"relativePath\":\"31.开源洞察/01.fetch-event-source 源码解读.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.开源洞察/02.open-cli.md\",\"relativePath\":\"31.开源洞察/02.open-cli.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/01.关于我.md\",\"relativePath\":\"40.关于/01.关于我.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\",\"relativePath\":\"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\",\"relativePath\":\"40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\"},{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\",\"relativePath\":\"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\"}],\"totalFileWords\":196272,\"eachFileWords\":[{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/00.overview.md\",\"relativePath\":\"01.全栈/00.overview.md\"},\"wordCount\":21,\"readingTime\":\"1m\",\"frontmatter\":{\"date\":{},\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\",\"relativePath\":\"01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”.md\"},\"wordCount\":2017,\"readingTime\":\"7.2m\",\"frontmatter\":{\"date\":{},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\",\"relativePath\":\"01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南.md\"},\"wordCount\":3614,\"readingTime\":\"12.9m\",\"frontmatter\":{\"date\":{},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\",\"relativePath\":\"01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑.md\"},\"wordCount\":4407,\"readingTime\":\"15.2m\",\"frontmatter\":{\"date\":{},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源.md\",\"relativePath\":\"01.全栈/10.AI 编程实践指南/00.AI编程工具与资源.md\"},\"wordCount\":3472,\"readingTime\":\"13.3m\",\"frontmatter\":{\"date\":{},\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\",\"relativePath\":\"01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code.md\"},\"wordCount\":5798,\"readingTime\":\"21.4m\",\"frontmatter\":{\"date\":{},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南.md\"},\"wordCount\":5038,\"readingTime\":\"17.6m\",\"frontmatter\":{\"date\":{},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/02.CSS工程化.md\",\"relativePath\":\"01.全栈/40.前端工程/02.CSS工程化.md\"},\"wordCount\":9015,\"readingTime\":\"34.1m\",\"frontmatter\":{\"date\":{},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\",\"relativePath\":\"01.全栈/40.前端工程/03.JAMStack 梳理与实践指南.md\"},\"wordCount\":3628,\"readingTime\":\"15m\",\"frontmatter\":{\"date\":{},\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\",\"relativePath\":\"01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR.md\"},\"wordCount\":7888,\"readingTime\":\"28m\",\"frontmatter\":{\"date\":{},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\",\"relativePath\":\"01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈.md\"},\"wordCount\":4949,\"readingTime\":\"19.2m\",\"frontmatter\":{\"date\":{},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\",\"relativePath\":\"01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南.md\"},\"wordCount\":6770,\"readingTime\":\"23.9m\",\"frontmatter\":{\"date\":{},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\",\"relativePath\":\"01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践.md\"},\"wordCount\":6634,\"readingTime\":\"26.8m\",\"frontmatter\":{\"date\":{},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\",\"relativePath\":\"01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策.md\"},\"wordCount\":3295,\"readingTime\":\"12.1m\",\"frontmatter\":{\"date\":{},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南.md\"},\"wordCount\":3233,\"readingTime\":\"11.6m\",\"frontmatter\":{\"date\":{},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南.md\"},\"wordCount\":5040,\"readingTime\":\"20m\",\"frontmatter\":{\"date\":{},\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型.md\"},\"wordCount\":5614,\"readingTime\":\"21.5m\",\"frontmatter\":{\"date\":{},\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview.md\"},\"wordCount\":7414,\"readingTime\":\"30.9m\",\"frontmatter\":{\"date\":{},\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础.md\"},\"wordCount\":2099,\"readingTime\":\"7.8m\",\"frontmatter\":{\"date\":{},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理.md\"},\"wordCount\":1889,\"readingTime\":\"7.2m\",\"frontmatter\":{\"date\":{},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析.md\"},\"wordCount\":1767,\"readingTime\":\"7.5m\",\"frontmatter\":{\"date\":{},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强.md\"},\"wordCount\":1576,\"readingTime\":\"6.1m\",\"frontmatter\":{\"date\":{},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践.md\"},\"wordCount\":1303,\"readingTime\":\"4.9m\",\"frontmatter\":{\"date\":{},\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\",\"relativePath\":\"01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化.md\"},\"wordCount\":1240,\"readingTime\":\"4.7m\",\"frontmatter\":{\"date\":{},\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\",\"relativePath\":\"01.全栈/90.工具与资源推荐/90.全栈技术资源推荐.md\"},\"wordCount\":7425,\"readingTime\":\"30.1m\",\"frontmatter\":{\"date\":{},\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/00.学习与实践全景.md\",\"relativePath\":\"10.产品 Sense/00.学习与实践全景.md\"},\"wordCount\":429,\"readingTime\":\"1.5m\",\"frontmatter\":{\"date\":{},\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\",\"relativePath\":\"10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者.md\"},\"wordCount\":1833,\"readingTime\":\"6.3m\",\"frontmatter\":{\"date\":{},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?.md\"},\"wordCount\":1994,\"readingTime\":\"6.8m\",\"frontmatter\":{\"date\":{},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\",\"relativePath\":\"10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense.md\"},\"wordCount\":4356,\"readingTime\":\"15m\",\"frontmatter\":{\"date\":{},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\",\"relativePath\":\"10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感.md\"},\"wordCount\":1982,\"readingTime\":\"6.8m\",\"frontmatter\":{\"date\":{},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/40.洞察力模型.md\",\"relativePath\":\"10.产品 Sense/05.方法论/40.洞察力模型.md\"},\"wordCount\":2572,\"readingTime\":\"9m\",\"frontmatter\":{\"date\":{},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/10.产品 Sense/05.方法论/50.用经济学思维做产品.md\",\"relativePath\":\"10.产品 Sense/05.方法论/50.用经济学思维做产品.md\"},\"wordCount\":3150,\"readingTime\":\"10.7m\",\"frontmatter\":{\"date\":{},\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/00.AI 学习与实践全景一览.md\",\"relativePath\":\"20.AI 学习与实践/00.AI 学习与实践全景一览.md\"},\"wordCount\":25,\"readingTime\":\"1m\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":{},\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述.md\"},\"wordCount\":6363,\"readingTime\":\"22.1m\",\"frontmatter\":{\"date\":{},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块.md\"},\"wordCount\":3028,\"readingTime\":\"10.6m\",\"frontmatter\":{\"date\":{},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流.md\"},\"wordCount\":2685,\"readingTime\":\"9.4m\",\"frontmatter\":{\"date\":{},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\",\"relativePath\":\"20.AI 学习与实践/02.Agent 系列/10.Agent SKills.md\"},\"wordCount\":3915,\"readingTime\":\"14.6m\",\"frontmatter\":{\"date\":{},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent.md\"},\"wordCount\":2889,\"readingTime\":\"11m\",\"frontmatter\":{\"date\":{},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent.md\"},\"wordCount\":2778,\"readingTime\":\"11.2m\",\"frontmatter\":{\"date\":{},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手.md\"},\"wordCount\":2122,\"readingTime\":\"7.2m\",\"frontmatter\":{\"date\":{},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\",\"relativePath\":\"20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵.md\"},\"wordCount\":4145,\"readingTime\":\"14.2m\",\"frontmatter\":{\"date\":{},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐.md\"},\"wordCount\":5439,\"readingTime\":\"20.5m\",\"frontmatter\":{\"date\":{},\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\",\"relativePath\":\"20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南.md\"},\"wordCount\":3528,\"readingTime\":\"13.6m\",\"frontmatter\":{\"date\":{},\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/01.好书推荐.md\",\"relativePath\":\"30.悦读时光/01.好书推荐.md\"},\"wordCount\":1847,\"readingTime\":\"6.4m\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":{},\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/10.读书三要三不要.md\",\"relativePath\":\"30.悦读时光/10.读书三要三不要.md\"},\"wordCount\":3593,\"readingTime\":\"12m\",\"frontmatter\":{\"date\":{},\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/30.悦读时光/21.如何甄别真正有用的信息.md\",\"relativePath\":\"30.悦读时光/21.如何甄别真正有用的信息.md\"},\"wordCount\":2443,\"readingTime\":\"8.2m\",\"frontmatter\":{\"date\":{},\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.开源洞察/00.overview.md\",\"relativePath\":\"31.开源洞察/00.overview.md\"},\"wordCount\":275,\"readingTime\":\"1m\",\"frontmatter\":{\"date\":{},\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.开源洞察/01.fetch-event-source 源码解读.md\",\"relativePath\":\"31.开源洞察/01.fetch-event-source 源码解读.md\"},\"wordCount\":3025,\"readingTime\":\"12.7m\",\"frontmatter\":{\"date\":{},\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/31.开源洞察/02.open-cli.md\",\"relativePath\":\"31.开源洞察/02.open-cli.md\"},\"wordCount\":4917,\"readingTime\":\"21.8m\",\"frontmatter\":{\"date\":{},\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/01.关于我.md\",\"relativePath\":\"40.关于/01.关于我.md\"},\"wordCount\":1636,\"readingTime\":\"5.9m\",\"frontmatter\":{\"date\":{},\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\",\"relativePath\":\"40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑.md\"},\"wordCount\":6206,\"readingTime\":\"22.2m\",\"frontmatter\":{\"date\":{},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\",\"relativePath\":\"40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序.md\"},\"wordCount\":9942,\"readingTime\":\"33.9m\",\"frontmatter\":{\"date\":{},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]}},{\"fileInfo\":{\"filePath\":\"/home/runner/work/insight-stack-blog/insight-stack-blog/docs/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\",\"relativePath\":\"40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总.md\"},\"wordCount\":4009,\"readingTime\":\"13.5m\",\"frontmatter\":{\"date\":{},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]}}],\"lastCommitTime\":\"2026-04-23 21:35:02\"},\"catalogues\":{\"arr\":[],\"map\":{},\"inv\":{}},\"posts\":{\"allPosts\":[{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { fullStackCategories } from '@fragment/data/full-stack-data'\\n</script>\\n<ArticleCardList :categories=\\\"fullStackCategories\\\" />\"},{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"1. 引言\\n一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:\\n\\\"构建 → 部署 → 请求 → 渲染\\\",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择。\\n1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。\\n2、部署:将构建产物部署到服务器,使其可以通过网络访问。\\n3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。\\n4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。\\n上述流程中,\\\"构建\\\"和\\\"渲染\\\"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题—\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/repo-insight/overview\",\"relativePath\":\"/31.开源洞察/00.overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"开源洞察\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"本专栏所有源码解读文章,均借助了本人开源的 repo-insight Agent Skill 来辅助生成。\\nrepo-insight 是一款专注于优秀开源项目代码库解读的智能助手,提供 GitHub URL 或本地目录的一键深度分析能力。\\n- 一键分析 - 支持 GitHub URL 或本地目录分析\\n- 深度报告 - 生成项目概述、架构分析、核心模块解读\\n- 中文支持 - 自动翻译 README、生成中文代码注释\\n- 全自动执行 - 调用后无需中间交互\\n两个 Skill 均具备以上能力,可根据需求选择使用。\\n了解 repo-insight →\\n 开源项目解读\\n| 项目 | 简介 |\\n|----\"},{\"url\":\"/repo-insight/fetch-event-source\",\"relativePath\":\"/31.开源洞察/01.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/repo-insight/open-cli\",\"relativePath\":\"/31.开源洞察/02.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"},{\"url\":\"/categories\",\"relativePath\":\"/@pages/categoriesPage\",\"frontmatter\":{\"title\":\"分类\",\"categoriesPage\":true,\"permalink\":\"/categories\",\"article\":false,\"layout\":\"home\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"分类\",\"date\":\"2026-04-23 13:35:14\",\"capture\":\"\"},{\"url\":\"/tags\",\"relativePath\":\"/@pages/tagsPage\",\"frontmatter\":{\"title\":\"标签\",\"permalink\":\"/tags\",\"tagsPage\":true,\"article\":false,\"layout\":\"home\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"标签\",\"date\":\"2026-04-23 13:35:14\",\"capture\":\"\"},{\"url\":\"/\",\"relativePath\":\"/\",\"frontmatter\":{\"layout\":\"home\",\"title\":\"首页\",\"titleTemplate\":\":title | Insight Stack Blog\",\"tk\":{\"teekHome\":true,\"features\":[{\"title\":\"全栈\",\"details\":\"Engineering × Product × AI\",\"link\":\"/fullstack/overview\",\"image\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/topic/icon_full_stack_circle.webp\"},{\"title\":\"AI 学习与实践\",\"details\":\"Model × Agent × Engineering\",\"link\":\"/ai/overview\",\"image\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/topic/icon_llm_circle.webp\"},{\"title\":\"产品 Sense\",\"details\":\"Impact × Simplicity\",\"link\":\"/product-sense/overview\",\"image\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/topic/icon_product_sense_circle.webp\"}]},\"hero\":{\"name\":\"Insight Stack Blog\",\"text\":\"AI & 全栈技术 & 产品思考与成长记录\",\"tagline\":\"✨探索技术前沿,沉淀产品思考,记录成长点滴,相信时间的力量\",\"actions\":[{\"theme\":\"brand\",\"text\":\"关于我\",\"link\":\"/about/me\"},{\"theme\":\"alt\",\"text\":\"资源推荐\",\"link\":\"/growth/sites\"},{\"theme\":\"alt\",\"text\":\"书籍推荐\",\"link\":\"/growth/books\"}],\"image\":{\"src\":\"/img/full-stack/insight_stack.png\",\"alt\":\"Insight Stack Blog\"}},\"features\":[{\"icon\":\"📖\",\"title\":\"全栈技术\",\"details\":\"前端 & NodeJS & Python 等\",\"link\":\"/fullstack/overview\"},{\"icon\":\"🎉\",\"title\":\"产品 Sense\",\"details\":\"产品 Sense = 用户价值洞察 × 商业可行性 × 技术可实现性\",\"link\":\"/product-sense/overview\"},{\"icon\":\"🎇\",\"title\":\"LLM 应用学习与实践\",\"details\":\"梳理大语言模型应用、Agent 技术、上下文工程与AI编程等专题,探索 AI 时代的技术与应用。\",\"link\":\"/ai/overview\"},{\"icon\":\"📝\",\"title\":\"个人成长\",\"details\":\"收录一些不错的站点、技术周刊、AI 等资源,总结个人在时间管理、效率工具、健康管理等方面的成长经验。\",\"link\":\"/about/me\"}]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"首页\",\"date\":\"2026-04-23 13:35:14\",\"capture\":\"<style\\n/* 彩虹动画 */\\n:root {\\n animation: rainbow 12s linear infinite;\\n}\\n.tk-avatar {\\n height: var(--tk-avatar-size) !important;\\n width: var(--tk-avatar-size) !important;\\n}\\n.tk-avatar--circle {\\n border-radius: 50% !important;\\n}\\n.vp-doc hero-text {\\n display: none !important;\\n}\\n@media (min-w\"}],\"originPosts\":[{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { fullStackCategories } from '@fragment/data/full-stack-data'\\n</script>\\n<ArticleCardList :categories=\\\"fullStackCategories\\\" />\"},{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"1. 引言\\n一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:\\n\\\"构建 → 部署 → 请求 → 渲染\\\",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择。\\n1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。\\n2、部署:将构建产物部署到服务器,使其可以通过网络访问。\\n3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。\\n4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。\\n上述流程中,\\\"构建\\\"和\\\"渲染\\\"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题—\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/repo-insight/overview\",\"relativePath\":\"/31.开源洞察/00.overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"开源洞察\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"本专栏所有源码解读文章,均借助了本人开源的 repo-insight Agent Skill 来辅助生成。\\nrepo-insight 是一款专注于优秀开源项目代码库解读的智能助手,提供 GitHub URL 或本地目录的一键深度分析能力。\\n- 一键分析 - 支持 GitHub URL 或本地目录分析\\n- 深度报告 - 生成项目概述、架构分析、核心模块解读\\n- 中文支持 - 自动翻译 README、生成中文代码注释\\n- 全自动执行 - 调用后无需中间交互\\n两个 Skill 均具备以上能力,可根据需求选择使用。\\n了解 repo-insight →\\n 开源项目解读\\n| 项目 | 简介 |\\n|----\"},{\"url\":\"/repo-insight/fetch-event-source\",\"relativePath\":\"/31.开源洞察/01.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/repo-insight/open-cli\",\"relativePath\":\"/31.开源洞察/02.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"sortPostsByDateAndSticky\":[{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/repo-insight/open-cli\",\"relativePath\":\"/31.开源洞察/02.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/repo-insight/overview\",\"relativePath\":\"/31.开源洞察/00.overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"开源洞察\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"本专栏所有源码解读文章,均借助了本人开源的 repo-insight Agent Skill 来辅助生成。\\nrepo-insight 是一款专注于优秀开源项目代码库解读的智能助手,提供 GitHub URL 或本地目录的一键深度分析能力。\\n- 一键分析 - 支持 GitHub URL 或本地目录分析\\n- 深度报告 - 生成项目概述、架构分析、核心模块解读\\n- 中文支持 - 自动翻译 README、生成中文代码注释\\n- 全自动执行 - 调用后无需中间交互\\n两个 Skill 均具备以上能力,可根据需求选择使用。\\n了解 repo-insight →\\n 开源项目解读\\n| 项目 | 简介 |\\n|----\"},{\"url\":\"/repo-insight/fetch-event-source\",\"relativePath\":\"/31.开源洞察/01.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { fullStackCategories } from '@fragment/data/full-stack-data'\\n</script>\\n<ArticleCardList :categories=\\\"fullStackCategories\\\" />\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"},{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"1. 引言\\n一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:\\n\\\"构建 → 部署 → 请求 → 渲染\\\",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择。\\n1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。\\n2、部署:将构建产物部署到服务器,使其可以通过网络访问。\\n3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。\\n4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。\\n上述流程中,\\\"构建\\\"和\\\"渲染\\\"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题—\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"sortPostsByDate\":[{\"url\":\"/repo-insight/open-cli\",\"relativePath\":\"/31.开源洞察/02.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/repo-insight/overview\",\"relativePath\":\"/31.开源洞察/00.overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"开源洞察\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"本专栏所有源码解读文章,均借助了本人开源的 repo-insight Agent Skill 来辅助生成。\\nrepo-insight 是一款专注于优秀开源项目代码库解读的智能助手,提供 GitHub URL 或本地目录的一键深度分析能力。\\n- 一键分析 - 支持 GitHub URL 或本地目录分析\\n- 深度报告 - 生成项目概述、架构分析、核心模块解读\\n- 中文支持 - 自动翻译 README、生成中文代码注释\\n- 全自动执行 - 调用后无需中间交互\\n两个 Skill 均具备以上能力,可根据需求选择使用。\\n了解 repo-insight →\\n 开源项目解读\\n| 项目 | 简介 |\\n|----\"},{\"url\":\"/repo-insight/fetch-event-source\",\"relativePath\":\"/31.开源洞察/01.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { fullStackCategories } from '@fragment/data/full-stack-data'\\n</script>\\n<ArticleCardList :categories=\\\"fullStackCategories\\\" />\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"},{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"1. 引言\\n一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:\\n\\\"构建 → 部署 → 请求 → 渲染\\\",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择。\\n1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。\\n2、部署:将构建产物部署到服务器,使其可以通过网络访问。\\n3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。\\n4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。\\n上述流程中,\\\"构建\\\"和\\\"渲染\\\"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题—\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"groupPostsByYear\":{\"2026 \":[{\"url\":\"/repo-insight/open-cli\",\"relativePath\":\"/31.开源洞察/02.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/repo-insight/overview\",\"relativePath\":\"/31.开源洞察/00.overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"开源洞察\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"本专栏所有源码解读文章,均借助了本人开源的 repo-insight Agent Skill 来辅助生成。\\nrepo-insight 是一款专注于优秀开源项目代码库解读的智能助手,提供 GitHub URL 或本地目录的一键深度分析能力。\\n- 一键分析 - 支持 GitHub URL 或本地目录分析\\n- 深度报告 - 生成项目概述、架构分析、核心模块解读\\n- 中文支持 - 自动翻译 README、生成中文代码注释\\n- 全自动执行 - 调用后无需中间交互\\n两个 Skill 均具备以上能力,可根据需求选择使用。\\n了解 repo-insight →\\n 开源项目解读\\n| 项目 | 简介 |\\n|----\"},{\"url\":\"/repo-insight/fetch-event-source\",\"relativePath\":\"/31.开源洞察/01.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { fullStackCategories } from '@fragment/data/full-stack-data'\\n</script>\\n<ArticleCardList :categories=\\\"fullStackCategories\\\" />\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"},{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"}],\"2025 \":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"1. 引言\\n一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:\\n\\\"构建 → 部署 → 请求 → 渲染\\\",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择。\\n1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。\\n2、部署:将构建产物部署到服务器,使其可以通过网络访问。\\n3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。\\n4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。\\n上述流程中,\\\"构建\\\"和\\\"渲染\\\"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题—\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"},{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"}],\"2024 \":[{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}],\"2023 \":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"2022 \":[{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}]},\"groupPostsByYearMonth\":{\"2026 \":{\"04\":[{\"url\":\"/repo-insight/open-cli\",\"relativePath\":\"/31.开源洞察/02.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/repo-insight/overview\",\"relativePath\":\"/31.开源洞察/00.overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"开源洞察\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"本专栏所有源码解读文章,均借助了本人开源的 repo-insight Agent Skill 来辅助生成。\\nrepo-insight 是一款专注于优秀开源项目代码库解读的智能助手,提供 GitHub URL 或本地目录的一键深度分析能力。\\n- 一键分析 - 支持 GitHub URL 或本地目录分析\\n- 深度报告 - 生成项目概述、架构分析、核心模块解读\\n- 中文支持 - 自动翻译 README、生成中文代码注释\\n- 全自动执行 - 调用后无需中间交互\\n两个 Skill 均具备以上能力,可根据需求选择使用。\\n了解 repo-insight →\\n 开源项目解读\\n| 项目 | 简介 |\\n|----\"},{\"url\":\"/repo-insight/fetch-event-source\",\"relativePath\":\"/31.开源洞察/01.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"},{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"}],\"03\":[{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { fullStackCategories } from '@fragment/data/full-stack-data'\\n</script>\\n<ArticleCardList :categories=\\\"fullStackCategories\\\" />\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"},{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"}],\"02\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"}],\"01\":[{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"}]},\"2025 \":{\"10\":[{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"}],\"11\":[{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"12\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"1. 引言\\n一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:\\n\\\"构建 → 部署 → 请求 → 渲染\\\",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择。\\n1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。\\n2、部署:将构建产物部署到服务器,使其可以通过网络访问。\\n3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。\\n4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。\\n上述流程中,\\\"构建\\\"和\\\"渲染\\\"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题—\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"}],\"08\":[{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"03\":[{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"}]},\"2024 \":{\"06\":[{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"}],\"05\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"04\":[{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"03\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"01\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}]},\"2023 \":{\"01\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}]},\"2022 \":{\"09\":[{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}]}},\"groupPosts\":{\"categories\":{\"AI 学习与实践\":[{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/planning-module\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/02.Agent 规划模块\",\"frontmatter\":{\"date\":\"2026-02-24 20:52:37\",\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"description\":\"摘要总结:如果说 LLM 是 Agent 的大脑,规划模块则是其负责复杂决策的“前额叶”。本文深度解构了 Agent 迈向确定性执行的核心路径:从任务分解的降低熵值,到自我反思的闭环控制。通过对比“边走边看”的 ReAct 动态响应模式与“谋定后动”的 Plan-and-Execute 预编排模式,本文揭示了如何针对长链路工程任务构建稳健的决策范式,助你完成从“简单提示词”到“复杂架构设计”的认知跃迁。\",\"permalink\":\"/ai/agent/planning-module\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"探寻 Agent 决策中枢:迈向确定性执行的规划范式\",\"date\":\"2026-02-24 20:52:37\",\"capture\":\"1. 引言\\n在人类大脑中,前额叶皮层负责复杂的认知规划、决策和社交表现。对于一个 Agent 而言,规划模块正是它的“前额叶”——它决定了 Agent 是只会机械响应指令的“木偶”,还是能独立拆解目标、在复杂环境中寻找最优路径的“数字员工”。\\nAgent 的规划能力主要由两部分协同驱动:任务分解与自我反思。\\n 2. 任务分解:化繁为简的策略\\n任务分解是指将一个复杂的目标或任务拆解为多个具体、可操作的的子任务,以便 Agent 能够更高效地执行和管理。其本质是降低问题的熵值,让 Agent 能够聚焦于每一个细小的确定性步骤,从而逐步解决问题,提高规划的可行性和执行效率。\\n根据“规划”与“执行”发\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"Agent 系列\":[{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"}],\"全栈\":[{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/fullstack/overview\",\"relativePath\":\"/01.全栈/00.overview\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"全景一览\",\"description\":\"本系列围绕现代全栈开发的能力体系展开,从 AI 时代的工程思维出发,覆盖前端工程(React/Vue/CSS)、全栈基础素养(TypeScript/JavaScript)、工具与资源推荐等核心领域,帮助构建从\\\"认知层 → 技术领域 → 工程能力 → 基础设施\\\"的完整全栈知识图谱。\",\"categories\":[\"全栈\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全景一览\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"<script setup\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { fullStackCategories } from '@fragment/data/full-stack-data'\\n</script>\\n<ArticleCardList :categories=\\\"fullStackCategories\\\" />\"},{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"1. 引言\\n一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:\\n\\\"构建 → 部署 → 请求 → 渲染\\\",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择。\\n1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。\\n2、部署:将构建产物部署到服务器,使其可以通过网络访问。\\n3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。\\n4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。\\n上述流程中,\\\"构建\\\"和\\\"渲染\\\"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题—\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"产品 Sense\":[{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"},{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"},{\"url\":\"/product-sense/using-economics-thinking\",\"relativePath\":\"/10.产品 Sense/05.方法论/50.用经济学思维做产品\",\"frontmatter\":{\"date\":\"2024-01-01 16:00:00\",\"title\":\"用经济学思维做产品\",\"description\":\"将经济学核心原理融合进产品设计全生命周期的方法论体系,构建理性的“产品Sense”。\",\"categories\":[\"产品 Sense\"],\"permalink\":\"/product-sense/using-economics-thinking\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用经济学思维做产品\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"在产品管理的广阔天地中,我们往往强调“产品 Sense”(Product Sense)——一种对用户需求、市场风向和技术潜力的直觉性捕捉。然而,这种 Sense 绝非凭空而来的灵光乍现,它需要稳固的理性地基。在众多学科中,经济学无疑提供了最底层的逻辑支柱。\\n经济学不仅仅是关于金钱和市场的科学,它更是一种解决问题、优化决策的方式。对产品人而言,借鉴经济学思维,意味着能够理智地权衡利弊,更精准地定价,更深刻地洞察人性,最终在错综复杂的约束条件下,求解出用户价值与商业价值并重的最优解。\\n 1. 生活里的经济学洞察——洞察不仅是关于需求,更是关于成本与博弈\\n我们常被日常现象的“合理性”所迷惑,而经济学\"}],\"AI\":[{\"url\":\"/product-sense/engineer-build-product-sense\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/21.工程师如何构建产品 Sense\",\"frontmatter\":{\"date\":\"2025-10-23 16:05:50\",\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"description\":\"摘要总结:当 AI 让代码生成的边际成本趋近于零,“技术实现”不再是不可逾越的壁垒,“产品洞察”能构筑起新的核心护城河。本文拒绝玄学,将抽象的 产品 Sense 解构为三个核心数学公式,并提供一套基于“逆向工程”的刻意练习指南,助力开发者在算力过剩的时代,完成从“代码工匠”到“价值创造者”的认知跃迁。\",\"sticky\":1,\"top\":true,\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/engineer-build-product-sense\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"当“实现”不再是壁垒:工程师如何构建产品 Sense?\",\"date\":\"2025-10-23 16:05:50\",\"capture\":\"1. 引言\\n在很长一段时间里,产品 Sense(产品感) 被视为一种玄学。它似乎是乔布斯式的灵光一现,或是张小龙式的“独断专行”。\\n但对于大多数工程师、产品经理乃至独立开发者而言,将能力寄托于“天赋”是危险的。我认为,产品 Sense 并非不可捉摸的黑魔法,而是一套经过高频训练后内化为本能的思维算法。 就像资深程序员看到一段代码就能嗅出 \\\"Code Smell\\\"(代码异味),资深产品人也能在瞬间判断一个需求是“真痛点”还是“伪需求”。\\n一个成功的产品决策,往往发生在三个维度的交汇点:\\n* 用户价值洞察(User Value Insight):不仅听懂用户说“想要更快的马”,更能洞察他其实“想更\"},{\"url\":\"/product-sense/overview\",\"relativePath\":\"/10.产品 Sense/00.学习与实践全景\",\"frontmatter\":{\"date\":\"2026-03-19 23:05:50\",\"title\":\"学习与实践全景\",\"description\":\"产品 Sense 学习与实践全景一览,涵盖 AI 产品观察、复合型人才成长、商业化思考及方法论总结等。\",\"categories\":[\"产品 Sense\",\"AI\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/overview\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"学习与实践全景\",\"date\":\"2026-03-19 23:05:50\",\"capture\":\"> * 追求高杠杆——以极简技术解决复杂问题,拒绝为炫技而设计的伪需求;\\n> * 平衡感性与理性——既共情用户的真实场景与情绪,又冷静追溯痛点本质,让产品既有温度,又不至于沦为功能的堆砌。\\n解构这种产品 Sense 的基础在于对投入产出比(ROI)的极致追求与对人性的深度剖析:\\n* 一方面,卓越的产品嗅觉意味着寻找“高杠杆解”,用最克制的技术复杂度去撬动最广泛且强烈的用户价值,果断规避为了技术而技术的伪需求陷阱。\\n* 另一方面,既需要设身处地感知用户的真实使用场景与情绪,又必须保持理性去追问痛点的根源,确保产品既不沦为臃肿的需求许愿池,也不变成缺乏人性温度的冰冷机器。\\n<im\"}],\"悦读时光\":[{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"}],\"个人成长\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"开源洞察\":[{\"url\":\"/repo-insight/open-cli\",\"relativePath\":\"/31.开源洞察/02.open-cli\",\"frontmatter\":{\"date\":\"2026-04-11 14:52:34\",\"title\":\"OpenCLI 开源项目解读\",\"tldr\":\"深度解析 OpenCLI 架构与核心能力,为 AI Agent 提供可复用的浏览器自动化解决方案。\",\"description\":\"全面解读 OpenCLI 的分层插件架构、Daemon+Extension 安全设计、70+ 网站适配器,以及 AI Agent 友好的技能系统。\",\"abstract\":\"OpenCLI 是一个将网站、浏览器会话、Electron 应用和本地工具转换为确定性命令行接口的 AI 驱动自动化平台。该项目采用分层插件架构,通过 IPage 接口抽象浏览器操作,支持 BrowserBridge(扩展)和 CDPBridge(直接 CDP)两种连接方式,实现 70+ 预置网站适配器的统一管理。其 Daemon+Extension 设计提供多层安全防护,结构化技能系统确保 AI Agent 调用的确定性输出,为 Agent 实时网站操作、CLI 工具统一管理等场景提供可靠基础设施。\",\"permalink\":\"/repo-insight/open-cli\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"OpenCLI 开源项目解读\",\"date\":\"2026-04-11 14:52:34\",\"capture\":\"- 项目名称:OpenCLI\\n- 项目描述:OpenCLI 是一个让你通过命令行操作网站、控制 Electron 应用、统一管理 CLI 工具的 AI 驱动型自动化平台。\\n- 项目地址:https://github.com/jackwener/OpenCLI\\n- 核心功能:\\n - 70+ 预置网站适配器(bilibili、twitter、hackernews 等)\\n - 浏览器自动化(复用登录会话,无需密码)\\n - Electron 应用控制(Cursor、ChatGPT 等)\\n - CLI 工具统一管理\\n - AI Agent 友好的技能系统\\n 1. 项目概览\\n 1.1 项目定位与\"},{\"url\":\"/repo-insight/overview\",\"relativePath\":\"/31.开源洞察/00.overview\",\"frontmatter\":{\"date\":\"2026-04-10 14:52:34\",\"title\":\"开源洞察\",\"permalink\":\"/repo-insight/overview\",\"categories\":[\"开源洞察\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"开源洞察\",\"date\":\"2026-04-10 14:52:34\",\"capture\":\"本专栏所有源码解读文章,均借助了本人开源的 repo-insight Agent Skill 来辅助生成。\\nrepo-insight 是一款专注于优秀开源项目代码库解读的智能助手,提供 GitHub URL 或本地目录的一键深度分析能力。\\n- 一键分析 - 支持 GitHub URL 或本地目录分析\\n- 深度报告 - 生成项目概述、架构分析、核心模块解读\\n- 中文支持 - 自动翻译 README、生成中文代码注释\\n- 全自动执行 - 调用后无需中间交互\\n两个 Skill 均具备以上能力,可根据需求选择使用。\\n了解 repo-insight →\\n 开源项目解读\\n| 项目 | 简介 |\\n|----\"},{\"url\":\"/repo-insight/fetch-event-source\",\"relativePath\":\"/31.开源洞察/01.fetch-event-source 源码解读\",\"frontmatter\":{\"date\":\"2026-04-10 14:43:09\",\"title\":\"fetch-event-source 源码解读\",\"categories\":[\"开源洞察\"],\"permalink\":\"/repo-insight/fetch-event-source\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"fetch-event-source 源码解读\",\"date\":\"2026-04-10 14:43:09\",\"capture\":\"- 项目名称:@microsoft/fetch-event-source\\n- 项目描述:微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事件接收能力。\\n- 项目地址:https://github.com/Azure/fetch-event-source\\n 第一部分: 业务价值篇\\n 项目定位\\n`@microsoft/fetch-event-source` 是微软开源的一个基于 Fetch API 的 Server-Sent Events (SSE) 客户端库,为浏览器提供了更强大、更灵活的服务器推送事\"}],\"AI 编程系列\":[{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"网络与通信\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"ai-practice\":[{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"}],\"前端工程\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"1. 引言\\n一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:\\n\\\"构建 → 部署 → 请求 → 渲染\\\",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择。\\n1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。\\n2、部署:将构建产物部署到服务器,使其可以通过网络访问。\\n3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。\\n4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。\\n上述流程中,\\\"构建\\\"和\\\"渲染\\\"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题—\"},{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"资源推荐\":[{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"关于\":[{\"url\":\"/about/me\",\"relativePath\":\"/40.关于/01.关于我\",\"frontmatter\":{\"date\":\"2025-08-29 09:40:53\",\"title\":\"关于我\",\"description\":\"摘要总结:从 Tech Stack 到 Insight Stack,当 AI 接管了实现,我更关注架构的权衡与产品的价值,专注:工程化 Spec 与 AI 编程磨合的实践 | Agent 落地 | 独立产品。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/about_me_chinese.png\",\"permalink\":\"/about/me\",\"categories\":[\"关于\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"关于我\",\"date\":\"2025-08-29 09:40:53\",\"capture\":\"我是谁\\n我是一名拥有全栈背景的开发者, 技术底色源于工作几年后积累了较为扎实的工程化实践——从基础的 Web 前端到复杂的跨平台小程序基础框架的架构升级,再到基于 NodeJS 的服务端开发,这些经历锻炼了我对系统复杂度的掌控力、工程化能力以及项目推动与团队合作的能力。\\n自 2023 年 LLM 浪潮涌现以来,我深度投身于 AI 相关的技术探索。在工作与业余项目中,主导或参与了多个基于大模型的应用落地,积累了从 Prompt 调优到 Agentic Workflow 编排的一线经验,也多次参加了国内 AI 社区相关的技术分享与交流活动,了解了 AI 领域最新的技术趋势与实践。\\n\\n目前,我主要在\"}],\"全栈基础素养\":[{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"模块化编程实践指南\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"growth\":[{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}]},\"tags\":{\"Agent SDK\":[{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"}],\"Multi-Agent\":[{\"url\":\"/ai/agent/deepresearch-agent\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/10.基于 Claude Agent SDK 搭建 Deep Research Agent\",\"frontmatter\":{\"date\":\"2026-04-02 00:38:37\",\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"description\":\"对复杂研究任务时,单智能体(Single-Agent)常因上下文稀释和逻辑疲劳导致产出质量下降。本文基于 Claude Agent SDK 探讨了多智能体系统(MAS)的工程化落地。通过“Lead + Subagent”的声明式架构,我们将深度研究拆解为搜索、量化分析、可视化绘图与结构化写作四个独立环节。\",\"permalink\":\"/ai/agent/deepresearch-agent\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent SDK\",\"Multi-Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"声明式多智能体协同:基于 Claude Agent SDK 构建深度研究系统\",\"date\":\"2026-04-02 00:38:37\",\"capture\":\"> 实践证明,通过严格的职责隔离(如 Lead Agent 仅负责调度)与工程边界约束(如 Researcher 强制提取量化指标),MAS 能够生成具备专业数据图表支撑的深度报告。本文将从架构设计、工作流编排到 PDF 自动生成,完整还原这一“AI 驱动调研流水线”的构建过程,并展示其在教育研究案例中的实战效果。\\n 1. 引言\\n在 AI Agent 深度全景综述一文中,我们探讨了多智能体系统(Multi-Agent Systems, MAS)的理论优势。从理论层面看,这类系统通过任务分解、职责隔离与并行协作机制,有效突破了单智能体在复杂任务中的能力瓶颈——不仅显著提升了任务处理的天花板\"}],\"Agent Skills\":[{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"}],\"Agent\":[{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/ai/agent/claude-agent-sdk-basic-build\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/20.基于 Claude Agent SDK 搭建 Agent\",\"frontmatter\":{\"date\":\"2026-03-06 00:37:58\",\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"description\":\"在 Agent 技术快速走向成熟的今天,如何低成本构建具备“自主洞察”能力的智能体?本文深度拆解 Anthropic 官方推出的 Claude Agent SDK,解析其如何通过托管 Agent Loop 和会话持久化机制,解决 Agent 开发中的状态管理难题。文章通过从无状态交互到具备流式输出能力的 TUI 自动化工具进阶实战,展示了构建低成本、高可用 AI 原生应用的完整路径。\",\"permalink\":\"/ai/agent/claude-agent-sdk-basic-build\",\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"Agent SDK\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"告别手动 Loop:借助 Claude Agent SDK 实现 Agent 的工程化闭环\",\"date\":\"2026-03-06 00:37:58\",\"capture\":\"1. 引言\\n当前,AI Agent 的演进已进入一个崭新的阶段——从需要频繁人工干预的\\\"半自动\\\"模式,进化为能够自主洞察环境变化、动态调整执行策略、实现业务流程自适应编排的智能化系统。Claude Code、Manus、OpenClaw 等代表性产品层出不穷,也标志着 Agent 技术正在快速走向成熟与普及。\\n近期,笔者在为个人博客引入智能化运营能力(如内容自动校对、审稿与发布),深入研究了多款 Agent 开发框架,如 Claude Agent SDK、Langchain、LangGraph 等。在经过初步的研究对比分析后,Claude Agent SDK 成为了低成本构建高可用 Agent\"},{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"AI\":[{\"url\":\"/ai/agent/skills-practice-summary\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/10.Agent SKills\",\"frontmatter\":{\"date\":\"2026-03-05 23:11:25\",\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"description\":\"大语言模型在特定工程领域常面临“知而不行”的困境。本文深度拆解 Anthropic 最新推出的 Agent Skills 规范,揭秘其如何通过渐进式披露与三级加载机制,在控制 Token 成本的同时显著提升 Agent 的任务执行精度。文章涵盖了从文件夹架构设计到实战 git-workflow 编写的全流程指南,助你将零散的 Prompt 转化为标准化的数字资产。\",\"permalink\":\"/ai/agent/skills-practice-summary\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\",\"Agent 系列\"],\"tags\":[\"Agent Skills\",\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何编写一个高可用的 Agent Skill?从机制拆解到生产实践指南\",\"date\":\"2026-03-05 23:11:25\",\"capture\":\"1. 引言:Agent Skills 是什么?\\n在大语言模型(LLM)的落地实践中,开发者经常面临一个共性挑战:模型在特定细分领域往往处于“知而不行”的状态——虽然拥有博杂的知识,却缺乏执行复杂任务的专业路径。\\n为了解决这一痛点,Anthropic 在其旗舰模型 Claude 3.7 系列中正式推出了 Claude Skills。这一功能将 LLM 的能力封装为直观的“能力文件夹”,极大提升了智能体的实用性,并迅速在开发者社区引发热议。2025 年 12 月,随着 Anthropic 联合生态伙伴正式开源 Agent Skills 规范,Agent Skills 的标准化也正式开启(而这一能力\"},{\"url\":\"/ai/agent/composition-ai-components\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/03.构建 Agentic 生态:将零散组件化为可持续的工作流\",\"frontmatter\":{\"date\":\"2026-02-06 15:48:23\",\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"description\":\"摘要总结:面对层出不穷的 Prompt、MCP、Skills 和 Subagents,很多开发者和产品经理常感到困惑:这些组件究竟是重复造轮子,还是各司其职的积木?本文将深度拆解 Agentic 生态的五大核心支柱,揭示如何通过优雅的架构设计实现协同闭环,将零散的 AI 组件拼装成一套可持续进化的 AI 原生操作系统,把碎片化的 AI 能力转化为高可用的生产力流。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\",\"permalink\":\"/ai/agent/composition-ai-components\",\"sticky\":1,\"top\":true,\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"构建 Agentic 生态:零散组件化为可持续的工作流\",\"date\":\"2026-02-06 15:48:23\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/ai-practice/agent_components_zh.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 引言\\n> 问题:在智能体生态里,各个组件到底是怎么协同工作的?\\n当前,Agent(智能体)技术发展迅猛,各种设计模式、核心组件与工作机制层出不穷。面对繁杂的智能体生态\"},{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"},{\"url\":\"/ai/agent/poetry-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/70.诗歌小精灵\",\"frontmatter\":{\"date\":\"2024-04-19 22:15:38\",\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"description\":\"摘要总结:在 Agent 概念满天飞的当下,决定大模型实际表现的往往是最底层的 System Prompt 设计。本文记录了周末利用文心智能体平台搭建“诗歌小精灵”的完整实践。通过对比“传统大段文本”与“LangGPT 结构化”两种 Prompt 的实际输出,深度拆解了结构化 Prompt 如何像“写代码”一样规范 AI 的思考工作流,有效解决指令漂移与幻觉问题。这不仅是一次 Prompt 调优实验,更是一场关于 AI 产品 Sense 与未来交互形态的探索。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"AI\"],\"permalink\":\"/ai/agent/poetry-bot\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"零代码不等于零逻辑:结构化 Prompt 驱动下的 Agent 搭建实战\",\"date\":\"2024-04-19 22:15:38\",\"capture\":\"1. 实践背景\\n周末在社区活动中再次听到了 LangGPT 作者云中江树关于“结构化提示词”的分享,让人感触颇深。虽然当前 Agent 概念火热,层出不穷的框架让人眼花缭乱,但回归本质我们就会发现:System Prompt 的底层设计、上下文工程以及指令遵循机制,才是决定一个 Agent 灵魂的关键。\\n正巧大团队自研的零代码 Agent 平台近期发布了新版本,为了亲测平台性能并实战演练结构化 Prompt 的编写技巧,我决定创建一个“诗歌小精灵” Agent。这不仅是一个趣味实验,更是为了探索 AI 在文学创作这种“感性领域”中,如何通过“理性的结构约束”达到更高的输出上限。\\n 2. 平台与\"}],\"全栈\":[{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"},{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"},{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/ai-engineer-capability\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/02.重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"frontmatter\":{\"date\":\"2026-03-02 11:05:50\",\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"description\":\"摘要总结:当 AI 极速降低代码编写门槛,单纯的“业务代码翻译器”角色正加速贬值。本文从技术演进与产品思考的交汇点出发,将 AI 时代的开发者能力图谱重新划分为三大核心圈层:产品应用层(Insight Stack)、Agent 开发层与 AI 基础设施层。无论你是深耕视图层交互、精通 Node.js 等服务端架构的开发者,还是致力于技术落地的探索者,都能在这份演进指南中找到打破能力边界、向“超级个体”与“AI 智能体指挥官”跃迁的破局之道。\",\"permalink\":\"/fullstack/ai-engineer-capability\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"重构开发者:AI 时代下的工程师能力图谱与演进指南\",\"date\":\"2026-03-02 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/ai_engineering_arc.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site back\"},{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/fullstack/ai-change-work-workflow\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/10.读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"frontmatter\":{\"date\":\"2025-12-06 22:05:50\",\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"description\":\"软件工程正经历从“手写逻辑”向“意图调度”的范式迁徙。Anthropic 的研究揭示了 AI 并非简单的提效工具,而是通过释放 27% 曾经“不划算”的工程任务,重塑了软件质量的密度。在自然语言即编程语言的时代,我们需要通过规格驱动(SDD)与多智能体编排,破解“监督悖论”带来的技能平庸化危机,将 AI 的概率性生成驯化为确定性的工程交付。当编码成本趋于零,工程师的终极壁垒将是定义完美的品味,以及在 AI 迷雾中识破平庸的洞察力。\",\"permalink\":\"/fullstack/ai-change-work-workflow/\",\"top\":true,\"tags\":[\"全栈\",\"AI\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读 Anthropic 研究报告,探寻 AI 时代的工程范式重塑\",\"date\":\"2025-12-06 22:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n地址:How AI is transforming work at Anthropic\\n核心标签:`AI辅助编程` `工程` `范式转移` `工作转型` `生产力提升` `技能发展` `人机协作` \\n一句话介绍:Anthropic 不仅仅是 AI 工具的生产者,更是第一个进入“未来实验室”的深度观察者。他们通过内部数月的实验数据告诉我们:大模型对软件工程的改造,绝非简单的“提效”,而是一\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"}],\"产品\":[{\"url\":\"/fullstack/ai-native\",\"relativePath\":\"/01.全栈/01.AI Native 工程思维/01.不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"frontmatter\":{\"date\":\"2025-10-24 11:05:50\",\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"description\":\"摘要总结:在 AI 重塑软件工程的今天,全栈不再是技术的线性叠加,正在从“技术栈堆砌”转向“认知栈重构”。本文提出 “(工程 + 产品) × AI” 的新公式,助力开发者构建“洞察-架构-杠杆”认知三层塔,利用 AI 杠杆让自己进化为价值创造者。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"permalink\":\"/fullstack/ai-native\",\"sticky\":1,\"top\":true,\"tags\":[\"全栈\",\"AI\",\"产品\"],\"categories\":[\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于代码:构建 AI 时代全栈工程师的“认知三层塔”\",\"date\":\"2025-10-24 11:05:50\",\"capture\":\"<script setup>\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在很长一段时间里,当我们谈论“全栈工程师”时,脑海中浮现的往往是一张冗长且令人疲惫的技术工序清单。\\n就像我曾经以为的那样,全栈就是线性的技能叠加与物理式的技术拼接,是一种依靠人力去填补技术鸿沟的“西西弗斯式”努力:\\n* 线性的技能叠加:我们被迫成为“全能手”,左手用 React/Vue 构建精美的 UI,右手用 Node/Go 编写高并发 API,中间还要处理数据库的 ACI\"}],\"悦读时光\":[{\"url\":\"/growth/reading-tips\",\"relativePath\":\"/30.悦读时光/10.读书三要三不要\",\"frontmatter\":{\"date\":\"2025-03-06 11:42:20\",\"title\":\"读书“三要”和“三不要”\",\"description\":\"摘要总结:在信息爆炸的时代,读书依然是获取深度知识最高效的方式之一。但“捧起书”并不等于“有收获”,怎么读往往比读什么更重要。本文总结了高效阅读的“三要”与“三不要”:从完整阅读观摩大师思维、带着问题构建知识树,到通过讨论检验理解;同时提醒阅读者警惕哀怨心态对阅读初衷的异化、避免陷入对物理媒介的“玩物丧志”,以及切忌脱离现实的“真空”阅读。阅读不仅是向内探索的精神之旅,更是向外理解真实世界、创造社会价值的实用工具。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\",\"permalink\":\"/growth/reading-tips\",\"sticky\":1,\"top\":true,\"categories\":[\"悦读时光\"],\"tags\":[\"悦读时光\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读书“三要”和“三不要”\",\"date\":\"2025-03-06 11:42:20\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/reading_need.png\\\" style=\\\"width: 100%; border-radius: 8px; margin-bottom: 20px;\\\" alt=\\\"about site background\\\">\\n 1. 我们为什么需要读书?\\n读书是从外界接受信息的一种方式,与聊天、浏览网页、听播客、看电视并无本质区别。但书这种媒介与其他信息媒介相比,有其独有的优势:\\n- 深度与严谨:书籍往往是创作者多年思考、长期\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}],\"系统思维\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"}],\"数学思维\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"}],\"模型思维\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"}],\"疫情\":[{\"url\":\"/about/growth/outer-experience\",\"relativePath\":\"/40.关于/30.成长随笔/01.走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"frontmatter\":{\"date\":\"2024-01-15 22:16:00\",\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"description\":\"摘要总结:书接上文《向内思变》,本文记录了笔者在后疫情时代从“闭关”走向“向外体验”的尝试与心得。面对机械执行带来的“目标隧道”效应,笔者尝试跳出单一的线性规划,转而寻求更底层的认知逻辑。文章通过重读《要事第一》建立平衡观,利用系统思维(增强/调节回路)构建洞察力,并重新拾起数学思维(概率、稀疏性、多样性)与 AI 视角。这是一次关于如何用科学模型替代机械执行,从本质上重构个人认知体系的深度复盘。\",\"permalink\":\"/about/growth/outer-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/outer_experience_bg.png\",\"sticky\":1,\"top\":true,\"tags\":[\"系统思维\",\"数学思维\",\"模型思维\",\"AI\",\"疫情\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"走出“目标隧道”:用系统与数学思维重构底层逻辑\",\"date\":\"2024-01-15 22:16:00\",\"capture\":\"1. 写在前面\\n时光荏苒,疫情已经由放开状态继续演变为过去式状态,我们人类也从『闭关』走向了『自由』的社会生活状态。笔者作为社会中的普通一员,自然也不离外,在 2023 年初洋洋洒洒写了一篇在健康、读书与学习、时间管理和混合工作制几个方面的实践与理解(向内思变:当疫情给世界按下暂停键,去重构生活秩序),就开开心心地向前看,学着向外体验了。\\n那么问题来了,相比之前写出长文,笔者又是近一年没有向外输出软文了。因此,书接上文,本次继续新增一篇中短文,漫谈一下疫情后的向外体验。\\n在倒逼自己关注身体健康和时间管理后,虽然在体重和效率两个方面有一定的正向效果,但笔者在连续坚持落地拆解出来的目标过程中,有时\"},{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"健康\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"},{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}],\"时间\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"远程协作\":[{\"url\":\"/about/growth/inner-experience\",\"relativePath\":\"/40.关于/30.成长随笔/10.向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"frontmatter\":{\"date\":\"2023-01-08 10:23:50\",\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"description\":\"摘要总结:当世界按下暂停键,如何避免内耗?本文记录了笔者三年间的“自我重构”实验。文章摒弃了单纯的情绪宣泄,而是利用分解法、渐进明细和统计分析等工程思维,对健康饮食、知识体系、时间分配及远程协作进行了系统化改造。这是一份关于如何在无常的外部环境中,建立内在确定性秩序的行动指南。\",\"permalink\":\"/about/growth/inner-experience\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\",\"sticky\":1,\"top\":true,\"categories\":\"个人成长\",\"tags\":[\"健康\",\"时间\",\"悦读时光\",\"远程协作\",\"疫情\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"向内思变:当疫情给世界按下暂停键,去重构生活秩序\",\"date\":\"2023-01-08 10:23:50\",\"capture\":\"<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/growth/refactor_life.png\\\" alt=\\\"目标到践行思维流程示意图\\\" style=\\\"width: 100%; border-radius: 8px;\\\" />\\n 写在前面\\n自去年 7 月份迁移几篇旧文后,笔者就没有继续写软文了,想不到再次写文章时疫情政策已经调整,且初步实现了开放。那么问题来了,为什么要继续写文章呢?概括来讲,有两个方面的原因:\\n* 直接原因:疫情这三年,每个人都体验到了不同于之前的 “难”,也都有\"}],\"AI Coding\":[{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"Claude Code\":[{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"}],\"Agentic Engineering\":[{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"Developer Tools\":[{\"url\":\"/fullstack/ai-coding/claude-code-deep-dive\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/01.从 .claude 文件夹读懂 Claude Code\",\"frontmatter\":{\"date\":\"2026-03-15 22:27:51\",\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"tldr\":\"深入拆解 Claude Code 的 .claude 配置目录,掌握 Agentic Engineering 的协作机制。\",\"description\":\"全面解析 Claude Code 的 .claude 文件夹架构,涵盖配置体系、扩展机制及团队协作最佳实践。\",\"tags\":[\"AI Coding\",\"Claude Code\",\"Agentic Engineering\",\"Developer Tools\"],\"categories\":[\"全栈\",\"AI 编程系列\"],\"permalink\":\"/fullstack/ai-coding/claude-code-deep-dive\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从 .claude 文件夹读懂 Claude Code\",\"date\":\"2026-03-15 22:27:51\",\"capture\":\"1. 引言\\n在过去的两年里,AI 编程领域经历了剧烈的范式震荡。当开发者们还在争论 Vibe Coding 是否只是昙花一现时,AI 已经悄然完成了三次跃迁:从最初\\\"动动嘴皮子就能生成完整项目\\\"的魔法时刻,到编辑器里那个如影随形的智能补全伙伴,再到如今能够独立思考、规划并执行复杂工程任务的 Agentic Engineering——AI 不再只是工具,而是正在成为真正的\\\"自主工程师\\\"。\\n在这场变革中,Claude Code 无疑是最具代表性的工具,深入理解其内部机制,可以帮助我们更好地利用 Claude Code 的功能,提高开发效率。本文就从 `.claude` 文件夹开始,深入拆解 Cla\"}],\"LLM\":[{\"url\":\"/ai/overview\",\"relativePath\":\"/20.AI 学习与实践/00.AI 学习与实践全景一览\",\"frontmatter\":{\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"description\":\"全景式 AI 学习与实践知识库,系统沉淀 AI Agent 设计模式、大模型工程化落地、开源小项目及社区活动经验总结,持续迭代从理论到生产的完整方法论。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/overview\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"AI\",\"LLM\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 学习与实践全景\",\"date\":\"2026-03-15 16:00:00\",\"capture\":\"<!-- 精选专题 --\\n<script setup>\\nimport ArticleCardList from '@fragment/components/ArticleCardList.vue'\\nimport { aiLearningCategories } from '@fragment/data/ai-learning-data'\\n</script>\\n<ArticleCardList :categories=\\\"aiLearningCategories\\\" />\"}],\"CSS\":[{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"}],\"工程化\":[{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"}],\"tailwindcss\":[{\"url\":\"/fullstack/css-engineering\",\"relativePath\":\"/01.全栈/40.前端工程/02.CSS工程化\",\"frontmatter\":{\"date\":\"2026-03-10 22:05:50\",\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"description\":\"本文系统剖析主流 CSS 工程化方案的底层逻辑,提出“样式资产 ROI”评估模型,并针对 Vue/React 生态给出了面向 AI 时代的企业级混合架构选型建议。\",\"permalink\":\"/fullstack/css-engineering\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/full-stack/insight_stack.png\",\"top\":true,\"categories\":[\"全栈\"],\"tags\":[\"全栈\",\"CSS\",\"工程化\",\"tailwindcss\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从原子化到变体驱动:现代 CSS 工程化的架构演进与混合实践指南\",\"date\":\"2026-03-10 22:05:50\",\"capture\":\"1. 引言:主流 CSS 工程化方案有哪些?\\n在现代前端开发中,随着项目复杂度的急剧提升,原生 CSS 常常面临全局污染、复用困难、层级嵌套过深以及维护成本极高等问题。为了解决这些痛点,社区多年来不断探索,沉淀出了多种主流的 CSS 工程化方案。\\n除原生 CSS 之外,主流方案还包括预处理器、CSS-in-JS、CSS Module、Scoped CSS、原子化 CSS 等。BEM 作为一种基于命名约定来规避命名冲突的早期方案,在现代前端工程中已基本不再使用,因此本文不再对其展开详细分析。\\n> CSS 命名规范(BEM):通过严格的命名约定(如 Block__Element--Modif\"}],\"tutorial\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"},{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"},{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"SSE\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"HTTP Streaming\":[{\"url\":\"/fullstack/networking-sse-practice\",\"relativePath\":\"/01.全栈/60.网络与通信/02.流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"frontmatter\":{\"date\":\"2026-03-05 16:54:35\",\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"aliases\":[\"Server-Sent Events\",\"HTTP Streaming\"],\"tldr\":\"深入解析流式 HTTP 与 SSE 协议,提供从概念到生产实践的完整解决方案。\",\"description\":\"辨析流式 HTTP 与 SSE 协议的概念与层次关系,详解客户端与服务端实现方案,提供生产实践完整指南。\",\"tags\":[\"tutorial\",\"SSE\",\"HTTP Streaming\",\"全栈\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-sse-practice\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"流式 HTTP 与 SSE 协议:从概念辨析到生产实践\",\"date\":\"2026-03-05 16:54:35\",\"capture\":\"<script setup\\n import HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结: 针对开发者容易混淆流式 HTTP 与 SSE 协议的问题,从概念层次出发厘清二者本质区别与协作关系,指出流式 HTTP 是底层传输机制而 SSE 是应用层数据格式约定。文章依次介绍原生 EventSource API、fetch + ReadableStream 进阶方案、@microsoft/fetch-event-source 工业级实现等三种客户端方案,并以 Nes\"}],\"HTTP 轮询\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"},{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"退避轮询\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"}],\"长轮询\":[{\"url\":\"/fullstack/networking-polling-optimization\",\"relativePath\":\"/01.全栈/60.网络与通信/03.退避轮询与长轮询的原理、实战与选型决策\",\"frontmatter\":{\"date\":\"2026-02-25 22:10:48\",\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"tldr\":\"详解退避轮询与长轮询的实现原理,提供 HTTP 轮询优化策略与选型决策树。\",\"description\":\"深入剖析退避轮询与长轮询的核心机制,提供 TypeScript/NestJS 实战代码,并构建技术选型决策树与适用场景速查。\",\"tags\":[\"HTTP 轮询\",\"退避轮询\",\"长轮询\"],\"categories\":[\"全栈\",\"网络与通信\"],\"permalink\":\"/fullstack/networking-polling-optimization\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"HTTP 轮询优化指南:退避轮询与长轮询的原理、实战与选型决策\",\"date\":\"2026-02-25 22:10:48\",\"capture\":\"1. 引言\\n在现代 Web 开发中,WebSocket 和 Server-Sent Events (SSE) 常常被视为实时通信的银弹。然而,HTTP 轮询(Polling)作为最朴素的实时通信方案,非但没有退出历史舞台,反而在特定的复杂业务场景中大放异彩。\\n> 📖 如果你对 HTTP 轮询在整个 Web 通信协议体系中的定位尚不清晰,推荐先阅读 Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南,了解轮询与短连接、长连接、WebSocket、SSE 等方案的演进关系与适用边界,再结合本文深入实践。\\n在当前众多顶级的 AI AIGC 应用(如 Midjourne\"}],\"HTTP\":[{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"WebSocket\":[{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"Webhooks\":[{\"url\":\"/fullstack/networking-protocol-selection-guide\",\"relativePath\":\"/01.全栈/60.网络与通信/01.从 HTTP 到 WebSocket 的技术选型指南\",\"frontmatter\":{\"date\":\"2026-02-24 08:40:31\",\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"tldr\":\"深入分析五种 Web 通信协议,提供 AI 时代的技术选型指南与最佳实践。\",\"description\":\"深入剖析传统 HTTP、流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询的原理与特性,结合 AI 场景提供技术选型决策矩阵。\",\"categories\":[\"全栈\",\"网络与通信\"],\"tags\":[\"HTTP\",\"HTTP 轮询\",\"SSE\",\"WebSocket\",\"Webhooks\"],\"permalink\":\"/fullstack/networking-protocol-selection-guide\"},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Web 通信协议全景:从 HTTP 到 WebSocket 的技术选型指南\",\"date\":\"2026-02-24 08:40:31\",\"capture\":\"1. 引言\\nHTTP 是一种基于文本的通信协议,主要用于 Web 浏览器、移动应用、桌面应用等客户端和 Web 服务器之间的数据传输。传统 HTTP 采用同步的请求-响应模式:`请求 -> 等待 -> 完整响应`。这种方式虽能满足大多数场景,但在实时性要求较高的领域——如游戏、聊天、视频会议,以及 AI 时代的对话式应用——却显得力不从心。\\n为解决这一问题,业界发展出了多种实时 Web 通信方案。本文将围绕 流式 HTTP、SSE、WebSocket、Webhooks、HTTP 轮询 这五种主流技术,从原理、特性、适用场景出发,探讨它们在现代分布式架构中的选型策略与工程实践。\\n 2\"}],\"AI Agent\":[{\"url\":\"/ai/agent/overview\",\"relativePath\":\"/20.AI 学习与实践/02.Agent 系列/01.Agent概览与综述\",\"frontmatter\":{\"date\":\"2026-02-12 22:31:00\",\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"description\":\"摘要总结:AI 的进化正经历从“对话框”向“数字员工”的根本性跨越。本文是一篇关于 AI Agent 的全景深度综述,旨在解构智能体如何从简单的 Prompt 响应者,演变为具备自主目标拆解、长短期记忆与复杂环境交互能力的“执行者”。我们将深度拆解 Agent 的四大技术基石(规划、记忆、工具、行动),并详细剖析从通用型 Agent 到多智能体协作(MAS)、再到迈向 Agent OS 时代的 OpenClaw 等五大演进形态。不仅探讨了技术架构的实现,更揭示了软件工程从“以人为中心”向“以 AI 为中心”的范式革命——在 Agent 驱动的新纪元,核心竞争力将不再是代码量,而是调度 AI 闭环解决业务问题的能力。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_1.png\",\"permalink\":\"/ai/agent/overview\",\"top\":true,\"categories\":[\"ai-practice\"],\"tags\":[\"AI Agent\",\"Agent\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从提示词到数字员工:AI Agent 深度全景综述\",\"date\":\"2026-02-12 22:31:00\",\"capture\":\"1. 什么是 Agent?——从“工具”到“实体”的进化\\n> 核心逻辑:现代 Agent 的本质是 \\\"LLM (大脑) + 规划与记忆 (小脑) + 工具调用 (手脚)\\\"。LLM 的海量知识储备让 Agent 能够精准理解复杂指令,并将其转化为实际行动。\\n在 AI 领域,Agent(智能体) 并非一个新概念,但 LLM(大语言模型)的爆发赋予了它真正的“灵魂”。简单来说,Agent 是一种能够感知环境、自主决策并执行任务的智能实体。\\n如果说传统的 AI 是一个“问答机”,那么 Agent 就是一个“执行者”。它具备以下四大核心特质:\\n* 自主性 (Autonomy): 无须时刻盯着,设定\"}],\"react\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"component-design\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"state-management\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"ai-augmented\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"specification-driven\":[{\"url\":\"/fullstack/react-design-philosophy-ai-augmented\",\"relativePath\":\"/01.全栈/40.前端工程/01.React 设计哲学:AI 协作时代的组件化开发实践指南\",\"frontmatter\":{\"date\":\"2026-02-10 23:33:19\",\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"tldr\":\"当 AI 承接了 30% 的编码执行时,开发者需通过“规格驱动(SDD)”重夺 70% 的设计主权:从自治组件划分到单向数据流拓扑的深度推演。\",\"description\":\"本文探讨在 AI 增强开发背景下,如何重塑 React 组件设计原则。涵盖 SRP 职责划分、静态版本基线、最小状态(Derived Data)推导以及 SDD 人机协作模式的工程落地。\",\"tags\":[\"tutorial\",\"react\",\"component-design\",\"state-management\",\"ai-augmented\",\"specification-driven\"],\"permalink\":\"/fullstack/react-design-philosophy-ai-augmented\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"React 设计哲学:AI 协作时代的组件化开发实践指南\",\"date\":\"2026-02-10 23:33:19\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n 1. 引言\\n在软件工程中,约 70% 的时间应投入于架构设计、需求拆解与接口语义推敲,仅 30% 用于实际编码。进入 AI 协作时代后,这一比例依然坚如磐石——开发者必须先完成深度思考,将“清晰的问题规格(Specification)”交给 AI,AI 才能输出高质量代码。<HighLightText type=\\\"note\\\" bold>AI 提升的是 30% 编码阶段的执行力,而非取\"}],\"资源推荐\":[{\"url\":\"/fullstack/full-stack-resources\",\"relativePath\":\"/01.全栈/90.工具与资源推荐/90.全栈技术资源推荐\",\"frontmatter\":{\"date\":\"2026-02-06 15:58:53\",\"title\":\"全栈技术资源推荐\",\"description\":\"摘要总结:本文系统梳理了现代全栈开发的完整技术图谱与演进范式,为开发者提供了一站式的技术选型指南。文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/Nuxt 同构元框架与 NestJS 企业级 Node 服务的最佳适用场景。最后,辅以 Vercel 等现代边缘部署平台及丰富的开源社区学习资源。\",\"permalink\":\"/fullstack/full-stack-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"全栈\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"全栈技术资源推荐\",\"date\":\"2026-02-06 15:58:53\",\"capture\":\"> - 文章从基石出发,覆盖 Web 核心语言(JS/TS) 与 主流 UI 框架(React/Vue/Svelte),并推荐以 Tailwind CSS 和 shadcn/ui 为代表的现代样式与组件原语。\\n> - 在核心业务逻辑层,深度对比了轻量化状态管理方案(首推 Zustand/Jotai),并重点解析了数据交互的三大现代架构范式:从基础 Axios 到 React Query 状态调度,再到 tRPC 和 GraphQL 带来的全栈类型安全与多端聚合。\\n> - 在工程化与服务端模块,文章全面拥抱 Vite、Rsbuild 等极速构建工具,并剖析了 Next.js/N\"},{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"},{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"},{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/growth/books\",\"relativePath\":\"/30.悦读时光/01.好书推荐\",\"frontmatter\":{\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"description\":\"读书心得、推荐书籍和阅读技巧\",\"categories\":[\"growth\"],\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/books_reading_bg.png\",\"permalink\":\"/growth/books\",\"tags\":[\"悦读时光\",\"资源推荐\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好书推荐\",\"date\":\"2024-01-01 16:00:00\",\"capture\":\"<script setup\\n import BookRecommend from './@fragment/BookRecommend.vue'\\n import {aiBooks, productSenseBooks, businessBooks, efficiencyBooks, growthBooks, humanSocialBooks, healthBooks} from './@fragment/recommends-data.ts'\\n</script>\\n 1. AI 与数学思维\\n> 在大模型发展日新月异的今天,理解 AI 本质上是在升级我们资深的“认知操\"}],\"LLM API\":[{\"url\":\"/ai/llm-api-resources\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/11. LLM API 平台推荐与选型指南\",\"frontmatter\":{\"date\":\"2026-01-06 15:58:53\",\"title\":\"LLM API 平台推荐与选型指南\",\"description\":\"摘要总结:截至 2026 年,LLM API 服务已形成\\\"官方直连 + 第三方聚合\\\"的双轨格局,模型能力、定价、合规性与接入便利性差异显著。本文从选型前提问出发,系统梳理国际与国内主流官方 API 平台,以及 OpenRouter、硅基流动等第三方聚合平台的核心特点,并提供基于场景的决策框架,帮助开发者和产品团队快速锁定最适合自己的方案。\",\"permalink\":\"/ai/llm-api-resources\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"LLM API\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"LLM API 平台推荐与选型指南\",\"date\":\"2026-01-06 15:58:53\",\"capture\":\"1. 选模型前,先想清楚这几件事\\n在对比具体平台之前,可从以下四个维度梳理自身诉求,避免\\\"眼花缭乱后随便选一个\\\":\\n| 维度 | 关键问题 | 影响决策 |\\n|:-----|:--------|:--------|\\n| 任务类型 | 是通用对话、代码生成、长文档分析,还是多模态理解? | 不同模型在垂直能力上差距悬殊 |\\n| 成本预算 | 每月调用量级?能否接受海外结算与汇率风险? | 国产模型 Token 价格通常低 3~10 倍 |\\n| 合规与部署 | 数据能否出境?能否使用海外服务?是否需要私有化部署? | 涉及政务/金融/医疗场景必须考虑 |\\n| 网络环境 | 开发/部署环境能否稳定访\"}],\"CSR\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"1. 引言\\n一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:\\n\\\"构建 → 部署 → 请求 → 渲染\\\",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择。\\n1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。\\n2、部署:将构建产物部署到服务器,使其可以通过网络访问。\\n3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。\\n4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。\\n上述流程中,\\\"构建\\\"和\\\"渲染\\\"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题—\"}],\"SSR\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"1. 引言\\n一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:\\n\\\"构建 → 部署 → 请求 → 渲染\\\",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择。\\n1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。\\n2、部署:将构建产物部署到服务器,使其可以通过网络访问。\\n3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。\\n4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。\\n上述流程中,\\\"构建\\\"和\\\"渲染\\\"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题—\"}],\"SSG\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"1. 引言\\n一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:\\n\\\"构建 → 部署 → 请求 → 渲染\\\",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择。\\n1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。\\n2、部署:将构建产物部署到服务器,使其可以通过网络访问。\\n3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。\\n4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。\\n上述流程中,\\\"构建\\\"和\\\"渲染\\\"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题—\"}],\"ISR\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"1. 引言\\n一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:\\n\\\"构建 → 部署 → 请求 → 渲染\\\",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择。\\n1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。\\n2、部署:将构建产物部署到服务器,使其可以通过网络访问。\\n3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。\\n4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。\\n上述流程中,\\\"构建\\\"和\\\"渲染\\\"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题—\"}],\"PPR\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"1. 引言\\n一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:\\n\\\"构建 → 部署 → 请求 → 渲染\\\",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择。\\n1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。\\n2、部署:将构建产物部署到服务器,使其可以通过网络访问。\\n3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。\\n4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。\\n上述流程中,\\\"构建\\\"和\\\"渲染\\\"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题—\"}],\"VitePress\":[{\"url\":\"/fullstack/frontend-rendering-scheme\",\"relativePath\":\"/01.全栈/40.前端工程/04.前端渲染方案选型指南:从 CSR 到 PPR\",\"frontmatter\":{\"date\":\"2025-12-20 07:05:50\",\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"tldr\":\"深入解析 CSR、SSR、SSG、ISR、PPR 五种渲染方案的原理与选型策略,附 VitePress 实践案例。\",\"description\":\"系统解析前端五种渲染方案(CSR/SSR/SSG/ISR/PPR)的核心原理、优缺点及适用场景,提供选型决策树与 VitePress 实践案例。\",\"category\":[\"全栈\"],\"tags\":[\"CSR\",\"SSR\",\"SSG\",\"ISR\",\"PPR\",\"VitePress\"],\"permalink\":\"/fullstack/frontend-rendering-scheme\",\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"前端渲染方案选型指南:从 CSR 到 PPR\",\"date\":\"2025-12-20 07:05:50\",\"capture\":\"1. 引言\\n一个 Web 网站(对应用也适用)从源代码到最终呈现在用户眼前,大致经历以下四个阶段:\\n\\\"构建 → 部署 → 请求 → 渲染\\\",不同方案的本质差异 = 构建阶段的时机选择 × 渲染阶段的位置选择。\\n1、构建:将源代码经过编译、转译等构建步骤,生成可部署的产物。\\n2、部署:将构建产物部署到服务器,使其可以通过网络访问。\\n3、请求:用户通过浏览器输入 URL 发起请求,服务器接收并处理该请求。\\n4、渲染:客户端(浏览器)接收服务器返回的内容,将其渲染为可视化页面。\\n上述流程中,\\\"构建\\\"和\\\"渲染\\\"两个阶段存在多种技术选择,不同的选择组合便构成了不同的渲染方案,这也是本文要讨论的核心问题—\"}],\"Vibe Coding\":[{\"url\":\"/fullstack/ai-coding/resources\",\"relativePath\":\"/01.全栈/10.AI 编程实践指南/00.AI编程工具与资源\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"AI 编程工具与资源推荐\",\"description\":\"摘要总结:本文深度解析了 AI 驱动编程的三大演进范式:Vibe Coding(自然语言零门槛构建)、AI IDE(编辑器深度辅助提效)及 Agentic Engineering(自主工程师执行任务)。通过横向对比 Bolt.new、Cursor、Claude Code 等前沿工具,文章勾勒出一条从“快速原型”到“高效协同”再到“自主交付”的进阶路径。核心旨在指导用户利用 AI 工具矩阵打破技术边界,实现从创意描述到工业级交付的生产力飞跃,重塑软件开发全生命周期。\",\"permalink\":\"/fullstack/ai-coding/resources\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"全栈\",\"AI 编程系列\"],\"tags\":[\"资源推荐\",\"AI\",\"AI Coding\",\"Vibe Coding\",\"Agentic Engineering\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI 编程工具与资源推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. 三种编程范式速览\\n| 范式 | 一句话描述 | 你的角色 |\\n|:-----|:---------|:--------|\\n| Vibe Coding | 用自然语言描述需求,AI 直接生成可运行的完整项目 | 描述需求,让 AI 写代码(```新手友好```) |\\n| AI IDE | 在编辑器里引入 AI 辅助,边写边补全、边问边改 | 主导开发,让 AI 做副驾驶(```更多控制```) |\\n| Agentic Engineering | AI 作为\\\"自主工程师\\\",接收任务后自动规划并执行全套代码工作流 | 提任务、审结果,让 AI 执行(```极致提效```) |\\n新手路线建议:先\"}],\"AI 助手\":[{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"}],\"AI 搜索\":[{\"url\":\"/ai/tools-assistant\",\"relativePath\":\"/20.AI 学习与实践/90.资源与工具推荐/01.好用的 AI 助手与工作站推荐\",\"frontmatter\":{\"date\":\"2025-11-25 00:52:28\",\"title\":\"好用的 AI 助手与工作站推荐\",\"description\":\"摘要总结:为便于高效利用 AI 工具提升学习、搜索和创作效率,本文系统整理了主流的 AI 助手与内容创作平台相关资源。内容分为“AI 助手”(如 ChatGPT、Claude、Gemini 等对话式助手)和“内容创作平台”(如写作、绘画等领域的 AI 工具与平台),且标注了其核心能力、适合场景,以及特色优势。\",\"permalink\":\"/ai/tools-assistant\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/source_sites_bg.png\",\"categories\":[\"资源推荐\"],\"tags\":[\"资源推荐\",\"AI\",\"AI 助手\",\"AI 搜索\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"好用的 AI 助手与工作站推荐\",\"date\":\"2025-11-25 00:52:28\",\"capture\":\"1. AI 助手\\n> 选择建议: 英文为主 → 优先 ChatGPT / Claude / Gemini;中文为主 → 优先 Kimi / DeepSeek / 通义千问;需要联网实时信息 → Gemini / Grok;需要分析长文档 → Claude / Kimi;追求低成本开源部署 → DeepSeek。\\n>\\n> 注:目前国外模型(如 ChatGPT、Claude、Gemini 等)在英文处理、多模态能力、插件生态和 API 丰富性等方面,整体上依然优于国内模型,适合对英文创作、多语言沟通、复杂推理、代码助手等场景有更高要求的用户。不过,国内模型在中文理解、本地化、合规\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"产品 Sense\":[{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"},{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"},{\"url\":\"/ai/agent/math-bot\",\"relativePath\":\"/20.AI 学习与实践/04.社区活动与实践小项目/60.数学小助手\",\"frontmatter\":{\"date\":\"2024-06-14 22:00:00\",\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"description\":\"摘要总结:AI 时代,写好代码只是及格线。在一次极限挑战赛中,我们通过对 K12 赛道用户痛点的精准“视角切换”,打造出一款授人以渔的“数学辅导导师”并斩获大奖。本文复盘了 Agent 搭建背后的核心 SOP 设计逻辑:技术终究要回归对真实人性的体察与关怀。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/llm_learning_bg_2.png\",\"permalink\":\"/ai/agent/math-bot\",\"categories\":[\"AI 学习与实践\"],\"tags\":[\"Agent\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"一次由 Product Sense 驱动的 Agent 极限实践\",\"date\":\"2024-06-14 22:00:00\",\"capture\":\"在刚刚过去的周末,我和好友参加了一场由千帆 Agent 举办的线下社区活动。这是一场充满极客精神的“极限挑战”——我们需要在极其有限的时间内,从零开始构思、搭建并现场展示一个完整的 Agent 应用。\\n令人惊喜的是,我们不仅顺利完成了极限开发,最终还斩获了全场的「最佳应用奖」。\\n复盘这次短暂却高密度的开发体验,最大的感触是:在 AI 时代,单纯的工程实现已经不再是唯一的壁垒,真正让应用脱颖而出的,是对真实业务场景的洞察力。当 (Engineering + Product) × AI 的飞轮开始转动时,技术才能真正转化为解决问题的利器。\\n以下是关于这次“K12 数学小助手” Agent 搭建的实\"},{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"商业化\":[{\"url\":\"/product-sense/small-rule-learn\",\"relativePath\":\"/10.产品 Sense/04.产品创造与商业化/30.《小而美:持续盈利的经营法则》读后感\",\"frontmatter\":{\"date\":\"2025-11-24 21:50:00\",\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"description\":\"摘要总结:在很长一段时间里,科技互联网行业的叙事都被“不惜一切代价实现超线性增长”所主导。仿佛只有拿到巨额融资、疯狂招人、成为估值破百亿的庞然大物,才算得上是成功的创业。然而,读完萨希尔·拉文吉亚的《小而美:持续盈利的经营法则》后,笔者获得了一种截然不同的商业视角:企业存在的首要目的不是为了融资和扩张,而是为了通过解决问题来获得持续的盈利。 本文结合书中的核心论点与自身的研发视角,把将这本书背后的经营逻辑与产品哲学梳理为几个核心层面的思考。\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/small-rule-learn\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"商业化\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"放弃增长执念,为什么“小而美”才是可持续之路\",\"date\":\"2025-11-24 21:50:00\",\"capture\":\"书名:《小而美:持续盈利的经营法则》\\n作者:[美] 萨希尔·拉文吉亚\\n核心标签:极简创业|社区本位|持续盈利|创作者经济\\n一句话简评:在盲目崇拜规模扩张的商业语境下,这是一份写给独立创作者与开发者的清醒指南,教会我们如何用最少的资源,解决真实的痛点,并获得长久的自由。\\n更多书籍推荐信息可参考:产品 Sense 与商业化\\n 1. 社区先行:从“我是谁”到“我能为谁解决问题”\\n传统商业逻辑往往是先构思一个宏大的点子,闭门造车打磨产品,最后再砸钱去市场上寻找目标用户。而本书提出了一个颠覆性的反向路径:社区 $\\\\rightarrow$ 问题 $\\\\rightarrow$ 流程 $\\\\rightarrow$\"}],\"SWR\":[{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"}],\"TanStack Query\":[{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"}],\"前端工程\":[{\"url\":\"/fullstack/server-state-management\",\"relativePath\":\"/01.全栈/40.前端工程/11.React 服务端状态管理的范式转移与选型深度博弈\",\"frontmatter\":{\"date\":\"2025-11-15 09:20:23\",\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"aliases\":[\"SWR\",\"TanStack Query\",\"React\",\"服务端状态\",\"乐观更新\",\"工程化\"],\"tldr\":\"深入解析 SWR 的极简协议与 TanStack Query 的精密状态机。通过对比缓存失效、乐观更新等核心场景,为高复杂度 B 端应用与轻量级项目提供清晰的架构选型模型。\",\"description\":\"深度对比 React 生态中 SWR 与 TanStack Query 两大方案。从 stale-while-revalidate 机制到异步状态机架构,涵盖依赖查询、数据转换及架构级乐观更新实战。旨在帮助开发者在复杂业务中构建确定性的服务端状态基座。\",\"permalink\":\"/fullstack/server-state-management\",\"tags\":[\"SWR\",\"TanStack Query\",\"前端工程\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"不止于 Fetch:React 服务端状态管理的范式转移与选型深度博弈\",\"date\":\"2025-11-15 09:20:23\",\"capture\":\"1. 引言\\n在现代前端工程中,状态可严格区分为 UI 状态(UI State) 与 服务端状态(Server State) 两类。对于 UI 状态的管理,开发者已较为熟悉,通常可借助 `useState`、`useEffect` 等 Hooks,或 `zustand`、`jotai` 等状态管理库来实现。然而,服务端状态的管理往往缺乏统一且高效的解决方案,开发者通常需要自行实现。\\n在传统的数据获取流程中,我们一般使用 `fetch` 或 `axios` 向后端或 REST API 发送 HTTP 请求,随后手动将数据获取逻辑与前端业务逻辑及 UI 状态管理进行整合,以完成数据处理并驱动界面更新\"}],\"jamstack\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"frontend-architecture\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"next.js\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"static-site-generator\":[{\"url\":\"/fullstack/jamstack\",\"relativePath\":\"/01.全栈/40.前端工程/03.JAMStack 梳理与实践指南\",\"frontmatter\":{\"date\":\"2025-11-14 22:33:39\",\"title\":\"JAMStack 梳理与实践指南\",\"aliases\":[\"静态站点生成器\",\"SSG\"],\"tldr\":\"预渲染静态页面 + 动态 API,CDN 分发全球,替代传统动态网站的开发部署范式\",\"description\":\"从核心概念、工具链选型(Next.js/Vercel/Supabase/Contentful)到从 0 搭建博客的完整实践,覆盖 JAMStack 适用与不适用场景,帮助判断何时选用该架构。\",\"permalink\":\"/fullstack/jamstack\",\"tags\":[\"tutorial\",\"jamstack\",\"frontend-architecture\",\"next.js\",\"static-site-generator\"],\"categories\":[\"全栈\",\"前端工程\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JAMStack 梳理与实践指南\",\"date\":\"2025-11-14 22:33:39\",\"capture\":\"> \\n> 其核心机制是在构建时将页面预渲染为静态 HTML/CSS/JS,部署至 CDN 供用户就近加载,仅在需要动态数据时通过 JavaScript 调用 API 获取。相较于传统动态网站,JAMStack 在性能、可靠性、扩展性、安全性及运维成本上具有显著优势。\\n> \\n> 本文梳理了主流构建工具(Gatsby、Next.js、Nuxt.js、11ty)、静态托管平台(Vercel、Netlify、Cloudflare Pages)、API/BaaS 服务(Supabase、Firebase、Auth0)及无头 CMS(Contentful、Sanity、Strapi\"}],\"系统洞察力\":[{\"url\":\"/product-sense/insight-model\",\"relativePath\":\"/10.产品 Sense/05.方法论/40.洞察力模型\",\"frontmatter\":{\"date\":\"2025-11-14 16:00:00\",\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"description\":\"摘要总结:无论是做产品、搞技术,还是应对日常工作中的各种挑战,你是否遇到过这样的困境:明明按经验行事,却屡屡踩坑;刚解决表面问题,隐患又卷土重来。问题未必出在努力程度,而在于我们只盯着表象,却忽略了背后真正起作用的系统,没有看懂藏在背后的系统。为什么同样是解决问题,有人只能“头痛医头”,有人却能直击本质?这篇文章将用通俗易懂的方式,带你拆解一套实用的洞察力模型,让我们学会透过现象抓住本质,从根源上解决问题。\",\"permalink\":\"/product-sense/insight-model\",\"categories\":[\"产品 Sense\"],\"tags\":[\"产品 Sense\",\"系统洞察力\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"洞察力模型:如何看透产品与技术背后的系统逻辑?\",\"date\":\"2025-11-14 16:00:00\",\"capture\":\"1. 表象背后藏着决定一切的“系统黑盒”\\n我们在日常开发或产品设计中,总是被各种“表象”包围:DAU 突然下降了、线上出现了一个偶现的 Bug、某个功能的转化率不及预期。我们习惯了盯着这些看得见的结果找原因,却忽略了一个核心真相:每一个表象背后,其实都隐藏着一个运转复杂的“黑盒子”,正是这个黑盒子决定了事物发展的客观规律。我们可以把这个黑盒子,叫做“系统”。\\n<img src=\\\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/product/system_tips.png\\\" style=\\\"width: 1\"}],\"信息筛选\":[{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"个人成长\":[{\"url\":\"/growth/distinguish-useful-information\",\"relativePath\":\"/30.悦读时光/21.如何甄别真正有用的信息\",\"frontmatter\":{\"date\":\"2025-11-10 12:52:28\",\"title\":\"如何甄别真正有用的信息\",\"description\":\"摘要总结:在信息高度透明的时代,浅层信息差已被彻底抹平,信息本身的价值不断稀释。人与人的核心差距不再是获取信息的渠道,而是高信噪比信息的甄别能力、深度思考能力与落地执行力,唯有以思考校验信息、以执行验证价值,形成“信息-判断-实践-反馈”的思考与执行闭环,才能突破信息壁垒、创造真正价值。\",\"permalink\":\"/growth/distinguish-useful-information\",\"categories\":[\"资源推荐\"],\"tags\":[\"信息筛选\",\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"如何甄别真正有用的信息\",\"date\":\"2025-11-10 12:52:28\",\"capture\":\"在互联网技术普及的当下,信息已从“稀缺资源”转变为“泛滥资源”。过去依赖地域差、稀缺性的浅表层信息差逐渐被抹平,开发者通过网络可轻松获取各类技术文档、行业动态、赚钱模式,但真正能将信息转化为价值的仍是少数人。核心矛盾已从“获取信息”转变为“驾驭信息”——信息本身的价值弱化,而信息解读能力、行动执行力、筛选甄别力成为拉开差距的关键。\\n 1. 打破“信息差”的系统性错觉\\n过去,由于地域限制和传播介质的稀缺,赚钱或成功的模式往往是粗放的,建立在浅表层的“信息不对称”上,但随着技术的演进,这种低维度的信息差正在被迅速抹平。人们经常陷入“赚不到钱/抓不住机会是因为缺少信息差”的认知偏差,但本质问题在于“\"}],\"typescript\":[{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"},{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"}],\"generics\":[{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"}],\"type-system\":[{\"url\":\"/fullstack/typescript-generic-types\",\"relativePath\":\"/01.全栈/80.全栈基础素养/10.聊一聊 Typescript 泛型\",\"frontmatter\":{\"date\":\"2025-08-20 22:51:27\",\"title\":\"聊一聊 TypeScript 中的泛型\",\"tldr\":\"泛型将类型作为参数,使代码在多种类型上安全运行,是 TypeScript 类型抽象的核心特性。\",\"description\":\"本文系统解析 TypeScript 泛型的核心概念与工作机制,对比泛型与 any 类型的差异,涵盖泛型函数、接口、类、类型别名的实践用法,以及基本类型约束、接口约束、多重约束、keyof 约束等高阶技巧与最佳实践。\",\"permalink\":\"/fullstack/typescript-generic-types\",\"tags\":[\"tutorial\",\"typescript\",\"generics\",\"type-system\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"聊一聊 TypeScript 中的泛型\",\"date\":\"2025-08-20 22:51:27\",\"capture\":\"1. 泛型的基本概念和作用\\n 1.1 核心定义\\n泛型(Generics) 是 TypeScript 中一种强大的类型系统特性,允许定义类型参数化的组件,使代码能够在多种类型上安全运行,同时保持类型检查。泛型的核心思想是将类型作为参数传递给函数、接口或类,实现\\\"编写一次,复用多次\\\"的效果。\\n 1.2 泛型与 any 类型的对比\\n| 特性 | 泛型 | any 类型 |\\n|------|------|----------|\\n| 类型安全 | ✅ 编译时进行类型检查 | ❌ 完全失去类型检查 |\\n| 代码复用 | ✅ 支持多种类型复用 | ✅ 支持多种类型,但失去类型信息 |\\n| 类型推断 | ✅ \"}],\"compilation\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"tooling\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"eslint\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"jest\":[{\"url\":\"/fullstack/typescript-compilation-debugging-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/01.编译与调试 TypeScript 项目指南\",\"frontmatter\":{\"date\":\"2025-08-12 22:47:47\",\"title\":\"TypeScript 编译与调试完全指南\",\"tldr\":\"TypeScript 完善的编译体系与调试工具链,是构建高质量应用的基石。\",\"description\":\"深入解析 TypeScript 编译工具链与调试体系,涵盖 tsconfig.json 核心配置、Monorepo 项目配置(extends/references)、source map 调试、ESLint 与 Jest 单元测试等完整实践。\",\"permalink\":\"/fullstack/typescript-compilation-debugging-guide\",\"tags\":[\"tutorial\",\"typescript\",\"compilation\",\"tooling\",\"eslint\",\"jest\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"TypeScript 编译与调试完全指南\",\"date\":\"2025-08-12 22:47:47\",\"capture\":\"编写代码只是开发工作的起点,真正决定项目质量的是后续的编译与调试环节。TypeScript 作为 JavaScript 的静态类型超集,不仅带来了类型安全,更提供了强大的编译工具和调试能力,让我们能够更高效地构建和维护可靠的应用程序。\\n本文将对 TypeScript 项目的编译与调试进行梳理,包括编译工具 TSC 的使用、编译选项的配置、调试工具的使用等。\\n 1. TypeScript 编译配置与 tsconfig.json\\nTSC(TypeScript Compiler)是 TypeScript 官方提供的编译工具,负责将 TypeScript 代码(`.ts` 或 `.tsx`)转换为 J\"}],\"成长\":[{\"url\":\"/product-sense/ai-native-composite-talents\",\"relativePath\":\"/10.产品 Sense/02.新 T 型人/20.读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"frontmatter\":{\"date\":\"2024-06-15 22:23:00\",\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"description\":\"摘要总结:本文结合保罗・格雷厄姆《How to Do Great Work》核心观点,探讨 AI 原生时代复合型人才的核心特质。AI 让基础执行能力快速贬值,人才的核心壁垒不再是解决问题,而是提出优质问题、培养非共识品味。同时需坚守智力诚实,拥有打破常规的创新勇气,借助 AI 放大个人成长杠杆,以小切口实践实现指数级成长。人类独有的好奇心,是突破 AI 平庸、取得杰出成就的最终底气。\",\"coverImg\":\"/img/cover/product_sense_bg.png\",\"permalink\":\"/product-sense/ai-native-composite-talents\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI\",\"成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"读后感:AI 原生时代的复合型人才,究竟需要怎样的特质?\",\"date\":\"2024-06-15 22:23:00\",\"capture\":\"> \\n> 原文地址:https://paulgraham.com/greatwork.html\\n> \\n> 原文作者:Paul Graham(保罗·格雷厄姆),硅谷顶级孵化器 Y Combinator 创始人,被誉为“硅谷创业教父”,也是经典技术哲学著作《黑客与画家》的作者。\\n> \\n> 文章背景:原文是保罗·格雷厄姆之前准备了半年之久的重磅长文,他试图讲明白一个适用于每个人的主题——如何做成「大事」(great work)。通读全文,你会发现,这是一篇非常实用的工作指南,并且其中的许多内容,都与AI原生时代的复合型人才所需要具备的特质非常一致。\\n 1. 引言:\"}],\"ESM\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"DDD\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"}],\"微前端\":[{\"url\":\"/fullstack/module-programming-practice-guide\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/0.overview\",\"frontmatter\":{\"date\":\"2024-05-18 22:49:57\",\"title\":\"模块化编程实践指南\",\"tldr\":\"从 ES Modules 到大型项目分层架构与工程化实践,构建全栈模块化知识体系。\",\"description\":\"系统梳理 JavaScript 模块化演进(IIFE→CJS→ESM)、TypeScript 类型增强、分层架构与 DDD 实践。\",\"permalink\":\"/fullstack/module-programming-practice-guide\",\"tags\":[\"tutorial\",\"ESM\",\"DDD\",\"微前端\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程实践指南\",\"date\":\"2024-05-18 22:49:57\",\"capture\":\"1. 引言\\n模块化编程是现代 JavaScript/TypeScript 开发的核心原则,它通过将复杂系统拆分为独立可复用的模块,降低系统复杂性并提高可维护性与可复用性。因此,我们通过系列文章详细介绍了模块化的基础概念、演进历程、不同规范的深度解析、TypeScript模块化增强、ES Modules 核心语法与实践、模块化编程原则与最佳实践、前端工程化中的模块化、Node.js中的模块化实践、大型项目中的模块化设计、模块化与代码维护以及未来发展趋势。\\n前面的系列文章主要有:\\n- 模块化编程编程初体验与基础介绍\\n- JavaScript 模块化规范全景图:从 CJS 到 ESM\\n- 回归标准,\"}],\"concept\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"},{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"},{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"},{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"node.js\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"commonjs\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"esm\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"},{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"monorepo\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"layered-architecture\":[{\"url\":\"/fullstack/nodejs-module-programming-summary\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/6.解析 NodeJS 中的模块化\",\"frontmatter\":{\"date\":\"2024-05-17 23:33:09\",\"title\":\"Node.js 模块化编程梳理与总结\",\"tldr\":\"Node.js CJS 与 ESM 双模共存:模块加载机制与分层架构实践。\",\"description\":\"解析 Node.js 中 CommonJS 与 ES Modules 的双模共存策略,涵盖模块加载优先级、缓存机制、package.json exports 条件导出及 Monorepo 架构实践。\",\"permalink\":\"/fullstack/nodejs-module-programming-summary\",\"abstract\":\"Node.js 模块化经历了从 CommonJS 独霸天下到 ES Modules 全面接入的范式转移。共存策略通过 .mjs/.cjs 后缀和 package.json type 字段控制两种规范的边界;ESM 可直接 import CJS(自动包装为默认导出),但 CJS 无法 require ESM 必须使用动态 import。模块加载遵循核心模块优先、文件模块、目录模块(index.js/package.json)、node_modules 逐级查找的优先级;require.cache 实现模块缓存,清除缓存(delete require.cache[path])是热更新工具的核心操作。package.json exports 字段支持条件导出(import/require 返回不同入口)。pnpm workspaces 凭借硬链接机制成为现代 Monorepo 首选。后端分层架构(API/Service/Repository)实现关注点分离,换数据库只需改 Repository 层。\",\"tags\":[\"concept\",\"node.js\",\"commonjs\",\"esm\",\"monorepo\",\"layered-architecture\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"Node.js 模块化编程梳理与总结\",\"date\":\"2024-05-17 23:33:09\",\"capture\":\"如果说浏览器端的模块化是为了\\\"按需加载\\\",那么 Node.js 的模块化则是为了\\\"代码组织\\\"。作为将 JavaScript 带入服务器端的先驱,Node.js 经历了从 CommonJS (CJS) 独霸天下到 ES Modules (ESM) 全面接入的范式转移。\\n在服务器端,模块化不仅仅是为了拆分代码,更是为了构建清晰的项目结构、管理依赖关系,以及实现代码的复用与维护。\\n 1. CommonJS 与 ES Modules 双模共存\\n在现代 Node.js 开发中,我们经常面临两种规范交织的情况。这不仅是文件后缀的改变,更是同步与异步加载逻辑的博弈。\\n共存策略:\\n1. 后缀决定论:`.mjs\"}],\"solid-principles\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"code-organization\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"best-practices\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"naming-conventions\":[{\"url\":\"/fullstack/module-programming-principles-best-practices\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/5.模块化编程原则与最佳实践\",\"frontmatter\":{\"date\":\"2024-05-17 22:30:50\",\"title\":\"模块化编程原则梳理与总结\",\"tldr\":\"掌握高内聚低耦合原则:模块化编程的设计准则与粒度控制。\",\"description\":\"系统梳理模块化编程的六大核心原则:单一职责、高内聚低耦合、粒度设计、命名规范及模块版本管理,附详细的工程实践建议与避坑指南。\",\"permalink\":\"/fullstack/module-programming-principles-best-practices\",\"abstract\":\"如果说掌握模块化语法是术,那么理解其背后的设计原则就是道。单一职责原则强调模块只应有一个被改变的原因,避免 God Object 反模式。高内聚低耦合是衡量模块质量的终极标准——模块内部元素联系紧密,模块之间依赖关系尽可能简单。粒度设计要求单个模块保持在 100-500 行之间,功能能用一句话清晰描述,出现多分支复杂逻辑时通常是拆分信号。命名规范统一团队沟通语境(kebab-case 文件名、camelCase 方法名、PascalCase 类名)。模块版本管理遵循 SemVer 语义化版本,为公共模块的维护者与使用者建立契约。强调清晰的模块边界是 AI 辅助编程时代 AI 准确理解代码的前提。\",\"tags\":[\"concept\",\"solid-principles\",\"code-organization\",\"best-practices\",\"naming-conventions\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程原则梳理与总结\",\"date\":\"2024-05-17 22:30:50\",\"capture\":\"1. 单一职责原则\\n核心思想:一个模块应当有且只有一个被改变的原因。\\n模块不应成为功能的“杂货铺”。当一个模块承担了太多不相关的业务逻辑时,它的复杂度会呈指数级上升,任何微小的改动都可能引发意想不到的连锁反应。\\n代码演示:\\n```javascript\\n// ✅ 推荐:职责拆分明确\\n// user-service.js - 仅处理用户数据的 CRUD\\nexport const getUser = async (id) => { /* ... */ };\\n// auth-provider.js - 仅处理鉴权状态与逻辑\\nexport const login = async (credenti\"}],\"tsconfig\":[{\"url\":\"/fullstack/typescript-module-programming-enhancement\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/4.Typescript 对模块化编程的增强\",\"frontmatter\":{\"date\":\"2024-05-16 21:27:36\",\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"tldr\":\"TypeScript 将模块依赖提升为编译时类型契约,从 import type 到声明文件。\",\"description\":\"系统讲解 TypeScript 对 ES Modules 的类型增强,涵盖 import type 运行时优化、接口契约、声明文件 .d.ts 及 tsconfig 模块化配置。\",\"permalink\":\"/fullstack/typescript-module-programming-enhancement\",\"tags\":[\"concept\",\"全栈\",\"typescript\",\"tsconfig\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"从逻辑隔离到类型契约:TypeScript 对模块化编程的增强\",\"date\":\"2024-05-16 21:27:36\",\"capture\":\"1. 引言\\n在原生 JavaScript 模块化解决了代码组织问题后,TypeScript(TS)进一步将其推向了工业级高度。TS 不仅仅是为模块添加了类型标注,它通过类型导出导入、编译时优化、以及声明文件系统,将模块间的依赖关系从简单的“代码引用”提升到了“契约交互”。\\n本文我们将聚焦于 TypeScript 如何通过类型系统增强模块化编程,并探讨在现代工程(尤其是 TS 5.0+ 时代)下的最佳配置实践。\\n 2. 类型导出与导入:极致的运行时优化\\nTypeScript 对 ES Modules 语法最显著的扩展是支持“仅类型”(Type-only)的导出与导入。这不仅是语义上的清晰,更是性\"}],\"static-analysis\":[{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"}],\"Tree-Shaking\":[{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"}],\"circular-dependency\":[{\"url\":\"/fullstack/decode-es-modules\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/3.ES Modules 核心规范与实践解析\",\"frontmatter\":{\"date\":\"2024-05-14 22:29:32\",\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"tldr\":\"ES Modules 核心语法与执行模型:静态分析如何重塑前端构建效率。\",\"description\":\"深度解析 ES Modules 命名导出/导入、默认导出、动态导入等语法,以及模块执行顺序、循环依赖处理与编译时优化机制。\",\"permalink\":\"/fullstack/decode-es-modules\",\"tags\":[\"concept\",\"ESM\",\"static-analysis\",\"Tree-Shaking\",\"circular-dependency\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"回归标准,拥抱原生:ES Modules 核心规范与实践解析\",\"date\":\"2024-05-14 22:29:32\",\"capture\":\"> \\n> 理解 ESM,不仅仅是学会 import 和 export,更重要的是理解它如何通过编译时优化彻底改变了前端构建的效率。\\n 1. 命名导出与导入:精准的代码引用\\n命名导出(Named Exports)是 ESM 最常用的形式,它允许一个模块暴露多个成员。其核心优势在于:导入方可以按需引入,且 IDE 能提供精准的补全。\\n语法实践::\\n```javascript\\n// math.js - 命名导出\\n// 行内导出\\nexport const PI = 3.14159;\\nexport function circleArea(radius) {\\n return PI * rad\"}],\"CommonJS\":[{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"AMD\":[{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"UMD\":[{\"url\":\"/fullstack/different-module-programming-specifications\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/2.不同模块化规范梳理\",\"frontmatter\":{\"date\":\"2024-05-14 22:26:06\",\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"tldr\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 等核心规范,附现代迁移策略。\",\"description\":\"全面梳理 CommonJS、AMD、UMD、ES Modules 四大模块化规范的核心语法与适用场景,解析各规范的关键差异,并提供从旧规范向 ESM 迁移的实操策略。\",\"permalink\":\"/fullstack/different-module-programming-specifications\",\"tags\":[\"tutorial\",\"CommonJS\",\"AMD\",\"UMD\",\"ESM\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"JavaScript 模块化规范全景图:从 CJS 到 ESM\",\"date\":\"2024-05-14 22:26:06\",\"capture\":\"在 JavaScript 进化史上,“模块化”始终是一个核心命题。从早期 script 标签满天飞的“混沌时代”,到各路规范群雄逐鹿的“战国时代”,再到如今 ES Modules 定于一尊,开发者们在解决依赖管理、作用域污染和异步加载等问题上付出了巨大的努力。\\n本文将带你梳理 JavaScript 历史上最重要的几种模块化规范,便于构建起全栈开发的底层知识图谱。\\n 1. CommonJS 规范:Node.js 生态的基石\\nCommonJS 是伴随 Node.js 诞生的规范,由 Kevin Dangoor 提出,初衷是让 JavaScript 脱离浏览器也能构建复杂的系统应用。它是 Node.\"}],\"javascript\":[{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"modularization\":[{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"design-patterns\":[{\"url\":\"/fullstack/frontend-module-programming-basic\",\"relativePath\":\"/01.全栈/80.全栈基础素养/20.模块化编程实践指南/1.前端模块化编程基础\",\"frontmatter\":{\"date\":\"2024-05-12 22:43:28\",\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"tldr\":\"从全局变量到 ES Modules:JavaScript 模块化演进与工厂、单例、观察者等设计模式实践。\",\"description\":\"系统讲解 JavaScript 模块化编程基础,涵盖 IIFE、CommonJS、ES Modules 规范演进,以及工厂、单例、观察者等设计模式与模块化的结合。\",\"permalink\":\"/fullstack/frontend-module-programming-basic\",\"tags\":[\"tutorial\",\"javascript\",\"modularization\",\"esm\",\"design-patterns\"],\"categories\":[\"全栈\",\"全栈基础素养\",\"模块化编程实践指南\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"模块化编程初体验:概念、演进与设计模式\",\"date\":\"2024-05-12 22:43:28\",\"capture\":\"1. 引言\\n随着项目规模日益膨胀,代码量从几千行迅速增长到数万甚至数十万行,将所有逻辑塞进少数几个文件的做法早已难以为继。在这样的背景下,模块化编程应运而生,成为现代前端开发的标配。\\n它的核心理念简洁而优雅:像搭积木一样,将庞大复杂的系统拆解为一个个独立、功能单一且可复用的模块,让每个模块各司其职,再通过标准接口灵活组合。\\n 2. 模块化编程初体验\\n在深入理论之前,让我们先通过一个简单的 JavaScript 示例,直观地感受一下什么是模块化。假设我们需要处理一些数学运算,我们可以将其封装成一个独立的工具模块:\\n```javascript\\n// math.js - 定义一个数学工具模块\\nexp\"}],\"知识发现\":[{\"url\":\"/product-sense/perplexity-knowledge-worker\",\"relativePath\":\"/10.产品 Sense/01.产品观察与分析/11.AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"frontmatter\":{\"date\":\"2024-05-08 08:56:21\",\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"description\":\"摘要总结:在大模型重塑互联网交互的当下,Perplexity 并未选择成为“下一个 Google”,而是以“知识发现引擎”的全新定位,精准切入知识工作者的核心工作流。本文跳出单纯的模型能力对比,从产品 Sense 与工程逻辑的双重视角,深度拆解 Perplexity 的破局之道。我们将探讨它如何通过反直觉的 UI 创新重塑交互起点,如何在工程层面死磕尾部延迟与幻觉控制,以及它如何利用巨头的利润率护城河实现错位竞争。最终,我们将视线投向未来,一窥 AI 从被动响应走向主动探索的演进蓝图。\",\"permalink\":\"/product-sense/perplexity-knowledge-worker\",\"categories\":[\"产品 Sense\"],\"tags\":[\"AI 搜索\",\"知识发现\",\"产品 Sense\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"AI-powered 搜索引擎观察分析:Perplexity 与知识工作者\",\"date\":\"2024-05-08 08:56:21\",\"capture\":\"1. 引言\\n在 AI 浪潮下,搜索引擎的范式正在发生转移。作为当前备受瞩目的 AI 搜索产品,Perplexity 并没有试图成为“下一个 Google”,而是将自己定义为知识发现引擎。\\n对于每天需要处理海量信息、进行复杂决策的知识工作者而言,如何高效地“去噪”并获取高信度知识是核心诉求。笔者将从产品交互、技术工程、商业逻辑与未来演进四个维度,分析 Perplexity 是如何重塑信息获取工作流的。\\n本文旨在通过对 Perplexity 的深度产品观察与分析,帮助读者理解 AI 搜索产品的设计逻辑与用户体验优化路径,同时为知识工作者提供可落地的效率提升方法,并在过程中培养结构化产品分析思维。\\n\"}],\"engineering-fundamentals\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"code-design\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"software-engineering\":[{\"url\":\"/fullstack/occams-razor-software-design\",\"relativePath\":\"/01.全栈/80.全栈基础素养/00.奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"frontmatter\":{\"date\":\"2024-03-20 22:41:41\",\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"tldr\":\"在需求边界内追求最小复杂度——不是拒绝复杂,而是不主动制造复杂。\",\"description\":\"深入解析奥卡姆剃刀原则在编程与设计中的六大场景:拒绝过度预判、移除冗余逻辑、匹配架构规模、克制依赖引入、封装最小接口、先排查简单原因,并给出三个关键边界。\",\"permalink\":\"/fullstack/occams-razor-software-design\",\"tags\":[\"concept\",\"engineering-fundamentals\",\"code-design\",\"software-engineering\"],\"categories\":[\"全栈\",\"全栈基础素养\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"奥卡姆剃刀原则:从理论到编程设计的实践指南\",\"date\":\"2024-03-20 22:41:41\",\"capture\":\"<script setup\\nimport HighLightText from '@fragment/components/HighLightText.vue'\\n</script>\\n> 摘要总结:奥卡姆剃刀原则由 14 世纪逻辑学家威廉·奥卡姆提出,其核心为\\\"如无必要,勿增实体\\\"——在多个同等有效的方案中,选择假设最少、最简洁的那个。该原则并非否定复杂性,而是避免无意义的过度设计。文章从编程与设计实践出发,依次探讨了需求实现、代码实现、架构设计、依赖管理、接口设计、调试优化六大场景的反例与正例,并明确指出三个关键边界:不可牺牲可维护性、可扩展性、安全性换取简洁。\\n 1.\"}],\"运动\":[{\"url\":\"/about/growth/weight-loss\",\"relativePath\":\"/40.关于/30.成长随笔/20.减肥这件小事阶段随笔汇总\",\"frontmatter\":{\"date\":\"2022-09-12 08:16:00\",\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"description\":\"摘要总结:从“书生意气”到初入社会的“中年油腻”危机,一次健康警报让笔者开启了这场深刻的自我对话与行动。本文详细复盘了笔者从健康危机出发,通过四个阶段的循序渐进,成功实现体重管理的过程。区别于盲目跟风,笔者在实践中引入了目标拆解、数据监控(体脂秤指标)、跨领域经验迁移(如项目管理、时间管理)以及对不同策略(如控制饮食、加大无氧运动、尝试不吃主食)的辩证采纳。这不仅是一份减肥记录,更是一次用科学与迭代思维重构生活秩序、实现身心升级的实操指南。\",\"permalink\":\"/about/growth/weight-loss\",\"coverImg\":\"https://insight-stack-1252300811.cos.ap-shanghai.myqcloud.com/img/cover/health_bg.png\",\"top\":true,\"tags\":[\"健康\",\"运动\"],\"categories\":[\"个人成长\"]},\"author\":{\"name\":\"sqliang\",\"link\":\"https://github.com/sqliang\"},\"title\":\"用科学与迭代改善的方式推动减肥这件小事\",\"date\":\"2022-09-12 08:16:00\",\"capture\":\"写在前面\\n在经济快速发展的大背景下,一批又一批的大学生陆续走出校门进入社会大舞台。随着年龄与工作年限的增长,不知置身于其中的你是否感慨过自己在阅历上从“书生意气”渐渐演变为“四平八稳,游刃有余”;在身体养护方面从“身材无敌,年龄成迷,实打实一个传奇”演变为“中年油腻”。每个人多少都有自己的答案,笔者的答案是:走出校门进入社会后,当初对身边人有点苛刻,遇事火急火燎的自己逐渐得到了改善。身体却因原本在大学时没有怎么在意,经过长年累月地洗礼亮了一次小红灯。在康复期间,不止一次反思过之前的生活方式和入世模式,想一想 + 四处看一看后,慢慢也就开悟了,自然要启动一些改变尝试。\\n因此,也就有了这篇减肥这件\"}]}},\"groupCards\":{\"categories\":[{\"name\":\"AI 学习与实践\",\"length\":8},{\"name\":\"Agent 系列\",\"length\":1},{\"name\":\"全栈\",\"length\":24},{\"name\":\"产品 Sense\",\"length\":7},{\"name\":\"AI\",\"length\":2},{\"name\":\"悦读时光\",\"length\":1},{\"name\":\"个人成长\",\"length\":3},{\"name\":\"开源洞察\",\"length\":3},{\"name\":\"AI 编程系列\",\"length\":2},{\"name\":\"网络与通信\",\"length\":3},{\"name\":\"ai-practice\",\"length\":1},{\"name\":\"前端工程\",\"length\":4},{\"name\":\"资源推荐\",\"length\":4},{\"name\":\"关于\",\"length\":1},{\"name\":\"全栈基础素养\",\"length\":10},{\"name\":\"模块化编程实践指南\",\"length\":7},{\"name\":\"growth\",\"length\":1}],\"tags\":[{\"name\":\"Agent SDK\",\"length\":2},{\"name\":\"Multi-Agent\",\"length\":1},{\"name\":\"Agent Skills\",\"length\":1},{\"name\":\"Agent\",\"length\":6},{\"name\":\"AI\",\"length\":12},{\"name\":\"全栈\",\"length\":7},{\"name\":\"产品\",\"length\":1},{\"name\":\"悦读时光\",\"length\":3},{\"name\":\"系统思维\",\"length\":1},{\"name\":\"数学思维\",\"length\":1},{\"name\":\"模型思维\",\"length\":1},{\"name\":\"疫情\",\"length\":2},{\"name\":\"健康\",\"length\":2},{\"name\":\"时间\",\"length\":1},{\"name\":\"远程协作\",\"length\":1},{\"name\":\"AI Coding\",\"length\":2},{\"name\":\"Claude Code\",\"length\":1},{\"name\":\"Agentic Engineering\",\"length\":2},{\"name\":\"Developer Tools\",\"length\":1},{\"name\":\"LLM\",\"length\":1},{\"name\":\"CSS\",\"length\":1},{\"name\":\"工程化\",\"length\":1},{\"name\":\"tailwindcss\",\"length\":1},{\"name\":\"tutorial\",\"length\":8},{\"name\":\"SSE\",\"length\":2},{\"name\":\"HTTP Streaming\",\"length\":1},{\"name\":\"HTTP 轮询\",\"length\":2},{\"name\":\"退避轮询\",\"length\":1},{\"name\":\"长轮询\",\"length\":1},{\"name\":\"HTTP\",\"length\":1},{\"name\":\"WebSocket\",\"length\":1},{\"name\":\"Webhooks\",\"length\":1},{\"name\":\"AI Agent\",\"length\":1},{\"name\":\"react\",\"length\":1},{\"name\":\"component-design\",\"length\":1},{\"name\":\"state-management\",\"length\":1},{\"name\":\"ai-augmented\",\"length\":1},{\"name\":\"specification-driven\",\"length\":1},{\"name\":\"资源推荐\",\"length\":5},{\"name\":\"LLM API\",\"length\":1},{\"name\":\"CSR\",\"length\":1},{\"name\":\"SSR\",\"length\":1},{\"name\":\"SSG\",\"length\":1},{\"name\":\"ISR\",\"length\":1},{\"name\":\"PPR\",\"length\":1},{\"name\":\"VitePress\",\"length\":1},{\"name\":\"Vibe Coding\",\"length\":1},{\"name\":\"AI 助手\",\"length\":1},{\"name\":\"AI 搜索\",\"length\":2},{\"name\":\"产品 Sense\",\"length\":4},{\"name\":\"商业化\",\"length\":1},{\"name\":\"SWR\",\"length\":1},{\"name\":\"TanStack Query\",\"length\":1},{\"name\":\"前端工程\",\"length\":1},{\"name\":\"jamstack\",\"length\":1},{\"name\":\"frontend-architecture\",\"length\":1},{\"name\":\"next.js\",\"length\":1},{\"name\":\"static-site-generator\",\"length\":1},{\"name\":\"系统洞察力\",\"length\":1},{\"name\":\"信息筛选\",\"length\":1},{\"name\":\"个人成长\",\"length\":1},{\"name\":\"typescript\",\"length\":3},{\"name\":\"generics\",\"length\":1},{\"name\":\"type-system\",\"length\":1},{\"name\":\"compilation\",\"length\":1},{\"name\":\"tooling\",\"length\":1},{\"name\":\"eslint\",\"length\":1},{\"name\":\"jest\",\"length\":1},{\"name\":\"成长\",\"length\":1},{\"name\":\"ESM\",\"length\":3},{\"name\":\"DDD\",\"length\":1},{\"name\":\"微前端\",\"length\":1},{\"name\":\"concept\",\"length\":5},{\"name\":\"node.js\",\"length\":1},{\"name\":\"commonjs\",\"length\":1},{\"name\":\"esm\",\"length\":2},{\"name\":\"monorepo\",\"length\":1},{\"name\":\"layered-architecture\",\"length\":1},{\"name\":\"solid-principles\",\"length\":1},{\"name\":\"code-organization\",\"length\":1},{\"name\":\"best-practices\",\"length\":1},{\"name\":\"naming-conventions\",\"length\":1},{\"name\":\"tsconfig\",\"length\":1},{\"name\":\"static-analysis\",\"length\":1},{\"name\":\"Tree-Shaking\",\"length\":1},{\"name\":\"circular-dependency\",\"length\":1},{\"name\":\"CommonJS\",\"length\":1},{\"name\":\"AMD\",\"length\":1},{\"name\":\"UMD\",\"length\":1},{\"name\":\"javascript\",\"length\":1},{\"name\":\"modularization\",\"length\":1},{\"name\":\"design-patterns\",\"length\":1},{\"name\":\"知识发现\",\"length\":1},{\"name\":\"engineering-fundamentals\",\"length\":1},{\"name\":\"code-design\",\"length\":1},{\"name\":\"software-engineering\",\"length\":1},{\"name\":\"运动\",\"length\":1}]}}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true,\"additionalConfig\":{}}"));
\ No newline at end of file
diff --git a/assets/chunks/vitepress-theme-teek.BZ9BuaTf.js b/assets/chunks/vitepress-theme-teek.hoRu8K_n.js
similarity index 99%
rename from assets/chunks/vitepress-theme-teek.BZ9BuaTf.js
rename to assets/chunks/vitepress-theme-teek.hoRu8K_n.js
index d8f80295..bd210c00 100644
--- a/assets/chunks/vitepress-theme-teek.BZ9BuaTf.js
+++ b/assets/chunks/vitepress-theme-teek.hoRu8K_n.js
@@ -1,6 +1,6 @@
function ln(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const Le={},fo=[],Ht=()=>{},ao=()=>!1,Ys=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),ic=e=>e.startsWith("onUpdate:"),Ie=Object.assign,rc=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},E2=Object.prototype.hasOwnProperty,Oe=(e,t)=>E2.call(e,t),ce=Array.isArray,ho=e=>Io(e)==="[object Map]",Gs=e=>Io(e)==="[object Set]",Hu=e=>Io(e)==="[object Date]",x2=e=>Io(e)==="[object RegExp]",ye=e=>typeof e=="function",_e=e=>typeof e=="string",Gt=e=>typeof e=="symbol",Ue=e=>e!==null&&typeof e=="object",ac=e=>(Ue(e)||ye(e))&&ye(e.then)&&ye(e.catch),n1=Object.prototype.toString,Io=e=>n1.call(e),A2=e=>Io(e).slice(8,-1),Xr=e=>Io(e)==="[object Object]",lc=e=>_e(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ws=ln(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),$2=ln("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"),Qr=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},L2=/-\w/g,tt=Qr(e=>e.replace(L2,t=>t.slice(1).toUpperCase())),I2=/\B([A-Z])/g,Kt=Qr(e=>e.replace(I2,"-$1").toLowerCase()),Js=Qr(e=>e.charAt(0).toUpperCase()+e.slice(1)),po=Qr(e=>e?`on${Js(e)}`:""),Ot=(e,t)=>!Object.is(e,t),mo=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:s,value:n})},Zr=e=>{const t=parseFloat(e);return isNaN(t)?e:t},br=e=>{const t=_e(e)?Number(e):NaN;return isNaN(t)?e:t};let zu;const ea=()=>zu||(zu=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}),P2="Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol",M2=ln(P2);function Fe(e){if(ce(e)){const t={};for(let n=0;n{if(n){const s=n.split(B2);s.length>1&&(t[s[0].trim()]=s[1].trim())}}),t}function T(e){let t="";if(_e(e))t=e;else if(ce(e))for(let n=0;nEs(n,t))}const r1=e=>!!(e&&e.__v_isRef===!0),W=e=>_e(e)?e:e==null?"":ce(e)||Ue(e)&&(e.toString===n1||!ye(e.toString))?r1(e)?W(e.value):JSON.stringify(e,a1,2):String(e),a1=(e,t)=>r1(t)?a1(e,t.value):ho(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[s,o],i)=>(n[Pa(s,i)+" =>"]=o,n),{})}:Gs(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>Pa(n))}:Gt(t)?Pa(t):Ue(t)&&!ce(t)&&!Xr(t)?String(t):t,Pa=(e,t="")=>{var n;return Gt(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};function Y2(e){return e==null?"initial":typeof e=="string"?e===""?" ":e:String(e)}let $t;class cc{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=$t,!t&&$t&&(this.index=($t.scopes||($t.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&($t=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,s;for(n=0,s=this.effects.length;n0)return;if(Yo){let t=Yo;for(Yo=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;Ko;){let t=Ko;for(Ko=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(s){e||(e=s)}t=n}}if(e)throw e}function f1(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function d1(e){let t,n=e.depsTail,s=n;for(;s;){const o=s.prevDep;s.version===-1?(s===n&&(n=o),hc(s),G2(s)):t=s,s.dep.activeLink=s.prevActiveLink,s.prevActiveLink=void 0,s=o}e.deps=t,e.depsTail=n}function ol(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(h1(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function h1(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===oi)||(e.globalVersion=oi,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!ol(e))))return;e.flags|=2;const t=e.dep,n=Qe,s=xn;Qe=e,xn=!0;try{f1(e);const o=e.fn(e._value);(t.version===0||Ot(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{Qe=n,xn=s,d1(e),e.flags&=-3}}function hc(e,t=!1){const{dep:n,prevSub:s,nextSub:o}=e;if(s&&(s.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=s,e.nextSub=void 0),n.subs===e&&(n.subs=s,!s&&n.computed)){n.computed.flags&=-5;for(let i=n.computed.deps;i;i=i.nextDep)hc(i,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function G2(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}function J2(e,t){e.effect instanceof si&&(e=e.effect.fn);const n=new si(e);t&&Ie(n,t);try{n.run()}catch(o){throw n.stop(),o}const s=n.run.bind(n);return s.effect=n,s}function X2(e){e.effect.stop()}let xn=!0;const p1=[];function ns(){p1.push(xn),xn=!1}function ss(){const e=p1.pop();xn=e===void 0?!0:e}function ju(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=Qe;Qe=void 0;try{t()}finally{Qe=n}}}let oi=0;class Q2{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class na{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!Qe||!xn||Qe===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==Qe)n=this.activeLink=new Q2(Qe,this),Qe.deps?(n.prevDep=Qe.depsTail,Qe.depsTail.nextDep=n,Qe.depsTail=n):Qe.deps=Qe.depsTail=n,m1(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const s=n.nextDep;s.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=s),n.prevDep=Qe.depsTail,n.nextDep=void 0,Qe.depsTail.nextDep=n,Qe.depsTail=n,Qe.deps===n&&(Qe.deps=s)}return n}trigger(t){this.version++,oi++,this.notify(t)}notify(t){fc();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{dc()}}}function m1(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let s=t.deps;s;s=s.nextDep)m1(s)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const kr=new WeakMap,Os=Symbol(""),il=Symbol(""),ii=Symbol("");function Pt(e,t,n){if(xn&&Qe){let s=kr.get(e);s||kr.set(e,s=new Map);let o=s.get(n);o||(s.set(n,o=new na),o.map=s,o.key=n),o.track()}}function Jn(e,t,n,s,o,i){const r=kr.get(e);if(!r){oi++;return}const a=c=>{c&&c.trigger()};if(fc(),t==="clear")r.forEach(a);else{const c=ce(e),u=c&&lc(n);if(c&&n==="length"){const f=Number(s);r.forEach((d,h)=>{(h==="length"||h===ii||!Gt(h)&&h>=f)&&a(d)})}else switch((n!==void 0||r.has(void 0))&&a(r.get(n)),u&&a(r.get(ii)),t){case"add":c?u&&a(r.get("length")):(a(r.get(Os)),ho(e)&&a(r.get(il)));break;case"delete":c||(a(r.get(Os)),ho(e)&&a(r.get(il)));break;case"set":ho(e)&&a(r.get(Os));break}}dc()}function Z2(e,t){const n=kr.get(e);return n&&n.get(t)}function eo(e){const t=Pe(e);return t===e?t:(Pt(t,"iterate",ii),an(e)?t:t.map(_t))}function sa(e){return Pt(e=Pe(e),"iterate",ii),e}const em={__proto__:null,[Symbol.iterator](){return Fa(this,Symbol.iterator,_t)},concat(...e){return eo(this).concat(...e.map(t=>ce(t)?eo(t):t))},entries(){return Fa(this,"entries",e=>(e[1]=_t(e[1]),e))},every(e,t){return Wn(this,"every",e,t,void 0,arguments)},filter(e,t){return Wn(this,"filter",e,t,n=>n.map(_t),arguments)},find(e,t){return Wn(this,"find",e,t,_t,arguments)},findIndex(e,t){return Wn(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Wn(this,"findLast",e,t,_t,arguments)},findLastIndex(e,t){return Wn(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Wn(this,"forEach",e,t,void 0,arguments)},includes(...e){return Ba(this,"includes",e)},indexOf(...e){return Ba(this,"indexOf",e)},join(e){return eo(this).join(e)},lastIndexOf(...e){return Ba(this,"lastIndexOf",e)},map(e,t){return Wn(this,"map",e,t,void 0,arguments)},pop(){return Ro(this,"pop")},push(...e){return Ro(this,"push",e)},reduce(e,...t){return Uu(this,"reduce",e,t)},reduceRight(e,...t){return Uu(this,"reduceRight",e,t)},shift(){return Ro(this,"shift")},some(e,t){return Wn(this,"some",e,t,void 0,arguments)},splice(...e){return Ro(this,"splice",e)},toReversed(){return eo(this).toReversed()},toSorted(e){return eo(this).toSorted(e)},toSpliced(...e){return eo(this).toSpliced(...e)},unshift(...e){return Ro(this,"unshift",e)},values(){return Fa(this,"values",_t)}};function Fa(e,t,n){const s=sa(e),o=s[t]();return s!==e&&!an(e)&&(o._next=o.next,o.next=()=>{const i=o._next();return i.done||(i.value=n(i.value)),i}),o}const tm=Array.prototype;function Wn(e,t,n,s,o,i){const r=sa(e),a=r!==e&&!an(e),c=r[t];if(c!==tm[t]){const d=c.apply(e,i);return a?_t(d):d}let u=n;r!==e&&(a?u=function(d,h){return n.call(this,_t(d),h,e)}:n.length>2&&(u=function(d,h){return n.call(this,d,h,e)}));const f=c.call(r,u,s);return a&&o?o(f):f}function Uu(e,t,n,s){const o=sa(e);let i=n;return o!==e&&(an(e)?n.length>3&&(i=function(r,a,c){return n.call(this,r,a,c,e)}):i=function(r,a,c){return n.call(this,r,_t(a),c,e)}),o[t](i,...s)}function Ba(e,t,n){const s=Pe(e);Pt(s,"iterate",ii);const o=s[t](...n);return(o===-1||o===!1)&&ra(n[0])?(n[0]=Pe(n[0]),s[t](...n)):o}function Ro(e,t,n=[]){ns(),fc();const s=Pe(e)[t].apply(e,n);return dc(),ss(),s}const nm=ln("__proto__,__v_isRef,__isVue"),g1=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Gt));function sm(e){Gt(e)||(e=String(e));const t=Pe(this);return Pt(t,"has",e),t.hasOwnProperty(e)}class v1{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,s){if(n==="__v_skip")return t.__v_skip;const o=this._isReadonly,i=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return i;if(n==="__v_raw")return s===(o?i?_1:C1:i?w1:k1).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(s)?t:void 0;const r=ce(t);if(!o){let c;if(r&&(c=em[n]))return c;if(n==="hasOwnProperty")return sm}const a=Reflect.get(t,n,Ye(t)?t:s);if((Gt(n)?g1.has(n):nm(n))||(o||Pt(t,"get",n),i))return a;if(Ye(a)){const c=r&&lc(n)?a:a.value;return o&&Ue(c)?It(c):c}return Ue(a)?o?It(a):Dn(a):a}}class y1 extends v1{constructor(t=!1){super(!1,t)}set(t,n,s,o){let i=t[n];if(!this._isShallow){const c=os(i);if(!an(s)&&!os(s)&&(i=Pe(i),s=Pe(s)),!ce(t)&&Ye(i)&&!Ye(s))return c||(i.value=s),!0}const r=ce(t)&&lc(n)?Number(n)e,Fi=e=>Reflect.getPrototypeOf(e);function lm(e,t,n){return function(...s){const o=this.__v_raw,i=Pe(o),r=ho(i),a=e==="entries"||e===Symbol.iterator&&r,c=e==="keys"&&r,u=o[e](...s),f=n?rl:t?wr:_t;return!t&&Pt(i,"iterate",c?il:Os),{next(){const{value:d,done:h}=u.next();return h?{value:d,done:h}:{value:a?[f(d[0]),f(d[1])]:f(d),done:h}},[Symbol.iterator](){return this}}}}function Bi(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function cm(e,t){const n={get(o){const i=this.__v_raw,r=Pe(i),a=Pe(o);e||(Ot(o,a)&&Pt(r,"get",o),Pt(r,"get",a));const{has:c}=Fi(r),u=t?rl:e?wr:_t;if(c.call(r,o))return u(i.get(o));if(c.call(r,a))return u(i.get(a));i!==r&&i.get(o)},get size(){const o=this.__v_raw;return!e&&Pt(Pe(o),"iterate",Os),o.size},has(o){const i=this.__v_raw,r=Pe(i),a=Pe(o);return e||(Ot(o,a)&&Pt(r,"has",o),Pt(r,"has",a)),o===a?i.has(o):i.has(o)||i.has(a)},forEach(o,i){const r=this,a=r.__v_raw,c=Pe(a),u=t?rl:e?wr:_t;return!e&&Pt(c,"iterate",Os),a.forEach((f,d)=>o.call(i,u(f),u(d),r))}};return Ie(n,e?{add:Bi("add"),set:Bi("set"),delete:Bi("delete"),clear:Bi("clear")}:{add(o){!t&&!an(o)&&!os(o)&&(o=Pe(o));const i=Pe(this);return Fi(i).has.call(i,o)||(i.add(o),Jn(i,"add",o,o)),this},set(o,i){!t&&!an(i)&&!os(i)&&(i=Pe(i));const r=Pe(this),{has:a,get:c}=Fi(r);let u=a.call(r,o);u||(o=Pe(o),u=a.call(r,o));const f=c.call(r,o);return r.set(o,i),u?Ot(i,f)&&Jn(r,"set",o,i):Jn(r,"add",o,i),this},delete(o){const i=Pe(this),{has:r,get:a}=Fi(i);let c=r.call(i,o);c||(o=Pe(o),c=r.call(i,o)),a&&a.call(i,o);const u=i.delete(o);return c&&Jn(i,"delete",o,void 0),u},clear(){const o=Pe(this),i=o.size!==0,r=o.clear();return i&&Jn(o,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(o=>{n[o]=lm(o,e,t)}),n}function oa(e,t){const n=cm(e,t);return(s,o,i)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?s:Reflect.get(Oe(n,o)&&o in s?n:s,o,i)}const um={get:oa(!1,!1)},fm={get:oa(!1,!0)},dm={get:oa(!0,!1)},hm={get:oa(!0,!0)},k1=new WeakMap,w1=new WeakMap,C1=new WeakMap,_1=new WeakMap;function pm(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function mm(e){return e.__v_skip||!Object.isExtensible(e)?0:pm(A2(e))}function Dn(e){return os(e)?e:ia(e,!1,om,um,k1)}function pc(e){return ia(e,!1,rm,fm,w1)}function It(e){return ia(e,!0,im,dm,C1)}function al(e){return ia(e,!0,am,hm,_1)}function ia(e,t,n,s,o){if(!Ue(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const i=mm(e);if(i===0)return e;const r=o.get(e);if(r)return r;const a=new Proxy(e,i===2?s:n);return o.set(e,a),a}function Cs(e){return os(e)?Cs(e.__v_raw):!!(e&&e.__v_isReactive)}function os(e){return!!(e&&e.__v_isReadonly)}function an(e){return!!(e&&e.__v_isShallow)}function ra(e){return e?!!e.__v_raw:!1}function Pe(e){const t=e&&e.__v_raw;return t?Pe(t):e}function go(e){return!Oe(e,"__v_skip")&&Object.isExtensible(e)&&s1(e,"__v_skip",!0),e}const _t=e=>Ue(e)?Dn(e):e,wr=e=>Ue(e)?It(e):e;function Ye(e){return e?e.__v_isRef===!0:!1}function j(e){return S1(e,!1)}function He(e){return S1(e,!0)}function S1(e,t){return Ye(e)?e:new gm(e,t)}class gm{constructor(t,n){this.dep=new na,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:Pe(t),this._value=n?t:_t(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,s=this.__v_isShallow||an(t)||os(t);t=s?t:Pe(t),Ot(t,n)&&(this._rawValue=t,this._value=s?t:_t(t),this.dep.trigger())}}function vm(e){e.dep&&e.dep.trigger()}function l(e){return Ye(e)?e.value:e}function Se(e){return ye(e)?e():l(e)}const ym={get:(e,t,n)=>t==="__v_raw"?e:l(Reflect.get(e,t,n)),set:(e,t,n,s)=>{const o=e[t];return Ye(o)&&!Ye(n)?(o.value=n,!0):Reflect.set(e,t,n,s)}};function mc(e){return Cs(e)?e:new Proxy(e,ym)}class bm{constructor(t){this.__v_isRef=!0,this._value=void 0;const n=this.dep=new na,{get:s,set:o}=t(n.track.bind(n),n.trigger.bind(n));this._get=s,this._set=o}get value(){return this._value=this._get()}set value(t){this._set(t)}}function gc(e){return new bm(e)}function km(e){const t=ce(e)?new Array(e.length):{};for(const n in e)t[n]=E1(e,n);return t}class wm{constructor(t,n,s){this._object=t,this._key=n,this._defaultValue=s,this.__v_isRef=!0,this._value=void 0}get value(){const t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return Z2(Pe(this._object),this._key)}}class Cm{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function T1(e,t,n){return Ye(e)?e:ye(e)?new Cm(e):Ue(e)&&arguments.length>1?E1(e,t,n):j(e)}function E1(e,t,n){const s=e[t];return Ye(s)?s:new wm(e,t,n)}class _m{constructor(t,n,s){this.fn=t,this.setter=n,this._value=void 0,this.dep=new na(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=oi-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=s}notify(){if(this.flags|=16,!(this.flags&8)&&Qe!==this)return u1(this,!0),!0}get value(){const t=this.dep.track();return h1(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function Sm(e,t,n=!1){let s,o;return ye(e)?s=e:(s=e.get,o=e.set),new _m(s,o,n)}const Tm={GET:"get",HAS:"has",ITERATE:"iterate"},Em={SET:"set",ADD:"add",DELETE:"delete",CLEAR:"clear"},Ni={},Cr=new WeakMap;let ms;function xm(){return ms}function x1(e,t=!1,n=ms){if(n){let s=Cr.get(n);s||Cr.set(n,s=[]),s.push(e)}}function Am(e,t,n=Le){const{immediate:s,deep:o,once:i,scheduler:r,augmentJob:a,call:c}=n,u=_=>o?_:an(_)||o===!1||o===0?Xn(_,1):Xn(_);let f,d,h,m,g=!1,v=!1;if(Ye(e)?(d=()=>e.value,g=an(e)):Cs(e)?(d=()=>u(e),g=!0):ce(e)?(v=!0,g=e.some(_=>Cs(_)||an(_)),d=()=>e.map(_=>{if(Ye(_))return _.value;if(Cs(_))return u(_);if(ye(_))return c?c(_,2):_()})):ye(e)?t?d=c?()=>c(e,2):e:d=()=>{if(h){ns();try{h()}finally{ss()}}const _=ms;ms=f;try{return c?c(e,3,[m]):e(m)}finally{ms=_}}:d=Ht,t&&o){const _=d,x=o===!0?1/0:o;d=()=>Xn(_(),x)}const k=Ci(),b=()=>{f.stop(),k&&k.active&&rc(k.effects,f)};if(i&&t){const _=t;t=(...x)=>{_(...x),b()}}let C=v?new Array(e.length).fill(Ni):Ni;const y=_=>{if(!(!(f.flags&1)||!f.dirty&&!_))if(t){const x=f.run();if(o||g||(v?x.some((P,V)=>Ot(P,C[V])):Ot(x,C))){h&&h();const P=ms;ms=f;try{const V=[x,C===Ni?void 0:v&&C[0]===Ni?[]:C,m];C=x,c?c(t,3,V):t(...V)}finally{ms=P}}}else f.run()};return a&&a(y),f=new si(d),f.scheduler=r?()=>r(y,!1):y,m=_=>x1(_,!1,f),h=f.onStop=()=>{const _=Cr.get(f);if(_){if(c)c(_,4);else for(const x of _)x();Cr.delete(f)}},t?s?y(!0):C=f.run():r?r(y.bind(null,!0),!0):f.run(),b.pause=f.pause.bind(f),b.resume=f.resume.bind(f),b.stop=b,b}function Xn(e,t=1/0,n){if(t<=0||!Ue(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Ye(e))Xn(e.value,t,n);else if(ce(e))for(let s=0;s{Xn(s,t,n)});else if(Xr(e)){for(const s in e)Xn(e[s],t,n);for(const s of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,s)&&Xn(e[s],t,n)}return e}const A1=[];function $m(e){A1.push(e)}function Lm(){A1.pop()}function Im(e,t){}const Pm={SETUP_FUNCTION:0,0:"SETUP_FUNCTION",RENDER_FUNCTION:1,1:"RENDER_FUNCTION",NATIVE_EVENT_HANDLER:5,5:"NATIVE_EVENT_HANDLER",COMPONENT_EVENT_HANDLER:6,6:"COMPONENT_EVENT_HANDLER",VNODE_HOOK:7,7:"VNODE_HOOK",DIRECTIVE_HOOK:8,8:"DIRECTIVE_HOOK",TRANSITION_HOOK:9,9:"TRANSITION_HOOK",APP_ERROR_HANDLER:10,10:"APP_ERROR_HANDLER",APP_WARN_HANDLER:11,11:"APP_WARN_HANDLER",FUNCTION_REF:12,12:"FUNCTION_REF",ASYNC_COMPONENT_LOADER:13,13:"ASYNC_COMPONENT_LOADER",SCHEDULER:14,14:"SCHEDULER",COMPONENT_UPDATE:15,15:"COMPONENT_UPDATE",APP_UNMOUNT_CLEANUP:16,16:"APP_UNMOUNT_CLEANUP"},Mm={sp:"serverPrefetch hook",bc:"beforeCreate hook",c:"created hook",bm:"beforeMount hook",m:"mounted hook",bu:"beforeUpdate hook",u:"updated",bum:"beforeUnmount hook",um:"unmounted hook",a:"activated hook",da:"deactivated hook",ec:"errorCaptured hook",rtc:"renderTracked hook",rtg:"renderTriggered hook",0:"setup function",1:"render function",2:"watcher getter",3:"watcher callback",4:"watcher cleanup function",5:"native event handler",6:"component event handler",7:"vnode hook",8:"directive hook",9:"transition hook",10:"app errorHandler",11:"app warnHandler",12:"ref function",13:"async component loader",14:"scheduler flush",15:"component update",16:"app unmount cleanup function"};function Po(e,t,n,s){try{return s?e(...s):e()}catch(o){Xs(o,t,n)}}function yn(e,t,n,s){if(ye(e)){const o=Po(e,t,n,s);return o&&ac(o)&&o.catch(i=>{Xs(i,t,n)}),o}if(ce(e)){const o=[];for(let i=0;i>>1,o=Dt[s],i=ai(o);i=ai(n)?Dt.push(e):Dt.splice(Bm(t),0,e),e.flags|=1,L1()}}function L1(){_r||(_r=$1.then(I1))}function ri(e){ce(e)?vo.push(...e):gs&&e.id===-1?gs.splice(oo+1,0,e):e.flags&1||(vo.push(e),e.flags|=1),L1()}function Wu(e,t,n=Bn+1){for(;nai(n)-ai(s));if(vo.length=0,gs){gs.push(...t);return}for(gs=t,oo=0;ooe.id==null?e.flags&2?-1:1/0:e.id;function I1(e){try{for(Bn=0;Bnio.emit(o,...i)),Vi=[]):typeof window<"u"&&window.HTMLElement&&!((s=(n=window.navigator)==null?void 0:n.userAgent)!=null&&s.includes("jsdom"))?((t.__VUE_DEVTOOLS_HOOK_REPLAY__=t.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(i=>{P1(i,t)}),setTimeout(()=>{io||(t.__VUE_DEVTOOLS_HOOK_REPLAY__=null,Vi=[])},3e3)):Vi=[]}let Tt=null,aa=null;function li(e){const t=Tt;return Tt=e,aa=e&&e.type.__scopeId||null,t}function Nm(e){aa=e}function Vm(){aa=null}const Om=e=>O;function O(e,t=Tt,n){if(!t||e._n)return e;const s=(...o)=>{s._d&&fi(-1);const i=li(t);let r;try{r=e(...o)}finally{li(i),s._d&&fi(1)}return r};return s._n=!0,s._c=!0,s._d=!0,s}function et(e,t){if(Tt===null)return e;const n=Ei(Tt),s=e.dirs||(e.dirs=[]);for(let o=0;oe.__isTeleport,Go=e=>e&&(e.disabled||e.disabled===""),qu=e=>e&&(e.defer||e.defer===""),Ku=e=>typeof SVGElement<"u"&&e instanceof SVGElement,Yu=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,ll=(e,t)=>{const n=e&&e.to;return _e(n)?t?t(n):null:n},B1={name:"Teleport",__isTeleport:!0,process(e,t,n,s,o,i,r,a,c,u){const{mc:f,pc:d,pbc:h,o:{insert:m,querySelector:g,createText:v,createComment:k}}=u,b=Go(t.props);let{shapeFlag:C,children:y,dynamicChildren:_}=t;if(e==null){const x=t.el=v(""),P=t.anchor=v("");m(x,n,s),m(P,n,s);const V=(L,I)=>{C&16&&f(y,L,I,o,i,r,a,c)},E=()=>{const L=t.target=ll(t.props,g),I=N1(L,t,v,m);L&&(r!=="svg"&&Ku(L)?r="svg":r!=="mathml"&&Yu(L)&&(r="mathml"),o&&o.isCE&&(o.ce._teleportTargets||(o.ce._teleportTargets=new Set)).add(L),b||(V(L,I),ir(t,!1)))};b&&(V(n,P),ir(t,!0)),qu(t.props)?(t.el.__isMounted=!1,pt(()=>{E(),delete t.el.__isMounted},i)):E()}else{if(qu(t.props)&&e.el.__isMounted===!1){pt(()=>{B1.process(e,t,n,s,o,i,r,a,c,u)},i);return}t.el=e.el,t.targetStart=e.targetStart;const x=t.anchor=e.anchor,P=t.target=e.target,V=t.targetAnchor=e.targetAnchor,E=Go(e.props),L=E?n:P,I=E?x:V;if(r==="svg"||Ku(P)?r="svg":(r==="mathml"||Yu(P))&&(r="mathml"),_?(h(e.dynamicChildren,_,L,o,i,r,a),Ic(e,t,!0)):c||d(e,t,L,I,o,i,r,a,!1),b)E?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Oi(t,n,x,u,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const N=t.target=ll(t.props,g);N&&Oi(t,N,null,u,0)}else E&&Oi(t,P,V,u,1);ir(t,b)}},remove(e,t,n,{um:s,o:{remove:o}},i){const{shapeFlag:r,children:a,anchor:c,targetStart:u,targetAnchor:f,target:d,props:h}=e;if(d&&(o(u),o(f)),i&&o(c),r&16){const m=i||!Go(h);for(let g=0;g{e.isMounted=!0}),as(()=>{e.isUnmounting=!0}),e}const dn=[Function,Array],bc={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:dn,onEnter:dn,onAfterEnter:dn,onEnterCancelled:dn,onBeforeLeave:dn,onLeave:dn,onAfterLeave:dn,onLeaveCancelled:dn,onBeforeAppear:dn,onAppear:dn,onAfterAppear:dn,onAppearCancelled:dn},V1=e=>{const t=e.subTree;return t.component?V1(t.component):t},Rm={name:"BaseTransition",props:bc,setup(e,{slots:t}){const n=dt(),s=yc();return()=>{const o=t.default&&ca(t.default(),!0);if(!o||!o.length)return;const i=O1(o),r=Pe(e),{mode:a}=r;if(s.isLeaving)return Na(i);const c=Gu(i);if(!c)return Na(i);let u=ko(c,r,s,n,d=>u=d);c.type!==ut&&is(c,u);let f=n.subTree&&Gu(n.subTree);if(f&&f.type!==ut&&!Tn(f,c)&&V1(n).type!==ut){let d=ko(f,r,s,n);if(is(f,d),a==="out-in"&&c.type!==ut)return s.isLeaving=!0,d.afterLeave=()=>{s.isLeaving=!1,n.job.flags&8||n.update(),delete d.afterLeave,f=void 0},Na(i);a==="in-out"&&c.type!==ut?d.delayLeave=(h,m,g)=>{const v=R1(s,f);v[String(f.key)]=f,h[Gn]=()=>{m(),h[Gn]=void 0,delete u.delayedLeave,f=void 0},u.delayedLeave=()=>{g(),delete u.delayedLeave,f=void 0}}:f=void 0}else f&&(f=void 0);return i}}};function O1(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==ut){t=n;break}}return t}const D1=Rm;function R1(e,t){const{leavingVNodes:n}=e;let s=n.get(t.type);return s||(s=Object.create(null),n.set(t.type,s)),s}function ko(e,t,n,s,o){const{appear:i,mode:r,persisted:a=!1,onBeforeEnter:c,onEnter:u,onAfterEnter:f,onEnterCancelled:d,onBeforeLeave:h,onLeave:m,onAfterLeave:g,onLeaveCancelled:v,onBeforeAppear:k,onAppear:b,onAfterAppear:C,onAppearCancelled:y}=t,_=String(e.key),x=R1(n,e),P=(L,I)=>{L&&yn(L,s,9,I)},V=(L,I)=>{const N=I[1];P(L,I),ce(L)?L.every($=>$.length<=1)&&N():L.length<=1&&N()},E={mode:r,persisted:a,beforeEnter(L){let I=c;if(!n.isMounted)if(i)I=k||c;else return;L[Gn]&&L[Gn](!0);const N=x[_];N&&Tn(e,N)&&N.el[Gn]&&N.el[Gn](),P(I,[L])},enter(L){let I=u,N=f,$=d;if(!n.isMounted)if(i)I=b||u,N=C||f,$=y||d;else return;let U=!1;const q=L[Di]=J=>{U||(U=!0,J?P($,[L]):P(N,[L]),E.delayedLeave&&E.delayedLeave(),L[Di]=void 0)};I?V(I,[L,q]):q()},leave(L,I){const N=String(e.key);if(L[Di]&&L[Di](!0),n.isUnmounting)return I();P(h,[L]);let $=!1;const U=L[Gn]=q=>{$||($=!0,I(),q?P(v,[L]):P(g,[L]),L[Gn]=void 0,x[N]===e&&delete x[N])};x[N]=e,m?V(m,[L,U]):U()},clone(L){const I=ko(L,t,n,s,o);return o&&o(I),I}};return E}function Na(e){if(_i(e))return e=Rn(e),e.children=null,e}function Gu(e){if(!_i(e))return F1(e.type)&&e.children?O1(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&ye(n.default))return n.default()}}function is(e,t){e.shapeFlag&6&&e.component?(e.transition=t,is(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function ca(e,t=!1,n){let s=[],o=0;for(let i=0;i1)for(let i=0;in.value,set:i=>n.value=i})}return n}const Tr=new WeakMap;function yo(e,t,n,s,o=!1){if(ce(e)){e.forEach((g,v)=>yo(g,t&&(ce(t)?t[v]:t),n,s,o));return}if(_s(s)&&!o){s.shapeFlag&512&&s.type.__asyncResolved&&s.component.subTree.component&&yo(e,t,n,s.component.subTree);return}const i=s.shapeFlag&4?Ei(s.component):s.el,r=o?null:i,{i:a,r:c}=e,u=t&&t.r,f=a.refs===Le?a.refs={}:a.refs,d=a.setupState,h=Pe(d),m=d===Le?ao:g=>Oe(h,g);if(u!=null&&u!==c){if(Ju(t),_e(u))f[u]=null,m(u)&&(d[u]=null);else if(Ye(u)){u.value=null;const g=t;g.k&&(f[g.k]=null)}}if(ye(c))Po(c,a,12,[r,f]);else{const g=_e(c),v=Ye(c);if(g||v){const k=()=>{if(e.f){const b=g?m(c)?d[c]:f[c]:c.value;if(o)ce(b)&&rc(b,i);else if(ce(b))b.includes(i)||b.push(i);else if(g)f[c]=[i],m(c)&&(d[c]=f[c]);else{const C=[i];c.value=C,e.k&&(f[e.k]=C)}}else g?(f[c]=r,m(c)&&(d[c]=r)):v&&(c.value=r,e.k&&(f[e.k]=r))};if(r){const b=()=>{k(),Tr.delete(e)};b.id=-1,Tr.set(e,b),pt(b,n)}else Ju(e),k()}}}function Ju(e){const t=Tr.get(e);t&&(t.flags|=8,Tr.delete(e))}let Xu=!1;const to=()=>{Xu||(console.error("Hydration completed but contains mismatches."),Xu=!0)},Hm=e=>e.namespaceURI.includes("svg")&&e.tagName!=="foreignObject",zm=e=>e.namespaceURI.includes("MathML"),Ri=e=>{if(e.nodeType===1){if(Hm(e))return"svg";if(zm(e))return"mathml"}},lo=e=>e.nodeType===8;function jm(e){const{mt:t,p:n,o:{patchProp:s,createText:o,nextSibling:i,parentNode:r,remove:a,insert:c,createComment:u}}=e,f=(y,_)=>{if(!_.hasChildNodes()){n(null,y,_),Sr(),_._vnode=y;return}d(_.firstChild,y,null,null,null),Sr(),_._vnode=y},d=(y,_,x,P,V,E=!1)=>{E=E||!!_.dynamicChildren;const L=lo(y)&&y.data==="[",I=()=>v(y,_,x,P,V,L),{type:N,ref:$,shapeFlag:U,patchFlag:q}=_;let J=y.nodeType;_.el=y,q===-2&&(E=!1,_.dynamicChildren=null);let G=null;switch(N){case Ss:J!==3?_.children===""?(c(_.el=o(""),r(y),y),G=y):G=I():(y.data!==_.children&&(to(),y.data=_.children),G=i(y));break;case ut:C(y)?(G=i(y),b(_.el=y.content.firstChild,y,x)):J!==8||L?G=I():G=i(y);break;case Rs:if(L&&(y=i(y),J=y.nodeType),J===1||J===3){G=y;const ae=!_.children.length;for(let ne=0;ne<_.staticCount;ne++)ae&&(_.children+=G.nodeType===1?G.outerHTML:G.data),ne===_.staticCount-1&&(_.anchor=G),G=i(G);return L?i(G):G}else I();break;case Y:L?G=g(y,_,x,P,V,E):G=I();break;default:if(U&1)(J!==1||_.type.toLowerCase()!==y.tagName.toLowerCase())&&!C(y)?G=I():G=h(y,_,x,P,V,E);else if(U&6){_.slotScopeIds=V;const ae=r(y);if(L?G=k(y):lo(y)&&y.data==="teleport start"?G=k(y,y.data,"teleport end"):G=i(y),t(_,ae,null,x,P,Ri(ae),E),_s(_)&&!_.type.__asyncResolved){let ne;L?(ne=H(Y),ne.anchor=G?G.previousSibling:ae.lastChild):ne=y.nodeType===3?rt(""):H("div"),ne.el=y,_.component.subTree=ne}}else U&64?J!==8?G=I():G=_.type.hydrate(y,_,x,P,V,E,e,m):U&128&&(G=_.type.hydrate(y,_,x,P,Ri(r(y)),V,E,e,d))}return $!=null&&yo($,null,P,_),G},h=(y,_,x,P,V,E)=>{E=E||!!_.dynamicChildren;const{type:L,props:I,patchFlag:N,shapeFlag:$,dirs:U,transition:q}=_,J=L==="input"||L==="option";if(J||N!==-1){U&&Nn(_,null,x,"created");let G=!1;if(C(y)){G=h0(null,q)&&x&&x.vnode.props&&x.vnode.props.appear;const ne=y.content.firstChild;if(G){const he=ne.getAttribute("class");he&&(ne.$cls=he),q.beforeEnter(ne)}b(ne,y,x),_.el=y=ne}if($&16&&!(I&&(I.innerHTML||I.textContent))){let ne=m(y.firstChild,_,y,x,P,V,E);for(;ne;){Hi(y,1)||to();const he=ne;ne=ne.nextSibling,a(he)}}else if($&8){let ne=_.children;ne[0]===`
`&&(y.tagName==="PRE"||y.tagName==="TEXTAREA")&&(ne=ne.slice(1));const{textContent:he}=y;he!==ne&&he!==ne.replace(/\r\n|\r/g,`
-`)&&(Hi(y,0)||to(),y.textContent=_.children)}if(I){if(J||!E||N&48){const ne=y.tagName.includes("-");for(const he in I)(J&&(he.endsWith("value")||he==="indeterminate")||Ys(he)&&!ws(he)||he[0]==="."||ne)&&s(y,he,null,I[he],void 0,x)}else if(I.onClick)s(y,"onClick",null,I.onClick,void 0,x);else if(N&4&&Cs(I.style))for(const ne in I.style)I.style[ne]}let ae;(ae=I&&I.onVnodeBeforeMount)&&Ut(ae,x,_),U&&Nn(_,null,x,"beforeMount"),((ae=I&&I.onVnodeMounted)||U||G)&&C0(()=>{ae&&Ut(ae,x,_),G&&q.enter(y),U&&Nn(_,null,x,"mounted")},P)}return y.nextSibling},m=(y,_,x,P,V,E,L)=>{L=L||!!_.dynamicChildren;const I=_.children,N=I.length;for(let $=0;${const{slotScopeIds:L}=_;L&&(V=V?V.concat(L):L);const I=r(y),N=m(i(y),_,I,x,P,V,E);return N&&lo(N)&&N.data==="]"?i(_.anchor=N):(to(),c(_.anchor=u("]"),I,N),N)},v=(y,_,x,P,V,E)=>{if(Hi(y.parentElement,1)||to(),_.el=null,E){const N=k(y);for(;;){const $=i(y);if($&&$!==N)a($);else break}}const L=i(y),I=r(y);return a(y),n(null,_,I,L,x,P,Ri(I),V),x&&(x.vnode.el=_.el,pa(x,_.el)),L},k=(y,_="[",x="]")=>{let P=0;for(;y;)if(y=i(y),y&&lo(y)&&(y.data===_&&P++,y.data===x)){if(P===0)return i(y);P--}return y},b=(y,_,x)=>{const P=_.parentNode;P&&P.replaceChild(y,_);let V=x;for(;V;)V.vnode.el===_&&(V.vnode.el=V.subTree.el=y),V=V.parent},C=y=>y.nodeType===1&&y.tagName==="TEMPLATE";return[f,d]}const Qu="data-allow-mismatch",Um={0:"text",1:"children",2:"class",3:"style",4:"attribute"};function Hi(e,t){if(t===0||t===1)for(;e&&!e.hasAttribute(Qu);)e=e.parentElement;const n=e&&e.getAttribute(Qu);if(n==null)return!1;if(n==="")return!0;{const s=n.split(",");return t===0&&s.includes("children")?!0:s.includes(Um[t])}}const Wm=ea().requestIdleCallback||(e=>setTimeout(e,1)),qm=ea().cancelIdleCallback||(e=>clearTimeout(e)),Km=(e=1e4)=>t=>{const n=Wm(t,{timeout:e});return()=>qm(n)};function Ym(e){const{top:t,left:n,bottom:s,right:o}=e.getBoundingClientRect(),{innerHeight:i,innerWidth:r}=window;return(t>0&&t0&&s0&&n0&&o(t,n)=>{const s=new IntersectionObserver(o=>{for(const i of o)if(i.isIntersecting){s.disconnect(),t();break}},e);return n(o=>{if(o instanceof Element){if(Ym(o))return t(),s.disconnect(),!1;s.observe(o)}}),()=>s.disconnect()},Jm=e=>t=>{if(e){const n=matchMedia(e);if(n.matches)t();else return n.addEventListener("change",t,{once:!0}),()=>n.removeEventListener("change",t)}},Xm=(e=[])=>(t,n)=>{_e(e)&&(e=[e]);let s=!1;const o=r=>{s||(s=!0,i(),t(),r.target.dispatchEvent(new r.constructor(r.type,r)))},i=()=>{n(r=>{for(const a of e)r.removeEventListener(a,o)})};return n(r=>{for(const a of e)r.addEventListener(a,o,{once:!0})}),i};function Qm(e,t){if(lo(e)&&e.data==="["){let n=1,s=e.nextSibling;for(;s;){if(s.nodeType===1){if(t(s)===!1)break}else if(lo(s))if(s.data==="]"){if(--n===0)break}else s.data==="["&&n++;s=s.nextSibling}}else t(e)}const _s=e=>!!e.type.__asyncLoader;function wc(e){ye(e)&&(e={loader:e});const{loader:t,loadingComponent:n,errorComponent:s,delay:o=200,hydrate:i,timeout:r,suspensible:a=!0,onError:c}=e;let u=null,f,d=0;const h=()=>(d++,u=null,m()),m=()=>{let g;return u||(g=u=t().catch(v=>{if(v=v instanceof Error?v:new Error(String(v)),c)return new Promise((k,b)=>{c(v,()=>k(h()),()=>b(v),d+1)});throw v}).then(v=>g!==u&&u?u:(v&&(v.__esModule||v[Symbol.toStringTag]==="Module")&&(v=v.default),f=v,v)))};return z({name:"AsyncComponentWrapper",__asyncLoader:m,__asyncHydrate(g,v,k){let b=!1;(v.bu||(v.bu=[])).push(()=>b=!0);const C=()=>{b||k()},y=i?()=>{const _=i(C,x=>Qm(g,x));_&&(v.bum||(v.bum=[])).push(_)}:C;f?y():m().then(()=>!v.isUnmounted&&y())},get __asyncResolved(){return f},setup(){const g=St;if(kc(g),f)return()=>zi(f,g);const v=y=>{u=null,Xs(y,g,13,!s)};if(a&&g.suspense||wo)return m().then(y=>()=>zi(y,g)).catch(y=>(v(y),()=>s?H(s,{error:y}):null));const k=j(!1),b=j(),C=j(!!o);return o&&setTimeout(()=>{C.value=!1},o),r!=null&&setTimeout(()=>{if(!k.value&&!b.value){const y=new Error(`Async component timed out after ${r}ms.`);v(y),b.value=y}},r),m().then(()=>{k.value=!0,g.parent&&_i(g.parent.vnode)&&g.parent.update()}).catch(y=>{v(y),b.value=y}),()=>{if(k.value&&f)return zi(f,g);if(b.value&&s)return H(s,{error:b.value});if(n&&!C.value)return zi(n,g)}}})}function zi(e,t){const{ref:n,props:s,children:o,ce:i}=t.vnode,r=H(e,s,o);return r.ref=n,r.ce=i,delete t.vnode.ce,r}const _i=e=>e.type.__isKeepAlive,Zm={name:"KeepAlive",__isKeepAlive:!0,props:{include:[String,RegExp,Array],exclude:[String,RegExp,Array],max:[String,Number]},setup(e,{slots:t}){const n=dt(),s=n.ctx;if(!s.renderer)return()=>{const C=t.default&&t.default();return C&&C.length===1?C[0]:C};const o=new Map,i=new Set;let r=null;const a=n.suspense,{renderer:{p:c,m:u,um:f,o:{createElement:d}}}=s,h=d("div");s.activate=(C,y,_,x,P)=>{const V=C.component;u(C,y,_,0,a),c(V.vnode,C,y,_,V,a,x,C.slotScopeIds,P),pt(()=>{V.isDeactivated=!1,V.a&&mo(V.a);const E=C.props&&C.props.onVnodeMounted;E&&Ut(E,V.parent,C)},a)},s.deactivate=C=>{const y=C.component;xr(y.m),xr(y.a),u(C,h,null,1,a),pt(()=>{y.da&&mo(y.da);const _=C.props&&C.props.onVnodeUnmounted;_&&Ut(_,y.parent,C),y.isDeactivated=!0},a)};function m(C){Va(C),f(C,n,a,!0)}function g(C){o.forEach((y,_)=>{const x=bl(y.type);x&&!C(x)&&v(_)})}function v(C){const y=o.get(C);y&&(!r||!Tn(y,r))?m(y):r&&Va(r),o.delete(C),i.delete(C)}te(()=>[e.include,e.exclude],([C,y])=>{C&&g(_=>Wo(C,_)),y&&g(_=>!Wo(y,_))},{flush:"post",deep:!0});let k=null;const b=()=>{k!=null&&(Ar(n.subTree.type)?pt(()=>{o.set(k,ji(n.subTree))},n.subTree.suspense):o.set(k,ji(n.subTree)))};return be(b),Mo(b),as(()=>{o.forEach(C=>{const{subTree:y,suspense:_}=n,x=ji(y);if(C.type===x.type&&C.key===x.key){Va(x);const P=x.component.da;P&&pt(P,_);return}m(C)})}),()=>{if(k=null,!t.default)return r=null;const C=t.default(),y=C[0];if(C.length>1)return r=null,C;if(!Ln(y)||!(y.shapeFlag&4)&&!(y.shapeFlag&128))return r=null,y;let _=ji(y);if(_.type===ut)return r=null,_;const x=_.type,P=bl(_s(_)?_.type.__asyncResolved||{}:x),{include:V,exclude:E,max:L}=e;if(V&&(!P||!Wo(V,P))||E&&P&&Wo(E,P))return _.shapeFlag&=-257,r=_,y;const I=_.key==null?x:_.key,N=o.get(I);return _.el&&(_=Rn(_),y.shapeFlag&128&&(y.ssContent=_)),k=I,N?(_.el=N.el,_.component=N.component,_.transition&&is(_,_.transition),_.shapeFlag|=512,i.delete(I),i.add(I)):(i.add(I),L&&i.size>parseInt(L,10)&&v(i.values().next().value)),_.shapeFlag|=256,r=_,Ar(y.type)?y:_}}},eg=Zm;function Wo(e,t){return ce(e)?e.some(n=>Wo(n,t)):_e(e)?e.split(",").includes(t):x2(e)?(e.lastIndex=0,e.test(t)):!1}function j1(e,t){W1(e,"a",t)}function U1(e,t){W1(e,"da",t)}function W1(e,t,n=St){const s=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(ua(t,s,n),n){let o=n.parent;for(;o&&o.parent;)_i(o.parent.vnode)&&tg(s,t,n,o),o=o.parent}}function tg(e,t,n,s){const o=ua(t,e,s,!0);cn(()=>{rc(s[t],o)},n)}function Va(e){e.shapeFlag&=-257,e.shapeFlag&=-513}function ji(e){return e.shapeFlag&128?e.ssContent:e}function ua(e,t,n=St,s=!1){if(n){const o=n[e]||(n[e]=[]),i=t.__weh||(t.__weh=(...r)=>{ns();const a=qs(n),c=yn(t,n,e,r);return a(),ss(),c});return s?o.unshift(i):o.push(i),i}}const rs=e=>(t,n=St)=>{(!wo||e==="sp")&&ua(e,(...s)=>t(...s),n)},fa=rs("bm"),be=rs("m"),Cc=rs("bu"),Mo=rs("u"),as=rs("bum"),cn=rs("um"),q1=rs("sp"),K1=rs("rtg"),Y1=rs("rtc");function G1(e,t=St){ua("ec",e,t)}const _c="components",ng="directives";function un(e,t){return Sc(_c,e,!0,t)||e}const J1=Symbol.for("v-ndc");function Be(e){return _e(e)?Sc(_c,e,!1)||e:e||J1}function sg(e){return Sc(ng,e)}function Sc(e,t,n=!0,s=!1){const o=Tt||St;if(o){const i=o.type;if(e===_c){const a=bl(i,!1);if(a&&(a===t||a===tt(t)||a===Js(tt(t))))return i}const r=Zu(o[e]||i[e],t)||Zu(o.appContext[e],t);return!r&&s?i:r}}function Zu(e,t){return e&&(e[t]||e[tt(t)]||e[Js(tt(t))])}function le(e,t,n,s){let o;const i=n&&n[s],r=ce(e);if(r||_e(e)){const a=r&&Cs(e);let c=!1,u=!1;a&&(c=!an(e),u=os(e),e=sa(e)),o=new Array(e.length);for(let f=0,d=e.length;ft(a,c,void 0,i&&i[c]));else{const a=Object.keys(e);o=new Array(a.length);for(let c=0,u=a.length;c{const i=s.fn(...o);return i&&(i.key=s.key),i}:s.fn)}return e}function M(e,t,n={},s,o){if(Tt.ce||Tt.parent&&_s(Tt.parent)&&Tt.parent.ce){const u=Object.keys(n).length>0;return t!=="default"&&(n.name=t),p(),D(Y,null,[H("slot",n,s&&s())],u?-2:64)}let i=e[t];i&&i._c&&(i._d=!1),p();const r=i&&Tc(i(n)),a=n.key||r&&r.key,c=D(Y,{key:(a&&!Gt(a)?a:`_${t}`)+(!r&&s?"_fb":"")},r||(s?s():[]),r&&e._===1?64:-2);return!o&&c.scopeId&&(c.slotScopeIds=[c.scopeId+"-s"]),i&&i._c&&(i._d=!0),c}function Tc(e){return e.some(t=>Ln(t)?!(t.type===ut||t.type===Y&&!Tc(t.children)):!0)?e:null}function Ec(e,t){const n={};for(const s in e)n[t&&/[A-Z]/.test(s)?`on:${s}`:po(s)]=e[s];return n}const cl=e=>e?A0(e)?Ei(e):cl(e.parent):null,Jo=Ie(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>cl(e.parent),$root:e=>cl(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>xc(e),$forceUpdate:e=>e.f||(e.f=()=>{vc(e.update)}),$nextTick:e=>e.n||(e.n=ze.bind(e.proxy)),$watch:e=>Ag.bind(e)}),Oa=(e,t)=>e!==Le&&!e.__isScriptSetup&&Oe(e,t),ul={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:s,data:o,props:i,accessCache:r,type:a,appContext:c}=e;let u;if(t[0]!=="$"){const m=r[t];if(m!==void 0)switch(m){case 1:return s[t];case 2:return o[t];case 4:return n[t];case 3:return i[t]}else{if(Oa(s,t))return r[t]=1,s[t];if(o!==Le&&Oe(o,t))return r[t]=2,o[t];if((u=e.propsOptions[0])&&Oe(u,t))return r[t]=3,i[t];if(n!==Le&&Oe(n,t))return r[t]=4,n[t];fl&&(r[t]=0)}}const f=Jo[t];let d,h;if(f)return t==="$attrs"&&Pt(e.attrs,"get",""),f(e);if((d=a.__cssModules)&&(d=d[t]))return d;if(n!==Le&&Oe(n,t))return r[t]=4,n[t];if(h=c.config.globalProperties,Oe(h,t))return h[t]},set({_:e},t,n){const{data:s,setupState:o,ctx:i}=e;return Oa(o,t)?(o[t]=n,!0):s!==Le&&Oe(s,t)?(s[t]=n,!0):Oe(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(i[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:s,appContext:o,propsOptions:i,type:r}},a){let c,u;return!!(n[a]||e!==Le&&a[0]!=="$"&&Oe(e,a)||Oa(t,a)||(c=i[0])&&Oe(c,a)||Oe(s,a)||Oe(Jo,a)||Oe(o.config.globalProperties,a)||(u=r.__cssModules)&&u[a])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Oe(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}},og=Ie({},ul,{get(e,t){if(t!==Symbol.unscopables)return ul.get(e,t,e)},has(e,t){return t[0]!=="_"&&!M2(t)}});function ig(){return null}function rg(){return null}function ag(e){}function lg(e){}function cg(){return null}function ug(){}function fg(e,t){return null}function Si(){return X1().slots}function dg(){return X1().attrs}function X1(e){const t=dt();return t.setupContext||(t.setupContext=I0(t))}function ci(e){return ce(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}function Q1(e,t){const n=ci(e);for(const s in t){if(s.startsWith("__skip"))continue;let o=n[s];o?ce(o)||ye(o)?o=n[s]={type:o,default:t[s]}:o.default=t[s]:o===null&&(o=n[s]={default:t[s]}),o&&t[`__skip_${s}`]&&(o.skipFactory=!0)}return n}function $n(e,t){return!e||!t?e||t:ce(e)&&ce(t)?e.concat(t):Ie({},ci(e),ci(t))}function Z1(e,t){const n={};for(const s in e)t.includes(s)||Object.defineProperty(n,s,{enumerable:!0,get:()=>e[s]});return n}function hg(e){const t=dt();let n=e();return gl(),ac(n)&&(n=n.catch(s=>{throw qs(t),s})),[n,()=>qs(t)]}let fl=!0;function pg(e){const t=xc(e),n=e.proxy,s=e.ctx;fl=!1,t.beforeCreate&&ef(t.beforeCreate,e,"bc");const{data:o,computed:i,methods:r,watch:a,provide:c,inject:u,created:f,beforeMount:d,mounted:h,beforeUpdate:m,updated:g,activated:v,deactivated:k,beforeDestroy:b,beforeUnmount:C,destroyed:y,unmounted:_,render:x,renderTracked:P,renderTriggered:V,errorCaptured:E,serverPrefetch:L,expose:I,inheritAttrs:N,components:$,directives:U,filters:q}=t;if(u&&mg(u,s,null),r)for(const ae in r){const ne=r[ae];ye(ne)&&(s[ae]=ne.bind(n))}if(o){const ae=o.call(n,n);Ue(ae)&&(e.data=Dn(ae))}if(fl=!0,i)for(const ae in i){const ne=i[ae],he=ye(ne)?ne.bind(n,n):ye(ne.get)?ne.get.bind(n,n):Ht,st=!ye(ne)&&ye(ne.set)?ne.set.bind(n):Ht,je=F({get:he,set:st});Object.defineProperty(s,ae,{enumerable:!0,configurable:!0,get:()=>je.value,set:yt=>je.value=yt})}if(a)for(const ae in a)e0(a[ae],s,n,ae);if(c){const ae=ye(c)?c.call(n):c;Reflect.ownKeys(ae).forEach(ne=>{In(ne,ae[ne])})}f&&ef(f,e,"c");function G(ae,ne){ce(ne)?ne.forEach(he=>ae(he.bind(n))):ne&&ae(ne.bind(n))}if(G(fa,d),G(be,h),G(Cc,m),G(Mo,g),G(j1,v),G(U1,k),G(G1,E),G(Y1,P),G(K1,V),G(as,C),G(cn,_),G(q1,L),ce(I))if(I.length){const ae=e.exposed||(e.exposed={});I.forEach(ne=>{Object.defineProperty(ae,ne,{get:()=>n[ne],set:he=>n[ne]=he,enumerable:!0})})}else e.exposed||(e.exposed={});x&&e.render===Ht&&(e.render=x),N!=null&&(e.inheritAttrs=N),$&&(e.components=$),U&&(e.directives=U),L&&kc(e)}function mg(e,t,n=Ht){ce(e)&&(e=dl(e));for(const s in e){const o=e[s];let i;Ue(o)?"default"in o?i=qe(o.from||s,o.default,!0):i=qe(o.from||s):i=qe(o),Ye(i)?Object.defineProperty(t,s,{enumerable:!0,configurable:!0,get:()=>i.value,set:r=>i.value=r}):t[s]=i}}function ef(e,t,n){yn(ce(e)?e.map(s=>s.bind(t.proxy)):e.bind(t.proxy),t,n)}function e0(e,t,n,s){let o=s.includes(".")?y0(n,s):()=>n[s];if(_e(e)){const i=t[e];ye(i)&&te(o,i)}else if(ye(e))te(o,e.bind(n));else if(Ue(e))if(ce(e))e.forEach(i=>e0(i,t,n,s));else{const i=ye(e.handler)?e.handler.bind(n):t[e.handler];ye(i)&&te(o,i,e)}}function xc(e){const t=e.type,{mixins:n,extends:s}=t,{mixins:o,optionsCache:i,config:{optionMergeStrategies:r}}=e.appContext,a=i.get(t);let c;return a?c=a:!o.length&&!n&&!s?c=t:(c={},o.length&&o.forEach(u=>Er(c,u,r,!0)),Er(c,t,r)),Ue(t)&&i.set(t,c),c}function Er(e,t,n,s=!1){const{mixins:o,extends:i}=t;i&&Er(e,i,n,!0),o&&o.forEach(r=>Er(e,r,n,!0));for(const r in t)if(!(s&&r==="expose")){const a=gg[r]||n&&n[r];e[r]=a?a(e[r],t[r]):t[r]}return e}const gg={data:tf,props:nf,emits:nf,methods:qo,computed:qo,beforeCreate:Vt,created:Vt,beforeMount:Vt,mounted:Vt,beforeUpdate:Vt,updated:Vt,beforeDestroy:Vt,beforeUnmount:Vt,destroyed:Vt,unmounted:Vt,activated:Vt,deactivated:Vt,errorCaptured:Vt,serverPrefetch:Vt,components:qo,directives:qo,watch:yg,provide:tf,inject:vg};function tf(e,t){return t?e?function(){return Ie(ye(e)?e.call(this,this):e,ye(t)?t.call(this,this):t)}:t:e}function vg(e,t){return qo(dl(e),dl(t))}function dl(e){if(ce(e)){const t={};for(let n=0;n1)return n&&ye(t)?t.call(s&&s.proxy):t}}function Ac(){return!!(dt()||Ds)}const n0={},s0=()=>Object.create(n0),o0=e=>Object.getPrototypeOf(e)===n0;function wg(e,t,n,s=!1){const o={},i=s0();e.propsDefaults=Object.create(null),i0(e,t,o,i);for(const r in e.propsOptions[0])r in o||(o[r]=void 0);n?e.props=s?o:pc(o):e.type.props?e.props=o:e.props=i,e.attrs=i}function Cg(e,t,n,s){const{props:o,attrs:i,vnode:{patchFlag:r}}=e,a=Pe(o),[c]=e.propsOptions;let u=!1;if((s||r>0)&&!(r&16)){if(r&8){const f=e.vnode.dynamicProps;for(let d=0;d{c=!0;const[h,m]=r0(d,t,!0);Ie(r,h),m&&a.push(...m)};!n&&t.mixins.length&&t.mixins.forEach(f),e.extends&&f(e.extends),e.mixins&&e.mixins.forEach(f)}if(!i&&!c)return Ue(e)&&s.set(e,fo),fo;if(ce(i))for(let f=0;fe==="_"||e==="_ctx"||e==="$stable",Lc=e=>ce(e)?e.map(qt):[qt(e)],Sg=(e,t,n)=>{if(t._n)return t;const s=O((...o)=>Lc(t(...o)),n);return s._c=!1,s},a0=(e,t,n)=>{const s=e._ctx;for(const o in e){if($c(o))continue;const i=e[o];if(ye(i))t[o]=Sg(o,i,s);else if(i!=null){const r=Lc(i);t[o]=()=>r}}},l0=(e,t)=>{const n=Lc(t);e.slots.default=()=>n},c0=(e,t,n)=>{for(const s in t)(n||!$c(s))&&(e[s]=t[s])},Tg=(e,t,n)=>{const s=e.slots=s0();if(e.vnode.shapeFlag&32){const o=t._;o?(c0(s,t,n),n&&s1(s,"_",o,!0)):a0(t,s)}else t&&l0(e,t)},Eg=(e,t,n)=>{const{vnode:s,slots:o}=e;let i=!0,r=Le;if(s.shapeFlag&32){const a=t._;a?n&&a===1?i=!1:c0(o,t,n):(i=!t.$stable,a0(t,o)),r=t}else t&&(l0(e,t),r={default:1});if(i)for(const a in o)!$c(a)&&r[a]==null&&delete o[a]},pt=C0;function u0(e){return d0(e)}function f0(e){return d0(e,jm)}function d0(e,t){const n=ea();n.__VUE__=!0;const{insert:s,remove:o,patchProp:i,createElement:r,createText:a,createComment:c,setText:u,setElementText:f,parentNode:d,nextSibling:h,setScopeId:m=Ht,insertStaticContent:g}=e,v=(B,R,K,ee=null,X=null,Q=null,re=void 0,oe=null,se=!!R.dynamicChildren)=>{if(B===R)return;B&&!Tn(B,R)&&(ee=Ne(B),yt(B,X,Q,!0),B=null),R.patchFlag===-2&&(se=!1,R.dynamicChildren=null);const{type:Z,ref:ve,shapeFlag:ue}=R;switch(Z){case Ss:k(B,R,K,ee);break;case ut:b(B,R,K,ee);break;case Rs:B==null&&C(R,K,ee,re);break;case Y:$(B,R,K,ee,X,Q,re,oe,se);break;default:ue&1?x(B,R,K,ee,X,Q,re,oe,se):ue&6?U(B,R,K,ee,X,Q,re,oe,se):(ue&64||ue&128)&&Z.process(B,R,K,ee,X,Q,re,oe,se,bt)}ve!=null&&X?yo(ve,B&&B.ref,Q,R||B,!R):ve==null&&B&&B.ref!=null&&yo(B.ref,null,Q,B,!0)},k=(B,R,K,ee)=>{if(B==null)s(R.el=a(R.children),K,ee);else{const X=R.el=B.el;R.children!==B.children&&u(X,R.children)}},b=(B,R,K,ee)=>{B==null?s(R.el=c(R.children||""),K,ee):R.el=B.el},C=(B,R,K,ee)=>{[B.el,B.anchor]=g(B.children,R,K,ee,B.el,B.anchor)},y=({el:B,anchor:R},K,ee)=>{let X;for(;B&&B!==R;)X=h(B),s(B,K,ee),B=X;s(R,K,ee)},_=({el:B,anchor:R})=>{let K;for(;B&&B!==R;)K=h(B),o(B),B=K;o(R)},x=(B,R,K,ee,X,Q,re,oe,se)=>{if(R.type==="svg"?re="svg":R.type==="math"&&(re="mathml"),B==null)P(R,K,ee,X,Q,re,oe,se);else{const Z=B.el&&B.el._isVueCE?B.el:null;try{Z&&Z._beginPatch(),L(B,R,X,Q,re,oe,se)}finally{Z&&Z._endPatch()}}},P=(B,R,K,ee,X,Q,re,oe)=>{let se,Z;const{props:ve,shapeFlag:ue,transition:pe,dirs:Ce}=B;if(se=B.el=r(B.type,Q,ve&&ve.is,ve),ue&8?f(se,B.children):ue&16&&E(B.children,se,null,ee,X,Da(B,Q),re,oe),Ce&&Nn(B,null,ee,"created"),V(se,B,B.scopeId,re,ee),ve){for(const Xe in ve)Xe!=="value"&&!ws(Xe)&&i(se,Xe,null,ve[Xe],Q,ee);"value"in ve&&i(se,"value",null,ve.value,Q),(Z=ve.onVnodeBeforeMount)&&Ut(Z,ee,B)}Ce&&Nn(B,null,ee,"beforeMount");const Me=h0(X,pe);Me&&pe.beforeEnter(se),s(se,R,K),((Z=ve&&ve.onVnodeMounted)||Me||Ce)&&pt(()=>{Z&&Ut(Z,ee,B),Me&&pe.enter(se),Ce&&Nn(B,null,ee,"mounted")},X)},V=(B,R,K,ee,X)=>{if(K&&m(B,K),ee)for(let Q=0;Q{for(let Z=se;Z{const oe=R.el=B.el;let{patchFlag:se,dynamicChildren:Z,dirs:ve}=R;se|=B.patchFlag&16;const ue=B.props||Le,pe=R.props||Le;let Ce;if(K&&Ps(K,!1),(Ce=pe.onVnodeBeforeUpdate)&&Ut(Ce,K,R,B),ve&&Nn(R,B,K,"beforeUpdate"),K&&Ps(K,!0),(ue.innerHTML&&pe.innerHTML==null||ue.textContent&&pe.textContent==null)&&f(oe,""),Z?I(B.dynamicChildren,Z,oe,K,ee,Da(R,X),Q):re||ne(B,R,oe,null,K,ee,Da(R,X),Q,!1),se>0){if(se&16)N(oe,ue,pe,K,X);else if(se&2&&ue.class!==pe.class&&i(oe,"class",null,pe.class,X),se&4&&i(oe,"style",ue.style,pe.style,X),se&8){const Me=R.dynamicProps;for(let Xe=0;Xe{Ce&&Ut(Ce,K,R,B),ve&&Nn(R,B,K,"updated")},ee)},I=(B,R,K,ee,X,Q,re)=>{for(let oe=0;oe{if(R!==K){if(R!==Le)for(const Q in R)!ws(Q)&&!(Q in K)&&i(B,Q,R[Q],null,X,ee);for(const Q in K){if(ws(Q))continue;const re=K[Q],oe=R[Q];re!==oe&&Q!=="value"&&i(B,Q,oe,re,X,ee)}"value"in K&&i(B,"value",R.value,K.value,X)}},$=(B,R,K,ee,X,Q,re,oe,se)=>{const Z=R.el=B?B.el:a(""),ve=R.anchor=B?B.anchor:a("");let{patchFlag:ue,dynamicChildren:pe,slotScopeIds:Ce}=R;Ce&&(oe=oe?oe.concat(Ce):Ce),B==null?(s(Z,K,ee),s(ve,K,ee),E(R.children||[],K,ve,X,Q,re,oe,se)):ue>0&&ue&64&&pe&&B.dynamicChildren?(I(B.dynamicChildren,pe,K,X,Q,re,oe),(R.key!=null||X&&R===X.subTree)&&Ic(B,R,!0)):ne(B,R,K,ve,X,Q,re,oe,se)},U=(B,R,K,ee,X,Q,re,oe,se)=>{R.slotScopeIds=oe,B==null?R.shapeFlag&512?X.ctx.activate(R,K,ee,re,se):q(R,K,ee,X,Q,re,se):J(B,R,se)},q=(B,R,K,ee,X,Q,re)=>{const oe=B.component=x0(B,ee,X);if(_i(B)&&(oe.ctx.renderer=bt),$0(oe,!1,re),oe.asyncDep){if(X&&X.registerDep(oe,G,re),!B.el){const se=oe.subTree=H(ut);b(null,se,R,K),B.placeholder=se.el}}else G(oe,B,R,K,X,Q,re)},J=(B,R,K)=>{const ee=R.component=B.component;if(Fg(B,R,K))if(ee.asyncDep&&!ee.asyncResolved){ae(ee,R,K);return}else ee.next=R,ee.update();else R.el=B.el,ee.vnode=R},G=(B,R,K,ee,X,Q,re)=>{const oe=()=>{if(B.isMounted){let{next:ue,bu:pe,u:Ce,parent:Me,vnode:Xe}=B;{const Zt=p0(B);if(Zt){ue&&(ue.el=Xe.el,ae(B,ue,re)),Zt.asyncDep.then(()=>{B.isUnmounted||oe()});return}}let We=ue,zt;Ps(B,!1),ue?(ue.el=Xe.el,ae(B,ue,re)):ue=Xe,pe&&mo(pe),(zt=ue.props&&ue.props.onVnodeBeforeUpdate)&&Ut(zt,Me,ue,Xe),Ps(B,!0);const Et=rr(B),wn=B.subTree;B.subTree=Et,v(wn,Et,d(wn.el),Ne(wn),B,X,Q),ue.el=Et.el,We===null&&pa(B,Et.el),Ce&&pt(Ce,X),(zt=ue.props&&ue.props.onVnodeUpdated)&&pt(()=>Ut(zt,Me,ue,Xe),X)}else{let ue;const{el:pe,props:Ce}=R,{bm:Me,m:Xe,parent:We,root:zt,type:Et}=B,wn=_s(R);if(Ps(B,!1),Me&&mo(Me),!wn&&(ue=Ce&&Ce.onVnodeBeforeMount)&&Ut(ue,We,R),Ps(B,!0),pe&&Qt){const Zt=()=>{B.subTree=rr(B),Qt(pe,B.subTree,B,X,null)};wn&&Et.__asyncHydrate?Et.__asyncHydrate(pe,B,Zt):Zt()}else{zt.ce&&zt.ce._def.shadowRoot!==!1&&zt.ce._injectChildStyle(Et);const Zt=B.subTree=rr(B);v(null,Zt,K,ee,B,X,Q),R.el=Zt.el}if(Xe&&pt(Xe,X),!wn&&(ue=Ce&&Ce.onVnodeMounted)){const Zt=R;pt(()=>Ut(ue,We,Zt),X)}(R.shapeFlag&256||We&&_s(We.vnode)&&We.vnode.shapeFlag&256)&&B.a&&pt(B.a,X),B.isMounted=!0,R=K=ee=null}};B.scope.on();const se=B.effect=new si(oe);B.scope.off();const Z=B.update=se.run.bind(se),ve=B.job=se.runIfDirty.bind(se);ve.i=B,ve.id=B.uid,se.scheduler=()=>vc(ve),Ps(B,!0),Z()},ae=(B,R,K)=>{R.component=B;const ee=B.vnode.props;B.vnode=R,B.next=null,Cg(B,R.props,ee,K),Eg(B,R.children,K),ns(),Wu(B),ss()},ne=(B,R,K,ee,X,Q,re,oe,se=!1)=>{const Z=B&&B.children,ve=B?B.shapeFlag:0,ue=R.children,{patchFlag:pe,shapeFlag:Ce}=R;if(pe>0){if(pe&128){st(Z,ue,K,ee,X,Q,re,oe,se);return}else if(pe&256){he(Z,ue,K,ee,X,Q,re,oe,se);return}}Ce&8?(ve&16&&we(Z,X,Q),ue!==Z&&f(K,ue)):ve&16?Ce&16?st(Z,ue,K,ee,X,Q,re,oe,se):we(Z,X,Q,!0):(ve&8&&f(K,""),Ce&16&&E(ue,K,ee,X,Q,re,oe,se))},he=(B,R,K,ee,X,Q,re,oe,se)=>{B=B||fo,R=R||fo;const Z=B.length,ve=R.length,ue=Math.min(Z,ve);let pe;for(pe=0;peve?we(B,X,Q,!0,!1,ue):E(R,K,ee,X,Q,re,oe,se,ue)},st=(B,R,K,ee,X,Q,re,oe,se)=>{let Z=0;const ve=R.length;let ue=B.length-1,pe=ve-1;for(;Z<=ue&&Z<=pe;){const Ce=B[Z],Me=R[Z]=se?vs(R[Z]):qt(R[Z]);if(Tn(Ce,Me))v(Ce,Me,K,null,X,Q,re,oe,se);else break;Z++}for(;Z<=ue&&Z<=pe;){const Ce=B[ue],Me=R[pe]=se?vs(R[pe]):qt(R[pe]);if(Tn(Ce,Me))v(Ce,Me,K,null,X,Q,re,oe,se);else break;ue--,pe--}if(Z>ue){if(Z<=pe){const Ce=pe+1,Me=Cepe)for(;Z<=ue;)yt(B[Z],X,Q,!0),Z++;else{const Ce=Z,Me=Z,Xe=new Map;for(Z=Me;Z<=pe;Z++){const en=R[Z]=se?vs(R[Z]):qt(R[Z]);en.key!=null&&Xe.set(en.key,Z)}let We,zt=0;const Et=pe-Me+1;let wn=!1,Zt=0;const Do=new Array(Et);for(Z=0;Z=Et){yt(en,X,Q,!0);continue}let Mn;if(en.key!=null)Mn=Xe.get(en.key);else for(We=Me;We<=pe;We++)if(Do[We-Me]===0&&Tn(en,R[We])){Mn=We;break}Mn===void 0?yt(en,X,Q,!0):(Do[Mn-Me]=Z+1,Mn>=Zt?Zt=Mn:wn=!0,v(en,R[Mn],K,null,X,Q,re,oe,se),zt++)}const Ou=wn?xg(Do):fo;for(We=Ou.length-1,Z=Et-1;Z>=0;Z--){const en=Me+Z,Mn=R[en],Du=R[en+1],Ru=en+1{const{el:Q,type:re,transition:oe,children:se,shapeFlag:Z}=B;if(Z&6){je(B.component.subTree,R,K,ee);return}if(Z&128){B.suspense.move(R,K,ee);return}if(Z&64){re.move(B,R,K,bt);return}if(re===Y){s(Q,R,K);for(let ue=0;ueoe.enter(Q),X);else{const{leave:ue,delayLeave:pe,afterLeave:Ce}=oe,Me=()=>{B.ctx.isUnmounted?o(Q):s(Q,R,K)},Xe=()=>{Q._isLeaving&&Q[Gn](!0),ue(Q,()=>{Me(),Ce&&Ce()})};pe?pe(Q,Me,Xe):Xe()}else s(Q,R,K)},yt=(B,R,K,ee=!1,X=!1)=>{const{type:Q,props:re,ref:oe,children:se,dynamicChildren:Z,shapeFlag:ve,patchFlag:ue,dirs:pe,cacheIndex:Ce}=B;if(ue===-2&&(X=!1),oe!=null&&(ns(),yo(oe,null,K,B,!0),ss()),Ce!=null&&(R.renderCache[Ce]=void 0),ve&256){R.ctx.deactivate(B);return}const Me=ve&1&&pe,Xe=!_s(B);let We;if(Xe&&(We=re&&re.onVnodeBeforeUnmount)&&Ut(We,R,B),ve&6)Zs(B.component,K,ee);else{if(ve&128){B.suspense.unmount(K,ee);return}Me&&Nn(B,null,R,"beforeUnmount"),ve&64?B.type.remove(B,R,K,bt,ee):Z&&!Z.hasOnce&&(Q!==Y||ue>0&&ue&64)?we(Z,R,K,!1,!0):(Q===Y&&ue&384||!X&&ve&16)&&we(se,R,K),ee&&Un(B)}(Xe&&(We=re&&re.onVnodeUnmounted)||Me)&&pt(()=>{We&&Ut(We,R,B),Me&&Nn(B,null,R,"unmounted")},K)},Un=B=>{const{type:R,el:K,anchor:ee,transition:X}=B;if(R===Y){cs(K,ee);return}if(R===Rs){_(B);return}const Q=()=>{o(K),X&&!X.persisted&&X.afterLeave&&X.afterLeave()};if(B.shapeFlag&1&&X&&!X.persisted){const{leave:re,delayLeave:oe}=X,se=()=>re(K,Q);oe?oe(B.el,Q,se):se()}else Q()},cs=(B,R)=>{let K;for(;B!==R;)K=h(B),o(B),B=K;o(R)},Zs=(B,R,K)=>{const{bum:ee,scope:X,job:Q,subTree:re,um:oe,m:se,a:Z}=B;xr(se),xr(Z),ee&&mo(ee),X.stop(),Q&&(Q.flags|=8,yt(re,B,R,K)),oe&&pt(oe,R),pt(()=>{B.isUnmounted=!0},R)},we=(B,R,K,ee=!1,X=!1,Q=0)=>{for(let re=Q;re{if(B.shapeFlag&6)return Ne(B.component.subTree);if(B.shapeFlag&128)return B.suspense.next();const R=h(B.anchor||B.el),K=R&&R[M1];return K?h(K):R};let Ke=!1;const gt=(B,R,K)=>{B==null?R._vnode&&yt(R._vnode,null,null,!0):v(R._vnode||null,B,R,null,null,null,K),R._vnode=B,Ke||(Ke=!0,Wu(),Sr(),Ke=!1)},bt={p:v,um:yt,m:je,r:Un,mt:q,mc:E,pc:ne,pbc:I,n:Ne,o:e};let Nt,Qt;return t&&([Nt,Qt]=t(bt)),{render:gt,hydrate:Nt,createApp:kg(gt,Nt)}}function Da({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Ps({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function h0(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Ic(e,t,n=!1){const s=e.children,o=t.children;if(ce(s)&&ce(o))for(let i=0;i>1,e[n[a]]0&&(t[s]=n[i-1]),n[i]=s)}}for(i=n.length,r=n[i-1];i-- >0;)n[i]=r,r=t[r];return n}function p0(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:p0(t)}function xr(e){if(e)for(let t=0;tqe(m0);function zn(e,t){return Ti(e,null,t)}function da(e,t){return Ti(e,null,{flush:"post"})}function v0(e,t){return Ti(e,null,{flush:"sync"})}function te(e,t,n){return Ti(e,t,n)}function Ti(e,t,n=Le){const{immediate:s,deep:o,flush:i,once:r}=n,a=Ie({},n),c=t&&s||!t&&i!=="post";let u;if(wo){if(i==="sync"){const m=g0();u=m.__watcherHandles||(m.__watcherHandles=[])}else if(!c){const m=()=>{};return m.stop=Ht,m.resume=Ht,m.pause=Ht,m}}const f=St;a.call=(m,g,v)=>yn(m,f,g,v);let d=!1;i==="post"?a.scheduler=m=>{pt(m,f&&f.suspense)}:i!=="sync"&&(d=!0,a.scheduler=(m,g)=>{g?m():vc(m)}),a.augmentJob=m=>{t&&(m.flags|=4),d&&(m.flags|=2,f&&(m.id=f.uid,m.i=f))};const h=Am(e,t,a);return wo&&(u?u.push(h):c&&h()),h}function Ag(e,t,n){const s=this.proxy,o=_e(e)?e.includes(".")?y0(s,e):()=>s[e]:e.bind(s,s);let i;ye(t)?i=t:(i=t.handler,n=t);const r=qs(this),a=Ti(o,i.bind(s),n);return r(),a}function y0(e,t){const n=t.split(".");return()=>{let s=e;for(let o=0;o{let f,d=Le,h;return v0(()=>{const m=e[o];Ot(f,m)&&(f=m,u())}),{get(){return c(),n.get?n.get(f):f},set(m){const g=n.set?n.set(m):m;if(!Ot(g,f)&&!(d!==Le&&Ot(m,d)))return;const v=s.vnode.props;v&&(t in v||o in v||i in v)&&(`onUpdate:${t}`in v||`onUpdate:${o}`in v||`onUpdate:${i}`in v)||(f=m,u()),s.emit(`update:${t}`,g),Ot(m,g)&&Ot(m,d)&&!Ot(g,h)&&u(),d=m,h=g}}});return a[Symbol.iterator]=()=>{let c=0;return{next(){return c<2?{value:c++?r||Le:a,done:!1}:{done:!0}}}},a}const b0=(e,t)=>t==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${tt(t)}Modifiers`]||e[`${Kt(t)}Modifiers`];function $g(e,t,...n){if(e.isUnmounted)return;const s=e.vnode.props||Le;let o=n;const i=t.startsWith("update:"),r=i&&b0(s,t.slice(7));r&&(r.trim&&(o=n.map(f=>_e(f)?f.trim():f)),r.number&&(o=n.map(Zr)));let a,c=s[a=po(t)]||s[a=po(tt(t))];!c&&i&&(c=s[a=po(Kt(t))]),c&&yn(c,e,6,o);const u=s[a+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[a])return;e.emitted[a]=!0,yn(u,e,6,o)}}const Lg=new WeakMap;function k0(e,t,n=!1){const s=n?Lg:t.emitsCache,o=s.get(e);if(o!==void 0)return o;const i=e.emits;let r={},a=!1;if(!ye(e)){const c=u=>{const f=k0(u,t,!0);f&&(a=!0,Ie(r,f))};!n&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!i&&!a?(Ue(e)&&s.set(e,null),null):(ce(i)?i.forEach(c=>r[c]=null):Ie(r,i),Ue(e)&&s.set(e,r),r)}function ha(e,t){return!e||!Ys(t)?!1:(t=t.slice(2).replace(/Once$/,""),Oe(e,t[0].toLowerCase()+t.slice(1))||Oe(e,Kt(t))||Oe(e,t))}function rr(e){const{type:t,vnode:n,proxy:s,withProxy:o,propsOptions:[i],slots:r,attrs:a,emit:c,render:u,renderCache:f,props:d,data:h,setupState:m,ctx:g,inheritAttrs:v}=e,k=li(e);let b,C;try{if(n.shapeFlag&4){const _=o||s,x=_;b=qt(u.call(x,_,f,d,m,h,g)),C=a}else{const _=t;b=qt(_.length>1?_(d,{attrs:a,slots:r,emit:c}):_(d,null)),C=t.props?a:Pg(a)}}catch(_){Xo.length=0,Xs(_,e,1),b=H(ut)}let y=b;if(C&&v!==!1){const _=Object.keys(C),{shapeFlag:x}=y;_.length&&x&7&&(i&&_.some(ic)&&(C=Mg(C,i)),y=Rn(y,C,!1,!0))}return n.dirs&&(y=Rn(y,null,!1,!0),y.dirs=y.dirs?y.dirs.concat(n.dirs):n.dirs),n.transition&&is(y,n.transition),b=y,li(k),b}function Ig(e,t=!0){let n;for(let s=0;s{let t;for(const n in e)(n==="class"||n==="style"||Ys(n))&&((t||(t={}))[n]=e[n]);return t},Mg=(e,t)=>{const n={};for(const s in e)(!ic(s)||!(s.slice(9)in t))&&(n[s]=e[s]);return n};function Fg(e,t,n){const{props:s,children:o,component:i}=e,{props:r,children:a,patchFlag:c}=t,u=i.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&c>=0){if(c&1024)return!0;if(c&16)return s?of(s,r,u):!!r;if(c&8){const f=t.dynamicProps;for(let d=0;de.__isSuspense;let pl=0;const Bg={name:"Suspense",__isSuspense:!0,process(e,t,n,s,o,i,r,a,c,u){if(e==null)Vg(t,n,s,o,i,r,a,c,u);else{if(i&&i.deps>0&&!e.suspense.isInFallback){t.suspense=e.suspense,t.suspense.vnode=t,t.el=e.el;return}Og(e,t,n,s,o,r,a,c,u)}},hydrate:Dg,normalize:Rg},Ng=Bg;function ui(e,t){const n=e.props&&e.props[t];ye(n)&&n()}function Vg(e,t,n,s,o,i,r,a,c){const{p:u,o:{createElement:f}}=c,d=f("div"),h=e.suspense=w0(e,o,s,t,d,n,i,r,a,c);u(null,h.pendingBranch=e.ssContent,d,null,s,h,i,r),h.deps>0?(ui(e,"onPending"),ui(e,"onFallback"),u(null,e.ssFallback,t,n,s,null,i,r),bo(h,e.ssFallback)):h.resolve(!1,!0)}function Og(e,t,n,s,o,i,r,a,{p:c,um:u,o:{createElement:f}}){const d=t.suspense=e.suspense;d.vnode=t,t.el=e.el;const h=t.ssContent,m=t.ssFallback,{activeBranch:g,pendingBranch:v,isInFallback:k,isHydrating:b}=d;if(v)d.pendingBranch=h,Tn(v,h)?(c(v,h,d.hiddenContainer,null,o,d,i,r,a),d.deps<=0?d.resolve():k&&(b||(c(g,m,n,s,o,null,i,r,a),bo(d,m)))):(d.pendingId=pl++,b?(d.isHydrating=!1,d.activeBranch=v):u(v,o,d),d.deps=0,d.effects.length=0,d.hiddenContainer=f("div"),k?(c(null,h,d.hiddenContainer,null,o,d,i,r,a),d.deps<=0?d.resolve():(c(g,m,n,s,o,null,i,r,a),bo(d,m))):g&&Tn(g,h)?(c(g,h,n,s,o,d,i,r,a),d.resolve(!0)):(c(null,h,d.hiddenContainer,null,o,d,i,r,a),d.deps<=0&&d.resolve()));else if(g&&Tn(g,h))c(g,h,n,s,o,d,i,r,a),bo(d,h);else if(ui(t,"onPending"),d.pendingBranch=h,h.shapeFlag&512?d.pendingId=h.component.suspenseId:d.pendingId=pl++,c(null,h,d.hiddenContainer,null,o,d,i,r,a),d.deps<=0)d.resolve();else{const{timeout:C,pendingId:y}=d;C>0?setTimeout(()=>{d.pendingId===y&&d.fallback(m)},C):C===0&&d.fallback(m)}}function w0(e,t,n,s,o,i,r,a,c,u,f=!1){const{p:d,m:h,um:m,n:g,o:{parentNode:v,remove:k}}=u;let b;const C=Hg(e);C&&t&&t.pendingBranch&&(b=t.pendingId,t.deps++);const y=e.props?br(e.props.timeout):void 0,_=i,x={vnode:e,parent:t,parentComponent:n,namespace:r,container:s,hiddenContainer:o,deps:0,pendingId:pl++,timeout:typeof y=="number"?y:-1,activeBranch:null,pendingBranch:null,isInFallback:!f,isHydrating:f,isUnmounted:!1,effects:[],resolve(P=!1,V=!1){const{vnode:E,activeBranch:L,pendingBranch:I,pendingId:N,effects:$,parentComponent:U,container:q,isInFallback:J}=x;let G=!1;x.isHydrating?x.isHydrating=!1:P||(G=L&&I.transition&&I.transition.mode==="out-in",G&&(L.transition.afterLeave=()=>{N===x.pendingId&&(h(I,q,i===_?g(L):i,0),ri($),J&&E.ssFallback&&(E.ssFallback.el=null))}),L&&(v(L.el)===q&&(i=g(L)),m(L,U,x,!0),!G&&J&&E.ssFallback&&(E.ssFallback.el=null)),G||h(I,q,i,0)),bo(x,I),x.pendingBranch=null,x.isInFallback=!1;let ae=x.parent,ne=!1;for(;ae;){if(ae.pendingBranch){ae.effects.push(...$),ne=!0;break}ae=ae.parent}!ne&&!G&&ri($),x.effects=[],C&&t&&t.pendingBranch&&b===t.pendingId&&(t.deps--,t.deps===0&&!V&&t.resolve()),ui(E,"onResolve")},fallback(P){if(!x.pendingBranch)return;const{vnode:V,activeBranch:E,parentComponent:L,container:I,namespace:N}=x;ui(V,"onFallback");const $=g(E),U=()=>{x.isInFallback&&(d(null,P,I,$,L,null,N,a,c),bo(x,P))},q=P.transition&&P.transition.mode==="out-in";q&&(E.transition.afterLeave=U),x.isInFallback=!0,m(E,L,null,!0),q||U()},move(P,V,E){x.activeBranch&&h(x.activeBranch,P,V,E),x.container=P},next(){return x.activeBranch&&g(x.activeBranch)},registerDep(P,V,E){const L=!!x.pendingBranch;L&&x.deps++;const I=P.vnode.el;P.asyncDep.catch(N=>{Xs(N,P,0)}).then(N=>{if(P.isUnmounted||x.isUnmounted||x.pendingId!==P.suspenseId)return;P.asyncResolved=!0;const{vnode:$}=P;vl(P,N,!1),I&&($.el=I);const U=!I&&P.subTree.el;V(P,$,v(I||P.subTree.el),I?null:g(P.subTree),x,r,E),U&&($.placeholder=null,k(U)),pa(P,$.el),L&&--x.deps===0&&x.resolve()})},unmount(P,V){x.isUnmounted=!0,x.activeBranch&&m(x.activeBranch,n,P,V),x.pendingBranch&&m(x.pendingBranch,n,P,V)}};return x}function Dg(e,t,n,s,o,i,r,a,c){const u=t.suspense=w0(t,s,n,e.parentNode,document.createElement("div"),null,o,i,r,a,!0),f=c(e,u.pendingBranch=t.ssContent,n,u,i,r);return u.deps===0&&u.resolve(!1,!0),f}function Rg(e){const{shapeFlag:t,children:n}=e,s=t&32;e.ssContent=rf(s?n.default:n),e.ssFallback=s?rf(n.fallback):H(ut)}function rf(e){let t;if(ye(e)){const n=Ws&&e._c;n&&(e._d=!1,p()),e=e(),n&&(e._d=!0,t=Mt,_0())}return ce(e)&&(e=Ig(e)),e=qt(e),t&&!e.dynamicChildren&&(e.dynamicChildren=t.filter(n=>n!==e)),e}function C0(e,t){t&&t.pendingBranch?ce(e)?t.effects.push(...e):t.effects.push(e):ri(e)}function bo(e,t){e.activeBranch=t;const{vnode:n,parentComponent:s}=e;let o=t.el;for(;!o&&t.component;)t=t.component.subTree,o=t.el;n.el=o,s&&s.subTree===n&&(s.vnode.el=o,pa(s,o))}function Hg(e){const t=e.props&&e.props.suspensible;return t!=null&&t!==!1}const Y=Symbol.for("v-fgt"),Ss=Symbol.for("v-txt"),ut=Symbol.for("v-cmt"),Rs=Symbol.for("v-stc"),Xo=[];let Mt=null;function p(e=!1){Xo.push(Mt=e?null:[])}function _0(){Xo.pop(),Mt=Xo[Xo.length-1]||null}let Ws=1;function fi(e,t=!1){Ws+=e,e<0&&Mt&&t&&(Mt.hasOnce=!0)}function S0(e){return e.dynamicChildren=Ws>0?Mt||fo:null,_0(),Ws>0&&Mt&&Mt.push(e),e}function w(e,t,n,s,o,i){return S0(S(e,t,n,s,o,i,!0))}function D(e,t,n,s,o){return S0(H(e,t,n,s,o,!0))}function Ln(e){return e?e.__v_isVNode===!0:!1}function Tn(e,t){return e.type===t.type&&e.key===t.key}function zg(e){}const T0=({key:e})=>e??null,ar=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?_e(e)||Ye(e)||ye(e)?{i:Tt,r:e,k:t,f:!!n}:e:null);function S(e,t=null,n=null,s=0,o=null,i=e===Y?0:1,r=!1,a=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&T0(t),ref:t&&ar(t),scopeId:aa,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:i,patchFlag:s,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Tt};return a?(Pc(c,n),i&128&&e.normalize(c)):n&&(c.shapeFlag|=_e(n)?8:16),Ws>0&&!r&&Mt&&(c.patchFlag>0||i&6)&&c.patchFlag!==32&&Mt.push(c),c}const H=jg;function jg(e,t=null,n=null,s=0,o=null,i=!1){if((!e||e===J1)&&(e=ut),Ln(e)){const a=Rn(e,t,!0);return n&&Pc(a,n),Ws>0&&!i&&Mt&&(a.shapeFlag&6?Mt[Mt.indexOf(e)]=a:Mt.push(a)),a.patchFlag=-2,a}if(Jg(e)&&(e=e.__vccOpts),t){t=Ze(t);let{class:a,style:c}=t;a&&!_e(a)&&(t.class=T(a)),Ue(c)&&(ra(c)&&!ce(c)&&(c=Ie({},c)),t.style=Fe(c))}const r=_e(e)?1:Ar(e)?128:F1(e)?64:Ue(e)?4:ye(e)?2:0;return S(e,t,n,s,o,r,i,!0)}function Ze(e){return e?ra(e)||o0(e)?Ie({},e):e:null}function Rn(e,t,n=!1,s=!1){const{props:o,ref:i,patchFlag:r,children:a,transition:c}=e,u=t?nt(o||{},t):o,f={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&T0(u),ref:t&&t.ref?n&&i?ce(i)?i.concat(ar(t)):[i,ar(t)]:ar(t):i,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:a,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Y?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Rn(e.ssContent),ssFallback:e.ssFallback&&Rn(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&s&&is(f,c.clone(f)),f}function rt(e=" ",t=0){return H(Ss,null,e,t)}function E0(e,t){const n=H(Rs,null,e);return n.staticCount=t,n}function A(e="",t=!1){return t?(p(),D(ut,null,e)):H(ut,null,e)}function qt(e){return e==null||typeof e=="boolean"?H(ut):ce(e)?H(Y,null,e.slice()):Ln(e)?vs(e):H(Ss,null,String(e))}function vs(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Rn(e)}function Pc(e,t){let n=0;const{shapeFlag:s}=e;if(t==null)t=null;else if(ce(t))n=16;else if(typeof t=="object")if(s&65){const o=t.default;o&&(o._c&&(o._d=!1),Pc(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!o0(t)?t._ctx=Tt:o===3&&Tt&&(Tt.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else ye(t)?(t={default:t,_ctx:Tt},n=32):(t=String(t),s&64?(n=16,t=[rt(t)]):n=8);e.children=t,e.shapeFlag|=n}function nt(...e){const t={};for(let n=0;nSt||Tt;let $r,ml;{const e=ea(),t=(n,s)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(s),i=>{o.length>1?o.forEach(r=>r(i)):o[0](i)}};$r=t("__VUE_INSTANCE_SETTERS__",n=>St=n),ml=t("__VUE_SSR_SETTERS__",n=>wo=n)}const qs=e=>{const t=St;return $r(e),e.scope.on(),()=>{e.scope.off(),$r(t)}},gl=()=>{St&&St.scope.off(),$r(null)};function A0(e){return e.vnode.shapeFlag&4}let wo=!1;function $0(e,t=!1,n=!1){t&&ml(t);const{props:s,children:o}=e.vnode,i=A0(e);wg(e,s,i,t),Tg(e,o,n||t);const r=i?qg(e,t):void 0;return t&&ml(!1),r}function qg(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,ul);const{setup:s}=n;if(s){ns();const o=e.setupContext=s.length>1?I0(e):null,i=qs(e),r=Po(s,e,0,[e.props,o]),a=ac(r);if(ss(),i(),(a||e.sp)&&!_s(e)&&kc(e),a){if(r.then(gl,gl),t)return r.then(c=>{vl(e,c,t)}).catch(c=>{Xs(c,e,0)});e.asyncDep=r}else vl(e,r,t)}else L0(e,t)}function vl(e,t,n){ye(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Ue(t)&&(e.setupState=mc(t)),L0(e,n)}let Lr,yl;function Kg(e){Lr=e,yl=t=>{t.render._rc&&(t.withProxy=new Proxy(t.ctx,og))}}const Yg=()=>!Lr;function L0(e,t,n){const s=e.type;if(!e.render){if(!t&&Lr&&!s.render){const o=s.template||xc(e).template;if(o){const{isCustomElement:i,compilerOptions:r}=e.appContext.config,{delimiters:a,compilerOptions:c}=s,u=Ie(Ie({isCustomElement:i,delimiters:a},r),c);s.render=Lr(o,u)}}e.render=s.render||Ht,yl&&yl(e)}{const o=qs(e);ns();try{pg(e)}finally{ss(),o()}}}const Gg={get(e,t){return Pt(e,"get",""),e[t]}};function I0(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,Gg),slots:e.slots,emit:e.emit,expose:t}}function Ei(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(mc(go(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in Jo)return Jo[n](e)},has(t,n){return n in t||n in Jo}})):e.proxy}function bl(e,t=!0){return ye(e)?e.displayName||e.name:e.name||t&&e.__name}function Jg(e){return ye(e)&&"__vccOpts"in e}const F=(e,t)=>Sm(e,t,wo);function nn(e,t,n){try{fi(-1);const s=arguments.length;return s===2?Ue(t)&&!ce(t)?Ln(t)?H(e,null,[t]):H(e,t):H(e,null,t):(s>3?n=Array.prototype.slice.call(arguments,2):s===3&&Ln(n)&&(n=[n]),H(e,t,n))}finally{fi(1)}}function Xg(){}function Qg(e,t,n,s){const o=n[s];if(o&&P0(o,e))return o;const i=t();return i.memo=e.slice(),i.cacheIndex=s,n[s]=i}function P0(e,t){const n=e.memo;if(n.length!=t.length)return!1;for(let s=0;s0&&Mt&&Mt.push(e),!0}const M0="3.5.24",Zg=Ht,ev=Mm,tv=io,nv=P1,sv={createComponentInstance:x0,setupComponent:$0,renderComponentRoot:rr,setCurrentRenderingInstance:li,isVNode:Ln,normalizeVNode:qt,getComponentPublicInstance:Ei,ensureValidVNode:Tc,pushWarningContext:$m,popWarningContext:Lm},ov=sv,iv=null,rv=null,av=null;let kl;const af=typeof window<"u"&&window.trustedTypes;if(af)try{kl=af.createPolicy("vue",{createHTML:e=>e})}catch{}const F0=kl?e=>kl.createHTML(e):e=>e,lv="http://www.w3.org/2000/svg",cv="http://www.w3.org/1998/Math/MathML",Yn=typeof document<"u"?document:null,lf=Yn&&Yn.createElement("template"),uv={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,s)=>{const o=t==="svg"?Yn.createElementNS(lv,e):t==="mathml"?Yn.createElementNS(cv,e):n?Yn.createElement(e,{is:n}):Yn.createElement(e);return e==="select"&&s&&s.multiple!=null&&o.setAttribute("multiple",s.multiple),o},createText:e=>Yn.createTextNode(e),createComment:e=>Yn.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Yn.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,s,o,i){const r=n?n.previousSibling:t.lastChild;if(o&&(o===i||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===i||!(o=o.nextSibling)););else{lf.innerHTML=F0(s==="svg"?``:s==="mathml"?``:e);const a=lf.content;if(s==="svg"||s==="mathml"){const c=a.firstChild;for(;c.firstChild;)a.appendChild(c.firstChild);a.removeChild(c)}t.insertBefore(a,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},us="transition",Ho="animation",Co=Symbol("_vtc"),B0={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},N0=Ie({},bc,B0),fv=e=>(e.displayName="Transition",e.props=N0,e),vt=fv((e,{slots:t})=>nn(D1,V0(e),t)),Ms=(e,t=[])=>{ce(e)?e.forEach(n=>n(...t)):e&&e(...t)},cf=e=>e?ce(e)?e.some(t=>t.length>1):e.length>1:!1;function V0(e){const t={};for(const $ in e)$ in B0||(t[$]=e[$]);if(e.css===!1)return t;const{name:n="v",type:s,duration:o,enterFromClass:i=`${n}-enter-from`,enterActiveClass:r=`${n}-enter-active`,enterToClass:a=`${n}-enter-to`,appearFromClass:c=i,appearActiveClass:u=r,appearToClass:f=a,leaveFromClass:d=`${n}-leave-from`,leaveActiveClass:h=`${n}-leave-active`,leaveToClass:m=`${n}-leave-to`}=e,g=dv(o),v=g&&g[0],k=g&&g[1],{onBeforeEnter:b,onEnter:C,onEnterCancelled:y,onLeave:_,onLeaveCancelled:x,onBeforeAppear:P=b,onAppear:V=C,onAppearCancelled:E=y}=t,L=($,U,q,J)=>{$._enterCancelled=J,hs($,U?f:a),hs($,U?u:r),q&&q()},I=($,U)=>{$._isLeaving=!1,hs($,d),hs($,m),hs($,h),U&&U()},N=$=>(U,q)=>{const J=$?V:C,G=()=>L(U,$,q);Ms(J,[U,G]),uf(()=>{hs(U,$?c:i),Fn(U,$?f:a),cf(J)||ff(U,s,v,G)})};return Ie(t,{onBeforeEnter($){Ms(b,[$]),Fn($,i),Fn($,r)},onBeforeAppear($){Ms(P,[$]),Fn($,c),Fn($,u)},onEnter:N(!1),onAppear:N(!0),onLeave($,U){$._isLeaving=!0;const q=()=>I($,U);Fn($,d),$._enterCancelled?(Fn($,h),wl($)):(wl($),Fn($,h)),uf(()=>{$._isLeaving&&(hs($,d),Fn($,m),cf(_)||ff($,s,k,q))}),Ms(_,[$,q])},onEnterCancelled($){L($,!1,void 0,!0),Ms(y,[$])},onAppearCancelled($){L($,!0,void 0,!0),Ms(E,[$])},onLeaveCancelled($){I($),Ms(x,[$])}})}function dv(e){if(e==null)return null;if(Ue(e))return[Ra(e.enter),Ra(e.leave)];{const t=Ra(e);return[t,t]}}function Ra(e){return br(e)}function Fn(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[Co]||(e[Co]=new Set)).add(t)}function hs(e,t){t.split(/\s+/).forEach(s=>s&&e.classList.remove(s));const n=e[Co];n&&(n.delete(t),n.size||(e[Co]=void 0))}function uf(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let hv=0;function ff(e,t,n,s){const o=e._endId=++hv,i=()=>{o===e._endId&&s()};if(n!=null)return setTimeout(i,n);const{type:r,timeout:a,propCount:c}=O0(e,t);if(!r)return s();const u=r+"end";let f=0;const d=()=>{e.removeEventListener(u,h),i()},h=m=>{m.target===e&&++f>=c&&d()};setTimeout(()=>{f(n[g]||"").split(", "),o=s(`${us}Delay`),i=s(`${us}Duration`),r=df(o,i),a=s(`${Ho}Delay`),c=s(`${Ho}Duration`),u=df(a,c);let f=null,d=0,h=0;t===us?r>0&&(f=us,d=r,h=i.length):t===Ho?u>0&&(f=Ho,d=u,h=c.length):(d=Math.max(r,u),f=d>0?r>u?us:Ho:null,h=f?f===us?i.length:c.length:0);const m=f===us&&/\b(?:transform|all)(?:,|$)/.test(s(`${us}Property`).toString());return{type:f,timeout:d,propCount:h,hasTransform:m}}function df(e,t){for(;e.lengthhf(n)+hf(e[s])))}function hf(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function wl(e){return(e?e.ownerDocument:document).body.offsetHeight}function pv(e,t,n){const s=e[Co];s&&(t=(t?[t,...s]:[...s]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const Ir=Symbol("_vod"),D0=Symbol("_vsh"),at={name:"show",beforeMount(e,{value:t},{transition:n}){e[Ir]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):zo(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:s}){!t!=!n&&(s?t?(s.beforeEnter(e),zo(e,!0),s.enter(e)):s.leave(e,()=>{zo(e,!1)}):zo(e,t))},beforeUnmount(e,{value:t}){zo(e,t)}};function zo(e,t){e.style.display=t?e[Ir]:"none",e[D0]=!t}function mv(){at.getSSRProps=({value:e})=>{if(!e)return{style:{display:"none"}}}}const R0=Symbol("");function gv(e){const t=dt();if(!t)return;const n=t.ut=(o=e(t.proxy))=>{Array.from(document.querySelectorAll(`[data-v-owner="${t.uid}"]`)).forEach(i=>Pr(i,o))},s=()=>{const o=e(t.proxy);t.ce?Pr(t.ce,o):Cl(t.subTree,o),n(o)};Cc(()=>{ri(s)}),be(()=>{te(s,Ht,{flush:"post"});const o=new MutationObserver(s);o.observe(t.subTree.el.parentNode,{childList:!0}),cn(()=>o.disconnect())})}function Cl(e,t){if(e.shapeFlag&128){const n=e.suspense;e=n.activeBranch,n.pendingBranch&&!n.isHydrating&&n.effects.push(()=>{Cl(n.activeBranch,t)})}for(;e.component;)e=e.component.subTree;if(e.shapeFlag&1&&e.el)Pr(e.el,t);else if(e.type===Y)e.children.forEach(n=>Cl(n,t));else if(e.type===Rs){let{el:n,anchor:s}=e;for(;n&&(Pr(n,t),n!==s);)n=n.nextSibling}}function Pr(e,t){if(e.nodeType===1){const n=e.style;let s="";for(const o in t){const i=Y2(t[o]);n.setProperty(`--${o}`,i),s+=`--${o}: ${i};`}n[R0]=s}}const vv=/(?:^|;)\s*display\s*:/;function yv(e,t,n){const s=e.style,o=_e(n);let i=!1;if(n&&!o){if(t)if(_e(t))for(const r of t.split(";")){const a=r.slice(0,r.indexOf(":")).trim();n[a]==null&&lr(s,a,"")}else for(const r in t)n[r]==null&&lr(s,r,"");for(const r in n)r==="display"&&(i=!0),lr(s,r,n[r])}else if(o){if(t!==n){const r=s[R0];r&&(n+=";"+r),s.cssText=n,i=vv.test(n)}}else t&&e.removeAttribute("style");Ir in e&&(e[Ir]=i?s.display:"",e[D0]&&(s.display="none"))}const pf=/\s*!important$/;function lr(e,t,n){if(ce(n))n.forEach(s=>lr(e,t,s));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const s=bv(e,t);pf.test(n)?e.setProperty(Kt(s),n.replace(pf,""),"important"):e[s]=n}}const mf=["Webkit","Moz","ms"],Ha={};function bv(e,t){const n=Ha[t];if(n)return n;let s=tt(t);if(s!=="filter"&&s in e)return Ha[t]=s;s=Js(s);for(let o=0;oza||(_v.then(()=>za=0),za=Date.now());function Tv(e,t){const n=s=>{if(!s._vts)s._vts=Date.now();else if(s._vts<=n.attached)return;yn(Ev(s,n.value),t,5,[s])};return n.value=e,n.attached=Sv(),n}function Ev(e,t){if(ce(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(s=>o=>!o._stopped&&s&&s(o))}else return t}const wf=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,xv=(e,t,n,s,o,i)=>{const r=o==="svg";t==="class"?pv(e,s,r):t==="style"?yv(e,n,s):Ys(t)?ic(t)||wv(e,t,n,s,i):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):Av(e,t,s,r))?(yf(e,t,s),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&vf(e,t,s,r,i,t!=="value")):e._isVueCE&&(/[A-Z]/.test(t)||!_e(s))?yf(e,tt(t),s,i,t):(t==="true-value"?e._trueValue=s:t==="false-value"&&(e._falseValue=s),vf(e,t,s,r))};function Av(e,t,n,s){if(s)return!!(t==="innerHTML"||t==="textContent"||t in e&&wf(t)&&ye(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return wf(t)&&_e(n)?!1:t in e}const Cf={};function H0(e,t,n){let s=z(e,t);Xr(s)&&(s=Ie({},s,t));class o extends ma{constructor(r){super(s,r,n)}}return o.def=s,o}const $v=((e,t)=>H0(e,t,X0)),Lv=typeof HTMLElement<"u"?HTMLElement:class{};class ma extends Lv{constructor(t,n={},s=Fr){super(),this._def=t,this._props=n,this._createApp=s,this._isVueCE=!0,this._instance=null,this._app=null,this._nonce=this._def.nonce,this._connected=!1,this._resolved=!1,this._patching=!1,this._dirty=!1,this._numberProps=null,this._styleChildren=new WeakSet,this._ob=null,this.shadowRoot&&s!==Fr?this._root=this.shadowRoot:t.shadowRoot!==!1?(this.attachShadow(Ie({},t.shadowRootOptions,{mode:"open"})),this._root=this.shadowRoot):this._root=this}connectedCallback(){if(!this.isConnected)return;!this.shadowRoot&&!this._resolved&&this._parseSlots(),this._connected=!0;let t=this;for(;t=t&&(t.parentNode||t.host);)if(t instanceof ma){this._parent=t;break}this._instance||(this._resolved?this._mount(this._def):t&&t._pendingResolve?this._pendingResolve=t._pendingResolve.then(()=>{this._pendingResolve=void 0,this._resolveDef()}):this._resolveDef())}_setParent(t=this._parent){t&&(this._instance.parent=t._instance,this._inheritParentContext(t))}_inheritParentContext(t=this._parent){t&&this._app&&Object.setPrototypeOf(this._app._context.provides,t._instance.provides)}disconnectedCallback(){this._connected=!1,ze(()=>{this._connected||(this._ob&&(this._ob.disconnect(),this._ob=null),this._app&&this._app.unmount(),this._instance&&(this._instance.ce=void 0),this._app=this._instance=null,this._teleportTargets&&(this._teleportTargets.clear(),this._teleportTargets=void 0))})}_processMutations(t){for(const n of t)this._setAttr(n.attributeName)}_resolveDef(){if(this._pendingResolve)return;for(let s=0;s{this._resolved=!0,this._pendingResolve=void 0;const{props:i,styles:r}=s;let a;if(i&&!ce(i))for(const c in i){const u=i[c];(u===Number||u&&u.type===Number)&&(c in this._props&&(this._props[c]=br(this._props[c])),(a||(a=Object.create(null)))[tt(c)]=!0)}this._numberProps=a,this._resolveProps(s),this.shadowRoot&&this._applyStyles(r),this._mount(s)},n=this._def.__asyncLoader;n?this._pendingResolve=n().then(s=>{s.configureApp=this._def.configureApp,t(this._def=s,!0)}):t(this._def)}_mount(t){this._app=this._createApp(t),this._inheritParentContext(),t.configureApp&&t.configureApp(this._app),this._app._ceVNode=this._createVNode(),this._app.mount(this._root);const n=this._instance&&this._instance.exposed;if(n)for(const s in n)Oe(this,s)||Object.defineProperty(this,s,{get:()=>l(n[s])})}_resolveProps(t){const{props:n}=t,s=ce(n)?n:Object.keys(n||{});for(const o of Object.keys(this))o[0]!=="_"&&s.includes(o)&&this._setProp(o,this[o]);for(const o of s.map(tt))Object.defineProperty(this,o,{get(){return this._getProp(o)},set(i){this._setProp(o,i,!0,!this._patching)}})}_setAttr(t){if(t.startsWith("data-v-"))return;const n=this.hasAttribute(t);let s=n?this.getAttribute(t):Cf;const o=tt(t);n&&this._numberProps&&this._numberProps[o]&&(s=br(s)),this._setProp(o,s,!1,!0)}_getProp(t){return this._props[t]}_setProp(t,n,s=!0,o=!1){if(n!==this._props[t]&&(this._dirty=!0,n===Cf?delete this._props[t]:(this._props[t]=n,t==="key"&&this._app&&(this._app._ceVNode.key=n)),o&&this._instance&&this._update(),s)){const i=this._ob;i&&(this._processMutations(i.takeRecords()),i.disconnect()),n===!0?this.setAttribute(Kt(t),""):typeof n=="string"||typeof n=="number"?this.setAttribute(Kt(t),n+""):n||this.removeAttribute(Kt(t)),i&&i.observe(this,{attributes:!0})}}_update(){const t=this._createVNode();this._app&&(t.appContext=this._app._context),di(t,this._root)}_createVNode(){const t={};this.shadowRoot||(t.onVnodeMounted=t.onVnodeUpdated=this._renderSlots.bind(this));const n=H(this._def,Ie(t,this._props));return this._instance||(n.ce=s=>{this._instance=s,s.ce=this,s.isCE=!0;const o=(i,r)=>{this.dispatchEvent(new CustomEvent(i,Xr(r[0])?Ie({detail:r},r[0]):{detail:r}))};s.emit=(i,...r)=>{o(i,r),Kt(i)!==i&&o(Kt(i),r)},this._setParent()}),n}_applyStyles(t,n){if(!t)return;if(n){if(n===this._def||this._styleChildren.has(n))return;this._styleChildren.add(n)}const s=this._nonce;for(let o=t.length-1;o>=0;o--){const i=document.createElement("style");s&&i.setAttribute("nonce",s),i.textContent=t[o],this.shadowRoot.prepend(i)}}_parseSlots(){const t=this._slots={};let n;for(;n=this.firstChild;){const s=n.nodeType===1&&n.getAttribute("slot")||"default";(t[s]||(t[s]=[])).push(n),this.removeChild(n)}}_renderSlots(){const t=this._getSlots(),n=this._instance.type.__scopeId;for(let s=0;s(delete e.props.mode,e),Fv=Mv({name:"TransitionGroup",props:Ie({},N0,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=dt(),s=yc();let o,i;return Mo(()=>{if(!o.length)return;const r=e.moveClass||`${e.name||"v"}-move`;if(!Ov(o[0].el,n.vnode.el,r)){o=[];return}o.forEach(Bv),o.forEach(Nv);const a=o.filter(Vv);wl(n.vnode.el),a.forEach(c=>{const u=c.el,f=u.style;Fn(u,r),f.transform=f.webkitTransform=f.transitionDuration="";const d=u[Mr]=h=>{h&&h.target!==u||(!h||h.propertyName.endsWith("transform"))&&(u.removeEventListener("transitionend",d),u[Mr]=null,hs(u,r))};u.addEventListener("transitionend",d)}),o=[]}),()=>{const r=Pe(e),a=V0(r);let c=r.tag||Y;if(o=[],i)for(let u=0;u{a.split(/\s+/).forEach(c=>c&&s.classList.remove(c))}),n.split(/\s+/).forEach(a=>a&&s.classList.add(a)),s.style.display="none";const i=t.nodeType===1?t:t.parentNode;i.appendChild(s);const{hasTransform:r}=O0(s);return i.removeChild(s),r}const xs=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ce(t)?n=>mo(t,n):t};function Dv(e){e.target.composing=!0}function Sf(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const vn=Symbol("_assign");function Tf(e,t,n){return t&&(e=e.trim()),n&&(e=Zr(e)),e}const _o={created(e,{modifiers:{lazy:t,trim:n,number:s}},o){e[vn]=xs(o);const i=s||o.props&&o.props.type==="number";Qn(e,t?"change":"input",r=>{r.target.composing||e[vn](Tf(e.value,n,i))}),(n||i)&&Qn(e,"change",()=>{e.value=Tf(e.value,n,i)}),t||(Qn(e,"compositionstart",Dv),Qn(e,"compositionend",Sf),Qn(e,"change",Sf))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:s,trim:o,number:i}},r){if(e[vn]=xs(r),e.composing)return;const a=(i||e.type==="number")&&!/^0\d/.test(e.value)?Zr(e.value):e.value,c=t??"";a!==c&&(document.activeElement===e&&e.type!=="range"&&(s&&t===n||o&&e.value.trim()===c)||(e.value=c))}},Mc={deep:!0,created(e,t,n){e[vn]=xs(n),Qn(e,"change",()=>{const s=e._modelValue,o=So(e),i=e.checked,r=e[vn];if(ce(s)){const a=ta(s,o),c=a!==-1;if(i&&!c)r(s.concat(o));else if(!i&&c){const u=[...s];u.splice(a,1),r(u)}}else if(Gs(s)){const a=new Set(s);i?a.add(o):a.delete(o),r(a)}else r(q0(e,i))})},mounted:Ef,beforeUpdate(e,t,n){e[vn]=xs(n),Ef(e,t,n)}};function Ef(e,{value:t,oldValue:n},s){e._modelValue=t;let o;if(ce(t))o=ta(t,s.props.value)>-1;else if(Gs(t))o=t.has(s.props.value);else{if(t===n)return;o=Es(t,q0(e,!0))}e.checked!==o&&(e.checked=o)}const ga={created(e,{value:t},n){e.checked=Es(t,n.props.value),e[vn]=xs(n),Qn(e,"change",()=>{e[vn](So(e))})},beforeUpdate(e,{value:t,oldValue:n},s){e[vn]=xs(s),t!==n&&(e.checked=Es(t,s.props.value))}},W0={deep:!0,created(e,{value:t,modifiers:{number:n}},s){const o=Gs(t);Qn(e,"change",()=>{const i=Array.prototype.filter.call(e.options,r=>r.selected).map(r=>n?Zr(So(r)):So(r));e[vn](e.multiple?o?new Set(i):i:i[0]),e._assigning=!0,ze(()=>{e._assigning=!1})}),e[vn]=xs(s)},mounted(e,{value:t}){xf(e,t)},beforeUpdate(e,t,n){e[vn]=xs(n)},updated(e,{value:t}){e._assigning||xf(e,t)}};function xf(e,t){const n=e.multiple,s=ce(t);if(!(n&&!s&&!Gs(t))){for(let o=0,i=e.options.length;oString(u)===String(a)):r.selected=ta(t,a)>-1}else r.selected=t.has(a);else if(Es(So(r),t)){e.selectedIndex!==o&&(e.selectedIndex=o);return}}!n&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function So(e){return"_value"in e?e._value:e.value}function q0(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const Fc={created(e,t,n){Ui(e,t,n,null,"created")},mounted(e,t,n){Ui(e,t,n,null,"mounted")},beforeUpdate(e,t,n,s){Ui(e,t,n,s,"beforeUpdate")},updated(e,t,n,s){Ui(e,t,n,s,"updated")}};function K0(e,t){switch(e){case"SELECT":return W0;case"TEXTAREA":return _o;default:switch(t){case"checkbox":return Mc;case"radio":return ga;default:return _o}}}function Ui(e,t,n,s,o){const r=K0(e.tagName,n.props&&n.props.type)[o];r&&r(e,t,n,s)}function Rv(){_o.getSSRProps=({value:e})=>({value:e}),ga.getSSRProps=({value:e},t)=>{if(t.props&&Es(t.props.value,e))return{checked:!0}},Mc.getSSRProps=({value:e},t)=>{if(ce(e)){if(t.props&&ta(e,t.props.value)>-1)return{checked:!0}}else if(Gs(e)){if(t.props&&e.has(t.props.value))return{checked:!0}}else if(e)return{checked:!0}},Fc.getSSRProps=(e,t)=>{if(typeof t.type!="string")return;const n=K0(t.type.toUpperCase(),t.props&&t.props.type);if(n.getSSRProps)return n.getSSRProps(e,t)}}const Hv=["ctrl","shift","alt","meta"],zv={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Hv.some(n=>e[`${n}Key`]&&!t.includes(n))},To=(e,t)=>{const n=e._withMods||(e._withMods={}),s=t.join(".");return n[s]||(n[s]=((o,...i)=>{for(let r=0;r{const n=e._withKeys||(e._withKeys={}),s=t.join(".");return n[s]||(n[s]=(o=>{if(!("key"in o))return;const i=Kt(o.key);if(t.some(r=>r===i||jv[r]===i))return e(o)}))},Y0=Ie({patchProp:xv},uv);let Qo,Af=!1;function G0(){return Qo||(Qo=u0(Y0))}function J0(){return Qo=Af?Qo:f0(Y0),Af=!0,Qo}const di=((...e)=>{G0().render(...e)}),Uv=((...e)=>{J0().hydrate(...e)}),Fr=((...e)=>{const t=G0().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=Z0(s);if(!o)return;const i=t._component;!ye(i)&&!i.render&&!i.template&&(i.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const r=n(o,!1,Q0(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),r},t}),X0=((...e)=>{const t=J0().createApp(...e),{mount:n}=t;return t.mount=s=>{const o=Z0(s);if(o)return n(o,!0,Q0(o))},t});function Q0(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function Z0(e){return _e(e)?document.querySelector(e):e}let $f=!1;const Wv=()=>{$f||($f=!0,Rv(),mv())};const qv=()=>{},Kv=Object.freeze(Object.defineProperty({__proto__:null,BaseTransition:D1,BaseTransitionPropsValidators:bc,Comment:ut,DeprecationTypes:av,EffectScope:cc,ErrorCodes:Pm,ErrorTypeStrings:ev,Fragment:Y,KeepAlive:eg,ReactiveEffect:si,Static:Rs,Suspense:Ng,Teleport:la,Text:Ss,TrackOpTypes:Tm,Transition:vt,TransitionGroup:Qs,TriggerOpTypes:Em,VueElement:ma,assertNumber:Im,callWithAsyncErrorHandling:yn,callWithErrorHandling:Po,camelize:tt,capitalize:Js,cloneVNode:Rn,compatUtils:rv,compile:qv,computed:F,createApp:Fr,createBlock:D,createCommentVNode:A,createElementBlock:w,createElementVNode:S,createHydrationRenderer:f0,createPropsRestProxy:Z1,createRenderer:u0,createSSRApp:X0,createSlots:Wt,createStaticVNode:E0,createTextVNode:rt,createVNode:H,customRef:gc,defineAsyncComponent:wc,defineComponent:z,defineCustomElement:H0,defineEmits:rg,defineExpose:ag,defineModel:ug,defineOptions:lg,defineProps:ig,defineSSRCustomElement:$v,defineSlots:cg,devtools:tv,effect:J2,effectScope:l1,getCurrentInstance:dt,getCurrentScope:Ci,getCurrentWatcher:xm,getTransitionRawChildren:ca,guardReactiveProps:Ze,h:nn,handleError:Xs,hasInjectionContext:Ac,hydrate:Uv,hydrateOnIdle:Km,hydrateOnInteraction:Xm,hydrateOnMediaQuery:Jm,hydrateOnVisible:Gm,initCustomFormatter:Xg,initDirectivesForSSR:Wv,inject:qe,isMemoSame:P0,isProxy:ra,isReactive:Cs,isReadonly:os,isRef:Ye,isRuntimeOnly:Yg,isShallow:an,isVNode:Ln,markRaw:go,mergeDefaults:Q1,mergeModels:$n,mergeProps:nt,nextTick:ze,normalizeClass:T,normalizeProps:Ge,normalizeStyle:Fe,onActivated:j1,onBeforeMount:fa,onBeforeUnmount:as,onBeforeUpdate:Cc,onDeactivated:U1,onErrorCaptured:G1,onMounted:be,onRenderTracked:Y1,onRenderTriggered:K1,onScopeDispose:uc,onServerPrefetch:q1,onUnmounted:cn,onUpdated:Mo,onWatcherCleanup:x1,openBlock:p,popScopeId:Vm,provide:In,proxyRefs:mc,pushScopeId:Nm,queuePostFlushCb:ri,reactive:Dn,readonly:It,ref:j,registerRuntimeCompiler:Kg,render:di,renderList:le,renderSlot:M,resolveComponent:un,resolveDirective:sg,resolveDynamicComponent:Be,resolveFilter:iv,resolveTransitionHooks:ko,setBlockTracking:fi,setDevtoolsHook:nv,setTransitionHooks:is,shallowReactive:pc,shallowReadonly:al,shallowRef:He,ssrContextKey:m0,ssrUtils:ov,stop:X2,toDisplayString:W,toHandlerKey:po,toHandlers:Ec,toRaw:Pe,toRef:T1,toRefs:km,toValue:Se,transformVNodeArgs:zg,triggerRef:vm,unref:l,useAttrs:dg,useCssModule:Pv,useCssVars:gv,useHost:z0,useId:H1,useModel:Jt,useSSRContext:g0,useShadowRoot:Iv,useSlots:Si,useTemplateRef:z1,useTransitionState:yc,vModelCheckbox:Mc,vModelDynamic:Fc,vModelRadio:ga,vModelSelect:W0,vModelText:_o,vShow:at,version:M0,warn:Zg,watch:te,watchEffect:zn,watchPostEffect:da,watchSyncEffect:v0,withAsyncContext:hg,withCtx:O,withDefaults:fg,withDirectives:et,withKeys:va,withMemo:Qg,withModifiers:To,withScopeId:Om},Symbol.toStringTag,{value:"Module"})),eh=z({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(e){return(t,n)=>(p(),w("span",{class:T(["VPBadge",e.type])},[M(t.$slots,"default",{},()=>[rt(W(e.text),1)])],2))}}),Yv={key:0,class:"VPBackdrop"},Gv=z({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(e){return(t,n)=>(p(),D(vt,{name:"fade"},{default:O(()=>[e.show?(p(),w("div",Yv)):A("",!0)]),_:1}))}}),ke=(e,t)=>{const n=e.__vccOpts||e;for(const[s,o]of t)n[s]=o;return n},Jv=ke(Gv,[["__scopeId","data-v-f703a812"]]),Xv=window.__VP_SITE_DATA__;function Bc(e,t){return Ci()?(uc(e,t),!0):!1}const ja=new WeakMap,Qv=(...e)=>{var t;const n=e[0],s=(t=dt())===null||t===void 0?void 0:t.proxy,o=s??Ci();if(o==null&&!Ac())throw new Error("injectLocal must be called in setup");return o&&ja.has(o)&&n in ja.get(o)?ja.get(o)[n]:qe(...e)},th=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const Zv=e=>e!=null,e3=Object.prototype.toString,t3=e=>e3.call(e)==="[object Object]",As=()=>{},Lf=n3();function n3(){var e,t,n;return th&&((e=window)===null||e===void 0||(e=e.navigator)===null||e===void 0?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window)===null||t===void 0||(t=t.navigator)===null||t===void 0?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test((n=window)===null||n===void 0?void 0:n.navigator.userAgent))}function Nc(...e){if(e.length!==1)return T1(...e);const t=e[0];return typeof t=="function"?It(gc(()=>({get:t,set:As}))):j(t)}function Vc(e,t){function n(...s){return new Promise((o,i)=>{Promise.resolve(e(()=>t.apply(this,s),{fn:t,thisArg:this,args:s})).then(o).catch(i)})}return n}const nh=e=>e();function sh(e,t={}){let n,s,o=As;const i=c=>{clearTimeout(c),o(),o=As};let r;return c=>{const u=Se(e),f=Se(t.maxWait);return n&&i(n),u<=0||f!==void 0&&f<=0?(s&&(i(s),s=void 0),Promise.resolve(c())):new Promise((d,h)=>{o=t.rejectOnCancel?h:d,r=c,f&&!s&&(s=setTimeout(()=>{n&&i(n),s=void 0,d(r())},f)),n=setTimeout(()=>{s&&i(s),s=void 0,d(c())},u)})}}function s3(...e){let t=0,n,s=!0,o=As,i,r,a,c,u;!Ye(e[0])&&typeof e[0]=="object"?{delay:r,trailing:a=!0,leading:c=!0,rejectOnCancel:u=!1}=e[0]:[r,a=!0,c=!0,u=!1]=e;const f=()=>{n&&(clearTimeout(n),n=void 0,o(),o=As)};return h=>{const m=Se(r),g=Date.now()-t,v=()=>i=h();return f(),m<=0?(t=Date.now(),v()):(g>m?(t=Date.now(),(c||!s)&&v()):a&&(i=new Promise((k,b)=>{o=u?b:k,n=setTimeout(()=>{t=Date.now(),s=!0,k(v()),f()},Math.max(0,m-g))})),!c&&!n&&(n=setTimeout(()=>s=!0,m)),s=!1,i)}}function o3(e=nh,t={}){const{initialState:n="active"}=t,s=Nc(n==="active");function o(){s.value=!1}function i(){s.value=!0}const r=(...a)=>{s.value&&e(...a)};return{isActive:It(s),pause:o,resume:i,eventFilter:r}}function If(e){return e.endsWith("rem")?Number.parseFloat(e)*16:Number.parseFloat(e)}function cr(e){return Array.isArray(e)?e:[e]}function oh(e){return dt()}function i3(e,t=200,n={}){return Vc(sh(t,n),e)}function r3(e,t=200,n=!1,s=!0,o=!1){return Vc(s3(t,n,s,o),e)}function ih(e,t,n={}){const{eventFilter:s=nh,...o}=n;return te(e,Vc(s,t),o)}function a3(e,t,n={}){const{eventFilter:s,initialState:o="active",...i}=n,{eventFilter:r,pause:a,resume:c,isActive:u}=o3(s,{initialState:o});return{stop:ih(e,t,{...i,eventFilter:r}),pause:a,resume:c,isActive:u}}const l3=a3;function ya(e,t=!0,n){oh()?be(e,n):t?e():ze(e)}function c3(e,t){oh()&&cn(e,t)}function u3(e,t,n={}){const{debounce:s=0,maxWait:o=void 0,...i}=n;return ih(e,t,{...i,eventFilter:sh(s,{maxWait:o})})}const HA=u3;function f3(e,t,n){return te(e,t,{...n,immediate:!0})}function zA(e,t,n){var s;let o;Ye(n)?o={evaluating:n}:o=n||{};const{lazy:i=!1,flush:r="sync",evaluating:a=void 0,shallow:c=!0,onError:u=(s=globalThis.reportError)!==null&&s!==void 0?s:As}=o,f=He(!i),d=c?He(t):j(t);let h=0;return zn(async m=>{if(!f.value)return;h++;const g=h;let v=!1;a&&Promise.resolve().then(()=>{a.value=!0});try{const k=await e(b=>{m(()=>{a&&(a.value=!1),v||b()})});g===h&&(d.value=k)}catch(k){u(k)}finally{a&&g===h&&(a.value=!1),v=!0}},{flush:r}),i?F(()=>(f.value=!0,d.value)):d}const Rt=th?window:void 0;function ba(e){var t;const n=Se(e);return(t=n?.$el)!==null&&t!==void 0?t:n}function Hn(...e){const t=[],n=()=>{t.forEach(a=>a()),t.length=0},s=(a,c,u,f)=>(a.addEventListener(c,u,f),()=>a.removeEventListener(c,u,f)),o=F(()=>{const a=cr(Se(e[0])).filter(c=>c!=null);return a.every(c=>typeof c!="string")?a:void 0}),i=f3(()=>{var a,c;return[(a=(c=o.value)===null||c===void 0?void 0:c.map(u=>ba(u)))!==null&&a!==void 0?a:[Rt].filter(u=>u!=null),cr(Se(o.value?e[1]:e[0])),cr(l(o.value?e[2]:e[1])),Se(o.value?e[3]:e[2])]},([a,c,u,f])=>{if(n(),!a?.length||!c?.length||!u?.length)return;const d=t3(f)?{...f}:f;t.push(...a.flatMap(h=>c.flatMap(m=>u.map(g=>s(h,m,g,d)))))},{flush:"post"}),r=()=>{i(),n()};return Bc(n),r}function d3(){const e=He(!1),t=dt();return t&&be(()=>{e.value=!0},t),e}function Oc(e){const t=d3();return F(()=>(t.value,!!e()))}function h3(e,t,n={}){const{window:s=Rt,...o}=n;let i;const r=Oc(()=>s&&"MutationObserver"in s),a=()=>{i&&(i.disconnect(),i=void 0)},c=te(F(()=>{const d=cr(Se(e)).map(ba).filter(Zv);return new Set(d)}),d=>{a(),r.value&&d.size&&(i=new MutationObserver(t),d.forEach(h=>i.observe(h,o)))},{immediate:!0,flush:"post"}),u=()=>i?.takeRecords(),f=()=>{c(),a()};return Bc(f),{isSupported:r,stop:f,takeRecords:u}}function p3(e){return typeof e=="function"?e:typeof e=="string"?t=>t.key===e:Array.isArray(e)?t=>e.includes(t.key):()=>!0}function _l(...e){let t,n,s={};e.length===3?(t=e[0],n=e[1],s=e[2]):e.length===2?typeof e[1]=="object"?(t=!0,n=e[0],s=e[1]):(t=e[0],n=e[1]):(t=!0,n=e[0]);const{target:o=Rt,eventName:i="keydown",passive:r=!1,dedupe:a=!1}=s,c=p3(t);return Hn(o,i,f=>{f.repeat&&Se(a)||c(f)&&n(f)},r)}const m3=Symbol("vueuse-ssr-width");function g3(){const e=Ac()?Qv(m3,null):null;return typeof e=="number"?e:void 0}function Br(e,t={}){const{window:n=Rt,ssrWidth:s=g3()}=t,o=Oc(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function"),i=He(typeof s=="number"),r=He(),a=He(!1),c=u=>{a.value=u.matches};return zn(()=>{if(i.value){i.value=!o.value,a.value=Se(e).split(",").some(u=>{const f=u.includes("not all"),d=u.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/),h=u.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/);let m=!!(d||h);return d&&m&&(m=s>=If(d[1])),h&&m&&(m=s<=If(h[1])),f?!m:m});return}o.value&&(r.value=n.matchMedia(Se(e)),a.value=r.value.matches)}),Hn(r,"change",c,{passive:!0}),F(()=>a.value)}const Wi=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},qi="__vueuse_ssr_handlers__",v3=y3();function y3(){return qi in Wi||(Wi[qi]=Wi[qi]||{}),Wi[qi]}function rh(e,t){return v3[e]||t}function ah(e){return Br("(prefers-color-scheme: dark)",e)}function b3(e){return e==null?"any":e instanceof Set?"set":e instanceof Map?"map":e instanceof Date?"date":typeof e=="boolean"?"boolean":typeof e=="string"?"string":typeof e=="object"?"object":Number.isNaN(e)?"any":"number"}const k3={boolean:{read:e=>e==="true",write:e=>String(e)},object:{read:e=>JSON.parse(e),write:e=>JSON.stringify(e)},number:{read:e=>Number.parseFloat(e),write:e=>String(e)},any:{read:e=>e,write:e=>String(e)},string:{read:e=>e,write:e=>String(e)},map:{read:e=>new Map(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e.entries()))},set:{read:e=>new Set(JSON.parse(e)),write:e=>JSON.stringify(Array.from(e))},date:{read:e=>new Date(e),write:e=>e.toISOString()}},Pf="vueuse-storage";function Dc(e,t,n,s={}){var o;const{flush:i="pre",deep:r=!0,listenToStorageChanges:a=!0,writeDefaults:c=!0,mergeDefaults:u=!1,shallow:f,window:d=Rt,eventFilter:h,onError:m=q=>{console.error(q)},initOnMounted:g}=s,v=(f?He:j)(typeof t=="function"?t():t),k=F(()=>Se(e));if(!n)try{n=rh("getDefaultStorage",()=>Rt?.localStorage)()}catch(q){m(q)}if(!n)return v;const b=Se(t),C=b3(b),y=(o=s.serializer)!==null&&o!==void 0?o:k3[C],{pause:_,resume:x}=l3(v,q=>I(q),{flush:i,deep:r,eventFilter:h});te(k,()=>$(),{flush:i});let P=!1;const V=q=>{g&&!P||$(q)},E=q=>{g&&!P||U(q)};d&&a&&(n instanceof Storage?Hn(d,"storage",V,{passive:!0}):Hn(d,Pf,E)),g?ya(()=>{P=!0,$()}):$();function L(q,J){if(d){const G={key:k.value,oldValue:q,newValue:J,storageArea:n};d.dispatchEvent(n instanceof Storage?new StorageEvent("storage",G):new CustomEvent(Pf,{detail:G}))}}function I(q){try{const J=n.getItem(k.value);if(q==null)L(J,null),n.removeItem(k.value);else{const G=y.write(q);J!==G&&(n.setItem(k.value,G),L(J,G))}}catch(J){m(J)}}function N(q){const J=q?q.newValue:n.getItem(k.value);if(J==null)return c&&b!=null&&n.setItem(k.value,y.write(b)),b;if(!q&&u){const G=y.read(J);return typeof u=="function"?u(G,b):C==="object"&&!Array.isArray(G)?{...b,...G}:G}else return typeof J!="string"?J:y.read(J)}function $(q){if(!(q&&q.storageArea!==n)){if(q&&q.key==null){v.value=b;return}if(!(q&&q.key!==k.value)){_();try{const J=y.write(v.value);(q===void 0||q?.newValue!==J)&&(v.value=N(q))}catch(J){m(J)}finally{q?ze(x):x()}}}}function U(q){$(q.detail)}return v}const w3="*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}";function C3(e={}){const{selector:t="html",attribute:n="class",initialValue:s="auto",window:o=Rt,storage:i,storageKey:r="vueuse-color-scheme",listenToStorageChanges:a=!0,storageRef:c,emitAuto:u,disableTransition:f=!0}=e,d={auto:"",light:"light",dark:"dark",...e.modes||{}},h=ah({window:o}),m=F(()=>h.value?"dark":"light"),g=c||(r==null?Nc(s):Dc(r,s,i,{window:o,listenToStorageChanges:a})),v=F(()=>g.value==="auto"?m.value:g.value),k=rh("updateHTMLAttrs",(_,x,P)=>{const V=typeof _=="string"?o?.document.querySelector(_):ba(_);if(!V)return;const E=new Set,L=new Set;let I=null;if(x==="class"){const $=P.split(/\s/g);Object.values(d).flatMap(U=>(U||"").split(/\s/g)).filter(Boolean).forEach(U=>{$.includes(U)?E.add(U):L.add(U)})}else I={key:x,value:P};if(E.size===0&&L.size===0&&I===null)return;let N;f&&(N=o.document.createElement("style"),N.appendChild(document.createTextNode(w3)),o.document.head.appendChild(N));for(const $ of E)V.classList.add($);for(const $ of L)V.classList.remove($);I&&V.setAttribute(I.key,I.value),f&&(o.getComputedStyle(N).opacity,document.head.removeChild(N))});function b(_){var x;k(t,n,(x=d[_])!==null&&x!==void 0?x:_)}function C(_){e.onChanged?e.onChanged(_,b):b(_)}te(v,C,{flush:"post",immediate:!0}),ya(()=>C(v.value));const y=F({get(){return u?g.value:v.value},set(_){g.value=_}});return Object.assign(y,{store:g,system:m,state:v})}function _3(e={}){const{valueDark:t="dark",valueLight:n=""}=e,s=C3({...e,onChanged:(i,r)=>{var a;e.onChanged?(a=e.onChanged)===null||a===void 0||a.call(e,i==="dark",r,i):r(i)},modes:{dark:t,light:n}}),o=F(()=>s.system.value);return F({get(){return s.value==="dark"},set(i){const r=i?"dark":"light";o.value===r?s.value="auto":s.value=r}})}function Ua(e){return typeof Window<"u"&&e instanceof Window?e.document.documentElement:typeof Document<"u"&&e instanceof Document?e.documentElement:e}const Mf=1;function S3(e,t={}){const{throttle:n=0,idle:s=200,onStop:o=As,onScroll:i=As,offset:r={left:0,right:0,top:0,bottom:0},observe:a={mutation:!1},eventListenerOptions:c={capture:!1,passive:!0},behavior:u="auto",window:f=Rt,onError:d=L=>{console.error(L)}}=t,h=typeof a=="boolean"?{mutation:a}:a,m=He(0),g=He(0),v=F({get(){return m.value},set(L){b(L,void 0)}}),k=F({get(){return g.value},set(L){b(void 0,L)}});function b(L,I){var N,$,U,q;if(!f)return;const J=Se(e);if(!J)return;(N=J instanceof Document?f.document.body:J)===null||N===void 0||N.scrollTo({top:($=Se(I))!==null&&$!==void 0?$:k.value,left:(U=Se(L))!==null&&U!==void 0?U:v.value,behavior:Se(u)});const G=(J==null||(q=J.document)===null||q===void 0?void 0:q.documentElement)||J?.documentElement||J;v!=null&&(m.value=G.scrollLeft),k!=null&&(g.value=G.scrollTop)}const C=He(!1),y=Dn({left:!0,right:!1,top:!0,bottom:!1}),_=Dn({left:!1,right:!1,top:!1,bottom:!1}),x=L=>{C.value&&(C.value=!1,_.left=!1,_.right=!1,_.top=!1,_.bottom=!1,o(L))},P=i3(x,n+s),V=L=>{var I;if(!f)return;const N=(L==null||(I=L.document)===null||I===void 0?void 0:I.documentElement)||L?.documentElement||ba(L),{display:$,flexDirection:U,direction:q}=getComputedStyle(N),J=q==="rtl"?-1:1,G=N.scrollLeft;_.left=Gm.value;const ae=Math.abs(G*J)<=(r.left||0),ne=Math.abs(G*J)+N.clientWidth>=N.scrollWidth-(r.right||0)-Mf;$==="flex"&&U==="row-reverse"?(y.left=ne,y.right=ae):(y.left=ae,y.right=ne),m.value=G;let he=N.scrollTop;L===f.document&&!he&&(he=f.document.body.scrollTop),_.top=heg.value;const st=Math.abs(he)<=(r.top||0),je=Math.abs(he)+N.clientHeight>=N.scrollHeight-(r.bottom||0)-Mf;$==="flex"&&U==="column-reverse"?(y.top=je,y.bottom=st):(y.top=st,y.bottom=je),g.value=he},E=L=>{var I;f&&(V((I=L.target.documentElement)!==null&&I!==void 0?I:L.target),C.value=!0,P(L),i(L))};return Hn(e,"scroll",n?r3(E,n,!0,!1):E,c),ya(()=>{try{const L=Se(e);if(!L)return;V(L)}catch(L){d(L)}}),h?.mutation&&e!=null&&e!==f&&e!==document&&h3(e,()=>{const L=Se(e);L&&V(L)},{attributes:!0,childList:!0,subtree:!0}),Hn(e,"scrollend",x,c),{x:v,y:k,isScrolling:C,arrivedState:y,directions:_,measure(){const L=Se(e);f&&L&&V(L)}}}function jA(e,t,n={}){const{window:s=Rt}=n;return Dc(e,t,s?.localStorage,n)}function T3(e={}){const{window:t=Rt}=e,n=t?.navigator,s=Oc(()=>n&&"language"in n),o=He(n?.language);return Hn(t,"languagechange",()=>{n&&(o.value=n.language)},{passive:!0}),{isSupported:s,language:o}}function lh(e){const t=window.getComputedStyle(e);if(t.overflowX==="scroll"||t.overflowY==="scroll"||t.overflowX==="auto"&&e.clientWidth1?!0:(t.preventDefault&&t.preventDefault(),!1)}const Wa=new WeakMap;function ch(e,t=!1){const n=He(t);let s=null,o="";te(Nc(e),a=>{const c=Ua(Se(a));if(c){const u=c;if(Wa.get(u)||Wa.set(u,u.style.overflow),u.style.overflow!=="hidden"&&(o=u.style.overflow),u.style.overflow==="hidden")return n.value=!0;if(n.value)return u.style.overflow="hidden"}},{immediate:!0});const i=()=>{const a=Ua(Se(e));!a||n.value||(Lf&&(s=Hn(a,"touchmove",c=>{E3(c)},{passive:!1})),a.style.overflow="hidden",n.value=!0)},r=()=>{const a=Ua(Se(e));!a||!n.value||(Lf&&s?.(),a.style.overflow=o,Wa.delete(a),n.value=!1)};return Bc(r),F({get(){return n.value},set(a){a?i():r()}})}function UA(e,t,n={}){const{window:s=Rt}=n;return Dc(e,t,s?.sessionStorage,n)}function uh(e={}){const{window:t=Rt,...n}=e;return S3(t,n)}function x3(e={}){const{window:t=Rt,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:s=Number.POSITIVE_INFINITY,listenOrientation:o=!0,includeScrollbar:i=!0,type:r="inner"}=e,a=He(n),c=He(s),u=()=>{if(t)if(r==="outer")a.value=t.outerWidth,c.value=t.outerHeight;else if(r==="visual"&&t.visualViewport){const{width:d,height:h,scale:m}=t.visualViewport;a.value=Math.round(d*m),c.value=Math.round(h*m)}else i?(a.value=t.innerWidth,c.value=t.innerHeight):(a.value=t.document.documentElement.clientWidth,c.value=t.document.documentElement.clientHeight)};u(),ya(u);const f={passive:!0};return Hn("resize",u,f),t&&r==="visual"&&t.visualViewport&&Hn(t.visualViewport,"resize",u,f),o&&te(Br("(orientation: portrait)"),()=>u()),{width:a,height:c}}const A3={};var $3={};const ka=/^(?:[a-z]+:|\/\/)/i,L3="vitepress-theme-appearance",fh=Symbol("stack-view:unpack"),I3=/#.*$/,P3=/[?#].*$/,M3=/(?:(^|\/)index)?\.(?:md|html)$/,wt=typeof document<"u",dh={relativePath:"404.md",filePath:"",title:"404",description:"Not Found",headers:[],frontmatter:{sidebar:!1,layout:"page"},lastUpdated:0,isNotFound:!0};function $s(e,t,n=!1){if(t===void 0)return!1;if(e=Ff(`/${e}`),n)return new RegExp(t).test(e);if(Ff(t)!==e)return!1;const s=t.match(I3);return s?(wt?location.hash:"")===s[0]:!0}function Ff(e){return decodeURI(e).replace(P3,"").replace(M3,"$1")}function hh(e){return ka.test(e)}function F3(e,t){return Object.keys(e?.locales||{}).find(n=>n!=="root"&&!hh(n)&&$s(t,`^/${n}/`,!0))||"root"}function B3(e,t){const n=F3(e,t),{label:s,link:o,...i}=e.locales[n]??{};Object.assign(i,{localeIndex:n});const r=H3(e,t),a={head:O3(e.head??[],i.head??[],...r.map(c=>c.head??[]).reverse())};return Rc(a,...r,i,e)}function N3(e,t){const n=t.title||e.title,s=t.titleTemplate??e.titleTemplate;if(typeof s=="string"&&s.includes(":title"))return s.replace(/:title/g,n);const o=V3(e.title,s);return n===o.slice(3)?n:`${n}${o}`}function V3(e,t){return t===!1?"":t===!0||t===void 0?` | ${e}`:e===t?"":` | ${t}`}function O3(...e){const t=[],n=new Map;for(const s of e)for(const o of s){const[i,r]=o,a=Object.entries(r)[0];if(i!=="meta"||!a){t.push(o);continue}const c=`${a[0]}=${a[1]}`,u=n.get(c);u!=null?t[u]=o:(n.set(c,t.length),t.push(o))}return t}const D3=/[\u0000-\u001F"#$&*+,:;<=>?[\]^`{|}\u007F]/g,R3=/^[a-z]:/i;function Bf(e){const t=R3.exec(e),n=t?t[0]:"";return n+e.slice(n.length).replace(D3,"_").replace(/(^|\/)_+(?=[^/]*$)/,"$1")}const qa=new Set;function ph(e){if(qa.size===0){const n=typeof process=="object"&&$3?.VITE_EXTRA_EXTENSIONS||A3?.VITE_EXTRA_EXTENSIONS||"";("3g2,3gp,aac,ai,apng,au,avif,bin,bmp,cer,class,conf,crl,css,csv,dll,doc,eps,epub,exe,gif,gz,ics,ief,jar,jpe,jpeg,jpg,js,json,jsonld,m4a,man,mid,midi,mjs,mov,mp2,mp3,mp4,mpe,mpeg,mpg,mpp,oga,ogg,ogv,ogx,opus,otf,p10,p7c,p7m,p7s,pdf,png,ps,qt,roff,rtf,rtx,ser,svg,t,tif,tiff,tr,ts,tsv,ttf,txt,vtt,wav,weba,webm,webp,woff,woff2,xhtml,xml,yaml,yml,zip"+(n&&typeof n=="string"?","+n:"")).split(",").forEach(s=>qa.add(s))}const t=e.split(".").pop();return t==null||!qa.has(t.toLowerCase())}function WA(e){return e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function H3({additionalConfig:e},t){if(e===void 0)return[];if(typeof e=="function")return e(t)??[];const n=[],s=t.split("/").slice(0,-1);for(;s.length;){const o=`/${s.join("/")}/`;n.push(e[o]),s.pop()}return n.push(e["/"]),n.filter(o=>o!==void 0)}function Rc(...e){const t=e.filter(o=>z3(o));if(t.length<=1)return e[0];const n=new Set(t.flatMap(o=>Reflect.ownKeys(o))),s=[...n];return new Proxy({},{get(o,i){return i===fh?t:Rc(...t.map(r=>r[i]).filter(r=>r!==void 0))},set(){throw new Error("StackView is read-only and cannot be mutated.")},has(o,i){return n.has(i)},ownKeys(){return s},getOwnPropertyDescriptor(o,i){for(const r of t){const a=Object.getOwnPropertyDescriptor(r,i);if(a)return a}}})}Rc.unpack=function(e){return e?.[fh]};function z3(e){return Object.prototype.toString.call(e)==="[object Object]"}const j3=["shellscript","shell","bash","sh","zsh"];function qA(e){return j3.includes(e)}const U3=Symbol(),bs=He(It(Xv));function KA(e){const t=F(()=>B3(bs.value,e.data.relativePath)),n=t.value.appearance,s=n==="force-dark"?j(!0):n==="force-auto"?ah():n?_3({storageKey:L3,initialValue:()=>n==="dark"?"dark":"auto",...typeof n=="object"?n:{}}):j(!1),o=j(wt?location.hash:"");return wt&&window.addEventListener("hashchange",()=>{o.value=location.hash}),te(()=>e.data,()=>{o.value=wt?location.hash:""}),{site:t,theme:F(()=>t.value.themeConfig),page:F(()=>e.data),frontmatter:F(()=>e.data.frontmatter),params:F(()=>e.data.params),lang:F(()=>t.value.lang),dir:F(()=>e.data.frontmatter.dir||t.value.dir),localeIndex:F(()=>t.value.localeIndex||"root"),title:F(()=>N3(t.value,e.data)),description:F(()=>e.data.description||t.value.description),isDark:s,hash:F(()=>o.value)}}function Ae(){const e=qe(U3);if(!e)throw new Error("vitepress data not properly injected in app");return e}function W3(e,t){return`${e}${t}`.replace(/\/+/g,"/")}function Ee(e){return ka.test(e)||!e.startsWith("/")?e:W3(bs.value.base,e)}function YA(e){let t=e.replace(/\.html$/,"");if(t=decodeURIComponent(t),t=t.replace(/\/$/,"/index"),wt){t=Bf(t.slice(1).replace(/\//g,"_")||"index")+".md";let s=__VP_HASH_MAP__[t.toLowerCase()];if(s||(t=t.endsWith("_index.md")?t.slice(0,-9)+".md":t.slice(0,-3)+"_index.md",s=__VP_HASH_MAP__[t.toLowerCase()]),!s)return null;t=`/assets/${t}.${s}.js`}else t=`./${Bf(t.slice(1).replace(/\//g,"_"))}.md.js`;return t}let ur=[];function xi(e){ur.push(e),c3(()=>{ur=ur.filter(t=>t!==e)})}function Hc(){let e=bs.value.scrollOffset,t=0,n=24;if(typeof e=="object"&&"padding"in e&&(n=e.padding,e=e.selector),typeof e=="number")t=e;else if(typeof e=="string")t=Nf(e,n);else if(Array.isArray(e))for(const s of e){const o=Nf(s,n);if(o){t=o;break}}return t}function Nf(e,t){const n=document.querySelector(e);if(!n)return 0;const s=n.getBoundingClientRect().bottom;return s<0?0:s+t}const q3=Symbol(),mh="http://a.com",K3=()=>({path:"/",hash:"",query:"",component:null,data:dh});function GA(e,t){const n=Dn(K3()),s={route:n,async go(a,c){a=Tl(a),await s.onBeforeRouteChange?.(a)!==!1&&((!wt||await Y3(a,c))&&await i(a),r(),await s.onAfterRouteChange?.(a))}};let o=null;async function i(a,c=0,u=!1){if(await s.onBeforePageLoad?.(a)===!1)return;const f=new URL(a,mh),d=o=f.pathname;try{let h=await e(d);if(!h)throw new Error(`Page not found: ${d}`);if(o===d){o=null;const{default:m,__pageData:g}=h;if(!m)throw new Error(`Invalid route component: ${m}`);await s.onAfterPageLoad?.(a),n.path=wt?d:Ee(d),n.component=go(m),n.data=go(g),r(f),wt&&ze(()=>{let v=bs.value.base+g.relativePath.replace(/(?:(^|\/)index)?\.md$/,"$1");return!bs.value.cleanUrls&&!v.endsWith("/")&&(v+=".html"),v!==f.pathname&&(f.pathname=v,a=v+f.search+f.hash,history.replaceState({},"",a)),Sl(f.hash,!1,c)})}}catch(h){if(!/fetch|Page not found/.test(h.message)&&!/^\/404(\.html|\/)?$/.test(a)&&console.error(h),!u)try{const m=await fetch(bs.value.base+"hashmap.json");window.__VP_HASH_MAP__=await m.json(),await i(a,c,!0);return}catch{}if(o===d){o=null,n.path=wt?d:Ee(d),n.component=t?go(t):null;const m=wt?n.path.replace(/(^|\/)$/,"$1index").replace(/(\.html)?$/,".md").slice(bs.value.base.length):"404.md";n.data={...dh,relativePath:m},r(f)}}}function r(a=wt?location:{search:"",hash:""}){n.query=a.search,n.hash=decodeURIComponent(a.hash)}return wt&&(history.state===null&&history.replaceState({},""),window.addEventListener("click",a=>{if(a.defaultPrevented||!(a.target instanceof Element)||a.target.closest("button")||a.button!==0||a.ctrlKey||a.shiftKey||a.altKey||a.metaKey)return;const c=a.target.closest("a");if(!c||c.closest(".vp-raw")||c.hasAttribute("download")||c.hasAttribute("target"))return;const u=c.getAttribute("href")??(c instanceof SVGAElement?c.getAttribute("xlink:href"):null);if(u==null)return;const{href:f,origin:d,pathname:h}=new URL(u,c.baseURI),m=new URL(location.href);d===m.origin&&ph(h)&&(a.preventDefault(),s.go(f,{smoothScroll:c.classList.contains("header-anchor")}))},{capture:!0}),window.addEventListener("popstate",async a=>{if(a.state===null)return;const c=Tl(location.href);await i(c,a.state&&a.state.scrollPosition||0),r(),await s.onAfterRouteChange?.(c)}),window.addEventListener("hashchange",a=>{a.preventDefault(),r()})),s}function Ls(){const e=qe(q3);if(!e)throw new Error("useRouter() is called without provider.");return e}function kn(){return Ls().route}function Sl(e,t=!1,n=0){if(!e||n){window.scrollTo(0,n);return}let s=null;try{s=document.getElementById(decodeURIComponent(e).slice(1))}catch(a){console.warn(a)}if(!s)return;const o=window.scrollY+s.getBoundingClientRect().top-Hc()+Number.parseInt(window.getComputedStyle(s).paddingTop,10)||0,i=window.matchMedia("(prefers-reduced-motion)").matches?"instant":t&&Math.abs(o-window.scrollY)<=window.innerHeight?"smooth":"auto";requestAnimationFrame(()=>{if(window.scrollTo({left:0,top:o,behavior:i}),s.focus({preventScroll:!0}),document.activeElement===s||s.hasAttribute("tabindex"))return;const a=()=>{s.removeAttribute("tabindex"),s.removeEventListener("blur",a)};s.setAttribute("tabindex","-1"),s.addEventListener("blur",a),s.focus({preventScroll:!0}),document.activeElement!==s&&a()})}function Tl(e){const t=new URL(e,mh);return t.pathname=t.pathname.replace(/(^|\/)index(\.html)?$/,"$1"),bs.value.cleanUrls?t.pathname=t.pathname.replace(/\.html$/,""):!t.pathname.endsWith("/")&&!t.pathname.endsWith(".html")&&(t.pathname+=".html"),t.pathname+t.search+t.hash}async function Y3(e,{smoothScroll:t=!1,initialLoad:n=!1,replace:s=!1}={}){const o=Tl(location.href),i=new URL(e,location.origin),r=new URL(o,location.origin);if(e===o){if(!n)return Sl(i.hash,t),!1}else if(s?history.replaceState({},"",e):(history.replaceState({scrollPosition:window.scrollY},""),history.pushState({},"",e)),i.pathname===r.pathname)return i.hash!==r.hash&&(window.dispatchEvent(new HashChangeEvent("hashchange",{oldURL:r.href,newURL:i.href})),Sl(i.hash,t)),!1;return!0}const Ki=()=>ur.forEach(e=>e()),JA=z({name:"VitePressContent",props:{as:{type:[Object,String],default:"div"}},setup(e){const t=kn(),{frontmatter:n,site:s}=Ae();return te(n,Ki,{deep:!0,flush:"post"}),()=>nn(e.as,s.value.contentProps??{style:{position:"relative"}},[t.component?nn(t.component,{onVnodeMounted:Ki,onVnodeUpdated:Ki,onVnodeUnmounted:Ki}):"404 Page Not Found"])}}),xe=Ae;function G3(e,t){let n,s=!1;return()=>{n&&clearTimeout(n),s?n=setTimeout(e,t):(e(),(s=!0)&&setTimeout(()=>s=!1,t))}}function El(e){return e.startsWith("/")?e:`/${e}`}function zc(e){const{pathname:t,search:n,hash:s,protocol:o}=new URL(e,"http://a.com");if(hh(e)||e.startsWith("#")||!o.startsWith("http")||!ph(t))return e;const{site:i}=xe(),r=t.endsWith("/")||t.endsWith(".html")?e:e.replace(/(?:(^\.+)\/)?.*$/,`$1${t.replace(/(\.md)?$/,i.value.cleanUrls?"":".html")}${n}${s}`);return Ee(r)}function Ai({correspondingLink:e=!1}={}){const{site:t,localeIndex:n,page:s,theme:o,hash:i}=xe(),r=F(()=>({label:t.value.locales[n.value]?.label,link:t.value.locales[n.value]?.link||(n.value==="root"?"/":`/${n.value}/`)}));return{localeLinks:F(()=>Object.entries(t.value.locales).flatMap(([c,u])=>r.value.label===u.label?[]:{text:u.label,link:J3(u.link||(c==="root"?"/":`/${c}/`),o.value.i18nRouting!==!1&&e,s.value.relativePath.slice(r.value.link.length-1),!t.value.cleanUrls)+i.value,lang:u.lang,dir:u.dir})),currentLang:r}}function J3(e,t,n,s){return t?e.replace(/\/$/,"")+El(n.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):e}const X3={class:"NotFound"},Q3={class:"code"},Z3={class:"title"},e4={class:"quote"},t4={class:"action"},n4=["href","aria-label"],s4=z({__name:"NotFound",setup(e){const{theme:t}=xe(),{currentLang:n}=Ai();return(s,o)=>(p(),w("div",X3,[S("p",Q3,W(l(t).notFound?.code??"404"),1),S("h1",Z3,W(l(t).notFound?.title??"PAGE NOT FOUND"),1),o[0]||(o[0]=S("div",{class:"divider"},null,-1)),S("blockquote",e4,W(l(t).notFound?.quote??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),S("div",t4,[S("a",{class:"link",href:l(Ee)(l(t).notFound?.link??l(n).link),"aria-label":l(t).notFound?.linkLabel??"go to home"},W(l(t).notFound?.linkText??"Take me home"),9,n4)])]))}}),o4=ke(s4,[["__scopeId","data-v-1b32e0f1"]]);function gh(e,t){if(Array.isArray(e))return fr(e);if(e==null)return[];t=El(t);const n=Object.keys(e).sort((o,i)=>i.split("/").length-o.split("/").length).find(o=>t.startsWith(El(o))),s=n?e[n]:[];return Array.isArray(s)?fr(s):fr(s.items,s.base)}function i4(e){const t=[];let n=0;for(const s in e){const o=e[s];if(o.items){n=t.push(o);continue}t[n]||t.push({items:[]}),t[n].items.push(o)}return t}function r4(e){const t=[];function n(s){for(const o of s)o.text&&o.link&&t.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&n(o.items)}return n(e),t}function xl(e,t){return Array.isArray(t)?t.some(n=>xl(e,n)):$s(e,t.link)?!0:t.items?xl(e,t.items):!1}function fr(e,t){return[...e].map(n=>{const s={...n},o=s.base||t;return o&&s.link&&(s.link=o+s.link.replace(/^\//,o.endsWith("/")?"":"/")),s.items&&(s.items=fr(s.items,o)),s})}function a4(){const{hasSidebar:e}=ls(),t=Br("(min-width: 960px)"),n=Br("(min-width: 1280px)");return{isAsideEnabled:F(()=>!n.value&&!t.value?!1:e.value?n.value:t.value)}}const l4=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,Al=[];function vh(e){return typeof e.outline=="object"&&!Array.isArray(e.outline)&&e.outline.label||e.outlineTitle||"On this page"}function c4(e){const t=[...document.querySelectorAll(".VPDoc h1, .VPDoc h2, .VPDoc h3, .VPDoc h4, .VPDoc h5, .VPDoc h6")].filter(n=>n.id&&n.hasChildNodes()).map(n=>{const s=Number(n.tagName[1]);return{element:n,title:u4(n),link:"#"+n.id,level:s}});return f4(t,e)}function u4(e){let t="";for(const n of e.childNodes)if(n.nodeType===1){if(l4.test(n.className))continue;t+=n.textContent}else n.nodeType===3&&(t+=n.textContent);return t.trim()}function f4(e,t){if(t===!1)return[];const n=(typeof t=="object"&&!Array.isArray(t)?t.level:t)||2,[s,o]=typeof n=="number"?[n,n]:n==="deep"?[2,6]:n;return p4(e,s,o)}function d4(e,t){const{isAsideEnabled:n}=a4(),s=G3(i,100);let o=null;be(()=>{requestAnimationFrame(i),window.addEventListener("scroll",s)}),Mo(()=>{r(location.hash)}),cn(()=>{window.removeEventListener("scroll",s)});function i(){if(!n.value)return;const a=window.scrollY,c=window.innerHeight,u=document.body.offsetHeight,f=Math.abs(a+c-u)<1,d=Al.map(({element:m,link:g})=>({link:g,top:h4(m)})).filter(({top:m})=>!Number.isNaN(m)).sort((m,g)=>m.top-g.top);if(!d.length){r(null);return}if(a<1){r(null);return}if(f){r(d[d.length-1].link);return}let h=null;for(const{link:m,top:g}of d){if(g>a+Hc()+4)break;h=m}r(h)}function r(a){o&&o.classList.remove("active"),a==null?o=null:o=e.value.querySelector(`a[href="${decodeURIComponent(a)}"]`);const c=o;c?(c.classList.add("active"),t.value.style.top=c.offsetTop+39+"px",t.value.style.opacity="1"):(t.value.style.top="33px",t.value.style.opacity="0")}}function h4(e){let t=0;for(;e!==document.body;){if(e===null)return NaN;t+=e.offsetTop,e=e.offsetParent}return t}function p4(e,t,n){Al.length=0;const s=[],o=[];return e.forEach(i=>{const r={...i,children:[]};let a=o[o.length-1];for(;a&&a.level>=r.level;)o.pop(),a=o[o.length-1];if(r.element.classList.contains("ignore-header")||a&&"shouldIgnore"in a){o.push({level:r.level,shouldIgnore:!0});return}r.level>n||r.level{t=co.value?document.activeElement:void 0}),be(()=>{window.addEventListener("keyup",n)}),cn(()=>{window.removeEventListener("keyup",n)});function n(s){s.key==="Escape"&&co.value&&(e(),t?.focus())}}function g4(){function e(){co.value=!0}function t(){co.value=!1}function n(){co.value?t():e()}return{isOpen:co,open:e,close:t,toggle:n}}function v4(e){const{page:t,hash:n}=xe(),s=j(!1),o=F(()=>e.value.collapsed!=null),i=F(()=>!!e.value.link),r=j(!1),a=()=>{r.value=$s(t.value.relativePath,e.value.link)};te([t,e,n],a),be(a);const c=F(()=>r.value?!0:e.value.items?xl(t.value.relativePath,e.value.items):!1),u=F(()=>!!(e.value.items&&e.value.items.length));zn(()=>{s.value=!!(o.value&&e.value.collapsed)}),da(()=>{(r.value||c.value)&&(s.value=!1)});function f(){o.value&&(s.value=!s.value)}return{collapsed:s,collapsible:o,isLink:i,isActiveLink:r,hasActiveLink:c,hasChildren:u,toggle:f}}const $l=He([]),Zo=He([]),Ll=He(!1);function ls(){const{frontmatter:e,theme:t}=xe(),n=F(()=>!!(e.value.isHome??e.value.layout==="home")),s=F(()=>e.value.sidebar!==!1&&Zo.value.length>0&&!n.value),o=F(()=>s.value&&Ll.value),i=F(()=>s.value?i4(Zo.value):[]),r=F(()=>n.value?!1:e.value.aside!=null?!!e.value.aside:t.value.aside!==!1),a=F(()=>r.value?e.value.aside==null?t.value.aside==="left":e.value.aside==="left":!1),c=F(()=>$l.value.length>0);return{isHome:n,sidebar:al(Zo),sidebarGroups:i,hasSidebar:s,isSidebarEnabled:o,hasAside:r,leftAside:a,headers:al($l),hasLocalNav:c}}function y4({closeSidebar:e}){const{frontmatter:t,page:n,theme:s}=xe();te(()=>[n.value.relativePath,s.value.sidebar],([i,r])=>{const a=r?gh(r,i):[];JSON.stringify(a)!==JSON.stringify(Zo.value)&&(Zo.value=a)},{immediate:!0,deep:!0,flush:"sync"}),xi(()=>{$l.value=c4(t.value.outline??s.value.outline)}),wt&&(Ll.value=window.innerWidth>=960,window.addEventListener("resize",()=>{Ll.value=window.innerWidth>=960},{passive:!0}));const o=kn();te(()=>o.path,e),m4(e)}const yh=Symbol("layout-info"),b4=["href","title"],k4=z({__name:"VPDocOutlineItem",props:{headers:{},root:{type:Boolean}},setup(e){return(t,n)=>{const s=un("VPDocOutlineItem",!0);return p(),w("ul",{class:T(["VPDocOutlineItem",e.root?"root":"nested"])},[(p(!0),w(Y,null,le(e.headers,({children:o,link:i,title:r})=>(p(),w("li",null,[S("a",{class:"outline-link",href:i,title:r},W(r),9,b4),o?.length?(p(),D(s,{key:0,headers:o},null,8,["headers"])):A("",!0)]))),256))],2)}}}),bh=ke(k4,[["__scopeId","data-v-d90f9aed"]]),w4={class:"content"},C4={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},_4=z({__name:"VPDocAsideOutline",setup(e){const{theme:t}=xe(),n=j(),s=j(),{headers:o,hasLocalNav:i}=ls();return d4(n,s),(r,a)=>(p(),w("nav",{"aria-labelledby":"doc-outline-aria-label",class:T(["VPDocAsideOutline",{"has-outline":l(i)}]),ref_key:"container",ref:n},[S("div",w4,[S("div",{class:"outline-marker",ref_key:"marker",ref:s},null,512),S("div",C4,W(l(vh)(l(t))),1),H(bh,{headers:l(o),root:!0},null,8,["headers"])])],2))}}),S4=ke(_4,[["__scopeId","data-v-3f819b94"]]),T4={class:"VPDocAsideCarbonAds"},E4=z({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(e){const t=()=>null;return(n,s)=>(p(),w("div",T4,[H(l(t),{"carbon-ads":e.carbonAds},null,8,["carbon-ads"])]))}}),x4={class:"VPDocAside"},A4=z({__name:"VPDocAside",setup(e){const{theme:t}=xe();return(n,s)=>(p(),w("div",x4,[M(n.$slots,"aside-top",{},void 0,!0),M(n.$slots,"aside-outline-before",{},void 0,!0),H(S4),M(n.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=S("div",{class:"spacer"},null,-1)),M(n.$slots,"aside-ads-before",{},void 0,!0),l(t).carbonAds?(p(),D(E4,{key:0,"carbon-ads":l(t).carbonAds},null,8,["carbon-ads"])):A("",!0),M(n.$slots,"aside-ads-after",{},void 0,!0),M(n.$slots,"aside-bottom",{},void 0,!0)]))}}),$4=ke(A4,[["__scopeId","data-v-77a1b21d"]]);function L4(){const{theme:e,page:t}=xe();return F(()=>{const{text:n="Edit this page",pattern:s=""}=e.value.editLink||{};let o;return typeof s=="function"?o=s(t.value):o=s.replace(/:path/g,t.value.filePath),{url:o,text:n}})}function I4(){const{page:e,theme:t,frontmatter:n}=xe();return F(()=>{const s=gh(t.value.sidebar,e.value.relativePath),o=r4(s),i=P4(o,u=>u.link.replace(/[?#].*$/,"")),r=i.findIndex(u=>$s(e.value.relativePath,u.link)),a=t.value.docFooter?.prev===!1&&!n.value.prev||n.value.prev===!1,c=t.value.docFooter?.next===!1&&!n.value.next||n.value.next===!1;return{prev:a?void 0:{text:(typeof n.value.prev=="string"?n.value.prev:typeof n.value.prev=="object"?n.value.prev.text:void 0)??i[r-1]?.docFooterText??i[r-1]?.text,link:(typeof n.value.prev=="object"?n.value.prev.link:void 0)??i[r-1]?.link},next:c?void 0:{text:(typeof n.value.next=="string"?n.value.next:typeof n.value.next=="object"?n.value.next.text:void 0)??i[r+1]?.docFooterText??i[r+1]?.text,link:(typeof n.value.next=="object"?n.value.next.link:void 0)??i[r+1]?.link}}})}function P4(e,t){const n=new Set;return e.filter(s=>{const o=t(s);return n.has(o)?!1:n.add(o)})}const Vn=z({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(e){const t=e,n=F(()=>t.tag??(t.href?"a":"span")),s=F(()=>t.href&&ka.test(t.href)||t.target==="_blank");return(o,i)=>(p(),D(Be(n.value),{class:T(["VPLink",{link:e.href,"vp-external-link-icon":s.value,"no-icon":e.noIcon}]),href:e.href?l(zc)(e.href):void 0,target:e.target??(s.value?"_blank":void 0),rel:e.rel??(s.value?"noreferrer":void 0)},{default:O(()=>[M(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),M4={class:"VPLastUpdated"},F4=["datetime"],B4=z({__name:"VPDocFooterLastUpdated",setup(e){const{theme:t,page:n,lang:s}=xe(),{language:o}=T3(),i=z1("timeRef"),r=F(()=>new Date(n.value.lastUpdated)),a=F(()=>r.value.toISOString()),c=He("");return be(()=>{zn(()=>{const u=t.value.lastUpdated?.formatOptions?.forceLocale?s.value:o.value;c.value=new Intl.DateTimeFormat(u,t.value.lastUpdated?.formatOptions??{dateStyle:"medium",timeStyle:"medium"}).format(r.value),u&&s.value!==u?i.value?.setAttribute("lang",u):i.value?.removeAttribute("lang")})}),(u,f)=>(p(),w("p",M4,[rt(W(l(t).lastUpdated?.text||l(t).lastUpdatedText||"Last updated")+": ",1),S("time",{ref_key:"timeRef",ref:i,datetime:a.value},W(c.value),9,F4)]))}}),N4=ke(B4,[["__scopeId","data-v-8f712c9b"]]),V4={key:0,class:"VPDocFooter"},O4={key:0,class:"edit-info"},D4={key:0,class:"edit-link"},R4={key:1,class:"last-updated"},H4={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},z4={class:"pager"},j4=["innerHTML"],U4=["innerHTML"],W4={class:"pager"},q4=["innerHTML"],K4=["innerHTML"],Y4=z({__name:"VPDocFooter",setup(e){const{theme:t,page:n,frontmatter:s}=xe(),o=L4(),i=I4(),r=F(()=>t.value.editLink&&s.value.editLink!==!1),a=F(()=>n.value.lastUpdated),c=F(()=>r.value||a.value||i.value.prev||i.value.next);return(u,f)=>c.value?(p(),w("footer",V4,[M(u.$slots,"doc-footer-before",{},void 0,!0),r.value||a.value?(p(),w("div",O4,[r.value?(p(),w("div",D4,[H(Vn,{class:"edit-link-button",href:l(o).url,"no-icon":!0},{default:O(()=>[f[0]||(f[0]=S("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),rt(" "+W(l(o).text),1)]),_:1},8,["href"])])):A("",!0),a.value?(p(),w("div",R4,[H(N4)])):A("",!0)])):A("",!0),l(i).prev?.link||l(i).next?.link?(p(),w("nav",H4,[f[1]||(f[1]=S("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),S("div",z4,[l(i).prev?.link?(p(),D(Vn,{key:0,class:"pager-link prev",href:l(i).prev.link},{default:O(()=>[S("span",{class:"desc",innerHTML:l(t).docFooter?.prev||"Previous page"},null,8,j4),S("span",{class:"title",innerHTML:l(i).prev.text},null,8,U4)]),_:1},8,["href"])):A("",!0)]),S("div",W4,[l(i).next?.link?(p(),D(Vn,{key:0,class:"pager-link next",href:l(i).next.link},{default:O(()=>[S("span",{class:"desc",innerHTML:l(t).docFooter?.next||"Next page"},null,8,q4),S("span",{class:"title",innerHTML:l(i).next.text},null,8,K4)]),_:1},8,["href"])):A("",!0)])])):A("",!0)])):A("",!0)}}),G4=ke(Y4,[["__scopeId","data-v-af105c74"]]),J4={class:"container"},X4={class:"aside-container"},Q4={class:"aside-content"},Z4={class:"content"},e6={class:"content-container"},t6={class:"main"},n6=z({__name:"VPDoc",setup(e){const{theme:t}=xe(),n=kn(),{hasSidebar:s,hasAside:o,leftAside:i}=ls(),r=F(()=>n.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(a,c)=>{const u=un("Content");return p(),w("div",{class:T(["VPDoc",{"has-sidebar":l(s),"has-aside":l(o)}])},[M(a.$slots,"doc-top",{},void 0,!0),S("div",J4,[l(o)?(p(),w("div",{key:0,class:T(["aside",{"left-aside":l(i)}])},[c[0]||(c[0]=S("div",{class:"aside-curtain"},null,-1)),S("div",X4,[S("div",Q4,[H($4,null,{"aside-top":O(()=>[M(a.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":O(()=>[M(a.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":O(()=>[M(a.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":O(()=>[M(a.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":O(()=>[M(a.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":O(()=>[M(a.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):A("",!0),S("div",Z4,[S("div",e6,[M(a.$slots,"doc-before",{},void 0,!0),S("main",t6,[H(u,{class:T(["vp-doc",[r.value,l(t).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),H(G4,null,{"doc-footer-before":O(()=>[M(a.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),M(a.$slots,"doc-after",{},void 0,!0)])])]),M(a.$slots,"doc-bottom",{},void 0,!0)],2)}}}),s6=ke(n6,[["__scopeId","data-v-256763c0"]]),o6=z({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(e){const t=e,n=F(()=>t.href&&ka.test(t.href)),s=F(()=>t.tag||(t.href?"a":"button"));return(o,i)=>(p(),D(Be(s.value),{class:T(["VPButton",[e.size,e.theme]]),href:e.href?l(zc)(e.href):void 0,target:t.target??(n.value?"_blank":void 0),rel:t.rel??(n.value?"noreferrer":void 0)},{default:O(()=>[M(o.$slots,"default",{},()=>[rt(W(e.text),1)],!0)]),_:3},8,["class","href","target","rel"]))}}),i6=ke(o6,[["__scopeId","data-v-b44745dc"]]),r6=["src","alt"],a6=z({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(e){return(t,n)=>{const s=un("VPImage",!0);return e.image?(p(),w(Y,{key:0},[typeof e.image=="string"||"src"in e.image?(p(),w("img",nt({key:0,class:"VPImage"},typeof e.image=="string"?t.$attrs:{...e.image,...t.$attrs},{src:l(Ee)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,r6)):(p(),w(Y,{key:1},[H(s,nt({class:"dark",image:e.image.dark,alt:e.image.alt},t.$attrs),null,16,["image","alt"]),H(s,nt({class:"light",image:e.image.light,alt:e.image.alt},t.$attrs),null,16,["image","alt"])],64))],64)):A("",!0)}}}),Nr=ke(a6,[["__scopeId","data-v-e0e0d586"]]),l6={class:"container"},c6={class:"main"},u6={class:"heading"},f6=["innerHTML"],d6=["innerHTML"],h6=["innerHTML"],p6={key:0,class:"actions"},m6={key:0,class:"image"},g6={class:"image-container"},v6=z({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(e){const{heroImageSlotExists:t}=qe(yh);return(n,s)=>(p(),w("div",{class:T(["VPHero",{"has-image":e.image||l(t)}])},[S("div",l6,[S("div",c6,[M(n.$slots,"home-hero-info-before",{},void 0,!0),M(n.$slots,"home-hero-info",{},()=>[S("h1",u6,[e.name?(p(),w("span",{key:0,innerHTML:e.name,class:"name clip"},null,8,f6)):A("",!0),e.text?(p(),w("span",{key:1,innerHTML:e.text,class:"text"},null,8,d6)):A("",!0)]),e.tagline?(p(),w("p",{key:0,innerHTML:e.tagline,class:"tagline"},null,8,h6)):A("",!0)],!0),M(n.$slots,"home-hero-info-after",{},void 0,!0),e.actions?(p(),w("div",p6,[(p(!0),w(Y,null,le(e.actions,o=>(p(),w("div",{key:o.link,class:"action"},[H(i6,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):A("",!0),M(n.$slots,"home-hero-actions-after",{},void 0,!0)]),e.image||l(t)?(p(),w("div",m6,[S("div",g6,[s[0]||(s[0]=S("div",{class:"image-bg"},null,-1)),M(n.$slots,"home-hero-image",{},()=>[e.image?(p(),D(Nr,{key:0,class:"image-src",image:e.image},null,8,["image"])):A("",!0)],!0)])])):A("",!0)])],2))}}),y6=ke(v6,[["__scopeId","data-v-09867ed5"]]),b6=z({__name:"VPHomeHero",setup(e){const{frontmatter:t}=xe();return(n,s)=>l(t).hero?(p(),D(y6,{key:0,class:"VPHomeHero",name:l(t).hero.name,text:l(t).hero.text,tagline:l(t).hero.tagline,image:l(t).hero.image,actions:l(t).hero.actions},{"home-hero-info-before":O(()=>[M(n.$slots,"home-hero-info-before")]),"home-hero-info":O(()=>[M(n.$slots,"home-hero-info")]),"home-hero-info-after":O(()=>[M(n.$slots,"home-hero-info-after")]),"home-hero-actions-after":O(()=>[M(n.$slots,"home-hero-actions-after")]),"home-hero-image":O(()=>[M(n.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):A("",!0)}}),k6={class:"box"},w6={key:0,class:"icon"},C6=["innerHTML"],_6=["innerHTML"],S6=["innerHTML"],T6={key:4,class:"link-text"},E6={class:"link-text-value"},x6=z({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(e){return(t,n)=>(p(),D(Vn,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:O(()=>[S("article",k6,[typeof e.icon=="object"&&e.icon.wrap?(p(),w("div",w6,[H(Nr,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(p(),D(Nr,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(p(),w("div",{key:2,class:"icon",innerHTML:e.icon},null,8,C6)):A("",!0),S("h2",{class:"title",innerHTML:e.title},null,8,_6),e.details?(p(),w("p",{key:3,class:"details",innerHTML:e.details},null,8,S6)):A("",!0),e.linkText?(p(),w("div",T6,[S("p",E6,[rt(W(e.linkText)+" ",1),n[0]||(n[0]=S("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):A("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),A6=ke(x6,[["__scopeId","data-v-684de982"]]),$6={key:0,class:"VPFeatures"},L6={class:"container"},I6={class:"items"},P6=z({__name:"VPFeatures",props:{features:{}},setup(e){const t=e,n=F(()=>{const s=t.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,o)=>e.features?(p(),w("div",$6,[S("div",L6,[S("div",I6,[(p(!0),w(Y,null,le(e.features,i=>(p(),w("div",{key:i.title,class:T(["item",[n.value]])},[H(A6,{icon:i.icon,title:i.title,details:i.details,link:i.link,"link-text":i.linkText,rel:i.rel,target:i.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):A("",!0)}}),M6=ke(P6,[["__scopeId","data-v-4422ade5"]]),F6=z({__name:"VPHomeFeatures",setup(e){const{frontmatter:t}=xe();return(n,s)=>l(t).features?(p(),D(M6,{key:0,class:"VPHomeFeatures",features:l(t).features},null,8,["features"])):A("",!0)}}),B6=z({__name:"VPHomeContent",setup(e){const{width:t}=x3({initialWidth:0,includeScrollbar:!1});return(n,s)=>(p(),w("div",{class:"vp-doc container",style:Fe(l(t)?{"--vp-offset":`calc(50% - ${l(t)/2}px)`}:{})},[M(n.$slots,"default",{},void 0,!0)],4))}}),N6=ke(B6,[["__scopeId","data-v-1b679879"]]),V6=z({__name:"VPHome",setup(e){const{frontmatter:t,theme:n}=xe();return(s,o)=>{const i=un("Content");return p(),w("div",{class:T(["VPHome",{"external-link-icon-enabled":l(n).externalLinkIcon}])},[M(s.$slots,"home-hero-before",{},void 0,!0),H(b6,null,{"home-hero-info-before":O(()=>[M(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":O(()=>[M(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":O(()=>[M(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":O(()=>[M(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":O(()=>[M(s.$slots,"home-hero-image",{},void 0,!0)]),_:3}),M(s.$slots,"home-hero-after",{},void 0,!0),M(s.$slots,"home-features-before",{},void 0,!0),H(F6),M(s.$slots,"home-features-after",{},void 0,!0),l(t).markdownStyles!==!1?(p(),D(N6,{key:0},{default:O(()=>[H(i)]),_:1})):(p(),D(i,{key:1}))],2)}}}),O6=ke(V6,[["__scopeId","data-v-10bb9ea0"]]),D6={},R6={class:"VPPage"};function H6(e,t){const n=un("Content");return p(),w("div",R6,[M(e.$slots,"page-top"),H(n),M(e.$slots,"page-bottom")])}const z6=ke(D6,[["render",H6]]),j6=z({__name:"VPContent",setup(e){const{page:t,frontmatter:n}=xe(),{isHome:s,hasSidebar:o}=ls();return(i,r)=>(p(),w("div",{class:T(["VPContent",{"has-sidebar":l(o),"is-home":l(s)}]),id:"VPContent"},[l(t).isNotFound?M(i.$slots,"not-found",{key:0},()=>[H(o4)],!0):l(n).layout==="page"?(p(),D(z6,{key:1},{"page-top":O(()=>[M(i.$slots,"page-top",{},void 0,!0)]),"page-bottom":O(()=>[M(i.$slots,"page-bottom",{},void 0,!0)]),_:3})):l(n).layout==="home"?(p(),D(O6,{key:2},{"home-hero-before":O(()=>[M(i.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":O(()=>[M(i.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":O(()=>[M(i.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":O(()=>[M(i.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":O(()=>[M(i.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":O(()=>[M(i.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":O(()=>[M(i.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":O(()=>[M(i.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":O(()=>[M(i.$slots,"home-features-after",{},void 0,!0)]),_:3})):l(n).layout&&l(n).layout!=="doc"?(p(),D(Be(l(n).layout),{key:3})):(p(),D(s6,{key:4},{"doc-top":O(()=>[M(i.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":O(()=>[M(i.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":O(()=>[M(i.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":O(()=>[M(i.$slots,"doc-before",{},void 0,!0)]),"doc-after":O(()=>[M(i.$slots,"doc-after",{},void 0,!0)]),"aside-top":O(()=>[M(i.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":O(()=>[M(i.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":O(()=>[M(i.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":O(()=>[M(i.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":O(()=>[M(i.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":O(()=>[M(i.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),U6=ke(j6,[["__scopeId","data-v-19ca35aa"]]),W6={class:"container"},q6=["innerHTML"],K6=["innerHTML"],Y6=z({__name:"VPFooter",setup(e){const{theme:t,frontmatter:n}=xe(),{hasSidebar:s}=ls();return(o,i)=>l(t).footer&&l(n).footer!==!1?(p(),w("footer",{key:0,class:T(["VPFooter",{"has-sidebar":l(s)}])},[S("div",W6,[l(t).footer.message?(p(),w("p",{key:0,class:"message",innerHTML:l(t).footer.message},null,8,q6)):A("",!0),l(t).footer.copyright?(p(),w("p",{key:1,class:"copyright",innerHTML:l(t).footer.copyright},null,8,K6)):A("",!0)])],2)):A("",!0)}}),G6=ke(Y6,[["__scopeId","data-v-105f771f"]]),J6={class:"menu-text"},X6={class:"header"},Q6={class:"outline"},Z6=z({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(e){const t=e,{theme:n}=xe(),s=j(!1),o=j(0),i=j(),r=j();function a(d){i.value?.contains(d.target)||(s.value=!1)}te(s,d=>{if(d){document.addEventListener("click",a);return}document.removeEventListener("click",a)}),_l("Escape",()=>{s.value=!1}),xi(()=>{s.value=!1});function c(){s.value=!s.value,o.value=window.innerHeight+Math.min(window.scrollY-t.navHeight,0)}function u(d){d.target.classList.contains("outline-link")&&(r.value&&(r.value.style.transition="none"),ze(()=>{s.value=!1}))}function f(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(d,h)=>(p(),w("div",{class:"VPLocalNavOutlineDropdown",style:Fe({"--vp-vh":o.value+"px"}),ref_key:"main",ref:i},[e.headers.length>0?(p(),w("button",{key:0,onClick:c,class:T({open:s.value})},[S("span",J6,W(l(vh)(l(n))),1),h[0]||(h[0]=S("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(p(),w("button",{key:1,onClick:f},W(l(n).returnToTopLabel||"Return to top"),1)),H(vt,{name:"flyout"},{default:O(()=>[s.value?(p(),w("div",{key:0,ref_key:"items",ref:r,class:"items",onClick:u},[S("div",X6,[S("a",{class:"top-link",href:"#",onClick:f},W(l(n).returnToTopLabel||"Return to top"),1)]),S("div",Q6,[H(bh,{headers:e.headers},null,8,["headers"])])],512)):A("",!0)]),_:1})],4))}}),e8=ke(Z6,[["__scopeId","data-v-6ab9adca"]]),t8={class:"container"},n8=["aria-expanded"],s8={class:"menu-text"},o8=z({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(e){const{theme:t}=xe(),{isHome:n,hasSidebar:s,headers:o,hasLocalNav:i}=ls(),{y:r}=uh(),a=j(0);be(()=>{a.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))});const c=F(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:!i.value,fixed:!i.value&&!s.value}));return(u,f)=>!l(n)&&(l(i)||l(s)||l(r)>=a.value)?(p(),w("div",{key:0,class:T(c.value)},[S("div",t8,[l(s)?(p(),w("button",{key:0,class:"menu","aria-expanded":e.open,"aria-controls":"VPSidebarNav",onClick:f[0]||(f[0]=d=>u.$emit("open-menu"))},[f[1]||(f[1]=S("span",{class:"vpi-align-left menu-icon"},null,-1)),S("span",s8,W(l(t).sidebarMenuLabel||"Menu"),1)],8,n8)):A("",!0),H(e8,{headers:l(o),navHeight:a.value},null,8,["headers","navHeight"])])],2)):A("",!0)}}),i8=ke(o8,[["__scopeId","data-v-8f018525"]]);function r8(){const e=j(!1);function t(){e.value=!0,window.addEventListener("resize",o)}function n(){e.value=!1,window.removeEventListener("resize",o)}function s(){e.value?n():t()}function o(){window.outerWidth>=768&&n()}const i=kn();return te(()=>i.path,n),{isScreenOpen:e,openScreen:t,closeScreen:n,toggleScreen:s}}const jc=Symbol("nav"),a8={},l8={class:"VPSwitch",type:"button",role:"switch"},c8={class:"check"},u8={key:0,class:"icon"};function f8(e,t){return p(),w("button",l8,[S("span",c8,[e.$slots.default?(p(),w("span",u8,[M(e.$slots,"default",{},void 0,!0)])):A("",!0)])])}const d8=ke(a8,[["render",f8],["__scopeId","data-v-5fd96198"]]),h8=z({__name:"VPSwitchAppearance",setup(e){const{isDark:t,theme:n}=xe(),s=qe("toggle-appearance",()=>{t.value=!t.value}),o=j("");return da(()=>{o.value=t.value?n.value.lightModeSwitchTitle||"Switch to light theme":n.value.darkModeSwitchTitle||"Switch to dark theme"}),(i,r)=>(p(),D(d8,{title:o.value,class:"VPSwitchAppearance","aria-checked":l(t),onClick:l(s)},{default:O(()=>[...r[0]||(r[0]=[S("span",{class:"vpi-sun sun"},null,-1),S("span",{class:"vpi-moon moon"},null,-1)])]),_:1},8,["title","aria-checked","onClick"]))}}),Uc=ke(h8,[["__scopeId","data-v-fd2b5f2c"]]),p8={key:0,class:"VPNavBarAppearance"},m8=z({__name:"VPNavBarAppearance",setup(e){const{site:t}=xe();return(n,s)=>l(t).appearance&&l(t).appearance!=="force-dark"&&l(t).appearance!=="force-auto"?(p(),w("div",p8,[H(Uc)])):A("",!0)}}),g8=ke(m8,[["__scopeId","data-v-0fac236d"]]),Wc=j();let kh=!1,Ka=0;function v8(e){const t=j(!1);if(wt){!kh&&y8(),Ka++;const n=te(Wc,s=>{s===e.el.value||e.el.value?.contains(s)?(t.value=!0,e.onFocus?.()):(t.value=!1,e.onBlur?.())});cn(()=>{n(),Ka--,Ka||b8()})}return It(t)}function y8(){document.addEventListener("focusin",wh),kh=!0,Wc.value=document.activeElement}function b8(){document.removeEventListener("focusin",wh)}function wh(){Wc.value=document.activeElement}const k8={class:"VPMenuLink"},w8=["innerHTML"],C8=z({inheritAttrs:!1,__name:"VPMenuLink",props:{item:{}},setup(e){const t=e,{page:n}=xe(),s=F(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link);return(o,i)=>(p(),w("div",k8,[H(Vn,nt(o.$attrs,{class:{active:l($s)(l(n).relativePath,e.item.activeMatch||s.value,!!e.item.activeMatch)},href:s.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon}),{default:O(()=>[S("span",{innerHTML:e.item.text},null,8,w8)]),_:1},16,["class","href","target","rel","no-icon"])]))}}),wa=ke(C8,[["__scopeId","data-v-c995c7e2"]]),_8={class:"VPMenuGroup"},S8={key:0,class:"title"},T8=z({__name:"VPMenuGroup",props:{text:{},items:{}},setup(e){return(t,n)=>(p(),w("div",_8,[e.text?(p(),w("p",S8,W(e.text),1)):A("",!0),(p(!0),w(Y,null,le(e.items,s=>(p(),w(Y,{key:JSON.stringify(s)},["link"in s?(p(),D(wa,{key:0,item:s},null,8,["item"])):A("",!0)],64))),128))]))}}),E8=ke(T8,[["__scopeId","data-v-0d91e4ea"]]),x8={class:"VPMenu"},A8={key:0,class:"items"},$8=z({__name:"VPMenu",props:{items:{}},setup(e){return(t,n)=>(p(),w("div",x8,[e.items?(p(),w("div",A8,[(p(!0),w(Y,null,le(e.items,s=>(p(),w(Y,{key:JSON.stringify(s)},["link"in s?(p(),D(wa,{key:0,item:s},null,8,["item"])):"component"in s?(p(),D(Be(s.component),nt({key:1,ref_for:!0},s.props),null,16)):(p(),D(E8,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):A("",!0),M(t.$slots,"default",{},void 0,!0)]))}}),L8=ke($8,[["__scopeId","data-v-62da9740"]]),I8=["aria-expanded","aria-label"],P8={key:0,class:"text"},M8=["innerHTML"],F8={key:1,class:"vpi-more-horizontal icon"},B8={class:"menu"},N8=z({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(e){const t=j(!1),n=j();v8({el:n,onBlur:s});function s(){t.value=!1}return(o,i)=>(p(),w("div",{class:"VPFlyout",ref_key:"el",ref:n,onMouseenter:i[1]||(i[1]=r=>t.value=!0),onMouseleave:i[2]||(i[2]=r=>t.value=!1)},[S("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":t.value,"aria-label":e.label,onClick:i[0]||(i[0]=r=>t.value=!t.value)},[e.button||e.icon?(p(),w("span",P8,[e.icon?(p(),w("span",{key:0,class:T([e.icon,"option-icon"])},null,2)):A("",!0),e.button?(p(),w("span",{key:1,innerHTML:e.button},null,8,M8)):A("",!0),i[3]||(i[3]=S("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(p(),w("span",F8))],8,I8),S("div",B8,[H(L8,{items:e.items},{default:O(()=>[M(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),qc=ke(N8,[["__scopeId","data-v-c0d6c551"]]),V8=["href","aria-label","rel","innerHTML"],O8=z({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{},me:{type:Boolean}},setup(e){const t=e,n=j();be(async()=>{await ze();const o=n.value?.children[0];o instanceof HTMLElement&&o.className.startsWith("vpi-social-")&&(getComputedStyle(o).maskImage||getComputedStyle(o).webkitMaskImage)==="none"&&o.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${t.icon}.svg')`)});const s=F(()=>typeof t.icon=="object"?t.icon.svg:``);return(o,i)=>(p(),w("a",{ref_key:"el",ref:n,class:"VPSocialLink no-icon",href:e.link,"aria-label":e.ariaLabel??(typeof e.icon=="string"?e.icon:""),target:"_blank",rel:e.me?"me noopener":"noopener",innerHTML:s.value},null,8,V8))}}),D8=ke(O8,[["__scopeId","data-v-94c580ff"]]),R8={class:"VPSocialLinks"},H8=z({__name:"VPSocialLinks",props:{links:{},me:{type:Boolean,default:!0}},setup(e){return(t,n)=>(p(),w("div",R8,[(p(!0),w(Y,null,le(e.links,({link:s,icon:o,ariaLabel:i})=>(p(),D(D8,{key:s,icon:o,link:s,ariaLabel:i,me:e.me},null,8,["icon","link","ariaLabel","me"]))),128))]))}}),Kc=ke(H8,[["__scopeId","data-v-0f495aab"]]),z8={key:0,class:"group translations"},j8={class:"trans-title"},U8={key:1,class:"group"},W8={class:"item appearance"},q8={class:"label"},K8={class:"appearance-action"},Y8={key:2,class:"group"},G8={class:"item social-links"},J8=z({__name:"VPNavBarExtra",setup(e){const{site:t,theme:n}=xe(),{localeLinks:s,currentLang:o}=Ai({correspondingLink:!0}),i=F(()=>s.value.length&&o.value.label||t.value.appearance||n.value.socialLinks);return(r,a)=>i.value?(p(),D(qc,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:O(()=>[l(s).length&&l(o).label?(p(),w("div",z8,[S("p",j8,W(l(o).label),1),(p(!0),w(Y,null,le(l(s),c=>(p(),D(wa,{key:c.link,item:c,lang:c.lang,dir:c.dir},null,8,["item","lang","dir"]))),128))])):A("",!0),l(t).appearance&&l(t).appearance!=="force-dark"&&l(t).appearance!=="force-auto"?(p(),w("div",U8,[S("div",W8,[S("p",q8,W(l(n).darkModeSwitchLabel||"Appearance"),1),S("div",K8,[H(Uc)])])])):A("",!0),l(n).socialLinks?(p(),w("div",Y8,[S("div",G8,[H(Kc,{class:"social-links-list",links:l(n).socialLinks},null,8,["links"])])])):A("",!0)]),_:1})):A("",!0)}}),X8=ke(J8,[["__scopeId","data-v-cf5e177b"]]),Q8=["aria-expanded"],Z8=z({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(e){return(t,n)=>(p(),w("button",{type:"button",class:T(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:n[0]||(n[0]=s=>t.$emit("click"))},[...n[1]||(n[1]=[S("span",{class:"container"},[S("span",{class:"top"}),S("span",{class:"middle"}),S("span",{class:"bottom"})],-1)])],10,Q8))}}),e5=ke(Z8,[["__scopeId","data-v-1d142719"]]),t5=["innerHTML"],n5=z({__name:"VPNavBarMenuLink",props:{item:{}},setup(e){const t=e,{page:n}=xe(),s=F(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link);return(o,i)=>(p(),D(Vn,{class:T({VPNavBarMenuLink:!0,active:l($s)(l(n).relativePath,e.item.activeMatch||s.value,!!e.item.activeMatch)}),href:s.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,tabindex:"0"},{default:O(()=>[S("span",{innerHTML:e.item.text},null,8,t5)]),_:1},8,["class","href","target","rel","no-icon"]))}}),s5=ke(n5,[["__scopeId","data-v-bf8a0d28"]]),o5=z({__name:"VPNavBarMenuGroup",props:{item:{}},setup(e){const t=e,{page:n}=xe(),s=i=>"component"in i?!1:"link"in i?$s(n.value.relativePath,typeof i.link=="function"?i.link(n.value):i.link,!!t.item.activeMatch):i.items.some(s),o=F(()=>s(t.item));return(i,r)=>(p(),D(qc,{class:T({VPNavBarMenuGroup:!0,active:l($s)(l(n).relativePath,e.item.activeMatch,!!e.item.activeMatch)||o.value}),button:e.item.text,items:e.item.items},null,8,["class","button","items"]))}}),i5={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},r5=z({__name:"VPNavBarMenu",setup(e){const{theme:t}=xe();return(n,s)=>l(t).nav?(p(),w("nav",i5,[s[0]||(s[0]=S("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(p(!0),w(Y,null,le(l(t).nav,o=>(p(),w(Y,{key:JSON.stringify(o)},["link"in o?(p(),D(s5,{key:0,item:o},null,8,["item"])):"component"in o?(p(),D(Be(o.component),nt({key:1,ref_for:!0},o.props),null,16)):(p(),D(o5,{key:2,item:o},null,8,["item"]))],64))),128))])):A("",!0)}}),a5=ke(r5,[["__scopeId","data-v-39023d39"]]),l5="modulepreload",c5=function(e){return"/"+e},Vf={},u5=function(t,n,s){let o=Promise.resolve();if(n&&n.length>0){let c=function(u){return Promise.all(u.map(f=>Promise.resolve(f).then(d=>({status:"fulfilled",value:d}),d=>({status:"rejected",reason:d}))))};document.getElementsByTagName("link");const r=document.querySelector("meta[property=csp-nonce]"),a=r?.nonce||r?.getAttribute("nonce");o=c(n.map(u=>{if(u=c5(u),u in Vf)return;Vf[u]=!0;const f=u.endsWith(".css"),d=f?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${u}"]${d}`))return;const h=document.createElement("link");if(h.rel=f?"stylesheet":l5,f||(h.as="script"),h.crossOrigin="",h.href=u,a&&h.setAttribute("nonce",a),document.head.appendChild(h),f)return new Promise((m,g)=>{h.addEventListener("load",m),h.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${u}`)))})}))}function i(r){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=r,window.dispatchEvent(a),!a.defaultPrevented)throw r}return o.then(r=>{for(const a of r||[])a.status==="rejected"&&i(a.reason);return t().catch(i)})};function f5(e){const{localeIndex:t,theme:n}=xe();function s(o){const i=o.split("."),r=n.value.search?.options,a=r&&typeof r=="object",c=a&&r.locales?.[t.value]?.translations||null,u=a&&r.translations||null;let f=c,d=u,h=e;const m=i.pop();for(const g of i){let v=null;const k=h?.[g];k&&(v=h=k);const b=d?.[g];b&&(v=d=b);const C=f?.[g];C&&(v=f=C),k||(h=v),b||(d=v),C||(f=v)}return f?.[m]??d?.[m]??h?.[m]??""}return s}const d5=["aria-label"],h5={class:"DocSearch-Button-Container"},p5={class:"DocSearch-Button-Placeholder"},Of=z({__name:"VPNavBarSearchButton",setup(e){const n=f5({button:{buttonText:"Search",buttonAriaLabel:"Search"}});return(s,o)=>(p(),w("button",{type:"button","aria-label":l(n)("button.buttonAriaLabel"),"aria-keyshortcuts":"/ control+k meta+k",class:"DocSearch DocSearch-Button"},[S("span",h5,[o[0]||(o[0]=S("span",{class:"vpi-search DocSearch-Search-Icon"},null,-1)),S("span",p5,W(l(n)("button.buttonText")),1)]),o[1]||(o[1]=S("span",{class:"DocSearch-Button-Keys"},[S("kbd",{class:"DocSearch-Button-Key"}),S("kbd",{class:"DocSearch-Button-Key"})],-1))],8,d5))}}),m5={class:"VPNavBarSearch"},g5={id:"local-search"},v5={key:1,id:"docsearch"},y5=z({__name:"VPNavBarSearch",setup(e){const t=wc(()=>u5(()=>import("./VPLocalSearchBox.iMewz9fF.js"),[])),n=()=>null,{theme:s}=xe(),o=j(!1),i=j(!1);be(()=>{});function r(){o.value||(o.value=!0,setTimeout(a,16))}function a(){const d=new Event("keydown");d.key="k",d.metaKey=!0,window.dispatchEvent(d),setTimeout(()=>{document.querySelector(".DocSearch-Modal")||a()},16)}function c(d){const h=d.target,m=h.tagName;return h.isContentEditable||m==="INPUT"||m==="SELECT"||m==="TEXTAREA"}const u=j(!1);_l("k",d=>{(d.ctrlKey||d.metaKey)&&(d.preventDefault(),u.value=!0)}),_l("/",d=>{c(d)||(d.preventDefault(),u.value=!0)});const f="local";return(d,h)=>(p(),w("div",m5,[l(f)==="local"?(p(),w(Y,{key:0},[u.value?(p(),D(l(t),{key:0,onClose:h[0]||(h[0]=m=>u.value=!1)})):A("",!0),S("div",g5,[H(Of,{onClick:h[1]||(h[1]=m=>u.value=!0)})])],64)):l(f)==="algolia"?(p(),w(Y,{key:1},[o.value?(p(),D(l(n),{key:0,algolia:l(s).search?.options??l(s).algolia,onVnodeBeforeMount:h[2]||(h[2]=m=>i.value=!0)},null,8,["algolia"])):A("",!0),i.value?A("",!0):(p(),w("div",v5,[H(Of,{onClick:r})]))],64)):A("",!0)]))}}),b5=z({__name:"VPNavBarSocialLinks",setup(e){const{theme:t}=xe();return(n,s)=>l(t).socialLinks?(p(),D(Kc,{key:0,class:"VPNavBarSocialLinks",links:l(t).socialLinks},null,8,["links"])):A("",!0)}}),k5=ke(b5,[["__scopeId","data-v-cd4c0ab6"]]),w5=["href","rel","target"],C5=["innerHTML"],_5={key:2},S5=z({__name:"VPNavBarTitle",setup(e){const{site:t,theme:n}=xe(),{hasSidebar:s}=ls(),{currentLang:o}=Ai(),i=F(()=>typeof n.value.logoLink=="string"?n.value.logoLink:n.value.logoLink?.link),r=F(()=>typeof n.value.logoLink=="string"?void 0:n.value.logoLink?.rel),a=F(()=>typeof n.value.logoLink=="string"?void 0:n.value.logoLink?.target);return(c,u)=>(p(),w("div",{class:T(["VPNavBarTitle",{"has-sidebar":l(s)}])},[S("a",{class:"title",href:i.value??l(zc)(l(o).link),rel:r.value,target:a.value},[M(c.$slots,"nav-bar-title-before",{},void 0,!0),l(n).logo?(p(),D(Nr,{key:0,class:"logo",image:l(n).logo},null,8,["image"])):A("",!0),l(n).siteTitle?(p(),w("span",{key:1,innerHTML:l(n).siteTitle},null,8,C5)):l(n).siteTitle===void 0?(p(),w("span",_5,W(l(t).title),1)):A("",!0),M(c.$slots,"nav-bar-title-after",{},void 0,!0)],8,w5)],2))}}),T5=ke(S5,[["__scopeId","data-v-e5d5fdf8"]]),E5={class:"items"},x5={class:"title"},A5=z({__name:"VPNavBarTranslations",setup(e){const{theme:t}=xe(),{localeLinks:n,currentLang:s}=Ai({correspondingLink:!0});return(o,i)=>l(n).length&&l(s).label?(p(),D(qc,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:l(t).langMenuLabel||"Change language"},{default:O(()=>[S("div",E5,[S("p",x5,W(l(s).label),1),(p(!0),w(Y,null,le(l(n),r=>(p(),D(wa,{key:r.link,item:r,lang:r.lang,dir:r.dir},null,8,["item","lang","dir"]))),128))])]),_:1},8,["label"])):A("",!0)}}),$5=ke(A5,[["__scopeId","data-v-1c347a57"]]),L5={class:"wrapper"},I5={class:"container"},P5={class:"title"},M5={class:"content"},F5={class:"content-body"},B5=z({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(e){const t=e,{y:n}=uh(),{isHome:s,hasSidebar:o}=ls(),i=j({});return da(()=>{i.value={"has-sidebar":o.value,home:s.value,top:n.value===0,"screen-open":t.isScreenOpen}}),(r,a)=>(p(),w("div",{class:T(["VPNavBar",i.value])},[S("div",L5,[S("div",I5,[S("div",P5,[H(T5,null,{"nav-bar-title-before":O(()=>[M(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":O(()=>[M(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),S("div",M5,[S("div",F5,[M(r.$slots,"nav-bar-content-before",{},void 0,!0),H(y5,{class:"search"}),H(a5,{class:"menu"}),H($5,{class:"translations"}),H(g8,{class:"appearance"}),H(k5,{class:"social-links"}),H(X8,{class:"extra"}),M(r.$slots,"nav-bar-content-after",{},void 0,!0),H(e5,{class:"hamburger",active:e.isScreenOpen,onClick:a[0]||(a[0]=c=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),a[1]||(a[1]=S("div",{class:"divider"},[S("div",{class:"divider-line"})],-1))],2))}}),N5=ke(B5,[["__scopeId","data-v-a10c09a7"]]),V5={key:0,class:"VPNavScreenAppearance"},O5={class:"text"},D5=z({__name:"VPNavScreenAppearance",setup(e){const{site:t,theme:n}=xe();return(s,o)=>l(t).appearance&&l(t).appearance!=="force-dark"&&l(t).appearance!=="force-auto"?(p(),w("div",V5,[S("p",O5,W(l(n).darkModeSwitchLabel||"Appearance"),1),H(Uc)])):A("",!0)}}),R5=ke(D5,[["__scopeId","data-v-0c49eb9f"]]),H5=["innerHTML"],z5=z({__name:"VPNavScreenMenuLink",props:{item:{}},setup(e){const t=e,{page:n}=xe(),s=F(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link),{closeScreen:o}=qe(jc);return(i,r)=>(p(),D(Vn,{class:"VPNavScreenMenuLink",href:s.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:l(o)},{default:O(()=>[S("span",{innerHTML:e.item.text},null,8,H5)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),j5=ke(z5,[["__scopeId","data-v-f0c07abe"]]),U5=["innerHTML"],W5=z({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(e){const t=e,{page:n}=xe(),s=F(()=>typeof t.item.link=="function"?t.item.link(n.value):t.item.link),{closeScreen:o}=qe(jc);return(i,r)=>(p(),D(Vn,{class:"VPNavScreenMenuGroupLink",href:s.value,target:e.item.target,rel:e.item.rel,"no-icon":e.item.noIcon,onClick:l(o)},{default:O(()=>[S("span",{innerHTML:e.item.text},null,8,U5)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Ch=ke(W5,[["__scopeId","data-v-1c460cf9"]]),q5={class:"VPNavScreenMenuGroupSection"},K5={key:0,class:"title"},Y5=z({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(e){return(t,n)=>(p(),w("div",q5,[e.text?(p(),w("p",K5,W(e.text),1)):A("",!0),(p(!0),w(Y,null,le(e.items,s=>(p(),D(Ch,{key:s.text,item:s},null,8,["item"]))),128))]))}}),G5=ke(Y5,[["__scopeId","data-v-b9d15d51"]]),J5=["aria-controls","aria-expanded"],X5=["innerHTML"],Q5=["id"],Z5={key:0,class:"item"},e7={key:1,class:"item"},t7={key:2,class:"group"},n7=z({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(e){const t=e,n=j(!1),s=F(()=>`NavScreenGroup-${t.text.replace(" ","-").toLowerCase()}`);function o(){n.value=!n.value}return(i,r)=>(p(),w("div",{class:T(["VPNavScreenMenuGroup",{open:n.value}])},[S("button",{class:"button","aria-controls":s.value,"aria-expanded":n.value,onClick:o},[S("span",{class:"button-text",innerHTML:e.text},null,8,X5),r[0]||(r[0]=S("span",{class:"vpi-plus button-icon"},null,-1))],8,J5),S("div",{id:s.value,class:"items"},[(p(!0),w(Y,null,le(e.items,a=>(p(),w(Y,{key:JSON.stringify(a)},["link"in a?(p(),w("div",Z5,[H(Ch,{item:a},null,8,["item"])])):"component"in a?(p(),w("div",e7,[(p(),D(Be(a.component),nt({ref_for:!0},a.props,{"screen-menu":""}),null,16))])):(p(),w("div",t7,[H(G5,{text:a.text,items:a.items},null,8,["text","items"])]))],64))),128))],8,Q5)],2))}}),s7=ke(n7,[["__scopeId","data-v-8ab0c53a"]]),o7={key:0,class:"VPNavScreenMenu"},i7=z({__name:"VPNavScreenMenu",setup(e){const{theme:t}=xe();return(n,s)=>l(t).nav?(p(),w("nav",o7,[(p(!0),w(Y,null,le(l(t).nav,o=>(p(),w(Y,{key:JSON.stringify(o)},["link"in o?(p(),D(j5,{key:0,item:o},null,8,["item"])):"component"in o?(p(),D(Be(o.component),nt({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(p(),D(s7,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):A("",!0)}}),r7=z({__name:"VPNavScreenSocialLinks",setup(e){const{theme:t}=xe();return(n,s)=>l(t).socialLinks?(p(),D(Kc,{key:0,class:"VPNavScreenSocialLinks",links:l(t).socialLinks},null,8,["links"])):A("",!0)}}),a7={class:"list"},l7=z({__name:"VPNavScreenTranslations",setup(e){const{localeLinks:t,currentLang:n}=Ai({correspondingLink:!0}),s=j(!1);function o(){s.value=!s.value}return(i,r)=>l(t).length&&l(n).label?(p(),w("div",{key:0,class:T(["VPNavScreenTranslations",{open:s.value}])},[S("button",{class:"title",onClick:o},[r[0]||(r[0]=S("span",{class:"vpi-languages icon lang"},null,-1)),rt(" "+W(l(n).label)+" ",1),r[1]||(r[1]=S("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),S("ul",a7,[(p(!0),w(Y,null,le(l(t),a=>(p(),w("li",{key:a.link,class:"item"},[H(Vn,{class:"link",href:a.link,lang:a.lang,dir:a.dir},{default:O(()=>[rt(W(a.text),1)]),_:2},1032,["href","lang","dir"])]))),128))])],2)):A("",!0)}}),c7=ke(l7,[["__scopeId","data-v-85de7b6f"]]),u7={class:"container"},f7=z({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(e){const t=j(null),n=ch(wt?document.body:null);return(s,o)=>(p(),D(vt,{name:"fade",onEnter:o[0]||(o[0]=i=>n.value=!0),onAfterLeave:o[1]||(o[1]=i=>n.value=!1)},{default:O(()=>[e.open?(p(),w("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:t,id:"VPNavScreen"},[S("div",u7,[M(s.$slots,"nav-screen-content-before",{},void 0,!0),H(i7,{class:"menu"}),H(c7,{class:"translations"}),H(R5,{class:"appearance"}),H(r7,{class:"social-links"}),M(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):A("",!0)]),_:3}))}}),d7=ke(f7,[["__scopeId","data-v-e0c26501"]]),h7={key:0,class:"VPNav"},p7=z({__name:"VPNav",setup(e){const{isScreenOpen:t,closeScreen:n,toggleScreen:s}=r8(),{frontmatter:o}=xe(),i=F(()=>o.value.navbar!==!1);return In(jc,{closeScreen:n}),zn(()=>{wt&&document.documentElement.classList.toggle("hide-nav",!i.value)}),(r,a)=>i.value?(p(),w("header",h7,[H(N5,{"is-screen-open":l(t),onToggleScreen:l(s)},{"nav-bar-title-before":O(()=>[M(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":O(()=>[M(r.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":O(()=>[M(r.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":O(()=>[M(r.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),H(d7,{open:l(t)},{"nav-screen-content-before":O(()=>[M(r.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":O(()=>[M(r.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):A("",!0)}}),m7=ke(p7,[["__scopeId","data-v-d78ad477"]]),g7=["role","tabindex"],v7={key:1,class:"items"},y7=z({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(e){const t=e,{collapsed:n,collapsible:s,isLink:o,isActiveLink:i,hasActiveLink:r,hasChildren:a,toggle:c}=v4(F(()=>t.item)),u=F(()=>a.value?"section":"div"),f=F(()=>o.value?"a":"div"),d=F(()=>a.value?t.depth+2===7?"p":`h${t.depth+2}`:"p"),h=F(()=>o.value?void 0:"button"),m=F(()=>[[`level-${t.depth}`],{collapsible:s.value},{collapsed:n.value},{"is-link":o.value},{"is-active":i.value},{"has-active":r.value}]);function g(k){"key"in k&&k.key!=="Enter"||!t.item.link&&c()}function v(){t.item.link&&c()}return(k,b)=>{const C=un("VPSidebarItem",!0);return p(),D(Be(u.value),{class:T(["VPSidebarItem",m.value])},{default:O(()=>[e.item.text?(p(),w("div",nt({key:0,class:"item",role:h.value},Ec(e.item.items?{click:g,keydown:g}:{},!0),{tabindex:e.item.items&&0}),[b[1]||(b[1]=S("div",{class:"indicator"},null,-1)),e.item.link?(p(),D(Vn,{key:0,tag:f.value,class:"link",href:e.item.link,rel:e.item.rel,target:e.item.target},{default:O(()=>[(p(),D(Be(d.value),{class:"text",innerHTML:e.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(p(),D(Be(d.value),{key:1,class:"text",innerHTML:e.item.text},null,8,["innerHTML"])),e.item.collapsed!=null&&e.item.items&&e.item.items.length?(p(),w("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:v,onKeydown:va(v,["enter"]),tabindex:"0"},[...b[0]||(b[0]=[S("span",{class:"vpi-chevron-right caret-icon"},null,-1)])],32)):A("",!0)],16,g7)):A("",!0),e.item.items&&e.item.items.length?(p(),w("div",v7,[e.depth<5?(p(!0),w(Y,{key:0},le(e.item.items,y=>(p(),D(C,{key:y.text,item:y,depth:e.depth+1},null,8,["item","depth"]))),128)):A("",!0)])):A("",!0)]),_:1},8,["class"])}}}),b7=ke(y7,[["__scopeId","data-v-c0d2b08d"]]),k7=z({__name:"VPSidebarGroup",props:{items:{}},setup(e){const t=j(!0);let n=null;return be(()=>{n=setTimeout(()=>{n=null,t.value=!1},300)}),as(()=>{n!=null&&(clearTimeout(n),n=null)}),(s,o)=>(p(!0),w(Y,null,le(e.items,i=>(p(),w("div",{key:i.text,class:T(["group",{"no-transition":t.value}])},[H(b7,{item:i,depth:0},null,8,["item"])],2))),128))}}),w7=ke(k7,[["__scopeId","data-v-3423a55b"]]),C7={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},_7=z({__name:"VPSidebar",props:{open:{type:Boolean}},setup(e){const{sidebarGroups:t,hasSidebar:n}=ls(),s=e,o=j(null),i=ch(wt?document.body:null);te([s,o],()=>{s.open?(i.value=!0,o.value?.focus()):i.value=!1},{immediate:!0,flush:"post"});const r=j(0);return te(t,()=>{r.value+=1},{deep:!0}),(a,c)=>l(n)?(p(),w("aside",{key:0,class:T(["VPSidebar",{open:e.open}]),ref_key:"navEl",ref:o,onClick:c[0]||(c[0]=To(()=>{},["stop"]))},[c[2]||(c[2]=S("div",{class:"curtain"},null,-1)),S("nav",C7,[c[1]||(c[1]=S("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),M(a.$slots,"sidebar-nav-before",{},void 0,!0),(p(),D(w7,{items:l(t),key:r.value},null,8,["items"])),M(a.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):A("",!0)}}),S7=ke(_7,[["__scopeId","data-v-3ad41a46"]]),T7={href:"#VPContent",class:"VPSkipLink visually-hidden"},E7=z({__name:"VPSkipLink",setup(e){const{theme:t}=xe(),n=kn(),s=j();return te(()=>n.path,()=>s.value.focus()),(o,i)=>(p(),w(Y,null,[S("span",{ref_key:"backToTop",ref:s,tabindex:"-1"},null,512),S("a",T7,W(l(t).skipToContentLabel||"Skip to content"),1)],64))}}),x7=ke(E7,[["__scopeId","data-v-84877a60"]]),A7=z({__name:"Layout",setup(e){const{isOpen:t,open:n,close:s}=g4();y4({closeSidebar:s});const{frontmatter:o}=xe(),i=Si(),r=F(()=>!!i["home-hero-image"]);return In(yh,{heroImageSlotExists:r}),(a,c)=>{const u=un("Content");return l(o).layout!==!1?(p(),w("div",{key:0,class:T(["Layout",l(o).pageClass])},[M(a.$slots,"layout-top",{},void 0,!0),H(x7),H(Jv,{class:"backdrop",show:l(t),onClick:l(s)},null,8,["show","onClick"]),H(m7,null,{"nav-bar-title-before":O(()=>[M(a.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":O(()=>[M(a.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":O(()=>[M(a.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":O(()=>[M(a.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":O(()=>[M(a.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":O(()=>[M(a.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),H(i8,{open:l(t),onOpenMenu:l(n)},null,8,["open","onOpenMenu"]),H(S7,{open:l(t)},{"sidebar-nav-before":O(()=>[M(a.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":O(()=>[M(a.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),H(U6,null,{"page-top":O(()=>[M(a.$slots,"page-top",{},void 0,!0)]),"page-bottom":O(()=>[M(a.$slots,"page-bottom",{},void 0,!0)]),"not-found":O(()=>[M(a.$slots,"not-found",{},void 0,!0)]),"home-hero-before":O(()=>[M(a.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":O(()=>[M(a.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":O(()=>[M(a.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":O(()=>[M(a.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":O(()=>[M(a.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":O(()=>[M(a.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":O(()=>[M(a.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":O(()=>[M(a.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":O(()=>[M(a.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":O(()=>[M(a.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":O(()=>[M(a.$slots,"doc-before",{},void 0,!0)]),"doc-after":O(()=>[M(a.$slots,"doc-after",{},void 0,!0)]),"doc-top":O(()=>[M(a.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":O(()=>[M(a.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":O(()=>[M(a.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":O(()=>[M(a.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":O(()=>[M(a.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":O(()=>[M(a.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":O(()=>[M(a.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":O(()=>[M(a.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),H(G6),M(a.$slots,"layout-bottom",{},void 0,!0)],2)):(p(),D(u,{key:1}))}}}),$7=ke(A7,[["__scopeId","data-v-e9f8e490"]]),_h={Layout:$7,enhanceApp:({app:e})=>{e.component("Badge",eh)}},Df=e=>/^(http?:|https?:|mailto:|tel:)/.test(e),Yc=e=>{try{return new URL(e),!0}catch{return!1}},Fo=(e,t)=>Object.prototype.toString.call(e)===`[object ${t}]`,ht=e=>Fo(e,"Function")||I7(e),ei=e=>e!==null&&Fo(e,"Object"),Gc=e=>Fo(e,"Number")&&!Number.isNaN(e),L7=e=>Je(e)?!Number.isNaN(Number(e)):!1,I7=e=>Fo(e,"AsyncFunction"),Je=e=>Fo(e,"String"),Zn=e=>Fo(e,"Boolean"),P7=e=>typeof Array.isArray>"u"?Object.prototype.toString.call(e)==="[object Array]":Array.isArray(e),Il=e=>typeof Element>"u"?!1:e instanceof Element,M7=()=>me&&window?.navigator?.userAgent&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||window?.navigator?.maxTouchPoints>2&&/iPad|Macintosh/.test(window?.navigator.userAgent)),F7=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.tabIndex<0||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},me=typeof window<"u"&&typeof document<"u",Rf=(e="yyyy-MM-dd hh:mm:ss",t=!0)=>hi(new Date,e,t),hi=(e,t="yyyy-MM-dd hh:mm:ss",n=!0)=>{if(!e)return"";const s=new Date(e),o=n?s.getUTCFullYear():s.getFullYear(),i=String((n?s.getUTCMonth():s.getMonth())+1).padStart(2,"0"),r=String(n?s.getUTCDate():s.getDate()).padStart(2,"0"),a=String(n?s.getUTCHours():s.getHours()).padStart(2,"0"),c=String(n?s.getUTCMinutes():s.getMinutes()).padStart(2,"0"),u=String(n?s.getUTCSeconds():s.getSeconds()).padStart(2,"0");return t.replace("yyyy",o.toString()).replace("MM",i).replace("dd",r).replace("hh",a).replace("mm",c).replace("ss",u)},B7=(e,t)=>{const n=+new Date(e),s=+new Date,o=Math.abs(s-n),i=1e3,r=i*60,a=r*60,c=a*24,u=c*7,f=c*30,d=f*12;return o<1?"刚刚":o{const n=+new Date(e),s=+new Date;return Math.floor(Math.abs(n-s)/(1e3*60*60*24))},Hf=e=>e.charAt(0).toUpperCase()+e.slice(1),sn=(e,t="px")=>e?Gc(e)||L7(e)?`${e}${t}`:Je(e)?e:"":"",V7=(e,t="px")=>{if(e){if(Gc(e))return e;if(Je(e))return Number(e.replace(t,""))}},O7=(e,t,n)=>{let s={...e};return t.includes(".")?(t.split(".").forEach(o=>s=s[o]??""),s||n):s[t]||n},Sh=e=>{let t="";if(!/^\#?[0-9A-Fa-f]{6}$/.test(e))return console.error("[Teek Error] 输入错误的 hex");e=e.replace("#",""),t=e.match(/../g);for(let s=0;s<3;s++)t[s]=parseInt(t[s],16);return t},Th=(e,t,n)=>{const s=/^\d{1,3}$/;if(!s.test(e)||!s.test(t)||!s.test(n))return console.error("[Teek Error] 输入错误的 rgb 颜色值");const o=[e.toString(16),t.toString(16),n.toString(16)];for(let i=0;i<3;i++)o[i].length===1&&(o[i]=`0${o[i]}`);return`#${o.join("")}`},Cn=(e,t)=>{if(!/^\#?[0-9A-Fa-f]{6}$/.test(e))return console.error("[Teek Error] 输入错误的 hex 颜色值");const s=Sh(e);for(let o=0;o<3;o++)s[o]=Math.round(20.5*t+s[o]*(1-t));return Th(s[0],s[1],s[2])},_n=(e,t)=>{if(!/^\#?[0-9A-Fa-f]{6}$/.test(e))return console.error("[Teek Error] 输入错误的 hex 颜色值");const s=Sh(e);for(let o=0;o<3;o++)s[o]=Math.round(255*t+s[o]*(1-t));return Th(s[0],s[1],s[2])},D7=e=>{if(!me)return;const{id:t,production:n=!0}=e||{};if(!t)return console.warn("[Teek Warning] Baidu analytics id is empty");if(!document.querySelector(`#baidu-analytics-${t}`)){window._hmt=window._hmt||[];const s=document.createElement("script");s.id=`baidu-analytics-${t}`,s.async=!0,s.src=`https://hm.baidu.com/hm.js?${t}`,document.querySelector("head")?.appendChild(s)}},R7=(e,t)=>{if(!me)return;const{id:n,production:s=!0}=e||{};if(n){if((!t||!Je(t))&&(t="/"),t.startsWith("http")){const o=t.split("/"),i=`${o[0]}//${o[2]}`;t=t.replace(i,"")}window._hmt&&(window._hmt.push(["_setAccount",n]),window._hmt.push(["_trackPageview",t]))}},H7=e=>{if(!me||window.dataLayer&&window.gtag)return;const{id:t,production:n=!0}=e||{};if(!t)return console.warn("[Teek Warning] Google analytics id is empty");if(!document.querySelector(`#google-analytics-${t}`)){const s=document.createElement("script");s.id=`google-analytics-${t}`,s.src=`https://www.googletagmanager.com/gtag/js?id=${t}`,s.async=!0,document.head.appendChild(s),window.dataLayer=window.dataLayer||[],window.gtag=function(){dataLayer.push(arguments)},gtag("js",new Date),gtag("config",t)}},z7=(e,t=!0)=>{if(!me)return;let n=[];if(Array.isArray(e)?n.push(...e):n.push(e),n=n.filter(s=>!!s.id),!!n.length)for(const s of n){const{id:o,src:i}=s;if(!document.querySelector(`#umami-analytics-${o}`)){const r=document.createElement("script");r.id=`umami-analytics-${o}`,r.async=!0,r.defer=!0,r.setAttribute("data-website-id",o),r.src=i,document.head.appendChild(r)}}};typeof window<"u"&&(window._iconfont_svg_string_4999519='',(e=>{var t=(n=(n=document.getElementsByTagName("script"))[n.length-1]).getAttribute("data-injectcss"),n=n.getAttribute("data-disable-injectsvg");if(!n){var s,o,i,r,a,c=function(d,h){h.parentNode.insertBefore(d,h)};if(t&&!e.__iconfont__svg__cssinject__){e.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(d){console&&console.log(d)}}s=function(){var d,h=document.createElement("div");h.innerHTML=e._iconfont_svg_string_4999519,(h=h.getElementsByTagName("svg")[0])&&(h.setAttribute("aria-hidden","true"),h.style.position="absolute",h.style.width=0,h.style.height=0,h.style.overflow="hidden",h=h,(d=document.body).firstChild?c(h,d.firstChild):d.appendChild(h))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(s,0):(o=function(){document.removeEventListener("DOMContentLoaded",o,!1),s()},document.addEventListener("DOMContentLoaded",o,!1)):document.attachEvent&&(i=s,r=e.document,a=!1,f(),r.onreadystatechange=function(){r.readyState=="complete"&&(r.onreadystatechange=null,u())})}function u(){a||(a=!0,i())}function f(){try{r.documentElement.doScroll("left")}catch{return void setTimeout(f,50)}u()}})(window));var Eh=`