<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Prajna's blog]]></title><description><![CDATA[Hello]]></description><link>http://47.100.253.110:2333</link><image><url>https://my-img.prajnax.com/wuzhaoyi/2023/09/df0fefae5c350db049dea650eda8f0ff.vnd.microsoft.icon</url><title>Prajna&apos;s blog</title><link>http://47.100.253.110:2333</link></image><generator>Shiro (https://github.com/Innei/Shiro)</generator><lastBuildDate>Fri, 25 Sep 2026 22:42:28 GMT</lastBuildDate><atom:link href="http://47.100.253.110:2333/feed" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Sep 2026 22:42:28 GMT</pubDate><language><![CDATA[zh-CN]]></language><item><title><![CDATA[我们以为的“智能”，真的需要思考吗？]]></title><description><![CDATA[<link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/2a8caf39bb7dce23e4315509cc1b31b5.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/cebfb8bb9874d813626b2244c970a336.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/be16728377e1256b5afd3b964ed508fd.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/716047540916ff40fa65ec958d386d83.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/f2b435c1f3dfadbb58fa90e06b443973.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/2f118fb66d52de8e66d38ec3554de496.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/a1b15e4621f40bae5603ca273f547ed2.gif"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/c06bc3c20e26ddf36506a51bf1c6ef59.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/ca7ff94d723a4ebf9a1c6fee48cc46c3.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/b41b5d42664b56eecdb93d624394657a.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/d68f52dd590f9daffd6bb6d52017c678.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/1431fe02df45e1181fef7d24e260ea3f.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/3e3ac21a0a31eaaf2cd2fb4551b4ef0b.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/d80644b2329bdf335bd8bbca16e148e6.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/7a4867af8f7c4737e3ad94f996caf60e.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/65d66af65ba9d24627b60751b22bc41a.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/6e7c3c139621cf4ac155aabbf5032047.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/7ac1b6ee2bc9dc93b500c50a655f14c0.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/349cb00d455fc5cc9dc3602da733b757.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/6162eeb9c7e4bebe1283efc8e704fb6c.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2025/07/672cc8981bcf3cf2e28800c44b9181df.png"/><div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="http://47.100.253.110:2333/posts/default/does-intelligence-really-require-thinking">http://47.100.253.110:2333/posts/default/does-intelligence-really-require-thinking</a></blockquote><div><p><strong>ELIZA 的开创与“ELIZA效应”</strong></p><ul><li><p><strong>1966年</strong>，麻省理工学院的计算机科学家约瑟夫开发了ELIZA程序，这是聊天机器人历史上的重要起点。ELIZA通过模式匹配和替换，模拟罗杰斯派心理治疗师</p></li><li><p><strong>用户错觉</strong></p><ul><li><p>许多人把 ELIZA 当作真人心理医生来倾诉</p></li><li><p>这种现象称为“ELIZA 效应”——人类倾向于在脚本化系统中投射情感</p></li></ul></li></ul><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/2a8caf39bb7dce23e4315509cc1b31b5.png" height="1400" width="2526"/>
:::
这个聊天工具其实早在60年代就出现了——ELIZA 虽然只是一段简单的规则程序，却能让人觉得它“懂你在说什么”。这引发了一个耐人寻味的问题：我们以为的“智能”，真的需要思考吗？
:::</p><p>那么今天的大模型，和ELIZA之间究竟有何不同？它们又是如何跨越从“模拟理解”到“深度推理”的鸿沟？我们可以从它们对语言的处理方式、背后的模型结构，以及生成内容的方式来逐步展开。</p><h1 id="">机器人如何说话</h1><h2 id="eliza">ELIZA如何“说话”</h2><p><strong>ELIZA 的名字</strong>，正源自萧伯纳在《卖花女》中，为了融入上流社会而苦练口音的卖花姑娘伊丽莎·迪特尔——<strong>外表光鲜，却未真正理解“高雅辞藻”的分量</strong>。</p><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/cebfb8bb9874d813626b2244c970a336.png"/></p><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/be16728377e1256b5afd3b964ed508fd.png"/></p><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/716047540916ff40fa65ec958d386d83.png"/></p><p>《窈窕淑女》- 奥黛丽赫本</p><p>该片取材于萧伯纳的作品《卖花女》，讲述了语言学教授希金斯如何将一个满是乡下口音的卖花女依利沙在短期内训练成为一个操着贵族口音、出没于上流社会的千金小姐的故事</p><p>与她如出一辙，<strong>ELIZA 也是一位“台上演员”</strong>：它的每一句话，都来自程序员提前编好的脚本，依靠<strong>模式匹配与文本替换</strong>，拼凑出看似合情合理的回应。</p><p>当你输入“我妈妈做的饭很好吃”时，ELIZA 会识别出“妈妈”一词，从预设的回复中挑出“<strong>能多告诉我一些关于你家庭的事情吗？</strong>”这样的话语，仿佛在倾听你的情感，<strong>却不过是规则驱动的机械动作</strong>。</p><p>这种“<strong>假装理解</strong>”的技术，让对话流畅又富有亲和力：它<strong>鼓励你不断倾诉，为自己收集更多关键词</strong>，进而生成下一轮回应。可归根结底，<strong>ELIZA 并不真正“明白”任何内容</strong>，它只是在重复预先设定好的台词。</p><p>正如伊丽莎·迪特尔始终无法脱离剧本，<strong>ELIZA 的魅力，也仅仅在于这场巧妙的“语言幻术”</strong>——在表演与真实之间，<strong>制造出一丝捉摸不定的错觉</strong>。</p><h2 id="gpt">大模型（如GPT）如何“说话”</h2><p>GPT的名字源自<strong>“生成式预训练Transformer”</strong>（Generative Pre-trained Transformer），它并非依靠预设的脚本，而是在庞大的文本数据海洋中学习语言的深层结构。</p><p>与ELIZA明显不同的是，GPT并不只是机械地拼凑预定的话术，而是像一个经验丰富的对话伙伴，真正地理解上下文并灵活地进行回应。它基于<strong>概率模型和Transformer</strong>的自注意力机制，预测下一个词最可能是什么，从而逐渐构建出流畅且贴合语境的句子。</p><p>例如，当你输入“我妈妈做的饭很好吃”时，ChatGPT可能会回应：<strong>“听起来很温暖呢，你妈妈最拿手的菜是什么呢？”</strong>这种回应不仅体现了语境理解，还进一步引导对话，表现出真正的沟通技巧。</p><p>GPT的魅力在于它并非只是模仿，而是创造性地运用语言，这使得它的对话更有深度和情感共鸣，而不仅仅是精妙的“语言幻术”。</p><p><strong>大型语言模型（LLM）的文本生成过程可以用流程图形式概括为</strong></p><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/f2b435c1f3dfadbb58fa90e06b443973.png"/></p><p>大模型的推理过程</p><blockquote><p>◈你是谁？--&gt; 我
◈你是谁？我 --&gt; 是
◈你是谁？我是 --&gt; 工
◈你是谁？我是工 --&gt; 程
◈你是谁？我是工程 --&gt; 师
◈你是谁？我是工程师 --&gt; EOS</p></blockquote>
<h3 id="--embedding">用户输入 → 向量编码（Embedding）</h3><p><strong>第一步：把句子拆成“积木块”（分词）</strong></p><p>机器人不认识整个句子，但我们可以教它认识一些基本的“词块”。所以，我们先把句子拆开。</p><ul><li>“国王是国际象棋中最关键的棋子，任何一方的国王被将死，该方即输棋。” → [“国王”, “是”, “国际象棋”, “中”, “最”, “关键”, “的”, “棋子”, “任何”, “一方”, “被”, “将死”, “该方”, “即”, “输棋”]</li></ul><p>这就好比把一句话拆成几块乐高积木。机器人虽然不明白每个积木块的意思，但它能认出这些独立的块。</p><p><strong>第二步：给每块“积木”贴上“说明书”（嵌入）</strong></p><p>现在机器人有一堆积木块了，但它还是不知道这些积木是什么意思，相互之间有什么关系。所以，我们要给每块积木贴上一份数字“说明书”。</p><p>这份“说明书”不是一个简单的编号，而是一串特殊的数字（专业上叫“向量”）。这串数字很神奇，它能表达出这个词的意思。</p><ul><li>“国王” → [0.95, 0.05, …]</li></ul><ul><li>“国际象棋” → [0.88, 0.12, …]</li></ul><ul><li>“将死” → [0.80, 0.20, …]</li></ul><p>更神奇的是，意思相近的词，它们的数字“说明书”也会很像。比如，“厉害”和“强大”的数字说明书就会非常接近。</p><p>同时，为了让机器人知道词的顺序，我们还会给每个位置的积木再加一个“位置编号”的数字。这样，机器人不仅知道“是什么”，还知道“在哪里”。</p><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/2f118fb66d52de8e66d38ec3554de496.png"/></p><h4 id="">词嵌入：“词语地图”</h4><ul><li><p><strong>单词 → 高维向量坐标</strong></p></li><li><p><strong>嵌入就是把词转成向量，模型才“看得见”语言</strong></p></li><li><p><strong>语义相似 → 距离近</strong>
（如：“国王”、“皇后”、“王室”）</p></li><li><p><strong>语义不同 → 距离远</strong>
（如：“汽车”、“自行车”）</p></li></ul><h4 id="">为了更直观地探索这些高维向量之间的关系，我们可以借助交互式可视化工具来观察词嵌入：</h4><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/a1b15e4621f40bae5603ca273f547ed2.gif"/></p><p><a href="https://projector.tensorflow.org/">https://projector.tensorflow.org/</a></p><p><a href="https://opensource.googleblog.com/2016/12/open-sourcing-embedding-projector-tool.html">https://opensource.googleblog.com/2016/12/open-sourcing-embedding-projector-tool.html</a></p><p>整个过程就像：</p><p><strong>一句话 → 拆成几块积木 → 给每块积木贴上独特的数字说明书</strong></p><h4 id="">这样一来，原本人类的文字，就变成了机器人能理解和计算的一堆数字了。机器人接下来就可以用这些数字去做分析、回答问题或者画画了。</h4><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/c06bc3c20e26ddf36506a51bf1c6ef59.png"/></p><h3 id="-decoder">神经网络预测下一个词 Decoder</h3><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/ca7ff94d723a4ebf9a1c6fee48cc46c3.png"/></p><p>可以用“<strong>下棋决策</strong>”类比模型的推理过程。模型接收向量化的输入序列后，就像棋手观察棋局，评估每种可能走棋的胜算。实际上，神经网络会基于已给定的上下文计算出下一个词的<strong>概率分布</strong>。例如输入句子“一只猫坐在…”，模型预测“垫子”出现的概率最高。这类似棋手判断某步棋是最优策略。当模型完成这一“下一词概率”推理后，便相当于得到了一系列候选词及其概率，就像棋手为每个可能动作打分一样。</p><p>想象一位世界顶级的国际象棋大师，他的每一次落子都精准、深远、充满智慧。一个强大的语言模型（如 GPT）的核心——<strong>Transformer 架构</strong>，其思考和决策的过程，与这位大师的思维模式惊人地相似。</p><p>让我们跟随大师的脚步，一步步拆解这个精妙的智能过程。</p><h4 id="---global-vision--input-processing">第一步：观察棋局 —— 全局视野与输入处理 (Global Vision &amp; Input Processing)</h4><p>比赛开始，大师不会急于移动任何一颗棋子。他首先会审视整个棋盘，眼中没有孤立的棋子，只有一张由所有棋子构成的、充满张力的关系网。他能瞬间感知到，角落里的“王”与远方“车”之间的潜在联系，以及中心区域“兵”的对峙结构。</p><p><strong>Transformer 的运作：</strong></p><ol start="1"><li><p><strong>向量化输入 (Vectorized Input)</strong>：首先，它将每个词或标点转换成一个充满数字的“坐标向量”，这相当于把每个棋子放到棋盘的精确位置上。</p></li><li><p><strong>Transformer 的超能力：自注意力机制 (Self-Attention)</strong>：这正是 Transformer 与普通模型的分水岭，也是大师与业余棋手的核心区别。业余棋手可能一个一个地看棋子（像旧的 RNN 模型，容易遗忘），而大师则拥有“<strong>上帝视角</strong>”。</p></li></ol><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/b41b5d42664b56eecdb93d624394657a.png"/></p><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/d68f52dd590f9daffd6bb6d52017c678.png"/></p><p>单词或标点转换为向量的过程</p><p><strong>自注意力机制</strong>赋予了模型这种“上帝视角”。它能<strong>一瞬间并行处理所有词元（棋子）</strong>，并计算出<strong>每一个词元</strong>对于<strong>句子中其他所有词元</strong>的重要性权重。</p><h4 id="---stacked-layers--deep-computation">第二步：反复推演 —— 多层结构与深度计算 (Stacked Layers &amp; Deep Computation)</h4><p>大师的思考不是一次性的。在看清全局关系后，他会进行多轮的深度推演。第一轮推演后形成的“新局面”会成为他第二轮推演的“新棋盘”，思考的层次越来越深，从战术层面上升到战略层面。</p><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/1431fe02df45e1181fef7d24e260ea3f.png"/></p><p><strong>Transformer 的运作：</strong> 一个完整的 Transformer 模型正是由许多个这样的“思考单元”（即 Transformer 层）**堆叠（Stack）**而成的。</p><p><strong>逐层处理 (Layer-by-Layer Processing)</strong></p><ul><li><p><strong>层叠网络</strong>：每一层基于前一层输出，逐步提炼信息</p></li><li><p><strong>第一层</strong>：识别基本关系</p></li></ul><ul><li><p>例：“小猫” ↔ “睡觉”，“沙发” ↔ “位置”</p></li><li><p><strong>第二层</strong>：整合上下文</p></li></ul><ul><li><p>理解“小猫是在沙发上休息”</p></li><li><p><strong>第三层</strong>：推断更高层信息</p></li></ul><ul><li><p>如“小猫很放松” 的情绪含义</p></li><li><p><strong>效果</strong>：从表面结构到深层语义，逐层提炼，最终形成完整理解</p></li></ul><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/3e3ac21a0a31eaaf2cd2fb4551b4ef0b.png"/></p><p><strong>大师会多层推演：逐层深化</strong></p><ul><li><p><strong>层叠结构</strong>：多个 Transformer 层像多轮棋局推演</p></li><li><p><strong>逐层提炼</strong>：每层基于上层输出，挖掘更深语义</p></li><li><p><strong>战术到战略</strong>：从单词关联到整体语境理解</p></li></ul><h4 id="---output-probabilities--final-selection">第三步：评估与落子 —— 输出概率与最终选择 (Output Probabilities &amp; Final Selection)</h4><p>在最后，他会把对每一步棋的“感觉”转换成明确的“胜算”。比如：移动主教胜算70%，移动城堡胜算95%，吃掉对方的兵胜算85%……最终，他会选择那个胜算最高的走法。</p><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/d80644b2329bdf335bd8bbca16e148e6.png"/>
<img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/7a4867af8f7c4737e3ad94f996caf60e.png"/></p><ol start="1"><li><p><strong>输出 logits</strong>：模型的最后一层会输出一个巨大的向量（logits）。这个向量的维度等于其词汇表的大小（比如超过5万个词元）。此时，每个词元都有一个对应的数值，可以理解为大师对每一种可能“走法”的原始评分。</p></li><li><p><strong>Softmax 函数</strong>：为了让这些评分变成直观的“胜算”，模型会使用 <strong>Softmax 函数</strong>进行归一化处理。它能将所有原始评分转换成一个<strong>概率分布 (Probability Distribution)</strong>，所有词元的概率加起来正好是 1 (100%)。</p></li><li><p><strong>示例分布</strong>：</p></li></ol><ul><li><p>移动城堡 → 50%</p></li><li><p>吃掉对方兵 → 30%</p></li><li><p>移动主教 → 15%</p></li><li><p>其他走法 → 合计 5%</p></li></ul><ol start="4"><li><strong>最终选择</strong>：模型优先执行胜算最高的走法（如“移动城堡”）。</li></ol><h4 id="">总结：下棋式决策与文本生成</h4><ul><li><p><strong>全局视野</strong>：像棋手审局，模型先向量化并自注意力处理所有词元。</p></li><li><p><strong>多层推演</strong>：如同多轮深度思考，每层 Transformer 堆叠提炼更深语义。</p></li><li><p><strong>概率评分</strong>：为每个候选词（走法）打分，并通过 Softmax 转为胜算。</p></li><li><p><strong>落子选词</strong>：始终选择“胜算”最高的词，连贯生成完整句子。</p></li></ul><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/65d66af65ba9d24627b60751b22bc41a.png"/></p><h3 id="">解码输出：从概率分布中选择词并生成句子</h3><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/6e7c3c139621cf4ac155aabbf5032047.png"/></p><p>想象一下，模型每要<strong>生成一个新词</strong>，就会拿出一个特制的“<strong>幸运大转盘</strong>”。</p><p>比如，当我说出 <strong>“今天天气真...”</strong>，AI 的转盘可能长这样：</p><ul><li><p><strong>转盘上的格子</strong>：就是所有它认识的汉字。</p></li><li><p><strong>格子的大小</strong>：代表它觉得这个字出现在这里的“可能性”。在“今天天气真...”后面，“好”的可能性最大，所以它的格子最大。“披萨”这种不搭边的词，格子就小得可怜。</p></li></ul><h4 id="">怎么玩这个转盘？有几种玩法：</h4><h4 id="">玩法一：最稳妥的玩法（总是选最大块）贪心解码</h4><p>不转！直接用手把指针摆在最大的那块上。</p><ul><li><p><strong>做法</strong>：永远选可能性最高的那个词。</p></li><li><p><strong>结果</strong>：永远是“今天天气真好”。</p></li><li><p><strong>优点</strong>：安全，不会出错。</p></li><li><p><strong>缺点</strong>：非常无聊，毫无惊喜，说出来的话会很死板。</p></li></ul><h4 id="">玩法二：凭运气的玩法（真的转起来！）随机采样</h4><p>用力转动指针，让它随机停下。</p><ul><li><p><strong>做法</strong>：因为“好”的面积最大，指针大概率会停在“好”上面。但它也有可能停在“不错”，甚至运气差到极点时停在“披萨”。</p></li><li><p><strong>结果</strong>：大部分时候是“今天天气真好”，偶尔是“今天天气真不错”，充满了可能性。</p></li><li><p><strong>优点</strong>：这让 AI 的回答变得生动有趣，有创造力！</p></li></ul><h4 id="-">进阶玩法：改变游戏规则 ✨</h4><p>为了让“凭运气”的玩法更好控制，我们还有两个小技巧：</p><p><strong>技巧一：调整“贫富差距”（温度 Temperature）</strong></p><p>这个技巧可以改变转盘上各个格子的大小比例。</p><p><strong>调整温度的效果</strong></p><p><strong>低温度(T&lt;1)</strong></p><ul><li><p>放大高概率词“格子”</p></li><li><p>收缩小概率词</p></li><li><p>输出更保守、精准</p></li><li><p><strong>高温度（T&gt;1）</strong></p><ul><li><p>平衡各格子面积</p></li><li><p>提升小概率词出现率</p></li><li><p>创意增强，但风险上升</p></li></ul></li></ul><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/7ac1b6ee2bc9dc93b500c50a655f14c0.png"/></p><p>（左边的低温转盘，“好”的格子变得超级大。右边的高温转盘，所有格子的大小差距变小了。）</p><p><strong>技巧二：缩小转盘范围（Top-K / Top-P）</strong></p><p>这个技巧是在转动之前，先把一些太离谱的选项直接丢掉。</p><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/349cb00d455fc5cc9dc3602da733b757.png"/></p><h4 id="-">最关键的一步：一个接一个地转 🔄</h4><p><strong>为什么 大模型 不是只转一次就完事了。它是一个字、一个字往下“吐”的。</strong></p><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/6162eeb9c7e4bebe1283efc8e704fb6c.png"/></p><ul><li><strong>动态转盘</strong>：每生成一个词，模型就重新制作转盘</li></ul><ul><li><strong>示例流程</strong>：</li></ul><ol start="1"><li><p>输入“今天天气真…” → 转盘1 抽中“好”</p></li><li><p>句子变为“今天天气真好” → 转盘2 抽中“。”</p></li><li><p><strong>循环执行</strong>：不断重复，直至生成完整句子</p></li></ol><h3 id="">再看一遍我们的整体流程</h3><p><img src="https://my-img.prajnax.com/wuzhaoyi/2025/07/672cc8981bcf3cf2e28800c44b9181df.png"/></p></div><p style="text-align:right"><a href="http://47.100.253.110:2333/posts/default/does-intelligence-really-require-thinking#comments">看完了？说点什么呢</a></p></div>]]></description><link>http://47.100.253.110:2333/posts/default/does-intelligence-really-require-thinking</link><guid isPermaLink="true">http://47.100.253.110:2333/posts/default/does-intelligence-really-require-thinking</guid><dc:creator><![CDATA[prajna]]></dc:creator><pubDate>Tue, 18 Nov 2025 16:37:22 GMT</pubDate></item><item><title><![CDATA[wsl2 如何通过 LAN 访问]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="http://47.100.253.110:2333/posts/default/wsl_lan">http://47.100.253.110:2333/posts/default/wsl_lan</a></blockquote><div><p>wsl 如果默认不更改配置，仅仅通过 NAT，windows 官方提供的，也没有效果</p><pre class=""><code class="">netsh interface portproxy add v4tov4 listenport=&lt;yourPortToForward&gt; listenaddress=0.0.0.0 connectport=&lt;yourPortToConnectToInWSL&gt; connectaddress=(wsl hostname -I)
</code></pre>
<p>经过多方查找，终于找到想要的配置，如下</p><pre class=""><code class="">$ports = @(80, 443, 10000, 3000, 5000, 22);

