<?xml version="1.0" encoding="utf-8" standalone="yes"?><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><title>Moonment</title><link>https://moonment.net/</link><description>Moon 的公开知识、作品与长期思考。</description><generator>Hugo</generator><language>zh-CN</language><managingEditor>Moon</managingEditor><webMaster>Moon</webMaster><copyright>© 2026 Moonment</copyright><lastBuildDate>Tue, 18 Aug 2026 17:00:55 +0800</lastBuildDate><atom:link href="https://moonment.net/index.xml" rel="self" type="application/rss+xml"/><item><title>Moon Media Lab</title><link>https://moonment.net/projects/moon-media-lab/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><dc:creator>Moon</dc:creator><guid>https://moonment.net/projects/moon-media-lab/</guid><description>把本地视频或公开链接拆成可核验文稿、字幕、内容结构、知识与二创素材包的本地优先工具。</description><content:encoded><![CDATA[<p>Moon Media Lab 负责从视频来源到“可继续使用的拆解包”：获取、转录、整理、拆解、打包与导出。</p>
<p>语音识别在本机运行。LLM 拆解与整理是可选步骤，处理来源会写入产物的 provenance 记录。它不充当永久知识库，也不负责音色训练、最终视频渲染或平台发布。</p>
<h2 id="核心边界">核心边界</h2>
<ul>
<li>输入可以是本地视频或公开链接。</li>
<li>输出包括文稿、字幕、结构化知识与下游 Brief。</li>
<li>原始媒体与实例产物默认留在本地，不进入公开仓库。</li>
</ul>
]]></content:encoded></item><item><title>Moon Video Cast</title><link>https://moonment.net/projects/moon-video-cast/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><dc:creator>Moon</dc:creator><guid>https://moonment.net/projects/moon-video-cast/</guid><description>以结构化内容包为中心，把文字编排为可检查、可返工的竖屏视频输出。</description><content:encoded>&lt;p>Moon Video Cast 是“文字到竖屏视频”的输出引擎：内容包进入，成片输出。选题、结构化文案、分镜、旁白、渲染与质量检查围绕同一份 schema 流动。&lt;/p>
&lt;p>项目把可复用的方法、引擎和模板放在公开仓库，把账号内容、成片、排期和私有媒体留在实例目录。&lt;/p>
</content:encoded></item><item><title>Moon Agent Skills</title><link>https://moonment.net/projects/moon-agent-skills/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><dc:creator>Moon</dc:creator><guid>https://moonment.net/projects/moon-agent-skills/</guid><description>Moon 工作流中可复用的 Agent Skills 集合；方法可以公开，身份与实例保持隔离。</description><content:encoded>&lt;p>Moon Agent Skills 汇总跨 Agent 使用的操作方法与检查契约。每个 Skill 独立安装，以明确的触发条件、边界和验证流程工作。&lt;/p>
&lt;p>公开仓库只承载可复用的方法。账号、浏览器身份、私人素材、真实结果包与空间配置不随方法公开。&lt;/p>
</content:encoded></item><item><title>Moon Voice Lab</title><link>https://moonment.net/projects/moon-voice-lab/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><dc:creator>Moon</dc:creator><guid>https://moonment.net/projects/moon-voice-lab/</guid><description>本地优先的声音资产实验室：设计或克隆授权音色，管理版本，并导出安全旁白包。</description><content:encoded>&lt;p>Moon Voice Lab 把音色设计、授权克隆、试听审核和旁白导出从视频项目中拆出来，形成独立的本地资产边界。&lt;/p>
&lt;p>真人参考音、身份、授权文件、模型与生成结果默认不进入 Git。学习授权也不会自动等于公开展示授权。&lt;/p>
</content:encoded></item><item><title>X 新算法源码拆解：什么内容更容易获得推荐？</title><link>https://moonment.net/notes/x-algorithm-2026/</link><pubDate>Tue, 18 Aug 2026 00:00:00 +0000</pubDate><dc:creator>Moon</dc:creator><guid>https://moonment.net/notes/x-algorithm-2026/</guid><description>从 X 公开的 Phoenix、Home Mixer 与评分参数出发，理解推荐系统真正预测什么，以及创作者可以验证哪些内容策略。</description><content:encoded><![CDATA[<p>最近重新读了一遍 X 公布的推荐算法代码。我原本也想先找一个简单答案：点赞、回复、转发，到底哪个更重要？</p>
<p>但代码给出的答案并不是一张“互动积分表”。新版系统真正做的，是根据某个用户过去的行为，预测他看到一条内容后可能采取哪些动作，再把这些预测组合成一个分数。</p>
<p>这意味着，创作者真正要优化的不是某一种互动数量，而是：<strong>内容能否被正确的人看见，并让对方产生与内容匹配的真实行动。</strong></p>
<div class="tldr">
<p>结论摘要</p>
<ul>
<li><strong>权重不是兑换比例。</strong> 公开权重乘的是模型对当前观看者的行为概率预测，不是已经发生的互动次数。</li>
<li><strong>当前公开默认值。</strong> 点赞 0.5、转发 1.0、回复 5.0（互关作者的原创帖另加 15.0）、私信分享 5.0、复制链接 20.0、关注作者 4.0、举报 −234.0。</li>
<li><strong>排序之后还有约束。</strong> 作者多样性衰减、关注外内容折扣与 48 小时年龄过滤同时生效，连续发布相似内容不会线性叠加曝光。</li>
<li><strong>来源。</strong> <code>xai-org/x-algorithm</code> 提交 <code>b089ce64</code>（2026-08-17 快照），线上仍可能存在实验参数。</li>
</ul>

