[{"data":1,"prerenderedAt":6585},["ShallowReactive",2],{"blog-posts":3},[4,213,252,557,590,1673,1974,2025,2089,2446,2652,2690,3200,3250,3338,3472],{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":10,"date":11,"categories":12,"tags":13,"draft":7,"body":16,"_type":207,"_id":208,"_source":209,"_file":210,"_stem":211,"_extension":212},"\u002Fposts\u002Fmy-thoughts-on-the-ai-industry","posts",false,"","简单聊聊对 AI Agent 行业的理解","写这篇文章的初衷，是我发觉逐渐忘了前两个月的 AI\u002FLLMs 是什么样的能力和情况了。意识中似乎某些在突然加速，但理性和直觉告诉我这不对，作为行内人，我知道这是一个渐进的、累积的过程。我想自己回忆一下，Agent的发展。","2026-06-20 13:14:25","色伏集",[14,15],"LLMs","AI Agent",{"type":17,"children":18,"toc":200},"root",[19,27,32,37,42,48,53,58,74,79,84,89,94,99,104,109,114,119,125,130,141,146,156,166,178,190,195],{"type":20,"tag":21,"props":22,"children":23},"element","p",{},[24],{"type":25,"value":26},"text","我印象里 AI Agent 的概念在 2024 年的时候就逐步走向成熟了。凭我模糊的回忆说一下（不保证正确）。",{"type":20,"tag":21,"props":28,"children":29},{},[30],{"type":25,"value":31},"一开始 22 年 ChatGPT 就以 ChatBot 的形式爆火。那个时候还称不上现在的 Agent，充其量就是浓缩了大量世界知识的 ChatBot。23年24年开始有了\"Agent\"应用，一开始的那个忘了叫什么名字了（Logo长得像个骆驼的），是 AI 写小说的。我是看见一个学长研究生毕业做的，这个我印象很深。从这里开始，我们不仅仅只是用一个集人类精华的存在去 Chat，而是通过一种组织的形式，发挥它的知识和能力，开始有意识根据模型本身的能力设计一个系统，让模型在这个系统中完成任务，这可以说是早期的 harness 了。",{"type":20,"tag":21,"props":33,"children":34},{},[35],{"type":25,"value":36},"而 tool-calling 之类的能力，也是在这种系统性地使用模型能力的时候的自发实践。就像很早的 GPT-Academic，就是自己实现 function，配合 prompt 完成对 paper 的拆解。这份能力太过广泛和基础，下游的使用促使上游模型训练端让模型 tool-calling 的能力进一步加强，成为 ReasoningLLM 的标准能力。后面则是对这份 tool-calling 能力的扩展，从原本的工具调用会出错，到单次工具调用成功，再到多次工具调用——模型在工具使用上已经成了专家。",{"type":20,"tag":21,"props":38,"children":39},{},[40],{"type":25,"value":41},"而能够使用工具，就是 Agentic 能力的一个关键点。在此之前的所谓 Agent，不过是 prompt APPs 罢了。",{"type":20,"tag":43,"props":44,"children":46},"h2",{"id":45},"节奏",[47],{"type":25,"value":45},{"type":20,"tag":21,"props":49,"children":50},{},[51],{"type":25,"value":52},"我在24年暑假关注到了 AstrBot 这个项目，那个时候 LLMs 的能力刚好够到能进行工具调用的程度，但鲜少有 QQBot 的项目把 tool-call LLM 作为一等公民接入 QQ，AstrBot做了。比较早期的就跟进了 MCP，沙箱执行，工具调用。我当时顺手给 AstrBot 提了个 typo fix，修了下启动时的 logo，哈哈。但我后续在使用 AstrBot 的时候感到了厌倦——我没有感受到它带给了我什么。让 Bot 更像人？和人交互？我根本用不上。",{"type":20,"tag":21,"props":54,"children":55},{},[56],{"type":25,"value":57},"2024年有些 PaaS Agent APP 平台，比如 Dify、Coze 等等。RAG的概念也是作为增强模型能力的一个方法为人所熟知，一个是可以解决 AI 幻觉问题，一个是解决 AI 上下文不够长的问题。",{"type":20,"tag":21,"props":59,"children":60},{},[61,63,72],{"type":25,"value":62},"而这个时候，token 的消耗量并没有那么大, dsr1 context length 128k，单次对话就调用一个工具。但是仅仅在 2025 年 Q2，Agentic AI的概念就提出来了（与此同时是大量的 agentic 框架，这是25Q2有人列举的",{"type":20,"tag":64,"props":65,"children":69},"a",{"href":66,"rel":67},"https:\u002F\u002Fdocs.google.com\u002Fspreadsheets\u002Fd\u002F1B37VxTBuGLeTSPVWtz7UMsCdtXrqV5hCjWkbHN8tfAo\u002Fedit?ref=blog.langchain.dev&pli=1&gid=0#gid=0",[68],"nofollow",[70],{"type":25,"value":71},"不同agent框架之间的对比",{"type":25,"value":73},"），并且就是我们现在常谈论的 agent，而非之前的改改 system prompt 的 'agent'。那个时候还有很多 agent 框架，不管是非常早就出来的 LangChain、还是算比较新的 autogen、LangGraph 这些都是很方便去构建 workflow 式的 agent的平台，开发 agent 的门槛变得很低。但这个时候业界反应还没有那么大（2025Q2）——相应的就是机会非常多，因为绝大多数人都没有做过 agent。而今一年过去了，体感上各种培训班已经满天飞了。",{"type":20,"tag":21,"props":75,"children":76},{},[77],{"type":25,"value":78},"另外一个，token消耗量在模型长上下文普及和长程任务能力越来越强的现在激增。我一天开发一个项目最高能烧掉1B的token，这换在ChatBot时代是无法想象的。而海量的token就代表着海量的数据，而且还是之前现实世界没有的，agentic的long horizon任务执行的轨迹数据，这是新一轮的数据飞轮。随着 Transformer 架构的不断升级，现在 dsv4 解决了 KV Cache 算力、显存消耗太大的问题（之前只是解决Attn上的算力和显存问题，而长上下文中KV Cache带来的问题没有解决），能够在 128k的上下文做预训练，这是以前不敢想的。人类产生数据的速度也在激增。这有点像烧着能源，让大模型有了左脚踩右脚的能力，当然中间少不了人类做 pilot 和 steer，以保证模型和人类 align。",{"type":20,"tag":21,"props":80,"children":81},{},[82],{"type":25,"value":83},"2025年 vibe coding 的概念就已经深入人心。25五一的时候，有同学问我课程项目（前端后端数据库）能不能全用 vibe coding，我说试试，应该能。他最后全 vibe coding 成功了。那个时候就有所谓'前端已死'的论调，并在 Gemini 3（2025Q4）的时候极为强烈。",{"type":20,"tag":21,"props":85,"children":86},{},[87],{"type":25,"value":88},"之后出现的 AI 产品五花八门。AI 陪伴类的一直都有（酒馆、MiniMax的星野 etc.），这种情感类的反馈周期长，算法的 reward 太多太广太复杂，很难有好的确切的标准做 SFT，并且需要长周期的反馈，很难直接 eval 效果。还有 AI Researcher，印象里这个 OpenAI 先做的，然后 Kimi 似乎是跟进的不错的那个。Kimi Research，记得当时他们的模型做到了一次对话能够调用上百个工具，出了个产品 OK Computer，来做单次请求的长程解决，这个时候（2025Q3）似乎各家就能做到单次30分钟以上的持续执行了。2025Q4 的 skills 概念的提出让 Agentic AI 的易用性进一步降低，（skills这个概念真神了）skills，可以说是 LLM Infra 中的 FlashAttention。将修改模型上下文的权利下放（而这是 agentic 系统中至关重要的），通过 skills 可以直接给模型传输经验、方法、流程、领域知识、思路，等等等等。直接让通用模型的能力轻松落地。而且通过三步渐进暴露的方式做了漂亮的 context engineering，是 Agent在C端变得高可用的一个至关重要的概念。",{"type":20,"tag":21,"props":90,"children":91},{},[92],{"type":25,"value":93},"写到这里，我发现模型变动的速度太快了。两个月甚至一个月模型厂商就能把新一代的post-training的模型端上来。模型能力的提升从上游往下游不断传播，影响巨大。",{"type":20,"tag":21,"props":95,"children":96},{},[97],{"type":25,"value":98},"一个类似玩笑的说法是，这个月你用 AI Coding 感到棘手的项目，你大可放置一段时间，等新一代模型发布的时候，过去的难题可能就迎刃而解了。这反应在行业里面很残酷——就像做垂直领域的一些 AI Agent 产品，现在正在被通用的 Codex 吃掉市场份额一样。",{"type":20,"tag":21,"props":100,"children":101},{},[102],{"type":25,"value":103},"其实也告诉了我们时间很重要。这个月是这样，下个月情况可能就会反转，像 Fable 5 这样的事情，之前已经发生过，未来一定还会发生。但是这个具体的变动谁也不清楚，不身处在水中，怎么能摸到第一线的变化？",{"type":20,"tag":43,"props":105,"children":107},{"id":106},"破圈",[108],{"type":25,"value":106},{"type":20,"tag":21,"props":110,"children":111},{},[112],{"type":25,"value":113},"2026Q1 Opus 4.6 发布之后，我第一次感觉到 Agentic AI 真正意义上的破圈了，好像 AI 真的突破了某种能力的上限，而那种上限格外诱人，各个行业和领域的人都开始为之疯狂。当然这种FOMO并非2026才发生的，更早就有了。",{"type":20,"tag":21,"props":115,"children":116},{},[117],{"type":25,"value":118},"另一个破圈的是 OpenClaw（ClawBot），这玩意我记得在 Dev 中有过一次传播，但似乎大家没有这么在意。隔了一两个月在 Q1 和 Q2 之间的时候，OpenClaw突然破圈了，引起了一波 Claw 潮。我其实到现在也没有想明白是为什么？难道是真的发现了 AI Agent 的能力已经足够在生产生活中起到作用了吗？但是资本似乎从此刻就开始狂欢。智谱、MiniMax接连港股上市，而今估值快万亿。",{"type":20,"tag":43,"props":120,"children":122},{"id":121},"agent-到底在做什么",[123],{"type":25,"value":124},"Agent 到底在做什么",{"type":20,"tag":21,"props":126,"children":127},{},[128],{"type":25,"value":129},"上面啰嗦了这么多，其实真正想聊的是这个：抛开产品和概念，Agent 到底是什么，以及它现在到底能做什么。",{"type":20,"tag":21,"props":131,"children":132},{},[133,135],{"type":25,"value":134},"只说 agent 类型的话，可以分作 workflow 和 agent 两种，以及两者之间的东西。但我觉得这个二分法本身没那么重要——更重要的是想清楚一个问题：",{"type":20,"tag":136,"props":137,"children":138},"strong",{},[139],{"type":25,"value":140},"你的业务里，哪些环节需要 agentic，需要到什么程度？",{"type":20,"tag":21,"props":142,"children":143},{},[144],{"type":25,"value":145},"这个问题比选框架重要得多。不是因为框架不重要，而是因为大多数场景下，你根本不需要一个完全自主的 agent。",{"type":20,"tag":21,"props":147,"children":148},{},[149,154],{"type":20,"tag":136,"props":150,"children":151},{},[152],{"type":25,"value":153},"业务流程清晰、规律、稳定、门槛不高",{"type":25,"value":155},"——这些场景用 workflow 就够了。workflow 的优势不是能力，是可控。每一步的输入输出是确定的，出问题你能定位到具体环节。而一个完全自主的 agent，它做对了你不知道为什么对，做错了你也不知道在哪一步开始偏的。对于大多数企业场景，可控性比智能程度更值钱。",{"type":20,"tag":21,"props":157,"children":158},{},[159,164],{"type":20,"tag":136,"props":160,"children":161},{},[162],{"type":25,"value":163},"垂直领域",{"type":25,"value":165},"就是另一回事了。通用模型 + skills 在垂直领域的效果往往不好，而且可预计的未来通用模型在这些领域的数据都比较稀缺。这时候要么训练\u002F微调，要么结合领域知识的 RAG。如果做不到微调模型，就只能用 workflow 去逼近效果。这不是最好的方案，但是是可行的方案。",{"type":20,"tag":21,"props":167,"children":168},{},[169,171,176],{"type":25,"value":170},"这中间有一个我反复想到的问题：",{"type":20,"tag":136,"props":172,"children":173},{},[174],{"type":25,"value":175},"上下文。",{"type":25,"value":177}," 不管是 workflow 还是 agent，让模型接收到正确的、充足的、合适的上下文，决定了整个系统的上限。上下文给少了模型瞎猜，给多了模型被噪声淹没，给错了方向整个就偏了。这件事说起来简单，实际上极其依赖对业务的理解——你得知道什么信息对决策是关键的，什么信息是噪音。这不是技术问题，是领域知识问题。",{"type":20,"tag":21,"props":179,"children":180},{},[181,183,188],{"type":25,"value":182},"另一个同样关键但更难的事情是",{"type":20,"tag":136,"props":184,"children":185},{},[186],{"type":25,"value":187},"评估",{"type":25,"value":189},"。怎么知道你的 agent 系统在变好还是变坏？模型一更新，prompt 一改，工具一换，行为就可能变了。如果没有一套评估手段，你就是在盲飞。但评估 agent 比评估模型难得多——因为 agent 的输出不是单点的，是多步的、有状态的、和环境交互的。单次工具调用对不对？连续调用的顺序对不对？最终结果对不对？三个维度的评估，目前行业里也没有很好的统一方案。",{"type":20,"tag":21,"props":191,"children":192},{},[193],{"type":25,"value":194},"这也是为什么我说 OpenClaw 的破圈让我困惑。如果 agent 系统的基础设施——上下文工程、评估体系——都还处在这种\"大家各做各的\"阶段，那它真的准备好进入生产生活了吗？还是说我们又一次高估了短期，而低估了长期？",{"type":20,"tag":21,"props":196,"children":197},{},[198],{"type":25,"value":199},"后记：写这篇文章的初衷，是我发觉逐渐忘了前两个月的 AI\u002FLLMs 是什么样的能力和情况了。行业的节奏快到你来不及消化今天的东西，明天又变了。我想把现在的理解写下来，是为了过几个月回头再看的时候，能看到自己当时站在哪里，看到了什么，又看漏了什么。人的记忆真的忘的太快了。",{"title":8,"searchDepth":201,"depth":202,"links":203},2,3,[204,205,206],{"id":45,"depth":201,"text":45},{"id":106,"depth":201,"text":106},{"id":121,"depth":201,"text":124},"markdown","content:posts:my-thoughts-on-the-AI-industry.md","content","posts\u002Fmy-thoughts-on-the-AI-industry.md","posts\u002Fmy-thoughts-on-the-AI-industry","md",{"_path":214,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":215,"description":8,"date":216,"categories":217,"tags":218,"draft":7,"body":220,"_type":207,"_id":249,"_source":209,"_file":250,"_stem":251,"_extension":212},"\u002Fposts\u002Frotational-positional-encoding","RoPE","2026-06-17 18:31:40","殆罔集",[14,219,215],"Transformer",{"type":17,"children":221,"toc":247},[222,227,232,237,242],{"type":20,"tag":21,"props":223,"children":224},{},[225],{"type":25,"value":226},"Attn 本身不表示位置，不包含时序信息。在进入 Attn Block 之前，需要将文本的位置信息编码进 Embedding vector 里。",{"type":20,"tag":21,"props":228,"children":229},{},[230],{"type":25,"value":231},"早期如 BERT 使用的是绝对位置编码，用一个Embedding去表示位置，无法外推，并且还需要额外存储位置信息。相对位置编码，用两个token之间的相对距离去编码解决了外推的问题，但实现很麻烦。",{"type":20,"tag":21,"props":233,"children":234},{},[235],{"type":25,"value":236},"我们知道 Attn 本身就是抽象出 Query、Key、Value，计算QK相关性找V这个过程，这里用了矩阵乘法。对于矩阵我们有很多trick。同时旋转 Q、K 两个矩阵，他们矩阵点乘的结果就能实现相对位置编码，而旋转过程中频率的衰减自然展现出了绝对位置的信息。",{"type":20,"tag":21,"props":238,"children":239},{},[240],{"type":25,"value":241},"RoPE 利用了矩阵的数学特性，漂亮地做好了位置编码这件事。只需要做旋转就可以。空间复杂度O(1)，算法复杂度都降了很多。把大的QK矩阵分块改成一对一对的到二维空间做旋转，这些维度对从高到低不同频率衰减包含在其中。高频负责近距离，中频平衡精度和范围，低频确定远距离位置。外推能力强，没有引入额外的复杂度，非常美丽。",{"type":20,"tag":21,"props":243,"children":244},{},[245],{"type":25,"value":246},"如果位置信息能从off到其他模块，RoPE这块还能减负。比如使用Linear Attn，如Gated DeltaNet，自带很强的位置理解。Attn就可以把长程的位置理解off掉，用Partial RoPE保留高频部分，只理解近邻的位置信息即可。",{"title":8,"searchDepth":201,"depth":202,"links":248},[],"content:posts:rotational-positional-encoding.md","posts\u002Frotational-positional-encoding.md","posts\u002Frotational-positional-encoding",{"_path":253,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":254,"description":8,"date":255,"categories":217,"tags":256,"draft":7,"body":257,"_type":207,"_id":554,"_source":209,"_file":555,"_stem":556,"_extension":212},"\u002Fposts\u002Fintroduction-to-large-language-model","大语言模型入门基础","2026-06-16 22:36:11",[219,14],{"type":17,"children":258,"toc":547},[259,264,270,275,280,285,290,295,301,306,311,316,321,326,391,396,401,509,515,520,525,531,536,541],{"type":20,"tag":21,"props":260,"children":261},{},[262],{"type":25,"value":263},"本文介绍大语言模型(LLM)的基础内容。",{"type":20,"tag":43,"props":265,"children":267},{"id":266},"insight",[268],{"type":25,"value":269},"Insight",{"type":20,"tag":21,"props":271,"children":272},{},[273],{"type":25,"value":274},"对于推理时的 LLMs 来说，它只做一件事：预测下一个 token。这听起来是一件非常简单的一件事。为什么 LLMs 却在文本模态上表现的如此全能呢？",{"type":20,"tag":21,"props":276,"children":277},{},[278],{"type":25,"value":279},"力大砖飞？道法自然？或许都对。LLMs 在海量数据上做了 pretrain。截止到2026年4月份，国内开源的几家模型公司在预训练阶段训练的token数量大约都在30T-35TB之间。模型每个参数预训练消耗的token都远大于20了。并且我相信这个数据使用量会在 DeepSeek V4 分享他们新的稀疏方法后，继续增长。另外，qwen 小模型的实践告诉了我们：预训练时，随着数据量的增多，即使是小模型，其能力也在稳步提升。",{"type":20,"tag":43,"props":281,"children":283},{"id":282},"数据飞轮",[284],{"type":25,"value":282},{"type":20,"tag":21,"props":286,"children":287},{},[288],{"type":25,"value":289},"在模型的长上下文突破(RoPE、YaRN), 基座模型 Agentic 能力提升， LLM Infra(vLLM、SGLang etc.) Day0级跟进支持等等突破之后，一批全新的、过去没有的长上下文 Agent 任务的数据在飞速产生。这个时候谁拥有更多数据（并且能聪明地运用），那么他们下一代的模型就会更强，这是个正反馈的过程，也被称为数据飞轮。",{"type":20,"tag":21,"props":291,"children":292},{},[293],{"type":25,"value":294},"数据飞轮正在拉大不同模型厂商之间的差距。",{"type":20,"tag":43,"props":296,"children":298},{"id":297},"看到新的-token-产生的时候发生了什么",[299],{"type":25,"value":300},"看到新的 Token 产生的时候，发生了什么？",{"type":20,"tag":21,"props":302,"children":303},{},[304],{"type":25,"value":305},"使用 LLM 时，输入的是人类的文本，输出的是人类的文本，这个过程中模型到底做了什么呢？",{"type":20,"tag":21,"props":307,"children":308},{},[309],{"type":25,"value":310},"在看到文本的前一步，token是经过采样后得到的next token ID，根据ID一做 detokenizer 就得到看见的文本了。",{"type":20,"tag":21,"props":312,"children":313},{},[314],{"type":25,"value":315},"得到 token id 的前一步，是经过 Softmax 计算出的一个概率矩阵，根据不同的解码策略（贪婪解码：取概率最大的； 投机解码：需要 MTP 模块； 或者按概率采样等等），选择next token id。再上一步就是 logits。我们平常说的 Temperature（对 logits 矩阵做除法）、Top-K（只在概率最大的K个Token中选）、Top-P（只在累积概率P以内的Token中选）都是在这步做的。",{"type":20,"tag":21,"props":317,"children":318},{},[319],{"type":25,"value":320},"logits 输出前是 LM Head（Linear 层），它将 hidden Linear 的特征数扩大到词表的大小。在此之前是文本经过 Embedding 向量化和 PE（Positional Encode）后进入若干个 Transformer Block 后又过了一遍 RMSNorm。",{"type":20,"tag":21,"props":322,"children":323},{},[324],{"type":25,"value":325},"Transformer Block很简单。就是 Attn 机制加上前馈网络（FFN）罢了。",{"type":20,"tag":327,"props":328,"children":332},"pre",{"className":329,"code":330,"language":331,"meta":8,"style":8},"language-python shiki shiki-themes github-light github-dark","# Input: x\n# Transformer Block\ndef forward(self, x):\n    x = x + Attn(RMSNorm(x))  # 简单的残差\n    x = x + FFN(RMSNorm(x))\n    return x\n","python",[333],{"type":20,"tag":334,"props":335,"children":336},"code",{"__ignoreMap":8},[337,348,356,364,373,382],{"type":20,"tag":338,"props":339,"children":342},"span",{"class":340,"line":341},"line",1,[343],{"type":20,"tag":338,"props":344,"children":345},{},[346],{"type":25,"value":347},"# Input: x\n",{"type":20,"tag":338,"props":349,"children":350},{"class":340,"line":201},[351],{"type":20,"tag":338,"props":352,"children":353},{},[354],{"type":25,"value":355},"# Transformer Block\n",{"type":20,"tag":338,"props":357,"children":358},{"class":340,"line":202},[359],{"type":20,"tag":338,"props":360,"children":361},{},[362],{"type":25,"value":363},"def forward(self, x):\n",{"type":20,"tag":338,"props":365,"children":367},{"class":340,"line":366},4,[368],{"type":20,"tag":338,"props":369,"children":370},{},[371],{"type":25,"value":372},"    x = x + Attn(RMSNorm(x))  # 简单的残差\n",{"type":20,"tag":338,"props":374,"children":376},{"class":340,"line":375},5,[377],{"type":20,"tag":338,"props":378,"children":379},{},[380],{"type":25,"value":381},"    x = x + FFN(RMSNorm(x))\n",{"type":20,"tag":338,"props":383,"children":385},{"class":340,"line":384},6,[386],{"type":20,"tag":338,"props":387,"children":388},{},[389],{"type":25,"value":390},"    return x\n",{"type":20,"tag":21,"props":392,"children":393},{},[394],{"type":25,"value":395},"Attn 机制的话，现在有DSA、MLA等等。不过未来的趋势还是掌管稀疏的神——DeepSeek的新Attention的时代，这成本降的太夸张了。",{"type":20,"tag":21,"props":397,"children":398},{},[399],{"type":25,"value":400},"干了什么？混合注意力（CSA：压缩稀疏注意力， HCA：高度压缩注意力）。不仅仅是上一代注意力的稀疏性，还直接对 Attn 进行压缩。表明了一个潜在的观点，对于长上下文（百万级），即使利用其稀疏性能够将 Attn 的算法复杂度降到 O(L)级。但是面对长上下文存储的 KV Cache还是无能为力。V4 直接对 Attn 进行压缩，减少 KV Cache数量。（Tips: KV Cache可以近似看成 Context 的物理实体）",{"type":20,"tag":327,"props":402,"children":404},{"className":329,"code":403,"language":331,"meta":8,"style":8},"def forward(self, x):\n    # 计算多头注意力 -> xq, xk, xv\n    xq, xk = RMSNorm(xq), RMSNorm(xk) # qk-norm\n    \n    xq, xk = apply_RoPE(xq, xk, cos, sin) # 加入相对位置编码\n    #... 存 KV Cache。  \n    # KV Cache 一般存显存。但是现在有存在SSD上的，比如DeepSeek，使得缓存命中成本惊人的低，是未来降低推理成本的一个方向\n\n    output = F.scaled_dot_product_attention(xq, xk, xk, is_casual=True) # FlashAttention\n    output = output.transpose(1, 2).reshape(bsz, seq_lean, -1)\n\n    return output, past_kv\n",[405],{"type":20,"tag":334,"props":406,"children":407},{"__ignoreMap":8},[408,415,423,431,439,447,455,464,474,483,492,500],{"type":20,"tag":338,"props":409,"children":410},{"class":340,"line":341},[411],{"type":20,"tag":338,"props":412,"children":413},{},[414],{"type":25,"value":363},{"type":20,"tag":338,"props":416,"children":417},{"class":340,"line":201},[418],{"type":20,"tag":338,"props":419,"children":420},{},[421],{"type":25,"value":422},"    # 计算多头注意力 -> xq, xk, xv\n",{"type":20,"tag":338,"props":424,"children":425},{"class":340,"line":202},[426],{"type":20,"tag":338,"props":427,"children":428},{},[429],{"type":25,"value":430},"    xq, xk = RMSNorm(xq), RMSNorm(xk) # qk-norm\n",{"type":20,"tag":338,"props":432,"children":433},{"class":340,"line":366},[434],{"type":20,"tag":338,"props":435,"children":436},{},[437],{"type":25,"value":438},"    \n",{"type":20,"tag":338,"props":440,"children":441},{"class":340,"line":375},[442],{"type":20,"tag":338,"props":443,"children":444},{},[445],{"type":25,"value":446},"    xq, xk = apply_RoPE(xq, xk, cos, sin) # 加入相对位置编码\n",{"type":20,"tag":338,"props":448,"children":449},{"class":340,"line":384},[450],{"type":20,"tag":338,"props":451,"children":452},{},[453],{"type":25,"value":454},"    #... 存 KV Cache。  \n",{"type":20,"tag":338,"props":456,"children":458},{"class":340,"line":457},7,[459],{"type":20,"tag":338,"props":460,"children":461},{},[462],{"type":25,"value":463},"    # KV Cache 一般存显存。但是现在有存在SSD上的，比如DeepSeek，使得缓存命中成本惊人的低，是未来降低推理成本的一个方向\n",{"type":20,"tag":338,"props":465,"children":467},{"class":340,"line":466},8,[468],{"type":20,"tag":338,"props":469,"children":471},{"emptyLinePlaceholder":470},true,[472],{"type":25,"value":473},"\n",{"type":20,"tag":338,"props":475,"children":477},{"class":340,"line":476},9,[478],{"type":20,"tag":338,"props":479,"children":480},{},[481],{"type":25,"value":482},"    output = F.scaled_dot_product_attention(xq, xk, xk, is_casual=True) # FlashAttention\n",{"type":20,"tag":338,"props":484,"children":486},{"class":340,"line":485},10,[487],{"type":20,"tag":338,"props":488,"children":489},{},[490],{"type":25,"value":491},"    output = output.transpose(1, 2).reshape(bsz, seq_lean, -1)\n",{"type":20,"tag":338,"props":493,"children":495},{"class":340,"line":494},11,[496],{"type":20,"tag":338,"props":497,"children":498},{"emptyLinePlaceholder":470},[499],{"type":25,"value":473},{"type":20,"tag":338,"props":501,"children":503},{"class":340,"line":502},12,[504],{"type":20,"tag":338,"props":505,"children":506},{},[507],{"type":25,"value":508},"    return output, past_kv\n",{"type":20,"tag":43,"props":510,"children":512},{"id":511},"optimizer",[513],{"type":25,"value":514},"Optimizer",{"type":20,"tag":21,"props":516,"children":517},{},[518],{"type":25,"value":519},"除了 Embeding 模型和 LM Head Linear层以及其余Linear层、Bias用 AdamW 优化器，其余矩阵用 Muon(dim>=2)。Muon 能够保证矩阵正交性，可以加速收敛，Loss下降更稳定。但是 Muon 较新，一些后端实现的性能不好（比如 PyTorch 2.12 的 mps 后端， 替换 AdamW 之后训练速度变慢了）。",{"type":20,"tag":21,"props":521,"children":522},{},[523],{"type":25,"value":524},"不过使用 Muon 是趋势，相比 AdamW 能够减少一半optim的参数使用，训练也更稳定。",{"type":20,"tag":43,"props":526,"children":528},{"id":527},"mtp-多-token-预测",[529],{"type":25,"value":530},"MTP 多 Token 预测",{"type":20,"tag":21,"props":532,"children":533},{},[534],{"type":25,"value":535},"一次推理输出多个 Token。",{"type":20,"tag":21,"props":537,"children":538},{},[539],{"type":25,"value":540},"如何实现？加上一个 MTP 模块（可以当只有一块注意力块的LLM）：输入是模型预测出的t+1，经过类似的步骤但是Transformer Block只有一块（减少计算量以及显存开销），得到t+2。嵌套调用后可以一次推理得到多个token。和主模型的 logits 一对比后，结果一样的就保留，不一样的就重新预测。因为序列相近，语义大概率类似，因此成功率很高，一般可以实现2-3倍的加速比。",{"type":20,"tag":542,"props":543,"children":544},"style",{},[545],{"type":25,"value":546},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":8,"searchDepth":201,"depth":202,"links":548},[549,550,551,552,553],{"id":266,"depth":201,"text":269},{"id":282,"depth":201,"text":282},{"id":297,"depth":201,"text":300},{"id":511,"depth":201,"text":514},{"id":527,"depth":201,"text":530},"content:posts:introduction-to-large-language-model.md","posts\u002Fintroduction-to-large-language-model.md","posts\u002Fintroduction-to-large-language-model",{"_path":558,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":559,"description":8,"date":560,"categories":12,"tags":561,"draft":7,"body":563,"_type":207,"_id":587,"_source":209,"_file":588,"_stem":589,"_extension":212},"\u002Fposts\u002Fthought-about-coding-agent","关于 Coding Agent 使用的遐思","2026-06-03 17:54:20",[562],"Agent",{"type":17,"children":564,"toc":585},[565,570,575,580],{"type":20,"tag":21,"props":566,"children":567},{},[568],{"type":25,"value":569},"10年代以后，GitHub激起来的开源浪潮改变了软件工业；全球的 contributor 通过 GitHub 贡献代码，为开源社区做出贡献。\n这公开的代码库，自然成为 AI 训练的素材。另外 DeepWiki 之类通过 AI 解释代码，帮助开发者快速理解代码。\n人们使用 AI 编写文档、注释、行内补全，能力越发强大，DeepWiki 这样直接分析整个代码仓库给出文档的软件大大降低了开发者\n了解某一特性实现的成本。",{"type":20,"tag":21,"props":571,"children":572},{},[573],{"type":25,"value":574},"如果想复刻某一特性，完全可以在 DeepWiki 上询问相关实现细节，减少了开发者理解代码的难度，同时大大减短了开发者理解的时间。",{"type":20,"tag":21,"props":576,"children":577},{},[578],{"type":25,"value":579},"在 Research 领域，alphaxiv.com 等产品也对传统的检索、查阅文献的流程进行了挑战。对于这样生产力密集的事情，AI 能够极大提升人的效率。",{"type":20,"tag":21,"props":581,"children":582},{},[583],{"type":25,"value":584},"但是我一直在日常生活中思考，AI能帮我做到些什么吗？我追问过自己很多遍，最终答案是日常生活用 AI 赋能的 RoI 对一个普通人来说并不高，并不是特别值得做的事情（从能够做成的\u002F需要花费的成本来说）。",{"title":8,"searchDepth":201,"depth":202,"links":586},[],"content:posts:thought-about-coding-agent.md","posts\u002Fthought-about-coding-agent.md","posts\u002Fthought-about-coding-agent",{"_path":591,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":592,"description":593,"date":594,"categories":217,"tags":595,"body":597,"_type":207,"_id":1670,"_source":209,"_file":1671,"_stem":1672,"_extension":212},"\u002Fposts\u002Fabout-ssh-usage","关于SSH的使用——客户端篇","介绍SSH客户端的用法。","2025-06-17 02:44:57",[596],"工具",{"type":17,"children":598,"toc":1657},[599,604,617,622,635,795,800,868,914,935,1041,1047,1052,1059,1064,1069,1107,1120,1125,1130,1135,1168,1173,1178,1183,1192,1197,1202,1207,1312,1317,1354,1449,1462,1475,1480,1509,1546,1551,1557,1562,1567,1572,1626,1631,1642,1653],{"type":20,"tag":21,"props":600,"children":601},{},[602],{"type":25,"value":603},"本文正在编写中...",{"type":20,"tag":21,"props":605,"children":606},{},[607,609,615],{"type":25,"value":608},"参见 ",{"type":20,"tag":64,"props":610,"children":612},{"href":611},"#reference",[613],{"type":25,"value":614},"Reference",{"type":25,"value":616}," 部分。",{"type":20,"tag":21,"props":618,"children":619},{},[620],{"type":25,"value":621},"TL;DR",{"type":20,"tag":21,"props":623,"children":624},{},[625,627,633],{"type":25,"value":626},"Secure Shell is a protocol used to securely log onto remote systems.\nIt can be used for logging or executing commands on a remote server.\nMore information: ",{"type":20,"tag":64,"props":628,"children":631},{"href":629,"rel":630},"https:\u002F\u002Fman.openbsd.org\u002Fssh",[68],[632],{"type":25,"value":629},{"type":25,"value":634},".",{"type":20,"tag":636,"props":637,"children":638},"ul",{},[639,656,671,710,721,746,779,790],{"type":20,"tag":640,"props":641,"children":642},"li",{},[643,648,650],{"type":20,"tag":136,"props":644,"children":645},{},[646],{"type":25,"value":647},"Connect to a remote server",{"type":25,"value":649},":\n",{"type":20,"tag":334,"props":651,"children":653},{"className":652},[],[654],{"type":25,"value":655},"ssh username@remote_host",{"type":20,"tag":640,"props":657,"children":658},{},[659,664,665],{"type":20,"tag":136,"props":660,"children":661},{},[662],{"type":25,"value":663},"Connect to a remote server with a specific identity (private key)",{"type":25,"value":649},{"type":20,"tag":334,"props":666,"children":668},{"className":667},[],[669],{"type":25,"value":670},"ssh -i path\u002Fto\u002Fkey_file username@remote_host",{"type":20,"tag":640,"props":672,"children":673},{},[674,687,689,694,696,702,704],{"type":20,"tag":136,"props":675,"children":676},{},[677,679,685],{"type":25,"value":678},"Connect to a remote server with IP ",{"type":20,"tag":334,"props":680,"children":682},{"className":681},[],[683],{"type":25,"value":684},"10.0.0.1",{"type":25,"value":686}," and using a specific [p]ort",{"type":25,"value":688},"(Note: ",{"type":20,"tag":334,"props":690,"children":692},{"className":691},[],[693],{"type":25,"value":684},{"type":25,"value":695}," can be shortened to ",{"type":20,"tag":334,"props":697,"children":699},{"className":698},[],[700],{"type":25,"value":701},"10.1",{"type":25,"value":703},"):\n",{"type":20,"tag":334,"props":705,"children":707},{"className":706},[],[708],{"type":25,"value":709},"ssh username@10.0.0.1 -p 2222",{"type":20,"tag":640,"props":711,"children":712},{},[713,715],{"type":25,"value":714},"Run a command on a remote server with a [t]ty allocation allowing interaction with the remote command:\n",{"type":20,"tag":334,"props":716,"children":718},{"className":717},[],[719],{"type":25,"value":720},"ssh username@remote_host -t command command_arguments",{"type":20,"tag":640,"props":722,"children":723},{},[724,726,731,733,739,740],{"type":25,"value":725},"SSH tunneling: ",{"type":20,"tag":136,"props":727,"children":728},{},[729],{"type":25,"value":730},"[D]ynamic port forwarding",{"type":25,"value":732}," (SOCKS proxy on ",{"type":20,"tag":334,"props":734,"children":736},{"className":735},[],[737],{"type":25,"value":738},"localhost:1080",{"type":25,"value":703},{"type":20,"tag":334,"props":741,"children":743},{"className":742},[],[744],{"type":25,"value":745},"ssh -D 1080 username@remote_host",{"type":20,"tag":640,"props":747,"children":748},{},[749,750,755,757,763,765,771,773],{"type":25,"value":725},{"type":20,"tag":136,"props":751,"children":752},{},[753],{"type":25,"value":754},"Forward a specific port",{"type":25,"value":756}," (",{"type":20,"tag":334,"props":758,"children":760},{"className":759},[],[761],{"type":25,"value":762},"localhost:9999",{"type":25,"value":764}," to ",{"type":20,"tag":334,"props":766,"children":768},{"className":767},[],[769],{"type":25,"value":770},"example.org:80",{"type":25,"value":772},") along with disabling pseudo-[T]ty allocation and executio[N] of remote commands:\n",{"type":20,"tag":334,"props":774,"children":776},{"className":775},[],[777],{"type":25,"value":778},"ssh -L 9999:example.org:80 -N -T username@remote_host",{"type":20,"tag":640,"props":780,"children":781},{},[782,784],{"type":25,"value":783},"SSH [J]umping: Connect through a jumphost to a remote server (Multiple jump hops may be specified separated by comma characters):\n",{"type":20,"tag":334,"props":785,"children":787},{"className":786},[],[788],{"type":25,"value":789},"ssh -J username@jump_host username@remote_host",{"type":20,"tag":640,"props":791,"children":792},{},[793],{"type":25,"value":794},"Close a hanged session:\n\u003CEnter>\u003C~>\u003C.>",{"type":20,"tag":43,"props":796,"children":798},{"id":797},"公钥认证",[799],{"type":25,"value":797},{"type":20,"tag":21,"props":801,"children":802},{},[803,805,811,813,819,821,827,829,835,836,842,844,850,852,858,860,866],{"type":25,"value":804},"默认情况下，SSH 会寻找 ",{"type":20,"tag":334,"props":806,"children":808},{"className":807},[],[809],{"type":25,"value":810},"~\u002F.ssh\u002Fid_*",{"type":25,"value":812}," 作为私钥，其中 ",{"type":20,"tag":334,"props":814,"children":816},{"className":815},[],[817],{"type":25,"value":818},"*",{"type":25,"value":820}," 部分可以是 ",{"type":20,"tag":334,"props":822,"children":824},{"className":823},[],[825],{"type":25,"value":826},"rsa",{"type":25,"value":828},"、",{"type":20,"tag":334,"props":830,"children":832},{"className":831},[],[833],{"type":25,"value":834},"ecdsa",{"type":25,"value":828},{"type":20,"tag":334,"props":837,"children":839},{"className":838},[],[840],{"type":25,"value":841},"ed25519",{"type":25,"value":843}," 等，也可以通过 ",{"type":20,"tag":334,"props":845,"children":847},{"className":846},[],[848],{"type":25,"value":849},"-i",{"type":25,"value":851}," 参数指定私钥文件。私钥的文件名加上 ",{"type":20,"tag":334,"props":853,"children":855},{"className":854},[],[856],{"type":25,"value":857},".pub",{"type":25,"value":859}," 后缀就是公钥文件，暂时没有方法指定公钥文件的路径。如果要在配置文件中指定一个或多个私钥，可以使用 ",{"type":20,"tag":334,"props":861,"children":863},{"className":862},[],[864],{"type":25,"value":865},"IdentityFile",{"type":25,"value":867}," 选项，例如：",{"type":20,"tag":327,"props":869,"children":873},{"className":870,"code":871,"language":872,"meta":8,"style":8},"language-shell shiki shiki-themes github-light github-dark","Host example\n  IdentityFile ~\u002F.ssh\u002Fid_rsa\n  #CertificateFile ~\u002F.ssh\u002Fid_rsa-cert.pub\n","shell",[874],{"type":20,"tag":334,"props":875,"children":876},{"__ignoreMap":8},[877,892,905],{"type":20,"tag":338,"props":878,"children":879},{"class":340,"line":341},[880,886],{"type":20,"tag":338,"props":881,"children":883},{"style":882},"--shiki-default:#6F42C1;--shiki-dark:#B392F0",[884],{"type":25,"value":885},"Host",{"type":20,"tag":338,"props":887,"children":889},{"style":888},"--shiki-default:#032F62;--shiki-dark:#9ECBFF",[890],{"type":25,"value":891}," example\n",{"type":20,"tag":338,"props":893,"children":894},{"class":340,"line":201},[895,900],{"type":20,"tag":338,"props":896,"children":897},{"style":882},[898],{"type":25,"value":899},"  IdentityFile",{"type":20,"tag":338,"props":901,"children":902},{"style":888},[903],{"type":25,"value":904}," ~\u002F.ssh\u002Fid_rsa\n",{"type":20,"tag":338,"props":906,"children":907},{"class":340,"line":202},[908],{"type":20,"tag":338,"props":909,"children":911},{"style":910},"--shiki-default:#6A737D;--shiki-dark:#6A737D",[912],{"type":25,"value":913},"  #CertificateFile ~\u002F.ssh\u002Fid_rsa-cert.pub\n",{"type":20,"tag":21,"props":915,"children":916},{},[917,919,925,927,933],{"type":25,"value":918},"一般来说，除非为了兼容一些非常古老（如 10 年前的）或非常简单的（如嵌入式）系统而不得不使用较短的 RSA 密钥对的时候，我们推荐使用 Ed25519 密钥对，或者 ECDSA 密钥对。这两种基于椭圆曲线的密码学算法比 RSA 更安全，而且性能也更好。如果不得不使用 RSA 的话，请尽可能使用 3072 位或更长的密钥长度。密钥长度可以在使用 ",{"type":20,"tag":334,"props":920,"children":922},{"className":921},[],[923],{"type":25,"value":924},"ssh-keygen",{"type":25,"value":926}," 生成密钥对时指定（",{"type":20,"tag":334,"props":928,"children":930},{"className":929},[],[931],{"type":25,"value":932},"-b",{"type":25,"value":934},"），其中不同算法支持与推荐的长度也是不同的：",{"type":20,"tag":936,"props":937,"children":938},"table",{},[939,969],{"type":20,"tag":940,"props":941,"children":942},"thead",{},[943],{"type":20,"tag":944,"props":945,"children":946},"tr",{},[947,954,959,964],{"type":20,"tag":948,"props":949,"children":951},"th",{"align":950},"center",[952],{"type":25,"value":953},"算法",{"type":20,"tag":948,"props":955,"children":956},{"align":950},[957],{"type":25,"value":958},"支持长度",{"type":20,"tag":948,"props":960,"children":961},{"align":950},[962],{"type":25,"value":963},"推荐长度",{"type":20,"tag":948,"props":965,"children":966},{},[967],{"type":25,"value":968},"说明",{"type":20,"tag":970,"props":971,"children":972},"tbody",{},[973,997,1019],{"type":20,"tag":944,"props":974,"children":975},{},[976,982,987,992],{"type":20,"tag":977,"props":978,"children":979},"td",{"align":950},[980],{"type":25,"value":981},"RSA",{"type":20,"tag":977,"props":983,"children":984},{"align":950},[985],{"type":25,"value":986},"1024-4096",{"type":20,"tag":977,"props":988,"children":989},{"align":950},[990],{"type":25,"value":991},"3072 或以上",{"type":20,"tag":977,"props":993,"children":994},{},[995],{"type":25,"value":996},"曾经的推荐长度是 2048 位，但 2020 年以后认为这个长度已不够安全",{"type":20,"tag":944,"props":998,"children":999},{},[1000,1005,1010,1014],{"type":20,"tag":977,"props":1001,"children":1002},{"align":950},[1003],{"type":25,"value":1004},"ECDSA",{"type":20,"tag":977,"props":1006,"children":1007},{"align":950},[1008],{"type":25,"value":1009},"256 \u002F 384 \u002F 521",{"type":20,"tag":977,"props":1011,"children":1012},{"align":950},[1013],{"type":25,"value":1009},{"type":20,"tag":977,"props":1015,"children":1016},{},[1017],{"type":25,"value":1018},"由于椭圆曲线参数选择的特殊性，只有这三种长度可选。注意最后一个选项是 521，不是 512",{"type":20,"tag":944,"props":1020,"children":1021},{},[1022,1027,1032,1036],{"type":20,"tag":977,"props":1023,"children":1024},{"align":950},[1025],{"type":25,"value":1026},"Ed25519",{"type":20,"tag":977,"props":1028,"children":1029},{"align":950},[1030],{"type":25,"value":1031},"-",{"type":20,"tag":977,"props":1033,"children":1034},{"align":950},[1035],{"type":25,"value":1031},{"type":20,"tag":977,"props":1037,"children":1038},{},[1039],{"type":25,"value":1040},"Ed25519 是基于 Edwards 曲线的算法，没有“长度”这种参数",{"type":20,"tag":43,"props":1042,"children":1044},{"id":1043},"端口转发port-transportings",[1045],{"type":25,"value":1046},"端口转发（Port Transportings）",{"type":20,"tag":21,"props":1048,"children":1049},{},[1050],{"type":25,"value":1051},"SSH 配置 TCP 端口转发的格式为 [bind_address:]port:host:hostport，SSH 支持三种端口转发：",{"type":20,"tag":1053,"props":1054,"children":1056},"h3",{"id":1055},"动态端口转发dynamic-port-forwarding",[1057],{"type":25,"value":1058},"动态端口转发（Dynamic port forwarding）",{"type":20,"tag":21,"props":1060,"children":1061},{},[1062],{"type":25,"value":1063},"在本地监听一个端口用作 SOCKS5 代理。",{"type":20,"tag":21,"props":1065,"children":1066},{},[1067],{"type":25,"value":1068},"例1 SOCKS服务器",{"type":20,"tag":327,"props":1070,"children":1074},{"className":1071,"code":1072,"language":1073,"meta":8,"style":8},"language-bash shiki shiki-themes github-light github-dark","ssh -D 1080 vps -N\n","bash",[1075],{"type":20,"tag":334,"props":1076,"children":1077},{"__ignoreMap":8},[1078],{"type":20,"tag":338,"props":1079,"children":1080},{"class":340,"line":341},[1081,1086,1092,1097,1102],{"type":20,"tag":338,"props":1082,"children":1083},{"style":882},[1084],{"type":25,"value":1085},"ssh",{"type":20,"tag":338,"props":1087,"children":1089},{"style":1088},"--shiki-default:#005CC5;--shiki-dark:#79B8FF",[1090],{"type":25,"value":1091}," -D",{"type":20,"tag":338,"props":1093,"children":1094},{"style":1088},[1095],{"type":25,"value":1096}," 1080",{"type":20,"tag":338,"props":1098,"children":1099},{"style":888},[1100],{"type":25,"value":1101}," vps",{"type":20,"tag":338,"props":1103,"children":1104},{"style":1088},[1105],{"type":25,"value":1106}," -N\n",{"type":20,"tag":21,"props":1108,"children":1109},{},[1110,1112,1118],{"type":25,"value":1111},"此时可将远程主机 vps 作为 SOCKS 服务器使用，比如 ",{"type":20,"tag":334,"props":1113,"children":1115},{"className":1114},[],[1116],{"type":25,"value":1117},"curl -x socks5:\u002F\u002Flocalhost:1080 google.com",{"type":25,"value":1119},"。可以代理绝大多数软件：浏览器，社交媒体，开发工具（如 Git）等。",{"type":20,"tag":21,"props":1121,"children":1122},{},[1123],{"type":25,"value":1124},"另外，对于大学生来说，SSH 动态端口转发结合 OpenVPN 使用可以突破学校上网设备限制。",{"type":20,"tag":1053,"props":1126,"children":1128},{"id":1127},"本地端口转发",[1129],{"type":25,"value":1127},{"type":20,"tag":21,"props":1131,"children":1132},{},[1133],{"type":25,"value":1134},"也叫 Single port forward TCP tunnels。",{"type":20,"tag":327,"props":1136,"children":1138},{"className":1071,"code":1137,"language":1073,"meta":8,"style":8},"ssh -L 0.0.0.0:8000:localhost:8000 host -N\n",[1139],{"type":20,"tag":334,"props":1140,"children":1141},{"__ignoreMap":8},[1142],{"type":20,"tag":338,"props":1143,"children":1144},{"class":340,"line":341},[1145,1149,1154,1159,1164],{"type":20,"tag":338,"props":1146,"children":1147},{"style":882},[1148],{"type":25,"value":1085},{"type":20,"tag":338,"props":1150,"children":1151},{"style":1088},[1152],{"type":25,"value":1153}," -L",{"type":20,"tag":338,"props":1155,"children":1156},{"style":888},[1157],{"type":25,"value":1158}," 0.0.0.0:8000:localhost:8000",{"type":20,"tag":338,"props":1160,"children":1161},{"style":888},[1162],{"type":25,"value":1163}," host",{"type":20,"tag":338,"props":1165,"children":1166},{"style":1088},[1167],{"type":25,"value":1106},{"type":20,"tag":1053,"props":1169,"children":1171},{"id":1170},"远程端口转发",[1172],{"type":25,"value":1170},{"type":20,"tag":21,"props":1174,"children":1175},{},[1176],{"type":25,"value":1177},"也叫 Reverse TCP Tunnels。",{"type":20,"tag":21,"props":1179,"children":1180},{},[1181],{"type":25,"value":1182},"本地端口转发和远程端口转发的工作模式可以结合由 Ivan Velichko 绘制的图片来理解：",{"type":20,"tag":21,"props":1184,"children":1185},{},[1186],{"type":20,"tag":1187,"props":1188,"children":1191},"img",{"alt":1189,"src":1190},"ssh-tunnels","https:\u002F\u002F201.ustclug.org\u002Fimages\u002Fiximiuz-ssh-tunnels-2000-opt.png",[],{"type":20,"tag":21,"props":1193,"children":1194},{},[1195],{"type":25,"value":1196},"结合端口转发与代理的例子",{"type":20,"tag":21,"props":1198,"children":1199},{},[1200],{"type":25,"value":1201},"让服务器使用本机的SSH密钥和网络环境。",{"type":20,"tag":21,"props":1203,"children":1204},{},[1205],{"type":25,"value":1206},"一行命令。",{"type":20,"tag":327,"props":1208,"children":1210},{"className":870,"code":1209,"language":872,"meta":8,"style":8},"ssh -A -D 1134 localhost -t ssh -A -R 1220:localhost:1134 [user]@remote_server -t http_proxy=socks5h:\u002F\u002F127.0.0.1:1220 https_proxy=socks5h:\u002F\u002F127.0.0.1:1220 all_proxy=socks5h:\u002F\u002F127.0.0.1:1220 bash\n",[1211],{"type":20,"tag":334,"props":1212,"children":1213},{"__ignoreMap":8},[1214],{"type":20,"tag":338,"props":1215,"children":1216},{"class":340,"line":341},[1217,1221,1226,1230,1235,1240,1245,1250,1254,1259,1264,1270,1276,1281,1286,1290,1294,1299,1303,1307],{"type":20,"tag":338,"props":1218,"children":1219},{"style":882},[1220],{"type":25,"value":1085},{"type":20,"tag":338,"props":1222,"children":1223},{"style":1088},[1224],{"type":25,"value":1225}," -A",{"type":20,"tag":338,"props":1227,"children":1228},{"style":1088},[1229],{"type":25,"value":1091},{"type":20,"tag":338,"props":1231,"children":1232},{"style":1088},[1233],{"type":25,"value":1234}," 1134",{"type":20,"tag":338,"props":1236,"children":1237},{"style":888},[1238],{"type":25,"value":1239}," localhost",{"type":20,"tag":338,"props":1241,"children":1242},{"style":1088},[1243],{"type":25,"value":1244}," -t",{"type":20,"tag":338,"props":1246,"children":1247},{"style":888},[1248],{"type":25,"value":1249}," ssh",{"type":20,"tag":338,"props":1251,"children":1252},{"style":1088},[1253],{"type":25,"value":1225},{"type":20,"tag":338,"props":1255,"children":1256},{"style":1088},[1257],{"type":25,"value":1258}," -R",{"type":20,"tag":338,"props":1260,"children":1261},{"style":888},[1262],{"type":25,"value":1263}," 1220:localhost:1134",{"type":20,"tag":338,"props":1265,"children":1267},{"style":1266},"--shiki-default:#24292E;--shiki-dark:#E1E4E8",[1268],{"type":25,"value":1269}," [user]@remote_server -t http_proxy",{"type":20,"tag":338,"props":1271,"children":1273},{"style":1272},"--shiki-default:#D73A49;--shiki-dark:#F97583",[1274],{"type":25,"value":1275},"=",{"type":20,"tag":338,"props":1277,"children":1278},{"style":888},[1279],{"type":25,"value":1280},"socks5h:\u002F\u002F127.0.0.1:1220",{"type":20,"tag":338,"props":1282,"children":1283},{"style":1266},[1284],{"type":25,"value":1285}," https_proxy",{"type":20,"tag":338,"props":1287,"children":1288},{"style":1272},[1289],{"type":25,"value":1275},{"type":20,"tag":338,"props":1291,"children":1292},{"style":888},[1293],{"type":25,"value":1280},{"type":20,"tag":338,"props":1295,"children":1296},{"style":1266},[1297],{"type":25,"value":1298}," all_proxy",{"type":20,"tag":338,"props":1300,"children":1301},{"style":1272},[1302],{"type":25,"value":1275},{"type":20,"tag":338,"props":1304,"children":1305},{"style":888},[1306],{"type":25,"value":1280},{"type":20,"tag":338,"props":1308,"children":1309},{"style":882},[1310],{"type":25,"value":1311}," bash\n",{"type":20,"tag":21,"props":1313,"children":1314},{},[1315],{"type":25,"value":1316},"这里使用了嵌套式的 SSH 命令连接远程主机。首先在本地使用动态端口转发启动一个 SOCKS 服务器，然后通过远程端口转发把本地 SOCKS 服务器端口转发到远程服务器，并且直接设置好代理的环境变量，这里设置了 SOCKS5H 协议，让远程服务器也使用本机的 DNS 解析。这样实现了让远程服务器使用本地的 SSH 密钥和网络环境的功能。",{"type":20,"tag":21,"props":1318,"children":1319},{},[1320,1322,1328,1330,1336,1338,1344,1346,1352],{"type":25,"value":1321},"其中 ",{"type":20,"tag":334,"props":1323,"children":1325},{"className":1324},[],[1326],{"type":25,"value":1327},"-A",{"type":25,"value":1329}," 开启 SSH Agent 转发，用于转发添加到 SSH Agent 的密钥到远程服务器，",{"type":20,"tag":334,"props":1331,"children":1333},{"className":1332},[],[1334],{"type":25,"value":1335},"-D 1134 localhost",{"type":25,"value":1337}," 在本地开启一个端口在 ",{"type":20,"tag":334,"props":1339,"children":1341},{"className":1340},[],[1342],{"type":25,"value":1343},"1134",{"type":25,"value":1345}," 的服务器，",{"type":20,"tag":334,"props":1347,"children":1349},{"className":1348},[],[1350],{"type":25,"value":1351},"-t",{"type":25,"value":1353}," 强制 tty 分配，用于命令执行。",{"type":20,"tag":327,"props":1355,"children":1357},{"className":870,"code":1356,"language":872,"meta":8,"style":8},"ssh -A -D 1134 localhost -t ssh -A -R 1220:localhost:1134 [user]@remote-server\nexport http_proxy=socks5h:\u002F\u002F127.0.0.1:1220 https_proxy=socks5h:\u002F\u002F127.0.0.1:1220 all_proxy=socks5h:\u002F\u002F127.0.0.1:1220\n",[1358],{"type":20,"tag":334,"props":1359,"children":1360},{"__ignoreMap":8},[1361,1409],{"type":20,"tag":338,"props":1362,"children":1363},{"class":340,"line":341},[1364,1368,1372,1376,1380,1384,1388,1392,1396,1400,1404],{"type":20,"tag":338,"props":1365,"children":1366},{"style":882},[1367],{"type":25,"value":1085},{"type":20,"tag":338,"props":1369,"children":1370},{"style":1088},[1371],{"type":25,"value":1225},{"type":20,"tag":338,"props":1373,"children":1374},{"style":1088},[1375],{"type":25,"value":1091},{"type":20,"tag":338,"props":1377,"children":1378},{"style":1088},[1379],{"type":25,"value":1234},{"type":20,"tag":338,"props":1381,"children":1382},{"style":888},[1383],{"type":25,"value":1239},{"type":20,"tag":338,"props":1385,"children":1386},{"style":1088},[1387],{"type":25,"value":1244},{"type":20,"tag":338,"props":1389,"children":1390},{"style":888},[1391],{"type":25,"value":1249},{"type":20,"tag":338,"props":1393,"children":1394},{"style":1088},[1395],{"type":25,"value":1225},{"type":20,"tag":338,"props":1397,"children":1398},{"style":1088},[1399],{"type":25,"value":1258},{"type":20,"tag":338,"props":1401,"children":1402},{"style":888},[1403],{"type":25,"value":1263},{"type":20,"tag":338,"props":1405,"children":1406},{"style":1266},[1407],{"type":25,"value":1408}," [user]@remote-server\n",{"type":20,"tag":338,"props":1410,"children":1411},{"class":340,"line":201},[1412,1417,1422,1426,1431,1435,1440,1444],{"type":20,"tag":338,"props":1413,"children":1414},{"style":1272},[1415],{"type":25,"value":1416},"export",{"type":20,"tag":338,"props":1418,"children":1419},{"style":1266},[1420],{"type":25,"value":1421}," http_proxy",{"type":20,"tag":338,"props":1423,"children":1424},{"style":1272},[1425],{"type":25,"value":1275},{"type":20,"tag":338,"props":1427,"children":1428},{"style":1266},[1429],{"type":25,"value":1430},"socks5h:\u002F\u002F127.0.0.1:1220 https_proxy",{"type":20,"tag":338,"props":1432,"children":1433},{"style":1272},[1434],{"type":25,"value":1275},{"type":20,"tag":338,"props":1436,"children":1437},{"style":1266},[1438],{"type":25,"value":1439},"socks5h:\u002F\u002F127.0.0.1:1220 all_proxy",{"type":20,"tag":338,"props":1441,"children":1442},{"style":1272},[1443],{"type":25,"value":1275},{"type":20,"tag":338,"props":1445,"children":1446},{"style":1266},[1447],{"type":25,"value":1448},"socks5h:\u002F\u002F127.0.0.1:1220\n",{"type":20,"tag":21,"props":1450,"children":1451},{},[1452,1454,1460],{"type":25,"value":1453},"可以使用 ",{"type":20,"tag":334,"props":1455,"children":1457},{"className":1456},[],[1458],{"type":25,"value":1459},"ssh -v \u003CURL>",{"type":25,"value":1461},"，查看日志来观察是否远程服务器使用了本机的密钥。",{"type":20,"tag":21,"props":1463,"children":1464},{},[1465,1467,1473],{"type":25,"value":1466},"使用 ",{"type":20,"tag":334,"props":1468,"children":1470},{"className":1469},[],[1471],{"type":25,"value":1472},"curl -4 ip.sb",{"type":25,"value":1474},"，查看远程服务器是否使用了本机作为代理，若成功你应该看到的是本机的IPv4。",{"type":20,"tag":43,"props":1476,"children":1478},{"id":1477},"跳板",[1479],{"type":25,"value":1477},{"type":20,"tag":327,"props":1481,"children":1483},{"className":1071,"code":1482,"language":1073,"meta":8,"style":8},"ssh -J jumpuser1@jumphost1,jumpuser2@jumphost2,...,jumpuserN@jumphostN user@host\n",[1484],{"type":20,"tag":334,"props":1485,"children":1486},{"__ignoreMap":8},[1487],{"type":20,"tag":338,"props":1488,"children":1489},{"class":340,"line":341},[1490,1494,1499,1504],{"type":20,"tag":338,"props":1491,"children":1492},{"style":882},[1493],{"type":25,"value":1085},{"type":20,"tag":338,"props":1495,"children":1496},{"style":1088},[1497],{"type":25,"value":1498}," -J",{"type":20,"tag":338,"props":1500,"children":1501},{"style":888},[1502],{"type":25,"value":1503}," jumpuser1@jumphost1,jumpuser2@jumphost2,...,jumpuserN@jumphostN",{"type":20,"tag":338,"props":1505,"children":1506},{"style":888},[1507],{"type":25,"value":1508}," user@host\n",{"type":20,"tag":21,"props":1510,"children":1511},{},[1512,1514,1520,1522,1528,1530,1536,1538,1544],{"type":25,"value":1513},"登陆到 ",{"type":20,"tag":334,"props":1515,"children":1517},{"className":1516},[],[1518],{"type":25,"value":1519},"—J",{"type":25,"value":1521}," 指定的 ",{"type":20,"tag":334,"props":1523,"children":1525},{"className":1524},[],[1526],{"type":25,"value":1527},"jumpuser1@jumphost1",{"type":25,"value":1529},"，再从 ",{"type":20,"tag":334,"props":1531,"children":1533},{"className":1532},[],[1534],{"type":25,"value":1535},"jumphost1",{"type":25,"value":1537}," 登陆到 ",{"type":20,"tag":334,"props":1539,"children":1541},{"className":1540},[],[1542],{"type":25,"value":1543},"jumpuser2@jumphost2",{"type":25,"value":1545},"，以此类推来登陆到目标远程主机。在网络环境直接与目标主机隔离的时候有用，比如可以将 AWS 海外服务器作为跳板登陆其他海外的服务器。",{"type":20,"tag":43,"props":1547,"children":1549},{"id":1548},"连接复用",[1550],{"type":25,"value":1548},{"type":20,"tag":43,"props":1552,"children":1554},{"id":1553},"x11转发",[1555],{"type":25,"value":1556},"X11转发",{"type":20,"tag":43,"props":1558,"children":1560},{"id":1559},"配置文件",[1561],{"type":25,"value":1559},{"type":20,"tag":21,"props":1563,"children":1564},{},[1565],{"type":25,"value":1566},"SSH可以在配置文件中使用任意的命令行参数。",{"type":20,"tag":43,"props":1568,"children":1570},{"id":1569},"reference",[1571],{"type":25,"value":614},{"type":20,"tag":1573,"props":1574,"children":1575},"ol",{},[1576,1586,1596,1606,1616],{"type":20,"tag":640,"props":1577,"children":1578},{},[1579],{"type":20,"tag":64,"props":1580,"children":1583},{"href":1581,"rel":1582},"https:\u002F\u002Ftldr.inbrowser.app\u002Fpages\u002Fcommon\u002Fssh",[68],[1584],{"type":25,"value":1585},"ssh - tldr pages",{"type":20,"tag":640,"props":1587,"children":1588},{},[1589],{"type":20,"tag":64,"props":1590,"children":1593},{"href":1591,"rel":1592},"https:\u002F\u002Fwww.ruanyifeng.com\u002Fblog\u002F2011\u002F12\u002Fssh_port_forwarding.html",[68],[1594],{"type":25,"value":1595},"SSH 原理与运用（二）：远程操作与端口转发",{"type":20,"tag":640,"props":1597,"children":1598},{},[1599],{"type":20,"tag":64,"props":1600,"children":1603},{"href":1601,"rel":1602},"https:\u002F\u002F201.ustclug.org\u002Fdev\u002Fssh\u002F",[68],[1604],{"type":25,"value":1605},"SSH 使用技巧 - Linux 201 by USTC LUG",{"type":20,"tag":640,"props":1607,"children":1608},{},[1609],{"type":20,"tag":64,"props":1610,"children":1613},{"href":1611,"rel":1612},"https:\u002F\u002Fsuperuser.com\u002Fquestions\u002F96489\u002Fan-ssh-tunnel-via-multiple-hops",[68],[1614],{"type":25,"value":1615},"An SSH tunnel via multiple hops - superuser.com",{"type":20,"tag":640,"props":1617,"children":1618},{},[1619],{"type":20,"tag":64,"props":1620,"children":1623},{"href":1621,"rel":1622},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fauthentication\u002Fconnecting-to-github-with-ssh\u002Fusing-ssh-agent-forwarding",[68],[1624],{"type":25,"value":1625},"Using SSH agent forwarding - GitHub Docs",{"type":20,"tag":21,"props":1627,"children":1628},{},[1629],{"type":25,"value":1630},"还在看的资料",{"type":20,"tag":21,"props":1632,"children":1633},{},[1634,1640],{"type":20,"tag":64,"props":1635,"children":1638},{"href":1636,"rel":1637},"https:\u002F\u002Fwww.baeldung.com\u002Flinux\u002Fssh-tunneling-and-proxying",[68],[1639],{"type":25,"value":1636},{"type":25,"value":1641}," 讲了更多关于 SSH Tunnel 和代理的。",{"type":20,"tag":21,"props":1643,"children":1644},{},[1645,1651],{"type":20,"tag":64,"props":1646,"children":1649},{"href":1647,"rel":1648},"https:\u002F\u002Fplantegg.github.io\u002F2019\u002F06\u002F02\u002F%E5%8F%B2%E4%B8%8A%E6%9C%80%E5%85%A8_SSH_%E6%9A%97%E9%BB%91%E6%8A%80%E5%B7%A7%E8%AF%A6%E8%A7%A3--%E6%94%B6%E8%97%8F%E4%BF%9D%E5%B9%B3%E5%AE%89\u002F",[68],[1650],{"type":25,"value":1647},{"type":25,"value":1652}," 讲了很多琐碎的东西，但似乎看起来写的不好，太过冗杂了，解释的也不清楚。",{"type":20,"tag":542,"props":1654,"children":1655},{},[1656],{"type":25,"value":546},{"title":8,"searchDepth":201,"depth":202,"links":1658},[1659,1660,1665,1666,1667,1668,1669],{"id":797,"depth":201,"text":797},{"id":1043,"depth":201,"text":1046,"children":1661},[1662,1663,1664],{"id":1055,"depth":202,"text":1058},{"id":1127,"depth":202,"text":1127},{"id":1170,"depth":202,"text":1170},{"id":1477,"depth":201,"text":1477},{"id":1548,"depth":201,"text":1548},{"id":1553,"depth":201,"text":1556},{"id":1559,"depth":201,"text":1559},{"id":1569,"depth":201,"text":614},"content:posts:about-ssh-usage.md","posts\u002Fabout-ssh-usage.md","posts\u002Fabout-ssh-usage",{"_path":1674,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":1675,"description":1676,"date":1677,"categories":217,"tags":1678,"body":1680,"_type":207,"_id":1971,"_source":209,"_file":1972,"_stem":1973,"_extension":212},"\u002Fposts\u002Fopensourcesoftwarestarttutorial","如何开始一个开源项目？","浅谈我对开源项目的认知。","2025-04-17 18:00:00",[1679],"开源",{"type":17,"children":1681,"toc":1953},[1682,1687,1692,1697,1702,1765,1770,1775,1798,1803,1808,1813,1819,1824,1830,1842,1848,1853,1859,1864,1870,1875,1880,1889,1894,1900,1943,1948],{"type":20,"tag":21,"props":1683,"children":1684},{},[1685],{"type":25,"value":1686},"接触开源零零散散也快有三年了，虽然听上去时间很长，但是我实际参与的开源项目寥寥无几，只是描述我的见闻而已。",{"type":20,"tag":21,"props":1688,"children":1689},{},[1690],{"type":25,"value":1691},"最基础的就是些开源相关的常识，比如开源协议，开源使用的工具等等，如果有意学习我相信大多数人很快就能掌握。我也就大致列了一些在下面。当然，最快速的方法是寻找一些新兴的正在开发的开源项目，观察其规范、行为乃至参与其中，这样的学习效率是最高的。",{"type":20,"tag":43,"props":1693,"children":1695},{"id":1694},"开源协议",[1696],{"type":25,"value":1694},{"type":20,"tag":1053,"props":1698,"children":1700},{"id":1699},"常见的开源协议",[1701],{"type":25,"value":1699},{"type":20,"tag":636,"props":1703,"children":1704},{},[1705,1715,1725,1735,1745,1755],{"type":20,"tag":640,"props":1706,"children":1707},{},[1708,1713],{"type":20,"tag":136,"props":1709,"children":1710},{},[1711],{"type":25,"value":1712},"MIT License",{"type":25,"value":1714},"：这是一个非常宽松的协议，允许任何人几乎无限制地使用、复制、修改和分发代码。",{"type":20,"tag":640,"props":1716,"children":1717},{},[1718,1723],{"type":20,"tag":136,"props":1719,"children":1720},{},[1721],{"type":25,"value":1722},"Apache License 2.0",{"type":25,"value":1724},"：与MIT类似，但它增加了专利授权条款，并要求保留原始版权声明。",{"type":20,"tag":640,"props":1726,"children":1727},{},[1728,1733],{"type":20,"tag":136,"props":1729,"children":1730},{},[1731],{"type":25,"value":1732},"GPL（GNU General Public License）",{"type":25,"value":1734},"：强制衍生作品必须以相同的许可证发布，确保开源精神得以延续。",{"type":20,"tag":640,"props":1736,"children":1737},{},[1738,1743],{"type":20,"tag":136,"props":1739,"children":1740},{},[1741],{"type":25,"value":1742},"LGPL（GNU Lesser General Public License）",{"type":25,"value":1744},"：适用于库，它允许专有软件链接到该库而不需要开放其源码。",{"type":20,"tag":640,"props":1746,"children":1747},{},[1748,1753],{"type":20,"tag":136,"props":1749,"children":1750},{},[1751],{"type":25,"value":1752},"BSD Licenses",{"type":25,"value":1754},"：提供了两种版本，新BSD协议包含了禁止使用贡献者名字进行推广的条款。",{"type":20,"tag":640,"props":1756,"children":1757},{},[1758,1763],{"type":20,"tag":136,"props":1759,"children":1760},{},[1761],{"type":25,"value":1762},"AGPLv3（GNU Affero General Public License version 3）",{"type":25,"value":1764},":扩展了GPLv3（GNU General Public License version 3）的条款，特别针对通过网络提供服务的应用程序。",{"type":20,"tag":43,"props":1766,"children":1768},{"id":1767},"开源的平台",[1769],{"type":25,"value":1767},{"type":20,"tag":1053,"props":1771,"children":1773},{"id":1772},"常用的开源平台",[1774],{"type":25,"value":1772},{"type":20,"tag":636,"props":1776,"children":1777},{},[1778,1788],{"type":20,"tag":640,"props":1779,"children":1780},{},[1781,1786],{"type":20,"tag":136,"props":1782,"children":1783},{},[1784],{"type":25,"value":1785},"GitHub",{"type":25,"value":1787},"：最流行的代码托管平台之一，支持Git版本控制。",{"type":20,"tag":640,"props":1789,"children":1790},{},[1791,1796],{"type":20,"tag":136,"props":1792,"children":1793},{},[1794],{"type":25,"value":1795},"GitLab",{"type":25,"value":1797},"：提供更多的CI\u002FCD集成选项，并且可以自托管。",{"type":20,"tag":43,"props":1799,"children":1801},{"id":1800},"开源使用的工具",[1802],{"type":25,"value":1800},{"type":20,"tag":1053,"props":1804,"children":1806},{"id":1805},"版本控制",[1807],{"type":25,"value":1805},{"type":20,"tag":21,"props":1809,"children":1810},{},[1811],{"type":25,"value":1812},"使用Git进行版本控制, 跟踪代码更改历史, 多人合作.",{"type":20,"tag":1053,"props":1814,"children":1816},{"id":1815},"git-hook",[1817],{"type":25,"value":1818},"Git Hook",{"type":20,"tag":21,"props":1820,"children":1821},{},[1822],{"type":25,"value":1823},"Hook 脚本可以在特定时间发生时自动运行, 顾名思义 Hook(钩子)就是在某事发生必然发生的事, 用途比如提交前检查代码风格或者提交后部署代码.",{"type":20,"tag":1053,"props":1825,"children":1827},{"id":1826},"git-ignore",[1828],{"type":25,"value":1829},"Git Ignore",{"type":20,"tag":21,"props":1831,"children":1832},{},[1833,1834,1840],{"type":25,"value":1466},{"type":20,"tag":334,"props":1835,"children":1837},{"className":1836},[],[1838],{"type":25,"value":1839},".gitignore",{"type":25,"value":1841}," 文件列出不应被 Git 追踪的文件, 例如编译产物或IDE配置文件.",{"type":20,"tag":1053,"props":1843,"children":1845},{"id":1844},"issue-模板",[1846],{"type":25,"value":1847},"Issue 模板",{"type":20,"tag":21,"props":1849,"children":1850},{},[1851],{"type":25,"value":1852},"创建 issue 模版可以帮助开源社区贡献者清晰描述问题, 包括复现步骤和期望行为. 规范的 issue 不仅可以帮助提问者快速的解决问题, 节省维护者了解问题的精力, 还节省了后续查询相关 issues 的用户的时间. 遇到过不少不规范 issue 的项目, 去查 issue 查个半天会发现一些提问者描述的既不清晰, 而且在没有给出解决方案(不管可行不可行)的情况下就把 issue 关闭了.",{"type":20,"tag":1053,"props":1854,"children":1856},{"id":1855},"pull-request模板",[1857],{"type":25,"value":1858},"Pull Request模板",{"type":20,"tag":21,"props":1860,"children":1861},{},[1862],{"type":25,"value":1863},"PR模板有助于确保所有必要的信息都被包含在内，如变更描述、测试结果等。可以方便审查代码.",{"type":20,"tag":1053,"props":1865,"children":1867},{"id":1866},"cicd",[1868],{"type":25,"value":1869},"CI\u002FCD",{"type":20,"tag":21,"props":1871,"children":1872},{},[1873],{"type":25,"value":1874},"持续集成和持续部署工具，如GitHub Actions、GitLab CI、Jenkins等，可以自动化测试和部署流程。比如自动编译 Release, 自动部署, 自动打包 Docker 镜像等等.",{"type":20,"tag":43,"props":1876,"children":1878},{"id":1877},"宣传",[1879],{"type":25,"value":1877},{"type":20,"tag":1881,"props":1882,"children":1883},"blockquote",{},[1884],{"type":20,"tag":21,"props":1885,"children":1886},{},[1887],{"type":25,"value":1888},"东亚文化是一种集体主义，社会鼓吹的是踏实、谦虚、低调，不要突出自己。所以很多人喜欢在集体中默默无闻的奉献，这是最经典的一种驯化。长期演变下来，你会发现，身边很多人是不擅长或者说不屑于展示自我的，因为我们的文化里常常将\"Selling yourself\"等同于一种负面的道德品格。\n当你做完一件事情其实还不够，你得\"Show your work\"，把它\"贩卖\"出去。",{"type":20,"tag":21,"props":1890,"children":1891},{},[1892],{"type":25,"value":1893},"我亲眼目睹了一个开源项目在宣传前后star数的井喷，在那个项目的开发者还没有下场宣传的时候，它不到一千的star，但是在宣传之后，那个项目的star在短短两天之内就到了五千star。\"酒香也怕巷子深\"，因此好的宣传也是做好一个开源项目必要的。",{"type":20,"tag":43,"props":1895,"children":1897},{"id":1896},"开源软件如何进行宣传",[1898],{"type":25,"value":1899},"开源软件如何进行宣传？",{"type":20,"tag":636,"props":1901,"children":1902},{},[1903,1913,1923,1933],{"type":20,"tag":640,"props":1904,"children":1905},{},[1906,1911],{"type":20,"tag":136,"props":1907,"children":1908},{},[1909],{"type":25,"value":1910},"社交媒体",{"type":25,"value":1912},"：国内利用Bilibili、知乎、小红书, 国外利用Twitter、LinkedIn等社交网络分享项目进展。",{"type":20,"tag":640,"props":1914,"children":1915},{},[1916,1921],{"type":20,"tag":136,"props":1917,"children":1918},{},[1919],{"type":25,"value":1920},"技术博客",{"type":25,"value":1922},"：撰写关于项目的博客文章，解释其用途和技术细节。",{"type":20,"tag":640,"props":1924,"children":1925},{},[1926,1931],{"type":20,"tag":136,"props":1927,"children":1928},{},[1929],{"type":25,"value":1930},"SEO优化",{"type":25,"value":1932},"：确保项目页面针对搜索引擎进行了优化，以便更容易被发现。",{"type":20,"tag":640,"props":1934,"children":1935},{},[1936,1941],{"type":20,"tag":136,"props":1937,"children":1938},{},[1939],{"type":25,"value":1940},"多交朋友",{"type":25,"value":1942},"：与其他相关的开源项目或公司建立合作关系扩大影响力。",{"type":20,"tag":21,"props":1944,"children":1945},{},[1946],{"type":25,"value":1947},"当然开源项目是经过众人不断用实践检验的。清晰的文档，用户友好的指引，会有助于新人的到来。规范的代码实践和沟通机制，会使得贡献者和维护者更有效的发展项目（对于正在不断开发的项目）。",{"type":20,"tag":21,"props":1949,"children":1950},{},[1951],{"type":25,"value":1952},"按照国内的环境，对于个人来说，开源是一项要求极高，且和做慈善没有区别的事。这种情况估计还会持续下去。",{"title":8,"searchDepth":201,"depth":202,"links":1954},[1955,1958,1961,1969,1970],{"id":1694,"depth":201,"text":1694,"children":1956},[1957],{"id":1699,"depth":202,"text":1699},{"id":1767,"depth":201,"text":1767,"children":1959},[1960],{"id":1772,"depth":202,"text":1772},{"id":1800,"depth":201,"text":1800,"children":1962},[1963,1964,1965,1966,1967,1968],{"id":1805,"depth":202,"text":1805},{"id":1815,"depth":202,"text":1818},{"id":1826,"depth":202,"text":1829},{"id":1844,"depth":202,"text":1847},{"id":1855,"depth":202,"text":1858},{"id":1866,"depth":202,"text":1869},{"id":1877,"depth":201,"text":1877},{"id":1896,"depth":201,"text":1899},"content:posts:OpenSourceSoftwareStartTutorial.md","posts\u002FOpenSourceSoftwareStartTutorial.md","posts\u002FOpenSourceSoftwareStartTutorial",{"_path":1975,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":1976,"description":1977,"date":1978,"categories":12,"tags":1979,"body":1981,"_type":207,"_id":2022,"_source":209,"_file":2023,"_stem":2024,"_extension":212},"\u002Fposts\u002Fmotivation","渴求动力","有意识的生活并主动地行动会使得生活更美好。","2025-03-05 00:44:57",[1980],"随笔",{"type":17,"children":1982,"toc":2020},[1983,1988,1993,1998,2010,2015],{"type":20,"tag":21,"props":1984,"children":1985},{},[1986],{"type":25,"value":1987},"今天下午阴天，考完智能控制，和朋友去山明三楼吃面。朋友时不时会问出奇怪的问题，他说：如果我回到大二刚开始的时候，会选择先和他们宿舍的谁先接触，再从这个点扩散到整个面，去联系上其他人。我按下心头对问题来源的疑惑，回应道：不知道。心中苦涩居多，或是某种不明的感受，我说不出来，但是总是不愿意那么回忆和假设的。“我是不会主动去认识人的， 大二。”，我拒绝了这个问题的回答。另外把先前按耐住的疑惑问了出来，为什么你会突然问这个。",{"type":20,"tag":21,"props":1989,"children":1990},{},[1991],{"type":25,"value":1992},"他回答，因为经常有人来他宿舍找他，但却不是找他，而是找其他人，只是找其他人之前会去和他打招呼聊两句天说两句傻逼话而已。他觉得自己成了“公交车”。我没回应。说起了我大二的事情。",{"type":20,"tag":21,"props":1994,"children":1995},{},[1996],{"type":25,"value":1997},"简短地说，就是大一大部分社交的场所，被突然破坏了（以我当时认知的判断）。我事后回忆下来，感觉就像一个人逃离灾难，我逃离了我大一耕耘的地方。我被远离了，不，我觉得我被远离了，我害怕了，于是我先主动远离了。是的，来到大二的我失去了很多。",{"type":20,"tag":21,"props":1999,"children":2000},{},[2001,2003,2008],{"type":25,"value":2002},"我在这种失去中怅然，并没有去寻找新的方向和维护好自己要做的事情。",{"type":20,"tag":136,"props":2004,"children":2005},{},[2006],{"type":25,"value":2007},"我对自己的生活并没有主动性",{"type":25,"value":2009},"，我只是等待着不可避免的那日到来，在眼前不可避免地看到了到来后，我才会慢悠悠地反应过来，好像睡了个觉，才来对付那来临的一切。但这我是被我预见到的，连我自己也是被我预见到了的。",{"type":20,"tag":21,"props":2011,"children":2012},{},[2013],{"type":25,"value":2014},"或是这种主动性缺失，致使我这几年自我效能感不高，垂头丧气。一边是自己拿刀子捅自己，逼迫自己前进；另一边是躺在地上，等着外界给自己捅刀子的时候吓的逃跑。毫无疑问，我在这种断续地无意识状态选择了后者，我逃避了有意识的思考与解决方案。而是选择将权力交给他者。我死不足惜。",{"type":20,"tag":21,"props":2016,"children":2017},{},[2018],{"type":25,"value":2019},"这种深沉的自我惩罚，也是我与外界对立和恐惧的一种表现。我不期待哪天我突然有改变，只是想把今日的我写下，或许某日的我翻看后又会尴尬的不行呢？",{"title":8,"searchDepth":201,"depth":202,"links":2021},[],"content:posts:Motivation.md","posts\u002FMotivation.md","posts\u002FMotivation",{"_path":2026,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":2027,"description":2028,"date":2029,"categories":12,"tags":2030,"body":2031,"_type":207,"_id":2086,"_source":209,"_file":2087,"_stem":2088,"_extension":212},"\u002Fposts\u002F2024summary","2024年终总结","啊，痛彻的时光；啊，悲怆的人！","2025-01-01 01:00:00",[1980],{"type":17,"children":2032,"toc":2084},[2033,2041,2046],{"type":20,"tag":1881,"props":2034,"children":2035},{},[2036],{"type":20,"tag":21,"props":2037,"children":2038},{},[2039],{"type":25,"value":2040},"我最后还是写了年终总结，即使数字已经转到了下一年。",{"type":20,"tag":21,"props":2042,"children":2043},{},[2044],{"type":25,"value":2045},"年终总结：",{"type":20,"tag":1573,"props":2047,"children":2048},{},[2049,2054,2059,2064,2069,2074,2079],{"type":20,"tag":640,"props":2050,"children":2051},{},[2052],{"type":25,"value":2053},"比赛中的人际没有处理好，痛苦地拖延和解决；",{"type":20,"tag":640,"props":2055,"children":2056},{},[2057],{"type":25,"value":2058},"漂浮感；",{"type":20,"tag":640,"props":2060,"children":2061},{},[2062],{"type":25,"value":2063},"尝试感受经济的紧迫，勤工俭学；",{"type":20,"tag":640,"props":2065,"children":2066},{},[2067],{"type":25,"value":2068},"看了很多 live，买了一些 CD；",{"type":20,"tag":640,"props":2070,"children":2071},{},[2072],{"type":25,"value":2073},"家教、实习，接近社会；",{"type":20,"tag":640,"props":2075,"children":2076},{},[2077],{"type":25,"value":2078},"还是模糊的不知道自己的方位；",{"type":20,"tag":640,"props":2080,"children":2081},{},[2082],{"type":25,"value":2083},"买了自己的琴；",{"title":8,"searchDepth":201,"depth":202,"links":2085},[],"content:posts:2024summary.md","posts\u002F2024summary.md","posts\u002F2024summary",{"_path":2090,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":2091,"description":2092,"date":2093,"categories":217,"tags":2094,"body":2096,"_type":207,"_id":2443,"_source":209,"_file":2444,"_stem":2445,"_extension":212},"\u002Fposts\u002Fvps-crash-startup","快速搭建个人VPS","如何快速搭建个人VPS。","2024-12-31 19:00:00",[2095],"VPS",{"type":17,"children":2097,"toc":2432},[2098,2129,2134,2139,2145,2158,2231,2236,2247,2252,2258,2271,2277,2290,2295,2301,2306,2312,2324,2329,2334,2339,2347,2352,2356,2428],{"type":20,"tag":21,"props":2099,"children":2100},{},[2101,2102,2106,2108,2113,2114,2120,2121,2127],{"type":25,"value":608},{"type":20,"tag":64,"props":2103,"children":2104},{"href":611},[2105],{"type":25,"value":614},{"type":25,"value":2107}," 部分，根据以下教程，并结合 ",{"type":20,"tag":334,"props":2109,"children":2111},{"className":2110},[],[2112],{"type":25,"value":2095},{"type":25,"value":828},{"type":20,"tag":334,"props":2115,"children":2117},{"className":2116},[],[2118],{"type":25,"value":2119},"optimize",{"type":25,"value":828},{"type":20,"tag":334,"props":2122,"children":2124},{"className":2123},[],[2125],{"type":25,"value":2126},"订阅聚合",{"type":25,"value":2128},"等关键词，可以检索出 VPS 搭建的相应教程。",{"type":20,"tag":43,"props":2130,"children":2132},{"id":2131},"拥有一台非大陆的服务器",[2133],{"type":25,"value":2131},{"type":20,"tag":21,"props":2135,"children":2136},{},[2137],{"type":25,"value":2138},"VPS(Virtual Private Server)，顾名思义你需要拥有至少一台非大陆的服务器，推荐的操作系统是 Debian12(RAM>=1GB)。后面的步骤有配置 SSH 免密访问，禁止密码登录，乃至修改默认 sshd 端口。这部分操作是出于远程连接的安全性考虑的，我在此不赘述，感兴趣的读者自行检索即可找到相应教程（亦可参考引用部分的文章）。",{"type":20,"tag":43,"props":2140,"children":2142},{"id":2141},"通过脚本一键搭建-v2ray",[2143],{"type":25,"value":2144},"通过脚本一键搭建 V2Ray",{"type":20,"tag":21,"props":2146,"children":2147},{},[2148,2150,2156],{"type":25,"value":2149},"233Boy 提供了完整的脚本用于创建 V2Ray 节点。代码以 GPL-3.0 协议",{"type":20,"tag":64,"props":2151,"children":2154},{"href":2152,"rel":2153},"https:\u002F\u002Fgithub.com\u002F233boy\u002Fv2ray",[68],[2155],{"type":25,"value":1679},{"type":25,"value":2157},"在 Github 上。",{"type":20,"tag":327,"props":2159,"children":2161},{"className":1071,"code":2160,"language":1073,"meta":8,"style":8},"# 下载并运行 233Boy 提供的 V2Ray 安装脚本（会默认生成使用 Vmess-TCP 的链接）\nbash \u003C(wget -qO- -o- https:\u002F\u002Fgit.io\u002Fv2ray.sh)\n# 添加新节点\nv2ray add Vmess-TCP-dynamic-port\n",[2162],{"type":20,"tag":334,"props":2163,"children":2164},{"__ignoreMap":8},[2165,2173,2205,2213],{"type":20,"tag":338,"props":2166,"children":2167},{"class":340,"line":341},[2168],{"type":20,"tag":338,"props":2169,"children":2170},{"style":910},[2171],{"type":25,"value":2172},"# 下载并运行 233Boy 提供的 V2Ray 安装脚本（会默认生成使用 Vmess-TCP 的链接）\n",{"type":20,"tag":338,"props":2174,"children":2175},{"class":340,"line":201},[2176,2180,2185,2190,2195,2200],{"type":20,"tag":338,"props":2177,"children":2178},{"style":882},[2179],{"type":25,"value":1073},{"type":20,"tag":338,"props":2181,"children":2182},{"style":888},[2183],{"type":25,"value":2184}," \u003C(",{"type":20,"tag":338,"props":2186,"children":2187},{"style":882},[2188],{"type":25,"value":2189},"wget",{"type":20,"tag":338,"props":2191,"children":2192},{"style":1088},[2193],{"type":25,"value":2194}," -qO-",{"type":20,"tag":338,"props":2196,"children":2197},{"style":1088},[2198],{"type":25,"value":2199}," -o-",{"type":20,"tag":338,"props":2201,"children":2202},{"style":888},[2203],{"type":25,"value":2204}," https:\u002F\u002Fgit.io\u002Fv2ray.sh)\n",{"type":20,"tag":338,"props":2206,"children":2207},{"class":340,"line":202},[2208],{"type":20,"tag":338,"props":2209,"children":2210},{"style":910},[2211],{"type":25,"value":2212},"# 添加新节点\n",{"type":20,"tag":338,"props":2214,"children":2215},{"class":340,"line":366},[2216,2221,2226],{"type":20,"tag":338,"props":2217,"children":2218},{"style":882},[2219],{"type":25,"value":2220},"v2ray",{"type":20,"tag":338,"props":2222,"children":2223},{"style":888},[2224],{"type":25,"value":2225}," add",{"type":20,"tag":338,"props":2227,"children":2228},{"style":888},[2229],{"type":25,"value":2230}," Vmess-TCP-dynamic-port\n",{"type":20,"tag":21,"props":2232,"children":2233},{},[2234],{"type":25,"value":2235},"此时会得到我们新生成的链接，对于 V2RayN 用户，此时复制粘贴进 V2RayN 即可使用（支持ShadowRocket、V2RayN）。但是对于其他 VPN 客户端，比如 Clash系列来说，并不一定能直接支持，此时需要部署订阅转换服务。",{"type":20,"tag":1881,"props":2237,"children":2238},{},[2239],{"type":20,"tag":21,"props":2240,"children":2241},{},[2242],{"type":20,"tag":136,"props":2243,"children":2244},{},[2245],{"type":25,"value":2246},"为什么需要自己搭建自己的订阅转换服务而不是使用其他人的？",{"type":20,"tag":21,"props":2248,"children":2249},{},[2250],{"type":25,"value":2251},"我也在思量这个问题。",{"type":20,"tag":43,"props":2253,"children":2255},{"id":2254},"vps-性能调优",[2256],{"type":25,"value":2257},"VPS 性能调优",{"type":20,"tag":21,"props":2259,"children":2260},{},[2261,2262,2269],{"type":25,"value":608},{"type":20,"tag":64,"props":2263,"children":2266},{"href":2264,"rel":2265},"https:\u002F\u002Fwww.taurusxin.com\u002Flinux-network-optimize\u002F",[68],[2267],{"type":25,"value":2268},"Linux 网络优化",{"type":25,"value":2270},"，运行脚本前请先下载 speedtest 进行测速，对比优化前后速度，避免错误的优化。",{"type":20,"tag":43,"props":2272,"children":2274},{"id":2273},"使用-cloudflare-扩展-vps-网络出口",[2275],{"type":25,"value":2276},"使用 CloudFlare 扩展 VPS 网络出口",{"type":20,"tag":21,"props":2278,"children":2279},{},[2280,2281,2288],{"type":25,"value":608},{"type":20,"tag":64,"props":2282,"children":2285},{"href":2283,"rel":2284},"https:\u002F\u002Fp3terx.com\u002Farchives\u002Fuse-cloudflare-warp-to-add-extra-ipv4-or-ipv6-network-support-to-vps-servers-for-free.html",[68],[2286],{"type":25,"value":2287},"Cloudflare WARP 教程：给 VPS 额外添加“原生” IPv4\u002FIPv6 双栈网络出口",{"type":25,"value":2289},"。一般而言所购买的服务器只有 IPv4。我们可以通过 warp 添加 IPv6 并调整 v4\u002Fv6 的使用优先级，将默认的出站 IP转成 warp 的 IP。",{"type":20,"tag":21,"props":2291,"children":2292},{},[2293],{"type":25,"value":2294},"我的建议是给 IPv4 only 的服务器只添加 IPv6 warp, 并且 IPv6优先于 IPv4（如何确认上述文章有提及）。",{"type":20,"tag":43,"props":2296,"children":2298},{"id":2297},"部署订阅转换服务可选",[2299],{"type":25,"value":2300},"部署订阅转换服务（可选）",{"type":20,"tag":21,"props":2302,"children":2303},{},[2304],{"type":25,"value":2305},"最好拥有自己的域名，国内外的域名供应商皆可。",{"type":20,"tag":43,"props":2307,"children":2309},{"id":2308},"使用-cloudflare-pages-部署订阅链接",[2310],{"type":25,"value":2311},"使用 CloudFlare Pages 部署订阅链接",{"type":20,"tag":21,"props":2313,"children":2314},{},[2315,2317],{"type":25,"value":2316},"最好拥有自己的域名，一般购买很方便且可以很便宜。教程参见 ",{"type":20,"tag":64,"props":2318,"children":2321},{"href":2319,"rel":2320},"https:\u002F\u002Fgithub.com\u002Fcmliu\u002FCF-Workers-SUB?tab=readme-ov-file#pages-%E9%83%A8%E7%BD%B2%E6%96%B9%E6%B3%95-%E8%A7%86%E9%A2%91%E6%95%99%E7%A8%8B",[68],[2322],{"type":25,"value":2323},"Pages 部署方法",{"type":20,"tag":43,"props":2325,"children":2327},{"id":2326},"总结",[2328],{"type":25,"value":2326},{"type":20,"tag":21,"props":2330,"children":2331},{},[2332],{"type":25,"value":2333},"按照如上步骤，可以得到个人使用的性能良好的 VPS，从而可以更好地浏览和使用互联网上的资源。",{"type":20,"tag":43,"props":2335,"children":2337},{"id":2336},"额外的问题",[2338],{"type":25,"value":2336},{"type":20,"tag":1881,"props":2340,"children":2341},{},[2342],{"type":20,"tag":21,"props":2343,"children":2344},{},[2345],{"type":25,"value":2346},"无法访问引用的网页（比如 GitHub、个人博客）怎么办？",{"type":20,"tag":21,"props":2348,"children":2349},{},[2350],{"type":25,"value":2351},"考虑安装 Watt Toolkit，其提供 GitHub 网络加速(通过修改 Hosts 的方式)。",{"type":20,"tag":43,"props":2353,"children":2354},{"id":1569},[2355],{"type":25,"value":614},{"type":20,"tag":1573,"props":2357,"children":2358},{},[2359,2369,2379,2388,2400,2410,2418],{"type":20,"tag":640,"props":2360,"children":2361},{},[2362],{"type":20,"tag":64,"props":2363,"children":2366},{"href":2364,"rel":2365},"https:\u002F\u002F233boy.com\u002Fv2ray\u002Fv2ray-server\u002F",[68],[2367],{"type":25,"value":2368},"V2Ray 一键搭建详细图文教程（小白试用）-233Boy",{"type":20,"tag":640,"props":2370,"children":2371},{},[2372],{"type":20,"tag":64,"props":2373,"children":2376},{"href":2374,"rel":2375},"https:\u002F\u002Fgithub.com\u002F233boy\u002Fv2ray\u002Fwiki\u002FV2Ray%E6%90%AD%E5%BB%BA%E8%AF%A6%E7%BB%86%E5%9B%BE%E6%96%87%E6%95%99%E7%A8%8B",[68],[2377],{"type":25,"value":2378},"V2Ray搭建详细图文教程 - 233Boy",{"type":20,"tag":640,"props":2380,"children":2381},{},[2382],{"type":20,"tag":64,"props":2383,"children":2385},{"href":2264,"rel":2384},[68],[2386],{"type":25,"value":2387},"VPS 网速优化",{"type":20,"tag":640,"props":2389,"children":2390},{},[2391,2393],{"type":25,"value":2392},"订阅链接汇聚 ",{"type":20,"tag":64,"props":2394,"children":2397},{"href":2395,"rel":2396},"https:\u002F\u002Fgithub.com\u002Fcmliu\u002FCF-Workers-SUB",[68],[2398],{"type":25,"value":2399},"cmliu\u002FCF-Workers-SUB",{"type":20,"tag":640,"props":2401,"children":2402},{},[2403],{"type":20,"tag":64,"props":2404,"children":2407},{"href":2405,"rel":2406},"https:\u002F\u002Fwww.animmouse.com\u002Fp\u002Fsetup-cloudflare-warp-on-ipv6-only-vps\u002F",[68],[2408],{"type":25,"value":2409},"Setup Cloudflare WARP on IPv6 Only VPS",{"type":20,"tag":640,"props":2411,"children":2412},{},[2413],{"type":20,"tag":64,"props":2414,"children":2416},{"href":2283,"rel":2415},[68],[2417],{"type":25,"value":2287},{"type":20,"tag":640,"props":2419,"children":2420},{},[2421],{"type":20,"tag":64,"props":2422,"children":2425},{"href":2423,"rel":2424},"https:\u002F\u002Flinux.do\u002Ft\u002Ftopic\u002F160305",[68],[2426],{"type":25,"value":2427},"【配置优化】我拿到VPS服务器必做的那些事",{"type":20,"tag":542,"props":2429,"children":2430},{},[2431],{"type":25,"value":546},{"title":8,"searchDepth":201,"depth":202,"links":2433},[2434,2435,2436,2437,2438,2439,2440,2441,2442],{"id":2131,"depth":201,"text":2131},{"id":2141,"depth":201,"text":2144},{"id":2254,"depth":201,"text":2257},{"id":2273,"depth":201,"text":2276},{"id":2297,"depth":201,"text":2300},{"id":2308,"depth":201,"text":2311},{"id":2326,"depth":201,"text":2326},{"id":2336,"depth":201,"text":2336},{"id":1569,"depth":201,"text":614},"content:posts:VPS-crash-startup.md","posts\u002FVPS-crash-startup.md","posts\u002FVPS-crash-startup",{"_path":2447,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":2448,"description":2449,"date":2450,"categories":217,"tags":2451,"body":2454,"_type":207,"_id":2649,"_source":209,"_file":2650,"_stem":2651,"_extension":212},"\u002Fposts\u002Fdata-label-software","AI数据（自动）标注软件概述","对市面上目前的AI数据（自动）标注软件进行调研。","2024-12-20 14:00:00",[2452,2453],"数据标注","深度学习",{"type":17,"children":2455,"toc":2647},[2456,2461,2466,2471,2476,2484,2506,2511,2595,2600,2615],{"type":20,"tag":21,"props":2457,"children":2458},{},[2459],{"type":25,"value":2460},"数据驱动的深度学习已经成为了计算机科学解决现实问题的一大强有力的解决方案。而对于深度学习数据是重中之重。以我浅薄的经验来看，对于现实世界中的大多数任务，所使用数据质量的高低甚至比模型的工作更为重要。一个好的数据就是成功的一半。",{"type":20,"tag":21,"props":2462,"children":2463},{},[2464],{"type":25,"value":2465},"涉及有监督的学习需要数据标注。而人工数据标注作为苦力活一直为人所诟病，认为这并不值得去学习。我认为，其中的关键并不在如何标注数据，而是怎样的数据标注是好的，或者说数据应当标注成什么样。这些问题其实在实践中已经积累下了不少的答案，我们已经有了“最佳实践”。",{"type":20,"tag":21,"props":2467,"children":2468},{},[2469],{"type":25,"value":2470},"不同的数据领域划分了不同的任务。而一些任务存在了令人满意的通解，比如视觉上的 SAM、NLP上的 Transformer 系，Audio上的解决方案也很成熟。如何从一个成熟的解决方案中让自己的项目更自动化的受益？这就是数据自动标注所做的事。",{"type":20,"tag":21,"props":2472,"children":2473},{},[2474],{"type":25,"value":2475},"举例，对于小的细分的尚且没有人做的领域任务，且使用深度学习的方法是可行的（而可行性多半决定于数据的质量和数量）。这时使用通用的领域模型对新任务自动的进行标注（乃至交互式标注），可以大大省去新任务的数据处理时间（甚至获得更高质量的数据）。这就是从成熟解决方案更自动化地受益的所指。",{"type":20,"tag":1881,"props":2477,"children":2478},{},[2479],{"type":20,"tag":21,"props":2480,"children":2481},{},[2482],{"type":25,"value":2483},"当我们在浏览器上搜索某样东西时，其实我们是假定使用浏览器的某人遇到了同样（相似）的问题并且有了解决方案。类似的，当我们有了一个想法的时候，你需要审查一下世界上有没有其他人早已经提出了类似的想法。",{"type":20,"tag":21,"props":2485,"children":2486},{},[2487,2489,2496,2498,2505],{"type":25,"value":2488},"AI4S，这是很自然的想法，将AI用于数据标注，并且现实中已经存在实践。考虑到数据安全性问题以及我所能接触到的调研对象有限，下面仅列举无数据安全问题的开源项目。首先简单分类为领域特定的数据标注和通用类的数据标注。更详细的可以参见 ",{"type":20,"tag":64,"props":2490,"children":2493},{"href":2491,"rel":2492},"https:\u002F\u002Fgithub.com\u002Fhumansignal\u002Fawesome-data-labeling",[68],[2494],{"type":25,"value":2495},"awesome-data-labeling",{"type":25,"value":2497}," 和 ",{"type":20,"tag":64,"props":2499,"children":2502},{"href":2500,"rel":2501},"https:\u002F\u002Fgithub.com\u002Fmingx9527\u002FData_Label_Tools",[68],[2503],{"type":25,"value":2504},"Data_Label_Tools",{"type":25,"value":634},{"type":20,"tag":21,"props":2507,"children":2508},{},[2509],{"type":25,"value":2510},"领域特定：",{"type":20,"tag":636,"props":2512,"children":2513},{},[2514,2519,2537,2555,2573,2578],{"type":20,"tag":640,"props":2515,"children":2516},{},[2517],{"type":25,"value":2518},"CV：",{"type":20,"tag":640,"props":2520,"children":2521},{},[2522],{"type":20,"tag":636,"props":2523,"children":2524},{},[2525],{"type":20,"tag":640,"props":2526,"children":2527},{},[2528,2535],{"type":20,"tag":64,"props":2529,"children":2532},{"href":2530,"rel":2531},"https:\u002F\u002Fwww.labelme.io\u002F",[68],[2533],{"type":25,"value":2534},"label-me",{"type":25,"value":2536}," FOSS",{"type":20,"tag":640,"props":2538,"children":2539},{},[2540],{"type":20,"tag":636,"props":2541,"children":2542},{},[2543],{"type":20,"tag":640,"props":2544,"children":2545},{},[2546,2553],{"type":20,"tag":64,"props":2547,"children":2550},{"href":2548,"rel":2549},"https:\u002F\u002Fgithub.com\u002FCVHub520\u002FX-AnyLabeling",[68],[2551],{"type":25,"value":2552},"X-AnyLabeling",{"type":25,"value":2554}," GPL-3.0",{"type":20,"tag":640,"props":2556,"children":2557},{},[2558],{"type":20,"tag":636,"props":2559,"children":2560},{},[2561],{"type":20,"tag":640,"props":2562,"children":2563},{},[2564,2571],{"type":20,"tag":64,"props":2565,"children":2568},{"href":2566,"rel":2567},"https:\u002F\u002Fgithub.com\u002FHumanSignal\u002FlabelImg",[68],[2569],{"type":25,"value":2570},"label-img",{"type":25,"value":2572}," MIT(且已经 Archive, 被并入 label-studio)",{"type":20,"tag":640,"props":2574,"children":2575},{},[2576],{"type":25,"value":2577},"NLP:",{"type":20,"tag":640,"props":2579,"children":2580},{},[2581],{"type":20,"tag":636,"props":2582,"children":2583},{},[2584],{"type":20,"tag":640,"props":2585,"children":2586},{},[2587,2594],{"type":20,"tag":64,"props":2588,"children":2591},{"href":2589,"rel":2590},"https:\u002F\u002Fgithub.com\u002Frisesoft-y9\u002FData-Labeling",[68],[2592],{"type":25,"value":2593},"data-labeling",{"type":25,"value":2554},{"type":20,"tag":21,"props":2596,"children":2597},{},[2598],{"type":25,"value":2599},"通用类：",{"type":20,"tag":636,"props":2601,"children":2602},{},[2603],{"type":20,"tag":640,"props":2604,"children":2605},{},[2606,2613],{"type":20,"tag":64,"props":2607,"children":2610},{"href":2608,"rel":2609},"https:\u002F\u002Fgithub.com\u002FHumanSignal\u002Flabel-studio\u002F",[68],[2611],{"type":25,"value":2612},"label-studio",{"type":25,"value":2614}," Apache-2.0",{"type":20,"tag":21,"props":2616,"children":2617},{},[2618,2620,2627,2629,2636,2638,2645],{"type":25,"value":2619},"按企业整理的话。国外有 ",{"type":20,"tag":64,"props":2621,"children":2624},{"href":2622,"rel":2623},"https:\u002F\u002Fhumansignal.com\u002F",[68],[2625],{"type":25,"value":2626},"HumanSignal",{"type":25,"value":2628},"。国内有",{"type":20,"tag":64,"props":2630,"children":2633},{"href":2631,"rel":2632},"https:\u002F\u002Fstardust.ai\u002F",[68],[2634],{"type":25,"value":2635},"星尘",{"type":25,"value":2637}," 、",{"type":20,"tag":64,"props":2639,"children":2642},{"href":2640,"rel":2641},"https:\u002F\u002Fwww.risesoft.net\u002F",[68],[2643],{"type":25,"value":2644},"有生",{"type":25,"value":2646},"。HumanSignal 和 星尘是较早开始进入数据标注领域的。有生是今年才开始进入数据标注软件，并在 ToG 业务上有了进展。",{"title":8,"searchDepth":201,"depth":202,"links":2648},[],"content:posts:data-label-software.md","posts\u002Fdata-label-software.md","posts\u002Fdata-label-software",{"_path":2653,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":2654,"description":2655,"date":2656,"categories":12,"tags":2657,"body":2658,"_type":207,"_id":2687,"_source":209,"_file":2688,"_stem":2689,"_extension":212},"\u002Fposts\u002Fself-destruction","生活的崩坏与自我毁灭","是什么在牵引着我？我的行为，我的思想？我的感受？我所处的地方？它们在何处？","2024-12-19 12:00:00",[1980],{"type":17,"children":2659,"toc":2685},[2660,2665,2670,2680],{"type":20,"tag":21,"props":2661,"children":2662},{},[2663],{"type":25,"value":2664},"今天是单周，我按计划翘掉了不签到的早八，但是睡过了签到的早十。一觉起来翻看手机，发现室友在签到的时候问我，“你上课又没来吗”，我回答是。",{"type":20,"tag":21,"props":2666,"children":2667},{},[2668],{"type":25,"value":2669},"如果只是归咎原因，那么可以归于我的毫不在意和单双周的难记忆。但我，在感到有必要要去做的事情的时候，是会早早醒来的。我应当是感到了那样的生活是在消耗我，起码是消耗现在的我。",{"type":20,"tag":21,"props":2671,"children":2672},{},[2673,2678],{"type":20,"tag":136,"props":2674,"children":2675},{},[2676],{"type":25,"value":2677},"我对我将临的事情，并无期待，反而是反抗",{"type":25,"value":2679},"。而反抗，这种消极的反抗，造成的是：我生活的崩塌从 regular 到 irregular，从主流的道路到谁也不确定的道路。我生发了一种对生活、乃至“世界”的背叛感。我很难不去追问，到底是怎么了，为什么我会这样做呢。",{"type":20,"tag":21,"props":2681,"children":2682},{},[2683],{"type":25,"value":2684},"当我询问我自己这样的问题时，我内心其实已经有了答案和想法。当一个人生发出一种行为的时候，尚若他追问自己的言行，是一定能够归咎出原因的，即使脑海中假想推演出来的原因和对过去的模拟非常有可能是错误且偏离现实的。",{"title":8,"searchDepth":201,"depth":202,"links":2686},[],"content:posts:self-destruction.md","posts\u002Fself-destruction.md","posts\u002Fself-destruction",{"_path":2691,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":2692,"description":2693,"date":2694,"categories":217,"tags":2695,"body":2696,"_type":207,"_id":3197,"_source":209,"_file":3198,"_stem":3199,"_extension":212},"\u002Fposts\u002Fcs194-196_llmagents","LLM Agents 课程笔记","UCB CS294\u002F194-196 Large Language Model Agents 的课程笔记。","2024-11-30 20:00:00",[562],{"type":17,"children":2697,"toc":3177},[2698,2706,2711,2717,2722,2730,2735,2740,2747,2759,2771,2777,2782,2794,2806,2811,2823,2828,2841,2846,2854,2859,2864,2887,2892,2898,2906,2919,2924,2929,2937,2942,2955,2961,2974,2979,2984,2990,2995,3016,3024,3029,3035,3043,3048,3056,3061,3067,3072,3078,3083,3088,3093,3099,3104,3109,3117,3122,3128,3133,3137],{"type":20,"tag":1881,"props":2699,"children":2700},{},[2701],{"type":20,"tag":21,"props":2702,"children":2703},{},[2704],{"type":25,"value":2705},"鉴定为水课，尽量挑感兴趣的有用的部分看。",{"type":20,"tag":21,"props":2707,"children":2708},{},[2709],{"type":25,"value":2710},"最近工作内容涉猎了大模型的应用，想更深入的了解一些，便打算试试这门课。笔记更新进度对应学习进度。",{"type":20,"tag":43,"props":2712,"children":2714},{"id":2713},"llm-reasoning",[2715],{"type":25,"value":2716},"LLM Reasoning",{"type":20,"tag":21,"props":2718,"children":2719},{},[2720],{"type":25,"value":2721},"提问：What do you expect for AI?",{"type":20,"tag":1881,"props":2723,"children":2724},{},[2725],{"type":20,"tag":21,"props":2726,"children":2727},{},[2728],{"type":25,"value":2729},"What do you expect for AI?",{"type":20,"tag":21,"props":2731,"children":2732},{},[2733],{"type":25,"value":2734},"AI 是人类创造出来的更自动化的工具。若从控制的观点来说，AI 就是控制器的控制器，能够担负人类的现实任务。在理想的应用情况可以承担大部分社会物质精神运转的负荷。",{"type":20,"tag":21,"props":2736,"children":2737},{},[2738],{"type":25,"value":2739},"教授的回答:",{"type":20,"tag":1881,"props":2741,"children":2742},{},[2743],{"type":20,"tag":21,"props":2744,"children":2745},{},[2746],{"type":25,"value":2729},{"type":20,"tag":21,"props":2748,"children":2749},{},[2750,2752,2757],{"type":25,"value":2751},"AI should be able to ",{"type":20,"tag":136,"props":2753,"children":2754},{},[2755],{"type":25,"value":2756},"learn from a few examples",{"type":25,"value":2758},", like what humans usually do",{"type":20,"tag":21,"props":2760,"children":2761},{},[2762,2764,2769],{"type":25,"value":2763},"而以往的机器学习达到了这个期望吗？并没有。机器学习缺乏归因能力——需要大样本学习。而”Humans can learn from just a few examples ",{"type":20,"tag":136,"props":2765,"children":2766},{},[2767],{"type":25,"value":2768},"because humans can reason",{"type":25,"value":2770},"“。因此其暗指大模型拥有 reason 能力。",{"type":20,"tag":1053,"props":2772,"children":2774},{"id":2773},"key-ideas",[2775],{"type":25,"value":2776},"Key Ideas",{"type":20,"tag":21,"props":2778,"children":2779},{},[2780],{"type":25,"value":2781},"我们慢慢引出一系列关键的想法来提升大模型的效果。",{"type":20,"tag":2783,"props":2784,"children":2786},"h4",{"id":2785},"derive-the-final-answer-through-intermedia-steps",[2787,2789],{"type":25,"value":2788},"Derive the Final Answer through ",{"type":20,"tag":136,"props":2790,"children":2791},{},[2792],{"type":25,"value":2793},"Intermedia Steps",{"type":20,"tag":21,"props":2795,"children":2796},{},[2797,2799,2804],{"type":25,"value":2798},"Also called ",{"type":20,"tag":136,"props":2800,"children":2801},{},[2802],{"type":25,"value":2803},"Chain-of-Thought",{"type":25,"value":2805},"(CoT).",{"type":20,"tag":21,"props":2807,"children":2808},{},[2809],{"type":25,"value":2810},"可以简单导出一种应用——CoT Prompting。最经典的一个例子——”Let's think step by step“，这个 Prompting 达成了零样本的 CoT。",{"type":20,"tag":2783,"props":2812,"children":2814},{"id":2813},"least-to-most-prompting-enable-easy-to-hard-generalization-by-decomposition",[2815,2817],{"type":25,"value":2816},"Least-to-Most Prompting ",{"type":20,"tag":2818,"props":2819,"children":2820},"em",{},[2821],{"type":25,"value":2822},"Enable easy-to-hard generalization by decomposition",{"type":20,"tag":21,"props":2824,"children":2825},{},[2826],{"type":25,"value":2827},"《How to Solve It》一文中提到。",{"type":20,"tag":1881,"props":2829,"children":2830},{},[2831],{"type":20,"tag":21,"props":2832,"children":2833},{},[2834,2839],{"type":20,"tag":136,"props":2835,"children":2836},{},[2837],{"type":25,"value":2838},"Decomposing and recombing",{"type":25,"value":2840}," are important operations fo the mind.\nYou decompose the whole into its parts, and you recombine the parts into a more or less different whole.\nIf you go into detail you may lose yourself in details.",{"type":20,"tag":21,"props":2842,"children":2843},{},[2844],{"type":25,"value":2845},"其实理念和计算机科学中一直倡导的缩小问题规模有共通之处？Map-Reduce，缩小问题规模不可避免地就要分解问题。",{"type":20,"tag":1881,"props":2847,"children":2848},{},[2849],{"type":20,"tag":21,"props":2850,"children":2851},{},[2852],{"type":25,"value":2853},"Using just 0.1% demonstration examples achieves perfect generalization.",{"type":20,"tag":21,"props":2855,"children":2856},{},[2857],{"type":25,"value":2858},"这里不知道是指预训练时加入一定量地分解问题的数据，还是指对话时加入分解问题的例子。",{"type":20,"tag":21,"props":2860,"children":2861},{},[2862],{"type":25,"value":2863},"以上两种方法其实都是中间步骤。为什么中间步骤可以有如此大的效果呢？",{"type":20,"tag":636,"props":2865,"children":2866},{},[2867,2877],{"type":20,"tag":640,"props":2868,"children":2869},{},[2870,2875],{"type":20,"tag":136,"props":2871,"children":2872},{},[2873],{"type":25,"value":2874},"Constant-depth transformers",{"type":25,"value":2876}," can solve any inherently serial problem as long as it generates sufficiently long intermediate reasoning steps",{"type":20,"tag":640,"props":2878,"children":2879},{},[2880,2885],{"type":20,"tag":136,"props":2881,"children":2882},{},[2883],{"type":25,"value":2884},"Transformers which directly generate final answers",{"type":25,"value":2886}," either requires a huge depth to solve or cannot solve at all",{"type":20,"tag":21,"props":2888,"children":2889},{},[2890],{"type":25,"value":2891},"也就是说，没有中间步骤要么注意力强大到能直接解决问题，要么得到错乱的解。而加入中间步骤，解决序列问题中的每一个简单问题，从而可以解决任何能够分解为序列问题的问题。",{"type":20,"tag":2783,"props":2893,"children":2895},{"id":2894},"llms-as-analogical-reasoners",[2896],{"type":25,"value":2897},"LLMs as Analogical Reasoners",{"type":20,"tag":1881,"props":2899,"children":2900},{},[2901],{"type":20,"tag":21,"props":2902,"children":2903},{},[2904],{"type":25,"value":2905},"Do you know a related problem? In fact, when solving a problem, we always profit from previously solved problems, using their result, or their method, or the experience we acquired solving them.",{"type":20,"tag":21,"props":2907,"children":2908},{},[2909,2911,2917],{"type":25,"value":2910},"出于这种思想，可以导出提示词——Recall a related problem, and then solve this one. （回忆一个相关问题，然后解决这个问题）。这种方法又叫 ",{"type":20,"tag":334,"props":2912,"children":2914},{"className":2913},[],[2915],{"type":25,"value":2916},"Self-generated Examples",{"type":25,"value":2918},"。",{"type":20,"tag":21,"props":2920,"children":2921},{},[2922],{"type":25,"value":2923},"不过提示词的角度太过于简陋，从我个人的角度来说，提示词其实很不安全，而且让我很不安。完全把命运交给多出来的词向量真的太怪了。有没有不使用 Prompting 就可以触发 CoT 的方法？",{"type":20,"tag":21,"props":2925,"children":2926},{},[2927],{"type":25,"value":2928},"有的。从 Decode 下手，以往 GPT 输出的时候是选择 Top-k 中概率最高的词输出，也就是简单的贪心选择。如果让其对 Top-k 中的词继续做生成，在根据置信度选择答案，这就是 CoT-decoding 方法。",{"type":20,"tag":21,"props":2930,"children":2931},{},[2932],{"type":20,"tag":1187,"props":2933,"children":2936},{"alt":2934,"src":2935},"Illustration of CoT-decoding","https:\u002F\u002Farxiv.org\u002Fhtml\u002F2402.10200v2\u002Fx1.png",[],{"type":20,"tag":21,"props":2938,"children":2939},{},[2940],{"type":25,"value":2941},"Key takeaways",{"type":20,"tag":1573,"props":2943,"children":2944},{},[2945,2950],{"type":20,"tag":640,"props":2946,"children":2947},{},[2948],{"type":25,"value":2949},"Pre-trained LLMs, without further finetuning, has been ready for step-by-step reasoning, but we need a non-greedy decoding strategy to elicit it.",{"type":20,"tag":640,"props":2951,"children":2952},{},[2953],{"type":25,"value":2954},"When a step-by-step reasoning path is present, KKMs have much higher confidence in decoding the final answer than direct-answer decoding.",{"type":20,"tag":2783,"props":2956,"children":2958},{"id":2957},"limits-of-intermediate-steps",[2959],{"type":25,"value":2960},"Limits of Intermediate Steps",{"type":20,"tag":1881,"props":2962,"children":2963},{},[2964],{"type":20,"tag":21,"props":2965,"children":2966},{},[2967,2969],{"type":25,"value":2968},"Always keep in mind that LLMs are probabilistic models of generating next tokens. ",{"type":20,"tag":136,"props":2970,"children":2971},{},[2972],{"type":25,"value":2973},"They are not humans.",{"type":20,"tag":21,"props":2975,"children":2976},{},[2977],{"type":25,"value":2978},"我们希望：给出问题的基础上得到最大可能的最终答案。",{"type":20,"tag":21,"props":2980,"children":2981},{},[2982],{"type":25,"value":2983},"LLM CoT-decoding所做：给出问题的基础上，给出最大可能的 reasoning path 以及最大可能的最终答案。",{"type":20,"tag":2783,"props":2985,"children":2987},{"id":2986},"self-consistency",[2988],{"type":25,"value":2989},"Self-Consistency",{"type":20,"tag":21,"props":2991,"children":2992},{},[2993],{"type":25,"value":2994},"More consistent, more likely to be correct",{"type":20,"tag":21,"props":2996,"children":2997},{},[2998,3000,3008,3010,3015],{"type":25,"value":2999},"人性的一个突出方面是人们的思维方式不同。很自然地假设，在需要深思熟虑的任务中，可能有几种方法可以解决问题。我们建议可以通过从语言模型的解码器中采样来在语言模型中模拟这样的过程。例如，如图 ",{"type":20,"tag":64,"props":3001,"children":3005},{"href":3002,"rel":3003,"title":3004},"https:\u002F\u002Far5iv.labs.arxiv.org\u002Fhtml\u002F2203.11171?_immersive_translate_auto_translate=1#S1.F1",[68],"In 1 Introduction ‣ Self-Consistency Improves Chain of Thought Reasoning in Language Models",[3006],{"type":25,"value":3007},"1 所示",{"type":25,"value":3009}," ，一个模型可以对数学问题生成多个合理的回答，这些回答都得出相同的正确答案（输出 1 和 3）。由于语言模型不是完美的推理器，因此模型也可能产生不正确的推理路径或在其中一个推理步骤中出错（例如，在输出 2 中），但此类解决方案不太可能得出相同的答案。也就是说，我们",{"type":20,"tag":136,"props":3011,"children":3012},{},[3013],{"type":25,"value":3014},"假设正确的推理过程，即使它们是多种多样的，也往往比不正确的过程在最终答案中具有更大的一致性",{"type":25,"value":2918},{"type":20,"tag":21,"props":3017,"children":3018},{},[3019],{"type":20,"tag":1187,"props":3020,"children":3023},{"alt":3021,"src":3022},"Self-Consistency method contains three steps","https:\u002F\u002Far5iv.labs.arxiv.org\u002Fhtml\u002F2203.11171\u002Fassets\u002Fx1.png",[],{"type":20,"tag":21,"props":3025,"children":3026},{},[3027],{"type":25,"value":3028},"Self-Consistency 利用了复杂的推理任务通常允许多条推理路径到达正确答案的直觉。一个问题越需要深思熟虑的思考和分析 ，可以得到答案的推理路径就越多样化。",{"type":20,"tag":2783,"props":3030,"children":3032},{"id":3031},"quiz",[3033],{"type":25,"value":3034},"Quiz",{"type":20,"tag":1881,"props":3036,"children":3037},{},[3038],{"type":20,"tag":21,"props":3039,"children":3040},{},[3041],{"type":25,"value":3042},"Q1. When the LLM outputs a direct answer without intermediate steps, will you still sample several times, and then choose the most common answer?",{"type":20,"tag":21,"props":3044,"children":3045},{},[3046],{"type":25,"value":3047},"我不会，我倾向于它不能够解决这个问题，而重新换种问法。",{"type":20,"tag":1881,"props":3049,"children":3050},{},[3051],{"type":20,"tag":21,"props":3052,"children":3053},{},[3054],{"type":25,"value":3055},"Q2. Change self-consistency by letting LLM generate multiple responses, instead of sampling multiple times, and then choosing the most common answer. Does this make sense?",{"type":20,"tag":21,"props":3057,"children":3058},{},[3059],{"type":25,"value":3060},"我认为这其实并不能解决问题。首先模型必须能够得出正确答案，假设其起作用的前提是，采样到的答案中正确的答案占大多数。这只能让复杂但不困难的任务表现的更好，而对于简单任务和复杂困难任务没有帮助。",{"type":20,"tag":1053,"props":3062,"children":3064},{"id":3063},"limitations",[3065],{"type":25,"value":3066},"Limitations",{"type":20,"tag":21,"props":3068,"children":3069},{},[3070],{"type":25,"value":3071},"大模型存在什么限制呢？了解限制可以让我们更好的发挥它的作用。",{"type":20,"tag":2783,"props":3073,"children":3075},{"id":3074},"llms-can-be-easily-distracted-by-irrelevant-context",[3076],{"type":25,"value":3077},"LLMs Can Be Easily Distracted by Irrelevant Context",{"type":20,"tag":21,"props":3079,"children":3080},{},[3081],{"type":25,"value":3082},"Psychology studies show that irrelevant information may significantly decrease some children and even adults problem-solving accuracy.",{"type":20,"tag":21,"props":3084,"children":3085},{},[3086],{"type":25,"value":3087},"在大模型上的表现就是——Adding irrelevant contexts to GSM8K leads to 20+ points performance drop.",{"type":20,"tag":21,"props":3089,"children":3090},{},[3091],{"type":25,"value":3092},"知道了如此限制，那么我们可以用提示词去尝试解决——Ignore irrelevant context。这可以挽回一点性能表现。",{"type":20,"tag":2783,"props":3094,"children":3096},{"id":3095},"llms-cannot-self-correct-reasoning-yet",[3097],{"type":25,"value":3098},"LLMs Cannot Self-Correct Reasoning Yet",{"type":20,"tag":21,"props":3100,"children":3101},{},[3102],{"type":25,"value":3103},"While allowing LLMs to review their generated responses can help correct inaccurate answers, it may also risk changing correct answers into incorrect ones.",{"type":20,"tag":21,"props":3105,"children":3106},{},[3107],{"type":25,"value":3108},"尤其是在常识性的问答中，GPT-3.5 Self-Correct 后的表现下降的很厉害。",{"type":20,"tag":1881,"props":3110,"children":3111},{},[3112],{"type":20,"tag":21,"props":3113,"children":3114},{},[3115],{"type":25,"value":3116},"Reported improvements need oracle answers.",{"type":20,"tag":21,"props":3118,"children":3119},{},[3120],{"type":25,"value":3121},"Oracle: Let LLMs self correct only when the answer is wrong",{"type":20,"tag":2783,"props":3123,"children":3125},{"id":3124},"premise-order-matters-in-llm-reasoning",[3126],{"type":25,"value":3127},"Premise Order Matters in LLM Reasoning",{"type":20,"tag":21,"props":3129,"children":3130},{},[3131],{"type":25,"value":3132},"前提条件重排序会让 solving rates 下降。",{"type":20,"tag":1053,"props":3134,"children":3135},{"id":2326},[3136],{"type":25,"value":2326},{"type":20,"tag":636,"props":3138,"children":3139},{},[3140,3145,3156,3167,3172],{"type":20,"tag":640,"props":3141,"children":3142},{},[3143],{"type":25,"value":3144},"Generating intermediate steps improves LLM performance",{"type":20,"tag":640,"props":3146,"children":3147},{},[3148],{"type":20,"tag":636,"props":3149,"children":3150},{},[3151],{"type":20,"tag":640,"props":3152,"children":3153},{},[3154],{"type":25,"value":3155},"Training\u002Ffine-tuning\u002Fprompting with intermediate steps",{"type":20,"tag":640,"props":3157,"children":3158},{},[3159],{"type":20,"tag":636,"props":3160,"children":3161},{},[3162],{"type":20,"tag":640,"props":3163,"children":3164},{},[3165],{"type":25,"value":3166},"Zero-shot, analogical reasoning, special decoding",{"type":20,"tag":640,"props":3168,"children":3169},{},[3170],{"type":25,"value":3171},"Self-Consistency greatly improves step-by-step reasoning",{"type":20,"tag":640,"props":3173,"children":3174},{},[3175],{"type":25,"value":3176},"Limitation: irrelevant context, self-correction, premise order",{"title":8,"searchDepth":201,"depth":202,"links":3178},[3179],{"id":2713,"depth":201,"text":2716,"children":3180},[3181,3191,3196],{"id":2773,"depth":202,"text":2776,"children":3182},[3183,3185,3187,3188,3189,3190],{"id":2785,"depth":366,"text":3184},"Derive the Final Answer through Intermedia Steps",{"id":2813,"depth":366,"text":3186},"Least-to-Most Prompting Enable easy-to-hard generalization by decomposition",{"id":2894,"depth":366,"text":2897},{"id":2957,"depth":366,"text":2960},{"id":2986,"depth":366,"text":2989},{"id":3031,"depth":366,"text":3034},{"id":3063,"depth":202,"text":3066,"children":3192},[3193,3194,3195],{"id":3074,"depth":366,"text":3077},{"id":3095,"depth":366,"text":3098},{"id":3124,"depth":366,"text":3127},{"id":2326,"depth":202,"text":2326},"content:posts:CS194-196_LLMAgents.md","posts\u002FCS194-196_LLMAgents.md","posts\u002FCS194-196_LLMAgents",{"_path":3201,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":3202,"description":3203,"date":3204,"categories":12,"tags":3205,"body":3206,"_type":207,"_id":3247,"_source":209,"_file":3248,"_stem":3249,"_extension":212},"\u002Fposts\u002Fwhatsyourworth","价值、位置","你们的生存究竟有何价值？如果毫无价值，你们究竟为何存在？","2024-11-29 02:00:00",[1980],{"type":17,"children":3207,"toc":3245},[3208,3215,3220,3225,3230,3235,3240],{"type":20,"tag":1881,"props":3209,"children":3210},{},[3211],{"type":20,"tag":21,"props":3212,"children":3213},{},[3214],{"type":25,"value":3203},{"type":20,"tag":21,"props":3216,"children":3217},{},[3218],{"type":25,"value":3219},"我们该身处怎样的位置？或者说生活该是怎样的？我不知道。社会主义核心价值观中个人层面的要求提到我们要爱国、敬业、诚信、友善。朗朗上口又空洞的字眼，真的能指引我的生活吗？我否认它。",{"type":20,"tag":21,"props":3221,"children":3222},{},[3223],{"type":25,"value":3224},"对于有些人，这些问题是无需思考的，并非因为短视与无知，而是因为过往的生活经验中存在着经得起质疑的参考，他们信服且可以认定自己的生活方式与存在来源，并以此为生活的指导。另一些人是短视者，或许曾经有挣扎过，但还与社会的规训和解。这不如不做挣扎。我不是其中一员。作为具象的人，我不喜欢被分类，甚至说评价自己。或者换句话说，我讨厌暴露自己，即使现在我就在做着这样的事情。我的自反性强烈地牵引着我来到了一种莫名的境地，在这里我会感受到痛苦，并让我难以理解幸福。",{"type":20,"tag":21,"props":3226,"children":3227},{},[3228],{"type":25,"value":3229},"汲取某一样东西或者深深扎根在一处汲取营养与支持，那是再好不过的事情。我还是犹豫着选择。在上一刻被消灭下一刻不存在的现在，妄图否认一切。是可笑的。专注于某一项东西难免要做出某种选择。这都是胡说八道的谎言。",{"type":20,"tag":21,"props":3231,"children":3232},{},[3233],{"type":25,"value":3234},"事实上是，蜷缩的内心带来长时间不使用而萎靡的声音，惧怕外界的同时在自己内心的系统中不断咀嚼反复。其表象可以归为“微信恐惧症”。",{"type":20,"tag":21,"props":3236,"children":3237},{},[3238],{"type":25,"value":3239},"惧怕否认而自诩，自诩自重而自封。",{"type":20,"tag":21,"props":3241,"children":3242},{},[3243],{"type":25,"value":3244},"在时间的脉络和物质的运动之中，星河翻转的梦境里，时间，时间。不可避免地迈步向前，而由自反诞生的恐惧与疏远仍深深扎根。这一切都是漫长的白夜。我们的生存究竟有何价值？如果毫无价值，我们究竟为何存在？",{"title":8,"searchDepth":201,"depth":202,"links":3246},[],"content:posts:WhatsYourWorth.md","posts\u002FWhatsYourWorth.md","posts\u002FWhatsYourWorth",{"_path":3251,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":3252,"description":3253,"date":3254,"categories":12,"tags":3255,"body":3257,"_type":207,"_id":3335,"_source":209,"_file":3336,"_stem":3337,"_extension":212},"\u002Fposts\u002Fblogrelifever2","重启博客v2","忙里偷闲学习前端，还是决定结合想法手搓一个自己的博客。","2024-11-25 00:00:00",[3256],"博客",{"type":17,"children":3258,"toc":3333},[3259,3264,3269,3274,3279,3284,3297,3318,3323,3328],{"type":20,"tag":21,"props":3260,"children":3261},{},[3262],{"type":25,"value":3263},"很遗憾的一件事情——我发现以前的我并没有写出什么值得发表出来的博客，更遗憾的事情，现在的我也没有写出来这样的文字。",{"type":20,"tag":21,"props":3265,"children":3266},{},[3267],{"type":25,"value":3268},"大抵是从初中开始，我就对文字保有偌大的趣味。我认为那是一件值得品味，需要经验积累才能表征出的东西。我想写自己的小说，传达自己的思想。但自我判断后，认为仍需更多的现实经验积累（但其实更重要的是相应的锻炼，比如说写作训练），便将想法设置为遥远的理想，始终铭记，但将其搁置在行动清单外。",{"type":20,"tag":21,"props":3270,"children":3271},{},[3272],{"type":25,"value":3273},"大学刚入学后，学着网上胡乱的言论（还有身边的例子），我也开始写博客。那时候的我，对于博客的写作，其实只是大多停留在复制粘贴的搬运。毕竟经验与感想是需要累计和思考的，没有一定时间的浸润是很难以自己的想法表达出来其他人的想法的。而自我日常的思绪又过于混乱，不花时间做整理，到最后连自己都看不懂。这样记录实在是无趣。",{"type":20,"tag":21,"props":3275,"children":3276},{},[3277],{"type":25,"value":3278},"对于自我的寻找是更关键的。尽管我知道了自我的位置，但是我还是没有以——有足够归属感的、卸下自己防备的方式去接受自我的位置。这很大程度上动摇了我未来决策的基础。",{"type":20,"tag":21,"props":3280,"children":3281},{},[3282],{"type":25,"value":3283},"这实在遗憾。",{"type":20,"tag":21,"props":3285,"children":3286},{},[3287,3289,3295],{"type":25,"value":3288},"好了，谈了不少呓语。下面提一下这次博客的搭建。当然是放弃了 ",{"type":20,"tag":334,"props":3290,"children":3292},{"className":3291},[],[3293],{"type":25,"value":3294},"Hexo",{"type":25,"value":3296},"，感到厌倦，还是不满意。很多时候就是一个想法出现，决定做不做。过后就会很快的把它丢出“缓存”。",{"type":20,"tag":21,"props":3298,"children":3299},{},[3300,3302,3308,3310,3316],{"type":25,"value":3301},"理想的博客要求是简单、简洁、书写方便。如此，需要 ",{"type":20,"tag":334,"props":3303,"children":3305},{"className":3304},[],[3306],{"type":25,"value":3307},"Markdown",{"type":25,"value":3309}," 文件支持，也需要一些基本的功能，比如说 ",{"type":20,"tag":334,"props":3311,"children":3313},{"className":3312},[],[3314],{"type":25,"value":3315},"RSS",{"type":25,"value":3317}," 订阅、评论、分类、标签、日夜模式切换等等。应该会在后续上线。",{"type":20,"tag":21,"props":3319,"children":3320},{},[3321],{"type":25,"value":3322},"技术栈：Nuxt3(+@nuxt\u002Fcontent) + TailwindCSS",{"type":20,"tag":21,"props":3324,"children":3325},{},[3326],{"type":25,"value":3327},"非常简单的技术栈。摸鱼的时候玩的很爽。www",{"type":20,"tag":21,"props":3329,"children":3330},{},[3331],{"type":25,"value":3332},"就是这样，博客还存在一些问题，但边用边解决吧。",{"title":8,"searchDepth":201,"depth":202,"links":3334},[],"content:posts:BlogRelifeVer2.md","posts\u002FBlogRelifeVer2.md","posts\u002FBlogRelifeVer2",{"_path":3339,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":3340,"description":3341,"date":3342,"categories":12,"tags":3343,"body":3344,"_type":207,"_id":3469,"_source":209,"_file":3470,"_stem":3471,"_extension":212},"\u002Fposts\u002Fblogrelife","重启博客","在我的表达欲与现实所需(问题解决记录)驱动下，我决定重写博客。","2024-10-21 20:44:57",null,{"type":17,"children":3345,"toc":3467},[3346,3350,3371,3428,3447,3452,3457,3462],{"type":20,"tag":21,"props":3347,"children":3348},{},[3349],{"type":25,"value":3341},{"type":20,"tag":21,"props":3351,"children":3352},{},[3353,3355,3361,3363,3369],{"type":25,"value":3354},"我之前写过博客。但之前的流程过于琐碎。当想要看到我新写内容的效果时，我都需要忍受长达几秒的 ",{"type":20,"tag":334,"props":3356,"children":3358},{"className":3357},[],[3359],{"type":25,"value":3360},"hexo g && hexo d",{"type":25,"value":3362},"，编辑的过程也不能够实时渲染。另一个使我厌烦的原因是，之前的博客是 Github Pages 部署的。我公开在 ",{"type":20,"tag":334,"props":3364,"children":3366},{"className":3365},[],[3367],{"type":25,"value":3368},"GitHub Repo",{"type":25,"value":3370}," 上的源代码也很丑陋，实在让我提不起兴趣去写。",{"type":20,"tag":21,"props":3372,"children":3373},{},[3374,3376,3381,3383,3388,3390,3396,3398,3403,3405,3410,3412,3418,3420,3426],{"type":25,"value":3375},"我追求过程的简洁，便想换成渲染 ",{"type":20,"tag":334,"props":3377,"children":3379},{"className":3378},[],[3380],{"type":25,"value":207},{"type":25,"value":3382}," 文件的博客 (",{"type":20,"tag":2818,"props":3384,"children":3385},{},[3386],{"type":25,"value":3387},"Hugo",{"type":25,"value":3389}," 可行，但没有去尝试)。自己也尝试用 ",{"type":20,"tag":334,"props":3391,"children":3393},{"className":3392},[],[3394],{"type":25,"value":3395},"Nuxt3",{"type":25,"value":3397}," 写过一些 ",{"type":20,"tag":334,"props":3399,"children":3401},{"className":3400},[],[3402],{"type":25,"value":3307},{"type":25,"value":3404}," 的静态渲染网站，实力有限其扩展能力也不强，最后还是用以前的老套路 (",{"type":20,"tag":334,"props":3406,"children":3408},{"className":3407},[],[3409],{"type":25,"value":3294},{"type":25,"value":3411}," + ",{"type":20,"tag":334,"props":3413,"children":3415},{"className":3414},[],[3416],{"type":25,"value":3417},"Butterfly",{"type":25,"value":3419}," theme)。不过这次决定将构建过程迁移到云端，提交到仓库的源代码就只是源代码了，这样我就只用 ",{"type":20,"tag":334,"props":3421,"children":3423},{"className":3422},[],[3424],{"type":25,"value":3425},"git add *.md",{"type":25,"value":3427},"了。",{"type":20,"tag":21,"props":3429,"children":3430},{},[3431,3433,3438,3440,3445],{"type":25,"value":3432},"而且更令我惊喜的是，在这个过程中我还认识了 ",{"type":20,"tag":334,"props":3434,"children":3436},{"className":3435},[],[3437],{"type":25,"value":3315},{"type":25,"value":3439}," 的存在。我可以通过 ",{"type":20,"tag":334,"props":3441,"children":3443},{"className":3442},[],[3444],{"type":25,"value":3315},{"type":25,"value":3446}," 订阅自己的博客而忽略博客本身，这样可以更专注于写作。",{"type":20,"tag":21,"props":3448,"children":3449},{},[3450],{"type":25,"value":3451},"这次的博客更多是内心表达的冲动一直驱使着我，想要写下什么东西。我也时常怀疑自己——表达的方式真的只有这种吗？因此我也迟疑了很久，没有在网上写博客。而是在其他地方更隐私的地方零零碎碎地写下一些东西。但只是心血来潮写写罢了，三天打鱼两天晒网，其实和没写也没区别。",{"type":20,"tag":21,"props":3453,"children":3454},{},[3455],{"type":25,"value":3456},"不过这次就不一样了。",{"type":20,"tag":21,"props":3458,"children":3459},{},[3460],{"type":25,"value":3461},"哈哈？",{"type":20,"tag":21,"props":3463,"children":3464},{},[3465],{"type":25,"value":3466},"如此吧。",{"title":8,"searchDepth":201,"depth":202,"links":3468},[],"content:posts:BlogRelife.md","posts\u002FBlogRelife.md","posts\u002FBlogRelife",{"_path":3473,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":3474,"description":3475,"categories":3476,"mathjax":7,"date":3477,"tags":3478,"body":3481,"_type":207,"_id":6582,"_source":209,"_file":6583,"_stem":6584,"_extension":212},"\u002Fposts\u002Fwindows11","从零配置 Windows11 开发环境","爽快的开发感从这里开始！","他玉集","2023-09-05 10:00:52",[3479,3480],"软件环境","Windows",{"type":17,"children":3482,"toc":6569},[3483,3495,3503,3508,3513,3518,3523,3546,3551,3588,3593,3611,3616,3746,3751,3770,3829,3834,3927,3932,3945,3950,4024,4035,4050,4061,4077,4090,4123,4144,4155,4160,4165,4170,4175,4180,4188,4316,4321,4326,4361,4378,4383,4407,4412,4417,4452,4457,4476,4481,4604,4609,4615,4625,4765,4770,4927,4932,4937,4958,4963,5033,5039,5045,5050,5139,5161,5538,5543,5548,5577,5582,5640,5646,5744,5750,5755,5760,5878,5883,5929,5942,6068,6073,6077,6132,6137,6223,6228,6275,6280,6361,6390,6432,6438,6443,6471,6476,6519,6524,6551,6565],{"type":20,"tag":21,"props":3484,"children":3485},{},[3486,3488],{"type":25,"value":3487},"Fork from: ",{"type":20,"tag":64,"props":3489,"children":3492},{"href":3490,"rel":3491},"https:\u002F\u002Fkirigaya.cn\u002Fblog\u002Farticle?seq=28",[68],[3493],{"type":25,"value":3494},"汇尘轩 - 锦恢的博客 (kirigaya.cn)",{"type":20,"tag":1881,"props":3496,"children":3497},{},[3498],{"type":20,"tag":21,"props":3499,"children":3500},{},[3501],{"type":25,"value":3502},"There is no end though there is a start in space. ---Infinity.",{"type":20,"tag":21,"props":3504,"children":3505},{},[3506],{"type":25,"value":3507},"记录一下简单的电脑配置流程。按照这个顺序配置即可。",{"type":20,"tag":43,"props":3509,"children":3511},{"id":3510},"windows",[3512],{"type":25,"value":3480},{"type":20,"tag":21,"props":3514,"children":3515},{},[3516],{"type":25,"value":3517},"必须是Win11，因为我需要这个版本上面的一些特性，或是功能性的，或是装饰性的。",{"type":20,"tag":21,"props":3519,"children":3520},{},[3521],{"type":25,"value":3522},"一、登录微软账号",{"type":20,"tag":1573,"props":3524,"children":3525},{},[3526,3531,3536,3541],{"type":20,"tag":640,"props":3527,"children":3528},{},[3529],{"type":25,"value":3530},"同步部分OS配置",{"type":20,"tag":640,"props":3532,"children":3533},{},[3534],{"type":25,"value":3535},"同步edge",{"type":20,"tag":640,"props":3537,"children":3538},{},[3539],{"type":25,"value":3540},"同步应用商店",{"type":20,"tag":640,"props":3542,"children":3543},{},[3544],{"type":25,"value":3545},"升级到相应的Win11版本",{"type":20,"tag":21,"props":3547,"children":3548},{},[3549],{"type":25,"value":3550},"二、转移基本的静态文件",{"type":20,"tag":1573,"props":3552,"children":3553},{},[3554,3559,3564,3575],{"type":20,"tag":640,"props":3555,"children":3556},{},[3557],{"type":25,"value":3558},"所有的图片（壁纸+图标+光标）",{"type":20,"tag":640,"props":3560,"children":3561},{},[3562],{"type":25,"value":3563},"所有的额外字体文件（Jetbrain+Nerd等宽字体+几款我喜欢的中文字体）",{"type":20,"tag":640,"props":3565,"children":3566},{},[3567,3573],{"type":20,"tag":334,"props":3568,"children":3570},{"className":3569},[],[3571],{"type":25,"value":3572},".ssh",{"type":25,"value":3574},"文件夹（用于登录服务器）",{"type":20,"tag":640,"props":3576,"children":3577},{},[3578,3580,3586],{"type":25,"value":3579},"windows terminal 的配置文件",{"type":20,"tag":334,"props":3581,"children":3583},{"className":3582},[],[3584],{"type":25,"value":3585},"setting.json",{"type":25,"value":3587},"，并替换本机windows terminal配置文件，将部分的图标路径进行修改。",{"type":20,"tag":21,"props":3589,"children":3590},{},[3591],{"type":25,"value":3592},"三、下载应用软件",{"type":20,"tag":1573,"props":3594,"children":3595},{},[3596,3601,3606],{"type":20,"tag":640,"props":3597,"children":3598},{},[3599],{"type":25,"value":3600},"微软应用商店：Dolby Access（音效）, ScreenMix（录屏）, Snipaste（截屏）、TranslucentTB（美化任务栏）、Starrea（ePub阅读器）",{"type":20,"tag":640,"props":3602,"children":3603},{},[3604],{"type":25,"value":3605},"下载前往魔法址获取SSR订阅，下载并配置CFW。",{"type":20,"tag":640,"props":3607,"children":3608},{},[3609],{"type":25,"value":3610},"网上下载：Google Chrome, FireFox, Tim, 微信, 飞书, 百度网盘, 7z, postman, Office套件, 向日葵, obsidian, OneNote",{"type":20,"tag":21,"props":3612,"children":3613},{},[3614],{"type":25,"value":3615},"四、配置开发环境",{"type":20,"tag":1573,"props":3617,"children":3618},{},[3619,3631],{"type":20,"tag":640,"props":3620,"children":3621},{},[3622,3624],{"type":25,"value":3623},"下载 PowerShell 7.x 最新版本\n官方文档：",{"type":20,"tag":64,"props":3625,"children":3628},{"href":3626,"rel":3627},"https:\u002F\u002Flearn.microsoft.com\u002Fzh-cn\u002Fpowershell\u002Fscripting\u002Finstall\u002Finstalling-powershell-on-windows?view=powershell-7.3#msi",[68],[3629],{"type":25,"value":3630},"在 Windows 上安装 PowerShell - PowerShell | Microsoft Learn",{"type":20,"tag":640,"props":3632,"children":3633},{},[3634,3636],{"type":25,"value":3635},"删除和python默认起冲突的可执行文件。使用管理员权限打开powershell，输入：",{"type":20,"tag":327,"props":3637,"children":3641},{"className":3638,"code":3639,"language":3640,"meta":8,"style":8},"language-sh shiki shiki-themes github-light github-dark","cd C:\\Users\\\u003C用户名>\\AppData\\Local\\Microsoft\\WindowsApps\nrm python*\n","sh",[3642],{"type":20,"tag":334,"props":3643,"children":3644},{"__ignoreMap":8},[3645,3728],{"type":20,"tag":338,"props":3646,"children":3647},{"class":340,"line":341},[3648,3653,3658,3663,3668,3673,3678,3683,3688,3693,3698,3703,3708,3713,3718,3723],{"type":20,"tag":338,"props":3649,"children":3650},{"style":1088},[3651],{"type":25,"value":3652},"cd",{"type":20,"tag":338,"props":3654,"children":3655},{"style":888},[3656],{"type":25,"value":3657}," C:",{"type":20,"tag":338,"props":3659,"children":3660},{"style":1088},[3661],{"type":25,"value":3662},"\\U",{"type":20,"tag":338,"props":3664,"children":3665},{"style":888},[3666],{"type":25,"value":3667},"sers",{"type":20,"tag":338,"props":3669,"children":3670},{"style":1088},[3671],{"type":25,"value":3672},"\\\u003C",{"type":20,"tag":338,"props":3674,"children":3675},{"style":888},[3676],{"type":25,"value":3677},"用户",{"type":20,"tag":338,"props":3679,"children":3680},{"style":1266},[3681],{"type":25,"value":3682},"名",{"type":20,"tag":338,"props":3684,"children":3685},{"style":1272},[3686],{"type":25,"value":3687},">",{"type":20,"tag":338,"props":3689,"children":3690},{"style":1088},[3691],{"type":25,"value":3692},"\\A",{"type":20,"tag":338,"props":3694,"children":3695},{"style":888},[3696],{"type":25,"value":3697},"ppData",{"type":20,"tag":338,"props":3699,"children":3700},{"style":1088},[3701],{"type":25,"value":3702},"\\L",{"type":20,"tag":338,"props":3704,"children":3705},{"style":888},[3706],{"type":25,"value":3707},"ocal",{"type":20,"tag":338,"props":3709,"children":3710},{"style":1088},[3711],{"type":25,"value":3712},"\\M",{"type":20,"tag":338,"props":3714,"children":3715},{"style":888},[3716],{"type":25,"value":3717},"icrosoft",{"type":20,"tag":338,"props":3719,"children":3720},{"style":1088},[3721],{"type":25,"value":3722},"\\W",{"type":20,"tag":338,"props":3724,"children":3725},{"style":888},[3726],{"type":25,"value":3727},"indowsApps\n",{"type":20,"tag":338,"props":3729,"children":3730},{"class":340,"line":201},[3731,3736,3741],{"type":20,"tag":338,"props":3732,"children":3733},{"style":882},[3734],{"type":25,"value":3735},"rm",{"type":20,"tag":338,"props":3737,"children":3738},{"style":888},[3739],{"type":25,"value":3740}," python",{"type":20,"tag":338,"props":3742,"children":3743},{"style":1088},[3744],{"type":25,"value":3745},"*\n",{"type":20,"tag":21,"props":3747,"children":3748},{},[3749],{"type":25,"value":3750},"2.下载 Git",{"type":20,"tag":1573,"props":3752,"children":3753},{},[3754,3765],{"type":20,"tag":640,"props":3755,"children":3756},{},[3757,3759],{"type":25,"value":3758},"前往 ",{"type":20,"tag":64,"props":3760,"children":3763},{"href":3761,"rel":3762},"https:\u002F\u002Fgit-scm.com\u002Fdownload\u002Fwin",[68],[3764],{"type":25,"value":3761},{"type":20,"tag":640,"props":3766,"children":3767},{},[3768],{"type":25,"value":3769},"配置信息：",{"type":20,"tag":327,"props":3771,"children":3773},{"className":3638,"code":3772,"language":3640,"meta":8,"style":8},"git config --global user.email xxx\ngit config --global user.name xxx\n",[3774],{"type":20,"tag":334,"props":3775,"children":3776},{"__ignoreMap":8},[3777,3805],{"type":20,"tag":338,"props":3778,"children":3779},{"class":340,"line":341},[3780,3785,3790,3795,3800],{"type":20,"tag":338,"props":3781,"children":3782},{"style":882},[3783],{"type":25,"value":3784},"git",{"type":20,"tag":338,"props":3786,"children":3787},{"style":888},[3788],{"type":25,"value":3789}," config",{"type":20,"tag":338,"props":3791,"children":3792},{"style":1088},[3793],{"type":25,"value":3794}," --global",{"type":20,"tag":338,"props":3796,"children":3797},{"style":888},[3798],{"type":25,"value":3799}," user.email",{"type":20,"tag":338,"props":3801,"children":3802},{"style":888},[3803],{"type":25,"value":3804}," xxx\n",{"type":20,"tag":338,"props":3806,"children":3807},{"class":340,"line":201},[3808,3812,3816,3820,3825],{"type":20,"tag":338,"props":3809,"children":3810},{"style":882},[3811],{"type":25,"value":3784},{"type":20,"tag":338,"props":3813,"children":3814},{"style":888},[3815],{"type":25,"value":3789},{"type":20,"tag":338,"props":3817,"children":3818},{"style":1088},[3819],{"type":25,"value":3794},{"type":20,"tag":338,"props":3821,"children":3822},{"style":888},[3823],{"type":25,"value":3824}," user.name",{"type":20,"tag":338,"props":3826,"children":3827},{"style":888},[3828],{"type":25,"value":3804},{"type":20,"tag":21,"props":3830,"children":3831},{},[3832],{"type":25,"value":3833},"3.设置代理：",{"type":20,"tag":327,"props":3835,"children":3837},{"className":3638,"code":3836,"language":3640,"meta":8,"style":8},"git config --global http.proxy http:\u002F\u002F127.0.0.1:\u003C端口号>\ngit config --global https.proxy https:\u002F\u002F127.0.0.1:\u003C端口号>\n",[3838],{"type":20,"tag":334,"props":3839,"children":3840},{"__ignoreMap":8},[3841,3886],{"type":20,"tag":338,"props":3842,"children":3843},{"class":340,"line":341},[3844,3848,3852,3856,3861,3866,3871,3876,3881],{"type":20,"tag":338,"props":3845,"children":3846},{"style":882},[3847],{"type":25,"value":3784},{"type":20,"tag":338,"props":3849,"children":3850},{"style":888},[3851],{"type":25,"value":3789},{"type":20,"tag":338,"props":3853,"children":3854},{"style":1088},[3855],{"type":25,"value":3794},{"type":20,"tag":338,"props":3857,"children":3858},{"style":888},[3859],{"type":25,"value":3860}," http.proxy",{"type":20,"tag":338,"props":3862,"children":3863},{"style":888},[3864],{"type":25,"value":3865}," http:\u002F\u002F127.0.0.1:",{"type":20,"tag":338,"props":3867,"children":3868},{"style":1272},[3869],{"type":25,"value":3870},"\u003C",{"type":20,"tag":338,"props":3872,"children":3873},{"style":888},[3874],{"type":25,"value":3875},"端口",{"type":20,"tag":338,"props":3877,"children":3878},{"style":1266},[3879],{"type":25,"value":3880},"号",{"type":20,"tag":338,"props":3882,"children":3883},{"style":1272},[3884],{"type":25,"value":3885},">\n",{"type":20,"tag":338,"props":3887,"children":3888},{"class":340,"line":201},[3889,3893,3897,3901,3906,3911,3915,3919,3923],{"type":20,"tag":338,"props":3890,"children":3891},{"style":882},[3892],{"type":25,"value":3784},{"type":20,"tag":338,"props":3894,"children":3895},{"style":888},[3896],{"type":25,"value":3789},{"type":20,"tag":338,"props":3898,"children":3899},{"style":1088},[3900],{"type":25,"value":3794},{"type":20,"tag":338,"props":3902,"children":3903},{"style":888},[3904],{"type":25,"value":3905}," https.proxy",{"type":20,"tag":338,"props":3907,"children":3908},{"style":888},[3909],{"type":25,"value":3910}," https:\u002F\u002F127.0.0.1:",{"type":20,"tag":338,"props":3912,"children":3913},{"style":1272},[3914],{"type":25,"value":3870},{"type":20,"tag":338,"props":3916,"children":3917},{"style":888},[3918],{"type":25,"value":3875},{"type":20,"tag":338,"props":3920,"children":3921},{"style":1266},[3922],{"type":25,"value":3880},{"type":20,"tag":338,"props":3924,"children":3925},{"style":1272},[3926],{"type":25,"value":3885},{"type":20,"tag":21,"props":3928,"children":3929},{},[3930],{"type":25,"value":3931},"3.安装python",{"type":20,"tag":21,"props":3933,"children":3934},{},[3935,3937,3943],{"type":25,"value":3936},"1.去 ",{"type":20,"tag":64,"props":3938,"children":3941},{"href":3939,"rel":3940},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002Fwindows\u002F",[68],[3942],{"type":25,"value":3939},{"type":25,"value":3944}," 寻找稳定版本的x64可执行文件下载",{"type":20,"tag":21,"props":3946,"children":3947},{},[3948],{"type":25,"value":3949},"2.配置pip源：",{"type":20,"tag":327,"props":3951,"children":3953},{"className":3638,"code":3952,"language":3640,"meta":8,"style":8},"pip config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\npip config set global.proxy http:\u002F\u002F127.0.0.1:\u003C端口号>\n",[3954],{"type":20,"tag":334,"props":3955,"children":3956},{"__ignoreMap":8},[3957,3984],{"type":20,"tag":338,"props":3958,"children":3959},{"class":340,"line":341},[3960,3965,3969,3974,3979],{"type":20,"tag":338,"props":3961,"children":3962},{"style":882},[3963],{"type":25,"value":3964},"pip",{"type":20,"tag":338,"props":3966,"children":3967},{"style":888},[3968],{"type":25,"value":3789},{"type":20,"tag":338,"props":3970,"children":3971},{"style":888},[3972],{"type":25,"value":3973}," set",{"type":20,"tag":338,"props":3975,"children":3976},{"style":888},[3977],{"type":25,"value":3978}," global.index-url",{"type":20,"tag":338,"props":3980,"children":3981},{"style":888},[3982],{"type":25,"value":3983}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",{"type":20,"tag":338,"props":3985,"children":3986},{"class":340,"line":201},[3987,3991,3995,3999,4004,4008,4012,4016,4020],{"type":20,"tag":338,"props":3988,"children":3989},{"style":882},[3990],{"type":25,"value":3964},{"type":20,"tag":338,"props":3992,"children":3993},{"style":888},[3994],{"type":25,"value":3789},{"type":20,"tag":338,"props":3996,"children":3997},{"style":888},[3998],{"type":25,"value":3973},{"type":20,"tag":338,"props":4000,"children":4001},{"style":888},[4002],{"type":25,"value":4003}," global.proxy",{"type":20,"tag":338,"props":4005,"children":4006},{"style":888},[4007],{"type":25,"value":3865},{"type":20,"tag":338,"props":4009,"children":4010},{"style":1272},[4011],{"type":25,"value":3870},{"type":20,"tag":338,"props":4013,"children":4014},{"style":888},[4015],{"type":25,"value":3875},{"type":20,"tag":338,"props":4017,"children":4018},{"style":1266},[4019],{"type":25,"value":3880},{"type":20,"tag":338,"props":4021,"children":4022},{"style":1272},[4023],{"type":25,"value":3885},{"type":20,"tag":21,"props":4025,"children":4026},{},[4027,4029],{"type":25,"value":4028},"4.安装MinGW ",{"type":20,"tag":64,"props":4030,"children":4033},{"href":4031,"rel":4032},"https:\u002F\u002Fsourceforge.net\u002Fprojects\u002Fmingw\u002F",[68],[4034],{"type":25,"value":4031},{"type":20,"tag":1881,"props":4036,"children":4037},{},[4038],{"type":20,"tag":21,"props":4039,"children":4040},{},[4041,4043],{"type":25,"value":4042},"忘记安装配置怎么选看",{"type":20,"tag":64,"props":4044,"children":4047},{"href":4045,"rel":4046},"https:\u002F\u002Fblog.csdn.net\u002FQuantumYou\u002Farticle\u002Fdetails\u002F119676283",[68],[4048],{"type":25,"value":4049},"这篇博客",{"type":20,"tag":21,"props":4051,"children":4052},{},[4053,4055],{"type":25,"value":4054},"5.安装cmake ",{"type":20,"tag":64,"props":4056,"children":4059},{"href":4057,"rel":4058},"https:\u002F\u002Fcmake.org\u002Fdownload\u002F",[68],[4060],{"type":25,"value":4057},{"type":20,"tag":1881,"props":4062,"children":4063},{},[4064],{"type":20,"tag":21,"props":4065,"children":4066},{},[4067,4069,4075],{"type":25,"value":4068},"如果安装了VS，可以查看路径",{"type":20,"tag":334,"props":4070,"children":4072},{"className":4071},[],[4073],{"type":25,"value":4074},"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\CommonExtensions\\Microsoft\\CMake\\CMake\\bin",{"type":25,"value":4076},"，这里面存在VS构建的cmake，上面的cmake可以不用下载。",{"type":20,"tag":21,"props":4078,"children":4079},{},[4080,4082,4088],{"type":25,"value":4081},"6.安装node ",{"type":20,"tag":64,"props":4083,"children":4086},{"href":4084,"rel":4085},"https:\u002F\u002Fnodejs.org\u002Fen\u002Fdownload\u002F",[68],[4087],{"type":25,"value":4084},{"type":25,"value":4089},"\nnpm 换源：",{"type":20,"tag":327,"props":4091,"children":4093},{"className":3638,"code":4092,"language":3640,"meta":8,"style":8},"npm config set registry https:\u002F\u002Fregistry.npm.taobao.org\n",[4094],{"type":20,"tag":334,"props":4095,"children":4096},{"__ignoreMap":8},[4097],{"type":20,"tag":338,"props":4098,"children":4099},{"class":340,"line":341},[4100,4105,4109,4113,4118],{"type":20,"tag":338,"props":4101,"children":4102},{"style":882},[4103],{"type":25,"value":4104},"npm",{"type":20,"tag":338,"props":4106,"children":4107},{"style":888},[4108],{"type":25,"value":3789},{"type":20,"tag":338,"props":4110,"children":4111},{"style":888},[4112],{"type":25,"value":3973},{"type":20,"tag":338,"props":4114,"children":4115},{"style":888},[4116],{"type":25,"value":4117}," registry",{"type":20,"tag":338,"props":4119,"children":4120},{"style":888},[4121],{"type":25,"value":4122}," https:\u002F\u002Fregistry.npm.taobao.org\n",{"type":20,"tag":21,"props":4124,"children":4125},{},[4126,4128,4134,4136,4142],{"type":25,"value":4127},"7.安装go\n1. 找到安装 ",{"type":20,"tag":64,"props":4129,"children":4132},{"href":4130,"rel":4131},"https:\u002F\u002Fgolang.google.cn\u002Fdl\u002F",[68],[4133],{"type":25,"value":4130},{"type":25,"value":4135},"\n2. 配置：\n",{"type":20,"tag":334,"props":4137,"children":4139},{"className":4138},[],[4140],{"type":25,"value":4141},"shell      go env -w GO111MODULE=on      go env -w GOPROXY=https:\u002F\u002Fgoproxy.cn,direct     ",{"type":25,"value":4143},"\n3.如果有必要，设置GOROOT和GOPATH环境变量",{"type":20,"tag":21,"props":4145,"children":4146},{},[4147,4149],{"type":25,"value":4148},"8.安装Java：",{"type":20,"tag":64,"props":4150,"children":4153},{"href":4151,"rel":4152},"https:\u002F\u002Fwww.oracle.com\u002Fhk\u002Fjava\u002Ftechnologies\u002Fdownloads\u002F",[68],[4154],{"type":25,"value":4151},{"type":20,"tag":21,"props":4156,"children":4157},{},[4158],{"type":25,"value":4159},"9.测试以上编译器、解释器能否正常工作。",{"type":20,"tag":21,"props":4161,"children":4162},{},[4163],{"type":25,"value":4164},"10.安装vscode（科学上网），安装后打开并登录GitHub账号进行配置与插件同步（等到左下角的“正在同步”消失后，就可以退出了）",{"type":20,"tag":21,"props":4166,"children":4167},{},[4168],{"type":25,"value":4169},"11.安装VS2022（反正是最新版的就行），安装windows通用开发和C++的。",{"type":20,"tag":21,"props":4171,"children":4172},{},[4173],{"type":25,"value":4174},"五、配置终端",{"type":20,"tag":21,"props":4176,"children":4177},{},[4178],{"type":25,"value":4179},"以管理员权限打开windows terminal，执行下面的指令",{"type":20,"tag":1573,"props":4181,"children":4182},{},[4183],{"type":20,"tag":640,"props":4184,"children":4185},{},[4186],{"type":25,"value":4187},"配置 powershell，安装powershell插件",{"type":20,"tag":327,"props":4189,"children":4191},{"className":3638,"code":4190,"language":3640,"meta":8,"style":8},"# 允许运行Install-Module脚本\nset-executionpolicy remotesigned\n\n# 更新最新版本的PSReadLine，为了自动补全\nInstall-Module PSReadLine -Force\n\n# 创建powershell 的初始化脚本，点击确认创建即可\nnotepad $profile\n\n# 安装几个插件\nInstall-Module posh-git\nInstall-Module Terminal-Icons\n",[4192],{"type":20,"tag":334,"props":4193,"children":4194},{"__ignoreMap":8},[4195,4203,4216,4223,4231,4249,4256,4264,4277,4284,4292,4304],{"type":20,"tag":338,"props":4196,"children":4197},{"class":340,"line":341},[4198],{"type":20,"tag":338,"props":4199,"children":4200},{"style":910},[4201],{"type":25,"value":4202},"# 允许运行Install-Module脚本\n",{"type":20,"tag":338,"props":4204,"children":4205},{"class":340,"line":201},[4206,4211],{"type":20,"tag":338,"props":4207,"children":4208},{"style":882},[4209],{"type":25,"value":4210},"set-executionpolicy",{"type":20,"tag":338,"props":4212,"children":4213},{"style":888},[4214],{"type":25,"value":4215}," remotesigned\n",{"type":20,"tag":338,"props":4217,"children":4218},{"class":340,"line":202},[4219],{"type":20,"tag":338,"props":4220,"children":4221},{"emptyLinePlaceholder":470},[4222],{"type":25,"value":473},{"type":20,"tag":338,"props":4224,"children":4225},{"class":340,"line":366},[4226],{"type":20,"tag":338,"props":4227,"children":4228},{"style":910},[4229],{"type":25,"value":4230},"# 更新最新版本的PSReadLine，为了自动补全\n",{"type":20,"tag":338,"props":4232,"children":4233},{"class":340,"line":375},[4234,4239,4244],{"type":20,"tag":338,"props":4235,"children":4236},{"style":882},[4237],{"type":25,"value":4238},"Install-Module",{"type":20,"tag":338,"props":4240,"children":4241},{"style":888},[4242],{"type":25,"value":4243}," PSReadLine",{"type":20,"tag":338,"props":4245,"children":4246},{"style":1088},[4247],{"type":25,"value":4248}," -Force\n",{"type":20,"tag":338,"props":4250,"children":4251},{"class":340,"line":384},[4252],{"type":20,"tag":338,"props":4253,"children":4254},{"emptyLinePlaceholder":470},[4255],{"type":25,"value":473},{"type":20,"tag":338,"props":4257,"children":4258},{"class":340,"line":457},[4259],{"type":20,"tag":338,"props":4260,"children":4261},{"style":910},[4262],{"type":25,"value":4263},"# 创建powershell 的初始化脚本，点击确认创建即可\n",{"type":20,"tag":338,"props":4265,"children":4266},{"class":340,"line":466},[4267,4272],{"type":20,"tag":338,"props":4268,"children":4269},{"style":882},[4270],{"type":25,"value":4271},"notepad",{"type":20,"tag":338,"props":4273,"children":4274},{"style":1266},[4275],{"type":25,"value":4276}," $profile\n",{"type":20,"tag":338,"props":4278,"children":4279},{"class":340,"line":476},[4280],{"type":20,"tag":338,"props":4281,"children":4282},{"emptyLinePlaceholder":470},[4283],{"type":25,"value":473},{"type":20,"tag":338,"props":4285,"children":4286},{"class":340,"line":485},[4287],{"type":20,"tag":338,"props":4288,"children":4289},{"style":910},[4290],{"type":25,"value":4291},"# 安装几个插件\n",{"type":20,"tag":338,"props":4293,"children":4294},{"class":340,"line":494},[4295,4299],{"type":20,"tag":338,"props":4296,"children":4297},{"style":882},[4298],{"type":25,"value":4238},{"type":20,"tag":338,"props":4300,"children":4301},{"style":888},[4302],{"type":25,"value":4303}," posh-git\n",{"type":20,"tag":338,"props":4305,"children":4306},{"class":340,"line":502},[4307,4311],{"type":20,"tag":338,"props":4308,"children":4309},{"style":882},[4310],{"type":25,"value":4238},{"type":20,"tag":338,"props":4312,"children":4313},{"style":888},[4314],{"type":25,"value":4315}," Terminal-Icons\n",{"type":20,"tag":21,"props":4317,"children":4318},{},[4319],{"type":25,"value":4320},"2.安装并配置oh-my-posh",{"type":20,"tag":21,"props":4322,"children":4323},{},[4324],{"type":25,"value":4325},"1.安装oh-my-posh",{"type":20,"tag":327,"props":4327,"children":4329},{"className":3638,"code":4328,"language":3640,"meta":8,"style":8},"winget install JanDeDobbeleer.OhMyPosh -s winget\n",[4330],{"type":20,"tag":334,"props":4331,"children":4332},{"__ignoreMap":8},[4333],{"type":20,"tag":338,"props":4334,"children":4335},{"class":340,"line":341},[4336,4341,4346,4351,4356],{"type":20,"tag":338,"props":4337,"children":4338},{"style":882},[4339],{"type":25,"value":4340},"winget",{"type":20,"tag":338,"props":4342,"children":4343},{"style":888},[4344],{"type":25,"value":4345}," install",{"type":20,"tag":338,"props":4347,"children":4348},{"style":888},[4349],{"type":25,"value":4350}," JanDeDobbeleer.OhMyPosh",{"type":20,"tag":338,"props":4352,"children":4353},{"style":1088},[4354],{"type":25,"value":4355}," -s",{"type":20,"tag":338,"props":4357,"children":4358},{"style":888},[4359],{"type":25,"value":4360}," winget\n",{"type":20,"tag":1881,"props":4362,"children":4363},{},[4364],{"type":20,"tag":21,"props":4365,"children":4366},{},[4367,4369,4376],{"type":25,"value":4368},"如果该方法失效，移步",{"type":20,"tag":64,"props":4370,"children":4373},{"href":4371,"rel":4372},"https:\u002F\u002Fohmyposh.dev\u002Fdocs\u002Finstallation\u002Fwindows",[68],[4374],{"type":25,"value":4375},"oh-my-posh windows set up",{"type":25,"value":4377},"查看最新安装方法",{"type":20,"tag":21,"props":4379,"children":4380},{},[4381],{"type":25,"value":4382},"2.下载oh-my-posh主题",{"type":20,"tag":327,"props":4384,"children":4386},{"className":3638,"code":4385,"language":3640,"meta":8,"style":8},"git clone https:\u002F\u002Fgithub.com\u002FJanDeDobbeleer\u002Foh-my-posh \n",[4387],{"type":20,"tag":334,"props":4388,"children":4389},{"__ignoreMap":8},[4390],{"type":20,"tag":338,"props":4391,"children":4392},{"class":340,"line":341},[4393,4397,4402],{"type":20,"tag":338,"props":4394,"children":4395},{"style":882},[4396],{"type":25,"value":3784},{"type":20,"tag":338,"props":4398,"children":4399},{"style":888},[4400],{"type":25,"value":4401}," clone",{"type":20,"tag":338,"props":4403,"children":4404},{"style":888},[4405],{"type":25,"value":4406}," https:\u002F\u002Fgithub.com\u002FJanDeDobbeleer\u002Foh-my-posh\n",{"type":20,"tag":21,"props":4408,"children":4409},{},[4410],{"type":25,"value":4411},"将里面的theme文件夹保留即可。",{"type":20,"tag":21,"props":4413,"children":4414},{},[4415],{"type":25,"value":4416},"3.测试",{"type":20,"tag":327,"props":4418,"children":4420},{"className":3638,"code":4419,"language":3640,"meta":8,"style":8},"oh-my-posh init pwsh | Invoke-Expression\n",[4421],{"type":20,"tag":334,"props":4422,"children":4423},{"__ignoreMap":8},[4424],{"type":20,"tag":338,"props":4425,"children":4426},{"class":340,"line":341},[4427,4432,4437,4442,4447],{"type":20,"tag":338,"props":4428,"children":4429},{"style":882},[4430],{"type":25,"value":4431},"oh-my-posh",{"type":20,"tag":338,"props":4433,"children":4434},{"style":888},[4435],{"type":25,"value":4436}," init",{"type":20,"tag":338,"props":4438,"children":4439},{"style":888},[4440],{"type":25,"value":4441}," pwsh",{"type":20,"tag":338,"props":4443,"children":4444},{"style":1272},[4445],{"type":25,"value":4446}," |",{"type":20,"tag":338,"props":4448,"children":4449},{"style":882},[4450],{"type":25,"value":4451}," Invoke-Expression\n",{"type":20,"tag":21,"props":4453,"children":4454},{},[4455],{"type":25,"value":4456},"3.配置整体运行文件",{"type":20,"tag":327,"props":4458,"children":4460},{"className":3638,"code":4459,"language":3640,"meta":8,"style":8},"notepad++ $profile\n",[4461],{"type":20,"tag":334,"props":4462,"children":4463},{"__ignoreMap":8},[4464],{"type":20,"tag":338,"props":4465,"children":4466},{"class":340,"line":341},[4467,4472],{"type":20,"tag":338,"props":4468,"children":4469},{"style":882},[4470],{"type":25,"value":4471},"notepad++",{"type":20,"tag":338,"props":4473,"children":4474},{"style":1266},[4475],{"type":25,"value":4276},{"type":20,"tag":21,"props":4477,"children":4478},{},[4479],{"type":25,"value":4480},"将以下文本写入其中：",{"type":20,"tag":327,"props":4482,"children":4484},{"className":3638,"code":4483,"language":3640,"meta":8,"style":8},"oh-my-posh init pwsh --config \u003C主题路径（json文件）> | Invoke-Expression\nImport-Module posh-git\nImport-Module Terminal-Icons\nSet-PSReadLineOption -PredictionSource History\nSet-PSReadlineKeyHandler -Key Tab -Function MenuComplete\n",[4485],{"type":20,"tag":334,"props":4486,"children":4487},{"__ignoreMap":8},[4488,4535,4547,4558,4576],{"type":20,"tag":338,"props":4489,"children":4490},{"class":340,"line":341},[4491,4495,4499,4503,4508,4513,4518,4523,4527,4531],{"type":20,"tag":338,"props":4492,"children":4493},{"style":882},[4494],{"type":25,"value":4431},{"type":20,"tag":338,"props":4496,"children":4497},{"style":888},[4498],{"type":25,"value":4436},{"type":20,"tag":338,"props":4500,"children":4501},{"style":888},[4502],{"type":25,"value":4441},{"type":20,"tag":338,"props":4504,"children":4505},{"style":1088},[4506],{"type":25,"value":4507}," --config",{"type":20,"tag":338,"props":4509,"children":4510},{"style":1272},[4511],{"type":25,"value":4512}," \u003C",{"type":20,"tag":338,"props":4514,"children":4515},{"style":888},[4516],{"type":25,"value":4517},"主题路径（json文件",{"type":20,"tag":338,"props":4519,"children":4520},{"style":1266},[4521],{"type":25,"value":4522},"）",{"type":20,"tag":338,"props":4524,"children":4525},{"style":1272},[4526],{"type":25,"value":3687},{"type":20,"tag":338,"props":4528,"children":4529},{"style":1272},[4530],{"type":25,"value":4446},{"type":20,"tag":338,"props":4532,"children":4533},{"style":882},[4534],{"type":25,"value":4451},{"type":20,"tag":338,"props":4536,"children":4537},{"class":340,"line":201},[4538,4543],{"type":20,"tag":338,"props":4539,"children":4540},{"style":882},[4541],{"type":25,"value":4542},"Import-Module",{"type":20,"tag":338,"props":4544,"children":4545},{"style":888},[4546],{"type":25,"value":4303},{"type":20,"tag":338,"props":4548,"children":4549},{"class":340,"line":202},[4550,4554],{"type":20,"tag":338,"props":4551,"children":4552},{"style":882},[4553],{"type":25,"value":4542},{"type":20,"tag":338,"props":4555,"children":4556},{"style":888},[4557],{"type":25,"value":4315},{"type":20,"tag":338,"props":4559,"children":4560},{"class":340,"line":366},[4561,4566,4571],{"type":20,"tag":338,"props":4562,"children":4563},{"style":882},[4564],{"type":25,"value":4565},"Set-PSReadLineOption",{"type":20,"tag":338,"props":4567,"children":4568},{"style":1088},[4569],{"type":25,"value":4570}," -PredictionSource",{"type":20,"tag":338,"props":4572,"children":4573},{"style":888},[4574],{"type":25,"value":4575}," History\n",{"type":20,"tag":338,"props":4577,"children":4578},{"class":340,"line":375},[4579,4584,4589,4594,4599],{"type":20,"tag":338,"props":4580,"children":4581},{"style":882},[4582],{"type":25,"value":4583},"Set-PSReadlineKeyHandler",{"type":20,"tag":338,"props":4585,"children":4586},{"style":1088},[4587],{"type":25,"value":4588}," -Key",{"type":20,"tag":338,"props":4590,"children":4591},{"style":888},[4592],{"type":25,"value":4593}," Tab",{"type":20,"tag":338,"props":4595,"children":4596},{"style":1088},[4597],{"type":25,"value":4598}," -Function",{"type":20,"tag":338,"props":4600,"children":4601},{"style":888},[4602],{"type":25,"value":4603}," MenuComplete\n",{"type":20,"tag":21,"props":4605,"children":4606},{},[4607],{"type":25,"value":4608},"重新打开terminal查看安装效果",{"type":20,"tag":43,"props":4610,"children":4612},{"id":4611},"六安装wsl2",[4613],{"type":25,"value":4614},"六、安装WSL2",{"type":20,"tag":21,"props":4616,"children":4617},{},[4618,4623],{"type":20,"tag":136,"props":4619,"children":4620},{},[4621],{"type":25,"value":4622},"以管理员身份",{"type":25,"value":4624},"打开windows terminal",{"type":20,"tag":327,"props":4626,"children":4628},{"className":870,"code":4627,"language":872,"meta":8,"style":8},"# 开启VM组件 开启后需要重启电脑\nEnable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform\n\n# 列出可安装的安装包\nwsl --list --online\n\n# 安装你想要的发行版，我这里是Ubuntu-22.04\nwsl --install -d Ubuntu-22.04\n\n# 设置为wsl2\nwsl --set-default-version 2\n",[4629],{"type":20,"tag":334,"props":4630,"children":4631},{"__ignoreMap":8},[4632,4640,4663,4670,4678,4696,4703,4711,4733,4740,4748],{"type":20,"tag":338,"props":4633,"children":4634},{"class":340,"line":341},[4635],{"type":20,"tag":338,"props":4636,"children":4637},{"style":910},[4638],{"type":25,"value":4639},"# 开启VM组件 开启后需要重启电脑\n",{"type":20,"tag":338,"props":4641,"children":4642},{"class":340,"line":201},[4643,4648,4653,4658],{"type":20,"tag":338,"props":4644,"children":4645},{"style":882},[4646],{"type":25,"value":4647},"Enable-WindowsOptionalFeature",{"type":20,"tag":338,"props":4649,"children":4650},{"style":1088},[4651],{"type":25,"value":4652}," -Online",{"type":20,"tag":338,"props":4654,"children":4655},{"style":1088},[4656],{"type":25,"value":4657}," -FeatureName",{"type":20,"tag":338,"props":4659,"children":4660},{"style":888},[4661],{"type":25,"value":4662}," VirtualMachinePlatform\n",{"type":20,"tag":338,"props":4664,"children":4665},{"class":340,"line":202},[4666],{"type":20,"tag":338,"props":4667,"children":4668},{"emptyLinePlaceholder":470},[4669],{"type":25,"value":473},{"type":20,"tag":338,"props":4671,"children":4672},{"class":340,"line":366},[4673],{"type":20,"tag":338,"props":4674,"children":4675},{"style":910},[4676],{"type":25,"value":4677},"# 列出可安装的安装包\n",{"type":20,"tag":338,"props":4679,"children":4680},{"class":340,"line":375},[4681,4686,4691],{"type":20,"tag":338,"props":4682,"children":4683},{"style":882},[4684],{"type":25,"value":4685},"wsl",{"type":20,"tag":338,"props":4687,"children":4688},{"style":1088},[4689],{"type":25,"value":4690}," --list",{"type":20,"tag":338,"props":4692,"children":4693},{"style":1088},[4694],{"type":25,"value":4695}," --online\n",{"type":20,"tag":338,"props":4697,"children":4698},{"class":340,"line":384},[4699],{"type":20,"tag":338,"props":4700,"children":4701},{"emptyLinePlaceholder":470},[4702],{"type":25,"value":473},{"type":20,"tag":338,"props":4704,"children":4705},{"class":340,"line":457},[4706],{"type":20,"tag":338,"props":4707,"children":4708},{"style":910},[4709],{"type":25,"value":4710},"# 安装你想要的发行版，我这里是Ubuntu-22.04\n",{"type":20,"tag":338,"props":4712,"children":4713},{"class":340,"line":466},[4714,4718,4723,4728],{"type":20,"tag":338,"props":4715,"children":4716},{"style":882},[4717],{"type":25,"value":4685},{"type":20,"tag":338,"props":4719,"children":4720},{"style":1088},[4721],{"type":25,"value":4722}," --install",{"type":20,"tag":338,"props":4724,"children":4725},{"style":1088},[4726],{"type":25,"value":4727}," -d",{"type":20,"tag":338,"props":4729,"children":4730},{"style":888},[4731],{"type":25,"value":4732}," Ubuntu-22.04\n",{"type":20,"tag":338,"props":4734,"children":4735},{"class":340,"line":476},[4736],{"type":20,"tag":338,"props":4737,"children":4738},{"emptyLinePlaceholder":470},[4739],{"type":25,"value":473},{"type":20,"tag":338,"props":4741,"children":4742},{"class":340,"line":485},[4743],{"type":20,"tag":338,"props":4744,"children":4745},{"style":910},[4746],{"type":25,"value":4747},"# 设置为wsl2\n",{"type":20,"tag":338,"props":4749,"children":4750},{"class":340,"line":494},[4751,4755,4760],{"type":20,"tag":338,"props":4752,"children":4753},{"style":882},[4754],{"type":25,"value":4685},{"type":20,"tag":338,"props":4756,"children":4757},{"style":1088},[4758],{"type":25,"value":4759}," --set-default-version",{"type":20,"tag":338,"props":4761,"children":4762},{"style":1088},[4763],{"type":25,"value":4764}," 2\n",{"type":20,"tag":21,"props":4766,"children":4767},{},[4768],{"type":25,"value":4769},"WSL可以简单的创建多个发行版，并进行管理和切换。并且可以对接VS code及Jetbrain(学生可以申请专业版！！快去)等IDE。支持CUDA，docker，并且享受linux命令行的各种工具。掌握使用WSL是重要的。\n现在来举例一些基本的操作。",{"type":20,"tag":327,"props":4771,"children":4773},{"className":870,"code":4772,"language":872,"meta":8,"style":8},"# 列出已安装的Linux发行版\nwsl -l -v\n# 导出\u002F备份\nwsl --export Ubuntu-22.04 Ubuntu-22.04.tar\n# 导入\u002F还原\u002F利用备份创建新的安装\n# wsl --import \u003Cwsl_name> \u003Croute> \u003Csource>\nwsl --import Anaconda C:\\Users\\niina\\root\\var\\wsl\\anaconda\n",[4774],{"type":20,"tag":334,"props":4775,"children":4776},{"__ignoreMap":8},[4777,4785,4802,4810,4832,4840,4848],{"type":20,"tag":338,"props":4778,"children":4779},{"class":340,"line":341},[4780],{"type":20,"tag":338,"props":4781,"children":4782},{"style":910},[4783],{"type":25,"value":4784},"# 列出已安装的Linux发行版\n",{"type":20,"tag":338,"props":4786,"children":4787},{"class":340,"line":201},[4788,4792,4797],{"type":20,"tag":338,"props":4789,"children":4790},{"style":882},[4791],{"type":25,"value":4685},{"type":20,"tag":338,"props":4793,"children":4794},{"style":1088},[4795],{"type":25,"value":4796}," -l",{"type":20,"tag":338,"props":4798,"children":4799},{"style":1088},[4800],{"type":25,"value":4801}," -v\n",{"type":20,"tag":338,"props":4803,"children":4804},{"class":340,"line":202},[4805],{"type":20,"tag":338,"props":4806,"children":4807},{"style":910},[4808],{"type":25,"value":4809},"# 导出\u002F备份\n",{"type":20,"tag":338,"props":4811,"children":4812},{"class":340,"line":366},[4813,4817,4822,4827],{"type":20,"tag":338,"props":4814,"children":4815},{"style":882},[4816],{"type":25,"value":4685},{"type":20,"tag":338,"props":4818,"children":4819},{"style":1088},[4820],{"type":25,"value":4821}," --export",{"type":20,"tag":338,"props":4823,"children":4824},{"style":888},[4825],{"type":25,"value":4826}," Ubuntu-22.04",{"type":20,"tag":338,"props":4828,"children":4829},{"style":888},[4830],{"type":25,"value":4831}," Ubuntu-22.04.tar\n",{"type":20,"tag":338,"props":4833,"children":4834},{"class":340,"line":375},[4835],{"type":20,"tag":338,"props":4836,"children":4837},{"style":910},[4838],{"type":25,"value":4839},"# 导入\u002F还原\u002F利用备份创建新的安装\n",{"type":20,"tag":338,"props":4841,"children":4842},{"class":340,"line":384},[4843],{"type":20,"tag":338,"props":4844,"children":4845},{"style":910},[4846],{"type":25,"value":4847},"# wsl --import \u003Cwsl_name> \u003Croute> \u003Csource>\n",{"type":20,"tag":338,"props":4849,"children":4850},{"class":340,"line":457},[4851,4855,4860,4865,4869,4873,4877,4882,4887,4892,4897,4902,4907,4912,4917,4922],{"type":20,"tag":338,"props":4852,"children":4853},{"style":882},[4854],{"type":25,"value":4685},{"type":20,"tag":338,"props":4856,"children":4857},{"style":1088},[4858],{"type":25,"value":4859}," --import",{"type":20,"tag":338,"props":4861,"children":4862},{"style":888},[4863],{"type":25,"value":4864}," Anaconda",{"type":20,"tag":338,"props":4866,"children":4867},{"style":888},[4868],{"type":25,"value":3657},{"type":20,"tag":338,"props":4870,"children":4871},{"style":1088},[4872],{"type":25,"value":3662},{"type":20,"tag":338,"props":4874,"children":4875},{"style":888},[4876],{"type":25,"value":3667},{"type":20,"tag":338,"props":4878,"children":4879},{"style":1088},[4880],{"type":25,"value":4881},"\\n",{"type":20,"tag":338,"props":4883,"children":4884},{"style":888},[4885],{"type":25,"value":4886},"iina",{"type":20,"tag":338,"props":4888,"children":4889},{"style":1088},[4890],{"type":25,"value":4891},"\\r",{"type":20,"tag":338,"props":4893,"children":4894},{"style":888},[4895],{"type":25,"value":4896},"oot",{"type":20,"tag":338,"props":4898,"children":4899},{"style":1088},[4900],{"type":25,"value":4901},"\\v",{"type":20,"tag":338,"props":4903,"children":4904},{"style":888},[4905],{"type":25,"value":4906},"ar",{"type":20,"tag":338,"props":4908,"children":4909},{"style":1088},[4910],{"type":25,"value":4911},"\\w",{"type":20,"tag":338,"props":4913,"children":4914},{"style":888},[4915],{"type":25,"value":4916},"sl",{"type":20,"tag":338,"props":4918,"children":4919},{"style":1088},[4920],{"type":25,"value":4921},"\\a",{"type":20,"tag":338,"props":4923,"children":4924},{"style":888},[4925],{"type":25,"value":4926},"naconda\n",{"type":20,"tag":21,"props":4928,"children":4929},{},[4930],{"type":25,"value":4931},"以上操作完成后，在win+Q(或win)中搜索ubuntu on Windows，打开，完成安装和账号注册（Unix账号必须是开头小写的单词）",{"type":20,"tag":21,"props":4933,"children":4934},{},[4935],{"type":25,"value":4936},"完成后打开windows terminal的下拉菜单，会发现多出了一个Ubuntu的标签页。后面移步Linux的配置。",{"type":20,"tag":21,"props":4938,"children":4939},{},[4940,4942,4949,4951],{"type":25,"value":4941},"WSL学习使用：",{"type":20,"tag":64,"props":4943,"children":4946},{"href":4944,"rel":4945},"https:\u002F\u002Flearn.microsoft.com\u002Fzh-cn\u002Fwindows\u002Fwsl\u002F",[68],[4947],{"type":25,"value":4948},"适用于 Linux 的 Windows 子系统文档 | Microsoft Learn",{"type":25,"value":4950},"\n开源的一个WSL入门手册： ",{"type":20,"tag":64,"props":4952,"children":4955},{"href":4953,"rel":4954},"https:\u002F\u002Fdowww.spencerwoo.com\u002F",[68],[4956],{"type":25,"value":4957},"在Windows上优雅地使用WSL开发",{"type":20,"tag":21,"props":4959,"children":4960},{},[4961],{"type":25,"value":4962},"七、兴趣爱好",{"type":20,"tag":636,"props":4964,"children":4965},{},[4966,4977,4987,4992,5002,5012,5022],{"type":20,"tag":640,"props":4967,"children":4968},{},[4969,4971],{"type":25,"value":4970},"cuDNN开发套件（用于开发kernel op和安装编译torch cuda） ",{"type":20,"tag":64,"props":4972,"children":4975},{"href":4973,"rel":4974},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[68],[4976],{"type":25,"value":4973},{"type":20,"tag":640,"props":4978,"children":4979},{},[4980],{"type":20,"tag":64,"props":4981,"children":4984},{"href":4982,"rel":4983},"https:\u002F\u002Fwww.flstudiochina.com\u002Fxiazai.html",[68],[4985],{"type":25,"value":4986},"FL Studio",{"type":20,"tag":640,"props":4988,"children":4989},{},[4990],{"type":25,"value":4991},"Cubase",{"type":20,"tag":640,"props":4993,"children":4994},{},[4995],{"type":20,"tag":64,"props":4996,"children":4999},{"href":4997,"rel":4998},"https:\u002F\u002Fwww.reaper.fm\u002Fdownload.php",[68],[5000],{"type":25,"value":5001},"REAPER",{"type":20,"tag":640,"props":5003,"children":5004},{},[5005],{"type":20,"tag":64,"props":5006,"children":5009},{"href":5007,"rel":5008},"https:\u002F\u002Fdreamtonics.com\u002Fen\u002Fsynthesizerv\u002F",[68],[5010],{"type":25,"value":5011},"Synthesizer V",{"type":20,"tag":640,"props":5013,"children":5014},{},[5015],{"type":20,"tag":64,"props":5016,"children":5019},{"href":5017,"rel":5018},"https:\u002F\u002Fstore.steampowered.com\u002Fabout\u002F",[68],[5020],{"type":25,"value":5021},"Steam",{"type":20,"tag":640,"props":5023,"children":5024},{},[5025,5027],{"type":25,"value":5026},"ACE studio  ",{"type":20,"tag":64,"props":5028,"children":5031},{"href":5029,"rel":5030},"https:\u002F\u002Face-studio.timedomain.cn\u002F",[68],[5032],{"type":25,"value":5029},{"type":20,"tag":43,"props":5034,"children":5036},{"id":5035},"linux",[5037],{"type":25,"value":5038},"Linux",{"type":20,"tag":1053,"props":5040,"children":5042},{"id":5041},"一apt换源",[5043],{"type":25,"value":5044},"一、apt换源",{"type":20,"tag":21,"props":5046,"children":5047},{},[5048],{"type":25,"value":5049},"操作如下。",{"type":20,"tag":327,"props":5051,"children":5053},{"className":3638,"code":5052,"language":3640,"meta":8,"style":8},"cd \u002Fetc\u002Fapt\u002F\n\n# 留个source备份\nsudo cp sources.list sources.list.backup\n\n# 使用源\nsudo vim sources.list\n",[5054],{"type":20,"tag":334,"props":5055,"children":5056},{"__ignoreMap":8},[5057,5069,5076,5084,5107,5114,5122],{"type":20,"tag":338,"props":5058,"children":5059},{"class":340,"line":341},[5060,5064],{"type":20,"tag":338,"props":5061,"children":5062},{"style":1088},[5063],{"type":25,"value":3652},{"type":20,"tag":338,"props":5065,"children":5066},{"style":888},[5067],{"type":25,"value":5068}," \u002Fetc\u002Fapt\u002F\n",{"type":20,"tag":338,"props":5070,"children":5071},{"class":340,"line":201},[5072],{"type":20,"tag":338,"props":5073,"children":5074},{"emptyLinePlaceholder":470},[5075],{"type":25,"value":473},{"type":20,"tag":338,"props":5077,"children":5078},{"class":340,"line":202},[5079],{"type":20,"tag":338,"props":5080,"children":5081},{"style":910},[5082],{"type":25,"value":5083},"# 留个source备份\n",{"type":20,"tag":338,"props":5085,"children":5086},{"class":340,"line":366},[5087,5092,5097,5102],{"type":20,"tag":338,"props":5088,"children":5089},{"style":882},[5090],{"type":25,"value":5091},"sudo",{"type":20,"tag":338,"props":5093,"children":5094},{"style":888},[5095],{"type":25,"value":5096}," cp",{"type":20,"tag":338,"props":5098,"children":5099},{"style":888},[5100],{"type":25,"value":5101}," sources.list",{"type":20,"tag":338,"props":5103,"children":5104},{"style":888},[5105],{"type":25,"value":5106}," sources.list.backup\n",{"type":20,"tag":338,"props":5108,"children":5109},{"class":340,"line":375},[5110],{"type":20,"tag":338,"props":5111,"children":5112},{"emptyLinePlaceholder":470},[5113],{"type":25,"value":473},{"type":20,"tag":338,"props":5115,"children":5116},{"class":340,"line":384},[5117],{"type":20,"tag":338,"props":5118,"children":5119},{"style":910},[5120],{"type":25,"value":5121},"# 使用源\n",{"type":20,"tag":338,"props":5123,"children":5124},{"class":340,"line":457},[5125,5129,5134],{"type":20,"tag":338,"props":5126,"children":5127},{"style":882},[5128],{"type":25,"value":5091},{"type":20,"tag":338,"props":5130,"children":5131},{"style":888},[5132],{"type":25,"value":5133}," vim",{"type":20,"tag":338,"props":5135,"children":5136},{"style":888},[5137],{"type":25,"value":5138}," sources.list\n",{"type":20,"tag":21,"props":5140,"children":5141},{},[5142,5144,5150,5152,5159],{"type":25,"value":5143},"写入：(根据ubuntu版本号自己查, ",{"type":20,"tag":334,"props":5145,"children":5147},{"className":5146},[],[5148],{"type":25,"value":5149},"cat \u002Fetc\u002Fos-release",{"type":25,"value":5151},")\n清华源给出的Ubuntu22.04源的网址 ",{"type":20,"tag":64,"props":5153,"children":5156},{"href":5154,"rel":5155},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fhelp\u002Fubuntu\u002F",[68],[5157],{"type":25,"value":5158},"Ubuntu",{"type":25,"value":5160},"\n下面是同版本阿里云的源，复制粘贴进即可。",{"type":20,"tag":327,"props":5162,"children":5164},{"className":3638,"code":5163,"language":3640,"meta":8,"style":8},"## aliyun mirrors\ndeb http:\u002F\u002Fmirrors.aliyun.com\u002Fubuntu\u002F jammy main restricted universe multiverse\ndeb-src http:\u002F\u002Fmirrors.aliyun.com\u002Fubuntu\u002F jammy main restricted universe multiverse\n\ndeb http:\u002F\u002Fmirrors.aliyun.com\u002Fubuntu\u002F jammy-security main restricted universe multiverse\ndeb-src http:\u002F\u002Fmirrors.aliyun.com\u002Fubuntu\u002F jammy-security main restricted universe multiverse\n\ndeb http:\u002F\u002Fmirrors.aliyun.com\u002Fubuntu\u002F jammy-updates main restricted universe multiverse\ndeb-src http:\u002F\u002Fmirrors.aliyun.com\u002Fubuntu\u002F jammy-updates main restricted universe multiverse\n\ndeb http:\u002F\u002Fmirrors.aliyun.com\u002Fubuntu\u002F jammy-proposed main restricted universe multiverse\ndeb-src http:\u002F\u002Fmirrors.aliyun.com\u002Fubuntu\u002F jammy-proposed main restricted universe multiverse\n\ndeb http:\u002F\u002Fmirrors.aliyun.com\u002Fubuntu\u002F jammy-backports main restricted universe multiverse\ndeb-src http:\u002F\u002Fmirrors.aliyun.com\u002Fubuntu\u002F jammy-backports main restricted universe multiverse\n## aliyun mirrors End\n",[5165],{"type":20,"tag":334,"props":5166,"children":5167},{"__ignoreMap":8},[5168,5176,5214,5246,5253,5285,5316,5323,5355,5386,5393,5425,5456,5464,5497,5529],{"type":20,"tag":338,"props":5169,"children":5170},{"class":340,"line":341},[5171],{"type":20,"tag":338,"props":5172,"children":5173},{"style":910},[5174],{"type":25,"value":5175},"## aliyun mirrors\n",{"type":20,"tag":338,"props":5177,"children":5178},{"class":340,"line":201},[5179,5184,5189,5194,5199,5204,5209],{"type":20,"tag":338,"props":5180,"children":5181},{"style":882},[5182],{"type":25,"value":5183},"deb",{"type":20,"tag":338,"props":5185,"children":5186},{"style":888},[5187],{"type":25,"value":5188}," http:\u002F\u002Fmirrors.aliyun.com\u002Fubuntu\u002F",{"type":20,"tag":338,"props":5190,"children":5191},{"style":888},[5192],{"type":25,"value":5193}," jammy",{"type":20,"tag":338,"props":5195,"children":5196},{"style":888},[5197],{"type":25,"value":5198}," main",{"type":20,"tag":338,"props":5200,"children":5201},{"style":888},[5202],{"type":25,"value":5203}," restricted",{"type":20,"tag":338,"props":5205,"children":5206},{"style":888},[5207],{"type":25,"value":5208}," universe",{"type":20,"tag":338,"props":5210,"children":5211},{"style":888},[5212],{"type":25,"value":5213}," multiverse\n",{"type":20,"tag":338,"props":5215,"children":5216},{"class":340,"line":202},[5217,5222,5226,5230,5234,5238,5242],{"type":20,"tag":338,"props":5218,"children":5219},{"style":882},[5220],{"type":25,"value":5221},"deb-src",{"type":20,"tag":338,"props":5223,"children":5224},{"style":888},[5225],{"type":25,"value":5188},{"type":20,"tag":338,"props":5227,"children":5228},{"style":888},[5229],{"type":25,"value":5193},{"type":20,"tag":338,"props":5231,"children":5232},{"style":888},[5233],{"type":25,"value":5198},{"type":20,"tag":338,"props":5235,"children":5236},{"style":888},[5237],{"type":25,"value":5203},{"type":20,"tag":338,"props":5239,"children":5240},{"style":888},[5241],{"type":25,"value":5208},{"type":20,"tag":338,"props":5243,"children":5244},{"style":888},[5245],{"type":25,"value":5213},{"type":20,"tag":338,"props":5247,"children":5248},{"class":340,"line":366},[5249],{"type":20,"tag":338,"props":5250,"children":5251},{"emptyLinePlaceholder":470},[5252],{"type":25,"value":473},{"type":20,"tag":338,"props":5254,"children":5255},{"class":340,"line":375},[5256,5260,5264,5269,5273,5277,5281],{"type":20,"tag":338,"props":5257,"children":5258},{"style":882},[5259],{"type":25,"value":5183},{"type":20,"tag":338,"props":5261,"children":5262},{"style":888},[5263],{"type":25,"value":5188},{"type":20,"tag":338,"props":5265,"children":5266},{"style":888},[5267],{"type":25,"value":5268}," jammy-security",{"type":20,"tag":338,"props":5270,"children":5271},{"style":888},[5272],{"type":25,"value":5198},{"type":20,"tag":338,"props":5274,"children":5275},{"style":888},[5276],{"type":25,"value":5203},{"type":20,"tag":338,"props":5278,"children":5279},{"style":888},[5280],{"type":25,"value":5208},{"type":20,"tag":338,"props":5282,"children":5283},{"style":888},[5284],{"type":25,"value":5213},{"type":20,"tag":338,"props":5286,"children":5287},{"class":340,"line":384},[5288,5292,5296,5300,5304,5308,5312],{"type":20,"tag":338,"props":5289,"children":5290},{"style":882},[5291],{"type":25,"value":5221},{"type":20,"tag":338,"props":5293,"children":5294},{"style":888},[5295],{"type":25,"value":5188},{"type":20,"tag":338,"props":5297,"children":5298},{"style":888},[5299],{"type":25,"value":5268},{"type":20,"tag":338,"props":5301,"children":5302},{"style":888},[5303],{"type":25,"value":5198},{"type":20,"tag":338,"props":5305,"children":5306},{"style":888},[5307],{"type":25,"value":5203},{"type":20,"tag":338,"props":5309,"children":5310},{"style":888},[5311],{"type":25,"value":5208},{"type":20,"tag":338,"props":5313,"children":5314},{"style":888},[5315],{"type":25,"value":5213},{"type":20,"tag":338,"props":5317,"children":5318},{"class":340,"line":457},[5319],{"type":20,"tag":338,"props":5320,"children":5321},{"emptyLinePlaceholder":470},[5322],{"type":25,"value":473},{"type":20,"tag":338,"props":5324,"children":5325},{"class":340,"line":466},[5326,5330,5334,5339,5343,5347,5351],{"type":20,"tag":338,"props":5327,"children":5328},{"style":882},[5329],{"type":25,"value":5183},{"type":20,"tag":338,"props":5331,"children":5332},{"style":888},[5333],{"type":25,"value":5188},{"type":20,"tag":338,"props":5335,"children":5336},{"style":888},[5337],{"type":25,"value":5338}," jammy-updates",{"type":20,"tag":338,"props":5340,"children":5341},{"style":888},[5342],{"type":25,"value":5198},{"type":20,"tag":338,"props":5344,"children":5345},{"style":888},[5346],{"type":25,"value":5203},{"type":20,"tag":338,"props":5348,"children":5349},{"style":888},[5350],{"type":25,"value":5208},{"type":20,"tag":338,"props":5352,"children":5353},{"style":888},[5354],{"type":25,"value":5213},{"type":20,"tag":338,"props":5356,"children":5357},{"class":340,"line":476},[5358,5362,5366,5370,5374,5378,5382],{"type":20,"tag":338,"props":5359,"children":5360},{"style":882},[5361],{"type":25,"value":5221},{"type":20,"tag":338,"props":5363,"children":5364},{"style":888},[5365],{"type":25,"value":5188},{"type":20,"tag":338,"props":5367,"children":5368},{"style":888},[5369],{"type":25,"value":5338},{"type":20,"tag":338,"props":5371,"children":5372},{"style":888},[5373],{"type":25,"value":5198},{"type":20,"tag":338,"props":5375,"children":5376},{"style":888},[5377],{"type":25,"value":5203},{"type":20,"tag":338,"props":5379,"children":5380},{"style":888},[5381],{"type":25,"value":5208},{"type":20,"tag":338,"props":5383,"children":5384},{"style":888},[5385],{"type":25,"value":5213},{"type":20,"tag":338,"props":5387,"children":5388},{"class":340,"line":485},[5389],{"type":20,"tag":338,"props":5390,"children":5391},{"emptyLinePlaceholder":470},[5392],{"type":25,"value":473},{"type":20,"tag":338,"props":5394,"children":5395},{"class":340,"line":494},[5396,5400,5404,5409,5413,5417,5421],{"type":20,"tag":338,"props":5397,"children":5398},{"style":882},[5399],{"type":25,"value":5183},{"type":20,"tag":338,"props":5401,"children":5402},{"style":888},[5403],{"type":25,"value":5188},{"type":20,"tag":338,"props":5405,"children":5406},{"style":888},[5407],{"type":25,"value":5408}," jammy-proposed",{"type":20,"tag":338,"props":5410,"children":5411},{"style":888},[5412],{"type":25,"value":5198},{"type":20,"tag":338,"props":5414,"children":5415},{"style":888},[5416],{"type":25,"value":5203},{"type":20,"tag":338,"props":5418,"children":5419},{"style":888},[5420],{"type":25,"value":5208},{"type":20,"tag":338,"props":5422,"children":5423},{"style":888},[5424],{"type":25,"value":5213},{"type":20,"tag":338,"props":5426,"children":5427},{"class":340,"line":502},[5428,5432,5436,5440,5444,5448,5452],{"type":20,"tag":338,"props":5429,"children":5430},{"style":882},[5431],{"type":25,"value":5221},{"type":20,"tag":338,"props":5433,"children":5434},{"style":888},[5435],{"type":25,"value":5188},{"type":20,"tag":338,"props":5437,"children":5438},{"style":888},[5439],{"type":25,"value":5408},{"type":20,"tag":338,"props":5441,"children":5442},{"style":888},[5443],{"type":25,"value":5198},{"type":20,"tag":338,"props":5445,"children":5446},{"style":888},[5447],{"type":25,"value":5203},{"type":20,"tag":338,"props":5449,"children":5450},{"style":888},[5451],{"type":25,"value":5208},{"type":20,"tag":338,"props":5453,"children":5454},{"style":888},[5455],{"type":25,"value":5213},{"type":20,"tag":338,"props":5457,"children":5459},{"class":340,"line":5458},13,[5460],{"type":20,"tag":338,"props":5461,"children":5462},{"emptyLinePlaceholder":470},[5463],{"type":25,"value":473},{"type":20,"tag":338,"props":5465,"children":5467},{"class":340,"line":5466},14,[5468,5472,5476,5481,5485,5489,5493],{"type":20,"tag":338,"props":5469,"children":5470},{"style":882},[5471],{"type":25,"value":5183},{"type":20,"tag":338,"props":5473,"children":5474},{"style":888},[5475],{"type":25,"value":5188},{"type":20,"tag":338,"props":5477,"children":5478},{"style":888},[5479],{"type":25,"value":5480}," jammy-backports",{"type":20,"tag":338,"props":5482,"children":5483},{"style":888},[5484],{"type":25,"value":5198},{"type":20,"tag":338,"props":5486,"children":5487},{"style":888},[5488],{"type":25,"value":5203},{"type":20,"tag":338,"props":5490,"children":5491},{"style":888},[5492],{"type":25,"value":5208},{"type":20,"tag":338,"props":5494,"children":5495},{"style":888},[5496],{"type":25,"value":5213},{"type":20,"tag":338,"props":5498,"children":5500},{"class":340,"line":5499},15,[5501,5505,5509,5513,5517,5521,5525],{"type":20,"tag":338,"props":5502,"children":5503},{"style":882},[5504],{"type":25,"value":5221},{"type":20,"tag":338,"props":5506,"children":5507},{"style":888},[5508],{"type":25,"value":5188},{"type":20,"tag":338,"props":5510,"children":5511},{"style":888},[5512],{"type":25,"value":5480},{"type":20,"tag":338,"props":5514,"children":5515},{"style":888},[5516],{"type":25,"value":5198},{"type":20,"tag":338,"props":5518,"children":5519},{"style":888},[5520],{"type":25,"value":5203},{"type":20,"tag":338,"props":5522,"children":5523},{"style":888},[5524],{"type":25,"value":5208},{"type":20,"tag":338,"props":5526,"children":5527},{"style":888},[5528],{"type":25,"value":5213},{"type":20,"tag":338,"props":5530,"children":5532},{"class":340,"line":5531},16,[5533],{"type":20,"tag":338,"props":5534,"children":5535},{"style":910},[5536],{"type":25,"value":5537},"## aliyun mirrors End\n",{"type":20,"tag":21,"props":5539,"children":5540},{},[5541],{"type":25,"value":5542},"保存退出。",{"type":20,"tag":21,"props":5544,"children":5545},{},[5546],{"type":25,"value":5547},"移除自带的包（因为可能和国内源的软件有冲突）",{"type":20,"tag":327,"props":5549,"children":5551},{"className":1071,"code":5550,"language":1073,"meta":8,"style":8},"sudo apt remove ubuntu-advantage-tools\n",[5552],{"type":20,"tag":334,"props":5553,"children":5554},{"__ignoreMap":8},[5555],{"type":20,"tag":338,"props":5556,"children":5557},{"class":340,"line":341},[5558,5562,5567,5572],{"type":20,"tag":338,"props":5559,"children":5560},{"style":882},[5561],{"type":25,"value":5091},{"type":20,"tag":338,"props":5563,"children":5564},{"style":888},[5565],{"type":25,"value":5566}," apt",{"type":20,"tag":338,"props":5568,"children":5569},{"style":888},[5570],{"type":25,"value":5571}," remove",{"type":20,"tag":338,"props":5573,"children":5574},{"style":888},[5575],{"type":25,"value":5576}," ubuntu-advantage-tools\n",{"type":20,"tag":21,"props":5578,"children":5579},{},[5580],{"type":25,"value":5581},"更新包管理器：",{"type":20,"tag":327,"props":5583,"children":5585},{"className":870,"code":5584,"language":872,"meta":8,"style":8},"sudo apt update && sudo apt upgrade\nsudo apt-get update\n",[5586],{"type":20,"tag":334,"props":5587,"children":5588},{"__ignoreMap":8},[5589,5623],{"type":20,"tag":338,"props":5590,"children":5591},{"class":340,"line":341},[5592,5596,5600,5605,5610,5614,5618],{"type":20,"tag":338,"props":5593,"children":5594},{"style":882},[5595],{"type":25,"value":5091},{"type":20,"tag":338,"props":5597,"children":5598},{"style":888},[5599],{"type":25,"value":5566},{"type":20,"tag":338,"props":5601,"children":5602},{"style":888},[5603],{"type":25,"value":5604}," update",{"type":20,"tag":338,"props":5606,"children":5607},{"style":1266},[5608],{"type":25,"value":5609}," && ",{"type":20,"tag":338,"props":5611,"children":5612},{"style":882},[5613],{"type":25,"value":5091},{"type":20,"tag":338,"props":5615,"children":5616},{"style":888},[5617],{"type":25,"value":5566},{"type":20,"tag":338,"props":5619,"children":5620},{"style":888},[5621],{"type":25,"value":5622}," upgrade\n",{"type":20,"tag":338,"props":5624,"children":5625},{"class":340,"line":201},[5626,5630,5635],{"type":20,"tag":338,"props":5627,"children":5628},{"style":882},[5629],{"type":25,"value":5091},{"type":20,"tag":338,"props":5631,"children":5632},{"style":888},[5633],{"type":25,"value":5634}," apt-get",{"type":20,"tag":338,"props":5636,"children":5637},{"style":888},[5638],{"type":25,"value":5639}," update\n",{"type":20,"tag":1053,"props":5641,"children":5643},{"id":5642},"二安装基本的开发工具",[5644],{"type":25,"value":5645},"二、安装基本的开发工具",{"type":20,"tag":327,"props":5647,"children":5649},{"className":870,"code":5648,"language":872,"meta":8,"style":8},"# mingw套组\nsudo apt install build-essential cmake\n\n# python3 pip 工具\nsudo apt install python3-pip\npip config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[5650],{"type":20,"tag":334,"props":5651,"children":5652},{"__ignoreMap":8},[5653,5661,5686,5693,5701,5721],{"type":20,"tag":338,"props":5654,"children":5655},{"class":340,"line":341},[5656],{"type":20,"tag":338,"props":5657,"children":5658},{"style":910},[5659],{"type":25,"value":5660},"# mingw套组\n",{"type":20,"tag":338,"props":5662,"children":5663},{"class":340,"line":201},[5664,5668,5672,5676,5681],{"type":20,"tag":338,"props":5665,"children":5666},{"style":882},[5667],{"type":25,"value":5091},{"type":20,"tag":338,"props":5669,"children":5670},{"style":888},[5671],{"type":25,"value":5566},{"type":20,"tag":338,"props":5673,"children":5674},{"style":888},[5675],{"type":25,"value":4345},{"type":20,"tag":338,"props":5677,"children":5678},{"style":888},[5679],{"type":25,"value":5680}," build-essential",{"type":20,"tag":338,"props":5682,"children":5683},{"style":888},[5684],{"type":25,"value":5685}," cmake\n",{"type":20,"tag":338,"props":5687,"children":5688},{"class":340,"line":202},[5689],{"type":20,"tag":338,"props":5690,"children":5691},{"emptyLinePlaceholder":470},[5692],{"type":25,"value":473},{"type":20,"tag":338,"props":5694,"children":5695},{"class":340,"line":366},[5696],{"type":20,"tag":338,"props":5697,"children":5698},{"style":910},[5699],{"type":25,"value":5700},"# python3 pip 工具\n",{"type":20,"tag":338,"props":5702,"children":5703},{"class":340,"line":375},[5704,5708,5712,5716],{"type":20,"tag":338,"props":5705,"children":5706},{"style":882},[5707],{"type":25,"value":5091},{"type":20,"tag":338,"props":5709,"children":5710},{"style":888},[5711],{"type":25,"value":5566},{"type":20,"tag":338,"props":5713,"children":5714},{"style":888},[5715],{"type":25,"value":4345},{"type":20,"tag":338,"props":5717,"children":5718},{"style":888},[5719],{"type":25,"value":5720}," python3-pip\n",{"type":20,"tag":338,"props":5722,"children":5723},{"class":340,"line":384},[5724,5728,5732,5736,5740],{"type":20,"tag":338,"props":5725,"children":5726},{"style":882},[5727],{"type":25,"value":3964},{"type":20,"tag":338,"props":5729,"children":5730},{"style":888},[5731],{"type":25,"value":3789},{"type":20,"tag":338,"props":5733,"children":5734},{"style":888},[5735],{"type":25,"value":3973},{"type":20,"tag":338,"props":5737,"children":5738},{"style":888},[5739],{"type":25,"value":3978},{"type":20,"tag":338,"props":5741,"children":5742},{"style":888},[5743],{"type":25,"value":3983},{"type":20,"tag":1053,"props":5745,"children":5747},{"id":5746},"三美化终端",[5748],{"type":25,"value":5749},"三、美化终端",{"type":20,"tag":2783,"props":5751,"children":5753},{"id":5752},"使用fish",[5754],{"type":25,"value":5752},{"type":20,"tag":21,"props":5756,"children":5757},{},[5758],{"type":25,"value":5759},"安装",{"type":20,"tag":327,"props":5761,"children":5763},{"className":870,"code":5762,"language":872,"meta":8,"style":8},"sudo apt install fish\nchsh -s $(which fish)\nexport SHELL=`which fish` && exec \"$SHELL\" -l\n",[5764],{"type":20,"tag":334,"props":5765,"children":5766},{"__ignoreMap":8},[5767,5787,5819],{"type":20,"tag":338,"props":5768,"children":5769},{"class":340,"line":341},[5770,5774,5778,5782],{"type":20,"tag":338,"props":5771,"children":5772},{"style":882},[5773],{"type":25,"value":5091},{"type":20,"tag":338,"props":5775,"children":5776},{"style":888},[5777],{"type":25,"value":5566},{"type":20,"tag":338,"props":5779,"children":5780},{"style":888},[5781],{"type":25,"value":4345},{"type":20,"tag":338,"props":5783,"children":5784},{"style":888},[5785],{"type":25,"value":5786}," fish\n",{"type":20,"tag":338,"props":5788,"children":5789},{"class":340,"line":201},[5790,5795,5799,5804,5809,5814],{"type":20,"tag":338,"props":5791,"children":5792},{"style":882},[5793],{"type":25,"value":5794},"chsh",{"type":20,"tag":338,"props":5796,"children":5797},{"style":1088},[5798],{"type":25,"value":4355},{"type":20,"tag":338,"props":5800,"children":5801},{"style":1266},[5802],{"type":25,"value":5803}," $(",{"type":20,"tag":338,"props":5805,"children":5806},{"style":1088},[5807],{"type":25,"value":5808},"which",{"type":20,"tag":338,"props":5810,"children":5811},{"style":888},[5812],{"type":25,"value":5813}," fish",{"type":20,"tag":338,"props":5815,"children":5816},{"style":1266},[5817],{"type":25,"value":5818},")\n",{"type":20,"tag":338,"props":5820,"children":5821},{"class":340,"line":202},[5822,5826,5831,5835,5840,5844,5849,5853,5858,5863,5868,5873],{"type":20,"tag":338,"props":5823,"children":5824},{"style":1272},[5825],{"type":25,"value":1416},{"type":20,"tag":338,"props":5827,"children":5828},{"style":1266},[5829],{"type":25,"value":5830}," SHELL",{"type":20,"tag":338,"props":5832,"children":5833},{"style":1272},[5834],{"type":25,"value":1275},{"type":20,"tag":338,"props":5836,"children":5837},{"style":888},[5838],{"type":25,"value":5839},"`",{"type":20,"tag":338,"props":5841,"children":5842},{"style":1088},[5843],{"type":25,"value":5808},{"type":20,"tag":338,"props":5845,"children":5846},{"style":888},[5847],{"type":25,"value":5848}," fish`",{"type":20,"tag":338,"props":5850,"children":5851},{"style":1266},[5852],{"type":25,"value":5609},{"type":20,"tag":338,"props":5854,"children":5855},{"style":1088},[5856],{"type":25,"value":5857},"exec",{"type":20,"tag":338,"props":5859,"children":5860},{"style":888},[5861],{"type":25,"value":5862}," \"",{"type":20,"tag":338,"props":5864,"children":5865},{"style":1266},[5866],{"type":25,"value":5867},"$SHELL",{"type":20,"tag":338,"props":5869,"children":5870},{"style":888},[5871],{"type":25,"value":5872},"\"",{"type":20,"tag":338,"props":5874,"children":5875},{"style":1088},[5876],{"type":25,"value":5877}," -l\n",{"type":20,"tag":21,"props":5879,"children":5880},{},[5881],{"type":25,"value":5882},"修改风格",{"type":20,"tag":327,"props":5884,"children":5886},{"className":870,"code":5885,"language":872,"meta":8,"style":8},"fish_config prompt choose scope\nfish_config prompt save\n",[5887],{"type":20,"tag":334,"props":5888,"children":5889},{"__ignoreMap":8},[5890,5913],{"type":20,"tag":338,"props":5891,"children":5892},{"class":340,"line":341},[5893,5898,5903,5908],{"type":20,"tag":338,"props":5894,"children":5895},{"style":882},[5896],{"type":25,"value":5897},"fish_config",{"type":20,"tag":338,"props":5899,"children":5900},{"style":888},[5901],{"type":25,"value":5902}," prompt",{"type":20,"tag":338,"props":5904,"children":5905},{"style":888},[5906],{"type":25,"value":5907}," choose",{"type":20,"tag":338,"props":5909,"children":5910},{"style":888},[5911],{"type":25,"value":5912}," scope\n",{"type":20,"tag":338,"props":5914,"children":5915},{"class":340,"line":201},[5916,5920,5924],{"type":20,"tag":338,"props":5917,"children":5918},{"style":882},[5919],{"type":25,"value":5897},{"type":20,"tag":338,"props":5921,"children":5922},{"style":888},[5923],{"type":25,"value":5902},{"type":20,"tag":338,"props":5925,"children":5926},{"style":888},[5927],{"type":25,"value":5928}," save\n",{"type":20,"tag":21,"props":5930,"children":5931},{},[5932,5933,5940],{"type":25,"value":5759},{"type":20,"tag":64,"props":5934,"children":5937},{"href":5935,"rel":5936},"https:\u002F\u002Fgithub.com\u002Foh-my-fish\u002Foh-my-fish",[68],[5938],{"type":25,"value":5939},"oh-my-fish",{"type":25,"value":5941}," 可选",{"type":20,"tag":327,"props":5943,"children":5945},{"className":870,"code":5944,"language":872,"meta":8,"style":8},"# with git\n$ git clone https:\u002F\u002Fgithub.com\u002Foh-my-fish\u002Foh-my-fish\n$ cd oh-my-fish\n$ bin\u002Finstall --offline\n# with a tarball\n$ curl https:\u002F\u002Fraw.githubusercontent.com\u002Foh-my-fish\u002Foh-my-fish\u002Fmaster\u002Fbin\u002Finstall > install\n$ fish install --offline=omf.tar.gz\n",[5946],{"type":20,"tag":334,"props":5947,"children":5948},{"__ignoreMap":8},[5949,5957,5979,5996,6013,6021,6048],{"type":20,"tag":338,"props":5950,"children":5951},{"class":340,"line":341},[5952],{"type":20,"tag":338,"props":5953,"children":5954},{"style":910},[5955],{"type":25,"value":5956},"# with git\n",{"type":20,"tag":338,"props":5958,"children":5959},{"class":340,"line":201},[5960,5965,5970,5974],{"type":20,"tag":338,"props":5961,"children":5962},{"style":882},[5963],{"type":25,"value":5964},"$",{"type":20,"tag":338,"props":5966,"children":5967},{"style":888},[5968],{"type":25,"value":5969}," git",{"type":20,"tag":338,"props":5971,"children":5972},{"style":888},[5973],{"type":25,"value":4401},{"type":20,"tag":338,"props":5975,"children":5976},{"style":888},[5977],{"type":25,"value":5978}," https:\u002F\u002Fgithub.com\u002Foh-my-fish\u002Foh-my-fish\n",{"type":20,"tag":338,"props":5980,"children":5981},{"class":340,"line":202},[5982,5986,5991],{"type":20,"tag":338,"props":5983,"children":5984},{"style":882},[5985],{"type":25,"value":5964},{"type":20,"tag":338,"props":5987,"children":5988},{"style":888},[5989],{"type":25,"value":5990}," cd",{"type":20,"tag":338,"props":5992,"children":5993},{"style":888},[5994],{"type":25,"value":5995}," oh-my-fish\n",{"type":20,"tag":338,"props":5997,"children":5998},{"class":340,"line":366},[5999,6003,6008],{"type":20,"tag":338,"props":6000,"children":6001},{"style":882},[6002],{"type":25,"value":5964},{"type":20,"tag":338,"props":6004,"children":6005},{"style":888},[6006],{"type":25,"value":6007}," bin\u002Finstall",{"type":20,"tag":338,"props":6009,"children":6010},{"style":1088},[6011],{"type":25,"value":6012}," --offline\n",{"type":20,"tag":338,"props":6014,"children":6015},{"class":340,"line":375},[6016],{"type":20,"tag":338,"props":6017,"children":6018},{"style":910},[6019],{"type":25,"value":6020},"# with a tarball\n",{"type":20,"tag":338,"props":6022,"children":6023},{"class":340,"line":384},[6024,6028,6033,6038,6043],{"type":20,"tag":338,"props":6025,"children":6026},{"style":882},[6027],{"type":25,"value":5964},{"type":20,"tag":338,"props":6029,"children":6030},{"style":888},[6031],{"type":25,"value":6032}," curl",{"type":20,"tag":338,"props":6034,"children":6035},{"style":888},[6036],{"type":25,"value":6037}," https:\u002F\u002Fraw.githubusercontent.com\u002Foh-my-fish\u002Foh-my-fish\u002Fmaster\u002Fbin\u002Finstall",{"type":20,"tag":338,"props":6039,"children":6040},{"style":1272},[6041],{"type":25,"value":6042}," >",{"type":20,"tag":338,"props":6044,"children":6045},{"style":888},[6046],{"type":25,"value":6047}," install\n",{"type":20,"tag":338,"props":6049,"children":6050},{"class":340,"line":457},[6051,6055,6059,6063],{"type":20,"tag":338,"props":6052,"children":6053},{"style":882},[6054],{"type":25,"value":5964},{"type":20,"tag":338,"props":6056,"children":6057},{"style":888},[6058],{"type":25,"value":5813},{"type":20,"tag":338,"props":6060,"children":6061},{"style":888},[6062],{"type":25,"value":4345},{"type":20,"tag":338,"props":6064,"children":6065},{"style":1088},[6066],{"type":25,"value":6067}," --offline=omf.tar.gz\n",{"type":20,"tag":2783,"props":6069,"children":6071},{"id":6070},"使用zsh",[6072],{"type":25,"value":6070},{"type":20,"tag":21,"props":6074,"children":6075},{},[6076],{"type":25,"value":5759},{"type":20,"tag":327,"props":6078,"children":6080},{"className":870,"code":6079,"language":872,"meta":8,"style":8},"sudo apt install zsh\nchsh -s $(which zsh)\n",[6081],{"type":20,"tag":334,"props":6082,"children":6083},{"__ignoreMap":8},[6084,6104],{"type":20,"tag":338,"props":6085,"children":6086},{"class":340,"line":341},[6087,6091,6095,6099],{"type":20,"tag":338,"props":6088,"children":6089},{"style":882},[6090],{"type":25,"value":5091},{"type":20,"tag":338,"props":6092,"children":6093},{"style":888},[6094],{"type":25,"value":5566},{"type":20,"tag":338,"props":6096,"children":6097},{"style":888},[6098],{"type":25,"value":4345},{"type":20,"tag":338,"props":6100,"children":6101},{"style":888},[6102],{"type":25,"value":6103}," zsh\n",{"type":20,"tag":338,"props":6105,"children":6106},{"class":340,"line":201},[6107,6111,6115,6119,6123,6128],{"type":20,"tag":338,"props":6108,"children":6109},{"style":882},[6110],{"type":25,"value":5794},{"type":20,"tag":338,"props":6112,"children":6113},{"style":1088},[6114],{"type":25,"value":4355},{"type":20,"tag":338,"props":6116,"children":6117},{"style":1266},[6118],{"type":25,"value":5803},{"type":20,"tag":338,"props":6120,"children":6121},{"style":1088},[6122],{"type":25,"value":5808},{"type":20,"tag":338,"props":6124,"children":6125},{"style":888},[6126],{"type":25,"value":6127}," zsh",{"type":20,"tag":338,"props":6129,"children":6130},{"style":1266},[6131],{"type":25,"value":5818},{"type":20,"tag":21,"props":6133,"children":6134},{},[6135],{"type":25,"value":6136},"在bashrc里面加入",{"type":20,"tag":327,"props":6138,"children":6140},{"className":870,"code":6139,"language":872,"meta":8,"style":8},"export SHELL=`which zsh`\n[ -z \"$ZSH_VERSION\" ] && exec \"$SHELL\" -l\n",[6141],{"type":20,"tag":334,"props":6142,"children":6143},{"__ignoreMap":8},[6144,6172],{"type":20,"tag":338,"props":6145,"children":6146},{"class":340,"line":341},[6147,6151,6155,6159,6163,6167],{"type":20,"tag":338,"props":6148,"children":6149},{"style":1272},[6150],{"type":25,"value":1416},{"type":20,"tag":338,"props":6152,"children":6153},{"style":1266},[6154],{"type":25,"value":5830},{"type":20,"tag":338,"props":6156,"children":6157},{"style":1272},[6158],{"type":25,"value":1275},{"type":20,"tag":338,"props":6160,"children":6161},{"style":888},[6162],{"type":25,"value":5839},{"type":20,"tag":338,"props":6164,"children":6165},{"style":1088},[6166],{"type":25,"value":5808},{"type":20,"tag":338,"props":6168,"children":6169},{"style":888},[6170],{"type":25,"value":6171}," zsh`\n",{"type":20,"tag":338,"props":6173,"children":6174},{"class":340,"line":201},[6175,6180,6185,6189,6194,6198,6203,6207,6211,6215,6219],{"type":20,"tag":338,"props":6176,"children":6177},{"style":1266},[6178],{"type":25,"value":6179},"[ ",{"type":20,"tag":338,"props":6181,"children":6182},{"style":1272},[6183],{"type":25,"value":6184},"-z",{"type":20,"tag":338,"props":6186,"children":6187},{"style":888},[6188],{"type":25,"value":5862},{"type":20,"tag":338,"props":6190,"children":6191},{"style":1266},[6192],{"type":25,"value":6193},"$ZSH_VERSION",{"type":20,"tag":338,"props":6195,"children":6196},{"style":888},[6197],{"type":25,"value":5872},{"type":20,"tag":338,"props":6199,"children":6200},{"style":1266},[6201],{"type":25,"value":6202}," ] && ",{"type":20,"tag":338,"props":6204,"children":6205},{"style":1088},[6206],{"type":25,"value":5857},{"type":20,"tag":338,"props":6208,"children":6209},{"style":888},[6210],{"type":25,"value":5862},{"type":20,"tag":338,"props":6212,"children":6213},{"style":1266},[6214],{"type":25,"value":5867},{"type":20,"tag":338,"props":6216,"children":6217},{"style":888},[6218],{"type":25,"value":5872},{"type":20,"tag":338,"props":6220,"children":6221},{"style":1088},[6222],{"type":25,"value":5877},{"type":20,"tag":21,"props":6224,"children":6225},{},[6226],{"type":25,"value":6227},"重新打开当前终端，就会进入zsh终端，接着安装oh-my-zsh主题框架。",{"type":20,"tag":327,"props":6229,"children":6231},{"className":870,"code":6230,"language":872,"meta":8,"style":8},"cd ~\ngit clone https:\u002F\u002Fgitee.com\u002Fmirrors\u002Foh-my-zsh\nsh oh-my-zsh\u002Ftools\u002Finstall.sh\n",[6232],{"type":20,"tag":334,"props":6233,"children":6234},{"__ignoreMap":8},[6235,6247,6263],{"type":20,"tag":338,"props":6236,"children":6237},{"class":340,"line":341},[6238,6242],{"type":20,"tag":338,"props":6239,"children":6240},{"style":1088},[6241],{"type":25,"value":3652},{"type":20,"tag":338,"props":6243,"children":6244},{"style":888},[6245],{"type":25,"value":6246}," ~\n",{"type":20,"tag":338,"props":6248,"children":6249},{"class":340,"line":201},[6250,6254,6258],{"type":20,"tag":338,"props":6251,"children":6252},{"style":882},[6253],{"type":25,"value":3784},{"type":20,"tag":338,"props":6255,"children":6256},{"style":888},[6257],{"type":25,"value":4401},{"type":20,"tag":338,"props":6259,"children":6260},{"style":888},[6261],{"type":25,"value":6262}," https:\u002F\u002Fgitee.com\u002Fmirrors\u002Foh-my-zsh\n",{"type":20,"tag":338,"props":6264,"children":6265},{"class":340,"line":202},[6266,6270],{"type":20,"tag":338,"props":6267,"children":6268},{"style":882},[6269],{"type":25,"value":3640},{"type":20,"tag":338,"props":6271,"children":6272},{"style":888},[6273],{"type":25,"value":6274}," oh-my-zsh\u002Ftools\u002Finstall.sh\n",{"type":20,"tag":21,"props":6276,"children":6277},{},[6278],{"type":25,"value":6279},"安装两个插件",{"type":20,"tag":327,"props":6281,"children":6283},{"className":870,"code":6282,"language":872,"meta":8,"style":8},"cd ~\u002F.oh-my-zsh\u002Fcustom\u002Fplugins\u002F\n\n# 高亮关键词\ngit clone https:\u002F\u002Fgitee.com\u002Fhaohaogood\u002Fzsh-syntax-highlighting\n\n# 自动补全\ngit clone https:\u002F\u002Fgitee.com\u002Fqiushaocloud\u002Fzsh-autosuggestions\n",[6284],{"type":20,"tag":334,"props":6285,"children":6286},{"__ignoreMap":8},[6287,6299,6306,6314,6330,6337,6345],{"type":20,"tag":338,"props":6288,"children":6289},{"class":340,"line":341},[6290,6294],{"type":20,"tag":338,"props":6291,"children":6292},{"style":1088},[6293],{"type":25,"value":3652},{"type":20,"tag":338,"props":6295,"children":6296},{"style":888},[6297],{"type":25,"value":6298}," ~\u002F.oh-my-zsh\u002Fcustom\u002Fplugins\u002F\n",{"type":20,"tag":338,"props":6300,"children":6301},{"class":340,"line":201},[6302],{"type":20,"tag":338,"props":6303,"children":6304},{"emptyLinePlaceholder":470},[6305],{"type":25,"value":473},{"type":20,"tag":338,"props":6307,"children":6308},{"class":340,"line":202},[6309],{"type":20,"tag":338,"props":6310,"children":6311},{"style":910},[6312],{"type":25,"value":6313},"# 高亮关键词\n",{"type":20,"tag":338,"props":6315,"children":6316},{"class":340,"line":366},[6317,6321,6325],{"type":20,"tag":338,"props":6318,"children":6319},{"style":882},[6320],{"type":25,"value":3784},{"type":20,"tag":338,"props":6322,"children":6323},{"style":888},[6324],{"type":25,"value":4401},{"type":20,"tag":338,"props":6326,"children":6327},{"style":888},[6328],{"type":25,"value":6329}," https:\u002F\u002Fgitee.com\u002Fhaohaogood\u002Fzsh-syntax-highlighting\n",{"type":20,"tag":338,"props":6331,"children":6332},{"class":340,"line":375},[6333],{"type":20,"tag":338,"props":6334,"children":6335},{"emptyLinePlaceholder":470},[6336],{"type":25,"value":473},{"type":20,"tag":338,"props":6338,"children":6339},{"class":340,"line":384},[6340],{"type":20,"tag":338,"props":6341,"children":6342},{"style":910},[6343],{"type":25,"value":6344},"# 自动补全\n",{"type":20,"tag":338,"props":6346,"children":6347},{"class":340,"line":457},[6348,6352,6356],{"type":20,"tag":338,"props":6349,"children":6350},{"style":882},[6351],{"type":25,"value":3784},{"type":20,"tag":338,"props":6353,"children":6354},{"style":888},[6355],{"type":25,"value":4401},{"type":20,"tag":338,"props":6357,"children":6358},{"style":888},[6359],{"type":25,"value":6360}," https:\u002F\u002Fgitee.com\u002Fqiushaocloud\u002Fzsh-autosuggestions\n",{"type":20,"tag":21,"props":6362,"children":6363},{},[6364,6366,6372,6374,6380,6382,6388],{"type":25,"value":6365},"然后进入 ",{"type":20,"tag":334,"props":6367,"children":6369},{"className":6368},[],[6370],{"type":25,"value":6371},"~\u002F.zshrc",{"type":25,"value":6373}," 在 plugins 参数中添加 ",{"type":20,"tag":334,"props":6375,"children":6377},{"className":6376},[],[6378],{"type":25,"value":6379},"zsh-syntax-highlighting",{"type":25,"value":6381}," 和",{"type":20,"tag":334,"props":6383,"children":6385},{"className":6384},[],[6386],{"type":25,"value":6387},"zsh-autosuggestions",{"type":25,"value":6389},"。也就是说你的 .zshrc 中必须要有一行长这样：",{"type":20,"tag":327,"props":6391,"children":6393},{"className":870,"code":6392,"language":872,"meta":8,"style":8},"plugins=(git zsh-syntax-highlighting zsh-autosuggestions)\n",[6394],{"type":20,"tag":334,"props":6395,"children":6396},{"__ignoreMap":8},[6397],{"type":20,"tag":338,"props":6398,"children":6399},{"class":340,"line":341},[6400,6405,6409,6414,6418,6423,6428],{"type":20,"tag":338,"props":6401,"children":6402},{"style":1266},[6403],{"type":25,"value":6404},"plugins",{"type":20,"tag":338,"props":6406,"children":6407},{"style":1272},[6408],{"type":25,"value":1275},{"type":20,"tag":338,"props":6410,"children":6411},{"style":1266},[6412],{"type":25,"value":6413},"(",{"type":20,"tag":338,"props":6415,"children":6416},{"style":888},[6417],{"type":25,"value":3784},{"type":20,"tag":338,"props":6419,"children":6420},{"style":888},[6421],{"type":25,"value":6422}," zsh-syntax-highlighting",{"type":20,"tag":338,"props":6424,"children":6425},{"style":888},[6426],{"type":25,"value":6427}," zsh-autosuggestions",{"type":20,"tag":338,"props":6429,"children":6430},{"style":1266},[6431],{"type":25,"value":5818},{"type":20,"tag":43,"props":6433,"children":6435},{"id":6434},"四安装部分驱动程序",[6436],{"type":25,"value":6437},"四、安装部分驱动程序",{"type":20,"tag":21,"props":6439,"children":6440},{},[6441],{"type":25,"value":6442},"默认pip 版本较低，升级一下",{"type":20,"tag":327,"props":6444,"children":6446},{"className":870,"code":6445,"language":872,"meta":8,"style":8},"pip install --upgrade pip\n",[6447],{"type":20,"tag":334,"props":6448,"children":6449},{"__ignoreMap":8},[6450],{"type":20,"tag":338,"props":6451,"children":6452},{"class":340,"line":341},[6453,6457,6461,6466],{"type":20,"tag":338,"props":6454,"children":6455},{"style":882},[6456],{"type":25,"value":3964},{"type":20,"tag":338,"props":6458,"children":6459},{"style":888},[6460],{"type":25,"value":4345},{"type":20,"tag":338,"props":6462,"children":6463},{"style":1088},[6464],{"type":25,"value":6465}," --upgrade",{"type":20,"tag":338,"props":6467,"children":6468},{"style":888},[6469],{"type":25,"value":6470}," pip\n",{"type":20,"tag":21,"props":6472,"children":6473},{},[6474],{"type":25,"value":6475},"安装opencv的包",{"type":20,"tag":327,"props":6477,"children":6479},{"className":870,"code":6478,"language":872,"meta":8,"style":8},"sudo apt install libopencv-dev\npip install opencv-python\n",[6480],{"type":20,"tag":334,"props":6481,"children":6482},{"__ignoreMap":8},[6483,6503],{"type":20,"tag":338,"props":6484,"children":6485},{"class":340,"line":341},[6486,6490,6494,6498],{"type":20,"tag":338,"props":6487,"children":6488},{"style":882},[6489],{"type":25,"value":5091},{"type":20,"tag":338,"props":6491,"children":6492},{"style":888},[6493],{"type":25,"value":5566},{"type":20,"tag":338,"props":6495,"children":6496},{"style":888},[6497],{"type":25,"value":4345},{"type":20,"tag":338,"props":6499,"children":6500},{"style":888},[6501],{"type":25,"value":6502}," libopencv-dev\n",{"type":20,"tag":338,"props":6504,"children":6505},{"class":340,"line":201},[6506,6510,6514],{"type":20,"tag":338,"props":6507,"children":6508},{"style":882},[6509],{"type":25,"value":3964},{"type":20,"tag":338,"props":6511,"children":6512},{"style":888},[6513],{"type":25,"value":4345},{"type":20,"tag":338,"props":6515,"children":6516},{"style":888},[6517],{"type":25,"value":6518}," opencv-python\n",{"type":20,"tag":21,"props":6520,"children":6521},{},[6522],{"type":25,"value":6523},"安装torch cuda",{"type":20,"tag":327,"props":6525,"children":6527},{"className":870,"code":6526,"language":872,"meta":8,"style":8},"sudo apt install nvidia-cuda-toolkit\n",[6528],{"type":20,"tag":334,"props":6529,"children":6530},{"__ignoreMap":8},[6531],{"type":20,"tag":338,"props":6532,"children":6533},{"class":340,"line":341},[6534,6538,6542,6546],{"type":20,"tag":338,"props":6535,"children":6536},{"style":882},[6537],{"type":25,"value":5091},{"type":20,"tag":338,"props":6539,"children":6540},{"style":888},[6541],{"type":25,"value":5566},{"type":20,"tag":338,"props":6543,"children":6544},{"style":888},[6545],{"type":25,"value":4345},{"type":20,"tag":338,"props":6547,"children":6548},{"style":888},[6549],{"type":25,"value":6550}," nvidia-cuda-toolkit\n",{"type":20,"tag":21,"props":6552,"children":6553},{},[6554,6556,6563],{"type":25,"value":6555},"然后去 ",{"type":20,"tag":64,"props":6557,"children":6560},{"href":6558,"rel":6559},"https:\u002F\u002Fpytorch.org\u002F",[68],[6561],{"type":25,"value":6562},"PyTorch",{"type":25,"value":6564}," 找对应的安装指令。自从某个版本之后 Linux 下载 PyTorch GPU 版本可以直接 pip（自动下载对应 CUDA 依赖）。",{"type":20,"tag":542,"props":6566,"children":6567},{},[6568],{"type":25,"value":546},{"title":8,"searchDepth":201,"depth":202,"links":6570},[6571,6572,6573,6581],{"id":3510,"depth":201,"text":3480},{"id":4611,"depth":201,"text":4614},{"id":5035,"depth":201,"text":5038,"children":6574},[6575,6576,6577],{"id":5041,"depth":202,"text":5044},{"id":5642,"depth":202,"text":5645},{"id":5746,"depth":202,"text":5749,"children":6578},[6579,6580],{"id":5752,"depth":366,"text":5752},{"id":6070,"depth":366,"text":6070},{"id":6434,"depth":201,"text":6437},"content:posts:从零配置Windows11开发环境.md","posts\u002F从零配置Windows11开发环境.md","posts\u002F从零配置Windows11开发环境",1781939741892]