$wslAddress = ubuntu.exe -c &quot;ifconfig eth0 | grep -oP &#x27;(?&lt;=inet\s)\d+(\.\d+){3}&#x27;&quot;;

if ($wslAddress -match &#x27;^(\d{1,3}\.){3}\d{1,3}$&#x27;) {
  Write-Host &quot;WSL IP address: $wslAddress&quot; -ForegroundColor Green;
  Write-Host &quot;Ports: $ports&quot; -ForegroundColor Green;
}
else {
  Write-Host &quot;Error: Could not find WSL IP address.&quot; -ForegroundColor Red;
  exit;
}

$listenAddress = &#x27;0.0.0.0&#x27;;

foreach ($port in $ports) {
  netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$listenAddress;
  netsh interface portproxy add v4tov4 listenport=$port listenaddress=$listenAddress connectport=$port connectaddress=$wslAddress;
}

$fireWallDisplayName = &#x27;WSL Port Forwarding&#x27;;

Remove-NetFireWallRule -DisplayName $fireWallDisplayName;
New-NetFireWallRule -DisplayName $fireWallDisplayName -Direction Outbound -LocalPort $ports -Action Allow -Protocol TCP;
New-NetFireWallRule -DisplayName $fireWallDisplayName -Direction Inbound -LocalPort $ports -Action Allow -Protocol TCP;
</code></pre>
<p><code>ubuntu.exe</code> 可以替换为支持的发行版</p><p>现在除了发起定时任务，也可以直接用管理员权限运行</p><pre class=""><code class="">powershell.exe -File &quot;C:\Users\hqwuz\Bridge-WslPorts.ps1&quot;
</code></pre></div><p style="text-align:right"><a href="http://47.100.253.110:2333/posts/default/wsl_lan#comments">看完了？说点什么呢</a></p></div>]]></description><link>http://47.100.253.110:2333/posts/default/wsl_lan</link><guid isPermaLink="true">http://47.100.253.110:2333/posts/default/wsl_lan</guid><dc:creator><![CDATA[prajna]]></dc:creator><pubDate>Mon, 04 Dec 2023 15:31:56 GMT</pubDate></item><item><title><![CDATA[nextJest moduleNameMapper doesn't work]]></title><description><![CDATA[<div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="http://47.100.253.110:2333/posts/default/next_moduleNameMapper">http://47.100.253.110:2333/posts/default/next_moduleNameMapper</a></blockquote><div><p>记一个神奇的 jest 问题</p><pre class="language-js lang-js"><code class="language-js lang-js">jest.mock(&quot;lib/store&quot;, () =&gt; ({
  jotaiStore: jest.fn(),
}));