</div>

<p>本文基于 X 官方仓库 2026 年 8 月 17 日的提交 <a href="https://github.com/xai-org/x-algorithm/commit/b089ce64891f9c50fab73aa00dbe65acb82f198f"><code>b089ce64</code></a>。公开代码会继续变化，线上也存在实验参数，所以这里记录的是一个可复查的源码快照，不是永久不变的平台规则。</p>
<h2 id="一条内容是怎样进入-for-you-的">一条内容是怎样进入 For You 的？</h2>
<p>X 公开的新版架构把候选内容分成两个主要来源：</p>
<ol>
<li><strong>In-Network</strong>：来自你已经关注的账号，由 Thunder 提供近期内容。</li>
<li><strong>Out-of-Network</strong>：来自你尚未关注的账号，主要通过 Phoenix Retrieval 与 SimClusters 发现。</li>
</ol>
<p>这些候选内容进入 Home Mixer 后，会经过过滤、特征补充和 Phoenix 排序。Phoenix 根据观看者近期的互动历史，为每条候选内容预测点赞、回复、转发、分享、停留、关注作者，以及不感兴趣、屏蔽、静音、举报等多种行为的概率。</p>
<p>官方 README 把核心计算写成：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Final Score = Σ (weight_i × P(action_i))
</span></span></code></pre></div><p>排序之后，系统还会执行作者多样性衰减、关注外内容折扣、新作者探索与进一步重排。重复内容、已经看过的内容、超过时间阈值的内容，以及触发可见性规则的内容，也可能在不同阶段被过滤。完整流程可以在官方的 <a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/README.md#system-architecture">System Architecture</a> 和 <a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/README.md#scoring-and-ranking">Scoring and Ranking</a> 中核对。</p>
<p>旧版更像由多路候选服务、大量聚合特征和多层排序器组成的工程系统。新版仍然保留过滤器和可调参数，但 Phoenix 把“理解用户行为序列并预测下一步动作”放到了更中心的位置。</p>
<h2 id="权重不是互动次数的兑换比例">权重不是互动次数的兑换比例</h2>
<p>当前公开默认值里，几项容易引起注意的参数包括：</p>
<table>
  <thead>
      <tr>
          <th>预测行为</th>
          <th style="text-align: right">公开默认权重</th>
          <th>需要注意的边界</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>点赞</td>
          <td style="text-align: right">0.5</td>
          <td>乘的是当前观看者的预测点赞概率</td>
      </tr>
      <tr>
          <td>回复</td>
          <td style="text-align: right">5.0</td>
          <td>互关作者的原创帖当前另有 15.0 加成</td>
      </tr>
      <tr>
          <td>转发</td>
          <td style="text-align: right">1.0</td>
          <td>不能直接与实际点赞数换算</td>
      </tr>
      <tr>
          <td>私信分享</td>
          <td style="text-align: right">5.0</td>
          <td>表示预测分享概率的权重</td>
      </tr>
      <tr>
          <td>复制链接</td>
          <td style="text-align: right">20.0</td>
          <td>高权重不等于要求用户刷分享</td>
      </tr>
      <tr>
          <td>关注作者</td>
          <td style="text-align: right">4.0</td>
          <td>仍取决于模型预测概率</td>
      </tr>
      <tr>
          <td>举报</td>
          <td style="text-align: right">-234.0</td>
          <td>负权重大，也不能说“一次举报抵消 468 个赞”</td>
      </tr>
  </tbody>
