<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>生长的档案 · LIVING ARCHIVE</title>
    <link>https://blog.andrew-li.top</link>
    <description>记录、建造、编目 —— 把个人经历、项目与思考整理成一座会生长的数字档案室。</description>
    <language>zh-cn</language>

  <item>
    <title>Debian 12 VPS 部署 Groq → LiteLLM → Caddy API 反代全流程</title>
    <link>https://blog.andrew-li.top/blog/2026-003-groq-litellm-caddy-debian12-deploy</link>
    <guid>https://blog.andrew-li.top/blog/2026-003-groq-litellm-caddy-debian12-deploy</guid>
    <pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate>
    <description>&lt;blockquote&gt;
&lt;p&gt;适用环境：Debian GNU/Linux 12 (bookworm)、x86_64 VPS&lt;br&gt;
架构：客户端 → Cloudflare DNS（可选代理）→ Caddy → LiteLLM → Groq API&lt;br&gt;
LiteLLM 负责统一 OpenAI 兼容 API，并为后续增加 OpenAI、Anthropic、Gemini 等上游 API 预留统一入口。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="1-最终架构"&gt;1. 最终架构&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;Client
  │
  │ https://llm.example.com/v1/...
  ▼
Cloudflare DNS / Proxy（可选）
  │
  ▼
Caddy :443
  │
  ▼
LiteLLM :4000
  │
  ▼
Groq API
https://api.groq.com/openai/v1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;建议：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LiteLLM 只负责 API 网关、模型映射和统一 OpenAI 兼容接口。&lt;/li&gt;
&lt;li&gt;Caddy 负责 HTTPS/TLS、域名入口和反向代理。&lt;/li&gt;
&lt;li&gt;Groq API Key 只保存在 VPS。&lt;/li&gt;
&lt;li&gt;客户端只使用 LiteLLM Master Key。&lt;/li&gt;
&lt;li&gt;后续增加其他 AI 平台时，只需增加 LiteLLM 的模型配置。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id="2-确认系统"&gt;2. 确认系统&lt;/h1&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;cat /etc/os-release
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预期：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;确认架构：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;uname -m
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;x86 VPS 通常显示：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;x86_64
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id="3-更新系统并安装基础工具"&gt;3. 更新系统并安装基础工具&lt;/h1&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;apt update &amp;#x26;&amp;#x26; apt upgrade -y
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装常用工具：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;apt install -y \
  curl \
  wget \
  ca-certificates \
  gnupg \
  lsb-release \
  nano \
  ufw
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id="4-安装-docker"&gt;4. 安装 Docker&lt;/h1&gt;
&lt;p&gt;添加 Docker 官方仓库：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;install -m 0755 -d /etc/apt/keyrings
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;curl -fsSL https://download.docker.com/linux/debian/gpg \
  -o /etc/apt/keyrings/docker.asc
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;chmod a+r /etc/apt/keyrings/docker.asc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;添加仓库：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;echo \
  "deb [arch=$(dpkg --print-architecture) \
  signed-by=/etc/apt/keyrings/docker.asc] \
  https://download.docker.com/linux/debian \
  $(. /etc/os-release &amp;#x26;&amp;#x26; echo "$VERSION_CODENAME") stable" \
  | tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更新：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;apt update
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装 Docker：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;apt install -y \
  docker-ce \
  docker-ce-cli \
  containerd.io \
  docker-buildx-plugin \
  docker-compose-plugin
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;验证：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;docker --version
docker compose version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;启动：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;systemctl enable --now docker
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id="5-为什么使用-docker-部署-litellm"&gt;5. 为什么使用 Docker 部署 LiteLLM&lt;/h1&gt;
&lt;p&gt;Docker 的主要优势：&lt;/p&gt;
&lt;h3 id="环境隔离"&gt;环境隔离&lt;/h3&gt;
&lt;p&gt;LiteLLM 运行所需的 Python、依赖库和版本全部封装在容器内。&lt;/p&gt;
&lt;p&gt;不会污染 Debian 系统 Python 环境。&lt;/p&gt;
&lt;h3 id="升级方便"&gt;升级方便&lt;/h3&gt;
&lt;p&gt;更新镜像：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;docker compose pull
docker compose up -d
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="重建方便"&gt;重建方便&lt;/h3&gt;
&lt;p&gt;配置出问题时：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;docker compose down
docker compose up -d
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id="环境变量管理方便"&gt;环境变量管理方便&lt;/h3&gt;
&lt;p&gt;API Key 可以放在 &lt;code&gt;.env&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;GROQ_API_KEY=...
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不需要写入配置文件。&lt;/p&gt;
&lt;h3 id="需要注意的影响"&gt;需要注意的影响&lt;/h3&gt;
&lt;p&gt;Docker 会增加少量：&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;/ul&gt;
&lt;p&gt;对于 API 反代场景，这些开销通常非常小。&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="6-创建-litellm-目录"&gt;6. 创建 LiteLLM 目录&lt;/h1&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;mkdir -p /opt/litellm
cd /opt/litellm
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id="7-创建-env"&gt;7. 创建 &lt;code&gt;.env&lt;/code&gt;&lt;/h1&gt;
&lt;p&gt;创建：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;nano /opt/litellm/.env
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;填写：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-env"&gt;GROQ_API_KEY=gsk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