</code></pre>
<p>这样写会报错</p><pre class="language-text lang-text"><code class="language-text lang-text">Cannot find module &#x27;lib/store&#x27; from &#x27;atoms/imagePreview.test.ts&#x27;
</code></pre>
<p>但是也在 jext.config.js 内写入了，打印了最后导出的配置，发现并没有成功加载</p><pre class="language-js lang-js"><code class="language-js lang-js">const nextJest = require(&quot;next/jest&quot;);

const createJestConfig = nextJest({
  // Provide the path to your Next.js app to load next.config.js and .env files in your test environment
  dir: &quot;./&quot;,
});

// Add any custom config to be passed to Jest
const customJestConfig = {
  setupFilesAfterEnv: [&quot;&lt;rootDir&gt;/jest.setup.js&quot;],
  testEnvironment: &quot;jest-environment-jsdom&quot;,
  globals: {
    &quot;ts-jest&quot;: {
      tsconfig: &quot;&lt;rootDir&gt;/tsconfig.json&quot;, // 请替换为实际的路径
    },
  },
  moduleNameMapper: {
    &quot;^lib/(.*)$&quot;: &quot;&lt;rootDir&gt;/lib/$1&quot;,
    &quot;^app/(.*)$&quot;: &quot;&lt;rootDir&gt;/app/$1&quot;,
    &quot;^atoms/(.*)$&quot;: &quot;&lt;rootDir&gt;/atoms/$1&quot;,
    &quot;^components/(.*)$&quot;: &quot;&lt;rootDir&gt;/components/$1&quot;,
    &quot;^hooks/(.*)$&quot;: &quot;&lt;rootDir&gt;/hooks/$1&quot;,
  },
};

