<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>jacquard</title><description>jacquard 的个人站：生物信息学和 AI for Science 的交叉，评估大模型在生物医学任务上的表现，写 Agent 工具，记笔记。</description><link>https://cancertin.github.io/</link><language>zh-CN</language><item><title>从 Google Cloud 到 Pi：接入 Gemini 4 Argon</title><link>https://cancertin.github.io/posts/pi-vertex-argon/</link><guid isPermaLink="true">https://cancertin.github.io/posts/pi-vertex-argon/</guid><description>从试用与结算、项目和 API 准备开始，通过 ADC 把 Gemini 4 Argon 接进 Pi，再用项目提示词和技能过滤搭一个写作工作台，并核查新会话实际加载了什么。</description><pubDate>Thu, 05 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;我想把 Google Cloud 上的 Gemini 4 Argon 接进日常使用的终端 Agent，再把它配成一个中文写作搭档。最后选了 Pi：模型调用走它原生的 &lt;code&gt;google-vertex&lt;/code&gt; Provider，写作身份和技能放在项目里，其他项目继续沿用各自的配置。&lt;/p&gt;
&lt;p&gt;这篇从云端准备开始，记录到一次实际请求返回 &lt;code&gt;OK&lt;/code&gt;，以及如何确认写作提示词和技能真的加载进了新会话。接入记录来自 2026 年 11 月 5 日，环境是 macOS、Node.js 24 和 Pi 1.5.0。命令中的 &lt;code&gt;your-project-id&lt;/code&gt; 和 &lt;code&gt;~/novel-project/&lt;/code&gt; 都是示例，使用时换成自己的值。&lt;/p&gt;
&lt;p&gt;&lt;img __ASTRO_IMAGE_=&quot;{&amp;quot;alt&amp;quot;:&amp;quot;接入分为云端项目、本机 ADC 和项目内的 Pi 三层&amp;quot;,&amp;quot;src&amp;quot;:&amp;quot;./pi-vertex-argon/connection-flow.svg&amp;quot;,&amp;quot;index&amp;quot;:0}&quot;&gt;&lt;/p&gt;
&lt;h2 id=&quot;先准备-google-cloud&quot;&gt;先准备 Google Cloud&lt;/h2&gt;
&lt;p&gt;这里有三个名字容易混在一起：Google Cloud 项目负责资源、权限和结算；ADC 负责让本机程序找到 Google 身份；Pi 负责把这个模型放进日常工作流。&lt;/p&gt;
&lt;p&gt;Google 当前文档和控制台把相关平台称为 &lt;strong&gt;Gemini Enterprise Agent Platform&lt;/strong&gt;，模型调试页面叫 &lt;strong&gt;Agent Studio&lt;/strong&gt;。本文仍会用到 Vertex AI 这个名字，因为 Pi 的 Provider 名称是 &lt;code&gt;google-vertex&lt;/code&gt;，API 服务名也沿用 &lt;code&gt;aiplatform.googleapis.com&lt;/code&gt;。&lt;a href=&quot;https://docs.cloud.google.com/gemini-enterprise-agent-platform/release-notes#April_22_2026&quot;&gt;平台更名说明&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;账号试用和结算&quot;&gt;账号、试用和结算&lt;/h3&gt;
&lt;p&gt;先登录 &lt;a href=&quot;https://console.cloud.google.com/&quot;&gt;Google Cloud 控制台&lt;/a&gt;，按页面提示准备结算账户。符合资格的新用户可以申请试用；截至本文核查时，官方提供的是 &lt;strong&gt;300 美元、90 天&lt;/strong&gt;的试用额度，注册过程会验证付款方式。资格与适用范围以&lt;a href=&quot;https://docs.cloud.google.com/free/docs/free-cloud-features&quot;&gt;官方试用说明&lt;/a&gt;为准。&lt;/p&gt;
&lt;p&gt;本文使用 Cloud 项目结算。Google AI Studio 的 Gemini API 有另一套使用和计费入口，选工具时要看清 Provider。试用额度是否覆盖某笔用量，要在 Cloud Billing 的明细和 Credits 中核对。&lt;/p&gt;
&lt;h3 id=&quot;项目api-和权限&quot;&gt;项目、API 和权限&lt;/h3&gt;
&lt;p&gt;在控制台完成下面几件事：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;新建或选择一个 Google Cloud 项目，记下它的 &lt;strong&gt;Project ID&lt;/strong&gt;。后面的命令使用 ID。&lt;/li&gt;
&lt;li&gt;确认该项目已经关联有效的结算账户。&lt;/li&gt;
&lt;li&gt;启用 Agent Platform API，服务名是 &lt;code&gt;aiplatform.googleapis.com&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;确认当前 Google 身份有调用模型的权限。官方通用角色是 &lt;code&gt;roles/aiplatform.user&lt;/code&gt;；启用 API 则需要另外的服务启用权限。使用他人管理的项目时，请项目管理员按需配置。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这几项与&lt;a href=&quot;https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/start&quot;&gt;官方准备流程&lt;/a&gt;一致。项目、API 和权限准备好之后，再调本机客户端，排查起来会清楚很多。&lt;/p&gt;
&lt;h3 id=&quot;先在网页做一次小测试&quot;&gt;先在网页做一次小测试&lt;/h3&gt;
&lt;p&gt;进入当前项目的 Agent Studio，选择：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;模型：&lt;code&gt;gemini-4-argon&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;区域：&lt;code&gt;Global&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;思考等级：&lt;code&gt;Low&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;提示词：「只回复 OK」。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;网页成功返回之后，说明这个项目已经完成了一次模型调用。接下来再验证终端使用的身份和客户端配置。模型名称、支持区域和思考等级见 &lt;a href=&quot;https://docs.cloud.google.com/gemini-enterprise-agent-platform/models/guides/gemini-4-argon&quot;&gt;Argon 官方指南&lt;/a&gt;。&lt;/p&gt;
&lt;h2 id=&quot;在本机建立-adc&quot;&gt;在本机建立 ADC&lt;/h2&gt;
&lt;p&gt;先按&lt;a href=&quot;https://docs.cloud.google.com/sdk/docs/install-sdk&quot;&gt;官方指南安装 Google Cloud CLI&lt;/a&gt;，在终端确认 &lt;code&gt;gcloud --version&lt;/code&gt; 能正常运行。&lt;/p&gt;
&lt;p&gt;下面的环境变量先设置在当前终端里，后面启动 Pi 时会用到：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; GOOGLE_CLOUD_PROJECT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;your-project-id&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; GOOGLE_CLOUD_QUOTA_PROJECT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;$GOOGLE_CLOUD_PROJECT&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;export&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt; GOOGLE_CLOUD_LOCATION&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;global&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后初始化 gcloud，并单独建立应用使用的 ADC：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;gcloud&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; init&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --project=&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;$GOOGLE_CLOUD_PROJECT&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;gcloud&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; auth&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; application-default&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; login&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  --project=&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;$GOOGLE_CLOUD_PROJECT&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;gcloud&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; auth&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; application-default&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; set-quota-project&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;  &quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;$GOOGLE_CLOUD_PROJECT&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;登录过程中会打开浏览器，由自己选择账号并完成授权。&lt;code&gt;gcloud init&lt;/code&gt; 配置的是命令行账号与项目；&lt;code&gt;application-default login&lt;/code&gt; 建立的是应用所用凭据。Pi 的 Google 客户端通过 ADC 获取和刷新访问令牌。&lt;a href=&quot;https://docs.cloud.google.com/docs/authentication/application-default-credentials&quot;&gt;两种凭据的区别&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;set-quota-project&lt;/code&gt; 把本次使用的项目写进 ADC 配额设置。执行它需要登录身份在目标项目上拥有 &lt;code&gt;serviceusage.services.use&lt;/code&gt; 权限；遇到权限错误时，先核对登录账号和目标项目。&lt;a href=&quot;https://docs.cloud.google.com/sdk/gcloud/reference/auth/application-default/set-quota-project&quot;&gt;配额项目命令&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;ADC 的凭据文件交给本机认证库管理。下面配置 Pi 时，用到的是 Provider、项目和区域。&lt;/p&gt;
&lt;h2 id=&quot;把-argon-接进-pi&quot;&gt;把 Argon 接进 Pi&lt;/h2&gt;
&lt;p&gt;下面固定到这次使用的 Pi 1.5.0。这个版本要求 Node.js 22.19.0 以上，我使用的是 Node.js 24。&lt;a href=&quot;https://github.com/earendil-works/pi/blob/v1.5.0/packages/coding-agent/README.md#getting-started&quot;&gt;安装说明&lt;/a&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;npm&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; install&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; -g&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --ignore-scripts&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; @earendil-works/pi-coding-agent@1.5.0&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;pi&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;先查看当前模型目录，再检查本机凭据能否被 Provider 找到：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;pi&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --list-models&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; argon&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;pi&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; auth&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; check&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --provider&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; google-vertex&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --json&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;第一条应当能找到 &lt;code&gt;google-vertex&lt;/code&gt; 下的 &lt;code&gt;gemini-4-argon&lt;/code&gt;。模型目录需要更新时，可运行 &lt;code&gt;pi update --models&lt;/code&gt; 后重新查询，见&lt;a href=&quot;https://github.com/earendil-works/pi/blob/v1.5.0/packages/coding-agent/docs/models.md&quot;&gt;目录更新说明&lt;/a&gt;。第二条检查的是凭据解析状态。实际调用用下面这条命令，它会产生模型用量：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt;pi&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; --provider&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; google-vertex&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   --model&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; gemini-4-argon&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   --thinking&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; low&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   --no-tools&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;   -p&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; &apos;只回复 OK&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这次接入后的实际请求返回了 &lt;code&gt;OK&lt;/code&gt;。到这里，云端项目、ADC 和 Pi 的调用链就接通了。&lt;code&gt;--no-tools&lt;/code&gt; 让这次小测试集中在文字请求上，项目文件的操作放到后面再做。&lt;a href=&quot;https://github.com/earendil-works/pi/blob/v1.5.0/packages/coding-agent/docs/providers.md#google-vertex-ai&quot;&gt;Provider 配置&lt;/a&gt;、&lt;a href=&quot;https://github.com/earendil-works/pi/blob/v1.5.0/packages/coding-agent/docs/cli.md&quot;&gt;CLI 参数&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;给写作项目单独配置&quot;&gt;给写作项目单独配置&lt;/h2&gt;
&lt;p&gt;模型接通后，我希望进入小说目录就使用写作规则。项目里的三个位置分工如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;novel-project/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── AGENTS.md          项目约定：设定位置、稿件目录和修改规则&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── .pi/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── settings.json  默认模型、思考等级和技能来源&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── SYSTEM.md      这个项目的写作身份&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── skills/        按任务加载的项目技能&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;设定默认模型&quot;&gt;设定默认模型&lt;/h3&gt;
&lt;p&gt;在项目中创建 &lt;code&gt;.pi/settings.json&lt;/code&gt;：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  &quot;defaultProvider&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;google-vertex&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  &quot;defaultModel&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;gemini-4-argon&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  &quot;defaultThinkingLevel&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;low&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;项目配置的作用范围是这个目录；其他项目继续使用各自或全局的设置。首次启动时，按 Pi 的提示确认自己信任这个项目。&lt;a href=&quot;https://github.com/earendil-works/pi/blob/v1.5.0/packages/coding-agent/docs/settings.md&quot;&gt;设置的作用范围&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;写入项目身份&quot;&gt;写入项目身份&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;.pi/SYSTEM.md&lt;/code&gt; 会替换这个项目的默认系统提示词。公开示例可以从下面几行开始，再用自己的样章和项目规则细化：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;你是中文小说编辑与创作搭档。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;以人物动机、场景张力、叙事视角和语言质感判断稿件。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;续写请求直接输出正文；提纲、分析和修改说明按用户要求提供。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;沿用项目中的设定、时间线和人物声音，以认可的样章作为文风依据。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;修改已有稿件时，先读取相关设定和上下文，再编辑对应文件。&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;对需要作者决定的情节分歧，给出具体选项，保留作者的选择。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我把长期的项目事实和稿件约定放进 &lt;code&gt;AGENTS.md&lt;/code&gt;，把角色与输出习惯放进 &lt;code&gt;SYSTEM.md&lt;/code&gt;。Pi 会另外加载项目上下文；替换默认提示词以后，项目约定仍然参与后续请求。&lt;a href=&quot;https://github.com/earendil-works/pi/blob/v1.5.0/packages/coding-agent/docs/configuration.md&quot;&gt;项目提示词配置&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;核对技能来源&quot;&gt;核对技能来源&lt;/h3&gt;
&lt;p&gt;我第一次检查新会话时，发现系统提示词里有 &lt;strong&gt;47 个技能：13 个项目技能，加上 34 个从全局带入的技能&lt;/strong&gt;。对这个写作项目，全局带入的那一批增加了很多无关上下文。&lt;/p&gt;
&lt;p&gt;这些技能来自 &lt;code&gt;~/.agents/skills/&lt;/code&gt;。我在同一份 &lt;code&gt;.pi/settings.json&lt;/code&gt; 里增加了来源过滤，完整示例如下：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  &quot;defaultProvider&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;google-vertex&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  &quot;defaultModel&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;gemini-4-argon&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  &quot;defaultThinkingLevel&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;low&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;  &quot;skills&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;    &quot;~/.agents/skills&quot;&lt;/span&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;    &quot;!~/.agents/skills/**&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在 Pi 1.5.0 中，这两项需要配合使用：前一项把该目录纳入项目资源设置，后一项再将其中的技能排除。它针对的是这一处来源；如果技能还来自其他目录或已安装的包，要继续核对各自的来源。&lt;a href=&quot;https://github.com/earendil-works/pi/blob/v1.5.0/packages/coding-agent/docs/settings.md#resources&quot;&gt;资源过滤设置&lt;/a&gt;、&lt;a href=&quot;https://github.com/earendil-works/pi/blob/v1.5.0/packages/coding-agent/src/core/package-manager.ts&quot;&gt;发现与过滤实现&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;启动时注入的技能目录主要包含名称、说明和路径；完整技能正文按任务需要读取。这次字符数的变化对应技能目录这一段。&lt;a href=&quot;https://github.com/earendil-works/pi/blob/v1.5.0/packages/coding-agent/docs/skills.md#understand-how-skills-load&quot;&gt;技能加载方式&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;从新会话核查实际效果&quot;&gt;从新会话核查实际效果&lt;/h2&gt;
&lt;p&gt;我用一个新会话验收默认配置。续接旧会话会恢复它已经记录的模型和思考等级，适合继续旧任务；验证刚改的默认值时，新会话更直接。&lt;/p&gt;
&lt;p&gt;Pi 的历史默认保存在 &lt;code&gt;~/.pi/agent/sessions/&lt;/code&gt;，按项目路径分目录，每个会话是一个 &lt;code&gt;.jsonl&lt;/code&gt; 文件。首次请求会记录完整系统消息，其中的 &lt;code&gt;message.sections&lt;/code&gt; 可以用来检查：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;preamble&lt;/code&gt;：写作身份是否已经加载。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;project_context&lt;/code&gt;：项目约定是否来自当前目录。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;skills&lt;/code&gt;：技能的数量和来源是否符合预期。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cwd&lt;/code&gt;：工作目录是否正确。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;再结合会话中的模型与思考等级记录，核对 &lt;code&gt;google-vertex&lt;/code&gt;、&lt;code&gt;gemini-4-argon&lt;/code&gt; 和 &lt;code&gt;low&lt;/code&gt;。后续系统消息可能以增量形式保存，查新会话的首次完整记录最容易对应这次配置。&lt;a href=&quot;https://github.com/earendil-works/pi/blob/v1.5.0/packages/coding-agent/docs/session-format.md#sessionmessageentry&quot;&gt;会话格式&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这次调整后的结果是：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;检查项&lt;/th&gt;
&lt;th&gt;调整结果&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;新会话加载的技能&lt;/td&gt;
&lt;td&gt;47 个 → 13 个，全部来自写作项目&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;技能目录文字量&lt;/td&gt;
&lt;td&gt;19,400 → 4,746 字符，减少约 75.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;写作提示词与项目约定&lt;/td&gt;
&lt;td&gt;均从新会话记录中确认加载&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;模型与思考等级&lt;/td&gt;
&lt;td&gt;Gemini 4 Argon，Low&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;实际请求&lt;/td&gt;
&lt;td&gt;返回 &lt;code&gt;OK&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;原始会话保留在本机。文章展示配置方法和汇总结果，方便复现这条检查路径。&lt;/p&gt;
&lt;h2 id=&quot;日常启动与费用核对&quot;&gt;日常启动与费用核对&lt;/h2&gt;
&lt;p&gt;前面的 &lt;code&gt;export&lt;/code&gt; 作用于当前终端。新开终端时，需要重新提供项目与区域；例如在项目目录运行：&lt;/p&gt;
&lt;pre class=&quot;astro-code astro-code-themes github-light github-dark&quot; style=&quot;background-color:#fff;--shiki-dark-bg:#24292e;color:#24292e;--shiki-dark:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;sh&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt;cd&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt; ~/novel-project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;GOOGLE_CLOUD_PROJECT&lt;/span&gt;&lt;span style=&quot;color:#D73A49;--shiki-dark:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;your-project-id&quot;&lt;/span&gt;&lt;span style=&quot;color:#6F42C1;--shiki-dark:#B392F0&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;GOOGLE_CLOUD_QUOTA_PROJECT=&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;your-project-id&quot;&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;GOOGLE_CLOUD_LOCATION=&lt;/span&gt;&lt;span style=&quot;color:#032F62;--shiki-dark:#9ECBFF&quot;&gt;&quot;global&quot;&lt;/span&gt;&lt;span style=&quot;color:#005CC5;--shiki-dark:#79B8FF&quot;&gt; \&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#24292E;--shiki-dark:#E1E4E8&quot;&gt;pi&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;需要长期使用时，可以把这段启动命令保存在自己的本机脚本中。项目里的模型、身份和技能设置则继续放在 &lt;code&gt;.pi/&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;我先固定 Low，让最初的连接测试和日常起稿有一致的起点。Medium 和 High 对中文长篇写作的价值，还需要用同一份细纲、样章和评价标准做对照。接通模型和技能隔离是这次已经验证的部分，写作质量留给真实稿件来检验。&lt;/p&gt;
&lt;p&gt;费用方面，思考 tokens 也计入输出用量。Google 当期对 Argon 的促销采用返还 credits 的方式；Pi 显示的费用可用于估算，实际收费和试用金抵扣要对照 Cloud Billing。本文接入记录中的赠金抵扣仍待账单核对。&lt;a href=&quot;https://cloud.google.com/model-garden/pricing&quot;&gt;官方价格与促销说明&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;这篇文章由 Codex 根据个人配置记录和官方文档起草，示例中的账号、项目和路径使用通用占位符。&lt;/p&gt;
</content:encoded><category>Agent</category><category>Pi</category><category>Gemini</category><category>Google Cloud</category></item><item><title>这个站是怎么搭的</title><link>https://cancertin.github.io/posts/building-this-site/</link><guid isPermaLink="true">https://cancertin.github.io/posts/building-this-site/</guid><description>不花钱、国内能打开、写作交给 Agent：托管怎么选的，用了哪些工具，文章发出去之前要过哪些检查。</description><pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;我想要一个自己的站，放能公开的工具、方法和笔记。动手前定了四个条件：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;一分钱不花：不买域名，不开付费服务，也不要后端。&lt;/li&gt;
&lt;li&gt;在国内能打开，而且打开得快。&lt;/li&gt;
&lt;li&gt;写稿、排版、发布都能交给 AI Agent，我只说想写什么，最后说一声「发」。&lt;/li&gt;
&lt;li&gt;公开的内容不能带出工作上的信息。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;下面按这四条说说是怎么做的。&lt;/p&gt;
&lt;h2 id=&quot;托管实测之后选了-github-pages&quot;&gt;托管：实测之后选了 GitHub Pages&lt;/h2&gt;
&lt;p&gt;有免费额度的静态托管有好几家，纸面上比来比去意义不大，国内能不能打开得靠实测。我用 &lt;a href=&quot;https://globalping.io&quot;&gt;Globalping&lt;/a&gt; 的匿名接口，从中国内地的 12 个家庭宽带探针分别访问各家的默认域名，看能不能打开、要等多久。2026 年 11 月 3 日北京时间 19:05 前后的结果是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GitHub Pages（&lt;code&gt;github.io&lt;/code&gt;）：12 次全部成功，总耗时的中位数是 556 ms。&lt;/li&gt;
&lt;li&gt;Cloudflare Pages（&lt;code&gt;pages.dev&lt;/code&gt;）：总耗时的中位数是 940 ms，比 GitHub Pages 慢不少。&lt;/li&gt;
&lt;li&gt;Vercel（&lt;code&gt;vercel.app&lt;/code&gt;）：12 次全部失败，域名被 DNS 污染了。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;另外两家没法放在一起比：EdgeOne 的默认域名不对外开放；Netlify 的新账号每月只有 15 GB 左右的流量，用完网站就停了。&lt;/p&gt;
&lt;p&gt;GitHub Pages 的限制我都能接受：免费账号只能从公开仓库发布；站点不能超过 1 GB；每月流量的软上限是 100 GB；不能以商业用途为主。仓库公开反倒是好事，这个站的源码本身就是一份搭站笔记。&lt;/p&gt;
&lt;h2 id=&quot;用到的工具&quot;&gt;用到的工具&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://astro.build&quot;&gt;Astro&lt;/a&gt;：把 Markdown 生成纯静态页面。每篇文章是一个 Markdown 文件，开头写标题、摘要、日期和标签。这几项有校验规则，写错字段名或者漏填，构建直接失败。&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pagefind.app&quot;&gt;Pagefind&lt;/a&gt;：构建完成后给全站建索引，搜索完全在浏览器里进行，不需要服务器。在任意页面按 ⌘K（Windows 上按 Ctrl K）就能搜。&lt;/li&gt;
&lt;li&gt;RSS 和站点地图：构建时自动生成。&lt;/li&gt;
&lt;li&gt;GitHub Actions：推到 main 分支，就自动构建、检查、发布。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;页面不引用任何外部 CDN 或网络字体。中文用系统自带的字体，代码字体跟着网站一起发布，所有资源都来自同一个域名。&lt;/p&gt;
&lt;h2 id=&quot;写一篇文章的流程&quot;&gt;写一篇文章的流程&lt;/h2&gt;
&lt;p&gt;草稿和原始素材放在我电脑上仓库以外的目录里，不进公开仓库。一篇文章大致这样走：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;我说想写什么，给出要点或素材。&lt;/li&gt;
&lt;li&gt;Agent 起草，放进仓库，在本机预览，截图给我看。&lt;/li&gt;
&lt;li&gt;我提修改意见，Agent 接着改，直到我满意。&lt;/li&gt;
&lt;li&gt;我说「发」，Agent 提交并推送，等发布完成后再打开线上页面确认。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;仓库根目录有一份 &lt;code&gt;AGENTS.md&lt;/code&gt;，写明了排版规范、目录约定、发布步骤，以及哪些内容不能上。Claude Code 和 Codex 进到这个仓库，都会先读这份文件。&lt;/p&gt;
&lt;h2 id=&quot;发出去之前的检查&quot;&gt;发出去之前的检查&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;npm run check&lt;/code&gt; 一条命令跑完下面这些检查，有一项不过就不能提交：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;构建：校验文章的标题、日期等信息，生成页面和搜索索引。&lt;/li&gt;
&lt;li&gt;站内链接：每个站内链接和锚点都必须指向真实存在的位置。&lt;/li&gt;
&lt;li&gt;中文标点：中文句子里不能夹半角标点。代码、网址、数字和纯英文短语不算。&lt;/li&gt;
&lt;li&gt;图片体积：单张图片超过上限就报错。&lt;/li&gt;
&lt;li&gt;提交身份：每个提交的作者邮箱都必须是 GitHub 提供的 noreply 地址，不暴露真实邮箱。&lt;/li&gt;
&lt;li&gt;敏感词：按我电脑上的一份清单，扫一遍源文件、生成的页面和全部提交历史。清单本身不进仓库。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本机的 git hook 会在提交和推送前自动跑这些检查。GitHub Actions 上还会再跑一遍，只有敏感词这项不跑，因为清单只在我的电脑上。检查不通过，网站就不会更新。&lt;/p&gt;
&lt;h2 id=&quot;还没做的&quot;&gt;还没做的&lt;/h2&gt;
&lt;p&gt;3D 房间、中英双语、邮件订阅、评论和访问统计，都留到以后。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;这篇文章由 Claude Code 根据搭站的过程起草，我核对后发布。&lt;/p&gt;
</content:encoded><category>建站</category><category>GitHub Pages</category><category>Astro</category></item></channel></rss>