<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="https://blog.rochsen.cn/rss.xsl"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <atom:link href="https://blog.rochsen.cn/rss.xml" rel="self" type="application/rss+xml"/>
    <title>欢迎来到我的博客</title>
    <link>https://blog.rochsen.cn/</link>
    <description></description>
    <language>zh-CN</language>
    <pubDate>Wed, 14 Oct 2026 14:58:07 GMT</pubDate>
    <lastBuildDate>Wed, 14 Oct 2026 14:58:07 GMT</lastBuildDate>
    <generator>@vuepress/plugin-feed</generator>
    <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
    <category>教程</category>
    <category>python库</category>
    <category>ai</category>
    <category>IDE</category>
    <category>markdown</category>
    <category>网络</category>
    <category>阅读器</category>
    <category>远程控制</category>
    <category>搜索</category>
    <category>工具箱</category>
    <category>编程</category>
    <category>数据结构</category>
    <category>图片</category>
    <category>软件</category>
    <category>生物信息学</category>
    <category>游戏</category>
    <category>部署</category>
    <category>知乎</category>
    <category>使用指南</category>
    <item>
      <title>jieba库的使用</title>
      <link>https://blog.rochsen.cn/notes/py/jieba.html</link>
      <guid>https://blog.rochsen.cn/notes/py/jieba.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">jieba库的使用</source>
      <description>用于为句子里的词语，完成分词的操作</description>
      <category>教程</category>
      <category>python库</category>
      <pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>用于为句子里的词语，完成分词的操作</p>
<!-- more -->
<p>线上默认用精确模式。搜索索引用搜索模式把长词再切细。产品名、机构名用自定义词固定住。抽关键词、过滤名词、做高亮，都在分词结果上继续处理。</p>
<p>下面两句贯穿全文。第一句看精确模式、词性和关键词。第二句里有长词和新词，三种模式的差别才看得出来。</p>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">text </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> "春天的早晨，我沿着河边慢慢走，看见柳枝轻摆，几只小鸟飞过水面，心情忽然变得很好。阳光照在草地，孩子笑着奔跑，真开心。"</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">biz </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> "他在中国科学院计算所研究机器学习算法，并负责华为鸿蒙系统在南京市长江大桥项目中的落地。如果放到post中将出错。"</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><h2>1. 启动时预热词典</h2>
<p>第一次分词会加载词典，并打出 DEBUG 日志。进程启动时先初始化，把这段耗时挪到启动阶段。</p>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> logging</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> jieba</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">jieba.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">setLogLevel</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(logging.</span><span style="--shiki-light:#383A42;--shiki-dark:#D19A66">INFO</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">jieba.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">initialize</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">()</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>Windows 上不要调用 <code>jieba.enable_parallel</code>。并行模式只支持 POSIX 系统，调用会直接抛 <code>NotImplementedError</code>。</p>
<h2>2. 三种切分</h2>
<p><code>jieba.lcut</code> 返回列表，后面过滤、统计都方便。<code>jieba.cut</code> 返回生成器，逐词处理大文本时再用。</p>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">jieba.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">lcut</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(text)                        </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 精确模式，默认</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">jieba.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">lcut</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(text, </span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">HMM</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">False</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)             </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 只走词典</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">jieba.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">lcut</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(text, </span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">cut_all</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">True</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)          </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 全模式</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">jieba.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">lcut_for_search</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(biz)              </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 搜索模式</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>精确模式是生产主路径：</p>
<div class="language-text line-numbers-mode" data-highlighter="shiki" data-ext="text" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-text"><span class="line"><span>春天 / 的 / 早晨 / ， / 我 / 沿着 / 河边 / 慢慢 / 走 / ， / 看见 / 柳枝 / 轻摆 / ， / 几只 / 小鸟 / 飞过 / 水面 / ， / 心情 / 忽然 / 变得 / 很 / 好 / 。 / 阳光 / 照 / 在 / 草地 / ， / 孩子 / 笑 / 着 / 奔跑 / ， / 真 / 开心 / 。</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p><code>HMM=False</code> 关闭新词识别，结果更稳，但词典里没有的搭配会被拆开。「轻摆」在默认模式下是一个词，关掉 HMM 后变成「轻 / 摆」。</p>
<p>全模式会召回句子里所有可能的词，结果有冗余，例如「慢慢」旁边多出「慢走」，「飞过水面」旁边多出「过水」「过水面」。一般不直接拿来做索引。</p>
<p>业务句的精确模式：</p>
<div class="language-text line-numbers-mode" data-highlighter="shiki" data-ext="text" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-text"><span class="line"><span>他 / 在 / 中国科学院 / 计算所 / 研究 / 机器 / 学习 / 算法 / ， / 并 / 负责 / 华为 / 鸿蒙 / 系统 / 在 / 南京市 / 长江大桥 / 项目 / 中 / 的 / 落地 / 。 / 如果 / 放到 / post / 中将 / 出错 / 。</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>搜索模式在精确结果上，把长词再切成更短的词，方便倒排索引命中「科学」「大桥」这种短查询：</p>
<div class="language-text line-numbers-mode" data-highlighter="shiki" data-ext="text" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-text"><span class="line"><span>他 / 在 / 中国 / 科学 / 学院 / 科学院 / 中国科学院 / 计算 / 计算所 / 研究 / 机器 / 学习 / 算法 / ， / 并 / 负责 / 华为 / 鸿蒙 / 系统 / 在 / 南京 / 京市 / 南京市 / 长江 / 大桥 / 长江大桥 / 项目 / 中 / 的 / 落地 / 。 / 如果 / 放到 / post / 中将 / 出错 / 。</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>原文那句几乎没有长词，所以精确模式和搜索模式结果一样。有「中国科学院」「长江大桥」这种长词时，差别才出现。</p>
<h2>3. 自定义词</h2>
<p>词典里没有的产品名、机构名会被切开。「机器学习」变成「机器 / 学习」，「鸿蒙系统」变成「鸿蒙 / 系统」。</p>
<p><code>add_word</code> 把它们固定成整词。词频给高一些，避免被旁边的字抢走。<code>tag</code> 是词性，后面过滤名词时用得上。</p>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">jieba.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">add_word</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"机器学习"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">freq</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1000</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">tag</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"n"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">jieba.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">add_word</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"鸿蒙系统"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">freq</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1000</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">tag</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"nz"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>加词后，这两个词保持整词，句子里其余切分不变。</p>
<p>词条多的时候写成词典文件，每行是「词语 词频 词性」：</p>
<div class="language-text line-numbers-mode" data-highlighter="shiki" data-ext="text" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-text"><span class="line"><span>机器学习 1000 n</span></span>
<span class="line"><span>鸿蒙系统 1000 nz</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><p>然后加载：</p>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">jieba.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">load_userdict</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"userdict.txt"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><p>效果和多次调用 <code>add_word</code> 相同。</p>
<p>还有一种粘错。「中将」在词典里是军衔，会把「post 中将出错」切成「中将」。想强制拆开时，调高「中」「将」单独成词的概率：</p>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">jieba.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">suggest_freq</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">((</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"中"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"将"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">), </span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">tune</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">True</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">jieba.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">lcut</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"如果放到post中将出错。"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 如果 / 放到 / post / 中 / 将 / 出错 / 。</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><code>tune=True</code> 会改全局词典，只对确实要拆开或合并的词使用。</p>
<h2>4. 词性标注</h2>
<p><code>jieba.posseg.lcut</code> 返回带词性的对象，用 <code>.word</code> 和 <code>.flag</code> 读取。只要名词时，看 <code>flag</code> 是否以 <code>n</code> 开头。</p>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> jieba.posseg </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">as</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> pseg</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">pairs </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> list</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(pseg.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">lcut</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(text))</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">nouns </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> [item.word </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">for</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> item </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">in</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> pairs </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">if</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> item.flag.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">startswith</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"n"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)]</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>常见标记：</p>
<p>| 标记 | 含义 |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>Deepseek Terminal</title>
      <link>https://blog.rochsen.cn/softwares/ai/dst.html</link>
      <guid>https://blog.rochsen.cn/softwares/ai/dst.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Deepseek Terminal</source>
      <description>随dsh一起更新的终端</description>
      <category>ai</category>
      <pubDate>Sun, 27 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>随dsh一起更新的终端</p>
<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Deepseek Harness</title>
      <link>https://blog.rochsen.cn/softwares/ai/dsh.html</link>
      <guid>https://blog.rochsen.cn/softwares/ai/dsh.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Deepseek Harness</source>
      <description>分为桌面版和cli启动</description>
      <category>ai</category>
      <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>分为桌面版和cli启动</p>
<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Cursor</title>
      <link>https://blog.rochsen.cn/softwares/ide/cursor.html</link>
      <guid>https://blog.rochsen.cn/softwares/ide/cursor.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Cursor</source>
      <category>IDE</category>
      <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Obsidian</title>
      <link>https://blog.rochsen.cn/softwares/markdown/obsidian.html</link>
      <guid>https://blog.rochsen.cn/softwares/markdown/obsidian.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Obsidian</source>
      <category>markdown</category>
      <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Typora</title>
      <link>https://blog.rochsen.cn/softwares/markdown/typora.html</link>
      <guid>https://blog.rochsen.cn/softwares/markdown/typora.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Typora</source>
      <category>markdown</category>
      <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Clash Verge</title>
      <link>https://blog.rochsen.cn/softwares/network/clashVerge.html</link>
      <guid>https://blog.rochsen.cn/softwares/network/clashVerge.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Clash Verge</source>
      <category>网络</category>
      <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>PotPlayer</title>
      <link>https://blog.rochsen.cn/softwares/reader/potplayer.html</link>
      <guid>https://blog.rochsen.cn/softwares/reader/potplayer.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">PotPlayer</source>
      <category>阅读器</category>
      <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Void Image Viewer</title>
      <link>https://blog.rochsen.cn/softwares/reader/voidImageViewer.html</link>
      <guid>https://blog.rochsen.cn/softwares/reader/voidImageViewer.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Void Image Viewer</source>
      <category>阅读器</category>
      <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>MobaXterm</title>
      <link>https://blog.rochsen.cn/softwares/remote/mobaXterm.html</link>
      <guid>https://blog.rochsen.cn/softwares/remote/mobaXterm.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">MobaXterm</source>
      <category>远程控制</category>
      <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>WinSCP</title>
      <link>https://blog.rochsen.cn/softwares/remote/winscp.html</link>
      <guid>https://blog.rochsen.cn/softwares/remote/winscp.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">WinSCP</source>
      <category>远程控制</category>
      <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Everything</title>
      <link>https://blog.rochsen.cn/softwares/search/everything.html</link>
      <guid>https://blog.rochsen.cn/softwares/search/everything.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Everything</source>
      <category>搜索</category>
      <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Geek</title>
      <link>https://blog.rochsen.cn/softwares/search/geek.html</link>
      <guid>https://blog.rochsen.cn/softwares/search/geek.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Geek</source>
      <category>搜索</category>
      <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Utools</title>
      <link>https://blog.rochsen.cn/softwares/toolkit/utools.html</link>
      <guid>https://blog.rochsen.cn/softwares/toolkit/utools.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Utools</source>
      <category>工具箱</category>
      <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Watt Toolkit</title>
      <link>https://blog.rochsen.cn/softwares/toolkit/wattToolkit.html</link>
      <guid>https://blog.rochsen.cn/softwares/toolkit/wattToolkit.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Watt Toolkit</source>
      <category>工具箱</category>
      <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>递归入门</title>
      <link>https://blog.rochsen.cn/notes/computerSci/learnRecursion.html</link>
      <guid>https://blog.rochsen.cn/notes/computerSci/learnRecursion.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">递归入门</source>
      <description>1. 核心心法：递归信任（“套娃”思维）
不要试图在脑子里一层层追踪递归过程（n→n-1→n-2...）。
你只需要相信：只要“小一号的子问题”能解决，当前问题就一定能解决。
2. 写递归函数的三步法

步骤1：定义函数（明确输入输出）
步骤2：找出口（Base Case）- 必须写在最前面，处理最小规模问题
步骤3：找公式（Recursive Rul...</description>
      <category>编程</category>
      <pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>1. 核心心法：递归信任（“套娃”思维）</h2>
