亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實戰(zhàn)洞察。

用LLM把Emacs內(nèi)置瀏覽器EWW升級為AI閱讀助手

用LLM把Emacs內(nèi)置瀏覽器EWW升級為AI閱讀助手 總有人問Emacs 里那個復(fù)古的瀏覽器到底還能不能派上用場說實話內(nèi)置的 EWW 用來打開文檔頁、閱讀純文本、快速看一眼網(wǎng)頁結(jié)構(gòu)確實很輕量但遇到內(nèi)容冗長、信息密度低的頁面時閱讀體驗就談不上多好了。本文要做的就是利用大語言模型LLM把 Emacs 的內(nèi)置瀏覽器“改造”成能生成摘要、提煉要點(diǎn)、回答頁面相關(guān)問題的工具讓它在信息獲取層面重新變得好用。我寫這篇文章的思路很直接不打算做一個重型的瀏覽器插件而是基于 Emacs 的擴(kuò)展能力和 LLM 的文本理解能力搭建一套“頁面正文提取 → 調(diào)用 LLM 接口 → 結(jié)果回填 Emacs”的完整鏈路。這套方案適合 Emacs 老用戶、技術(shù)寫作者也適合對 LLM 應(yīng)用感興趣的開發(fā)者。本文會包含完整的 Emacs Lisp 代碼、Python 服務(wù)腳本、配置步驟和常見問題排查你在自己的環(huán)境里照著配置一遍就能把 EWW 升級成一個帶有“AI 閱讀助手”的瀏覽器。1. 為什么用 LLM 增強(qiáng) Emacs 瀏覽器1.1 Emacs 自帶瀏覽器到底缺什么Emacs 內(nèi)建了一個非常輕量的網(wǎng)頁瀏覽器叫 EWWEmacs Web Wowser。它不依賴外部瀏覽器內(nèi)核直接用 Emacs 的文本渲染引擎展示網(wǎng)頁。它的優(yōu)點(diǎn)非常明顯啟動快、和編輯環(huán)境深度集成、可以像操作普通文本一樣搜索復(fù)制也能和 org-mode 配合。但缺點(diǎn)也肉眼可見很多網(wǎng)頁結(jié)構(gòu)復(fù)雜正文夾在導(dǎo)航、廣告、推薦位和腳本標(biāo)簽里面閱讀的時候經(jīng)常要翻很久才能看到真正有用的內(nèi)容。另外EWW 沒有頁面智能分析能力。它展示的是“渲染后的文字”卻無法幫你問一句“這篇文章的核心觀點(diǎn)是什么”“這個文檔的安裝步驟有幾步”“這篇論文的方法部分講了什么”。這些工作原本需要人肉閱讀但正好是 LLM 最擅長的東西。所以與其把 Emacs 的瀏覽器替換成另一個瀏覽器不如在現(xiàn)有流程里增加一層“AI 提取與總結(jié)”。這也是近年來很多人提到的 LLM Agent 思路在 Emacs 里的一個落地場景讓模型承擔(dān)信息篩選和歸納的重復(fù)勞動用戶只保留最終的閱讀和判斷。1.2 與 LLM Wiki 范式的關(guān)系這里要提一下 Andrej Karpathy 提出的 LLM Wiki 范式。簡單來說這個范式強(qiáng)調(diào)的不只是“用提示詞讓 AI 寫一段話”而是把 LLM 當(dāng)成一個可以持續(xù)交互的數(shù)據(jù)處理引擎圍繞它構(gòu)建知識整理、內(nèi)容過濾、結(jié)構(gòu)抽取的工作流。放到 Emacs 瀏覽器里意思就是當(dāng)你打開一個網(wǎng)頁不是把整個頁面一股腦塞給模型而是先做頁面結(jié)構(gòu)分析再讓模型針對特定任務(wù)輸出結(jié)構(gòu)化結(jié)果最后再進(jìn)入你的筆記體系或閱讀流程。比如可以設(shè)計三種不同的處理目標(biāo)摘要模式、問答模式、結(jié)構(gòu)化提取模式。摘要模式適合快速瀏覽新聞和技術(shù)博客問答模式適合拿不準(zhǔn)頁面里某個細(xì)節(jié)時直接問結(jié)構(gòu)化提取模式適合把一篇文章變成 org-mode 格式的大綱或行動項。這些模式在實現(xiàn)上只是 prompt 不同但帶來的體驗差異非常大。1.3 適用范圍與預(yù)期效果這套方案適合本地有 Python 環(huán)境的用戶也適合那些已經(jīng)在用 OpenAI 兼容 API 的開發(fā)者。你不一定需要極高性能的機(jī)器因為推理發(fā)生在服務(wù)端本地只負(fù)責(zé)頁面提取和結(jié)果展示。最終效果是在 EWW 中打開任意網(wǎng)頁一鍵生成摘要自動提取正文并保存到臨時文件模型返回的結(jié)果以獨(dú)立 buffer 形式展示不影響當(dāng)前瀏覽頁面。2. 環(huán)境準(zhǔn)備與方案設(shè)計2.1 環(huán)境依賴說明在開始之前先明確一下環(huán)境需要哪些組件Emacs建議使用 27 以上版本EWW 功能已經(jīng)內(nèi)置不需要額外安裝包。示例中我用的是 Emacs 29 環(huán)境配置語法在 27 和 28 上基本兼容。Python建議 3.8 以上。示例腳本只使用標(biāo)準(zhǔn)庫不需要安裝第三方 HTTP 庫。LLM API需要一個 OpenAI 兼容的接口地址和 API Key。模型名稱、接口地址需要根據(jù)你實際使用的服務(wù)進(jìn)行調(diào)整不要讓示例代碼里的占位符直接用于生產(chǎn)環(huán)境。如果你的系統(tǒng)里沒有 Python或者不喜歡用外部進(jìn)程也可以直接在 Emacs Lisp 里用url-retrieve調(diào)用 API但那樣處理 JSON 轉(zhuǎn)義、長文本截斷會比較麻煩。用 Python 腳本負(fù)責(zé)“抓取正文 請求 LLM 輸出結(jié)果”Emacs 負(fù)責(zé)“獲取鏈接 調(diào)用進(jìn)程 展示結(jié)果”職責(zé)更清晰也更容易調(diào)試。2.2 整體流程拆解整套鏈路可以拆成以下幾步在 EWW 頁面中用戶可以手動觸發(fā)命令。Emacs 獲取當(dāng)前頁面的 URL 和標(biāo)題并將 URL 傳給 Python 腳本。Python 腳本下載網(wǎng)頁 HTML用簡單規(guī)則提取正文文本。Python 腳本把正文和任務(wù)指令組裝成請求發(fā)送給 LLM API。Python 腳本拿到模型輸出后將結(jié)果寫入標(biāo)準(zhǔn)輸出。Emacs 使用異步進(jìn)程讀取腳本輸出并將內(nèi)容展示在新的 buffer 中。流程圖可以簡化成EWW 頁面 → 地址傳遞 → 正文提取 → Prompt 組裝 → API 調(diào)用 → 結(jié)果展示。這里有一個設(shè)計細(xì)節(jié)要注意直接用 EWW 當(dāng)前緩沖區(qū)里的文本不是最可靠的做法。EWW 渲染后的文本中可能包含頁面底部的大量無關(guān)鏈接、版權(quán)信息、推薦內(nèi)容直接用這些內(nèi)容會浪費(fèi) token也會干擾模型判斷。更好方式是讓 Python 腳本重新請求原始 HTML然后提取p標(biāo)簽內(nèi)文本再截斷到一定長度。2.3 關(guān)鍵技術(shù)點(diǎn)實現(xiàn)過程中有三個關(guān)鍵點(diǎn)第一正文提取的質(zhì)量決定了 LLM 輸出的上限。我選用的規(guī)則比較樸素優(yōu)先提取article標(biāo)簽區(qū)域如果沒有就收集所有p標(biāo)簽文本隨后去掉過短的句子和明顯是導(dǎo)航的文本。第二API 請求不能阻塞 Emacs 界面。如果使用call-process同步調(diào)用頁面會在等待過程中卡住。必須使用make-process或start-process做異步調(diào)用。第三長文本需要做截斷?,F(xiàn)代模型的 context 窗口很大但并不是所有模型都支持無限輸入。示例中會按字符數(shù)截斷正文并保留前后內(nèi)容確保 prompt 結(jié)構(gòu)完整。3. 編寫 Python 側(cè)加強(qiáng)腳本3.1 腳本職責(zé)與文件位置我建議在 Emacs 配置目錄下創(chuàng)建llm_eww.py文件路徑示例為~/.emacs.d/llm_eww.py。這個腳本不做復(fù)雜工程只完成三件事根據(jù) URL 抓取網(wǎng)頁、提取正文、調(diào)用 LLM API。3.2 完整代碼實現(xiàn)先給出完整代碼再逐段解釋#!/usr/bin/env python3 # -*- coding: utf-8 -*- llm_eww.py 用于從 Emacs EWW 調(diào)用 LLM 服務(wù)的輔助腳本。 功能 1. 接收 URL 和任務(wù)參數(shù) 2. 下載網(wǎng)頁 HTML 并抽取正文 3. 構(gòu)造 prompt 調(diào)用 OpenAI 兼容接口 4. 將模型輸出寫入 stdout供 Emacs 捕獲 import argparse import json import re import sys import urllib.request from html import unescape def fetch_html(url, timeout15): 下載網(wǎng)頁 HTML返回解碼后的字符串。 request urllib.request.Request(url, headers{ User-Agent: Mozilla/5.0 (Emacs EWW LLM; compatible; https://example.org) }) with urllib.request.urlopen(request, timeouttimeout) as resp: raw resp.read() # 優(yōu)先按 UTF-8 解碼失敗時使用 ISO-8859-1 兜底 try: return raw.decode(utf-8) except UnicodeDecodeError: return raw.decode(iso-8859-1) def strip_tags(html_text): 去除 HTML 標(biāo)簽返回純文本。 # 去除 script 和 style 塊 text re.sub(r(?is)(script|style).*?.*?/\1, , html_text) # 去掉所有標(biāo)簽 text re.sub(r[^], \n, text) # 反轉(zhuǎn)義常用實體 text unescape(text) # 將多個空白行合并 text re.sub(r\n\s*\n, \n, text) return text.strip() def extract_main_content(html_text, max_chars8000): 簡易正文提取優(yōu)先取 article其次取 p 標(biāo)簽序列。 # 方案一優(yōu)先使用 article 區(qū)域 article_match re.search(r(?is)article[^]*(.*?)/article, html_text) if article_match: plain strip_tags(article_match.group(1)) if len(plain) 200: return plain[:max_chars] # 方案二提取所有 p 標(biāo)簽 paragraphs re.findall(r(?is)p[^]*(.*?)/p, html_text) cleaned_paragraphs [] for para in paragraphs: text strip_tags(para).strip() # 過濾短句子和導(dǎo)航類文本 if len(text) 20: continue cleaned_paragraphs.append(text) plain \n.join(cleaned_paragraphs) return plain[:max_chars] def call_llm(api_url, api_key, model, prompt, temperature0.3, max_tokens800): 調(diào)用 OpenAI 兼容的 chat/completions 接口。 payload { model: model, messages: [ {role: system, content: 你是一個專業(yè)的信息提取和摘要助手。}, {role: user, content: prompt} ], temperature: temperature, max_tokens: max_tokens } data json.dumps(payload).encode(utf-8) request urllib.request.Request(api_url, datadata, headers{ Content-Type: application/json, Authorization: fBearer {api_key} }) with urllib.request.urlopen(request, timeout60) as resp: result json.loads(resp.read().decode(utf-8)) # 解析 OpenAI 兼容返回結(jié)構(gòu) return result[choices][0][message][content].strip() def main(): parser argparse.ArgumentParser(descriptionEWW LLM helper) parser.add_argument(--url, requiredTrue, help目標(biāo)網(wǎng)頁 URL) parser.add_argument(--task, defaultsummary, choices[summary, outline, qa], help任務(wù)類型summary/outline/qa) parser.add_argument(--question, default, helpqa 模式下的問題) parser.add_argument(--api-url, defaulthttps://api.openai.com/v1/chat/completions, helpOpenAI 兼容接口地址) parser.add_argument(--api-key, default, helpAPI Key) parser.add_argument(--model, defaultgpt-4o-mini, help模型名稱) parser.add_argument(--max-chars, typeint, default8000, help正文最大字符數(shù)) args parser.parse_args() api_key args.api_key or None if not api_key: # 嘗試從環(huán)境變量讀取 import os api_key os.environ.get(LLM_API_KEY, ) if not api_key: print(ERROR: 缺少 API Key請在參數(shù)中傳入或設(shè)置環(huán)境變量 LLM_API_KEY, filesys.stderr) sys.exit(1) # 獲取正文 try: html_text fetch_html(args.url, timeout15) except Exception as exc: print(fERROR: 頁面抓取失敗: {exc}, filesys.stderr) sys.exit(1) content extract_main_content(html_text, max_charsargs.max_chars) if not content: print(ERROR: 未能提取到有效正文, filesys.stderr) sys.exit(1) # 根據(jù)任務(wù)構(gòu)造 prompt if args.task summary: prompt f請閱讀以下網(wǎng)頁正文用中文生成一份不超過 300 字的摘要。\n\n正文\n{content} elif args.task outline: prompt f請閱讀以下網(wǎng)頁正文提取出結(jié)構(gòu)化的大綱用 Markdown 列表輸出。\n\n正文\n{content} elif args.task qa: if not args.question: print(ERROR: QA 模式需要提供 --question 參數(shù), filesys.stderr) sys.exit(1) prompt f請閱讀以下網(wǎng)頁正文回答問題{args.question}\n\n正文\n{content} else: prompt f請閱讀以下網(wǎng)頁正文生成摘要。\n\n正文\n{content} # 調(diào)用 LLM try: answer call_llm(args.api_url, api_key, args.model, prompt) print(answer) except Exception as exc: print(fERROR: LLM 調(diào)用失敗: {exc}, filesys.stderr) sys.exit(1) if __name__ __main__: main()這段腳本有幾個細(xì)節(jié)值得說明請求頭里的User-Agent是模擬常規(guī)瀏覽器的標(biāo)識有些網(wǎng)站會拒絕空 User-Agent 的請求。extract_main_content里用re.search定位article標(biāo)簽如果沒有 article 就退回p標(biāo)簽聚合。這個策略適合大多數(shù)博客和文檔站。call_llm里的返回結(jié)構(gòu)按 OpenAI 兼容格式解析choices[0].message.content是幾乎所有兼容服務(wù)的標(biāo)準(zhǔn)返回路徑。腳本使用sys.stderr輸出錯誤信息Emacs 端只捕獲 stdout 的正常內(nèi)容這樣調(diào)試時不會讓錯誤信息混入模型輸出。3.3 單獨(dú)測試 Python 腳本具體配置前建議先在終端里跑一次腳本確認(rèn)接口可用。假設(shè)你的 API 接口兼容 OpenAI 格式可以執(zhí)行python3 ~/.emacs.d/llm_eww.py \ --url https://www.gnu.org/software/emacs/ \ --task summary \ --api-url https://api.openai.com/v1/chat/completions \ --api-key 你的API Key \ --model gpt-4o-mini如果一切正常終端會打印出模型生成的摘要文本。這一步能提前排除 Python 腳本、網(wǎng)絡(luò)、API Key 等問題方便后續(xù)集成到 Emacs 時更專注地排查 Emacs Lisp 部分。如果你使用的服務(wù)兼容 OpenAI 格式但接口地址不同只需要把--api-url換成實際地址即可。注意不要把 API Key 寫在代碼里建議使用環(huán)境變量export LLM_API_KEY你的API Key4. 在 Emacs 中集成 LLM 瀏覽器助手4.1 編寫 Emacs Lisp 配置下面這段配置是整個集成方案的核心。它會定義三個交互命令分別是llm-eww-summary生成當(dāng)前頁面摘要。llm-eww-outline生成當(dāng)前頁面大綱。llm-eww-ask針對當(dāng)前頁面提問。配置中需要指定 Python 腳本路徑、模型名稱、API 地址等信息。建議把這些參數(shù)放到一個單獨(dú)的 custom 組里方便管理。;; 文件路徑~/.emacs.d/init.el 或你現(xiàn)有的配置文件中 (defgroup llm-eww nil LLM enhancements for EWW. :group eww) (defcustom llm-eww-python-script ~/.emacs.d/llm_eww.py Python 輔助腳本的路徑。 :type string :group llm-eww) (defcustom llm-eww-api-url https://api.openai.com/v1/chat/completions OpenAI 兼容 API 地址。 :type string :group llm-eww) (defcustom llm-eww-api-key API Key。留空時讀取環(huán)境變量 LLM_API_KEY。 :type string :group llm-eww) (defcustom llm-eww-model gpt-4o-mini 用于網(wǎng)頁總結(jié)的模型名稱。 :type string :group llm-eww) (defcustom llm-eww-max-chars 8000 傳給模型的最大正文字符數(shù)。 :type integer :group llm-eww) (defcustom llm-eww-buffer-name *LLM EWW Result* 結(jié)果展示 buffer 名稱。 :type string :group llm-eww) (defun llm-eww--get-url () 獲取當(dāng)前 EWW 頁面的 URL。 (if (eq major-mode eww-mode) (plist-get eww-data :url) (error 當(dāng)前 buffer 不是 EWW 頁面))) (defun llm-eww--get-title () 獲取當(dāng)前 EWW 頁面的標(biāo)題。 (if (eq major-mode eww-mode) (plist-get eww-data :title) Untitled)) (defun llm-eww--run (task optional question) 異步調(diào)用 Python 腳本任務(wù)類型為 TASK可附帶 QUESTION。 (let* ((url (llm-eww--get-url)) (title (llm-eww--get-title)) (script (expand-file-name llm-eww-python-script)) (buffer (get-buffer-create llm-eww-buffer-name)) (args (list --url url --task task --api-url llm-eww-api-url --model llm-eww-model --max-chars (number-to-string llm-eww-max-chars)))) ;; 如果配置了 API Key則傳給腳本否則依賴環(huán)境變量 (unless (string-blank-p llm-eww-api-key) (setq args (append args (list --api-key llm-eww-api-key)))) (when (and (string-equal task qa) question) (setq args (append args (list --question question)))) ;; 清空結(jié)果 buffer準(zhǔn)備寫入新內(nèi)容 (with-current-buffer buffer (erase-buffer) (insert (format 任務(wù)%s\n頁面%s\nURL%s\n\n task title url)) (insert 正在請求 LLM請稍候...\n)) ;; 使用 make-process 實現(xiàn)異步調(diào)用 (make-process :name llm-eww-process :buffer buffer :command (append (list python3 script) args) :sentinel (lambda (proc _event) (when (string-equal (process-status proc) exit) (with-current-buffer (process-buffer proc) (goto-char (point-max)) (insert \n\n[完成]))))))) (defun llm-eww-summary () 生成當(dāng)前 EWW 頁面的摘要。 (interactive) (llm-eww--run summary)) (defun llm-eww-outline () 生成當(dāng)前 EWW 頁面的大綱。 (interactive) (llm-eww--run outline)) (defun llm-eww-ask (question) 針對當(dāng)前 EWW 頁面提問。 (interactive s問題) (llm-eww--run qa question)) ;; 快捷鍵綁定 (global-set-key (kbd C-c e s) #llm-eww-summary) (global-set-key (kbd C-c e o) #llm-eww-outline) (global-set-key (kbd C-c e a) #llm-eww-ask)這段配置里最核心的 API 是make-process。它啟動一個外部 Python 進(jìn)程并讓 Emacs 在進(jìn)程運(yùn)行期間繼續(xù)保持響應(yīng)。sentinel是進(jìn)程結(jié)束時的回調(diào)用來在結(jié)果后追加完成標(biāo)記。llm-eww--run函數(shù)內(nèi)部先獲取當(dāng)前 EWW 頁面的 URL 和標(biāo)題然后把參數(shù)組裝成列表傳給 Python。注意make-process的:command參數(shù)要求是一個列表其中第一個元素是程序名后面的元素是參數(shù)。4.2 快捷鍵與使用方式配置完成后重新加載 Emacs 配置M-x eval-buffer或者重啟 Emacs讓配置生效。之后在 EWW 里打開一個網(wǎng)頁按C-c e s就會生成摘要。生成過程要等幾秒到幾十秒取決于正文長度和模型響應(yīng)速度。期間可以繼續(xù)編輯其他 buffer不會被阻塞。4.3 擴(kuò)展把結(jié)果插入當(dāng)前頁面有些時候把結(jié)果放到獨(dú)立 buffer 里并不是最方便的。另一個思路是把生成的摘要直接插入到 EWW 頁面的頂部這樣瀏覽時能直接看到概括再往下滾動看細(xì)節(jié)??梢詫懸粋€輔助函數(shù)從結(jié)果 buffer 中提取剛生成的文本插入到當(dāng)前位置(defun llm-eww-insert-summary-at-point () 將最近的 LLM 摘要插入到當(dāng)前光標(biāo)位置。 (interactive) (let ((result-buffer (get-buffer llm-eww-buffer-name))) (if (not result-buffer) (message 還沒有生成結(jié)果) (with-current-buffer result-buffer (goto-char (point-min)) ;; 跳過任務(wù)信息頭只復(fù)制模型生成的正文部分 (if (search-forward \n\n\n nil t) (let ((content (buffer-substring-no-properties (point) (point-max)))) (when (string-match-p \\[完成\\] content) (setq content (replace-regexp-in-string \n\\[完成\\] content))) (insert content)))))))這個函數(shù)可以直接綁定到另一個快捷鍵例如C-c e i。當(dāng)然因為 EWW buffer 本質(zhì)上是只讀渲染視圖直接插入文本可能需要先調(diào)用read-only-mode關(guān)閉只讀屬性。這里只提供思路不強(qiáng)制要求你一定使用。5. 針對不同任務(wù)的 Prompt 設(shè)計5.1 摘要模式摘要模式最適合技術(shù)博客、新聞頁面。Prompt 的核心要求是“使用中文、不超過 300 字、提煉核心觀點(diǎn)”。也可以根據(jù)實際需要改成英文摘要、多段式摘要。如果你希望摘要更結(jié)構(gòu)化可以把 prompt 改成請閱讀以下網(wǎng)頁正文完成以下任務(wù) 1. 用三句話概括核心內(nèi)容 2. 列出文中提到的關(guān)鍵技術(shù)點(diǎn) 3. 給出一句話的閱讀建議這種 prompt 的輸出更適合直接進(jìn)入知識管理流程。5.2 大綱模式大綱模式適合論文、文檔、官方手冊等長頁面。我們利用 LLM 從正文中提取出層級結(jié)構(gòu)并輸出 Markdown 列表Emacs 的 markdown-mode 或 org-mode 都能直接顯示這種格式。注意大綱模式不是簡單地把標(biāo)題復(fù)制出來而是讓模型基于正文語義重新組織出有條理的框架。5.3 問答模式問答模式是三個模式中最靈活的。用戶輸入一個問題比如“這個頁面里提到的安裝步驟有幾步”Python 腳本會把頁面正文和問題一起組裝成 prompt模型只輸出與問題相關(guān)的部分。這個模式在閱讀英文資料時很有用相當(dāng)于給 EWW 接了一個“頁面內(nèi)知識助手”。由于不同模型對 prompt 的敏感度不同建議在第一次使用前先用小段正文測試一下輸出質(zhì)量。如果輸出偏離主題可以適當(dāng)修改 Python 腳本里的 system prompt 或任務(wù)描述。6. 常見問題與排查思路6.1 Python 腳本直接運(yùn)行正常但 Emacs 里沒有輸出這種情況大多是因為 Emacs 環(huán)境變量和終端不一致。Emacs 啟動時不一定繼承 shell 里設(shè)置的LLM_API_KEY尤其是 mac 上通過 GUI 啟動的 Emacs 經(jīng)常存在這個問題。建議先確認(rèn) API Key 配置方式要么在 Emacs 配置里直接寫入llm-eww-api-key變量要么在 Emacs 啟動腳本里顯式setenv環(huán)境變量(setenv LLM_API_KEY 你的API Key)也有可能是因為make-process的命令參數(shù)有問題。可以在結(jié)果 buffer 里查看輸出如果進(jìn)程失敗Emacs 會把 stderr 顯示在 buffer 中。排查時可以臨時把腳本里的print(..., filesys.stderr)改成普通print看看能否輸出錯誤。6.2 模型返回內(nèi)容被截斷如果摘要只生成一半常見原因是max_tokens設(shè)置太小。Python 腳本默認(rèn)是 800對于更長的摘要或問答場景可以適當(dāng)調(diào)大。也可以在 Emacs 配置里新增一個變量專門控制max_tokens參數(shù)。另一種可能是正文過長超出了模型上下文的限制。可以調(diào)低llm-eww-max-chars例如減少到 4000。通常來說一篇技術(shù)博客的核心信息在前 4000 字符內(nèi)就能體現(xiàn)出來。6.3 頁面抓取被反爬限制有些網(wǎng)站對非瀏覽器請求會拒絕訪問返回 403。此時腳本會打印“頁面抓取失敗”。解決方案有兩個方向一是模擬更完整的瀏覽器請求頭比如增加Accept、Accept-Language字段。二是改為把 EWW 當(dāng)前 buffer 的文本內(nèi)容傳給腳本不走重新抓取流程。第二種方案實現(xiàn)上需要修改 Emacs Lisp 函數(shù)在調(diào)腳本時直接傳入buffer-substring而不是 URL。6.4 結(jié)果 buffer 中顯示亂碼中文亂碼通常來自編碼問題。Python 腳本輸出到 stdout 時如果系統(tǒng)默認(rèn)編碼不是 UTF-8可能產(chǎn)生亂碼。建議在 Python 腳本開頭加上import sys sys.stdout.reconfigure(encodingutf-8)另外Emacs 側(cè)也要確保 buffer 的編碼格式為 UTF-8可以在配置中設(shè)置(prefer-coding-system utf-8)6.5 常見問題速查表問題現(xiàn)象常見原因解決思路Emacs 中沒有輸出API Key 未配置或環(huán)境變量缺失在 Emacs 里 setenv或在配置里顯式填寫 API Key報錯“頁面抓取失敗”網(wǎng)站拒絕請求或網(wǎng)絡(luò)不通增加 User-Agent 頭或在本地網(wǎng)絡(luò)可達(dá)的環(huán)境中使用摘要內(nèi)容斷在中間max_tokens 太小調(diào)大 Python 腳本中的 max_tokens 參數(shù)輸出內(nèi)容不相關(guān)Prompt 結(jié)構(gòu)不合理調(diào)整 task 對應(yīng)的 Prompt 文本接口返回 404API 地址不正確確認(rèn)服務(wù)商提供的兼容接口完整路徑中文亂碼編碼不一致統(tǒng)一使用 UTF-8 編碼7. 最佳實踐與工程建議7.1 不要把 API Key 寫入配置倉庫無論你把 Emacs 配置放在 Git 倉庫還是同步到多個設(shè)備都不要把 API Key 硬編碼進(jìn)init.el。更安全的做法是使用環(huán)境變量或者在本地創(chuàng)建一個~/.emacs.d/secrets.el文件內(nèi)容不提交到版本控制。例如在~/.emacs.d/init.el末尾加(load-file ~/.emacs.d/secrets.el)secrets.el內(nèi)容示例(setq llm-eww-api-key 你的API Key)同時在.gitignore中加入secrets.el。這樣既方便本地使用又避免密鑰泄露。7.2 控制傳入模型的正文長度雖然很多模型支持長上下文但輸入越長單次請求的耗時和成本越高。從工程角度看應(yīng)該盡量用最少的 token 完成任務(wù)。建議先做正文提取再做截斷最后傳給模型。示例中已經(jīng)寫了max_chars參數(shù)實際操作時可以根據(jù)場景調(diào)整。如果想進(jìn)一步節(jié)省 token可以在 Python 腳本里做更精細(xì)的清洗比如刪除空白字符、壓縮換行、去掉版權(quán)聲明等。7.3 異步操作避免卡死Emacs 是單線程的同步網(wǎng)絡(luò)請求會導(dǎo)致整個界面卡住。本文示例中使用make-process這是正確做法。如果你后續(xù)要擴(kuò)展為更復(fù)雜的交互例如連續(xù)追問、多輪對話建議繼續(xù)使用異步方式避免影響其他編輯工作。7.4 增加緩存提升體驗對于同一 URL如果模型返回的摘要變化不大完全沒必要重復(fù)請求??梢栽?Python 腳本中加入簡單的文件緩存以 URL 的哈希值作為緩存文件名有效期設(shè)置為一周。這一步能顯著降低 API 調(diào)用成本也縮短了等待時間。簡單的緩存思路如下import hashlib import os def get_cache_path(url): cache_dir os.path.expanduser(~/.cache/llm_eww) os.makedirs(cache_dir, exist_okTrue) url_hash hashlib.md5(url.encode(utf-8)).hexdigest() return os.path.join(cache_dir, url_hash .txt)讀取緩存時判斷文件存在性和時間戳即可。這個功能不復(fù)雜卻非常實用。7.5 隱私與數(shù)據(jù)邊界把網(wǎng)頁正文發(fā)送給外部模型服務(wù)前需要確認(rèn)頁面內(nèi)容不包含敏感數(shù)據(jù)。凡是涉及內(nèi)部系統(tǒng)、未公開文檔、個人隱私的頁面都不應(yīng)該使用外部 LLM 接口處理。如果模型服務(wù)商支持私有化部署或者你有合規(guī)要求可以把--api-url改成內(nèi)部服務(wù)的地址整體流程無需大改。7.6 調(diào)試技巧開發(fā)過程中建議先用 Python 腳本手動跑一遍命令確認(rèn)輸出正常后再回到 Emacs 里測試。如果 Emacs 端沒有結(jié)果可以在結(jié)果 buffer 中查看錯誤信息。也可以臨時把make-process換成call-process同步調(diào)用這樣雖然在等待時會卡住但錯誤提示更直觀方便排查。8. 再進(jìn)一步把 LLM 瀏覽器能力融入日常知識管理8.1 與 org-mode 結(jié)合生成摘要后最簡單的高效用法就是把它粘貼到 org-mode 的筆記里。結(jié)合 org-capture 模板可以一鍵把 URL、標(biāo)題、摘要、時間戳寫入指定的 org 文件。例如在init.el中配置一個 capture 模板(org-capture-add-template (w Web summary with LLM entry (file ~/org/notes.org) * %(plist-get eww-data :title) :web:\n:PROPERTIES:\n:URL: %(plist-get eww-data :url)\n:CREATED: %U\n:END:\n\n%? :empty-lines 1))實際使用時先把 LLM 摘要復(fù)制到剪貼板然后調(diào)用org-capture選擇w模板粘貼摘要。這個流程雖然需要手動幾步但勝在穩(wěn)定也能強(qiáng)迫你在保存時再讀一遍摘要加深理解。8.2 多語言翻譯同樣一套能力也可以把 prompt 改成翻譯任務(wù)。比如新增一個translate任務(wù)讓模型把當(dāng)前頁面翻譯成中文。很多 Emacs 用戶有閱讀英文文檔的需求這個功能能明顯降低閱讀門檻。把 Python 腳本里的任務(wù)選項擴(kuò)一下就行--task translate對應(yīng) prompt 可以是prompt f請將以下網(wǎng)頁正文翻譯成中文保持專業(yè)術(shù)語準(zhǔn)確。\n\n正文\n{content}8.3 從單頁到批量如果你經(jīng)常收集技術(shù)資料可以把這套思路擴(kuò)展到批量抓取。寫一個 Emacs Lisp 函數(shù)讀取一個保存了 URL 列表的文件依次調(diào)用 Python 腳本最終生成一個 Markdown 匯總文件。這個過程中同樣要注意異步和并發(fā)控制不要讓請求數(shù)量過大導(dǎo)致接口限流。9. 寫在最后這篇文章從 Emacs 內(nèi)置瀏覽器 EWW 的痛點(diǎn)出發(fā)完整實現(xiàn)了一套“LLM Emacs Web Browser”的增強(qiáng)方案。核心是把頁面正文提取和 LLM 調(diào)用放到 Python 腳本里Emacs 端用異步進(jìn)程調(diào)用腳本并通過自定義命令展示摘要、大綱和問答結(jié)果。整個過程不需要替換瀏覽器不需要額外安裝復(fù)雜的 Emacs 包成本低落地快。雖然示例中依賴 OpenAI 兼容 API但你可以很輕松地替換成其他模型服務(wù)只要接口兼容 chat/completions 格式即可。另外像 Karpathy 提出的 LLM Wiki 范式一樣真正有價值的不是一次摘要生成而是把 LLM 能力嵌入到日常記錄和閱讀循環(huán)里打開頁面、生成摘要、寫入筆記、定期回顧。這樣Emacs 就不再只是一個古老文本編輯器而是變成了一個帶 AI 閱讀助手的信息工作臺。如果這篇文章對你有幫助歡迎收藏備用。實踐過程中遇到問題可以從常見問題表開始排查也可以根據(jù)上面的思路繼續(xù)擴(kuò)展你自己的功能。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲乱色熟女一区| 国产精品视频在线播放| 大香蕉 222| 黄呦呦在线| 日韩国产九九精品一区二区三区毛片| 青青青草原| 久久久91| A片A5445444| 国产欧美一级在线观看| 亚洲人妻av| 亚洲情色1区| 九九九九精品一区| 白丝AV| 国产丝袜欧美在线视频| 超碰成人免费| 校园春色中文字幕AV| 91男人综合| 女性91网站| 乱伦1色页| 人妻少妇视频在线播放| 久久大陆| 亚欧美综合网。| 超碰色97| 国产成人一级av88| 91无人区卡一卡二卡三乱码入口最新版:能让用户有更多选择的选择-经典说说-爱 | 亚洲欧美经典一区二区 | 蜜区区视频79| 亚洲精品一区二区精品| 亚洲精品丝袜-不卡成人免费……| 九久9热| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 国产乱码精品一区二区三区四川| 国产玖玖| 亚洲综合色在线| 丰满人妻-区二区三区| 日本性爱视频一级| 色性欧美| 99精品综合久久久久五月天| 亚洲男人久久综合天堂| 国产乱码久久| 三四中文字幕| 首页中文字幕中文字幕免费| 天天摸夜夜摸| 欧美 亚洲| 中文字幕一区二区三区高清| 暖暖精品二区三区观看| 久热伊人| 久操操| 新精精品久久精品| 欧美成人A√在线一区二区| 色综合尤物| 夜草欧美| 男女做爰猛烈动高潮A片免费应用 少妇厨房愉情理伦片bd在线观看 不卡中文字幕aⅴ在线 | WWW啪啪的com| 久久久啊啊| 四虎影视国产精品| 岛国视频免费在线观看| 女生自91网站| 日韩成人无码| 91在线免费观看处女| 亚洲精品 欧美97色色| 一级黄色视频网| 曰韩精品九九无码| 怡红院久久老司机| 欧美成人黄网色网站| 97自拍一区| 最新亚洲黄色免费电影 | 天天躁狠狠躁av| 思思热在线视频在线| 首页亚洲国产高跟丝袜诱惑视频| 亚洲三级。日韩三级| 手机在线看片免费人成视频| 五月天亚洲网| 8050无码八戒| 91精品国产91久久久久久久久久久久| 国产精品自在线发布| 精品96久久| 亚洲av综合伊人久久| 日韩伦理久 久久 清纯| 亚洲精品九九九| 91美女丝袜诱惑视频| 国产一区二区在线看| 操我无码| 超碰97男女| 99无码视频| 96国产精品| 丁香五月综合| 亚洲精品乱码久久久久久蜜桃麻豆| 欧美极品| 国产精品久久久视频| 日本不卡五区| 91最新综合| 九九九精品| 99青草| 久久婷婷电影网| 国产免费大片| 操逼日批| 精国久久一区二区三区98| 综合久久久久久久综合网| 超碰97最新人妻| 色欲无码人妻日韩欧美精品| 96久久久精品| 欧美老妇曰批的视频| 嫩草影院永久在线制服丝袜| 韩国三级理论在线| 亚洲 日本 不卡| 99精品在线| 人妻夜夜爽天天爽三区麻豆AV网站| 殴美牲| 日韩啊V| 午夜精品久久久久| 九九综合久久| 色综合av综合久久| 日韩电影免费网站麻豆视频| 欧美嫩性色| 最新日日夜夜天天干干| 丝袜色综合| 久久久com| 91亚州| 中文字幕天天操| 国语av最新自产拍在线观看| 亚洲天天更新| 2017大香蕉国产精品久久| 91在线|亚| 一二三区视频在线观看| 久久综合久久综合人久久夜精品| 国产啊v在线免费播放| 999熟女精品| 五月天婷婷基地| 国产操逼网站亚洲一级黄色| 丁香婷婷激情五月天无毒不卡 | 婷婷丁香五月天综合东京热| 97chaopengongkai| 10000部十八禁看电影| 欧美日韩一区二区三区四区蜜桃| 又黄又硬又粗又长国产视频| 91欧美高清| 第四色奇米影视777| 四虎免费在线播放| 久久一区,青青青青草视频在线播放| 精品国产91av一区二区三区| 男人天堂毛片| 精品9区| a网站免费观看| 91综合熟女| 久久99精品国产| 丁香六月啪| 色操逼网| 国产97在线 | 亚洲| 午夜大香蕉| 自拍啪啪视频| 色欲久久99精品久久| 日本一区二区三区四区免费观看| 超碰久草| 嗯嗯啊啊用力视频免费| 日本大片日本一区二区免费高清| 岛国黄| 日本不卡在线二区三区| 97精品97久久| 97色论| 99热亚洲| 欧美人妻久久精品二区三区| av网站国产主播在线| 97操综合| 91久久堂| 国产有码一区| 精品一区二区啪啪啪| 郑州宾馆老熟女露脸啪啪| 欧美激情亚洲| 欧美色图下一页| 五月丁香啪啪啪| 亚欧洲一区二区视频| 欧美久久草熟女| 国产一区二区三区精品观看啪| 乱操乱伦AV| juliaann丝袜| 亚洲欧美在线丝袜| 亚洲图片视频小说| 大香蕉日亚洲日本亚大 | 97超碰国产亚洲精品| 久久內射| 亚码激情| 日本高清一区二区在线| 日本国产亚洲一区在线观看| 日骚逼视频| 职场同事知名国产国产精品久久欧美日韩| 二三四区精品| 国产传媒美日韩av| 青青草在线成人视频| 亚洲精品三| 户外裸露刺激视频第一区| 亚洲日韩精品久久久久一区壹牛| 91少妇人妻| 欧美一级二级三级| 欧美九九九| 欧美综合在线第一页| 欧美影音在线| 色香综合天天影视综合 | 4141514逼喷水三级片| 激情综合五月丁香| 免费在线观看AV无码网站| 大香蕉一区二区在线观看.| 蜜臀99久| 777超碰| 男人的天堂VA| 天堂综合网| 五十路熟女,国产欧美精品区一区二区三区| 亚洲日韩少妇一道本视频| 屌妞视频久久久久久久久久久久| 中文字幕精品乱码| 性爱AV天堂| 综合97亚洲| 精品999日本| 亚州色图欧美| 97欧美色资源| 精品中文日韩字幕视频| 韩国毛片一区二区三区| 91中出在线| 日本黄色天堂| 欧美性综合| 国产午夜福利合集| 欧洲精品二区| 久久久久亚洲Av无码专区老牛影视| 欧美天天综合在线| 欧洲精品一级二级精品综合视频综合| 久久一二三四| 八戒午夜福利理论片| 内射小黄片| 欧美乱伦专区| 婷婷丁香九月| 欧美一区二区观看在线| 国产激情久久久| 国产精品91ai| 精品少妇一区二区三区免费观看| 午夜天天碰综合视频| 射丝袜高跟鞋99| 一二三四免费视频| 91丝袜美女| 操美女人妻| 日日夜夜青青草母狗| 亚洲诱惑| 大香蕉草草| 久久精品国产亚洲AV清纯| 男女一进一出视频久久| 亚洲激情综合另类男同| 国产亚洲日本精品在线| 男人的天堂2010| 亚洲永久AV无码精品秋霞| 九九九九一级| 国产一区在线播放| 欧美另类综合久久| 亚洲精品成人激情在线| 久久久草成人网站久久久草成人久久久草久久久 | 亚洲无码久久久久久久| 六月激情婷婷| 少妇高潮99p| 精品一区二区三区四区女| 日本五十路在线| av影片在线观看不卡| 97干在线视频| 操逼逼中文字幕| 天天干,天天日| 国产久久日韩网站导航| 91白虎| 欧美大香蕉久| 丁香五月天激情| 超碰 另类 欧美| 亚洲精品黑丝| 久久 国产 无码| 日韩黄色一区二区三区| 国产视频一区二区在线| 97视频在线免费播放| 伊人性在线视频| 精品欧美不卡在线播放| 久9视频| 九九热超碰97亚洲最新香蕉| 中文字幕激情小说| 91九色蝌蚪在线观看| 亚洲激情综合| 无码久| 淫荡网址| 国语对白在线播放视频| 天堂国产AV| 揉揉揉夜夜| 亚洲视频1区| 色综合九九| 99精品网站| 九九九九九精品视频| 日韩乱伦影音先锋| 97天天插| 操熟女91| 在线观看无码三级少妇| 大奶啊啊好爽| 941超碰| 伊人网免费视频| 国产99热| 欧美白嫩在线放| 国产女人视频三四五区| 丰满人妻大屁一区二区| 国产一区二区三区,在线观看观看| 久久久久久久久一区二区三区| 国产在线强奸视频| 久操综合在线| 亚洲高清欧美总合| 日本午夜精品理论片A级APP发布| 欧美 熟女 日韩| 尤物av网站免费在线播放| 超碰99在线| 91亚洲丝袜熟女| 日韩 欧美 视频 在线 一区| 日韩精品9999| 一区二区三区免费视频入口 | 中日992视频| 国产精品视频麻豆入口| 岛国人妻少妇av在线观看| 黄页av| 91精品91久久久中77777| 亚洲97P| 日韩性爱小视频| 亚洲,欧美,春色,另类| 97资源站日韩| 日本三级中国三级99人妇网站| julia ann久久| 国产精品一二三在线看| 曰韩少妇无码| 人妻中文字幕日韩电影| 中文字幕片| 日韩性爱啪啪视频| 夜夜嗨av午夜成人| 亚洲熟女乱色一区二区三区| 色天使大香蕉| 免费一级精品啪啪视频| 蘋果手機免費看成人Av| 在线人人人人人人精品超| 天美国产三级传媒| 亚洲网站一区二区在线| 九X超碰| 人妻干天天| 91成人在线| 中字幕人妻一区二区三区| 亚洲乱色视频一区、二区在线| 97在线观看免费视频| 国产农村妇女一区二区| 欧美影院一区二区三区| 国产肏屁眼视频| 日韩精品人妻一| 1024午夜激情男人的天堂| 日本操逼视频导航| 国产久久天堂资源| 午夜呻吟欧美| 国产精品免费日韩| 欧美综合传媒| 日日日日日| 操一操摸一摸| 日韩啪啪啪视频| 国产精品岛国片在线观看| 亚州伊人色综台| 精品一区99999| 男人的天堂一区三区| 久夜操| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 9999伦理视频| 亚洲精品无码久久AV| 98福利在线视频| 亚洲精品日韩国产欧美| 超碰97国产欧美| 日本有码影片下载| 久久无码一区二区二三区性色| 日本一区二区三区精品| 一级人妻性爱视频| 亚洲骚男同com| 69精品人人人人| 黄色视频高清无码网站| 久久9精品网站| 亚洲黑丝在线| 啪啪啪东京| 青青草华人在线欧美在线| 亚射在线| 欧美一区二区三区四区综合| 午夜视频久久久| 精品亚洲国产成人AV制服丝袜| 极品肉射| 亚洲色图欧美色图制服诱惑| 99九九久久| 蜜乳AV免费观看| 美国三级日本三级久久99| 国内自拍 日韩激情 99| 国语对白露脸XXXXXX| 国产精品不卡一区二区三区| 国产AV高清AV无码| 大香蕉乱级| 舔人妻中文免费视频| 不卡超碰护士AV在线免费播放| 久久精品日韩| 深夜激情| 先锋音影AV| 嗯啊不要在线观看嗯啊| 免费伦费视频在线观看| 东京热大香蕉| 久久久国产精品亚洲精品| 91丝袜美女国产| 亚洲小电影免费涩涩成人在线高清| 天天性射网| 无码一区二区三区四区五区六区七区八区九区十区视频 | 日日爽夜夜爽| 亚洲制服aⅴ中文字幕| 日本加勒比无码专区| 欧美国产有色电影| 97视频观看| 91精品久久综合熟女| 色色色日本| 亚洲情色综合网| 五月综合激情| 久久av一级av少妇av高潮 | 99热线麻豆| 亚洲天堂另类小说男人| 中文字幕精品一区二区精品| 人妻久久久| 啪啪啪综合网| 综合网少妇| 青青伊人加勒比海| 久久欧美按摩999| 国产AV高清AV无码| 国产第25页在线观看| 男女啪啪网站免费视频| 午夜爽爽爽| 亚洲欧洲综合| 亚洲欧美变态| 51一区二区三区| 97资源免费视频| 丝袜无码a片| 四虎影视在线| 国产精品一二三免费网站| 国产99久久99热这里只有精品15 | 男人的天堂va在线| 死我十八禁| 91欧美另类| 校园春色欧美色图| 色综合98| 精品v日韩欧美国产| 久草视频观看视频在线| 亚洲在线网站| 日本一级真人黄色性爱视频| 国产91 丝袜在线播放00-百度| 精品二区三四区五电影 | 无码精品久久久久久亚洲| 97se亚洲综合自| 999九九九九国产动| 中文字幕精品久久久久人妻红杏ⅰ| 久久久久久中文字幕中文字幕最新| 9色在线| 日本 欧美 国产一区| 国产精品自拍xxxx| 国语国产操逼伊人AV网| 乱伦a片视频| 国产黄色剧情影片麻豆免费播放| 91性色| 精品美女少妇一区二区| 国产97在线播放| 久热99999| 九九九精品一区二区无码| 超碰碰激情97+久| 伊人aaa| 丰满丝袜少妇AV| 超碰99在线| 东京热不卡视频| 性性久久| 一区二区亚州激情久婷婷欧美| 亚洲综合校园春色| 综合激情一一91| 国产亚热在线久久| 黄色交缠性感爆操91国产精品免费一区二区三区| 国产精品久久久久久9999| 蜜桃视频啊啊啊啊| 久草毛片| 国产精品久久蜜乳av| 亚洲无码日韩电影| 成年人网站在线免费观看| 日本黄大片在线观看视频| 日韩在线欧美精品一区二区| 国产精品一区午夜福利| 国产一级黄色片在线观看| 日本肏逼视频在线观看| 九九久久九九久久| 日韩精品高清资源在线| 91色图片| 久久超碰av在线| 欧亚 另类 久| 加勒比综合88| 超碰78| 亚洲图片激情综合另类| 亚洲国产日韩欧美熟妇在线| 综合色播| 操我啊啊啊啊啊| 国产精品午夜福利视频| 激情小说亚洲图片| 97超碰超碰| 亚洲欧美精品国产一区二区| 特级丰满少妇一级AAAA爱毛片| 色播五月婷婷| 亚洲色9| 蜜臀久久99'精品久久久| 97久久精品不卡| 欧美综合91| 国产一级内射无挡观看| 99热最新网址| 99操| 亚91网| 欧美黑人熟妇精品91| 天天夜躁日日躁狠狠2002| 亚洲图片欧洲图片aⅴ| 五月天婷婷影院| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 夫妻四区五区六区| 亚洲第二页| 亚洲麻豆av一区二区| 国产福利小视频高清在线观看| 亚洲无码色| 色色综合97| 欧美日韩狠狠爱| 亚欧免费| 亚洲综合97中文网| 久久久久久中文| 午夜性生活av免费在线看| 日本人人操人人操| 国产精品 午夜福利| 日夜久久久九九九久| 久9久精品视频| 91成人无码| 欧美日韩国产色图在线| 超碰 av 女人天堂| 一区二区三区不卡视频| 亚洲国产午夜真人一级片中文字幕精品黄网站 | 欧美激情一| 伊人专区一区二区三区| 久久99视频| 色 亚洲 91| 欧美91在线| 中国探花熟女| 免费超碰97久久| 国产精品内射婷婷一级二| 亚洲成人久久美女| 99热日| 老熟女乱伦一区| 天天色悠悠激情| 欧美 传媒 麻豆 日韩 偷拍| 男人天堂2019| 欧美视频在线视频免费va| 老司机久久| 欧美极品美女aaaaaa级黄片| 欧美 亚洲 综合 制服| 白嫩妹子国产骚| 久久精品国产亚洲AV清纯| 激情五月天色色| 国产风韵犹存熟妇三区| 青椒国产97在线熟女| 亚洲情色五月天 | 日本超碰在线国产一区| 99视频自拍区| 3p国产欧美99热| 欧美一品道| 强奸乱伦亚洲第一页| 裸模AV女优| 黄片视频观看| 91女人的网站| 国产偷人伦激情在线观看| 久久东京国产精品视频| 死我十八禁| 全球成人中文在线| 中文字幕午夜精品久久久| 亚洲毛片一级带毛片基地| 国内97干免费看| 欧美特大AA级黄片| 成人熟女区| 国产精品久久久久久照片| 精品国产99| 无码操逼网| 男人的天堂在线2| 无码天堂| 欧美精品91| 秋霞Av理论一级在线| 亚洲天堂男人在线| 97在线观看| 四虎影视在线| ji熟女.com| 老鸭窝黄色视频网站| 精品九九国产无码| 99re在线视频这里只有精品| 国产精品久久久三级无码| 久久99久久99精品天美传媒棢·纸:.| 久久人人看| 日韩精品-原创伙伴| 色噜噜综合在线| 亚洲九九九| 伊人成人情色综合| 亚洲无线码欧洲精品区别| 天操老女人| 国产又色又粗又黄又爽| 午夜福利在线合集| 大香蕉乱伦视频网| 中国特猛少妇色xxx| 九九九网页| 国内精品a| 亚洲天天影视色综合| 欧美疯狂做爰xxxx| 青草精品视频-日本久久久久网站| 久久久九97| 婷婷av在线中文字幕| 熟女色图在线| 操逼逼中文字幕| 伊人宅男大香蕉 | 久久这里只精品| 久久鲁夜| 国产丝袜美女在线一区| 嗯,啊。舔我逼| 二色av| 久久久亚洲熟妇熟女| 欧美精品91| 中文字幕成人理论在线| 99re视频这里只有精品| 97青娱乐超碰久久| 9999免费精彩视频| 日韩性爱长视频免费| 另类 综合 日韩 欧美 亚洲| 久久久成人国产精品无码| 天美麻豆一区二区三区| 色一射色一射| 亚洲午夜福利在线影院| 亚洲资源吧| 特级大荫道BBwBBwBBW| 国产亚洲日本精品在线| 中文字幕第二页| 色999偷自拍拍| 欧美v亚洲v日韩v最新在线二区 | 日韩黄色av中文字幕| 精品视频一区二区| 免费农村成人少妇人妻Aa一区二区视频 | 国产v亚洲v日韩v欧美v片另类| 动漫av中文| 天天流夜夜操| 日本操大逼| 97久久国产| 日本欧美m v精品网站加| 六月婷婷综合| 中文字幕一区二区在线日韩精品| 亚洲开心网| 亚洲素人网| 色综合美国| 精品一二三区久久AAA片| 超碰精品97| 国产乱弄免费在线视频。| 在线另类| 嗯嗯啊啊啊好爽| 96久久久精品| 97硬碰| 在线观看av区| 午夜.DJ高清在线观看免费7| 国产熟女精品一区二区| 欧美日韩国产人人| 小草精彩毛片| 五月大香蕉| 久久久久久网址| 秘书高跟黑色丝袜国产91在线| 先锋音影AV| 国产乱码久久| 欧美性爱另类综合| 亚洲第2页| 亚洲 欧美 制服 另类 自拍| 九九九九久久久久| 久久线上视频免费看| 美女91av| 日本人妻天堂网站在线播放| 区一在线观看| 欧美黑人猛交春色影视大全| 亚洲综合色婷婷| 精品一区二区人妖| 久久久久亚洲?V片无码V| 偷拍偷窥与盗摄视频专区| 91爱| 日韩有码专区| 人妻夜爽夜夜爽| 久久华人网| 日本黄色天堂| 韩日巨乳美女免费视频在线观看| 91美女在线视频| 国产大片精久久久久久| 情侣开房子拍 日韩无码 女的很漂亮| 色色色欧美| 97香蕉碰碰人妻国产欧美| 岛国在线国产| 亚洲av无码国产精品字幕| 日本视频在线中文字幕| 天天干夜夜鈤| 天堂亚洲精品| 99少妇| 97色操| 欧美日本视频一区| 熟女熟妇伦久久影院毛片一区二区| 久久久男人的天堂| 97精品国产手机| 人妻少妇精品久久久| 无卡一区=区| 九九九久千久久激情蜜桃在线看| 97爱爱爱综合| 九月丁香婷婷| 日本一二区免费| 亚洲AO在线| 综合日韩激情另类图片| 久久综合久久综合人久久夜精品| 久久日韩毛| 中文字幕国产精品1区| 精品熟女一区=区三区| 大香蕉在线视频15| 内射中出日韩在线观看视频| 成人精品视频一区二区| 亚洲限制级在线| 熟女欧美日韩综合婷婷| 少妇内射www在线观看视频| 99久热精品99re6热| 丝袜高跟澳门91视频| 9.1小视频| 亚州欧美总和| 国产精品69久久久久久久| 亚洲精品熟妇1区2区3区。| 亚洲资源吧| 女优大全 - 91n| 91肉片| 日韩欧美午夜一区二区| 免费观看国产不卡av| 强奸乱伦动态污图免费| 99无码精品| 国产日本熟女顶级一区二区三区视频 | 久久久久久久伊人精品| 国产91精品福利在线| 日韩在线观看中文字幕视频| 欧美操人| 丝袜性亚洲| 91成人久久| 国产丝袜一区二区三区| 亚洲男人天堂手机版| 中文一区二区三区影院| 强被迫伦姧在线观看无码网站| 少妇一区二区三区高速| 强奸乱伦αv片| 亚洲欧美精品一区天堂久久 | 91综合天天看| 黑人娇小av在线播放| 日本成人免费一区二区三区| 91社操逼| 青草视频在线看看看看看看看看看| 人人爽夜夜操| 国产诱惑| 欧美狠狠| 国产第25页在线观看| 国产免费一区二区在线A片视频| 亚洲天堂区| 超碰在线97国产| 999久久芭蕾| 青女偷拍网| 亚洲中文字幕av| 国产在线综合福利网站| 欧美大香蕉专区网| 天天日天天舔| 男人精品天堂一区| 91精品人妻一区二区三区蜜桃| 伊人五月天婷婷| 亚洲欧美日韩夜夜| 丰满翘臀美女影院视频| 亚洲怡春院| 97色网| 超碰人人超在线观看| 性色乱AV一区二区| 日韩欧美资源| 偷拍亚洲| 人人爱人人操人人性| 美女露胸露屁股| 亚洲 欧美 综合 91| 不卡在线观看视频| 粉嫩av在线一区二区| 国产成人资源| 婷婷五月天色网| 欧美日韩在线视频网站| 立川理惠无码一区二区| 精品国产一区二区三区久久久蜜臀| 97操综合| 亚洲无码国产精品久久| 色色热| 性九九九九九九| TS人妖另类精品视频系列| 91GD.COM| 日韩啪啪啪视频| 五月情色天| 操我无码| 久久久久ab| 国产一级内射高清视频| 中文字幕 国产 精品| 目产99999久久999| 啊啊啊啊啊在线| 视频分类 国内精品| 欧美日本天堂| 亚洲欧美综合| 中文字幕黄色片| 美日韩一二三区| 国产高清26uuu| 国产成人无码高清| 国产五码丝袜屁眼| 日韩性爱啪啪视频| 人妻少妇色综合| 999九九九九国产动| 欧美偷拍区| xxx亚洲午夜天堂| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 欧美体内射精| 日韩无码a片| 久久久久久久久久久97| 亚洲欧美综合网 | 狠插 制服 自拍| 2017亚洲天堂| 五月色丁香| 欧美综合色| 丰满高潮18xxxx| 2026国产精品视频| 欧美一二三级精品在线| 亚洲国产综合久久久性感熟妇| 午夜九九九九九九| 懂色av色欲av蜜臀av| 亚洲熟女综合| 亚洲区 欧美区| 久久久夜夜嗨免费视频| 肉丝中文无码高清| 中文字幕精品资源在线| 亚州欧美综合| 国产精品久久久久久久毛片1| 欧美乱妇狂野欧美在线视频| 91午夜无码| 久久久国产精品人妻丝袜| 新亚洲无码| 有码免费观看| 四虎午夜影院| 78p欧美| 色视频蜜乳| 91高跟美女在线播放| 日韩欧洲操屄视频| 国内操逼视频二区| 日本狂喷奶水在线播放212| 亚洲素人网| 亚州免费啪啪视频| 久久久久ab| 日韩 欧美 视频 在线 一区| 色五月激情AV在线| 久久精品国产亚洲AV片多多| 欧洲自拍色图gif在线| 国产精品久久久久中文字幕| 欧美玖玖爱免费玖玖| 国产操操日韩三级黄| 九草九九九| 成人看片网站| 97欧美综合| 日本天天吊| 久久无码一区二区二三区性色| 超碰天天操你比| 国产亚洲精品美女久久久久久2021| 色www精品视频在线观看| 黄色大香焦1级‘′‘| 国产91丝袜 在线播放| 99国内精品| 日韩无码第3页| 爱爱60秒免费视频| 影音先锋每日最新资源在线观看 | 欧洲熟妇xxXx欧美老妇裸体| 中韩中文字幕在线观看| 亚州宗合另类| 伊人一区二区在线播放| 91青青在线视频| 99久久网站| 一区二区乱码福利| 国产精品视频在线播放| 亚洲精品日韩国产欧美| 99热婷婷一区二区三| 男人的天堂激情| 激情小说成人日本无码一| 黄色一区三区| 激情五月天色色| 欧差乱伦二三| 91处女在线视频| 深爱五月婷婷| 日本熟女不卡视频| 欧美日本视频一区| 青青爽| 国产h片在线观看视频| 欧洲色综合| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 欧美在线视频观看一二三四区高清 | 午夜男女爽爽爽影院视频| 日产成人久久| 亚洲精品久| 操逼视频亚洲| 欧州91高潮| 麻豆传媒一区二区在线观看| 大香蕉宗合网在线| 亚洲色色探花| 午夜一区| 国产视频第2页| 国产精品麻豆成人AV艾秋| 亚洲国产欧美另类自拍| 欧美熟妇色| 欧美伦乱爱| 欧美日不卡| 乱伦av.com| 国产熟女精品一区二区| 日韩淫色网| 啪啪91| 91狼人| AV乱伦专区| 久久久9999| 天天日日本| 色丁香久久| 国产亚洲精品A在线观看下载| 国产精品午夜精品| 91色爽欧美| www.色五月| 精品成人动漫一区二区| 97天天| 国产日韩中文字幕欧美| 久久超碰免费的| 99色在线观看| 国产精品熟女九色九色蜜臀| 91美女在线观看| 女同性恋中文字幕| 午夜精品久久久久久久男人的天堂| 一类av片在线看| 国产精品免费久久久久久久久久| 国产午夜福利合集| 九九九九日本 | 久久九操在线观看| 精品一区二区三区蜜桃臀赵总| 一区二区三区四区免费视频| 日韩欧美午夜一区二区| 夜夜骑夜夜操| 精品在线78| 日韩精品9区| 精品十三区| 欧美人妻精品| 亚州AV无码国产精品| 综合激情二| 91无遮挡| 91 丝袜在线播放| 97亚洲综合在线| 亚洲清纯唯美| 一本久久精品中文字| 国产专区路线| 啊a一区在线| 天天做天天爽| 91久久99久久91熟女精品| 国产1769在线| a v网站在线播放| 97碰久久| 成人性交午夜免费片| 深夜激情 | 影音先锋乱| 国产AV精久久| 思思视频免费看网站| 人妻色偷色噜| 亚洲无992tv| 亚洲欧美首页| 91精品人妻一品二品三品| 高清无码学生妹高潮| 99福利社| 51一区二区三区| 色阁阁AV综合网| 夜草欧美| 老司机免费视频在线91| 国产精品在线网站| 天天弄欧美| 九九热九九热| 天天摸天天插天天日| 伊色综合天堂色97| 久久精品熟妇丰满人妻99| 亚洲综合婷婷| 色色五月婷婷| 夂久色| 亚洲18禁| 91人妻人人妻| 天天肏美女| 精品久久久久9999| 91色黑人少妇| 美女大乳久久久久久久女人18| 蜜臀av一区二区三区免费观看| 防屏蔽在线视频| 97香焦色区| 在线天堂999| 性色高清在线| 国产盗摄美女如厕大神作品在线观看| 人人妻人人色| 少妇色综合| 吊色| 日本三级韩国三级美三级91| 久久视频,这里只有精品| 密臀国产在线| 日韩成人人妻网站| 日韩内| 色综91| 成人26uuu| 综合欧美激情网| 欧美日韩岛国大片在线观看| 五月婷婷无码| 日本超碰在线国产一区| 三级片大波波| 久久久久9999精品九九九| 激情小说亚洲视频| AV男人天堂网| 色综合91好| 亚洲国产精品成人综合| 精品无码不卡视频| 高清国产av无码| 精品 码产区一区二-1080P高清在线www-B029AV| 亚洲日本韩国极品一区二区| 91天堂视频| 麻豆天美在线喷水AV| 高颜值美女口爆高潮浪叫| 天天cao在线| 韩三级a视频在线观看| 美女操逼福利视频| 90后性网国产欧美| 天美av在线观看| 欧美 青青草| 欧美日韩97在线| 91视频在线观看18| 久久精品国产AV一区二区三区| 91艹B视频| 中文字幕av亚洲在线| 亚洲操操操| 麻豆九九九| 人人操人人精品影片| 一区二区影视| av天堂天堂av日韩| 婷婷精品| juliaann丝袜大战黑鬼| 精品少妇高潮久久| 国产精品ww久久| 亚洲欧洲日韩国产自在线| 色妺妺在线视频| 久操网在线| 天天网综合| 中文字幕一区二区三区高清| 天天干,夜夜爽| 九九九影院| 亚洲风情综合网| 2025年A片视频精品| 91精品伊人久久久大香线蕉91| 性欧美另类高清| 狠狠爱夜夜干| 搡老熟女免费视频| 日韩性爱小视频在线观看| 香蕉在线一区二区三区| 91AV天美在线视频| 久久精品一区二区三区四区五区| 久久久亚洲欧美综合| 2011国产精品| 中文字幕诱惑制服人妻丝袜美丝袜美 | 精品久久久久瑟瑟| 人妻少妇无码 | 极品少妇99| 色香欲综合| 91操人| 午夜福利久久久噜久噜久久综合 | 操逼天美3区| 91蜜臀在线久久久久| 久久是精品| 日韩强奸av| 五月丁香综合| 九九人妻| 国产日韩欧美中文在线播放| 国产欧美日韩女同性恋ww喷水精品 | 色婷婷综合久久久久中文一区二区 | 97资源超碰| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 97碰碰日本乱偷人妻中文的| 久久免费少妇| 日韩啪啪视频| 日韩精品影视| 日婷婷| 97超碰色五月| 欧美姓爱综合网| 丰满人妻大屁一区二区| 青青草字幕AV| 无码精品久久久久久亚洲| 婷婷综合五月天| 国产熟码AV| 国产精品成人福利在线| 九九成人精品| 91欧洲国产成人久久精品网站| 337p大胆噜噜噜噜噜91Av| 男人的天堂久久狠| 日韩av不卡在线看| 亚洲妇色| 日韩熟女三十乱伦| 中文字幕五区| JuliaAnnXXX888| 极品色www影院| 操死我了啊啊啊| 黄色AAAAA欧美| 精品久久久中文字幕不| 婷婷爽人人婷婷爽视频| 色五月婷婷在线| 噜噜噜噜天天狠狠| 1769精品一区二区三区| 中文在线视频| jk白丝没脱就开始啪啪| 丰满精品人妻少妇久久字幕| 成人免费毛片| 亚洲日韩青青草色月| 岛国爱情动作片在国产AV无码专区亚洲AV漫画| 任你草| 精品少妇高潮久久| 日韩中文字幕二区| 久久久久久人| 九九热九九| 九九九成人| www.夜夜操| 深喉吞精| 五月婷婷综合网| 91欧美网| 九色97| 日本一区二区中文字幕久久| 国内精品久久人妻性色av| 97青青操视频| 国产毛片片精品天天看视频| 91N欧美| 五月天亚洲色图| 色色色色色色色色色色色色色色综合 | 亚洲熟妇白浆无码AV| 高清国产av无码| 91精品国产长腿丝袜美女| 欧美精品久久久久久久久88| 熟妇高潮二区三区| 巨爆乳肉感一区二区三区竹菊影视| 囯产操逼片| 久久久久性熟视频| 东北少妇高潮zzzz| 天天香香欲综合| 中文字幕,人妻,日韩| 青青草原综合久久大伊人精品| 国产精品久久久吖| 国产精品熟女九九九| 欧美性爱中文字幕无线码| 狠狠爱夜夜干| 国产又爽又黄| 亚洲欧美91| 97天天摸天天碰| 国产精品福利资源在线尤物| 午夜精品久久久99| 综合免费无码中文| 超碰色美女| 在线另类| 干少妇视频| 蜜臀人妻少妇久久在线观看| 亚洲国产成人福利在线观看| 日本 情色 1区2区3区| 亚洲综合激情五月久久|