LITELLM_MASTER_KEY=sk-your-random-master-key
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;生成一个随机 Master Key：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;openssl rand -hex 32
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后保存。&lt;/p&gt;
&lt;p&gt;限制权限：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;chmod 600 /opt/litellm/.env
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id="8-创建-litellm-配置"&gt;8. 创建 LiteLLM 配置&lt;/h1&gt;
&lt;p&gt;创建：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;nano /opt/litellm/config.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置 Groq 模型：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;model_list:

  # OpenAI GPT OSS 120B
  - model_name: groq-gpt-oss-120b
    litellm_params:
      model: groq/openai/gpt-oss-120b
      api_key: os.environ/GROQ_API_KEY

  # OpenAI GPT OSS 20B
  - model_name: groq-gpt-oss-20b
    litellm_params:
      model: groq/openai/gpt-oss-20b
      api_key: os.environ/GROQ_API_KEY

  # Qwen 3.8 27B
  - model_name: groq-qwen3.8-27b
    litellm_params:
      model: groq/qwen/qwen3.8-27b
      api_key: os.environ/GROQ_API_KEY

  # Qwen 3.6 27B
  - model_name: groq-qwen3.6-27b
    litellm_params:
      model: groq/qwen/qwen3.6-27b
      api_key: os.environ/GROQ_API_KEY

  # Groq Compound
  - model_name: groq-compound
    litellm_params:
      model: groq/groq/compound
      api_key: os.environ/GROQ_API_KEY

  # Groq Compound Mini
  - model_name: groq-compound-mini
    litellm_params:
      model: groq/groq/compound-mini
      api_key: os.environ/GROQ_API_KEY
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;说明：&lt;/p&gt;
&lt;p&gt;左侧：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;groq-gpt-oss-20b
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;是客户端看到的统一模型名称。&lt;/p&gt;
&lt;p&gt;右侧：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;groq/openai/gpt-oss-20b
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;是 LiteLLM 调用 Groq 时使用的 provider/model 标识。&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="9-创建-docker-compose"&gt;9. 创建 Docker Compose&lt;/h1&gt;
&lt;p&gt;创建：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;nano /opt/litellm/docker-compose.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;内容：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;services:
  litellm:
    image: ghcr.io/berriai/litellm:main-latest
    container_name: litellm

    restart: unless-stopped

    env_file:
      - .env

    volumes:
      - ./config.yaml:/app/config.yaml:ro

    # 使用 VPS 宿主机网络
    network_mode: host

    command:
      - "--config"
      - "/app/config.yaml"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;启动：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;cd /opt/litellm