<p>不要试图在脑子里一层层追踪递归过程（n→n-1→n-2...）。
你只需要相信：只要“小一号的子问题”能解决，当前问题就一定能解决。</p>
<h2>2. 写递归函数的三步法</h2>
<ol>
<li>步骤1：定义函数（明确输入输出）</li>
<li>步骤2：找出口（Base Case）- 必须写在最前面，处理最小规模问题</li>
<li>步骤3：找公式（Recursive Rule）- 拆解为“一小步”+“剩余子问题”</li>
</ol>
<h2>3. 典型代码模板</h2>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 线性递归（阶乘）</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">def</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> factorial</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">n</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    if</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> n </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">==</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">:        </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 出口条件：当n=1时，递归结束</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">        return</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 1</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    return</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> n </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">*</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF"> factorial</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(n </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)  </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 公式</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 线性递归（列表求和-健壮版）</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">def</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> sum_list</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">lst</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    if</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD"> not</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> lst:       </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 出口条件：当列表为空时，递归结束</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">        return</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 0</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    return</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> lst[</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">] </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">+</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF"> sum_list</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(lst[</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">:])</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 两端收缩递归（回文判断）</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">def</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> is_palindrome</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#D19A66;--shiki-dark-font-style:italic">s</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    if</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> len</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(s) </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">&#x3C;=</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">:   </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 出口条件：当字符串长度为0或1时，满足回文，递归结束</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">        return</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> True</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    return</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> s[</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">] </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">==</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> s[</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">] </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">and</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF"> is_palindrome</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(s[</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">])</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>4. 必须避开的致命陷阱</h2>
<ul>
<li>忘记写出口 -&gt; RecursionError（栈溢出）</li>
<li>出口逻辑错误（如0!返回0） -&gt; 全盘算错</li>
<li>忽略边界（如传入空列表/空字符串） -&gt; IndexError</li>
</ul>
<h2>5. 底层机制：调用栈（Call Stack）</h2>
<p>递推：任务暂停压栈 -&gt; 触底 -&gt; 回归：弹栈逐层返回计算结果。</p>
<h2>6. 已掌握的两种递归模式</h2>
<ul>
<li>线性递归：每次解决一个元素（求和、阶乘）</li>
<li>分治（双向）递归：同时从两端向内推进（回文判断）</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>单向链表</title>
      <link>https://blog.rochsen.cn/notes/computerSci/singleLinkList.html</link>
      <guid>https://blog.rochsen.cn/notes/computerSci/singleLinkList.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">单向链表</source>
      <description>基础：单向链表入门
把链表想成一列火车 —— 看懂写法与逻辑，修好你自己的代码
一、先建立画面：链表就是一列火车 🚂
你已经写过 temp-shejilianbiao.py，说明基础语法没问题。现在我们要把「链表」这个数据结构在脑子里画出来——画对了，代码就顺了。
想象一列火车：

每一节车厢装着一件货物（比如数字 5）；
每节车厢后面有一个挂钩，钩...</description>
      <category>数据结构</category>
      <pubDate>Sat, 22 Aug 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>基础：单向链表入门</h2>
<p><em>把链表想成一列火车 —— 看懂写法与逻辑，修好你自己的代码</em></p>
<h3>一、先建立画面：链表就是一列火车 🚂</h3>
<p>你已经写过 <code>temp-shejilianbiao.py</code>，说明基础语法没问题。现在我们要把「链表」这个数据结构在脑子里画出来——<strong>画对了，代码就顺了</strong>。</p>
<p>想象一列火车：</p>
<ul>
<li>每一节<strong>车厢</strong>装着一件货物（比如数字 5）；</li>
<li>每节车厢后面有一个<strong>挂钩</strong>，钩着下一节车厢；</li>
<li>列车长手里只拿着<strong>车头</strong>，想找第 3 节车厢，必须从车头一节一节往后走；</li>
<li>最后一节车厢的挂钩空着，什么也没钩——那就是 <code>None</code>。</li>
</ul>
<div class="language- line-numbers-mode" data-highlighter="shiki" data-ext style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-"><span class="line"><span>车头      车厢1      车厢2      车厢3</span></span>
<span class="line"><span> │         │         │         │</span></span>
<span class="line"><span> ▼         ▼         ▼         ▼</span></span>
<span class="line"><span>[5|●] --> [9|●] --> [2|●] --> [7|∅]</span></span>
<span class="line"><span> │         │         │         │</span></span>
<span class="line"><span> value     value     value     value=None</span></span>
<span class="line"><span> next      next      next      (没有下一节)</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>在代码里，「车厢」叫 <strong>节点 Node</strong>，两个属性：</p>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">class</span><span style="--shiki-light:#C18401;--shiki-dark:#E5C07B"> Node</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    def</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> __init__</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E5C07B;--shiki-dark-font-style:italic">self</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#D19A66;--shiki-dark-font-style:italic"> value</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">        self</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.value </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> value   </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 货物：这个节点存的数据</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">        self</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.next </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> None</span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">     # 挂钩：指向下一节车厢（默认空着）</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>而 <code>head</code> 就是「车头」——链表本身不存任何数据，它只记住第一节课厢是谁：</p>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">class</span><span style="--shiki-light:#C18401;--shiki-dark:#E5C07B"> MyLinkedList</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    def</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> __init__</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E5C07B;--shiki-dark-font-style:italic">self</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">        self</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.head </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> None</span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">     # 空链表：一辆车都没有</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>二、三个核心动作：所有链表操作都是它们的组合</h3>
<p>链表的所有增删查，最后都归结为三件事：<strong>走、接、跳</strong>。</p>
<h4>动作 1：走（遍历）—— 从车头走到尾</h4>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">cur </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> head</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">while</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> cur:            </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 只要还有车厢</span></span>
<span class="line"><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">    print</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(cur.value)</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    cur </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> cur.next    </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 走到下一节</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p>循环结束的条件是 <code>cur</code> 变成 <code>None</code>——也就是走过了最后一节车厢。这就是「遍历」。</p>
<h4>动作 2：接（插入）—— 口诀：先接后断！</h4>
<p>想在节点 <code>prev</code> 后面挂一节新车厢 <code>new</code>，有两步：</p>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">new.next </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> prev.next   </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># ① 先接：新钩子先钩住 prev 后面的车厢</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">prev.next </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> new        </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># ② 再断：把 prev 的钩子改挂到 new</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div><blockquote>
<p><strong>顺序为什么不能反？</strong>
如果先写 <code>prev.next = new</code>，prev 后面的整列火车就没人指向了——<strong>丢了</strong>。就像先解开挂钩再挂新的，后面的车厢全散架了。所以必须「新节点先接住后面，前面的钩子再断开来挂新节点」。</p>
</blockquote>
<h4>动作 3：跳（删除）—— 让前一个直接跳过它</h4>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">prev.next </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> prev.next.next   </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># prev 的钩子直接指向「下一个的下一个」</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-"><span class="line"><span>删除前：  [..|●] --> [删|●] --> [..|●]</span></span>
<span class="line"><span>删除后：  [..|●]</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
    <item>
      <title>博客图片API收集</title>
      <link>https://blog.rochsen.cn/notes/deploy/imageApi.html</link>
      <guid>https://blog.rochsen.cn/notes/deploy/imageApi.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">博客图片API收集</source>
      <description>樱花二次元图片API-Dmoe

api: https://www.dmoe.cc/random.php

随机二次元图片API文档（by夜轻）

blog: https://blog.yeqing.net/acg-api/
api：https://api.yppp.net/pc.php</description>
      <category>教程</category>
      <category>图片</category>
      <pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>樱花二次元图片API-Dmoe</h2>
<ul>
<li>api: <a href="https://www.dmoe.cc/random.php" target="_blank" rel="noopener noreferrer">https://www.dmoe.cc/random.php</a></li>
</ul>
<h2>随机二次元图片API文档（by夜轻）</h2>
<ul>
<li>blog: <a href="https://blog.yeqing.net/acg-api/" target="_blank" rel="noopener noreferrer">https://blog.yeqing.net/acg-api/</a></li>
<li>api：<a href="https://api.yppp.net/pc.php" target="_blank" rel="noopener noreferrer">https://api.yppp.net/pc.php</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>bwa使用笔记</title>
      <link>https://blog.rochsen.cn/notes/bioinformatics/bwa.html</link>
      <guid>https://blog.rochsen.cn/notes/bioinformatics/bwa.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">bwa使用笔记</source>
      <category>软件</category>
      <category>生物信息学</category>
      <pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>samtools使用笔记</title>
      <link>https://blog.rochsen.cn/notes/bioinformatics/samtools.html</link>
      <guid>https://blog.rochsen.cn/notes/bioinformatics/samtools.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">samtools使用笔记</source>
      <category>软件</category>
      <category>生物信息学</category>
      <pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->]]></content:encoded>
    </item>
    <item>
      <title>什么是全外显子测序</title>
      <link>https://blog.rochsen.cn/notes/bioinformatics/%E4%BB%80%E4%B9%88%E6%98%AF%E5%85%A8%E5%A4%96%E6%98%BE%E5%AD%90%E6%B5%8B%E5%BA%8F.html</link>
      <guid>https://blog.rochsen.cn/notes/bioinformatics/%E4%BB%80%E4%B9%88%E6%98%AF%E5%85%A8%E5%A4%96%E6%98%BE%E5%AD%90%E6%B5%8B%E5%BA%8F.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">什么是全外显子测序</source>
      <category>生物信息学</category>
      <pubDate>Tue, 18 Aug 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->]]></content:encoded>
    </item>
    <item>
      <title>印象游戏库</title>
      <link>https://blog.rochsen.cn/games/gameStorage.html</link>
      <guid>https://blog.rochsen.cn/games/gameStorage.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">印象游戏库</source>
      <description>提示 游戏库，仿steam库，以卡片形式展示我游玩过的游戏</description>
      <category>游戏</category>
      <pubDate>Tue, 17 Mar 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>游戏库，仿steam库，以卡片形式展示我游玩过的游戏</p>
</div>
<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>艾尔登法环 黑夜君临</title>
      <link>https://blog.rochsen.cn/games/nightReign.html</link>
      <guid>https://blog.rochsen.cn/games/nightReign.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">艾尔登法环 黑夜君临</source>
      <description>提示
这是我心中的的2025年度最佳多人共斗游戏
收集时间：2026-04-15

恶魔商人让XX变得更强

Boss基本数据

Boss弱点


根据守夜Boss推断黑夜王

大空洞水晶位置

个人流派整理
追踪者
轻击重置流
（遗物图）
执行者
冰血刃
(遗物图)
复仇者
力量蜗
（遗物图）
法蜗
（遗物图）
隐士
纯净法师
搓招法师
祷法
守护者...</description>
      <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<div class="hint-container tip">
<p class="hint-container-title">提示</p>
<p>这是我心中的的2025年度最佳多人共斗游戏
收集时间：2026-04-15</p>
</div>
<h2>恶魔商人让XX变得更强</h2>
<img src="/game/nightReign/dealWithEvilSaler.png" loading="lazy">
<h2>Boss基本数据</h2>
<img src="/game/nightReign/bossBaseData.png" loading="lazy">
<h2>Boss弱点</h2>
<img src="/game/nightReign/bossAntiTable.png" loading="lazy">
<img src="/game/nightReign/dlcAntiTable.jpeg" loading="lazy">
<h2>根据守夜Boss推断黑夜王</h2>
<img src="/game/nightReign/bossRankforEnd.jpeg" loading="lazy">
<h2>大空洞水晶位置</h2>
<img src="/game/nightReign/hollowObsidianSite.jpeg" loading="lazy">
<h2>个人流派整理</h2>
<h3>追踪者</h3>
<p>轻击重置流</p>
<p>（遗物图）</p>
<h3>执行者</h3>
<p>冰血刃</p>
<p>(遗物图)</p>
<h3>复仇者</h3>
<p>力量蜗</p>
<p>（遗物图）</p>
<p>法蜗</p>
<p>（遗物图）</p>
<h3>隐士</h3>
<p>纯净法师</p>
<p>搓招法师</p>
<p>祷法</p>
<h3>守护者</h3>
<p>防反鸟</p>
<p>祷鸟</p>
<h3>送葬者</h3>
<p>力修</p>
<p>祷修</p>
<p>双小曲跳劈</p>
<h3>无赖</h3>
<p>改特大剑</p>
<p>改大锤</p>
<p>蓝泪无赖</p>
<p>法赖</p>
<h3>女爵</h3>
<p>法爵</p>
<p>短剑折叠爵</p>
<p>迅剑折叠</p>
<p>战技爵</p>
<h3>学者</h3>
<p>神秘观察男</p>
<p>吃吃喝喝流</p>
<p>冰血刃</p>
<p>刺剑盾戳</p>
<p>壶人</p>
]]></content:encoded>
    </item>
    <item>
      <title>整理个人使用的 AI 工具</title>
      <link>https://blog.rochsen.cn/notes/deploy/deployAItools.html</link>
      <guid>https://blog.rochsen.cn/notes/deploy/deployAItools.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">整理个人使用的 AI 工具</source>
      <description>重要
随着AI模型和工具越来越多，自己也接触使用了部分AI工具，本文档仅用于记录和整理，无任何商业推广

变量对照表
API Key

LLM 工具变量对照表

LLM API
Deepseek

提示
官网：https://www.deepseek.com/
文档：https://api-docs.deepseek.com/zh-cn/

深度求索公...</description>
      <category>部署</category>
      <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<div class="hint-container important">
