<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>2026/09 on BenzHub</title><link>https://benzhub.github.io/archives/2026/09/</link><description>Recent content in 2026/09 on BenzHub</description><generator>Hugo</generator><language>zh-TW</language><lastBuildDate>Mon, 07 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://benzhub.github.io/archives/2026/09/index.xml" rel="self" type="application/rss+xml"/><item><title>RAG 架構實作:在 Cloudflare 上打造知識庫問答 | Cloudflare 完整教學</title><link>https://benzhub.github.io/post/cloudflare/038-rag-implementation/</link><pubDate>Mon, 07 Sep 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/cloudflare/038-rag-implementation/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;RAG(檢索增強生成,Retrieval-Augmented Generation)&lt;/strong&gt; 是讓 LLM「有憑有據」回答問題的關鍵架構:在生成回答之前,先從你自己的知識庫&lt;strong&gt;檢索&lt;/strong&gt;出最相關的資料,再交給 LLM &lt;strong&gt;生成&lt;/strong&gt;答案。這一篇,我們把 &lt;strong&gt;Workers AI&lt;/strong&gt; 的 embedding、&lt;strong&gt;Vectorize&lt;/strong&gt; 的語意搜尋與 LLM 的生成串成一條龍,在 Cloudflare 上做出一個完整、可執行、不會亂編的知識庫問答系統。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>效能最佳化:壓小 CSS 與加速建置 | TailwindCSS 完整教學</title><link>https://benzhub.github.io/post/tailwindcss/038-performance/</link><pubDate>Mon, 07 Sep 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/tailwindcss/038-performance/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;效能最佳化&lt;/strong&gt; 是把 &lt;strong&gt;TailwindCSS&lt;/strong&gt; 專案從「能跑」推向「跑得又快又輕」的最後一哩路。在 v4,全新的 &lt;strong&gt;Oxide&lt;/strong&gt; 引擎讓增量建構快到以微秒計,天生的 &lt;strong&gt;tree-shaking&lt;/strong&gt; 搭配自動內容偵測,讓 production CSS 通常只有幾 KB。這一篇帶你把效能拆成三個面向——&lt;strong&gt;建構速度&lt;/strong&gt;、&lt;strong&gt;CSS 檔案大小&lt;/strong&gt;、&lt;strong&gt;執行期渲染&lt;/strong&gt;,學會用 &lt;code&gt;@source&lt;/code&gt; 精準掃描、量測產出大小、避開 safelist 膨脹,讓網站不只寫得快,也跑得快。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Vectorize 向量資料庫入門:語意搜尋的第一塊拼圖 | Cloudflare 完整教學</title><link>https://benzhub.github.io/post/cloudflare/037-vectorize-intro/</link><pubDate>Sun, 06 Sep 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/cloudflare/037-vectorize-intro/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cloudflare Vectorize&lt;/strong&gt; 是一個與 Workers 深度整合的全球分散式&lt;strong&gt;向量資料庫(vector database)&lt;/strong&gt;,專為儲存與查詢 &lt;strong&gt;embedding(向量嵌入)&lt;/strong&gt; 而生。有了它,你就能在邊緣運算環境裡做&lt;strong&gt;語意搜尋&lt;/strong&gt;——不是比對關鍵字,而是比對「意思」。這一篇我們從「什麼是向量、什麼是相似度」講起,教你用 &lt;code&gt;wrangler&lt;/code&gt; 建立 index、設定 binding,並跑一遍 &lt;code&gt;insert&lt;/code&gt;、&lt;code&gt;upsert&lt;/code&gt;、&lt;code&gt;query&lt;/code&gt;、&lt;code&gt;getByIds&lt;/code&gt;、&lt;code&gt;deleteByIds&lt;/code&gt;、metadata 過濾與 namespaces。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>建置工具整合:Vite、PostCSS 與 CLI 三途徑 | TailwindCSS 完整教學</title><link>https://benzhub.github.io/post/tailwindcss/037-build-tools/</link><pubDate>Sun, 06 Sep 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/tailwindcss/037-build-tools/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;建置工具整合&lt;/strong&gt; 是把 &lt;strong&gt;TailwindCSS&lt;/strong&gt; 從「範例裡的 class」變成「真實專案裡的樣式」的關鍵一步。在 v4,你有三條路:跟 &lt;strong&gt;Vite&lt;/strong&gt; 深度整合的 &lt;code&gt;@tailwindcss/vite&lt;/code&gt;(最推薦)、通用於 Next.js 等框架的 &lt;code&gt;@tailwindcss/postcss&lt;/code&gt;,以及無框架場景的 &lt;code&gt;@tailwindcss/cli&lt;/code&gt;。這一篇帶你認識背後的 &lt;strong&gt;Oxide&lt;/strong&gt; 引擎與 &lt;strong&gt;Lightning CSS&lt;/strong&gt;,搞懂 &lt;code&gt;@import &amp;quot;tailwindcss&amp;quot;&lt;/code&gt; 與 &lt;code&gt;@source&lt;/code&gt;,並把三種建置工具的設定一次對照清楚。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>AI Gateway:替所有 AI 請求加上快取、限流與可觀測 | Cloudflare 完整教學</title><link>https://benzhub.github.io/post/cloudflare/036-ai-gateway/</link><pubDate>Sat, 05 Sep 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/cloudflare/036-ai-gateway/</guid><description>&lt;blockquote&gt;
&lt;p&gt;上一篇《&lt;strong&gt;AI.run() 與常見任務&lt;/strong&gt;》,我們用同一個 &lt;code&gt;env.AI.run()&lt;/code&gt; 跑遍了文字、向量、影像、語音與工具呼叫。但當這些 AI 呼叫進到生產環境,新的煩惱就浮現:重複的 prompt 每次都重算很浪費、成本無從觀測、失敗沒重試、還可能想同時代理 Workers AI 與 OpenAI/Anthropic。這一篇的主角 &lt;strong&gt;AI Gateway&lt;/strong&gt;——一層架在&lt;strong&gt;應用程式與 AI 供應商之間&lt;/strong&gt;的統一閘道——正是來解決這些問題的。我們會替所有 AI 請求加上&lt;strong&gt;快取、限流(rate limiting)、重試 / fallback、可觀測(logs / analytics / costs)與多供應商路由&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>回饋模式:Modal、Toast 與 Skeleton 全攻略 | TailwindCSS 完整教學</title><link>https://benzhub.github.io/post/tailwindcss/036-feedback-patterns/</link><pubDate>Sat, 05 Sep 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/tailwindcss/036-feedback-patterns/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;回饋(Feedback)&lt;/strong&gt; 是介面對使用者每一次操作的回應——你點了儲存,它得告訴你成功了;你按了刪除,它得先問你確定嗎;資料還在載入,它得讓你知道別急。這一篇用 &lt;strong&gt;TailwindCSS&lt;/strong&gt; 把原生 &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; &lt;strong&gt;Modal&lt;/strong&gt;、右上角滑入的 &lt;strong&gt;Toast&lt;/strong&gt;、純 CSS 的 &lt;strong&gt;Tooltip&lt;/strong&gt;、四色語意的 &lt;strong&gt;Alert&lt;/strong&gt;、&lt;code&gt;animate-pulse&lt;/code&gt; 的 &lt;strong&gt;skeleton&lt;/strong&gt; 與 spinner,以及 &lt;strong&gt;Progress&lt;/strong&gt; 進度條一次做齊,搭配 v4 的 &lt;code&gt;@starting-style&lt;/code&gt; 進場動畫與少量 JS,兼顧美觀、流暢與無障礙。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>AI.run() 與常見任務:一個方法跑遍模型目錄 | Cloudflare 完整教學</title><link>https://benzhub.github.io/post/cloudflare/035-workers-ai-run/</link><pubDate>Fri, 04 Sep 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/cloudflare/035-workers-ai-run/</guid><description>&lt;blockquote&gt;
&lt;p&gt;上一篇《&lt;strong&gt;Workers AI 入門&lt;/strong&gt;》,我們跑通了第一個 &lt;code&gt;env.AI.run()&lt;/code&gt; 文字生成推論。但這個方法遠不只「丟 prompt、拿回答」這一招——&lt;strong&gt;同一個 &lt;code&gt;env.AI.run()&lt;/code&gt;,換個模型識別符、換個輸入,就能跑遍整個模型目錄&lt;/strong&gt;。這一篇我們深入 &lt;code&gt;AI.run()&lt;/code&gt; 本身:把&lt;strong&gt;文字生成&lt;/strong&gt;的進階參數(&lt;code&gt;messages&lt;/code&gt;/&lt;code&gt;prompt&lt;/code&gt;、&lt;code&gt;temperature&lt;/code&gt;、&lt;code&gt;max_tokens&lt;/code&gt;)、&lt;strong&gt;串流輸出&lt;/strong&gt;(&lt;code&gt;stream: true&lt;/code&gt; + SSE)、給 &lt;strong&gt;RAG&lt;/strong&gt; 用的 &lt;strong&gt;text embedding&lt;/strong&gt;、&lt;strong&gt;影像生成&lt;/strong&gt;、&lt;strong&gt;Whisper 語音轉文字&lt;/strong&gt;、以及 &lt;strong&gt;function calling&lt;/strong&gt; 工具呼叫,各自跑一遍。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>導覽模式:navbar、下拉選單與行動 Drawer 全攻略 | TailwindCSS 完整教學</title><link>https://benzhub.github.io/post/tailwindcss/035-navigation-patterns/</link><pubDate>Fri, 04 Sep 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/tailwindcss/035-navigation-patterns/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;導覽(Navigation)&lt;/strong&gt; 是使用者在網站裡移動的動線——navbar、下拉選單、麵包屑、Drawer,每一個都在回答「我現在在哪、可以去哪」。這一篇用 &lt;strong&gt;TailwindCSS&lt;/strong&gt; 把桌機水平 &lt;code&gt;navbar&lt;/code&gt;、響應式 &lt;code&gt;hamburger&lt;/code&gt; 選單、&lt;code&gt;group&lt;/code&gt;/&lt;code&gt;peer&lt;/code&gt;/&lt;code&gt;details&lt;/code&gt; 下拉、行動版 &lt;strong&gt;Drawer&lt;/strong&gt; 側邊抽屜,以及 &lt;code&gt;sticky&lt;/code&gt; 固定導覽、麵包屑與 &lt;code&gt;pagination&lt;/code&gt;、&lt;code&gt;tabs&lt;/code&gt; 一次做齊,搭配 v4 語法與少量 JS,兼顧美觀、響應式與無障礙。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Workers AI 入門:在邊緣直接跑 AI 推論 | Cloudflare 完整教學</title><link>https://benzhub.github.io/post/cloudflare/034-workers-ai-intro/</link><pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/cloudflare/034-workers-ai-intro/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cloudflare Workers AI&lt;/strong&gt; 讓你不必自己租 GPU、不必架 GPU 伺服器,就能在全球邊緣節點直接執行機器學習&lt;strong&gt;推論(inference)&lt;/strong&gt;。這一篇是 &lt;strong&gt;Workers AI&lt;/strong&gt; 的第一課:我們會先講清楚什麼是「邊緣 GPU 推論」、怎麼在 &lt;code&gt;wrangler.jsonc&lt;/code&gt; 設定 &lt;strong&gt;AI binding&lt;/strong&gt;、模型目錄裡有哪些種類(LLM、embedding、影像、語音、分類)、怎麼寫出你的第一個 &lt;code&gt;env.AI.run()&lt;/code&gt; 推論,並釐清 &lt;strong&gt;Neurons&lt;/strong&gt; 計費、免費額度,以及它和 &lt;strong&gt;OpenAI&lt;/strong&gt; 這類外部 API 的根本差異。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>表單模式:input/驗證/自訂 checkbox 的優雅寫法 | TailwindCSS 完整教學</title><link>https://benzhub.github.io/post/tailwindcss/034-form-patterns/</link><pubDate>Thu, 03 Sep 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/tailwindcss/034-form-patterns/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;表單(Form)&lt;/strong&gt; 是最考驗一致性的 UI——原生元素在各瀏覽器長得七零八落,狀態(focus/disabled/invalid)又多。這一篇用 &lt;strong&gt;TailwindCSS&lt;/strong&gt; 把 &lt;code&gt;input&lt;/code&gt;、&lt;code&gt;textarea&lt;/code&gt;、&lt;code&gt;select&lt;/code&gt;、&lt;code&gt;checkbox&lt;/code&gt;、&lt;code&gt;radio&lt;/code&gt; 一路樣式化,搭配 &lt;code&gt;@tailwindcss/forms&lt;/code&gt; plugin 重置預設外觀,再用 &lt;code&gt;focus:&lt;/code&gt;、&lt;code&gt;disabled:&lt;/code&gt;、&lt;code&gt;user-invalid:&lt;/code&gt; 等狀態變體與 &lt;code&gt;accent-color&lt;/code&gt; 做出優雅又&lt;strong&gt;無障礙&lt;/strong&gt;的驗證回饋 UI。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>非同步編排選型:Queues vs Workflows vs DO | Cloudflare 完整教學</title><link>https://benzhub.github.io/post/cloudflare/033-async-orchestration-choice/</link><pubDate>Wed, 02 Sep 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/cloudflare/033-async-orchestration-choice/</guid><description>&lt;blockquote&gt;
&lt;p&gt;走完 &lt;strong&gt;Workflows&lt;/strong&gt; 的深水區後,一個更上層的問題浮上檯面:面對一個非同步需求,我到底該選 &lt;strong&gt;Queues&lt;/strong&gt;、&lt;strong&gt;Workflows&lt;/strong&gt;,還是 &lt;strong&gt;Durable Objects&lt;/strong&gt;?這三者不是互相取代的競品,而是各有專精的原語——&lt;strong&gt;Queues&lt;/strong&gt; 擅長大量獨立訊息與簡單重試,&lt;strong&gt;Workflows&lt;/strong&gt; 擅長單一長時多步的持久化流程,&lt;strong&gt;Durable Objects&lt;/strong&gt; 搭配 &lt;strong&gt;Alarms&lt;/strong&gt; 擅長有狀態協調與自我排程。這一篇,我們用一張對照表、一棵決策樹、幾段可執行骨架,把「該用哪個、又怎麼串成一條管線」徹底講清楚,替 CF-4 這條非同步主線收尾。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>設計系統建構:從 0 用 @theme 打造多品牌體系 | TailwindCSS 完整教學</title><link>https://benzhub.github.io/post/tailwindcss/033-design-system-build/</link><pubDate>Wed, 02 Sep 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/tailwindcss/033-design-system-build/</guid><description>&lt;blockquote&gt;
&lt;p&gt;前面幾篇我們把 &lt;strong&gt;設計 Token&lt;/strong&gt;、元件模式、暗色模式、響應式一塊塊拆開來看;這一篇要把它們&lt;strong&gt;組裝成一個整體&lt;/strong&gt;。我們會從 0 開始,用 &lt;strong&gt;TailwindCSS v4&lt;/strong&gt; 的三大 CSS-first 指令——&lt;code&gt;@theme&lt;/code&gt; 定 Token、&lt;code&gt;@utility&lt;/code&gt; 建語意 utility、&lt;code&gt;@custom-variant&lt;/code&gt; 建品牌變體——搭出一套能支援&lt;strong&gt;白牌與多品牌主題切換&lt;/strong&gt;的設計系統,並談元件層、文件化與可維護性策略,讓一人專案到大型團隊都能穩健成長。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>Workflows steps 深入:重試、sleep 與等待事件 | Cloudflare 完整教學</title><link>https://benzhub.github.io/post/cloudflare/032-workflows-steps/</link><pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/cloudflare/032-workflows-steps/</guid><description>&lt;blockquote&gt;
&lt;p&gt;上一篇《&lt;strong&gt;Workflows 持久化執行入門&lt;/strong&gt;》,我們寫出了第一個 Workflow,學會用 &lt;code&gt;step.do(名稱, 函式)&lt;/code&gt; 把每個有副作用的動作包成一個持久化步驟。但那只是最基本的兩參數形式。真正讓 &lt;strong&gt;Cloudflare Workflows&lt;/strong&gt; 強大的,是 &lt;code&gt;step&lt;/code&gt; 的深水區:&lt;strong&gt;每一步要怎麼設定重試與指數退避?怎麼讓流程睡上七天卻完全不計費?怎麼暫停下來等待一個外部的人工審核事件?&lt;/strong&gt; 這一篇,我們就把 &lt;code&gt;step.do&lt;/code&gt;、&lt;code&gt;step.sleep&lt;/code&gt;、&lt;code&gt;step.waitForEvent&lt;/code&gt; 這三支 API 一次拆透,並釐清背後那條所有人都會踩的紅線——&lt;strong&gt;決定性(determinism)&lt;/strong&gt;。&lt;/p&gt;
&lt;/blockquote&gt;</description></item><item><title>設計 Token:用 @theme 打造單一真相源頭 | TailwindCSS 完整教學</title><link>https://benzhub.github.io/post/tailwindcss/032-design-tokens/</link><pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate><guid>https://benzhub.github.io/post/tailwindcss/032-design-tokens/</guid><description>&lt;blockquote&gt;
&lt;p&gt;上一篇《shadcn/ui》我們看到它換膚的祕密,就在那組語意化的 &lt;strong&gt;CSS 變數&lt;/strong&gt;——&lt;code&gt;--primary&lt;/code&gt;、&lt;code&gt;--background&lt;/code&gt;、&lt;code&gt;--radius&lt;/code&gt;… 這些其實有個更宏大的名字:&lt;strong&gt;設計 Token(Design Tokens)&lt;/strong&gt;。這一篇要帶你系統性地理解:如何在 &lt;strong&gt;TailwindCSS v4&lt;/strong&gt; 用 &lt;code&gt;@theme&lt;/code&gt; 把 Token 變成「&lt;strong&gt;同時是 CSS 變數、又是 utility class&lt;/strong&gt;」的單一真相源頭,並用 primitive / semantic 分層、&lt;code&gt;--alpha()&lt;/code&gt; 函式與任意值引用,讓品牌、明暗、多主題都能一鍵切換。&lt;/p&gt;
&lt;/blockquote&gt;</description></item></channel></rss>