戰(zhàn):從安裝到自定義Skill的網(wǎng)頁(yè)剪藏指南)
最近同事連續(xù)問(wèn)了我好幾次“ponytail skill 怎么用”“ponytail 插件到底怎么裝”我才發(fā)現(xiàn)這個(gè)叫 Ponytail 的開(kāi)源插件比我想象中要火。它不是一個(gè)普通的網(wǎng)頁(yè)剪藏工具而是一套可以自定義處理動(dòng)作的瀏覽器擴(kuò)展。簡(jiǎn)單說(shuō)Ponytail 能把網(wǎng)頁(yè)正文提取成干凈的 Markdown再通過(guò)你配置好的 Skill技能模板自動(dòng)完成摘要、翻譯、歸類這些事。適合需要長(zhǎng)期收集資料、整理筆記、做內(nèi)容研究的寫(xiě)作者、產(chǎn)品經(jīng)理和開(kāi)發(fā)者。這篇文章我盡量把安裝、配置、實(shí)操和踩坑都寫(xiě)清楚保證你看完能直接上手。1. Ponytail 的整體設(shè)計(jì)思路拆解它不只是一個(gè)“另存為”按鈕很多人第一次打開(kāi) Ponytail 的界面會(huì)覺(jué)得它太簡(jiǎn)陋一個(gè)彈窗幾個(gè)按鈕沒(méi)了。但用一段時(shí)間后你會(huì)發(fā)現(xiàn)它的價(jià)值不在于按鈕多而在于把“網(wǎng)頁(yè)內(nèi)容處理”這件事拆成了一個(gè)清晰的數(shù)據(jù)流水線。我最早也是沖著剪藏功能去的后來(lái)才明白它的核心設(shè)計(jì)是“輸入網(wǎng)頁(yè)正文輸出結(jié)構(gòu)化 Markdown中間由 Skill 決定怎么處理”。1.1 先搞清楚 Ponytail 的定位網(wǎng)頁(yè)內(nèi)容處理管道普通剪藏插件做的是“原樣保存”你看到什么它保存什么頂多把廣告過(guò)濾一下。Ponytail 不一樣它默認(rèn)會(huì)把網(wǎng)頁(yè)正文解析成一個(gè)標(biāo)準(zhǔn)結(jié)構(gòu)然后交給 Skill 引擎處理。這個(gè)結(jié)構(gòu)包括標(biāo)題、作者、發(fā)布時(shí)間、正文段落、圖片鏈接、代碼塊等字段。Skill 可以基于這些字段去做摘要、抽取關(guān)鍵詞、翻譯、轉(zhuǎn)成表格甚至發(fā)起一個(gè)本地 API 請(qǐng)求。舉個(gè)例子我經(jīng)常需要把技術(shù)文章里的“結(jié)論”部分拎出來(lái)方便寫(xiě)周報(bào)。以前我得手動(dòng)閱讀、復(fù)制、再整理。用 Ponytail 以后我只需要配置一個(gè) Skill讓它識(shí)別正文中帶“Conclusion”或者“總結(jié)”字樣的段落把內(nèi)容截取出來(lái)自動(dòng)生成一個(gè)帶鏈接、帶標(biāo)題的摘要卡片保存到我的資料庫(kù)目錄。整個(gè)過(guò)程不需要復(fù)制粘貼也不需要打開(kāi)第二個(gè)編輯器。這個(gè)設(shè)計(jì)解決了一個(gè)我在使用其他工具時(shí)非常頭疼的問(wèn)題信息保存只是第一步真正的時(shí)間消耗在“二次整理”上。Ponytail 把“二次整理”的規(guī)則提前定義好讓瀏覽器在保存那一刻就完成分類和加工。它不是一個(gè)更好的收藏夾而是一個(gè)輕量的個(gè)人內(nèi)容加工流水線。1.2 Ponytail Skill 是什么把自然語(yǔ)言變成可執(zhí)行動(dòng)作如果只把 Ponytail 當(dāng)剪藏插件那你錯(cuò)過(guò)了一半功能。它的名字里帶“Skill”不是巧合。Ponytail 的 Skill 本質(zhì)上是一組“用戶自定義指令模板”每個(gè) Skill 包含四個(gè)部分觸發(fā)名稱、匹配規(guī)則、處理步驟、輸出格式。觸發(fā)名稱就是你右鍵菜單里看到的那個(gè)詞比如“要點(diǎn)摘要”“英譯中”“提取代碼塊”。匹配規(guī)則用來(lái)限定這個(gè) Skill 在哪些網(wǎng)站生效避免在購(gòu)物頁(yè)面觸發(fā)文本處理。處理步驟則是核心它描述了對(duì)網(wǎng)頁(yè)正文做哪些操作。輸出格式?jīng)Q定最終保存的文件結(jié)構(gòu)你完全可以定義成“日期_來(lái)源_標(biāo)題.md”。這里有個(gè)重要的設(shè)計(jì)理念Ponytail 沒(méi)有把所有功能內(nèi)置死而是暴露了一套可編程的“技能配置”。你可以把 Skill 理解成給打印機(jī)換墨盒——機(jī)器本身只是一個(gè)執(zhí)行框架真正干活的是一套可替換的規(guī)則。有人用它做論文文獻(xiàn)卡片有人用它把產(chǎn)品評(píng)論整理成競(jìng)品分析表還有人用它定時(shí)抓取幾個(gè)新聞網(wǎng)站生成早報(bào)。這些場(chǎng)景都是通過(guò)配置不同 Skill 實(shí)現(xiàn)的不需要修改插件源碼。所以當(dāng)你在網(wǎng)上搜“ponytail skill”時(shí)你看到的更多是用戶分享的配置文件而不是官方教程。Ponytail 的核心社區(qū)文化就是共享 Skill 模板就像共享代碼片段一樣。這一點(diǎn)和 Alfred Workflow、Raycast Script 的玩法很像只是 Ponytail 的位置在瀏覽器里處理的是網(wǎng)頁(yè)內(nèi)容。1.3 Ponytail 的技術(shù)架構(gòu)與數(shù)據(jù)流Ponytail 是標(biāo)準(zhǔn)的瀏覽器擴(kuò)展基于 Manifest V3 規(guī)范。它的數(shù)據(jù)流可以分為四個(gè)主要階段。首先content script 會(huì)在你打開(kāi)網(wǎng)頁(yè)時(shí)自動(dòng)注入但它并不會(huì)立刻執(zhí)行抓取而是等待用戶觸發(fā)。當(dāng)你點(diǎn)擊擴(kuò)展圖標(biāo)或使用右鍵菜單后content script 會(huì)調(diào)用一個(gè) DOM 解析器把當(dāng)前頁(yè)面的主要內(nèi)容提取出來(lái)。這一步會(huì)做幾件事移除 script/style 標(biāo)簽、識(shí)別文章主體節(jié)點(diǎn)、檢測(cè)閱讀模式需要的圖片和代碼塊最后輸出一個(gè)中間態(tài) JSON。這個(gè) JSON 會(huì)被發(fā)送到擴(kuò)展的 Service Worker 里。Service Worker 是插件的“大腦”負(fù)責(zé)加載 Skill 配置、執(zhí)行規(guī)則匹配、調(diào)用文本處理引擎。如果 Skill 只是簡(jiǎn)單的關(guān)鍵詞抽取Service Worker 可以直接用正則和數(shù)組操作完成速度極快。如果 Skill 配置了調(diào)用大模型 APIService Worker 就會(huì)把正文拼接成 prompt發(fā)到外部接口等返回結(jié)果后再做格式化。最后處理結(jié)果會(huì)通過(guò) downloads API 或者本地存儲(chǔ)接口寫(xiě)入你指定的目錄或者在彈窗的預(yù)覽面板中展示。理解這個(gè)數(shù)據(jù)流對(duì)你的使用習(xí)慣很有幫助。比如說(shuō)為什么有些復(fù)雜頁(yè)面點(diǎn)擊后要等一兩秒因?yàn)?DOM 解析和 JSON 序列化都需要時(shí)間。為什么有些 Skill 需要聯(lián)網(wǎng)授權(quán)因?yàn)樗褍?nèi)容發(fā)給外部 API。為什么數(shù)據(jù)保存那么快因?yàn)楸镜匚募?xiě)入和 downloads API 走的都是系統(tǒng)級(jí)通道比普通 Web 請(qǐng)求快很多。你不需要知道所有細(xì)節(jié)但理解這些流程能幫你判斷問(wèn)題出在哪一個(gè)環(huán)節(jié)。2. 安裝與配置Ponytail 插件使用前的 5 個(gè)關(guān)鍵設(shè)置Ponytail 目前沒(méi)有上架 Chrome Web Store所以我本地一直是用開(kāi)發(fā)者模式加載源碼運(yùn)行的。這對(duì)普通用戶來(lái)說(shuō)是一個(gè)小小的門檻但好在整個(gè)安裝過(guò)程只需要幾分鐘而且不需要額外依賴任何運(yùn)行時(shí)。下面這 5 個(gè)設(shè)置是我建議你在正式使用前花時(shí)間配好的它們決定了你后續(xù)的操作效率。2.1 從源碼加載擴(kuò)展完成基礎(chǔ)安裝先去 Ponytail 的 GitHub 倉(cāng)庫(kù)下載最新的 Release 包解壓到一個(gè)獨(dú)立目錄。文件夾里會(huì)有 manifest.json、src、popup、icons 等基礎(chǔ)結(jié)構(gòu)。接下來(lái)打開(kāi) Chrome 或者 Edge在地址欄輸入chrome://extensionsEdge 是edge://extensions打開(kāi)右上角的“開(kāi)發(fā)者模式”開(kāi)關(guān)。點(diǎn)“加載已解壓的擴(kuò)展程序”選擇你剛才解壓的文件夾Ponytail 就出現(xiàn)在擴(kuò)展列表里了。這里有一個(gè)我踩過(guò)的坑下載 Release 包之后不要直接升級(jí)文件夾里的文件而是要重新解壓一個(gè)新的副本再移除舊的擴(kuò)展并重新加載。因?yàn)?Manifest V3 的擴(kuò)展在文件變更后偶爾會(huì)出現(xiàn) Service Worker 緩存不刷新的問(wèn)題表現(xiàn)為功能還在但 Skill 配置加載不到。我一開(kāi)始以為是插件 bug折騰了半天才發(fā)現(xiàn)只是加載方式的問(wèn)題。加載完成后建議把 Ponytail 固定到工具欄。右鍵擴(kuò)展圖標(biāo)選“固定”這樣你在瀏覽網(wǎng)頁(yè)時(shí)只需要點(diǎn)一下圖標(biāo)就能喚起彈窗。這個(gè)操作看似簡(jiǎn)單但很影響使用頻率。不帶固定按鈕的擴(kuò)展常常會(huì)被我遺忘固定之后我每次遇到有價(jià)值的頁(yè)面都會(huì)下意識(shí)點(diǎn)一下。2.2 配置本地工作目錄把輸出落盤到固定位置Ponytail 默認(rèn)會(huì)把生成的 Markdown 文件保存到系統(tǒng)下載目錄但我不建議那樣。每天存到混亂的下載目錄過(guò)一個(gè)月你就找不到東西了。我推薦在設(shè)置頁(yè)里指定一個(gè)固定目錄比如~/Documents/Ponytail并且按“域名/年份/月份”三層結(jié)構(gòu)自動(dòng)創(chuàng)建子目錄。舉例來(lái)說(shuō)你從example.com保存的文章會(huì)落在~/Documents/Ponytail/example.com/2025/06/文件名自動(dòng)帶上時(shí)間戳和文章標(biāo)題。設(shè)置方式很簡(jiǎn)單打開(kāi)擴(kuò)展彈窗左下角的設(shè)置齒輪找到“保存路徑”填寫(xiě)絕對(duì)路徑。注意 Windows 用戶要用反斜杠并且小心轉(zhuǎn)義macOS 和 Linux 用戶直接用~展開(kāi)即可。另外Ponytail 支持配置“文件名模板”默認(rèn)是{{domain}}_{{timestamp}}_{{title}}.md。我建議改成{{timestamp}}_{{title}}因?yàn)槲募飵в蛎麜?huì)讓標(biāo)題變得很長(zhǎng)而且你歸檔靠的是目錄結(jié)構(gòu)不是文件名。這個(gè)步驟少做的話你會(huì)面臨一個(gè)很尷尬的情況保存了半年資料想看的時(shí)候發(fā)現(xiàn)散落在各個(gè)文件夾里。目錄規(guī)劃本質(zhì)上是一個(gè)信息架構(gòu)問(wèn)題越早定下來(lái)后期整理越省心。Ponytail 能把這一步自動(dòng)化你就無(wú)需每天自己建文件夾分類。2.3 配置操作快捷鍵提高剪藏效率Ponytail 默認(rèn)沒(méi)有設(shè)置全局快捷鍵但你可以通過(guò)瀏覽器擴(kuò)展管理頁(yè)自己綁定。在chrome://extensions/shortcuts頁(yè)面能看到 Ponytail 提供的快捷命令。我建議給兩個(gè)命令綁上快捷鍵“快速剪藏”和“打開(kāi)技能面板”。我的習(xí)慣是CtrlShiftY觸發(fā)快速剪藏直接按默認(rèn) Skill 處理當(dāng)前頁(yè)并保存CtrlShiftU打開(kāi)技能面板可以手動(dòng)選擇其他 Skill 或者預(yù)覽結(jié)果。快捷鍵的作用不只是快更重要的是它改變了你的“收集心態(tài)”。當(dāng)你需要點(diǎn)擊圖標(biāo)、再點(diǎn)擊按鈕、再等預(yù)覽這個(gè)流程一旦超過(guò)三秒你會(huì)下意識(shí)覺(jué)得“等一下再保存”然后就永遠(yuǎn)沒(méi)保存。綁定快捷鍵之后看到有價(jià)值的網(wǎng)頁(yè)順手就是CtrlShiftY一個(gè)動(dòng)作完成。我用這個(gè)方式一個(gè)月能穩(wěn)定收集一百多篇資料而且都是經(jīng)過(guò)默認(rèn) Skill 清洗過(guò)的正文不存在瀏覽器書(shū)簽?zāi)欠N“存了等于沒(méi)存”的問(wèn)題。注意一點(diǎn)快捷鍵最好選那些原瀏覽器沒(méi)有占用的組合。比如CtrlShiftY在舊版 Chrome 是打開(kāi)歷史記錄但在新版已經(jīng)釋放了。綁定前可以多試幾個(gè)組合避免沖突。如果某個(gè)快捷鍵被其他擴(kuò)展占用了瀏覽器會(huì)有紅色沖突提示你換個(gè)組合就行。2.4 配置 Ponytail Skill 的基本規(guī)則和觸發(fā)范圍安裝完擴(kuò)展后最重要的一步是進(jìn)入設(shè)置里的“技能管理”頁(yè)面建立一個(gè)可用而且收斂的 Skill 集合。Ponytail 默認(rèn)會(huì)帶一個(gè)“正文提取”技能功能是去廣告和導(dǎo)航只保留正文。但只靠這個(gè)技能你體驗(yàn)不到它和普通剪藏插件的區(qū)別。我建議你先建立一個(gè)“要點(diǎn)摘要”技能規(guī)則可以寫(xiě)提取文章標(biāo)題和所有二級(jí)、三級(jí)標(biāo)題并附帶第一個(gè)段落的完整內(nèi)容輸出為 Markdown 目錄格式。同時(shí)給這個(gè) Skill 加上觸發(fā)范圍比如只匹配https://*.example.com/*或者h(yuǎn)ttps://*.github.com/*。這樣做的原因是避免在視頻網(wǎng)站、購(gòu)物網(wǎng)站等不適合的頁(yè)面誤觸發(fā)。設(shè)置觸發(fā)范圍還能減少權(quán)限彈窗提醒因?yàn)閿U(kuò)展會(huì)先檢查 URL 是否在列表里不在的話直接不顯示這個(gè) Skill。Skill 配置接口提供了可視化的“步驟編排”第一步選“提取標(biāo)題”第二步選“提取段落”第三步選“格式化 Markdown”。不需要會(huì)寫(xiě)代碼但是如果你懂一點(diǎn)正則表達(dá)式就能寫(xiě)更精準(zhǔn)的規(guī)則。我后續(xù)會(huì)專門演示一個(gè) JSON 格式的 Skill 配置你可以直接導(dǎo)入。2.5 設(shè)置模型與規(guī)則的二選一策略Ponytail 的技能處理引擎有兩種模式內(nèi)置規(guī)則模式和可選的大模型模式。規(guī)則模式是完全本地的速度快且不消耗 token但它只能做結(jié)構(gòu)化操作比如提取、排序、過(guò)濾、正則替換。大模型模式適合做語(yǔ)義任務(wù)比如生成摘要、改寫(xiě)、翻譯。你可以在每個(gè) Skill 里單獨(dú)指定它使用哪種模式不用全局切換。我的建議是大部分信息收集場(chǎng)景用規(guī)則模式就夠了。因?yàn)槟阍跒g覽器里看到的頁(yè)面結(jié)構(gòu)是固定的通過(guò) CSS 選擇器和正則能把想提取的內(nèi)容抓得很準(zhǔn)。大模型模式適合做“難以預(yù)測(cè)”的任務(wù)比如從一堆評(píng)論里提煉用戶痛點(diǎn)。把大模型 API 的密鑰填到擴(kuò)展設(shè)置后它只會(huì)在你明確觸發(fā)對(duì)應(yīng) Skill 時(shí)才發(fā)起網(wǎng)絡(luò)請(qǐng)求不會(huì)默默消耗你的免費(fèi)額度。從我的實(shí)際體驗(yàn)看混合使用效果最好。比如“競(jìng)品分析”這個(gè) Skill我使用規(guī)則模式抓取頁(yè)面上的所有價(jià)格按鈕和優(yōu)惠券文本然后再用大模型模式生成一段總結(jié)。這樣既保留結(jié)構(gòu)化信息又能獲得語(yǔ)義理解。Ponytail 支持在一個(gè) Skill 內(nèi)串聯(lián)多個(gè)處理步驟正好滿足這種組合需求。3. 實(shí)操演示從安裝到用 Ponytail Skill 整理一篇長(zhǎng)文接下來(lái)我用一個(gè)完整例子帶你走一遍 Ponytail 的典型使用流程。目標(biāo)場(chǎng)景今天我看了一篇關(guān)于“分布式系統(tǒng)一致性”的長(zhǎng)文想把它精華部分保存成自己的筆記并且生成一個(gè)清晰的要點(diǎn)摘要。整個(gè)過(guò)程分五步每步我都會(huì)說(shuō)明操作意圖和可能出現(xiàn)的細(xì)節(jié)問(wèn)題。3.1 明確本次處理的目標(biāo)頁(yè)面和預(yù)期結(jié)果我打開(kāi)的是一個(gè)技術(shù)博客頁(yè)面文章有較多代碼塊、一段很長(zhǎng)的“背景介紹”還有結(jié)尾的“總結(jié)”。我的預(yù)期結(jié)果是得到一個(gè)20250610_分布式系統(tǒng)一致性.md文件內(nèi)容分為三部分文章元信息標(biāo)題、作者、鏈接、摘要要點(diǎn)、我感興趣的代碼塊摘錄。這個(gè)目標(biāo)很清晰所以我只需要兩個(gè) Skill 配合或者把它們合并成一個(gè)“技術(shù)文章歸檔” Skill。為了演示我選擇用兩種方式先用默認(rèn)的“正文提取”清洗頁(yè)面再用自己寫(xiě)的“技術(shù)摘要” Skill 生成最終輸出。你第一次使用建議也這樣拆開(kāi)先用默認(rèn)功能熟悉一下再上自定義技能。3.2 打開(kāi)頁(yè)面并觸發(fā)正文提取檢查清洗結(jié)果點(diǎn)擊瀏覽器工具欄的 Ponytail 圖標(biāo)后彈窗會(huì)顯示一個(gè)預(yù)覽區(qū)左下角是“提取正文”按鈕。點(diǎn)它之后內(nèi)容腳本開(kāi)始解析頁(yè)面。等 1-2 秒預(yù)覽區(qū)會(huì)顯示清洗后的純文本內(nèi)容左上角會(huì)顯示提取到的字符數(shù)和截圖縮略圖。這里有一個(gè)很關(guān)鍵的習(xí)慣正式保存前一定要檢查預(yù)覽。許多網(wǎng)頁(yè)的正文提取不是完美的Ponytail 可能會(huì)把評(píng)論區(qū)內(nèi)容誤并入正文或者漏掉某些多級(jí)標(biāo)題。我遇到最多的情況是“分頁(yè)文章”只提取了當(dāng)前頁(yè)。遇到這種問(wèn)題我會(huì)在預(yù)覽區(qū)手動(dòng)選擇“只保留主區(qū)域”它本質(zhì)上是給 DOM 解析器提供一個(gè)候選節(jié)點(diǎn)提高準(zhǔn)確度。預(yù)覽通過(guò)后再進(jìn)入下一步可以省掉后期很多清理工作。3.3 使用自定義“技術(shù)摘要” Skill 生成要點(diǎn)現(xiàn)在我在預(yù)覽區(qū)下方找到了一個(gè)輸入框顯示“選擇要運(yùn)行的 Skill”我選擇“技術(shù)摘要”并回車。Ponytail 的 Service Worker 開(kāi)始執(zhí)行這個(gè)技能。它先讀取正文 JSON把它切分成段落數(shù)組然后通過(guò)正則匹配獲取所有“背景”“問(wèn)題”“方案”“總結(jié)”等關(guān)鍵詞節(jié)點(diǎn)再抽取對(duì)應(yīng)的段落內(nèi)容最后把這些內(nèi)容拼成 Markdown 列表。這個(gè) Skill 執(zhí)行速度很快因?yàn)橐?guī)則引擎完全在本地跑不會(huì)出現(xiàn)等待網(wǎng)絡(luò)響應(yīng)的情況。彈窗會(huì)在右側(cè)顯示輸出結(jié)果格式大概是## 摘要要點(diǎn) - 分布式系統(tǒng)一致性是指多節(jié)點(diǎn)之間數(shù)據(jù)狀態(tài)保持一致的能力 - 文章提出了一種基于 Quorum 機(jī)制的一致性方案 - 該方案在讀寫(xiě)放大和延遲之間做了權(quán)衡 ## 關(guān)鍵段落 [背景] 分布式系統(tǒng)通常需要冗余備份... [方案] Quorum 機(jī)制要求...看到結(jié)果后我可以繼續(xù)編輯這個(gè)輸出比如刪掉不重要的句子標(biāo)注自己的想法。這個(gè)編輯過(guò)程是可選的但我強(qiáng)烈建議保留因?yàn)椤凹庸ぁ辈攀悄闩c資料建立認(rèn)知連接的過(guò)程。3.4 保存到本地目錄自動(dòng)歸檔并生成文件名確定輸出沒(méi)問(wèn)題后我點(diǎn)擊“保存”按鈕。Ponytail 會(huì)按之前配置的規(guī)則自動(dòng)生成目錄和文件名寫(xiě)入~/Documents/Ponytail/example.com/2025/06/20250610_分布式系統(tǒng)一致性.md。同時(shí)彈窗底部會(huì)顯示保存成功和完整路徑點(diǎn)擊路徑可以打開(kāi)該文件所在目錄。我特別提醒一點(diǎn)如果你在配置里選擇了“保存后自動(dòng)打開(kāi)文件夾”那么每次保存都會(huì)彈出文件管理器時(shí)間久了會(huì)讓人厭煩。我建議關(guān)閉這個(gè)選項(xiàng)改為“保存后顯示通知”減少干擾。文件寫(xiě)入之后你也可以讓 Ponytail 自動(dòng)在 Obsidian 或 Typora 中打開(kāi)不過(guò)需要在設(shè)置里配置對(duì)應(yīng)的編輯器路徑。我目前用的是默認(rèn)編輯器等攢夠一定量資料后再統(tǒng)一做回顧。3.5 實(shí)操編寫(xiě)一個(gè)“多語(yǔ)言翻譯” Skill 配置為了讓自定義能力更清楚我直接給你一個(gè)可導(dǎo)入的 Skill 配置注意這是 JSON 格式在技能管理頁(yè)點(diǎn)擊“導(dǎo)入配置”即可。這個(gè) Skill 會(huì)把剪藏內(nèi)容翻譯成英文。它不是用瀏覽器自帶翻譯而是把正文發(fā)送給外部 LLM API拿到翻譯結(jié)果后保存為 Markdown。{ name: 英文翻譯, trigger: english_translate, urlMatch: [https://*], steps: [ { type: extract, target: fulltext }, { type: prompt, api: openai, model: gpt-4o-mini, template: Translate the following Chinese article into English. Keep the markdown structure. 文章內(nèi)容\n{{fulltext}} }, { type: format, template: ---\n來(lái)源: {{url}}\n標(biāo)題: {{title}}\n翻譯日期: {{today}}\n---\n\n{{prompt_result}} } ], outputFile: {{today}}_{{title}}.en.md }這個(gè)配置里有三個(gè)步驟extract 負(fù)責(zé)從當(dāng)前頁(yè)面提取全文prompt 負(fù)責(zé)拼接模板并調(diào)用模型format 負(fù)責(zé)生成最終文件內(nèi)容。模板中使用{{fulltext}}、{{url}}、{{title}}這些變量它們由 Ponytail 在運(yùn)行時(shí)自動(dòng)填充。導(dǎo)入后你在任意網(wǎng)頁(yè)右鍵操作就能看到“英文翻譯”這個(gè)技能。配置前需要先在設(shè)置里填好 API 密鑰如果沒(méi)有密鑰這個(gè)技能會(huì)執(zhí)行失敗并提示“缺少認(rèn)證信息”。這里有個(gè)很容易忽略的問(wèn)題大模型的 token 限制。如果你的剪藏內(nèi)容是一篇特別長(zhǎng)的論文一次性全塞進(jìn) prompt 會(huì)超出模型上下文窗口結(jié)果返回錯(cuò)誤。我的解決方案是配置一個(gè)“分段翻譯”技能步驟里先用正則把正文按標(biāo)題拆成多個(gè)小節(jié)然后循環(huán)調(diào)用模型接口再把結(jié)果拼接。Ponytail 的規(guī)則引擎支持 for 循環(huán)詳情可以看文檔這里不展開(kāi)。核心思路是不要把所有內(nèi)容都指望大模型一口吞下拆小顆粒度反而更穩(wěn)。4. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄用 Ponytail 時(shí)踩過(guò)的坑說(shuō)實(shí)話Ponytail 的文檔并不算完善很多問(wèn)題必須自己動(dòng)手試才能解決。下面這幾個(gè)問(wèn)題和排查思路是我和幾個(gè)朋友在插件交流群里最常遇到的整理成速查表方便你對(duì)照。4.1 高頻問(wèn)題速查表現(xiàn)象可能原因解決方式點(diǎn)擊擴(kuò)展圖標(biāo)沒(méi)有任何反應(yīng)Service Worker 可能被瀏覽器掛起打開(kāi)chrome://extensions找到 Ponytail點(diǎn)擊“Service Worker”查看日志刷新頁(yè)面后再試提取正文時(shí)大量廣告仍然存在頁(yè)面結(jié)構(gòu)特殊默認(rèn)解析器沒(méi)識(shí)別主內(nèi)容區(qū)手動(dòng)在預(yù)覽區(qū)選擇“主區(qū)域”或使用 CSS 選擇器指定內(nèi)容容器某個(gè) Skill 執(zhí)行后沒(méi)有輸出Skill 的正則規(guī)則匹配不到內(nèi)容或輸出模板為空在技能管理里點(diǎn)“調(diào)試”查看中間 JSON 內(nèi)容調(diào)整正則表達(dá)式調(diào)用大模型時(shí)提示超時(shí)API 請(qǐng)求路徑配置錯(cuò)誤或網(wǎng)絡(luò)不通檢查 API 地址和密鑰嘗試在代碼測(cè)試工具中直接發(fā)起請(qǐng)求保存文件失敗提示路徑錯(cuò)誤設(shè)置中的目錄不存在或無(wú)寫(xiě)入權(quán)限重新選擇可寫(xiě)的文件夾或創(chuàng)建目錄后再保存頁(yè)面是單頁(yè)應(yīng)用內(nèi)容不斷動(dòng)態(tài)加載DOM 解析器只處理了初始內(nèi)容延遲執(zhí)行或嘗試在滾動(dòng)到底部后再觸發(fā)提取這張表是我根據(jù)自己實(shí)踐整理的不是官方文檔內(nèi)容。遇到問(wèn)題時(shí)我通常先打開(kāi)開(kāi)發(fā)者模式看 background 日志日志里會(huì)打印每次提取和保存的關(guān)鍵節(jié)點(diǎn)能定位到是解析環(huán)節(jié)還是保存環(huán)節(jié)出了問(wèn)題。4.2 動(dòng)態(tài)加載頁(yè)面的處理技巧我最頭疼的一類網(wǎng)頁(yè)是單頁(yè)應(yīng)用SPA例如監(jiān)控后臺(tái)、數(shù)據(jù)報(bào)表、無(wú)限滾動(dòng)列表。它們的正文內(nèi)容并不是加載時(shí)一次性出現(xiàn)的而是在你下滑、點(diǎn)擊按鈕后才逐步渲染。Ponytail 默認(rèn)的立即提取方式往往會(huì)漏掉后面的內(nèi)容。我的解決辦法有兩個(gè)。第一個(gè)是在觸發(fā)提取前先手動(dòng)在頁(yè)面上做一次“滾動(dòng)到底部”操作等加載完成后再點(diǎn)擊 Ponytail 圖標(biāo)提取。第二個(gè)是配置一個(gè)“懶加載” Skill步驟里加入一個(gè)延遲指令讓 content script 每隔 500 毫秒滾動(dòng)一次連續(xù)滾動(dòng) 10 次后再抓取正文。雖然這是比較笨的辦法但在沒(méi)有專門適配頁(yè)面 API 的情況下確實(shí)管用。另外對(duì)于動(dòng)態(tài)內(nèi)容我建議你對(duì)提取結(jié)果做一次“段落數(shù)量校驗(yàn)”。例如在 Skill 中設(shè)置一個(gè)條件如果提取的段落數(shù)少于 20則把提示信息寫(xiě)入輸出文件而不是強(qiáng)行保存一份不完整的內(nèi)容。這樣能避免在資料庫(kù)里積累大量“半成品”文檔。4.3 正則規(guī)則里的一個(gè)隱蔽坑回溯陷阱在編寫(xiě)自定義 Skill 提取規(guī)則時(shí)正則表達(dá)式是逃不掉的話題。Ponytail 使用 JavaScript 正則引擎默認(rèn)情況下它不支持原子組和所有格量詞。一旦你在同一條正則里寫(xiě)了多個(gè)貪婪量詞比如.*.*.*遇到超長(zhǎng)文本時(shí)會(huì)產(chǎn)生指數(shù)級(jí)回溯導(dǎo)致擴(kuò)展選項(xiàng)卡卡死嚴(yán)重時(shí)整個(gè)瀏覽器都會(huì)卡頓。我曾經(jīng)寫(xiě)過(guò)一個(gè)提取“作者聲明”的規(guī)則用了類似[\s\S]*?聲明[\s\S]*?的寫(xiě)法測(cè)試短文本完全正常但一遇到幾萬(wàn)字的文章就卡了十幾秒。后來(lái)我把規(guī)則拆成兩個(gè)步驟第一步先用indexOf找到“聲明”關(guān)鍵詞的位置第二步只用slice截取該位置前后的字符徹底避開(kāi)回溯問(wèn)題。所以如果你發(fā)現(xiàn)某個(gè) Skill 在特定頁(yè)面執(zhí)行時(shí) CPU 占用飆升先從正則表達(dá)式入手排查。盡量少用點(diǎn)號(hào)匹配任意字符多用字符集和精確字面量。真的有復(fù)雜匹配需求時(shí)可以考慮分步驟處理而不是試圖用一個(gè)正則寫(xiě)完所有邏輯。4.4 Ponytail Skill 的導(dǎo)入導(dǎo)出和協(xié)同避坑Ponytail 支持把技能配置導(dǎo)出為 JSON 文件方便在不同機(jī)器之間同步。我的習(xí)慣是在本地維護(hù)一個(gè)skills倉(cāng)庫(kù)里面保存所有 Skill 的 JSON 文件和一份說(shuō)明文檔。每次新增或修改技能我都會(huì)先導(dǎo)出再提交到自己的筆記里這樣即使換電腦也能快速恢復(fù)環(huán)境。這里有一個(gè)容易踩的坑導(dǎo)入技能時(shí)不檢查urlMatch范圍。有些社區(qū)分享的 Skill 可能帶有非常寬泛的匹配規(guī)則比如urlMatch: [https://*]這意味著它在所有網(wǎng)站都會(huì)顯示。如果這個(gè) Skill 會(huì)調(diào)用大模型 API你在訪問(wèn)一些無(wú)關(guān)頁(yè)面時(shí)不小心觸發(fā)就會(huì)白白消耗額度。所以導(dǎo)入他人的 Skill 后第一件事就是檢查它的觸發(fā)范圍是否適合你。還有一個(gè)協(xié)同問(wèn)題是多人共享配置時(shí)的變量沖突。如果你和同事共用一套 Skill而每個(gè)人的 API 密鑰不同最好的做法是在配置中使用環(huán)境變量占位符。Ponytail 支持在設(shè)置中定義變量比如{{openai_key}}然后在 Skill 模板里引用。這樣就避免了把密鑰寫(xiě)死在 JSON 文件里導(dǎo)入導(dǎo)出的過(guò)程也安全得多。4.5 性能優(yōu)化與數(shù)據(jù)備份的幾條經(jīng)驗(yàn)在使用超過(guò)兩個(gè)月后我的 Ponytail 本地目錄里積累了上千個(gè) Markdown 文件。文件多了以后插件在加載技能列表時(shí)偶爾會(huì)變慢因?yàn)樾枰獟呙枘夸浗Y(jié)構(gòu)生成索引。解決辦法是定期歸檔舊月份的數(shù)據(jù)把超過(guò)三個(gè)月的文章移到另一個(gè)備份目錄并在設(shè)置里清空緩存索引。對(duì)于數(shù)據(jù)備份我強(qiáng)烈建議把整個(gè)~/Documents/Ponytail目錄納入云盤同步或 Git 倉(cāng)庫(kù)。因?yàn)?Ponytail 的產(chǎn)物都是文本文件非常適合做版本管理。我用的是一個(gè) Git 倉(cāng)庫(kù)管理這些 Markdown每次保存后手動(dòng)提交一次。雖然看起來(lái)多了一步但回滾起來(lái)的安心感是別的方式給不了的。幾個(gè)月下來(lái)這個(gè)倉(cāng)庫(kù)就是我的個(gè)人知識(shí)庫(kù)里面每條內(nèi)容都有關(guān)聯(lián)鏈接和原始出處。最后再分享一個(gè)小技巧如果你常常在同一個(gè)網(wǎng)站內(nèi)收集資料建議為這個(gè)網(wǎng)站單獨(dú)寫(xiě)一個(gè)“站點(diǎn)專用” Skill掛載它的推薦 CSS 選擇器。這樣可以大幅提升提取準(zhǔn)確性并且生成的 Markdown 結(jié)構(gòu)也能統(tǒng)一。我自己就是為技術(shù)博客、新聞網(wǎng)站和文檔站各寫(xiě)了一套專用技能平時(shí)用通用技能兜底關(guān)鍵場(chǎng)景切專用技能效率和準(zhǔn)確率都提升不少。