<p class="hint-container-title">重要</p>
<p>随着AI模型和工具越来越多，自己也接触使用了部分AI工具，本文档仅用于记录和整理，无任何商业推广</p>
</div>
<h2>变量对照表</h2>
<h3>API Key</h3>
<p>| 模型/套餐          | 环境变量               |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>开发框架相关辅导</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/11jobForFrame.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/11jobForFrame.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">开发框架相关辅导</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Agent调试、运维与系统集成</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/23agentDebug.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/23agentDebug.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Agent调试、运维与系统集成</source>
      <description>1. 概述与学习目标
本课程聚焦 Agent 进阶与集成，涵盖从低代码到高代码的完整 Agent 开发链路：

批处理：对同类型多任务进行批量并行处理
Coze 应用：构建带 UI 表单的应用级 Agent
数据表使用：结构化数据的动态查询与写入
多 Agents 模式：分诊台 + 专业子 Agent 的协作架构
多工作流复杂应用：嵌套工作流、跨工作流...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Tue, 07 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>1. 概述与学习目标</h2>
<p>本课程聚焦 <strong>Agent 进阶与集成</strong>，涵盖从低代码到高代码的完整 Agent 开发链路：</p>
<ul>
<li><strong>批处理</strong>：对同类型多任务进行批量并行处理</li>
<li><strong>Coze 应用</strong>：构建带 UI 表单的应用级 Agent</li>
<li><strong>数据表使用</strong>：结构化数据的动态查询与写入</li>
<li><strong>多 Agents 模式</strong>：分诊台 + 专业子 Agent 的协作架构</li>
<li><strong>多工作流复杂应用</strong>：嵌套工作流、跨工作流数据传递</li>
<li><strong>Agent 集成</strong>：通过 API 将 Agent 嵌入现有业务系统</li>
</ul>
<h2>2. Agent 核心架构</h2>
<h3>2.1 Agent 组成公式</h3>
<div class="language- line-numbers-mode" data-highlighter="shiki" data-ext style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-"><span class="line"><span>Agent = System Prompt + RAG（知识库） + 数据表 + 工具（插件/工作流）</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>2.2 Agent 运行时流程</h3>
]]></content:encoded>
    </item>
    <item>
      <title>智能编码革命：AI辅助编程</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/24aiAssistCoding.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/24aiAssistCoding.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">智能编码革命：AI辅助编程</source>
      <description>1. AI 编程概述
1.1 什么是 AI 编程
AI 编程是指利用大语言模型（LLM）辅助软件开发的编程范式。通过 AI 代码编辑器（如 Cursor、Trae、Claude Code 等），开发者可以用自然语言描述需求，AI 自动生成、修改、解释代码，实现从&amp;quot;手写代码&amp;quot;到&amp;quot;指挥 AI 写代码&amp;quot;的转变。
1.2...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>1. AI 编程概述</h2>
<h3>1.1 什么是 AI 编程</h3>
<p>AI 编程是指利用大语言模型（LLM）辅助软件开发的编程范式。通过 AI 代码编辑器（如 Cursor、Trae、Claude Code 等），开发者可以用自然语言描述需求，AI 自动生成、修改、解释代码，实现从&quot;手写代码&quot;到&quot;指挥 AI 写代码&quot;的转变。</p>
<h3>1.2 AI 编程的核心能力</h3>
<ul>
<li><strong>代码生成与补全</strong>：根据上下文自动补全代码，生成完整功能模块</li>
<li><strong>跨文件编辑</strong>：同时理解和修改多个文件，保持项目一致性</li>
<li><strong>智能 Debug</strong>：分析报错信息，定位根因并提供修复方案</li>
<li><strong>代码解释与审查</strong>：解释复杂代码逻辑，进行代码质量审查</li>
<li><strong>自主任务执行</strong>：Agent 模式可独立执行多步骤任务，自动运行命令并迭代修复</li>
</ul>
<h3>1.3 AI 编程能做什么</h3>
<p>| 场景           | 说明                                                      |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>AI赋能的智能测试与质量保障</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/25aiforIntelTest.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/25aiforIntelTest.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">AI赋能的智能测试与质量保障</source>
      <description>1. 课程全景
两条开发路径

2. 核心方法论
2.1 SDD — 规范驱动开发
Specification-Driven Development 的核心思想：规格文档是项目的一等公民，所有实现代码都是规格的可执行表达。
Spec 模板结构

约束条件 C1-C7

2.2 TDD — 测试驱动开发
TDD 在 stock-research 项目中的...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>1. 课程全景</h2>
<h3>两条开发路径</h3>
]]></content:encoded>
    </item>
    <item>
      <title>从Text-to-SQL到数据智能</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/26text2SQL-DataIntel.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/26text2SQL-DataIntel.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">从Text-to-SQL到数据智能</source>
      <description>1. 概述
1.1 什么是 Text-to-SQL
Text-to-SQL 是指将用户的自然语言问题自动转化为SQL查询语句，并执行查询返回结果的技术。它是数据民主化（Data Democratization）的关键基础设施——让业务人员无需掌握 SQL 语法，即可用自然语言从数据库中获取信息。
1.2 核心价值
1.3 三种主流实现路径


2. 技...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 18 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>1. 概述</h2>
<h3>1.1 什么是 Text-to-SQL</h3>
<p>Text-to-SQL 是指将用户的<strong>自然语言问题</strong>自动转化为<strong>SQL查询语句</strong>，并执行查询返回结果的技术。它是数据民主化（Data Democratization）的关键基础设施——让业务人员无需掌握 SQL 语法，即可用自然语言从数据库中获取信息。</p>
<h3>1.2 核心价值</h3>
<h3>1.3 三种主流实现路径</h3>
<p>| 方案                | 核心思路                 | 适用场景               | 代表项目           |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>项目实战：ChatBI开发实战</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/27ChatBI.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/27ChatBI.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">项目实战：ChatBI开发实战</source>
      <description>1. 项目概述
ChatBI 是一个基于 qwen-agent 框架构建的智能股票分析助手，实现了从数据获取、SQL 查询、自动可视化到高级技术分析（ARIMA 预测、MACD 信号、布林带检测、Prophet 周期性分析）的完整垂直领域 Agent。
核心定位

关键技术栈


2. 系统架构总览
Agent = LLM + System Promp...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sun, 19 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>1. 项目概述</h2>
<p>ChatBI 是一个基于 <strong>qwen-agent</strong> 框架构建的<strong>智能股票分析助手</strong>，实现了从数据获取、SQL 查询、自动可视化到高级技术分析（ARIMA 预测、MACD 信号、布林带检测、Prophet 周期性分析）的完整垂直领域 Agent。</p>
<h3>核心定位</h3>
<div class="language- line-numbers-mode" data-highlighter="shiki" data-ext style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-"><span class="line"><span>理解业务需求 → 打造 Skill → POC 快速验证 → 架构迁移迭代</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div><h3>关键技术栈</h3>
<p>| 层级       | 技术选型                            |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>部署及提效辅导</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/28jobForBuild.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/28jobForBuild.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">部署及提效辅导</source>
      <description>1. Agent 平台：Coze、Dify 与 Agent 进阶集成
1.1 什么是 LLM Agent？
定义：LLM Agent = LLM + 工具 + 记忆 + 规划循环。

Agent 的三大核心能力：
ReAct 执行示例：


思考题：Agent 与 Function Calling 是一回事吗？
Function Calling 是 A...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Thu, 23 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>1. Agent 平台：Coze、Dify 与 Agent 进阶集成</h2>
<h3>1.1 什么是 LLM Agent？</h3>
<p><strong>定义</strong>：LLM Agent = LLM + 工具 + 记忆 + 规划循环。</p>
<p>| 维度     | 单轮 LLM 调用                      | LLM Agent                                    |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>Embeddings和向量数据库</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/29Embeddings.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/29Embeddings.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Embeddings和向量数据库</source>
      <description>1. 课程概述
本课围绕 Embedding（向量化） 与 向量数据库 两大主题，核心学习目标：

一句话主线：把万物（文本、商品、人物、图片）变成低维稠密向量，放进向量数据库做相似度检索，喂给 LLM 做 RAG 问答。

2. 什么是 Embedding

定义：Embedding（嵌入/向量化）是一种降维方式，将不同特征转换为维度相同的向量。

...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>1. 课程概述</h2>
<p>本课围绕 <strong>Embedding（向量化）</strong> 与 <strong>向量数据库</strong> 两大主题，核心学习目标：</p>
<p>| 模块                 | 内容                                                         |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>RAG技术与应用</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/30RAGTechApply.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/30RAGTechApply.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">RAG技术与应用</source>
      <description>1. 大模型应用开发的三种模式
在AI大模型应用开发中，有三种主要的技术路线：提示工程、RAG 和 微调。


2. RAG 核心原理与流程
2.1 什么是 RAG？
RAG（Retrieval-Augmented Generation） = 检索增强生成

一种结合信息检索（Retrieval）和文本生成（Generation）的技术
通过实时检索相...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>1. 大模型应用开发的三种模式</h2>
<p>在AI大模型应用开发中，有三种主要的技术路线：<strong>提示工程</strong>、<strong>RAG</strong> 和 <strong>微调</strong>。</p>
<p>| 模式         | 适用场景           | 核心思想                           |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>RAG多模态数据处理</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/31RAGmutilProcess.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/31RAGmutilProcess.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">RAG多模态数据处理</source>
      <description>RAG 多模态数据处理实战指南
传统 RAG 系统大多围绕纯文本构建：把文档切成片段、编码成向量、检索后拼进 Prompt。但真实业务里的知识往往是混合形态的——官方规定是 PDF，内部 FAQ 是 Word，活动介绍里有大量海报图片和表格，培训资料是视频。如果只处理文字，这些信息在入库的那一刻就被丢掉了，检索自然也就回答不了&amp;quot;最近万圣节的活...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>RAG 多模态数据处理实战指南</h2>
<p>传统 RAG 系统大多围绕纯文本构建：把文档切成片段、编码成向量、检索后拼进 Prompt。但真实业务里的知识往往是混合形态的——官方规定是 PDF，内部 FAQ 是 Word，活动介绍里有大量海报图片和表格，培训资料是视频。如果只处理文字，这些信息在入库的那一刻就被丢掉了，检索自然也就回答不了&quot;最近万圣节的活动海报长什么样&quot;或者&quot;我的车被剐蹭了，你能看到视频吗&quot;这类问题。</p>
<p>多模态 RAG 要解决的核心问题，是<strong>让文本、图片、视频在同一个向量空间里可比较</strong>。当一张万圣节海报和一句&quot;万圣节活动海报&quot;被编码得足够接近时，&quot;以文搜图&quot;就不再是额外的工程，而是同一次相似度计算的自然结果。</p>
<p>本文围绕两条主线展开：前半部分是 Gemini 的多模态理解能力与通义多模态 Embedding 的使用，后半部分是一个完整的迪士尼 RAG 助手实战，最后补齐切片策略与 NotebookLM 两个主题。文中代码与运行结果均取自课程课件与配套 Notebook，按原样整理。</p>
<h3>多模态 RAG 的整体结构</h3>
<p>一个多模态 RAG 系统可以拆成数据层、向量化层、索引存储层、检索层和生成层五段。关键点在于向量化层：文本、图片、视频走的是同一个 Embedding 模型，产出维度一致的向量，因此后续只需要维护一份索引。</p>
<p>这套结构带来的直接好处是：索引只有一份，新增一种模态不需要额外的检索通道；代价是对 Embedding 模型的要求更高，它必须在同一个语义空间里同时&quot;读懂&quot;一句话和一张图。</p>
<h3>Gemini 的多模态处理</h3>
<h4>多模态能力概览</h4>
<p>Gemini 的多模态是&quot;原生统一架构&quot;：从预训练开始就把文本、图像、音频、视频、PDF、代码放在同一表征空间里学习，而不是先训一个大语言模型再外挂视觉或语音模块。因此信息损耗更小，时序和细节保留更完整。</p>
<p>它有几个比较关键的能力特征：</p>
<ul>
<li><strong>端到端推理</strong>：同一组 Transformer 参数直接处理任意组合的输入。给它一张 CT 影像加一段病历文本，可以同步给出诊断建议；给它一段手写食谱视频，可以直接转成可分享的数字菜谱。</li>
<li><strong>上下文规模</strong>：Gemini 3 Pro 支持 100 万 token 的长窗口，可一次性读入 1 小时视频或 700 页 PDF，再输出 6.4 万 token 的结构化报告。</li>
<li><strong>生成能力</strong>：不仅能&quot;看&quot;和&quot;听&quot;，还能&quot;画&quot;和&quot;说&quot;，包括文本生成图像、图像编辑、褪色修复、3D 模型输出，以及流式生成音频实现边看边解说。</li>
</ul>
<p>课件里还提到了用于方案配图的 Nano Banana（正式名称对应 Gemini 3.0 Pro Image）。它在写实感、文字渲染、角色一致性和世界知识几个维度上表现突出，其中&quot;能在图片里把字写对&quot;和&quot;同一角色跨场景保持一致&quot;是过去图像模型比较薄弱的地方。日常汇报中常见的四种配图风格可以总结为：</p>
<p>| 风格       | 提示要点                                               | 适用场景           |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>RAG高级技术与调优</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/32RAGenhance.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/32RAGenhance.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">RAG高级技术与调优</source>
      <description>朴素 RAG 的流程可以用三个动作概括：Indexing、Retrieval、Generation。真正把 RAG 应用从 Demo 推到落地，难点几乎全部集中在&amp;quot;如何把知识存得更好&amp;quot;和&amp;quot;如何把有用的那一小撮知识找出来&amp;quot;这两件事上。本文将课件脉络与工作区中的四组可运行代码结合起来，梳理一条完整的调优路径。