docker compose up -d
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;docker compose ps
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;日志：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;docker logs -f litellm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;正常情况下会看到：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;Uvicorn running on http://0.0.0.0:4000
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id="10-验证-litellm-本地服务"&gt;10. 验证 LiteLLM 本地服务&lt;/h1&gt;
&lt;p&gt;确认端口：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;ss -ltnp | grep ':4000'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;访问首页：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;curl -I http://127.0.0.1:4000/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;获取模型：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;set -a
source /opt/litellm/.env
set +a
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;curl http://127.0.0.1:4000/v1/models \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;测试 Chat Completions：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;curl http://127.0.0.1:4000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY" \
  -d '{
    "model": "groq-gpt-oss-20b",
    "messages": [
      {
        "role": "user",
        "content": "Reply with OK"
      }
    ],
    "max_tokens": 100
  }'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;预期：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-json"&gt;{
  "choices": [
    {
      "message": {
        "content": "OK"
      }
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id="11-groq-api-key-故障排查"&gt;11. Groq API Key 故障排查&lt;/h1&gt;
&lt;p&gt;如果 LiteLLM 返回：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;Invalid API Key
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;首先确认 VPS 当前环境变量：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;printf '%s' "$GROQ_API_KEY" | sha256sum
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;检查 &lt;code&gt;.env&lt;/code&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;grep '^GROQ_API_KEY=' /opt/litellm/.env \
  | cut -d= -f2- \
  | tr -d '\r\n' \
  | sha256sum
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;检查容器：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;docker exec litellm sh -c 'printf "%s" "$GROQ_API_KEY"' \
  | sha256sum
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果 &lt;code&gt;.env&lt;/code&gt; 和容器一致，但宿主机不同，通常说明当前 Shell 中使用的是旧环境变量。&lt;/p&gt;
&lt;p&gt;重新加载：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;cd /opt/litellm
set -a
source .env
set +a
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;直接测试 Groq：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;curl -i https://api.groq.com/openai/v1/models \
  -H "Authorization: Bearer $GROQ_API_KEY"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果返回：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;HTTP/2 200
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;说明 Key 本身有效。&lt;/p&gt;
&lt;p&gt;如果容器需要验证：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;docker exec litellm python -c '
import os
import httpx

r = httpx.get(
    "https://api.groq.com/openai/v1/models",
    headers={
        "Authorization": "Bearer " + os.environ["GROQ_API_KEY"]
    },
    timeout=30
)

print("STATUS:", r.status_code)
print("BODY:", r.text[:500])
'
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id="12-安装-caddy"&gt;12. 安装 Caddy&lt;/h1&gt;
&lt;p&gt;安装：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;apt install -y caddy
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;启动：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;systemctl enable --now caddy
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;systemctl status caddy --no-pager
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id="13-配置-caddy-反向代理"&gt;13. 配置 Caddy 反向代理&lt;/h1&gt;
&lt;p&gt;编辑：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;nano /etc/caddy/Caddyfile
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;建议最终配置类似：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-caddy"&gt;llm.example.com {
    reverse_proxy 127.0.0.1:4000
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;将：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;llm.example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;替换成实际域名，例如：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;llm.1463298.xyz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;完整示例：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-caddy"&gt;llm.1463298.xyz {
    reverse_proxy 127.0.0.1:4000
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Caddy 会自动：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;监听 HTTPS&lt;/li&gt;
&lt;li&gt;申请证书&lt;/li&gt;
&lt;li&gt;自动续期&lt;/li&gt;
&lt;li&gt;HTTP 自动跳转 HTTPS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;格式化：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;caddy fmt --overwrite /etc/caddy/Caddyfile
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;验证：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;caddy validate --config /etc/caddy/Caddyfile
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重载：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;systemctl reload caddy
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id="14-如果-caddy-报-443-被占用"&gt;14. 如果 Caddy 报 443 被占用&lt;/h1&gt;
&lt;p&gt;检查：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;ss -ltnp | grep -E ':80|:443'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果看到其他程序占用：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;*:443
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Caddy 无法监听 HTTPS。&lt;/p&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;xray
nginx
apache2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;都可能占用 443。&lt;/p&gt;
&lt;p&gt;需要修改对应服务端口，或者停止对应服务。&lt;/p&gt;
&lt;p&gt;再次检查：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;ss -ltnp | grep -E ':80|:443'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;理想状态：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;*:80   caddy
*:443  caddy
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;systemctl reload caddy
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id="15-cloudflare-dns-配置"&gt;15. Cloudflare DNS 配置&lt;/h1&gt;
&lt;p&gt;在 Cloudflare 创建：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;Type: A
Name: llm
Content: VPS IPv4
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;例如：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;llm.1463298.xyz
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="是否开启橙云"&gt;是否开启橙云？&lt;/h2&gt;
&lt;h3 id="灰云"&gt;灰云&lt;/h3&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;DNS only
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;客户端直接访问 VPS。&lt;/p&gt;
&lt;p&gt;优点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;链路简单&lt;/li&gt;
&lt;li&gt;适合 API&lt;/li&gt;
&lt;li&gt;没有 Cloudflare Proxy 的请求限制影响&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="橙云"&gt;橙云&lt;/h3&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;Proxied
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;客户端 → Cloudflare → VPS。&lt;/p&gt;
&lt;p&gt;优点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;隐藏 VPS IP&lt;/li&gt;
&lt;li&gt;获得 Cloudflare 网络保护&lt;/li&gt;
&lt;li&gt;可使用部分 Cloudflare 安全能力&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对于普通 API 反代，两种都可以。&lt;/p&gt;
&lt;p&gt;如果使用橙云，需要确认你的 API 流量符合 Cloudflare 当前计划和代理规则。&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="16-cloudflare-ssltls"&gt;16. Cloudflare SSL/TLS&lt;/h1&gt;
&lt;p&gt;建议：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;SSL/TLS encryption mode:
Full (strict)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Full (strict) 的含义：&lt;/p&gt;
&lt;p&gt;Cloudflare → VPS 之间也必须使用有效 TLS。&lt;/p&gt;
&lt;p&gt;这里的 TLS 设置通常是域名/Zone 级别配置，不只是顶级域名。&lt;/p&gt;
&lt;p&gt;Caddy 自动申请的公开证书可以满足严格模式。&lt;/p&gt;
&lt;p&gt;不要使用：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;Flexible
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;因为 Flexible 会导致 Cloudflare 到源站可能使用 HTTP，并容易造成重定向或安全问题。&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="17-ufw-防火墙"&gt;17. UFW 防火墙&lt;/h1&gt;
&lt;p&gt;先查看：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;ufw status
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果启用 UFW，放行 SSH：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;ufw allow 22/tcp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;放行 HTTP：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;ufw allow 80/tcp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;放行 HTTPS：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;ufw allow 443/tcp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你的其他服务需要端口，例如：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;ufw allow 30635/tcp
ufw allow 23116/tcp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;启用：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;ufw enable
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;ufw status numbered
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意：&lt;/p&gt;
&lt;p&gt;LiteLLM 使用了：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;4000
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果 Caddy 和 LiteLLM 在同一 VPS，并且 LiteLLM 只作为 Caddy 后端，通常不建议对公网开放 4000。&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="18-验证-https"&gt;18. 验证 HTTPS&lt;/h1&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;curl -I https://llm.example.com
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;正常可能看到：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;HTTP/2 200
server: uvicorn
via: 1.1 Caddy
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;获取模型：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;curl https://llm.example.com/v1/models \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;测试模型：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;curl https://llm.example.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY" \
  -d '{
    "model": "groq-gpt-oss-20b",
    "messages": [
      {
        "role": "user",
        "content": "Reply with OK"
      }
    ]
  }'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果返回：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-json"&gt;{
  "choices": [
    {
      "message": {
        "content": "OK"
      }
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;说明完整链路已经成功：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;Client
  ↓
HTTPS Domain
  ↓
Caddy
  ↓
LiteLLM
  ↓
Groq
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id="19-常用运维命令"&gt;19. 常用运维命令&lt;/h1&gt;
&lt;p&gt;进入目录：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;cd /opt/litellm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看状态：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;docker compose ps
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看日志：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;docker logs -f litellm
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重启：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;docker compose restart
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;配置修改后重建：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;docker compose up -d --force-recreate
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;停止：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;docker compose down
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更新 LiteLLM：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;docker compose pull
docker compose up -d
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看 Caddy：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;systemctl status caddy --no-pager
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;重载 Caddy：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;systemctl reload caddy
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看 Caddy 日志：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;journalctl -u caddy -f
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id="20-后续增加其他-ai-平台"&gt;20. 后续增加其他 AI 平台&lt;/h1&gt;
&lt;p&gt;LiteLLM 的优势是后续可以继续增加：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenAI&lt;/li&gt;
&lt;li&gt;Anthropic&lt;/li&gt;
&lt;li&gt;Google Gemini&lt;/li&gt;
&lt;li&gt;DeepSeek&lt;/li&gt;
&lt;li&gt;OpenRouter&lt;/li&gt;
&lt;li&gt;Azure OpenAI&lt;/li&gt;
&lt;li&gt;其他 OpenAI Compatible API&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最终客户端保持统一：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;https://llm.example.com/v1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;只需要在 LiteLLM 中增加新的：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-yaml"&gt;model_name
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;和对应 provider 配置即可。&lt;/p&gt;
&lt;p&gt;例如客户端始终调用：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;/v1/chat/completions
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;切换模型：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-json"&gt;{
  "model": "your-model-name"
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不需要让客户端分别处理每个平台的 API 地址和认证方式。&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="21-最终检查清单"&gt;21. 最终检查清单&lt;/h1&gt;
&lt;h2 id="litellm"&gt;LiteLLM&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;docker compose ps
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;应为：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;Up
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="4000-端口"&gt;4000 端口&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;ss -ltnp | grep ':4000'
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="caddy"&gt;Caddy&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;systemctl status caddy --no-pager
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;应为：&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;active (running)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="80--443"&gt;80 / 443&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;ss -ltnp | grep -E ':80|:443'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;通常应由 Caddy 监听。&lt;/p&gt;
&lt;h2 id="本地-api"&gt;本地 API&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;curl http://127.0.0.1:4000/v1/models \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY"
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="公网-api"&gt;公网 API&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;curl https://llm.example.com/v1/models \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY"
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id="模型调用"&gt;模型调用&lt;/h2&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;curl https://llm.example.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $LITELLM_MASTER_KEY" \
  -d '{
    "model": "groq-gpt-oss-20b",
    "messages": [
      {
        "role": "user",
        "content": "Reply with OK"
      }
    ]
  }'
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id="22-当前推荐架构总结"&gt;22. 当前推荐架构总结&lt;/h1&gt;
&lt;pre&gt;&lt;code class="language-text"&gt;Internet
    │
    ▼
Cloudflare
    │
    ▼
Caddy :443
    │
    ▼
LiteLLM :4000
    │
    ├── Groq
    ├── OpenAI（未来）
    ├── Gemini（未来）
    ├── Anthropic（未来）
    └── 其他 API（未来）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这是一个适合低负载、多 AI Provider、统一 OpenAI 兼容 API 的部署方案。&lt;/p&gt;
&lt;p&gt;建议后续进一步完善：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;LiteLLM 不直接暴露公网 4000。&lt;/li&gt;
&lt;li&gt;为不同客户端创建独立 API Key。&lt;/li&gt;
&lt;li&gt;增加速率限制。&lt;/li&gt;
&lt;li&gt;定期更新 Docker 镜像。&lt;/li&gt;
&lt;li&gt;备份 &lt;code&gt;/opt/litellm/config.yaml&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;不要把 &lt;code&gt;.env&lt;/code&gt; 上传到 GitHub。&lt;/li&gt;
&lt;li&gt;Cloudflare 使用 Full (strict)。&lt;/li&gt;
&lt;/ol&gt;</description>
  </item>

  <item>
    <title>免费大模型 API 实战地图：AMD 直连与 BAI 反代两条路线</title>
    <link>https://blog.andrew-li.top/blog/2026-002-free-llm-api-guide</link>
    <guid>https://blog.andrew-li.top/blog/2026-002-free-llm-api-guide</guid>
    <pubDate>Thu, 03 Sep 2026 00:00:00 GMT</pubDate>
    <description>&lt;blockquote&gt;
&lt;p&gt;整理时间：2026-09-03 ｜ 信息来源：AMD 开发者官网（developer.amd.com.cn）、BAI 平台、Cloudflare Workers 文档、多份第三方实测教程
⚠️ 两平台均为活动性质，模型池、额度与接口规则持续变动，下文以 2026 年 9 月初的最新快照为准，关键处已标注历史变化。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="0-核心思路两条路线同一个问题"&gt;0. 核心思路：两条路线，同一个问题&lt;/h2&gt;
&lt;p&gt;最近一段时间，不少算力与 AI 服务商在境内推出活动，放出了可以免费调用的大模型 API。把当下能稳定用的两个境内免费通道——AMD 开发者平台与 BAI 平台——并排摆开，其实落在同一条主线上：&lt;strong&gt;去哪白嫖免费大模型，又怎么把它接进自己顺手的工具链。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;答案不是唯一的，取决于平台「开没开好入口」：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;路线 A · 原生直连&lt;/strong&gt;：平台直接开放一套通用标准接口（也就是业内通用的 OpenAI 那套接口规范，Base URL + Key 直接给你），市面上绝大多数 AI 客户端和开发工具不用做任何改造，填进去就能调用。代表就是 &lt;strong&gt;AMD 开发者平台&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;路线 B · 反代桥接&lt;/strong&gt;：平台有免费模型，但官方入口不适合直接塞进第三方客户端（协议不对、路径不对、鉴权不对），需要一个「听得懂两边协议」的中间层。代表就是 &lt;strong&gt;BAI 平台 + Cloudflare Worker 反代&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;一句话：平台入口「开得好」就直连，开得别扭就套一层反代。反代的价值是协议转换 + 域名自有，不是绕开鉴权。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;下面把两条路线并排拆开，最后给一张选型对照表，照着对号入座即可。&lt;/p&gt;
&lt;hr&gt;
&lt;h1 id="路线-a--amd-开发者平台原生-openai-兼容直连"&gt;路线 A · AMD 开发者平台（原生 OpenAI 兼容直连）&lt;/h1&gt;
&lt;h2 id="a1-平台定位与入口"&gt;A1. 平台定位与入口&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Radeon Cloud&lt;/strong&gt; 是 AMD 官方的云端 AI 算力平台（类似 Colab，但跑的是 AMD 显卡）。国内站为 &lt;code&gt;developer.amd.com.cn&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;其中 &lt;strong&gt;Public Free Model APIs（公共免费模型 API）&lt;/strong&gt; 是平台专门给开发者开的免费窗口：模型直接跑在 AMD 自己的服务器上，&lt;strong&gt;不需要你自己开实例，也不消耗 GPU 算力额度&lt;/strong&gt;。它提供的是业内通用的 OpenAI 接口规范，所以 curl、Python SDK、Cherry Studio、Cursor、LangChain 等常见工具不用做任何改造，接上就能用。&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;th&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Token Factory（密钥工厂）&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developer.amd.com.cn/radeon/tokenfactory"&gt;https://developer.amd.com.cn/radeon/tokenfactory&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;领取/管理 API Key、查看额度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Model APIs（模型接口）&lt;/td&gt;
&lt;td&gt;&lt;a href="https://developer.amd.com.cn/radeon/modelapis"&gt;https://developer.amd.com.cn/radeon/modelapis&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;查看免费模型、Base URL、复制 curl 示例&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;补充：加入 &lt;strong&gt;AMD AI Developer Program&lt;/strong&gt; 还能额外领 &lt;strong&gt;$100 的 AMD Developer Cloud 算力额度&lt;/strong&gt;（开实例、微调、训练），与本文的「公共免费模型 API」是两条不同的免费通道。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="a2-注册与拿-key约-10-分钟"&gt;A2. 注册与拿 Key（约 10 分钟）&lt;/h2&gt;
&lt;p&gt;整个流程不绑卡、不充值。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;实测踩坑（重要）&lt;/strong&gt;：常规&lt;strong&gt;邮箱 / 手机号注册有几率失败&lt;/strong&gt;——个人亲测两次均 100% 注册失败（卡在验证/激活环节，收不到验证码或激活无效）。&lt;strong&gt;强烈建议直接走第三方授权登录&lt;/strong&gt;：GitHub、CSDN、魔搭社区，点一下授权即过。
另外该站点已在国内完成 &lt;strong&gt;ICP 备案&lt;/strong&gt;，属合规境内服务；要&lt;strong&gt;正常调用 API，账号的邮箱和手机号必须都通过验证&lt;/strong&gt;——即便用第三方授权登录，也建议随后在账号设置里补齐并验证国内手机号，否则部分接口可能因账号未完全验证而被拒。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;打开 Model APIs 页面&lt;/strong&gt; → 右上角点 &lt;code&gt;Login&lt;/code&gt;。登录方式：&lt;strong&gt;GitHub、CSDN、魔搭社区&lt;/strong&gt; 快捷登录（推荐）／ 手机号（支持国内号码）／ 邮箱。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;完成账号验证&lt;/strong&gt;：邮箱注册会收到验证邮件点链接激活；用第三方授权登录时若第三方邮箱已验证通常自动跳过，但请务必在账号设置里&lt;strong&gt;补齐并验证国内手机号&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;进入 Token Factory&lt;/strong&gt;：激活后页面跳到模型列表。&lt;code&gt;Public Free Model APIs&lt;/code&gt; 区域下各免费模型卡片，点开任意卡片弹窗展示：
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Base URL&lt;/strong&gt;：&lt;code&gt;https://developer.amd.com.cn/radeon/api/v1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Model 名&lt;/strong&gt;：如 &lt;code&gt;DeepSeek-V4-Flash&lt;/code&gt;、&lt;code&gt;Qwen3.8-Flash-Next&lt;/code&gt;、&lt;code&gt;MiniCPM5-1B&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;你的 API Key&lt;/strong&gt;（每位用户独立生成），现成的 curl 测试代码（OpenAI 格式）&lt;/li&gt;
&lt;li&gt;把 Key 复制下来存好，&lt;strong&gt;所有免费模型共用同一个 Key&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;了解积分规则&lt;/strong&gt;：卡片显示「输入 0.14 / 输出 0.28 / 缓存读 0.0028 pts 每 1M tokens」——这是&lt;strong&gt;相对用量统计，不是人民币&lt;/strong&gt;，页面写明 &lt;code&gt;Free to use. Points show relative usage, not a charge&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="a3-免费模型怎么选2026-09-最新快照"&gt;A3. 免费模型怎么选（2026-09 最新快照）&lt;/h2&gt;
&lt;p&gt;9 月初 &lt;code&gt;Public Free Model APIs&lt;/code&gt; 板块挂着 4 个模型，定位完全不同：&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;th&gt;状态&lt;/th&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;strong&gt;DeepSeek-V4-Flash-Vision-Exp&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多模态 VLM（看图）&lt;/td&gt;
&lt;td&gt;LIMITED FREE&lt;/td&gt;
&lt;td&gt;305B 总参 / MoE 激活 13B，1M 上下文，8/31 开源（MIT）&lt;/td&gt;
&lt;td&gt;图片问答、OCR、视觉理解、截图分析&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DeepSeek-V4-Flash-0731&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;纯文本 LLM&lt;/td&gt;
&lt;td&gt;FREE&lt;/td&gt;
&lt;td&gt;DeepSeek V4 Flash 的 0731 快照&lt;/td&gt;
&lt;td&gt;写代码、写文章、问答、翻译、Agent、长文档&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qwen3.8-Flash-Next&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;多模态 MoE&lt;/td&gt;
&lt;td&gt;FREE&lt;/td&gt;
&lt;td&gt;262144 token 上下文（可扩至 1M），125B 总/激活 6B，8/26 开源（Qwen4 架构先导版）&lt;/td&gt;
&lt;td&gt;智能体编程、长文档、代码任务&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MiniCPM5-1B&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;纯文本 LLM&lt;/td&gt;
&lt;td&gt;FREE&lt;/td&gt;
&lt;td&gt;1B 参数，AA 榜单小模型组第一，INT4 仅 0.5GB&lt;/td&gt;
&lt;td&gt;本地部署、端侧、轻量 Agent、IoT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;一句话选型&lt;/strong&gt;：不知道用哪个 → &lt;code&gt;DeepSeek-V4-Flash-0731&lt;/code&gt;（免费全能）；要看图 → &lt;code&gt;DeepSeek-V4-Flash-Vision-Exp&lt;/code&gt;（限时免费先用）；要提前体验 Qwen4 底子 / 长上下文 → &lt;code&gt;Qwen3.8-Flash-Next&lt;/code&gt;；要塞进自己产品 / 端侧 → &lt;code&gt;MiniCPM5-1B&lt;/code&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;📌 &lt;strong&gt;历史变化&lt;/strong&gt;：8 月实测模型池曾为 &lt;code&gt;DeepSeek-V4-Flash-0731&lt;/code&gt;、&lt;code&gt;Qwen3.6-35B-A3B&lt;/code&gt;、&lt;code&gt;MiniCPM5-1B&lt;/code&gt;、&lt;code&gt;MiniCPM-V46&lt;/code&gt;。另有一个 &lt;strong&gt;Fireworks Credits&lt;/strong&gt; 区（如 &lt;code&gt;DeepSeek-V4-Pro&lt;/code&gt;、&lt;code&gt;GLM 5.2&lt;/code&gt;、&lt;code&gt;Kimi K2.5&lt;/code&gt;），需 Fireworks 额度，&lt;strong&gt;不属于免费池&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="a4-客户端接入两种协议两类客户端"&gt;A4. 客户端接入：两种协议，两类客户端&lt;/h2&gt;
&lt;p&gt;AMD 的免费 API 原生同时支持 &lt;strong&gt;OpenAI Completions&lt;/strong&gt; 与 &lt;strong&gt;Anthropic Messages&lt;/strong&gt; 两条协议，同一个 Base URL、同一个 Key 就能喂进两类客户端，无需再套反代。关键是&lt;strong&gt;协议对上&lt;/strong&gt;，不是域名对上就行：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;客户端&lt;/th&gt;
&lt;th&gt;接入 URL&lt;/th&gt;
&lt;th&gt;API 协议&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DSH&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://developer.amd.com.cn/radeon/api/v1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OpenAI Completions&lt;/td&gt;
&lt;td&gt;标准 OpenAI 兼容入口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CCswitch + Claude Code&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://developer.amd.com.cn/radeon/api/v1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Anthropic Messages&lt;/td&gt;
&lt;td&gt;让 Claude Code 走 AMD 的模型&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;两处 &lt;code&gt;API Key&lt;/code&gt; 统一填 &lt;strong&gt;AMD 平台的 key&lt;/strong&gt;——AMD 原生同时支持 OpenAI Completions 与 Anthropic Messages 两条协议，鉴权身份始终来自 AMD，不要在客户端里填其他平台的 key。协议选错（如把 DSH 指到 Anthropic 路径）是最常见的接不通原因。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="a5-注意事项"&gt;A5. 注意事项&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;限速是真的有限&lt;/strong&gt;：积分做软限流，并发超 5 个开始排队，RPM 上限约 &lt;strong&gt;30 次/分钟&lt;/strong&gt;。定位开发调试，&lt;strong&gt;别当生产级高并发 API 用&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;每日额度会重置/变化&lt;/strong&gt;：早期曾 $10/天，后下调至 &lt;strong&gt;$1/天&lt;/strong&gt;（账号间可能有差异），每天早上 8 点重置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LIMITED FREE 随时可能撤&lt;/strong&gt;：Vision 版标 LIMITED FREE，遇到先薅，撤了换纯文本版。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Key 不要公开&lt;/strong&gt;：等同密码，别发公开仓库；泄露了去 Token Factory 重新生成。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据是否留存&lt;/strong&gt;：云端推理会上传请求内容到 AMD 服务器，敏感数据建议走本地 &lt;code&gt;MiniCPM5-1B&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;连接偶尔不稳&lt;/strong&gt;：实测出现过网络错误，把请求 retry 次数调大即可。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id="路线-b--bai-平台--cloudflare-反代桥接"&gt;路线 B · BAI 平台 + Cloudflare 反代（桥接）&lt;/h1&gt;
&lt;h2 id="b1-为什么需要反代"&gt;B1. 为什么需要反代&lt;/h2&gt;
&lt;p&gt;BAI 平台有免费模型，但官方入口不适合直接塞进第三方客户端（DSH、Claude Code 等）——它的协议、路径、鉴权跟通用客户端对不上。所以要在「平台」和「你的工具链」之间架一座桥：一个部署在 Cloudflare 上的 Worker，对外把平台协议翻译成客户端听得懂的 OpenAI / Anthropic 协议，鉴权身份仍然来自 BAI。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;一个能跑的反代，离「能用的反代」之间，差的是平台适配——而不是又写几百行代码。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="b2-改造让脚本听懂-bai-的协议"&gt;B2. 改造：让脚本听懂 BAI 的协议&lt;/h2&gt;
&lt;p&gt;起点是 dogchild 的 &lt;code&gt;api-cf&lt;/code&gt; 仓库里一份现成的 &lt;code&gt;_worker.js&lt;/code&gt;（通用 AI API 反向代理）。直接部署它并不工作，因为字段、鉴权、路由都按原作者平台来。把原脚本连同 BAI 接口约定一起交给 GPT 做适配：补全 BAI 需要的请求头、改写路径映射、把鉴权换成 BAI 的 key 体系。&lt;/p&gt;
&lt;p&gt;迭代后的成品放在 &lt;code&gt;Andrew-li777/API&lt;/code&gt; 仓库的 &lt;code&gt;bai.js&lt;/code&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;源脚本：&lt;a href="https://github.com/dogchild/api-cf/blob/main/cfapi/_worker.js"&gt;dogchild/api-cf · cfapi/_worker.js&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;适配版：&lt;a href="https://github.com/Andrew-li777/API/blob/main/bai.js"&gt;Andrew-li777/API · bai.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;改脚本 ≠ 写脚本：让 GPT 做平台适配，比从零手写快得多。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="b3-部署worker--自定义域名"&gt;B3. 部署：Worker + 自定义域名&lt;/h2&gt;
&lt;p&gt;把 &lt;code&gt;bai.js&lt;/code&gt; 内容贴进 Cloudflare Workers 的新建脚本，保存部署，再把自定义域名绑定到这个 Worker。完成后对外暴露两条基础路径：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/bai/v1&lt;/code&gt; —— 走 OpenAI 风格的 completions 协议&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/bai&lt;/code&gt; —— 走 Anthropic Messages 协议&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="b4-接线两种协议两类客户端"&gt;B4. 接线：两种协议，两类客户端&lt;/h2&gt;
&lt;p&gt;关键是&lt;strong&gt;协议对上&lt;/strong&gt;，不是域名对上就行。同一份部署，对外两条路：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;客户端&lt;/th&gt;
&lt;th&gt;接入 URL&lt;/th&gt;
&lt;th&gt;API 协议&lt;/th&gt;
&lt;th&gt;说明&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DSH&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://你的域名/bai/v1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;OpenAI Completions&lt;/td&gt;
&lt;td&gt;标准 OpenAI 兼容入口&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CCswitch + Claude Code&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://你的域名/bai&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Anthropic Messages&lt;/td&gt;
&lt;td&gt;让 Claude Code 走 BAI 的模型&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;两处 &lt;code&gt;API Key&lt;/code&gt; 统一填 &lt;strong&gt;BAI 平台的 key&lt;/strong&gt;——反代只负责转发，鉴权身份始终来自 BAI，不要在客户端里填 Cloudflare 或其他平台的 key。把 &lt;code&gt;你的域名&lt;/code&gt; 换成真实域名；协议选错（如把 DSH 指到 &lt;code&gt;/bai&lt;/code&gt;）是最常见的接不通原因。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="b5-现在能白嫖哪些模型"&gt;B5. 现在能白嫖哪些模型&lt;/h2&gt;
&lt;p&gt;目前 BAI 平台这批模型免费，接入后直接在客户端里点选：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;deepseekv4lash&lt;/code&gt; / &lt;code&gt;deepseekv4lash-vision&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;glm5.3flash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;qwen.8flash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;hy3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mimov2.5&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;免费清单随平台变动，下单前以 BAI 控制台实际显示为准；反代层不缓存模型列表。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1 id="路线对照与选型"&gt;路线对照与选型&lt;/h1&gt;
&lt;p&gt;两张表把 A、B 两条路线摆在一起，照着选：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;维度&lt;/th&gt;
&lt;th&gt;路线 A · AMD 直连&lt;/th&gt;
&lt;th&gt;路线 B · BAI 反代&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;接入形态&lt;/td&gt;
&lt;td&gt;平台原生 OpenAI 兼容 API&lt;/td&gt;
&lt;td&gt;自建 Cloudflare Worker 桥接&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;注册难度&lt;/td&gt;
&lt;td&gt;中（邮箱/手机注册易失败，建议第三方授权）&lt;/td&gt;
&lt;td&gt;低（BAI 账号 + Cloudflare 账号，无注册坑）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;客户端覆盖&lt;/td&gt;
&lt;td&gt;OpenAI 兼容系全覆盖（curl/Python/Cherry Studio/Cursor/opencode）&lt;/td&gt;
&lt;td&gt;OpenAI 系（&lt;code&gt;/bai/v1&lt;/code&gt;）+ Anthropic 系（&lt;code&gt;/bai&lt;/code&gt;，可喂 Claude Code）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;免费模型&lt;/td&gt;
&lt;td&gt;DeepSeek-V4-Flash 系列、Qwen3.8-Flash-Next、MiniCPM5-1B&lt;/td&gt;
&lt;td&gt;deepseekv4lash、glm5.3flash、qwen.8flash、hy3、mimov2.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;维护成本&lt;/td&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;想最快用上免费模型、工具本身支持 OpenAI 协议&lt;/td&gt;
&lt;td&gt;想用 Claude Code 等 Anthropic 系客户端、或要自有域名统一入口&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;怎么选&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;工具支持 OpenAI 协议、只想最快用上 → &lt;strong&gt;路线 A 直连&lt;/strong&gt;，十分钟搞定。&lt;/li&gt;
&lt;li&gt;用 Claude Code / 想要 Anthropic 协议、或想统一一个自有域名入口 → &lt;strong&gt;路线 B 反代&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;都不排斥 → 两条路线不冲突，AMD 当主力免费池，BAI 反代补 Anthropic 系客户端，互为备份。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="收尾小结"&gt;收尾小结&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;免费模型从哪来&lt;/strong&gt;：AMD 与 BAI 是当下两个可白嫖的境内平台，模型池都在滚动更新，能领就领、领到先用。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;怎么进工具链&lt;/strong&gt;：平台入口开得好就直连（AMD），开得别扭就套反代（BAI）。反代的核心是协议转换，鉴权始终来自原平台。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;共同提醒&lt;/strong&gt;：两者都属活动性质，额度有限速（AMD 约 $1/天、RPM 30）、LIMITED FREE 随时撤；Key 等同密码别公开；敏感数据走本地小模型。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="参考链接"&gt;参考链接&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;AMD 开发者中心（国内）：&lt;a href="https://developer.amd.com.cn/"&gt;https://developer.amd.com.cn/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Token Factory：&lt;a href="https://developer.amd.com.cn/radeon/tokenfactory"&gt;https://developer.amd.com.cn/radeon/tokenfactory&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Model APIs：&lt;a href="https://developer.amd.com.cn/radeon/modelapis"&gt;https://developer.amd.com.cn/radeon/modelapis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;AMD AI Developer Program（领 $100 算力）：&lt;a href="https://developer.amd/?page_id=5185"&gt;https://developer.amd/?page_id=5185&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;BAI 反代源脚本：&lt;a href="https://github.com/dogchild/api-cf/blob/main/cfapi/_worker.js"&gt;dogchild/api-cf&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;BAI 反代适配版：&lt;a href="https://github.com/Andrew-li777/API/blob/main/bai.js"&gt;Andrew-li777/API · bai.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;本文讲解 AMD 直连与 BAI 反代两条免费大模型 API 通道，所有模型、额度与接口以各平台官方页面实时显示为准。&lt;/em&gt;&lt;/p&gt;</description>
  </item>

  <item>
    <title>从参考模板到 Living Archive：设计思路与迭代复盘</title>
    <link>https://blog.andrew-li.top/blog/2026-001-living-archive-design-log</link>
    <guid>https://blog.andrew-li.top/blog/2026-001-living-archive-design-log</guid>
    <pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate>
    <description>&lt;p&gt;这座档案室不是凭空搭起来的。它经历过一次系统的逆向研究、一份技术方案、以及五个版本的迭代。这篇期刊是第一期的第一篇，正好用来记录这个网站的来路——既是给访客看的建造日志，也是给未来的自己留的施工笔记。&lt;/p&gt;
&lt;h2 id="一研究阶段先理解再设计"&gt;一、研究阶段：先理解，再设计&lt;/h2&gt;
&lt;p&gt;动工之前，我们花了一天时间逆向研究了六个个人网站。方法不是「看哪个好看就抄哪个」，而是把每个网站拆成三层来分析：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;可观察的事实&lt;/strong&gt;——页面上能看到什么&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;设计意图的推断&lt;/strong&gt;——它为什么这样做&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可迁移的原则&lt;/strong&gt;——换一个名字、换掉内容，它是否仍然成立&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="六个参考样本"&gt;六个参考样本&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;网站&lt;/th&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;a href="https://edisonzhu.com/"&gt;Edison Zhu&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;极简黑白编辑风作品集&lt;/td&gt;
&lt;td&gt;物理动效：可甩的工牌、章节解锁、加载仪式感&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://binapp.cn/"&gt;Binapp&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;产品思维独立开发者&lt;/td&gt;
&lt;td&gt;设计 token 纪律、单 accent 克制、60fps 预算自述&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://wingshe.com/"&gt;Wingshe&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;模板占位内容（无法验证内容层）&lt;/td&gt;
&lt;td&gt;结构分析有效，内容层放弃&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.baiwumm.com/"&gt;Margin&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;个人知识操作系统&lt;/td&gt;
&lt;td&gt;搜索/快捷键/终端隐喻；但&lt;strong&gt;否决&lt;/strong&gt;了 Terminal 视觉方向&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.moewah.com/"&gt;MoeWah&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;数字档案世界观&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;骨架&lt;/strong&gt;：档案编号、元数据字段、Ledger 台账、END OF FILE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://linzyblog.netlify.app/"&gt;Linzy&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;知识库博客（对照样本）&lt;/td&gt;
&lt;td&gt;反例：主题默认即上线，设计身份缺席的代价&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="三个关键判断"&gt;三个关键判断&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;第一，风格必须有出处。&lt;/strong&gt; Edison 的黑白来自他「从临摹海报开始」的设计启蒙；MoeWah 的档案来自站长的档案职业。风格的方法可以学，结果不能抄——所以本站选择了&lt;strong&gt;档案隐喻&lt;/strong&gt;，但把它转译成自己的语言：「生长的档案 / Living Archive」。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二，内容决定架构。&lt;/strong&gt; Margin 因为要放 74 篇文章所以做了搜索和快捷键；MoeWah 因为要放多年档案所以做了子域和编号系统。内容形态不同，网站架构就该不同。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三，最大的风险是「有风格无资产」。&lt;/strong&gt; 六站所有「风格」之所以成立，背后都有真实的产品、几十篇文章或多年档案——风格是资产的利息，不是本金。这个判断决定了本站的开发顺序：&lt;strong&gt;先有结构，再填内容，最后才是打磨。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="二方案阶段融合而不是模仿"&gt;二、方案阶段：融合而不是模仿&lt;/h2&gt;
&lt;p&gt;研究结论收敛成一份技术方案，核心决策是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;骨架取自 MoeWah&lt;/strong&gt;：档案编号、元数据字段、登记卡、台账、卷终页脚——但编号规则转译为自有格式（&lt;code&gt;2026-001&lt;/code&gt; / &lt;code&gt;PRJ-001&lt;/code&gt;），不复制原站&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;手感取自 Edison&lt;/strong&gt;：物理动效全站统一，由一份 &lt;code&gt;springs.ts&lt;/code&gt; 配置单一来源保证「同一只手」&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;严肃感的解法&lt;/strong&gt;：放弃黑白，采用暖纸色系——米纸底 &lt;code&gt;#FAF7F2&lt;/code&gt; + 墨黑 + &lt;strong&gt;朱砂橙 &lt;code&gt;#C2410C&lt;/code&gt; 单 accent&lt;/strong&gt;。朱砂 = 档案上的印章批注色，accent 本身延续档案隐喻而不是装饰&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;技术栈上有一个值得记录的取舍：参考的六个网站&lt;strong&gt;没有一个用 Next.js 和 Framer Motion&lt;/strong&gt;，但我们还是选了它们——因为物理动效（拖拽 + 弹簧）用 FM 的 &lt;code&gt;useMotionValue + useSpring&lt;/code&gt; 约 20KB 就能达到 Edison 手写 449KB 物理引擎的手感。&lt;strong&gt;工具的价值取决于你要什么，而不是参考站用什么。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="三迭代阶段五个版本五个问题"&gt;三、迭代阶段：五个版本，五个问题&lt;/h2&gt;
&lt;h3 id="v1--克制动效版"&gt;v1 —— 克制动效版&lt;/h3&gt;
&lt;p&gt;第一版实现了骨架：暖纸色系、档案卡、目次表、精选档案。动效刻意克制，只保留了打字机 Hero 和可甩的档案卡。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：物理动效太少了，没有「档案室」的手感。&lt;/p&gt;
&lt;h3 id="v2--物理交互增强版"&gt;v2 —— 物理交互增强版&lt;/h3&gt;
&lt;p&gt;按 Edison 的思路加了六项交互：装卷幕加载仪式、三卷档案叠（拖走卷一，卷二三会滞后跟随）、多语言问候生成器、光标标签、3D 倾斜卡、Konami 彩蛋。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：动效丰富起来了，但都是「锦上添花」，没有改变信息结构。&lt;/p&gt;
&lt;h3 id="v3--物理交互四连"&gt;v3 —— 物理交互四连&lt;/h3&gt;
&lt;p&gt;这一版做了四个改变交互模式的动效：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;卡组循环&lt;/strong&gt;：用力甩出主卡，它会飞走，下一卷弹簧顶上——档案是抽不完的&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;铅字入场&lt;/strong&gt;：Hero 巨名逐字符像铅活字一样被排进字版&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;邮戳收讫&lt;/strong&gt;：/contact 提交表单时，一枚朱砂印章带 squash-and-stretch 砸下&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;陀螺仪档案堆&lt;/strong&gt;：手机上倾斜设备，整叠卡跟随倾斜视差&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;问题&lt;/strong&gt;：动效齐了，但整个档案室只有两个房间（首页和联系页），导航有一半是死链。&lt;/p&gt;
&lt;h3 id="v4--全局工具链"&gt;v4 —— 全局工具链&lt;/h3&gt;
&lt;p&gt;补齐了基础设施：右下角回到卷首按钮（带阅读进度环）、完整的 404 档案错误页、子页面主站链接一致化。&lt;/p&gt;
&lt;h3 id="v5--内容页落地当前"&gt;v5 —— 内容页落地（当前）&lt;/h3&gt;
&lt;p&gt;终于给档案室放进真档案：/about 登记卡（可翻转）、/projects 台账（真实项目入档）、/now 状态页、以及这一篇期刊所在的 /blog。&lt;/p&gt;
&lt;h2 id="四复盘哪些判断被验证了"&gt;四、复盘：哪些判断被验证了&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;「先有结构，再填内容」是对的。&lt;/strong&gt; v1-v4 的所有架构工作，让 v5 填内容时几乎不用返工——真实材料接入只改了一个数据文件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「动效是锦上添花」需要修正。&lt;/strong&gt; 回顾下来，真正改变体验的是 v3 的&lt;strong&gt;卡组循环&lt;/strong&gt;和&lt;strong&gt;铅字入场&lt;/strong&gt;——它们不是装饰，而是让「档案」这个隐喻变得可触摸。其余交互（彩蛋、倾斜、光标标签）是好的，但属于「有趣的加分项」，不是「核心体验」。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;「风格是资产的利息」正在被验证。&lt;/strong&gt; 本站目前的资产还很薄：1 篇文章、3 个项目、0 段真实经历。这座档案室最需要补的不是更多动效，而是持续的内容——每个月一篇期刊，编号递增，就是档案在生长的证据。&lt;/p&gt;
&lt;h2 id="五下一步"&gt;五、下一步&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;MDX 内容引擎已经就位（这篇文章就是用它渲染的）&lt;/li&gt;
&lt;li&gt;/blog 将按期号持续归档&lt;/li&gt;
&lt;li&gt;/experience 章节解锁等待真实经历填充&lt;/li&gt;
&lt;li&gt;内容积累到 30 篇后，评估引入搜索&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;档案室的第一原则：&lt;strong&gt;记录，是为了让未来的自己不必重新发明一切。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;</description>
  </item>
  </channel>
</rss>