精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

TypeScript版LlamaIndex來襲!用Agentic RAG構建智能AI代理,效率與隱私雙提升! 原創

發布于 2025-4-7 09:45
瀏覽
0收藏

TypeScript版LlamaIndex來襲!用Agentic RAG構建智能AI代理,效率與隱私雙提升!-AI.x社區

想象一下,有一個私人研究助手不僅能理解你的問題,還能智能地決定如何找到答案。對于某些問題,它會深入你的文檔庫中查找答案,而對于其他問題,它則會生成富有創意的回應。這聽起來是不是很酷?其實,這一切都可以通過使用 Agentic RAG(檢索增強型生成) 和 LlamaIndex TypeScript 系統來實現。

無論你是想創建一個文獻分析系統、技術文檔助手,還是任何知識密集型應用,本文介紹的方法都將為你提供一個實用的基礎框架。接下來,我們將通過一個實際的動手項目,帶你一步步構建這樣一個系統,從設置本地模型到實現專門的工具,最終交付令人驚嘆的結果。

為什么選擇 TypeScript?

TypeScript 是一種強大的編程語言,它為構建基于 LLM(大型語言模型)的 AI 應用提供了諸多優勢:

  • 類型安全:TypeScript 的靜態類型檢查可以在開發過程中捕捉錯誤,而不是等到運行時才發現。
  • 更好的 IDE 支持:自動補全和智能提示讓開發過程更快捷。
  • 提高可維護性:類型定義讓代碼更易讀,也更具自文檔性。
  • 無縫 JavaScript 集成:TypeScript 可以與現有的 JavaScript 庫無縫對接。
  • 可擴展性:隨著你的 RAG 應用不斷擴展,TypeScript 的結構化特性有助于管理復雜性。
  • 框架支持:Vite、NextJS 等強大的 Web 框架與 TypeScript 無縫連接,讓構建基于 AI 的 Web 應用變得輕松且可擴展。

LlamaIndex 的優勢

LlamaIndex 是一個強大的框架,用于構建基于 LLM 的 AI 應用。它提供了以下優勢:

  • 簡化數據加載:通過 LlamaParse,可以輕松加載和處理本地或云端的文檔。
  • 向量存儲:內置支持嵌入和檢索語義信息,支持與 ChromaDB、Milvus、Weaviate 和 pgvector 等行業標準數據庫的集成。
  • 工具集成:可以創建和管理多個專業工具。
  • 代理插件:你可以輕松構建或插入第三方代理。
  • 查詢引擎靈活性:可以根據不同的用例定制查詢處理。
  • 持久化支持:可以保存和加載索引,提高重復使用的效率。

什么是 Agentic RAG?

TypeScript版LlamaIndex來襲!用Agentic RAG構建智能AI代理,效率與隱私雙提升!-AI.x社區

在深入實現之前,我們先來了解一下 Agentic RAG 是什么。RAG(檢索增強型生成)是一種技術,通過從知識庫中檢索相關信息來增強語言模型的輸出,然后利用這些信息生成更準確、更符合事實的回應。而 Agentic 系統則涉及 AI 根據用戶查詢決定采取哪些行動,有效地作為一個智能助手,選擇合適的工具來滿足請求。

Agentic RAG 系統結合了這兩種方法,創建了一個既能從知識庫中檢索信息,又能根據需要使用其他工具的 AI 助手。根據用戶問題的性質,它會決定是使用內置知識、查詢向量數據庫,還是調用外部工具。

開發環境搭建

安裝 Node.js

在 Windows 上安裝 Node.js 的步驟如下:

# 下載并安裝 fnm
winget install Schniz.fnm

# 下載并安裝 Node.js
fnm install 22

# 驗證 Node.js 版本
node -v # 應輸出 "v22.14.0"

# 驗證 npm 版本
npm -v # 應輸出 "10.9.2"

其他系統可以參考 官方文檔。

從簡單數學代理開始

讓我們先從一個簡單的數學代理開始,了解 LlamaIndex TypeScript API 的基本用法。

第一步:設置工作環境