工作区...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sun, 20 Sep 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<p>朴素 RAG 的流程可以用三个动作概括：Indexing、Retrieval、Generation。真正把 RAG 应用从 Demo 推到落地，难点几乎全部集中在&quot;如何把知识存得更好&quot;和&quot;如何把有用的那一小撮知识找出来&quot;这两件事上。本文将课件脉络与工作区中的四组可运行代码结合起来，梳理一条完整的调优路径。</p>
<p>工作区中的代码按主题分为三个目录：</p>
<p>| 目录              | 主题                                                     | 关键文件                                                     |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>项目实战：企业知识库</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/33KnowledgeDataBase.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/33KnowledgeDataBase.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">项目实战：企业知识库</source>
      <description>1. 项目背景与比赛任务
1.1 企业RAG挑战赛
比赛仓库：https://github.com/trustbit/enterprise-rag-challenge
比赛任务是基于公司年度报告构建一个问答系统，比赛当天的流程如下：

收到随机挑选公司的 100 份年度报告，需在 2.5 小时内解析这些报告并构建数据库；报告为 PDF 格式，每份最长可...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h3>1. 项目背景与比赛任务</h3>
<h4>1.1 企业RAG挑战赛</h4>
<p>比赛仓库：https://github.com/trustbit/enterprise-rag-challenge</p>
<p>比赛任务是基于公司年度报告构建一个问答系统，比赛当天的流程如下：</p>
<ul>
<li>收到随机挑选公司的 100 份年度报告，需在 2.5 小时内解析这些报告并构建数据库；报告为 PDF 格式，每份最长可达 1000 页</li>
<li>系统随后生成 100 个随机问题（基于预设模板），RAG 系统必须尽快作答</li>
<li>所有问题都有确定的答案，例如：是/否、公司名称（某些情况下是多个公司名）、领导职位头衔、推出的产品名称、数值指标（营收、商店数量等）</li>
<li>每个答案都必须注明引用的页码，确保系统从原文得出答案，而不是输出虚假信息（hallucinate）</li>
</ul>
<h4>1.2 冠军方案 RAG-Challenge-2</h4>
<p>参考项目：https://github.com/IlyaRice/RAG-Challenge-2</p>
<p>RAG-Challenge 系统在比赛中赢得了所有类别的奖项，在处理公司年度报告问答上表现突出。这是竞赛代码，功能完善但存在一些临时方案，比如 IBM Watson 集成部分是竞赛特定的，脱离比赛环境无法正常工作。</p>
<p>系统特点：</p>
<ul>
<li>定制 PDF 解析：使用 Docling 解析 PDF 文档</li>
<li>向量搜索与父文档检索：通过向量搜索实现文档检索</li>
<li>LLM 重排序：利用 LLM 对检索结果重新排序，提高上下文相关性</li>
<li>结构化输出提示：采用链式推理（chain-of-thought reasoning）进行结构化输出</li>
<li>查询路由：支持多公司比较的查询路由功能</li>
</ul>
<p>获胜方案在 native RAG 的基础上，加入了两个路由器（router）和 LLM 重排序模块（LLM reranking），在 retrieval、generation 以及总分上都取得了不错的成绩，采用 o3-mini 进行推理。</p>
<h4>1.3 工作区中的两个项目</h4>
<p>| 维度       | RAG-Challenge-2-main（原版）                                 | RAG-cy（改造版）                                           |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>部分场景中可以取代RAG的技术</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/34partofReplaceRAG.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/34partofReplaceRAG.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">部分场景中可以取代RAG的技术</source>
      <description>第 0 章 导读与工程速览
0.1 问题的起点
RAG（Retrieval-Augmented Generation，检索增强生成）在过去两年几乎成了&amp;quot;让大模型接入私有知识&amp;quot;的默认答案。但工程实践中，它反复暴露出三类问题：

切碎了就拼不回来——文档被切成固定大小的 Chunk，主题边界被破坏，跨页引用、表格、代码逻辑全部断裂。
检...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>第 0 章 导读与工程速览</h2>
<h3>0.1 问题的起点</h3>
<p>RAG（Retrieval-Augmented Generation，检索增强生成）在过去两年几乎成了&quot;让大模型接入私有知识&quot;的默认答案。但工程实践中，它反复暴露出三类问题：</p>
<ol>
<li><strong>切碎了就拼不回来</strong>——文档被切成固定大小的 Chunk，主题边界被破坏，跨页引用、表格、代码逻辑全部断裂。</li>
<li><strong>检索是&quot;系统行为&quot;，不是&quot;模型行为&quot;</strong>——搜索策略、召回数量在系统上线前就写死了，LLM 只能被动接收 Top-k，不参与任何检索决策。</li>
<li><strong>知识是静态的</strong>——新增文档只是&quot;多了一份搜索素材&quot;，知识之间的关联、摘要、实体关系不会随之更新。</li>
</ol>
<p>而&quot;超长上下文&quot;&quot;Agentic Retrieval&quot;&quot;LLM Wiki&quot;这三条路线，恰好分别瞄准了这三点。</p>
<h3>0.2 配套工程速览：Agentic Search</h3>
<p>本文的工程样本是工作区中的 <strong>Agentic Search</strong>——一个基于 Qwen 模型推理决策的多源企业搜索系统。它的技术栈与规模如下：</p>
<p>| 层次     | 文件                 | 规模     | 职责                                             |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>LLM Wiki</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/35LLMWiki.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/35LLMWiki.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">LLM Wiki</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>RAG相关辅导</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/36jobForRAG.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/36jobForRAG.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">RAG相关辅导</source>
      <description>RAG 是大模型应用开发岗位面试的必考项。面试官的问题看上去零散，其实都挂在同一条主线上：怎么把知识存进去（Indexing）→ 怎么把真正有用的那一小部分找出来（Retrieval）→ 怎么让模型结合提问和检索结果生成答案（Generation）。
这三个步骤看似简单，但从构建到落地，中间塞满了分块、Embedding、改写、重排、评估、维护这些细活...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Thu, 08 Oct 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<p>RAG 是大模型应用开发岗位面试的必考项。面试官的问题看上去零散，其实都挂在同一条主线上：<strong>怎么把知识存进去（Indexing）→ 怎么把真正有用的那一小部分找出来（Retrieval）→ 怎么让模型结合提问和检索结果生成答案（Generation）</strong>。</p>
<p>这三个步骤看似简单，但从构建到落地，中间塞满了分块、Embedding、改写、重排、评估、维护这些细活。本文按这条主线把高频面试题、对应的技术方案和可落地的代码整理在一起，面试前逐条过一遍即可。</p>
]]></content:encoded>
    </item>
    <item>
      <title>大厂优秀工程师使用AI Coding的最新方法与经验</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/37aiCodingExp.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/37aiCodingExp.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">大厂优秀工程师使用AI Coding的最新方法与经验</source>
      <description>Coding Agent 已经可以根据一句话需求完成开发了，为什么我们还要学习方法？
在一些常见的小型项目中，一句话需求已经能够生成一个可以运行的初版。但这句话里通常还留着很多没有说清楚的内容：给谁用、在什么情况下用、需要哪些功能、做到什么程度才算符合预期。Agent 生成代码时会根据自己的理解补上这些，而这些补出来的内容是否符合实际需要，需要我们判断...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<p>Coding Agent 已经可以根据一句话需求完成开发了，为什么我们还要学习方法？</p>
<p>在一些常见的小型项目中，一句话需求已经能够生成一个可以运行的初版。但这句话里通常还留着很多没有说清楚的内容：给谁用、在什么情况下用、需要哪些功能、做到什么程度才算符合预期。Agent 生成代码时会根据自己的理解补上这些，而这些补出来的内容是否符合实际需要，需要我们判断。</p>
<p>本文围绕四个问题展开：<strong>要做什么、怎样才算做对、用什么验证、根据什么继续修改。</strong> 前半部分讲 Spec 与 SpecDD，后半部分讲 Test Case 与 TDD，最后看两者怎样围绕同一条行为要求配合，并把这套方法整理成 Agent 可以读取的工作指引。</p>
<p>贯穿全文的案例是一个直播聊天分析应用：在本机监听一个直播间，在自己的界面显示采集到的评论；积累一段时间后，选择分析范围，向自己的 Agent 提问，例如&quot;这段时间大家最关心的问题是什么&quot;，在同一界面得到基于这批评论的回答。</p>
<h2>2. 一句话能生成软件，为什么还要学习使用方法</h2>
<p>在一句话需求的背后，通常还留着没有说清楚的部分。Agent 在生成代码时，会根据自己的理解补上这些内容。我们需要判断，它补出来的内容是否符合实际需要。</p>
<h3>2.1 从一句话需求到具体的业务场景</h3>
<p>比如&quot;帮我做一个直播间聊天分析工具&quot;。Agent 可以做一张词频图，也可以做自动回复机器人，或者做一个能针对评论提问的分析页面。这些方案解决的问题并不相同。</p>
<p>我们希望监听一个直播间，在自己的界面显示采集到的评论。积累一段时间后，选择分析范围，向自己的 Agent 提问，例如&quot;这段时间大家最关心的问题是什么&quot;，让它根据这批评论给出回答。</p>
<p>| 需要明确的内容 | 直播聊天分析应用 |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>大型软件项目的AI开发与AI重构</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/38aiCodingForBigProj.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/38aiCodingForBigProj.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">大型软件项目的AI开发与AI重构</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>AI Coding中的团队重新分工与新协作模式</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/39aiTeamMode.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/39aiTeamMode.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">AI Coding中的团队重新分工与新协作模式</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>在华为昇腾显卡上部署Deepseek-V4模型并连通本地Claude Code</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/40dsv4inHuawei.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/40dsv4inHuawei.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">在华为昇腾显卡上部署Deepseek-V4模型并连通本地Claude Code</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Function Calling与MCP</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/41FunctionCallingMCP.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/41FunctionCallingMCP.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Function Calling与MCP</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Agent的自主规划与工具开发</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/42AgentRuler.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/42AgentRuler.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Agent的自主规划与工具开发</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Agent的能力优化与效果评估</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/43AgentEnchance.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/43AgentEnchance.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Agent的能力优化与效果评估</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>OpenManus开发实战</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/44OpenManusProj.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/44OpenManusProj.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">OpenManus开发实战</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Harness Engineering</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/45HarnessEngineering.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/45HarnessEngineering.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Harness Engineering</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>搭建Hermes Agent中的长期记忆和自进化能力</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/46HermesAgentAbility.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/46HermesAgentAbility.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">搭建Hermes Agent中的长期记忆和自进化能力</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>实现Hermes中的多Agent协作、主Agent调度</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/47HermesAgentRuler.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/47HermesAgentRuler.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">实现Hermes中的多Agent协作、主Agent调度</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>Agent相关辅导</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/48jobForAgent.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/48jobForAgent.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Agent相关辅导</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>pytorch与视觉检测</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/10cnnPytorch.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/10cnnPytorch.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">pytorch与视觉检测</source>
      <description>第一章：PyTorch 核心基础