</table>
<p>这些值来自固定提交中的 <a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/home-mixer/params/param.rs#L298-L474"><code>home-mixer/params/param.rs</code></a>。</p>
<p>把其中几项放回源码，会更容易看清它们只是可配置参数的默认值：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="fm">param!</span><span class="p">(</span><span class="n">FavoriteWeight</span><span class="p">,</span><span class="w"> </span><span class="kt">f64</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;rust_home_mixer_favorite_weight&#34;</span><span class="p">,</span><span class="w"> </span><span class="mf">0.5</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="fm">param!</span><span class="p">(</span><span class="n">ReplyWeight</span><span class="p">,</span><span class="w"> </span><span class="kt">f64</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;rust_home_mixer_reply_weight&#34;</span><span class="p">,</span><span class="w"> </span><span class="mf">5.0</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="fm">param!</span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">BidirectionalFollowReplyWeightBoost</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="kt">f64</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="s">&#34;rust_home_mixer_bidirectional_follow_reply_weight_boost&#34;</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="mf">15.0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="fm">param!</span><span class="p">(</span><span class="n">RetweetWeight</span><span class="p">,</span><span class="w"> </span><span class="kt">f64</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;rust_home_mixer_retweet_weight&#34;</span><span class="p">,</span><span class="w"> </span><span class="mf">1.0</span><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="fm">param!</span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">ShareViaCopyLinkWeight</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="kt">f64</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="s">&#34;rust_home_mixer_share_via_copy_link_weight&#34;</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="mf">20.0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="fm">param!</span><span class="p">(</span><span class="n">ReportWeight</span><span class="p">,</span><span class="w"> </span><span class="kt">f64</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;rust_home_mixer_report_weight&#34;</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mf">234.0</span><span class="p">);</span><span class="w">
</span></span></span></code></pre></div><p>最容易出现的误读，是把 20、5、0.5 直接当作实际互动的兑换比例。源码注释专门否定了这种解释：权重乘的是模型针对当前观看者预测的行为概率或连续值，不是已经发生的互动次数。举报本身比点赞少见得多，因此需要更大的绝对权重，才能让这项预测在最终分数里产生影响。具体计算可以在 <a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/home-mixer/scorers/ranking_scorer.rs#L417-L551"><code>ranking_scorer.rs</code></a> 中核对。</p>
<p>互关回复也需要同样谨慎地理解。当前代码会给互相关注作者的原创帖增加回复预测权重，但官方的 <a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/docs/BIDIRECTIONAL_BOOST_CHANGE.md">变更记录</a> 同时说明，这个参数经历过 A/B 测试和多次调整。它能证明真实关系被纳入排序，不能证明批量互关就能稳定获得推荐。</p>
<p>加成只作用于互关作者的原创帖；回复帖和转发帖不会进入这条分支：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="k">fn</span> <span class="nf">bidirectional_boost_eligible</span><span class="p">(</span><span class="n">candidate</span>: <span class="kp">&amp;</span><span class="nc">PostCandidate</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="kt">bool</span> <span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">candidate</span><span class="p">.</span><span class="n">in_reply_to_tweet_id</span><span class="p">.</span><span class="n">is_none</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">candidate</span><span class="p">.</span><span class="n">retweeted_tweet_id</span><span class="p">.</span><span class="n">is_none</span><span class="p">()</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">candidate</span><span class="p">.</span><span class="n">is_mutual_follow_author</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="kc">true</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">fn</span> <span class="nf">reply_weight_for</span><span class="p">(</span><span class="o">&amp;</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">candidate</span>: <span class="kp">&amp;</span><span class="nc">PostCandidate</span><span class="p">)</span><span class="w"> </span>-&gt; <span class="kt">f64</span> <span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="k">if</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">bidirectional_follow_reply_weight_boost</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mf">0.0</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="bp">Self</span>::<span class="n">bidirectional_boost_eligible</span><span class="p">(</span><span class="n">candidate</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="k">return</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">reply</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="bp">self</span><span class="p">.</span><span class="n">bidirectional_follow_reply_weight_boost</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="bp">self</span><span class="p">.</span><span class="n">reply</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span></code></pre></div><h2 id="什么内容更可能得到推荐">什么内容更可能得到推荐？</h2>
<p>代码没有提供“爆款模板”，但它能排除一些错误方向，并支持几条更稳妥的判断。</p>
<h3 id="1-先让系统和读者知道内容写给谁">1. 先让系统和读者知道内容写给谁</h3>
<p>Phoenix 使用观看者的行为历史来理解兴趣，再判断候选内容是否相关。对创作者而言，稳定并不意味着每次都写同一个话题，而是让内容持续服务一类清楚的人和问题。</p>
<p>如果一个账号今天谈 AI 工具，明天转发无关段子，后天突然讨论陌生领域，单条内容仍可能被推荐，但账号很难形成连续、可识别的受众反馈。</p>
<h3 id="2-提供自然的高意图行动">2. 提供自然的高意图行动</h3>
<p>回复、私信分享、复制链接和关注作者都进入评分。比起在结尾机械地要求“点赞转发”，更有效的问题是：这条内容是否值得保存到别处、发给同事，或者补充自己的经历？</p>
<p>教程可以留下可执行步骤；源码分析可以留下准确链接和适用边界；观点文章需要给读者一个可以回应的具体判断。行动应该从内容价值里自然发生，而不是由话术硬挤出来。</p>
<h3 id="3-不要把争议互动当成增长捷径">3. 不要把争议互动当成增长捷径</h3>
<p>系统同时预测“不感兴趣、屏蔽、静音和举报”等负面行为，可见性系统还会独立处理垃圾内容、安全标签和其他限制。</p>
<p>制造争吵可能带来短期回复，但代码没有证明“所有互动都是好互动”。如果内容吸引了错误的人群，模型也可能学到这条内容对相似用户更容易造成负反馈。</p>
<h3 id="4-避免短时间重复发布相似内容">4. 避免短时间重复发布相似内容</h3>
<p>当前默认参数启用了作者多样性衰减：同一作者连续出现时，后续候选的分数会逐步降低，最低保留到一定比例。关注外内容也有额外折扣；README 列出的年龄过滤阈值则是 48 小时。</p>
<p>这些机制支持一个朴素判断：重要内容需要及时获得真实反馈，但连续发布多条高度相似的内容，并不会简单叠加曝光。代码也没有给出一个适用于所有账号的“最佳发布时间”。</p>
<h2 id="我会怎样验证这些判断">我会怎样验证这些判断？</h2>
<p>源码只能解释机制，不能代替账号数据。我更愿意把它变成一个两周观察，而不是立刻改掉所有内容策略：</p>
<ol>
<li>每条内容发布前，只确定一个主要读者问题。</li>
<li>标记希望读者自然产生的主要行动：回复、分享、访问资料或关注作者。</li>
<li>记录平台能看到的展示、回复、分享、主页访问和新增关注；缺失的数据保持未知。</li>
<li>区分内容类型，例如构建记录、教程、源码分析和观点，不把不同类型混在一起比较。</li>
<li>两周后比较哪些内容带来了更深的行动，再决定是否调整主题、结构和发布节奏。</li>
</ol>
<p>这不是一套保证增长的方法。它只是把“听说算法喜欢什么”，换成“公开代码支持什么，以及自己的账号数据是否验证了它”。</p>
<h2 id="最后留下三个判断">最后留下三个判断</h2>
<ul>
<li>X 的公开权重描述的是个性化预测，不是实际互动的积分兑换表。</li>
<li>高权重行为值得理解，但内容与受众的匹配，比追逐某一个数字更重要。</li>
<li>公开仓库、线上实验和个人账号结果是三个不同层级；源码可以帮助提出假设，最终仍要靠真实数据验证。</li>
</ul>
<p>这次拆解之后，我没有得到一份更神奇的发帖公式。反而更确定了一件事：先把内容写给具体的人，提供值得回应和分享的东西，再用数据检查判断。算法只是把这件事做得更个性化。</p>
<h2 id="主要来源">主要来源</h2>
<ul>
<li><a href="https://github.com/xai-org/x-algorithm/tree/b089ce64891f9c50fab73aa00dbe65acb82f198f">X For You Feed Algorithm</a></li>
<li><a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/phoenix/README.md">Phoenix Recommendation System</a></li>
<li><a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/home-mixer/params/param.rs">Home Mixer 默认参数</a></li>
<li><a href="https://github.com/xai-org/x-algorithm/blob/b089ce64891f9c50fab73aa00dbe65acb82f198f/home-mixer/scorers/ranking_scorer.rs">Ranking Scorer</a></li>
</ul>
]]></content:encoded></item><item><title>为什么建立 Moonment</title><link>https://moonment.net/notes/hello-moonment/</link><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><dc:creator>Moon</dc:creator><guid>https://moonment.net/notes/hello-moonment/</guid><description>给散落在项目、文章和实验里的公开知识，一个可以长期返回的入口。</description><content:encoded><![CDATA[<p>工具会更换，平台会迁移，项目也会结束。真正值得留下的，是一次构建为什么这样做、证据在哪里、哪些边界没有跨过去。</p>
<p>Moonment 是一个公开入口，不是另一个需要被喂养的内容系统。它只承接已经发生的工作：开源项目、经过人工确认的笔记，以及能被复查的实验。</p>
<h2 id="三条编辑原则">三条编辑原则</h2>
<ol>
<li><strong>真实优先。</strong> 不预告尚未发生的结果，不用历史数据填补当前未知。</li>
<li><strong>方法公开，实例隔离。</strong> 可复用的方法可以进入公共知识，私人素材与身份配置留在各自边界内。</li>
<li><strong>保持可返回。</strong> 每篇内容尽量留下来源、适用条件和下一步，而不是只留下结论。</li>
</ol>
<p>这个站点本身也按相同原则生长：先有真实内容，再扩展结构；先保持清楚，再追求规模。</p>
]]></content:encoded></item></channel></rss>