創建一個新目錄,進入該目錄并初始化一個 Node.js 項目,安裝必要的依賴:

$ md simple-agent
$ cd simple-agent
$ npm init
$ npm install llamaindex @llamaindex/ollama

我們將為數學代理創建兩個工具:

  • 一個加法工具,用于計算兩個數字的和。
  • 一個除法工具,用于計算兩個數字的商。

第二步:導入必要的模塊

在你的腳本中添加以下導入:

import { agent, Settings, tool } from "llamaindex";
import { z } from "zod";
import { Ollama, OllamaEmbedding } from "@llamaindex/ollama";

第三步:創建 Ollama 模型實例

實例化 Llama 模型:

const llama3 = new Ollama({
  model: "llama3.2:1b",
});

現在,你可以通過 ??Settings?? 直接為系統設置主模型,或者在代理中直接使用不同的模型。

Settings.llm = llama3;

第四步:創建數學代理工具

創建加法和除法工具:

const addNumbers = tool({
  name: "SumNumbers",
  description: "使用此函數計算兩個數字的和",
  parameters: z.object({
    a: z.number().describe("第一個數字"),
    b: z.number().describe("第二個數字"),
  }),
  execute: ({ a, b }: { a: number; b: number }) => `${a + b}`,
});

這里我們使用了 Zod 庫來驗證工具的參數。同樣地,我們創建一個除法工具:

const divideNumbers = tool({
  name: "divideNumber",
  description: "使用此函數計算兩個數字的商",
  parameters: z.object({
    a: z.number().describe("被除數"),
    b: z.number().describe("除數"),
  }),
  execute: ({ a, b }: { a: number; b: number }) => `${a / b}`,
});

第五步:創建數學代理

在主函數中,我們創建一個數學代理,使用這些工具進行計算:

async function main(query: string) {
const mathAgent = agent({
    tools: [addNumbers, divideNumbers],
    llm: llama3,
    verbose: false,
  });

const response = await mathAgent.run(query);
console.log(response.data);
}

// 驅動代碼,運行應用
const query = "Add two number 5 and 7 and divide by 2";
void main(query).then(() => {
console.log("Done");
});

如果你直接通過 ??Settings??? 設置 LLM,那么你不需要在代理中顯式指定 LLM 參數。如果你希望為不同的代理使用不同的模型,那么必須顯式指定 ??llm?? 參數。

運行這段代碼后,你將得到如下輸出:

TypeScript版LlamaIndex來襲!用Agentic RAG構建智能AI代理,效率與隱私雙提升!-AI.x社區

接下來,我們嘗試一個更復雜的查詢:

const query = "If the total number of boys in a class is 50 and girls is 30, what is the total number of students in the class?";
void main(query).then(() => {
  console.log("Done");
});

輸出:

TypeScript版LlamaIndex來襲!用Agentic RAG構建智能AI代理,效率與隱私雙提升!-AI.x社區

哇,我們的小 Llama3.2 1B 模型表現得相當出色,能夠準確地處理代理任務并進行計算!現在,讓我們深入到項目的主體部分。

構建 Agentic RAG 應用

開發環境搭建

按照以下步驟設置開發環境:

$ md agentic-rag-app
$ cd agentic-rag-app
$ npm init
$ npm install llamaindex @llamaindex/ollama

同時,從 Ollama 中拉取必要的模型,例如 ??Llama3.2:1b??? 和 ??nomic-embed-text??。

在我們的應用中,我們將有四個模塊:

  • load-index:用于加載和索引文本文件。
  • query-paul:用于查詢 Paul Graham 的文章。
  • constant:用于存儲可重用的常量。
  • app:用于運行整個應用。

首先,創建 ??constant.ts??? 文件和 ??data?? 文件夾:

// constant.ts
const constant = {
  STORAGE_DIR: "./storage",
  DATA_FILE: "data/pual-essay.txt",
};

export default constant;

這是一個包含必要常量的對象,將在整個應用中多次使用。創建一個 ??data?? 文件夾,并將文本文件放入其中。你可以從 這里 下載數據源。

實現加載和索引模塊