1.1 什么是 PyTorch？
PyTorch = NumPy + GPU，它完美解决了 NumPy 只能使用 CPU 计算、大数据场景下速度过慢的痛点。
PyTorch 的核心数据结构是张量（Tensor），它的用法和 NumPy 几乎完全一致，唯一的区别是张量可以被轻松迁移到 GPU 上运行，计算速度能提升几十倍...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>第一章：PyTorch 核心基础</h2>
<h3>1.1 什么是 PyTorch？</h3>
<p>PyTorch = NumPy + GPU，它完美解决了 NumPy 只能使用 CPU 计算、大数据场景下速度过慢的痛点。</p>
<p>PyTorch 的核心数据结构是<strong>张量（Tensor）</strong>，它的用法和 NumPy 几乎完全一致，唯一的区别是张量可以被轻松迁移到 GPU 上运行，计算速度能提升几十倍。</p>
<h3>1.2 张量（Tensor）入门</h3>
<p>张量是 PyTorch 中最基础的数据结构，我们可以像操作 NumPy 数组一样操作它：</p>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> torch</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> numpy </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">as</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> np</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 1. 创建自定义张量</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">x </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> torch.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">Tensor</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">([[</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">2</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">3</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">], [</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">4</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">5</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">6</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">], [</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">7</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">8</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">9</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">]])</span></span>
<span class="line"><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">print</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(x)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 2. 创建全零张量</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">x</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">torch.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">zeros</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">3</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">print</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(x)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 3. 从NumPy数组无缝转换为张量</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">a </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> np.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">ones</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">3</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">x </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> torch.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">from_numpy</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(a)</span></span>
<span class="line"><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">print</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(x)</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>1.3 张量的基本运算</h3>
<p>PyTorch 提供了丰富的张量运算，所有运算都支持 GPU 加速：</p>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> torch</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">x </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> torch.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">Tensor</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">([[</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">2</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">3</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">], [</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">4</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">5</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">6</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">], [</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">7</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">8</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">9</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">]])</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 求幂运算</span></span>
<span class="line"><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">print</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(x.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">pow</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1.0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">))  </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 倒数</span></span>
<span class="line"><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">print</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(x.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">pow</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">2.0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">))   </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 平方</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 按列求和（dim=0 代表列维度）</span></span>
<span class="line"><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">print</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(x.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">sum</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">dim</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">))</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 按行求和（dim=1 代表行维度）</span></span>
<span class="line"><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">print</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(x.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">sum</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">dim</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">))</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 对角矩阵转换</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">temp </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> x.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">sum</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">dim</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2"> =</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">).</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">pow</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1.0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">print</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(temp.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">diag_embed</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">())</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>1.4 自动求导机制</h3>
<p>神经网络训练的核心是反向传播，手动推导导数公式非常复杂，而 PyTorch 的 ** 自动求导（Autograd）** 帮我们解决了这个问题：</p>
<p>你只需要编写前向传播的计算逻辑，PyTorch 会自动记录所有操作，调用<code>.backward()</code>就能自动算出所有参数的梯度。</p>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 定义需要计算梯度的张量</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">x </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> torch.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">tensor</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">2.0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">requires_grad</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">True</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">) </span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 前向计算：y = x²</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">y </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> x</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">**</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">2</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> </span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 反向传播，自动计算梯度</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">y.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">backward</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">() </span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 梯度 dy/dx = 2x = 4</span></span>
<span class="line"><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">print</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(x.grad)</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>1.5 动态图与静态图</h3>
<p>与 TensorFlow 1.x 的静态图不同，PyTorch 使用<strong>动态计算图</strong>：</p>
<ul>
<li>
<p>静态图：先写好完整的网络结构，编译后才能运行，调试困难</p>
</li>
<li>
<p>动态图：每次前向传播都会实时构建计算图，所见即所得，可以随时打印变量、逐行调试，就像写普通 Python 脚本一样方便</p>
</li>
</ul>
<p>这也是为什么 PyTorch 成为了学术界和研究人员的首选框架。</p>
<h3>1.6 分布式训练进阶</h3>
<p>PyTorch 支持多种分布式训练方案，帮助你快速利用多 GPU 加速训练：</p>
<ol>
<li>
<p><strong>DataParallel</strong>：最简单的单机多 GPU 方案，一行代码包装模型即可</p>
</li>
<li>
<p><strong>DistributedDataParallel</strong>：更高效的多机多 GPU 方案，负载更均衡</p>
</li>
<li>
<p><strong>PyTorch Lightning</strong>：封装了所有分布式细节，只需指定 GPU 数量即可自动启用</p>
</li>
</ol>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># PyTorch Lightning 简化多GPU训练</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">trainer </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF"> Trainer</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">accelerator</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"gpu"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">devices</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">4</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">strategy</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"ddp"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">) </span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">trainer.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">fit</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(model)</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3>1.7 PyTorch 训练完整流程</h3>
<h3>1.8 实战：你的第一个 PyTorch 神经网络</h3>
<p>我们用波士顿房价预测来演示一个完整的训练流程：</p>
<div class="language-python line-numbers-mode" data-highlighter="shiki" data-ext="python" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-python"><span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> torch</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> torch.nn </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">as</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> nn</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> torch.optim </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">as</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> optim</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> pandas </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">as</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> pd</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">from</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> sklearn.model_selection </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">import</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> train_test_split</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 1. 加载数据集</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">data </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> pd.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">read_csv</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">'housing.csv'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">header</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">None</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">sep</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">'\s+'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">X </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> data.iloc[:, :</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">13</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">].values </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 13个房屋特征</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">y </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> data.iloc[:, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">13</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">].values  </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 房价标签</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 2. 划分数据集并转换为张量</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">X_train, X_test, y_train, y_test </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF"> train_test_split</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(X, y, </span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">test_size</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0.2</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">X_train </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> torch.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">from_numpy</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(X_train).</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">float</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">y_train </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> torch.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">from_numpy</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(y_train).</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">float</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">().</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">unsqueeze</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">X_test </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> torch.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">from_numpy</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(X_test).</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">float</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">y_test </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> torch.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">from_numpy</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(y_test).</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">float</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">().</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">unsqueeze</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 3. 定义3层全连接神经网络</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">class</span><span style="--shiki-light:#C18401;--shiki-dark:#E5C07B"> Net</span><span style="--shiki-light:#C18401;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#C18401;--shiki-dark:#E5C07B">nn</span><span style="--shiki-light:#C18401;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#C18401;--shiki-dark:#E5C07B">Module</span><span style="--shiki-light:#C18401;--shiki-dark:#ABB2BF">)</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    def</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> __init__</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E5C07B;--shiki-dark-font-style:italic">self</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">        super</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(Net, </span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">self</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">).</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">__init__</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">        self</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.fc1 </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> nn.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">Linear</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">13</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">64</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)  </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 输入层->隐藏层</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">        self</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.fc2 </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> nn.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">Linear</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">64</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">32</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)  </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 隐藏层->隐藏层</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">        self</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.fc3 </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> nn.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">Linear</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">32</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)   </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 隐藏层->输出层</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        </span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    def</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> forward</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E5C07B;--shiki-dark-font-style:italic">self</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#D19A66;--shiki-dark-font-style:italic"> x</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">):</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        x </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> torch.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">relu</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">self</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">fc1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(x))</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        x </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> torch.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">relu</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B">self</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">fc2</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(x))</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">        x </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#E45649;--shiki-dark:#E5C07B"> self</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">fc3</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(x)</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">        return</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> x</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">model </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF"> Net</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 4. 定义损失函数和优化器</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">criterion </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> nn.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">MSELoss</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">()</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">optimizer </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> optim.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">Adam</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(model.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">parameters</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(), </span><span style="--shiki-light:#986801;--shiki-light-font-style:inherit;--shiki-dark:#E06C75;--shiki-dark-font-style:italic">lr</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0.001</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 5. 训练循环</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">epochs </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 1000</span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">for</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> epoch </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">in</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2"> range</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(epochs):</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    # 前向传播</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    y_pred </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF"> model</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(X_train)</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    loss </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">=</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF"> criterion</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(y_pred, y_train)</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    </span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">    # 反向传播和优化</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    optimizer.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">zero_grad</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">()  </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 清空梯度</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    loss.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">backward</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">()        </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 计算梯度</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    optimizer.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">step</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">()       </span><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic"># 更新权重</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">    </span></span>
<span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">    if</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> epoch </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">%</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 100</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2"> ==</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">        print</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">(</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">f</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">'Epoch </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">{</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">epoch</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">}</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">, Loss: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">{</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">loss.</span><span style="--shiki-light:#383A42;--shiki-dark:#61AFEF">item</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">()</span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">:.4f</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">}</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div>]]></content:encoded>
      <enclosure url="https://p6-flow-imagex-sign.byteimg.com/tos-cn-i-a9rns2rl98/rc/online_export/27f88fc0140c41b48ab17de5df212b86~tplv-noop.jpeg?rk3s=49177a0b&amp;x-expires=1774755542&amp;x-signature=7QbG795ci8EHsQOCTN31%2FVjs42U%3D&amp;resource_key=d810eeb8-6fad-46d1-bb65-777c3b628167&amp;resource_key=d810eeb8-6fad-46d1-bb65-777c3b628167" type="image/"/>
    </item>
    <item>
      <title>LLM微调原理</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/12llmFineTune.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/12llmFineTune.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">LLM微调原理</source>
      <description>1. 大模型微调概述
1.1 什么是模型微调
微调（Fine-tuning） 是将预训练好的大模型进行二次训练，使其适应特定任务或领域的过程。
1.2 为什么需要微调

1.3 两类微调场景对比
关键区别：

基座模型公司：目标是提升通用语言能力
应用开发者：目标是适配垂直领域和私域知识


2. 高效微调方法对比
2.1 常见高效微调方法一览
2.2...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sun, 19 Apr 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>1. 大模型微调概述</h2>
<h3>1.1 什么是模型微调</h3>
<p><strong>微调（Fine-tuning）</strong> 是将预训练好的大模型进行二次训练，使其适应特定任务或领域的过程。</p>
<h3>1.2 为什么需要微调</h3>
<p>| 问题类型         | 具体表现                 | 解决方案 |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>高质量微调数据工程与评估</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/13llmFineTuneEval.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/13llmFineTuneEval.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">高质量微调数据工程与评估</source>
      <description>1. 前置知识：什么是 SFT 微调？
1.1 通俗理解
想象你已经有一个&amp;quot;博学的大学生&amp;quot;（基座模型，如 Qwen3.5-0.8B），他什么都知道一点，但对医疗领域不够专业。你希望他变成一名&amp;quot;实习医生&amp;quot;，能够用专业的中文回答患者的医疗问题。
SFT（Supervised Fine-Tuning，监督微调） 就是拿...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Thu, 25 Jun 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>1. 前置知识：什么是 SFT 微调？</h2>
<h3>1.1 通俗理解</h3>
<p>想象你已经有一个&quot;博学的大学生&quot;（基座模型，如 Qwen3.5-0.8B），他什么都知道一点，但对<strong>医疗领域</strong>不够专业。你希望他变成一名&quot;实习医生&quot;，能够用专业的中文回答患者的医疗问题。</p>
<p><strong>SFT（Supervised Fine-Tuning，监督微调）</strong> 就是拿一堆&quot;标准问答对&quot;（患者问题 → 专业回答）去训练这个模型，让它学会特定的领域知识和回答风格。</p>
<h3>1.2 核心概念速查表</h3>
<p>| 概念                            | 通俗解释                             | 本文中的实例                                              |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>LLM模型蒸馏与微调实操</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/14llmFineTunePr.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/14llmFineTunePr.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">LLM模型蒸馏与微调实操</source>
      <description>一、前置知识扫盲
1.1 什么是大语言模型（LLM）
类比理解：一个读过海量书籍的&amp;quot;超级学霸&amp;quot;
想象你有一个朋友，他从小就把整个互联网上的文章、书籍、对话全部读了一遍。当你问他任何问题时，他能根据自己读过的内容，预测出最合理的回答。大语言模型（Large Language Model，简称LLM）就是这样一种AI程序——它通过&amp;qu...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>一、前置知识扫盲</h2>
<h3>1.1 什么是大语言模型（LLM）</h3>
<p><strong>类比理解：一个读过海量书籍的&quot;超级学霸&quot;</strong></p>
<p>想象你有一个朋友，他从小就把整个互联网上的文章、书籍、对话全部读了一遍。当你问他任何问题时，他能根据自己读过的内容，预测出最合理的回答。大语言模型（Large Language Model，简称LLM）就是这样一种AI程序——它通过&quot;阅读&quot;海量文本数据，学会了理解人类语言并生成回复。</p>
<blockquote>
<p>🏭 <strong>工业界的叫法</strong>：你可能会听到&quot;GPT&quot;、&quot;Qwen&quot;、&quot;DeepSeek&quot;、&quot;LLaMA&quot;这些名字，它们都是不同公司或团队训练出来的大语言模型，就像不同学校培养出来的学霸，各有特长。</p>
</blockquote>
<p><strong>核心概念：</strong></p>
<p>| 术语                       | 通俗解释                                                     |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>视觉与多模态模型</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/15cvandMultiModal.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/15cvandMultiModal.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">视觉与多模态模型</source>
      <description>1. 概述
1.1 用日常比喻理解&amp;quot;视觉大模型&amp;quot;
想象一下，你有一个既能看到图像、又能读懂文字、还能开口说话的超级助手：

你给它看一张车祸现场的照片，它能告诉你&amp;quot;这辆白色轿车的右前门被撞凹了，保险杠开裂&amp;quot;；
你让它看一段行车记录仪视频，它能总结&amp;quot;视频中有两个人，一辆白车剐蹭到了墙角&amp;quot;；
你丢...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Mon, 29 Jun 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>1. 概述</h2>
<h3>1.1 用日常比喻理解&quot;视觉大模型&quot;</h3>
<p>想象一下，你有一个<strong>既能看到图像、又能读懂文字、还能开口说话</strong>的超级助手：</p>
<ul>
<li>你给它看一张车祸现场的照片，它能告诉你&quot;这辆白色轿车的右前门被撞凹了，保险杠开裂&quot;；</li>
<li>你让它看一段行车记录仪视频，它能总结&quot;视频中有两个人，一辆白车剐蹭到了墙角&quot;；</li>
<li>你丢给它一份扫描的日文病历 PDF，它能提取出其中的关键信息并翻译成中文。</li>
</ul>
<p>这就是<strong>视觉大模型（Visual Large Model，简称 VLM）</strong>在做的事情：<strong>让计算机同时&quot;看懂&quot;图像和&quot;读懂&quot;文字，并用自然语言回答你的问题</strong>。</p>
<blockquote>
<p>📌 <strong>通俗版定义</strong>：<br>
VLM = 图像识别器 + 文本理解器 + 语言生成器，三者合为一体。</p>
</blockquote>
<blockquote>
<p>📌 <strong>专业版定义</strong>：<br>
视觉大模型是一种基于 Transformer 架构的多模态神经网络，它通过将图像和文本映射到统一的语义空间（embedding），实现跨模态的对齐与推理，从而支持图像描述、视觉问答、文档理解等任务。</p>
</blockquote>
<h3>1.2 &quot;多模态理解&quot;解决了什么问题？</h3>
<p>在传统 AI 系统中，图像识别和文本理解是<strong>分开的两条线</strong>：</p>
<div class="language- line-numbers-mode" data-highlighter="shiki" data-ext style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-"><span class="line"><span>传统方式：</span></span>
<span class="line"><span>  图像 → CNN/YOLO → "这是一辆车"（标签）</span></span>
<span class="line"><span>  文本 → RNN/BERT → "车被撞了"（分类）</span></span>
<span class="line"><span></span></span>
<span class="line"><span>VLM方式：</span></span>
<span class="line"><span>  图像 + 文本 → 一个统一模型 → 这辆白色特斯拉Model 3的右前门严重凹陷，预估维修费用约8000元</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>多模态理解</strong>的核心价值在于：</p>
<p>| 痛点                           | VLM 的解决方案               |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>项目实战：AI质检</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/16aiChecK.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/16aiChecK.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">项目实战：AI质检</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>企业级AI部署：从硬件选型到框架选择</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/18aiDeployCompany.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/18aiDeployCompany.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">企业级AI部署：从硬件选型到框架选择</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->]]></content:encoded>
    </item>
    <item>
      <title>AI服务核心：高并发原理与性能监控调优</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/19aiServiceCore.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/19aiServiceCore.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">AI服务核心：高并发原理与性能监控调优</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
]]></content:encoded>
    </item>
    <item>
      <title>SQLang深度优化：Radix缓存与复杂任务的极致吞吐</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/20SQLangOpt.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/20SQLangOpt.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">SQLang深度优化：Radix缓存与复杂任务的极致吞吐</source>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 21 Mar 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Coze工作原理与应用实例</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/21aiCozeExample.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/21aiCozeExample.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Coze工作原理与应用实例</source>
      <description>1. Coze 平台概述