// createJestConfig is exported this way to ensure that next/jest can load the Next.js config which is async
module.exports = createJestConfig(customJestConfig);

</code></pre>
<p>最后发现原因：</p><p>在配置 <code>jest.config.js</code> 时候，因为是 next jest 版本的 swc，直接在 <code>createJestConfig</code> 内部定义 <code>moduleNameMapper</code> 是不生效的，要配置在 <code>customJestConfig</code> 内部</p><p>希望对碰到此问题的人有所帮助</p><span style="text-align:right;font-size:0.8em;float:right">此文由 <a href="https://github.com/mx-space">Mix Space</a> 同步更新至 xLog
原始链接为 <a href="https://www.prajnax.com/posts/default/nextJest_moduleNameMapper_not_work">https://www.prajnax.com/posts/default/nextJest_moduleNameMapper_not_work</a></span><br/><br/></div><p style="text-align:right"><a href="http://47.100.253.110:2333/posts/default/next_moduleNameMapper#comments">看完了？说点什么呢</a></p></div>]]></description><link>http://47.100.253.110:2333/posts/default/next_moduleNameMapper</link><guid isPermaLink="true">http://47.100.253.110:2333/posts/default/next_moduleNameMapper</guid><dc:creator><![CDATA[prajna]]></dc:creator><pubDate>Mon, 18 Sep 2023 15:47:22 GMT</pubDate></item><item><title><![CDATA[2023-09-01 关西之旅]]></title><description><![CDATA[<link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2023/09/12e0402b27c3f6f60b1cb86981d5337e.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2023/09/8155b315dfdac526094e45c8ce9eea1b.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2023/09/a52aa2ffe6a7b7117fb08dd106d3af56.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2023/09/5f9f40351dbe1a06914f5fa173f09c9a.jpeg"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2023/09/425b7a13f0b409c93be85a78459c948a.png"/><link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2023/09/9a4b60d86dbc14ccd742351917e8a86c.png"/><link rel="preload" as="image" href="https://wuzhaoyi-xyz.oss-cn-beijing.aliyuncs.com/blog/202308101314404.png"/><div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="http://47.100.253.110:2333/notes/1">http://47.100.253.110:2333/notes/1</a></blockquote><div><p>9.1 号盛着大家开学了，老婆休了婚假，开启去日本关西五天的短暂旅行</p><p>整体感觉，京都是一个特别适合度假的城市，人文和环境都特别好，适合待一段时间。对比下大阪就是一个比较热闹，适合购物，体验日本城市氛围。</p><p><img src="https://my-img.prajnax.com/wuzhaoyi/2023/09/12e0402b27c3f6f60b1cb86981d5337e.png" alt="image.png" height="1080" width="1080"/></p><p><img src="https://my-img.prajnax.com/wuzhaoyi/2023/09/8155b315dfdac526094e45c8ce9eea1b.png" alt="image.png" height="1080" width="1080"/></p><p><img src="https://my-img.prajnax.com/wuzhaoyi/2023/09/a52aa2ffe6a7b7117fb08dd106d3af56.png" alt="image.png" height="1080" width="1080"/></p>
<h2 id="">出行</h2><ul><li>趁新干线
<ul><li>比如坂极，Haruka的话。 关西也可以用 Suica , iphone上直接可以在钱包内开通就行，如果在机场买了出行券，要去闸机旁的工作人员处检票才行</li></ul></li><li><p>出租车</p><ul><li>比国内贵一点，但是还能接受的程度，普遍能刷信用卡，大部分能刷Suica(因为是关西，关西用ICOCA)
## 酒店选择
### Cross Hotel Osaka
Chuo-ku Shinsaibashisuji 2-5-15,Chūō-ku,Osaka
大阪的酒店，位置就在<strong>难波</strong>旁边，住的行政楼层，有浴缸，体验是还可以的
### Sora Niwa Terrace Kyoto</li><li>Shimogyo-ku Inaricho 324,Shimogyō-ku,Kyoto</li><li>京都的酒店，就在鸭川旁边，走到花见小路或者三条那边的餐馆都特别方便，酒店的工作人员非常热情。而且能在酒店里面泡汤，顶楼可以边泡脚边俯瞰整个鸭川，体验非常好。</li><li><img src="https://my-img.prajnax.com/wuzhaoyi/2023/09/5f9f40351dbe1a06914f5fa173f09c9a.jpeg" alt="IMG_1564.jpeg"/>
## 美食</li></ul><p>使用 Tabelog 预定餐厅，不预约的话周六周日很难找到好餐厅，提前一个星期或者一个月吧。</p></li><li>## 怀石料理 京都牛懐石 稲吉
<img src="https://my-img.prajnax.com/wuzhaoyi/2023/09/425b7a13f0b409c93be85a78459c948a.png" alt="image.png"/>
<img src="https://my-img.prajnax.com/wuzhaoyi/2023/09/9a4b60d86dbc14ccd742351917e8a86c.png" alt="image.png"/></li><li><h2 id="">行程安排</h2><p>这边是原先预定的形成，还修改了些</p></li><li>9.1 下午两点飞机
<ul><li>6.30 到大阪，转到京都</li><li>Terrace 办理入住</li><li>18:30 去稲吉</li></ul></li><li>9.2
<ul><li>11:30 - 13:00 真打 英多朗 很热门的拉面店，柚子拉面很好吃</li><li>锦市场</li><li>清水寺</li><li>19:30 RESTAURANT hidamarino</li></ul></li><li>9.3
<ul><li>11:00 前退房</li><li>12:00 京都蛸薬師店</li><li>二条城 夏天真的很热，都是石子路，鞋上多了层灰</li><li>伏见稻荷大社</li><li>19:30 “酒店楼下的食堂”，其实应该是家庭餐厅，很多好吃的肉</li><li>20:00 回到大阪
<ul><li>Cross Hotel Osaka</li></ul></li><li>22:30 華蓮 大阪心斎橋店</li></ul></li><li>9.4
<ul><li>梅田</li><li><p>18:00 - 19:00 ミルカレス</p><p><img src="https://wuzhaoyi-xyz.oss-cn-beijing.aliyuncs.com/blog/202308101314404.png" alt="CleanShot 2023-08-10 at 13.14.14@2x.png"/></p></li></ul></li><li>## 餐厅</li><li>### Reservation at 京都牛懐石 稲吉
已安排：2023年9月1日 19:30 - 20:30 (GMT+8)
位置：京都牛懐石 稲吉, 京都府京都市中京区先斗町通り三条下ル梅之木町150</li><li><h3 id="-">预订：真打 英多朗</h3><p>已安排：2023年9月2日 11:30 - 13:00 (GMT+8)
位置：真打 英多朗
京都府 京都市中京区 錦烏丸東入ル元法然寺町683 烏丸錦ビル 1Ｆ</p><p>确认码：PA4CDYVYR8</p><ul><li>就餐人数：2</li><li>电话号码：075-211-2239</li></ul></li><li>### 预订：RESTAURANT hidamarino
已安排：2023年9月2日 19:30 - 21:00 (GMT+8)
位置：RESTAURANT hidamarino
京都府 京都市下京区 高倉通四条下ル高材木町218 レックスTSUBAKIビル 1F
<ul><li>电话号码：075-365-5085</li></ul></li><li>### 预订：ヤキニク甲 京都蛸薬師店
已安排：2023年9月3日 12:00 - 13:30 (GMT+8)
位置：ヤキニク甲 京都蛸薬師店
京都府 京都市中京区 油屋町120-1
<ul><li>电话号码：075-211-1189</li></ul></li><li>### Reservation at ミルカレス
已安排：2023年9月4日 18:00 - 19:00 (GMT+8)
位置：ミルカレス, 大阪府大阪市北区曽根崎新地1-6-1, ENISHI北新地ビル１階</li></ul></div><p style="text-align:right"><a href="http://47.100.253.110:2333/notes/1#comments">看完了？说点什么呢</a></p></div>]]></description><link>http://47.100.253.110:2333/notes/1</link><guid isPermaLink="true">http://47.100.253.110:2333/notes/1</guid><dc:creator><![CDATA[prajna]]></dc:creator><pubDate>Fri, 01 Sep 2023 05:43:31 GMT</pubDate></item><item><title><![CDATA[wsl2内ubuntu如何使用nfs挂载]]></title><description><![CDATA[<link rel="preload" as="image" href="https://my-img.prajnax.com/wuzhaoyi/2023/08/6931327f8606b156ed37403ffdefea07.png"/><div><blockquote>该渲染由 Shiro API 生成，可能存在排版问题，最佳体验请前往：<a href="http://47.100.253.110:2333/posts/default/wsl2_nfs">http://47.100.253.110:2333/posts/default/wsl2_nfs</a></blockquote><div><p>安装[[nfs]]</p><pre class="language-Shell lang-Shell"><code class="language-Shell lang-Shell">sudo apt update
sudo apt install nfs-common
</code></pre>
<p>接下来就可以直接挂载了</p><pre class="language-Shell lang-Shell"><code class="language-Shell lang-Shell"># 创建挂载文件夹
sudo mkdir /mnt/nfs_share