TypeScript版LlamaIndex來襲!用Agentic RAG構建智能AI代理,效率與隱私雙提升!-AI.x社區

以下是加載和索引模塊的實現流程:

導入必要的包

import { Settings, storageContextFromDefaults } from "llamaindex";
import { Ollama, OllamaEmbedding } from "@llamaindex/ollama";
import { Document, VectorStoreIndex } from "llamaindex";
import fs from "fs/promises";
import constant from "./constant";

創建 Ollama 模型實例

const llama3 = new Ollama({
  model: "llama3.2:1b",
});

const nomic = new OllamaEmbedding({
  model: "nomic-embed-text",
});

設置系統模型

Settings.llm = llama3;
Settings.embedModel = nomic;

實現 ???indexAndStorage?? 函數

async function indexAndStorage() {
try {
    // 設置持久化存儲
    const storageContext = await storageContextFromDefaults({
      persistDir: constant.STORAGE_DIR,
    });

    // 加載文檔
    const essay = await fs.readFile(constant.DATA_FILE, "utf-8");
    constdocument = new Document({
      text: essay,
      id_: "essay",
    });

    // 創建并持久化索引
    await VectorStoreIndex.fromDocuments([document], {
      storageContext,
    });

    console.log("索引和嵌入文件已成功存儲!");
  } catch (error) {
    console.log("索引過程中發生錯誤:", error);
  }
}

這段代碼將創建一個持久化存儲空間,用于存儲索引和嵌入文件。然后,它將從項目的數據目錄中加載文本數據,并使用 LlamaIndex 的 ??Document??? 方法創建一個文檔對象。最后,它將使用 ??VectorStoreIndex?? 方法從該文檔創建一個向量索引。

導出函數

export default indexAndStorage;

實現查詢模塊

TypeScript版LlamaIndex來襲!用Agentic RAG構建智能AI代理,效率與隱私雙提升!-AI.x社區

接下來,我們實現查詢模塊。創建一個名為 ??query-paul.ts?? 的文件。

導入必要的包

import {
  Settings,
  storageContextFromDefaults,
  VectorStoreIndex,
} from "llamaindex";
import constant from "./constant";
import { Ollama, OllamaEmbedding } from "@llamaindex/ollama";
import { agent } from "llamaindex";

創建和設置模型

創建和設置模型的方式與前面相同。

實現 ???loadAndQuery?? 函數

async function loadAndQuery(query: string) {
try {
    // 從持久化存儲中加載索引
    const storageContext = await storageContextFromDefaults({
      persistDir: constant.STORAGE_DIR,
    });

    // 加載已有的索引
    const index = await VectorStoreIndex.init({ storageContext });

    // 創建檢索器和查詢引擎
    const retriever = index.asRetriever();
    const queryEngine = index.asQueryEngine({ retriever });

    const tools = [
      index.queryTool({
        metadata: {
          name: "paul_graham_essay_tool",
          description: `此工具可以回答有關 Paul Graham 文章的詳細問題。`,
        },
      }),
    ];
    const ragAgent = agent({ tools });

    // 查詢已索引的文章
    const response = await queryEngine.query({ query });
    let toolResponse = await ragAgent.run(query);

    console.log("響應:", response.message);
    console.log("工具響應:", toolResponse);
  } catch (error) {
    console.log("檢索過程中發生錯誤:", error);
  }
}

在這段代碼中,我們首先從 ??STORAGE_DIR??? 中加載存儲上下文,然后使用 ??VectorStoreIndex.init()??? 方法加載已索引的文件。加載完成后,我們創建一個檢索器和查詢引擎。接下來,我們創建一個工具,該工具可以從已索引的文件中回答問題,并將其添加到名為 ??ragAgent?? 的代理中。

然后,我們通過查詢引擎和代理分別查詢已索引的文章,并將響應輸出到終端。

導出函數

export default loadAndQuery;

實現 ???app.ts??

現在,我們將所有模塊整合到一個 ??app.ts?? 文件中,方便執行。

import indexAndStorage from"./load-index";
import loadAndQuery from"./query-paul";