1.1 什么是 Coze？
Coze（扣子）是字节跳动推出的 AI Agent（智能体）开发平台，定位为低代码 / 零代码的 AI 应用构建工具。它将大语言模型（LLM）比作&amp;quot;发动机&amp;quot;，而 Coze 则是&amp;quot;汽车工厂&amp;quot;——开发者不需要制造发动机，只需拼装工作流，就能让一个 AI 应用运转起...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sat, 04 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>1. Coze 平台概述</h2>
<h3>1.1 什么是 Coze？</h3>
<p>Coze（扣子）是<strong>字节跳动</strong>推出的 <strong>AI Agent（智能体）开发平台</strong>，定位为<strong>低代码 / 零代码的 AI 应用构建工具</strong>。它将大语言模型（LLM）比作&quot;发动机&quot;，而 Coze 则是&quot;汽车工厂&quot;——开发者不需要制造发动机，只需拼装工作流，就能让一个 AI 应用运转起来。</p>
<h3>1.2 Coze 的发展演进</h3>
<p>| 阶段                      | 内容                                                     |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>Dify本地化部署和应用</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/22aiDifyDeploy.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/22aiDifyDeploy.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Dify本地化部署和应用</source>
      <description>1. Dify 平台概述
1.1 什么是 Dify？
Dify 是一个开源的大语言模型（LLM）应用开发平台，融合了 Agent、AI Workflow、RAG（检索增强生成） 等核心能力，帮助开发者快速构建和部署 AI 原生应用。它可视化了 LangChain 的核心理念，降低了 AI 应用开发的门槛。
1.2 Dify vs 其他平台


2. D...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Mon, 06 Jul 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>1. Dify 平台概述</h2>
<h3>1.1 什么是 Dify？</h3>
<p>Dify 是一个开源的大语言模型（LLM）应用开发平台，融合了 <strong>Agent</strong>、<strong>AI Workflow</strong>、<strong>RAG（检索增强生成）</strong> 等核心能力，帮助开发者快速构建和部署 AI 原生应用。它可视化了 LangChain 的核心理念，降低了 AI 应用开发的门槛。</p>
<h3>1.2 Dify vs 其他平台</h3>
<p>| 维度           | Dify                     | Coze                    | LangChain            |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>Langchain 多任务应用开发</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/6langchainApp.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/6langchainApp.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Langchain 多任务应用开发</source>
      <description>第一部分：LangChain基础概念
1.1 LangChain是什么
LangChain是一个强大的开源框架，专门用于简化大语言模型（LLM）应用程序的开发过程。它提供了一套完整的工具、组件和接口，使开发者能够更加高效地构建基于LLM的应用程序。LangChain的核心价值在于将复杂的LLM应用开发过程模块化、组件化，让开发者可以专注于业务逻辑而非底...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>第一部分：LangChain基础概念</h2>
<h3>1.1 LangChain是什么</h3>
<p>LangChain是一个强大的开源框架，专门用于简化大语言模型（LLM）应用程序的开发过程。它提供了一套完整的工具、组件和接口，使开发者能够更加高效地构建基于LLM的应用程序。LangChain的核心价值在于将复杂的LLM应用开发过程模块化、组件化，让开发者可以专注于业务逻辑而非底层实现细节。</p>
<p>LangChain的设计理念是“组合优于继承”，通过将各种功能组件（如提示词模板、模型接口、工具集、记忆系统等）解耦为独立模块，开发者可以根据实际需求灵活组合这些组件，构建出功能强大的LLM应用。这种设计思想大大降低了LLM应用的开发门槛，同时也为复杂应用场景提供了足够的扩展性。</p>
<p>LangChain最初于2022年底发布，经过快速发展，于2024年发布了1.0版本，标志着该框架进入了成熟稳定的阶段。1.0版本在架构上进行了重大重构，引入了LCEL（LangChain Expression Language）表达式语言，使得组件的组合和调用更加直观和灵活。</p>
<h3>1.2 LangChain核心组件架构</h3>
<p>LangChain框架由六大核心组件构成，每个组件都承担着特定的功能职责，共同支撑起整个框架的能力体系。理解这些组件的作用和相互关系，是掌握LangChain的基础。</p>
<p><strong>模型层（Models）</strong> 是LangChain与各种大语言模型交互的接口层。该层封装了对GPT-4、Claude、通义千问等主流模型的调用，提供了统一的接口规范。LangChain支持两种模型类型：LLM用于文本补全任务，ChatModel用于对话任务。ChatModel相比LLM具有更好的对话支持，并且支持tool calling功能，能够让模型调用外部工具。</p>
<p><strong>提示词层（Prompts）</strong> 负责管理和优化提示词。该组件包括提示词模板（PromptTemplate）、提示词优化器以及提示词序列化功能。通过使用提示词模板，开发者可以将用户输入动态插入到预设的提示词框架中，实现提示词的复用和标准化管理。</p>
<p><strong>记忆层（Memory）</strong> 为LLM应用提供了持久化上下文的能力。在默认情况下，LLM是无状态的，每次交互都是独立的。Memory组件允许应用保存和检索对话历史，使LLM能够记住之前的交互内容，从而实现真正的多轮对话体验。</p>
<p><strong>索引层（Indexes）</strong> 提供了结构化文档处理的能力，是构建知识库应用的核心组件。该层包含文档加载器、文档转换器、文本分割器、向量计算器、向量存储和检索器等功能模块。如果需要构建基于私有知识的问答系统，索引层是必不可少的基础设施。</p>
<p><strong>链层（Chains）</strong> 是将多个组件串联起来执行的核心机制。通过Chain，开发者可以定义一系列有序的组件调用，将用户的输入经过多个处理步骤后得到最终输出。Chain是LangChain最核心的执行单元。</p>
<p><strong>代理层（Agents）</strong> 赋予LLM自主决策的能力。与Chain的固定执行流程不同，Agent能够根据用户的问题自主决定调用哪些工具、如何组织执行顺序，直到得到满意的答案。Agent是构建智能助手和自动化代理系统的关键技术。</p>
<h3>1.3 LangChain 1.0版本重大变化</h3>
<p>LangChain从0.3X升级到1.0版本，发生了架构性的重大变化。虽然核心概念保持一致，但包结构和使用方式有了显著改进，开发者需要特别注意这些变化。</p>
<p><strong>包结构完全重构</strong> 是1.0版本最明显的变化。原有的单一<code>langchain</code>包被拆分为多个独立的子包：<code>langchain-core</code>只包含抽象基类和LCEL表达式语言，所有第三方集成不再直接依赖完整langchain包；<code>langchain-community</code>包含社区维护的几十种loader、retriever和tool实现；合作伙伴包如<code>langchain-openai</code>、<code>langchain-anthropic</code>等独立成库，体积更小、升级更加灵活。这种模块化设计使得依赖管理更加清晰，也减少了不必要的依赖传递。</p>
<p><strong>新增官方子项目</strong> 进一步完善了LangChain生态系统。LangGraph是用于“图”编排多步、多角色、有状态工作流的新组件，替代了传统多重Chain嵌套的写法，特别适合复杂业务流程的建模；LangServe可以将链或代理一键封装为REST API，自带<code>/invoke</code>、<code>/stream</code>、<code>/batch</code>端点和Swagger页面，大大简化了LLM应用的部署；LangSmith是可视化调试、回归测试和在线监控平台，与1.0版本的回调系统深度集成，提供了专业的LLM应用开发和运维能力。</p>
<p><strong>API风格全面转向LCEL</strong> 是1.0版本的核心改进。新的API鼓励使用<code>|</code>管道运算符将组件拼装成Runnable对象，而不是继承Chain基类。这种链式表达式的写法更加直观和Pythonic，例如<code>prompt | llm | output_parser</code>这样的代码清晰表达了数据流的整个过程。LCEL还支持并行执行、条件分支、流式输出等高级特性，使得复杂业务流程的实现变得简单。</p>
]]></content:encoded>
    </item>
    <item>
      <title>AI框架设计与选型</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/7langchainDesign.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/7langchainDesign.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">AI框架设计与选型</source>
      <description>AI Agent 框架入门指南

学习目标: 让刚入行的程序员能够理解 AI Agent 的核心概念,并能够使用主流框架搭建简单的智能应用。


1. 什么是 AI Agent?
1.1 通俗理解
想象一个虚拟员工:

🧠 大脑: 大语言模型(LLM),负责思考和决策
🖐️ 双手: 各种工具(搜索、计算、API调用),负责执行任务
💾 记忆: 记...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h1>AI Agent 框架入门指南</h1>
<blockquote>
<p><strong>学习目标</strong>: 让刚入行的程序员能够理解 AI Agent 的核心概念,并能够使用主流框架搭建简单的智能应用。</p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>HuggingFace生态实战：从模型应用到高效微调</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/8langchainOptimize.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/8langchainOptimize.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">HuggingFace生态实战：从模型应用到高效微调</source>
      <description>HuggingFace生态实战：从模型应用到高效微调
1. HuggingFace简介
1.1 什么是HuggingFace
HuggingFace 是一个专注于人工智能的开源社区和平台，被誉为&amp;quot;AI界的GitHub&amp;quot;和&amp;quot;AI界的App Store&amp;quot;。如果说PyTorch是造车的发动机，那HuggingFace就...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h1>HuggingFace生态实战：从模型应用到高效微调</h1>
<h2>1. HuggingFace简介</h2>
<h3>1.1 什么是HuggingFace</h3>
<p>HuggingFace 是一个专注于人工智能的开源社区和平台，被誉为&quot;AI界的GitHub&quot;和&quot;AI界的App Store&quot;。如果说PyTorch是造车的发动机，那HuggingFace就是直接送了程序员一辆跑车。</p>
<h3>1.2 HuggingFace的三大核心</h3>
<p>| 核心组件         | 名称   | 作用                   | 类比       |
|</p>
]]></content:encoded>
    </item>
    <item>
      <title>神经网络基础与Tensorflow</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/9networkbaseTensorflow.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/9networkbaseTensorflow.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">神经网络基础与Tensorflow</source>
      <description>第一章：神经网络基础概念