# 测试是否能够挂载上去
sudo mount -t nfs 192.168.2.208:/mnt/mnt2/media /mnt/nfs_share

</code></pre>
<p>重启后也能挂载</p><pre class="language-shell lang-shell"><code class="language-shell lang-shell">vim /etc/fstab 
</code></pre>
<pre class="language-text lang-text"><code class="language-text lang-text">192.168.2.208:/mnt/mnt2/media /mnt/nfs_share nfs defaults 0 0
</code></pre>
<p>但是，在[[wsl]]内部，因为<code>nfs-server</code>原因挂载会报错</p><pre class=""><code class="">protocol not supported
</code></pre>
<p>找到了相关 Issue
<a href="https://github.com/microsoft/WSL/issues/9790">Can&#x27;t mount NFS from within WSL2 Ubuntu 22.04 · Issue #9790 · microsoft/WSL · GitHub</a>
直接挂载在普通服务器上可以，确认了是服务器问题，我用的是 <a href="Truenas.md">Truenas</a></p><p>查看<code>nfs</code>服务配置</p><p><img src="https://my-img.prajnax.com/wuzhaoyi/2023/08/6931327f8606b156ed37403ffdefea07.png" height="1112" width="2148"/></p>
<pre class="language-shell lang-shell"><code class="language-shell lang-shell">vim /etc/exports
</code></pre>
<p>对文件目录增加 <code>insecure</code></p><pre class=""><code class="">&quot;/mnt/mnt2/media&quot;\
    *(sec=sys,rw,insecure,no_subtree_check)
</code></pre>
<p>现在继续使用 <code>mount</code></p><pre class="language-shell lang-shell"><code class="language-shell lang-shell">sudo mount -t nfs 192.168.2.208:/mnt/mnt2/media /mnt/nfs_share
</code></pre>
<span style="text-align:right;font-size:0.8em;float:right">此文由 <a href="https://github.com/mx-space">Mix Space</a> 同步更新至 xLog
原始链接为 <a href="https://www.prajnax.com/posts/default/wsl2_nfs">https://www.prajnax.com/posts/default/wsl2_nfs</a></span><br/><br/></div><p style="text-align:right"><a href="http://47.100.253.110:2333/posts/default/wsl2_nfs#comments">看完了？说点什么呢</a></p></div>]]></description><link>http://47.100.253.110:2333/posts/default/wsl2_nfs</link><guid isPermaLink="true">http://47.100.253.110:2333/posts/default/wsl2_nfs</guid><dc:creator><![CDATA[prajna]]></dc:creator><pubDate>Tue, 01 Aug 2023 15:45:23 GMT</pubDate></item></channel></rss>