function main(query: string) {
console.log("======================================");
console.log("正在索引數據....");
  indexAndStorage();
console.log("數據索引完成!");
console.log("請稍候,正在獲取響應或訂閱!");
  loadAndQuery(query);
}

const query = "什么是生活?";
main(query);

在這里,我們導入所有模塊,按順序執行它們,并運行應用。

運行應用

在終端中運行以下命令:

$ npx tsx ./app.ts

首次運行時,可能會發生以下幾件事:

  1. 它會提示你安裝??tsx??,請按照提示安裝。
  2. 它會根據你的系統性能花費一些時間來嵌入文檔(這是一次性的操作)。
  3. 最后,它會返回響應。

以下是首次運行的示例:

TypeScript版LlamaIndex來襲!用Agentic RAG構建智能AI代理,效率與隱私雙提升!-AI.x社區

沒有代理時,響應可能如下所示:

TypeScript版LlamaIndex來襲!用Agentic RAG構建智能AI代理,效率與隱私雙提升!-AI.x社區

使用代理時,響應可能如下所示:

TypeScript版LlamaIndex來襲!用Agentic RAG構建智能AI代理,效率與隱私雙提升!-AI.x社區

TypeScript版LlamaIndex來襲!用Agentic RAG構建智能AI代理,效率與隱私雙提升!-AI.x社區

今天的分享就到這里。希望這篇文章能幫助你了解 TypeScript 的工作流程。

項目代碼倉庫

你可以在 這里 找到完整的項目代碼。

總結

這是一個簡單但功能強大的 Agentic RAG Using LlamaIndex TypeScript 系統。通過這篇文章,我想讓你了解除了 Python 之外,還可以使用 TypeScript 來構建 Agentic RAG Using LlamaIndex TypeScript 或其他基于 LLM 的 AI 應用。Agentic RAG 系統是基本 RAG 實現的有力進化,能夠根據用戶查詢提供更智能、更靈活的響應。使用 LlamaIndex 和 TypeScript,你可以以類型安全、可維護的方式構建這樣的系統,并且它能夠很好地與 Web 應用生態系統集成。

關鍵要點

  • TypeScript + LlamaIndex為構建 RAG 系統提供了堅實的基礎。
  • 嵌入文件的持久化存儲提高了重復查詢的效率。
  • Agentic 方法根據查詢內容實現更智能的工具選擇。
  • 本地模型執行提供了隱私和成本優勢。
  • 專業工具可以針對不同領域的知識進行處理。
  • Agentic RAG Using LlamaIndex TypeScript通過啟用智能、動態的響應,增強了檢索增強型生成。

常見問題解答

Q1:如何擴展這個系統以處理多個文檔源?

A1:你可以修改索引函數,從多個文件或數據源加載文檔,并將一個文檔對象數組傳遞給 ??VectorStoreIndex?? 方法。

Q2:這種方法是否支持其他 LLM 提供商,而不僅僅是 Ollama?

A2:是的!LlamaIndex 支持多種 LLM 提供商,包括 OpenAI、Antropic 等。你可以將 Ollama 設置替換為任何支持的提供商。

Q3:如何提高特定領域問題的響應質量?

A3:可以考慮在特定領域數據上微調你的嵌入模型,或者實現自定義檢索策略,根據你的具體用例優先檢索某些文檔部分。

Q4:直接查詢和使用代理方法有什么區別?

A4:直接查詢只是檢索相關內容并生成響應,而代理方法首先決定哪個工具最適合查詢,可能會結合多個來源的信息,或者為不同類型的查詢使用專門的處理。

希望這篇文章能幫助你更好地理解和使用 TypeScript 和 LlamaIndex 構建智能應用!


本文轉載自公眾號Halo咯咯    作者:基咯咯

原文鏈接:??https://mp.weixin.qq.com/s/tOSntLc37ffZlvhoBrWmJg??