1.1 从生物神经元到人工神经元
神经网络的概念源于对生物大脑中神经元工作方式的模拟。在生物大脑中，单个神经细胞只有两种状态：兴奋和抑制。网络中的每个节点（神经元）接收输入信号，如果所有信号的加权总和超过一个“阈值”，它就被“激活”（兴奋），并向下传递信息；否则就保持“抑制”。这种简单的开关机制，构成了整个网络决策和学习的根本...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>第一章：神经网络基础概念</h2>
<h3>1.1 从生物神经元到人工神经元</h3>
<p>神经网络的概念源于对生物大脑中神经元工作方式的模拟。在生物大脑中，单个神经细胞只有两种状态：兴奋和抑制。网络中的每个节点（神经元）接收输入信号，如果所有信号的加权总和超过一个“阈值”，它就被“激活”（兴奋），并向下传递信息；否则就保持“抑制”。这种简单的开关机制，构成了整个网络决策和学习的根本。</p>
<p>人工神经元是生物神经元的数学抽象，它由输入值、权重、偏置和激活函数组成。对于给定的输入 <span v-pre class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>x</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>x</mi><mn>2</mn></msub><mo separator="true">,</mo><mi mathvariant="normal">.</mi><mi mathvariant="normal">.</mi><mi mathvariant="normal">.</mi><mo separator="true">,</mo><msub><mi>x</mi><mi>n</mi></msub></mrow><annotation encoding="application/x-tex">x_1, x_2, ..., x_n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.1944em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3011em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord">...</span><span class="mpunct">,</span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.1514em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">n</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span></span></span></span>，神经元首先计算加权和：</p>
<p v-pre class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>z</mi><mo>=</mo><munderover><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><msub><mi>w</mi><mi>i</mi></msub><mo>⋅</mo><msub><mi>x</mi><mi>i</mi></msub><mo>+</mo><mi>b</mi></mrow><annotation encoding="application/x-tex">z = \sum_{i=1}^{n} w_i \cdot x_i + b
</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord mathnormal" style="margin-right:0.044em;">z</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:2.9291em;vertical-align:-1.2777em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:1.6514em;"><span style="top:-1.8723em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">i</span><span class="mrel mtight">=</span><span class="mord mtight">1</span></span></span></span><span style="top:-3.05em;"><span class="pstrut" style="height:3.05em;"></span><span><span class="mop op-symbol large-op">∑</span></span></span><span style="top:-4.3em;margin-left:0em;"><span class="pstrut" style="height:3.05em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathnormal mtight">n</span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:1.2777em;"><span></span></span></span></span></span><span class="mspace" style="margin-right:0.1667em;"></span><span class="mord"><span class="mord mathnormal" style="margin-right:0.0269em;">w</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:-0.0269em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">⋅</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.7333em;vertical-align:-0.15em;"></span><span class="mord"><span class="mord mathnormal">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3117em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">i</span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.15em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.6944em;"></span><span class="mord mathnormal">b</span></span></span></span></span></p>
]]></content:encoded>
    </item>
    <item>
      <title>Agent：从可控性到自主反思</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/3agentfromControl2selfthink.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/3agentfromControl2selfthink.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">Agent：从可控性到自主反思</source>
      <description>什么是 Agent？
AI 模型 vs AI Agent
简单来说：

AI 模型（LLM）：提供智能，能回答问题、生成内容
AI Agent：保证结果，能执行任务、调用工具、完成实际工作


📌 核心思想：模型提供智能，Agent 保证结果

为什么需要 Agent？
LLM（大语言模型）存在以下局限性：

LLM 会有幻觉：可能生成不准确或虚构的...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>什么是 Agent？</h2>
<h3>AI 模型 vs AI Agent</h3>
<p>简单来说：</p>
<ul>
<li><strong>AI 模型（LLM）</strong>：提供智能，能回答问题、生成内容</li>
<li><strong>AI Agent</strong>：保证结果，能执行任务、调用工具、完成实际工作</li>
</ul>
<blockquote>
<p>📌 <strong>核心思想</strong>：模型提供智能，Agent 保证结果</p>
</blockquote>
<h3>为什么需要 Agent？</h3>
<p>LLM（大语言模型）存在以下局限性：</p>
<ol>
<li><strong>LLM 会有幻觉</strong>：可能生成不准确或虚构的内容</li>
<li><strong>LLM 只会说，不会做</strong>：只能输出文字，无法执行实际操作</li>
<li><strong>LLM 规划的步骤不靠谱</strong>：自动生成的执行步骤可能不准确</li>
</ol>
<p>有些任务需要极高的准确度和可控性，这时就需要 Agent 来弥补 LLM 的不足。</p>
]]></content:encoded>
    </item>
    <item>
      <title>多模态AI入门指南</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/4multimodalAI.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/4multimodalAI.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">多模态AI入门指南</source>
      <description>一、核心能力概览：多模态AI能做什么？
多模态AI的核心能力在于打破信息形式的壁垒，让机器像人一样同时“看”图像、“听”声音、“读”文字，并将这些信息融合理解、综合输出。它不再局限于单一类型的数据处理，而是实现了跨模态的认知与创造。
这种能力带来了三大关键突破：


视觉转译：将图像内容自动转化为文字描述

示例：上传一张街景照片，AI能告诉你“这是一...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>一、核心能力概览：多模态AI能做什么？</h2>
<p>多模态AI的核心能力在于<strong>打破信息形式的壁垒</strong>，让机器像人一样同时“看”图像、“听”声音、“读”文字，并将这些信息融合理解、综合输出。它不再局限于单一类型的数据处理，而是实现了跨模态的认知与创造。</p>
<p>这种能力带来了三大关键突破：</p>
<ul>
<li>
<p><strong>视觉转译</strong>：将图像内容自动转化为文字描述</p>
<blockquote>
<p>示例：上传一张街景照片，AI能告诉你“这是一条雨后的城市街道，路边有咖啡馆和行人撑伞走过”。</p>
</blockquote>
</li>
<li>
<p><strong>融合推理</strong>：结合图文信息进行逻辑判断与决策</p>
<blockquote>
<p>示例：看到厨房起火的视频并听到“快报警”的语音指令，AI可自动触发紧急响应流程。</p>
</blockquote>
</li>
<li>
<p><strong>视觉编辑</strong>：根据语言指令直接修改或生成图像</p>
<blockquote>
<p>示例：对一张风景照说“把天空换成晚霞”，AI即可实时完成画面调整。</p>
</blockquote>
</li>
</ul>
<figure><img src="https://agent.qianwen.com/mos/b35b6381b81a41a0b0a29b3d27210a1c/a7175c657b6c978b5f0eaa830728ee80" alt="多模态AI输入示意图" tabindex="0" loading="lazy"><figcaption>多模态AI输入示意图</figcaption></figure>
<p>这一能力的本质是构建一个统一的理解中枢，能够接收多种输入（文本、图像、音频等），提取各自特征后在深层进行融合分析，最终实现灵活的内容生成与交互。相比传统AI模型只能处理单一任务，多模态系统更像一把“万能瑞士军刀”，具备更强的通用性与适应力。</p>
<h2>二、基本原理：视觉与语言如何被AI同时理解？</h2>
<p>多模态AI之所以能“看懂”图像、“读懂”文字，并将两者联系起来，关键在于它并非简单地并列处理信息，而是通过一套精密的机制，让视觉与语言在模型内部实现<strong>语义对齐</strong>和<strong>深度融合</strong>。这个过程可以分为三个核心步骤：</p>
<h3>1. 特征提取：从原始数据中提炼“意义”</h3>
<p>就像人眼看到一张图片时不会只记住像素点，而是识别出“猫”“桌子”“窗户”等物体一样，AI也需要先将图像和文字转换为可计算的数学表示。</p>
<ul>
<li><strong>图像特征提取</strong>：使用卷积神经网络（CNN）或视觉Transformer等技术，把一张图片分解成一系列数字向量，这些向量代表了图中的物体、颜色、布局等关键信息。</li>
<li><strong>文本特征提取</strong>：将一句话拆分成词或子词单元，再通过语言模型转化为对应的语义向量，捕捉词语之间的关系和句子的整体含义。</li>
</ul>
<blockquote>
<p>✅ 简单类比：这就像给每张图片和每段文字都生成一个独特的“身份证编码”，后续所有操作都基于这个编码进行。</p>
</blockquote>
<h3>2. 特征对齐：让不同模态的语言“互通”</h3>
<p>图像和文字原本是两种完全不同的“语言”。为了让它们能被统一理解，模型需要在一个共享的空间中建立对应关系。</p>
<ul>
<li>模型会学习将“狗”的文字编码与包含狗的图像编码尽可能靠近</li>
<li>同样，“红色汽车”的文本描述也会与相应画面的特征向量对齐</li>
</ul>
<blockquote>
<p>🔍 这一过程通常依赖大量图文配对数据（如带标题的图片）进行训练，使模型学会哪些视觉内容对应哪些语言表达。</p>
</blockquote>
<h3>3. 融合推理：跨模态信息协同决策</h3>
<p>当图像和文本特征完成对齐后，模型就能进行真正的“融合思考”。</p>
<p>| 推理类型            | 输入示例                                                 | AI行为                                           |
|</p>
]]></content:encoded>
      <enclosure url="https://agent.qianwen.com/mos/b35b6381b81a41a0b0a29b3d27210a1c/a7175c657b6c978b5f0eaa830728ee80" type="image/"/>
    </item>
    <item>
      <title>构建大模型的知识与交互基础</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/2promptEngToRag.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/2promptEngToRag.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">构建大模型的知识与交互基础</source>
      <description>一、前言：为什么需要学习提示词和RAG？
在当今人工智能快速发展的时代，大语言模型（Large Language Model，简称LLM）已经成为了许多应用的核心技术。从智能客服到知识问答，从内容创作到代码生成，LLM正在改变我们与技术交互的方式。然而，要让LLM真正发挥价值，我们需要掌握两个关键技术：提示词工程和RAG技术。
1.1 课程内容概览
本...</description>
      <pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>一、前言：为什么需要学习提示词和RAG？</h2>
<p>在当今人工智能快速发展的时代，大语言模型（Large Language Model，简称LLM）已经成为了许多应用的核心技术。从智能客服到知识问答，从内容创作到代码生成，LLM正在改变我们与技术交互的方式。然而，要让LLM真正发挥价值，我们需要掌握两个关键技术：<strong>提示词工程</strong>和<strong>RAG技术</strong>。</p>
<h3>1.1 课程内容概览</h3>
<p>本课程主要涵盖三大核心主题：</p>
<p>| 序号 | 主题 | 核心要点 |
|:</p>
]]></content:encoded>
    </item>
    <item>
      <title>AI 概念通俗解释大全</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/5aiNameProduce.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/5aiNameProduce.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">AI 概念通俗解释大全</source>
      <description>第一部分：AI的层次与类型
AI (人工智能)
“会学习的机器”

就像给机器一个大脑，让它能学习下棋、识图、翻译。我们的“超级学徒厨师”就属于AI。

AGI (通用人工智能)
“像人一样全能的AI”

现在这个学徒只会做菜。但AGI就像一个真正的“人”，他不仅能做菜，还能写诗、做科研、和你谈人生哲学，在不同领域都能达到或超越人类水平。
目前还没有实...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Thu, 29 Jan 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>第一部分：AI的层次与类型</h2>
<h3><strong>AI (人工智能)</strong></h3>
<p><strong>“会学习的机器”</strong></p>
<ul>
<li>就像给机器一个大脑，让它能学习下棋、识图、翻译。我们的“超级学徒厨师”就属于AI。</li>
</ul>
<h3><strong>AGI (通用人工智能)</strong></h3>
<p><strong>“像人一样全能的AI”</strong></p>
<ul>
<li>现在这个学徒只会做菜。但AGI就像一个真正的“人”，他不仅能做菜，还能写诗、做科研、和你谈人生哲学，在不同领域都能达到或超越人类水平。</li>
<li><strong>目前还没有实现</strong>，是很多科学家的终极目标。</li>
</ul>
<h3><strong>ASI (超级人工智能)</strong></h3>
<p><strong>“在一切领域都远超全人类的超级存在”</strong></p>
<ul>
<li>科幻片里的概念。比AGI更强大，它的智慧人类无法理解。就像厨房里突然来了一个能瞬间创造新宇宙法则的“厨神”。</li>
</ul>
<h3><strong>AIGC (AI生成内容)</strong></h3>
<p><strong>“用AI来搞创作”</strong></p>
<ul>
<li>让我们的学徒厨师不单做菜，还让他<strong>生成</strong>新的菜谱、画菜单的插图、给美食视频配音。所有AI生成的文本、图片、视频、音乐都叫AIGC。</li>
</ul>
<h3><strong>Gen AI (生成式AI)</strong></h3>
<p><strong>“会创造的AI”</strong></p>
<ul>
<li>这是实现AIGC的<strong>核心技术</strong>。以前的AI主要做“分类”和“识别”（比如判断这是猫还是狗）。而生成式AI学会了“创造”（比如根据描述画出一只从没见过的猫）。</li>
<li>我们的学徒厨师就是一个<strong>生成式AI</strong>，因为他能“生成”新的菜。</li>
</ul>
<h3><strong>AI Native (AI原生)</strong></h3>
<p><strong>“为AI而生，靠AI而活”</strong></p>
<ul>
<li>不是把一个老式厨房（传统软件）改造成智能厨房，而是<strong>从零开始设计一个全新的智能厨房</strong>，它的每个灶台、每把刀都专为那个AI学徒设计，能最大化发挥他的能力。</li>
<li>很多新的AI应用就是AI原生的。</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>AI 大模型应用公开课</title>
      <link>https://blog.rochsen.cn/notes/aiApplicationEngineer/1techOfBigModel.html</link>
      <guid>https://blog.rochsen.cn/notes/aiApplicationEngineer/1techOfBigModel.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">AI 大模型应用公开课</source>
      <description>产品举例

支小助
AiPPT
HeyGen数字人
美团-小美AI Agent
星野-AI陪聊智能体
meitu

入行需要的步骤

首先要了解AI的模型和技术应用知识（作用：从基座模型二开）
熟练使用AI开发工具
要构建AI驱动的原型，需要将概念转化为实际应用
保持AI最新技能同步
不断学习和做项目实战

需要掌握什么技术？
AI技术介绍
Agent...</description>
      <category>教程</category>
      <category>知乎</category>
      <pubDate>Thu, 22 Jan 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>产品举例</h2>
<ul>
<li>支小助</li>
<li>AiPPT</li>
<li>HeyGen数字人</li>
<li>美团-小美AI Agent</li>
<li>星野-AI陪聊智能体</li>
<li>meitu</li>
</ul>
<h2>入行需要的步骤</h2>
<ol>
<li>首先要了解AI的模型和技术应用知识（作用：从基座模型二开）</li>
<li>熟练使用AI开发工具</li>
<li>要构建AI驱动的原型，需要将概念转化为实际应用</li>
<li>保持AI最新技能同步</li>
<li>不断学习和做项目实战</li>
</ol>
<h2>需要掌握什么技术？</h2>
<h2>AI技术介绍</h2>
<h3>Agent</h3>
<p>从无状态，到特定状态的定义和识别</p>
<p>状态：（报出的回答结构化）</p>
<p>巴黎奥运会的金牌回答，可以按照金银铜牌的数量回答给用户</p>
<h3>Prompt</h3>
<p>提示词工程，用户输入</p>
<h3>Function Call</h3>
<p>与外部函数或API交互的能力，通过理解语义来结构化调用信息，询问用户补全信息，然后结构化调用工具，基于返回的结构化信息，整合生成回复</p>
<p>１.　理解语义，自主决策使用天气查询工具</p>
<p>２.　结构化调用，需要结构化信息</p>
<p>３.　询问用户，补全信息</p>
<p>４.　结构化调用天气查询工具</p>
<p>５.　基于返回的结构化天气信息，整合生成回复</p>
<p>面试题：如果Function Call的成功率比较低，需要怎么解决？</p>
<p>答案：考虑从LLM基座模型或者选型上去思考</p>
<h3>RAG</h3>
<p>通过从外部资源或数据库中纳入相关信息来实现</p>
<h3>Fine Tuning</h3>
<p>微调（可能不需要，但是复杂场景需要，可以先考虑模型的选型）</p>
]]></content:encoded>
    </item>
    <item>
      <title>将静态博客部署到Github</title>
      <link>https://blog.rochsen.cn/notes/deploy/deployGithub.html</link>
      <guid>https://blog.rochsen.cn/notes/deploy/deployGithub.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">将静态博客部署到Github</source>
      <description>第一步：本地创建项目

第二步：github新建仓库

输入名称
输入描述（可选）
设置公开
添加README

第三步：github仓库创建新的分支

作用：用于存储静态html编译好的代码
方法：在github点击分支创建，分支名称为blog_pages

第四步：需要让github支持对外访问

点击仓库的Setting
选择左侧侧边栏的Gith...</description>
      <category>部署</category>
      <pubDate>Wed, 21 Jan 2026 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<!-- more -->
<h2>第一步：本地创建项目</h2>
<div class="language-powershell line-numbers-mode" data-highlighter="shiki" data-ext="powershell" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-powershell"><span class="line"></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">PS D:\project> pnpm create vuepress</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">theme</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">hope .</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">/</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">Vuepress</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">Version</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">Blog</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">Pnpm</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">✔ Select a language to display </span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">/</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> 选择显示语言 简体中文</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">✔ 选择包管理器 pnpm</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">✔ 你想要使用哪个打包器？ vite</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">生成 package.json...</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">✔ 设置应用名称 hello</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">vuepress</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">✔ 设置应用描述 no</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">✔ 设置应用版本号 </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">2.0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">✔ 设置协议 MIT</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">生成 tsconfig.json...</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">✔ 你想要创建什么类型的项目？ blog</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">✔ 项目需要用到多语言么? No</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">生成模板...</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">✔ 是否初始化 Git 仓库? Yes</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">✔ 是否需要一个自动部署文档到 GitHub Pages 的工作流？ Yes</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">安装依赖...</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">这可能需要数分钟，请耐心等待.</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">我们无法正确输出子进程的进度条，所以进程可能会看似未响应</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">   ╭───────────────────────────────────────────────────────────────────╮</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">   │                                                                   │</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">   │                Update available! </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">10.6</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> → </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">10.28</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.                │</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">   │   Changelog: https:</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">//</span><span style="--shiki-light:#0184BC;--shiki-dark:#56B6C2">github.com</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">/</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">pnpm</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">/</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">pnpm</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">/</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">releases</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">/</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">tag</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">/</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">v10.</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">28.1</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">   │</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">   │                 Run </span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">"pnpm add -g pnpm"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> to update.                 │</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">   │                                                                   │</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">   ╰───────────────────────────────────────────────────────────────────╯</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">Packages: </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">+353</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">Progress: resolved </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">438</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, reused </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">340</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, downloaded </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">20</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, added </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">353</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, done</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">devDependencies:</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">+</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75"> @vuepress</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">/</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">bundler</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">vite </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">2.0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">rc.</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">26</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">+</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> sass</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">embedded </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1.97</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">2</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">+</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> vue </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">3.5</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">27</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">+</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> vuepress </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">2.0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">rc.</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">26</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">+</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> vuepress</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">theme</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">hope </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">2.0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">0</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">rc.</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">102</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">Done </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">in</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 5.</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">2s using pnpm v10.</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">6.1</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">模板已成功生成!</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">✔ 是否想要现在启动 Demo 查看? Yes</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">启动开发服务器...</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">启动成功后，请在浏览器输入给出的开发服务器地址(默认为 </span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">'localhost:8080'</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">)</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">> hello</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">vuepress</span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">@2.0.0</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> docs:dev D:\project\Vuepress</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">Version</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">Blog</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">Pnpm</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">> vuepress</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">-</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">vite dev src</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">✔ Initializing and preparing </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">data</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2"> -</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> done </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">in</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> 321ms</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">Port </span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">8080</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> is </span><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">in</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> use, trying another one...</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  vite v7.</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">1.12</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF"> dev server running at:</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  ➜  Local:   http:</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">//</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">localhost:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">8081</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">/</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">  ➜  Network: http:</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">//</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">192.168</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">.</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">125.4</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66">8081</span><span style="--shiki-light:#383A42;--shiki-dark:#56B6C2">/</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>第二步：github新建仓库</h2>
<ul>
<li>输入名称</li>
<li>输入描述（可选）</li>
<li>设置公开</li>
<li>添加README</li>
</ul>
<h2>第三步：github仓库创建新的分支</h2>
<ul>
<li>作用：用于存储静态html编译好的代码</li>
<li>方法：在github点击分支创建，分支名称为blog_pages</li>
</ul>
<h2>第四步：需要让github支持对外访问</h2>
<ol>
<li>点击仓库的Setting</li>
<li>选择左侧侧边栏的<code>Github Pages </code></li>
<li>选择将什么分支映射为可访问的静态站点，选择刚才创建的新分支<code>blog_pages</code></li>
<li>点击save保存</li>
</ol>
<h2>第五步：去github生成一个Access Token</h2>
<ol>
<li>点击你的头像</li>
<li>选择下方的设置Settings</li>
<li>选择左侧侧边栏的开发者设置<code>developer Settings</code></li>
<li>选择个人访问令牌（经典）</li>
<li>点击生成新令牌，选择经典</li>
<li>备注可以说明令牌的作用，令牌有效期选择无有效期</li>
<li>勾选设置权限为repo，使得令牌可以支持修改发布你的仓库</li>
<li>令牌复制，比如：XXXXXXXX</li>
</ol>
<h2>第六步：将令牌设置到博客仓库</h2>
<ol>
<li>在左侧侧边栏，选择安全-机密和变量（secrets and variables）- 代码空间</li>
<li>点击新建机密</li>
<li>标题为ACCESS_TOKEN，将密钥复制到密钥处</li>
<li>点击添加机密</li>
</ol>
<h2>第七步：vscode修改仓库.github/workflows下方的yml文件</h2>
<ol>
<li>修改部署文档的分支</li>
</ol>
<div class="language-yaml line-numbers-mode" data-highlighter="shiki" data-ext="yaml" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-yaml"><span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">- </span><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">name</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">: </span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">部署文档</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  uses</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">: </span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">JamesIves/github-pages-deploy-action@v4</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  env</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">	  GITHUB_TOKEN</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">: </span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">${{ secrets.ACCESS_TOKEN }}</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  with</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">:</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">	  # 部署文档</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">	  branch</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">: </span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">blog_pages</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">	  folder</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">: </span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379">src\.vuepress\dist</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2>第八步：绑定远程仓库</h2>
<ul>
<li>将远程仓库的git地址添加到远程仓库</li>
<li>将本地代码和远程的main分支进行合并</li>
<li>发布到远程</li>
</ul>
<h2>第九步：修改部署的bug</h2>
<ul>
<li>指定pnpm版本，如下</li>
</ul>
<div class="language-shell line-numbers-mode" data-highlighter="shiki" data-ext="shell" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-shell"><span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">  -</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> name:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> 设置</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> pnpm</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">	uses:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> pnpm/action-setup@v4</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">	with:</span></span>
<span class="line"><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF">	  version:</span><span style="--shiki-light:#986801;--shiki-dark:#D19A66"> 10</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul>
<li>将下斜杠windows的路径修改为上斜杠linux路径</li>
</ul>
<h2>第十步：修改src下的config.ts</h2>
<ul>
<li>已经可以访问，但是样式不对，所以需要修改</li>
<li>修改base键值，根据访问的github提供的名称</li>
</ul>
<div class="language-ts line-numbers-mode" data-highlighter="shiki" data-ext="ts" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-ts"><span class="line"><span style="--shiki-light:#A626A4;--shiki-dark:#C678DD">export</span><span style="--shiki-light:#E45649;--shiki-dark:#C678DD"> default</span><span style="--shiki-light:#4078F2;--shiki-dark:#61AFEF"> defineUserConfig</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">({</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  base</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> "/Vuepress-Version-Blog-Pnpm/"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  lang</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> "zh-CN"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  title</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> "博客演示"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  description</span><span style="--shiki-light:#0184BC;--shiki-dark:#ABB2BF">:</span><span style="--shiki-light:#50A14F;--shiki-dark:#98C379"> "vuepress-theme-hope 的博客演示"</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">, </span></span>
<span class="line"><span style="--shiki-light:#E45649;--shiki-dark:#E06C75">  theme</span><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">,</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // 和 PWA 一起启用</span></span>
<span class="line"><span style="--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-dark:#7F848E;--shiki-dark-font-style:italic">  // shouldPrefetch: false,</span></span>
<span class="line"><span style="--shiki-light:#383A42;--shiki-dark:#ABB2BF">});</span></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><ul>
<li>重新上传</li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>页面配置教程</title>
      <link>https://blog.rochsen.cn/demo/page.html</link>
      <guid>https://blog.rochsen.cn/demo/page.html</guid>
      <source url="https://blog.rochsen.cn/rss.xml">页面配置教程</source>
      <description>more 注释之前的内容被视为文章摘要。</description>
      <category>使用指南</category>
      <pubDate>Wed, 01 Jan 2020 00:00:00 GMT</pubDate>
      <content:encoded><![CDATA[<p><code>more</code> 注释之前的内容被视为文章摘要。</p>
<!-- more -->
<h2>页面标题</h2>
<p>The first H1 title in Markdown will be regarded as page title.</p>
<p>Markdown 中的第一个 H1 标题会被视为页面标题。</p>
<p>你可以在 Markdown 的 Frontmatter 中设置页面标题。</p>
<div class="language-md line-numbers-mode" data-highlighter="shiki" data-ext="md" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code class="language-md"><span class="line"></span></code></pre>
<div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0"><div class="line-number"></div></div></div>]]></content:encoded>
    </item>
  </channel>
</rss>