?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
收藏
回復
舉報
回復
相關推薦
日韩av免费在线观看| 在线观看亚洲一区| 国产精品污www一区二区三区| 国产精品成人网站| 6080成人| 色悠久久久久综合欧美99| 一区二区精品在线| 欧美自拍偷拍第一页| 免费欧美在线视频| 欧美激情久久久| 欧美日韩高清丝袜| 亚洲不卡视频| 欧美在线观看视频在线| 国产美女作爱全过程免费视频| 日本毛片在线观看| 久久99精品一区二区三区| 欧美激情性做爰免费视频| 亚洲av综合一区二区| 精品国产不卡一区二区| 色婷婷精品久久二区二区蜜臂av| 久久久久亚洲av无码专区喷水| 午夜小视频免费| 国产一区二区三区四区在线观看| 欧洲亚洲妇女av| 精品无码人妻一区二区三区品| 欧美中文一区二区| 日韩av中文字幕在线| 波多野结衣免费观看| 亚洲第一会所001| 午夜精品一区在线观看| 99re99热| 69视频在线| 99久久婷婷国产| 91视频99| 97人妻精品一区二区三区软件| 国产欧美日韩一区二区三区在线| 欧美精品在线免费观看| 成人三级视频在线观看| 成人影院在线| 亚洲人成电影网站色…| 国产乱了高清露脸对白| aiai久久| 日韩精品在线网站| 国产欧美精品一二三| 国产第一精品| 欧美在线观看禁18| 亚洲天堂网一区| 日本中文字幕一区二区| 一本久久a久久免费精品不卡| 黄色成人在线看| www欧美xxxx| 亚洲一卡二卡三卡四卡| 韩国无码av片在线观看网站| 成人福利在线观看视频| 欧美极品aⅴ影院| 日本一区视频在线观看| 国产精品久久久久久久龚玥菲| 91在线视频观看| 精品久久久久久一区| 欧美一区二区三区黄片 | 久久9精品区-无套内射无码| 91制片在线观看| 香蕉av福利精品导航 | 性欧美videos另类喷潮| 91精品国产91久久| 欧美一区二区三区四| 亚洲激情专区| 欧美一级高清免费| 天堂网中文字幕| 日韩成人免费在线| 国产精品夜色7777狼人| 夜夜爽8888| 国产一区二区三区综合| 超碰97在线资源| 日韩性xxxx| 久久久综合精品| 色一情一区二区三区四区| 91caoporm在线视频| 亚洲欧洲制服丝袜| 又大又硬又爽免费视频| 色在线免费观看| 在线观看不卡一区| 亚洲精品永久视频| 福利片在线一区二区| 亚洲精品一区久久久久久| 亚洲精品乱码久久久久久久久久久久| 大片网站久久| 欧美高清在线观看| 亚洲男人的天堂在线视频| 蜜桃视频第一区免费观看| 91人成网站www| 日韩一级片免费观看| 国产女人aaa级久久久级| 资源网第一页久久久| 爱情岛亚洲播放路线| 欧美无砖专区一中文字| 99riav国产精品视频| 视频国产一区| 久久韩剧网电视剧| 国产精品黄色网| 美国十次了思思久久精品导航 | 国产精品国产精品国产专区不片| 丰满女人性猛交| 免费h视频在线观看| 欧美日韩国产中文| 亚洲一区二区三区无码久久| 欧美韩日高清| 欧美在线视频网站| 国产手机av在线| 欧美激情在线看| 国产xxxx振车| 亚洲精品一区二区在线播放∴| 亚洲成人激情在线观看| 蜜桃视频最新网址| 亚洲免费综合| 成人动漫视频在线观看完整版| 九九热视频在线观看| 亚洲尤物在线视频观看| 日韩中文字幕a| 午夜欧洲一区| 久久久久久久91| 国产又粗又长又黄| 久久久99精品久久| 成人午夜免费在线| 国产一区二区三区免费在线| 一区二区三区回区在观看免费视频| 黄色一级视频在线观看| 精品一区二区三区免费| 欧美日韩在线一区二区三区| 成人影音在线| 日韩小视频在线观看专区| 久久精品国产亚洲AV成人婷婷| 99日韩精品| 国产精品一区二区免费看| 美女av在线播放| 欧美在线视频全部完| 国产精品无码网站| 尹人成人综合网| 成人黄视频免费| av中文字幕在线观看| 欧美伦理视频网站| 国产一二三av| 毛片av一区二区三区| 日本高清视频一区二区三区 | 懂色av一区二区三区| 95视频在线观看| 欧美日韩一区二区高清| 91视频免费在线| 成人免费看片| 日韩欧美一二三| 欧美色图亚洲天堂| 国产九色精品成人porny| 欧美日韩亚洲国产成人| 91嫩草国产线观看亚洲一区二区| 上原亚衣av一区二区三区| 看黄色一级大片| 欧美激情中文不卡| 岛国毛片在线播放| 欧美 日韩 国产一区二区在线视频| 91美女高潮出水| 尤物在线网址| 亚洲精品在线观看网站| 日韩精品视频播放| 91在线免费视频观看| 免费大片在线观看| 日韩在线观看| 91高跟黑色丝袜呻吟在线观看| 日本在线视频网址| 亚洲国产日韩欧美在线动漫| 久久久久黄色片| 91在线一区二区三区| aⅴ在线免费观看| 欧美亚洲高清| 91中文字幕在线观看| 美足av综合网| 亚洲美女精品成人在线视频| 亚洲中文字幕无码爆乳av| 国产精品久久久久久户外露出| 日韩av一卡二卡三卡| 国产伊人精品| 欧美一区二区三区电影在线观看| 成人免费视频观看| 欧美疯狂做受xxxx高潮| 视频一区二区三区在线看免费看 | 国产无套粉嫩白浆内谢的出处| 欧美日韩在线播放视频| 91免费视频网站| 欧美激情网站| 日韩最新免费不卡| 人妻91麻豆一区二区三区| 日本丰满少妇一区二区三区| 日韩在线不卡av| 不卡的av在线播放| wwwwwxxxx日本| 亚洲福利电影| 亚洲午夜精品国产| 久久视频在线观看| 国产欧美在线播放| 精品极品在线| 久久激情视频久久| 毛片免费在线观看| 精品精品欲导航| 精品国产青草久久久久96| 亚洲在线免费播放| 久久精品在线观看视频| 2020国产成人综合网| 欧洲在线免费视频| 日韩专区欧美专区| 久久艹国产精品| 久久人体视频| 另类视频在线观看+1080p| 麻豆精品一区| 国产精品视频一区国模私拍| 国产精品一品| 久久精品人人做人人爽| 牛牛影视精品影视| 精品国产三级电影在线观看| 亚洲视频一区二区三区四区| 日韩欧美在线观看视频| 久久免费精彩视频| 最新高清无码专区| 国产美女免费无遮挡| 成人福利在线看| 五月六月丁香婷婷| 精品一区二区三区香蕉蜜桃| av无码精品一区二区三区| 午夜性色一区二区三区免费视频| 亚洲精品欧洲精品| 国产成人手机高清在线观看网站| 国产精品区二区三区日本| 精品午夜视频| 成人在线一区二区| 日韩电影精品| 国产精品午夜视频| 97精品国产99久久久久久免费| 日本欧美在线视频| 天堂电影一区| 久久琪琪电影院| 黄污视频在线观看| 欧美人与性动交| 深夜国产在线播放| 久久伊人免费视频| www视频在线免费观看| 久久精品人人做人人爽| 欧美一区二区三区在线观看免费| 亚洲最大在线视频| а√天堂中文在线资源bt在线 | 制服丝袜在线播放| 久久电影一区二区| 国产激情在线| 欧美精品在线观看| 丰满大乳少妇在线观看网站| 欧美激情一区二区三区高清视频| 在线不卡日本v二区707| 欧美激情精品久久久久久久变态| 黑人玩欧美人三根一起进| 欧美激情亚洲自拍| 九色porny自拍视频在线观看| 97视频在线观看播放| 亚洲v.com| 国产精品27p| 天天综合在线观看| 亚洲精品日韩激情在线电影| 亚洲五码在线| 久久国产手机看片| 国产精品一线天粉嫩av| 亚洲高清资源综合久久精品| 99精品在线| 老司机午夜网站| 精品动漫av| 日本成人在线免费视频| 蜜臀va亚洲va欧美va天堂| 不卡中文字幕在线观看| 国产乱对白刺激视频不卡| 在线观看亚洲免费视频| 91视频你懂的| 麻豆视频免费在线播放| 亚洲精品网站在线观看| 日韩三级免费看| 在线观看一区二区视频| 国产黄色片免费| 精品视频中文字幕| 97在线观看免费观看高清| 美女av一区二区三区 | 一本精品一区二区三区| 国产曰肥老太婆无遮挡| 久热精品视频| 三级黄色片免费看| 2欧美一区二区三区在线观看视频| 国产精品久久免费观看| 一区二区三区中文免费| 欧美日韩一二三四区| 欧美日韩亚洲综合| 女人18毛片水真多18精品| 亚洲网在线观看| 亚洲国产精品精华素| 日韩美女在线观看| 日韩在线视频一区二区三区 | 中文不卡在线| 少妇高清精品毛片在线视频| 国产精品一区二区久久不卡| 亚洲第一成人网站| 亚洲精品高清在线| 无码人妻av免费一区二区三区| 欧美一区二区三区电影| 黄色av免费在线观看| 欧美大片网站在线观看| 懂色aⅴ精品一区二区三区| 国产在线精品一区| 91成人精品| 中文字幕视频在线免费观看| 成人国产在线观看| 欧美h片在线观看| 色先锋aa成人| 少妇高潮一区二区三区69| 日韩视频免费看| 亚洲wwww| 久久本道综合色狠狠五月| 五月天综合网站| 好男人www社区| 99久久综合狠狠综合久久| 免费在线观看国产精品| 精品视频123区在线观看| 日韩精品视频无播放器在线看| 久久久久久久影院| 国产精品日本一区二区三区在线| 日本在线播放一区| 亚洲永久在线| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 国产精品第一第二| 一本色道久久综合狠狠躁的番外| 日韩精品视频在线观看视频| 国产精品亚洲一区二区三区妖精 | 在线看不卡av| 日本中文字幕电影在线观看 | 成人午夜免费剧场| 久久99国内精品| 天堂av免费在线| 欧美日韩aaaaaa| 91caoporn在线| 国产精自产拍久久久久久| 精品国产一区二区三区四区| 日批视频在线免费看| 99精品国产91久久久久久| 中文字幕一区二区三区手机版| 精品第一国产综合精品aⅴ| 日韩123区| 岛国一区二区三区高清视频| 亚洲欧美亚洲| 久草免费资源站| 亚洲国产精品精华液网站| 风流老熟女一区二区三区| 久久久久久久久久久人体| 国产精品巨作av| 免费国产a级片| 91麻豆国产香蕉久久精品| 亚洲黄网在线观看| 一区二区三区四区视频| av成人在线看| 自拍另类欧美| 国产高清久久久久| 久久久综合久久久| 日韩精品免费在线播放| 美女一区网站| 亚洲免费不卡| 国产乱对白刺激视频不卡| 久久精品视频9| 亚洲另类图片色| 国产69精品久久久久9999人| 欧美h视频在线观看| 国产成人av一区二区| 日韩av在线播| 亚洲色图av在线| 日日夜夜一区| av无码久久久久久不卡网站| 91视频你懂的| 国产精品探花视频| 久久久久国产一区二区三区| 狼人精品一区二区三区在线| 熟妇人妻无乱码中文字幕真矢织江| 中文字幕一区二区三区视频| 亚洲av无码国产精品永久一区| 97成人精品区在线播放| 欧美理论电影大全| 亚洲三级在线视频| 欧美日韩国产在线| 亚乱亚乱亚洲乱妇| 国产精品日韩高清| 热久久久久久久| 久草中文在线视频| 亚洲人午夜色婷婷| 日本一区二区三区电影免费观看| 国产网站免费在线观看| 国产精品国产三级国产aⅴ原创| 黄色三级网站在线观看| 国产精品久久久久久av下载红粉| 国产精品大片免费观看| b站大片免费直播| 日韩精品最新网址| 日本国产欧美|