使用文件代理程式建立 AI 內容搜尋

人工智慧 (AI) 生成式模型最常見的用途之一,就是搜尋資訊。運用 AI 技術為內容建構對話式搜尋介面,可讓使用者提出特定問題並直接獲得答案。

本教學課程說明如何為內容建構採用 AI 技術的對話式搜尋介面。此工具是以 文件代理程式為基礎,此開放原始碼專案使用 Google Gemini API 建立對話式搜尋介面,讓您不必訓練新的 AI 模型或使用 Genmini 模型進行模型調整。也就是說,您可以迅速建構這項搜尋功能,並用於小型和大型內容集。

如需這項專案的簡介影片及如何擴充,包括建構程式開發人員的深入分析,請參閱:AI Content Search | Build with Google AI。否則,您可以按照下列操作說明開始擴充專案。

總覽

文件代理程式專案提供對話式搜尋介面,可處理特定內容集,並由 Google Gemini API 和生成式模型提供支援。使用者可以透過對話式風格詢問詳細的問題,並取得特定內容集的詳細解答。文件代理程式會在背景中,針對內容的向量資料庫進行問題和搜尋,並為生成式模型建立詳細的提示,包括相關文字片段。生成式模型會產生問題的回應,而文件代理程式會設定回應格式,並將回應呈現給使用者。

文件代理程式的功能圖表 圖 1:文件代理程式專案應用程式的功能圖表。

讓文件代理程式可以回答內容相關問題,關鍵就是建立該內容的向量資料庫。只要將內容分成有邏輯的文字區塊,然後為每個文字區塊產生向量即可。這些向量是以數字表示每個區塊中的資訊,並使用 Google 生成式模型的 AI 文字嵌入功能產生。

使用者提出問題時,文件代理程式會使用相同的文字嵌入函式來建立該問題的數值表示,並使用這個值搜尋向量資料庫及尋找相關內容。該方法會擷取熱門結果,並將該資訊加入生成式模型的提示中。AI 模型會採用問題和其他情境資訊,然後產生答案。

專案設定

這些操作說明會逐步引導您設定文件代理程式專案,以進行開發和測試。一般步驟包括安裝一些必備軟體、設定一些環境變數、從程式碼存放區複製專案,以及執行設定安裝。程式碼專案使用 Python Poetry 來管理套件和 Python 執行階段環境。

安裝必備條件

Document Agent 專案會使用 Python 3 和 Python Poetry 來管理套件及執行應用程式。下列安裝操作說明適用於 Linux 主機,

如何安裝必要的軟體:

  1. 安裝 Python 3 和 Python 適用的 venv 虛擬環境套件。
    sudo apt update
    sudo apt install git pip python3-venv
    
  2. 安裝 Python Poetry 即可管理專案的依附元件和封裝。
    curl -sSL https://install.python-poetry.org | python3 -
    

擴充專案之後,您可以使用 Python Poetry 來新增更多 Python 程式庫。

設定環境變數

設定一些執行文件代理程式程式碼專案所需的環境變數,包括 Google Gemini API 金鑰和 Python Poetry 設定。如果您使用的是 Linux,建議將這些變數新增至 $HOME/.bashrc 檔案,將這些變數設為終端機工作階段的預設設定。

如要設定環境變數,請按照下列步驟操作:

  1. 取得 Google Gemini API 金鑰並複製金鑰字串。
  2. 將 API 金鑰設為環境變數。如果是 Linux 主機,請使用下列指令。
    export API_KEY=<YOUR_API_KEY_HERE>
    
  3. 設定 PYTHON_KEYRING_BACKEND 參數以解決 Python 詩詞的已知問題。如果是 Linux 主機,請使用下列指令。
    export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
    

複製並設定專案

請下載專案程式碼,並使用 Poetry 安裝指令來下載所需的依附元件,並設定專案。您需要 git 原始碼控制軟體來擷取專案原始碼。 外部 如要下載及設定專案程式碼:

  1. 使用下列指令複製 Git 存放區。
    git clone https://github.com/google/generative-ai-docs
    
  2. 或者,您也可以設定本機 Git 存放區,使其使用稀疏檢查,因此只有文件代理程式專案的檔案。
    cd generative-ai-docs/
    git sparse-checkout init --cone
    git sparse-checkout set examples/gemini/python/docs-agent/
    
  3. 前往 docs-agent 專案根目錄。
    cd examples/gemini/python/docs-agent/
    
  4. 執行 Poetry 安裝指令來下載依附元件並設定專案:
    poetry install
    

準備內容

Document Agent 專案的設計宗旨是處理文字內容,並且提供專門的工具,以便與使用 Markdown 做為來源格式的網站搭配使用。處理網站內容時,應保留 (或複製) 放送網站的目錄結構,以便內容處理工作對應及建立該內容的連結。

視內容的格式和詳細資料而定,您可能需要清除內容,移除非公開資訊、內部附註或其他您不開放搜尋的資訊。請保留基本格式設定,例如標題和標題,以利在內容處理步驟中依邏輯建立文字分割或區塊。

如要準備內容以供處理,請按照下列步驟操作:

  1. 為要讓 AI 代理程式搜尋的內容建立目錄。
    mkdir docs-agent/content/
    
  2. 將內容複製到 docs-agent/content/ 目錄。如果內容是網站,請保留 (或複製) 所提供網站的目錄結構。
  3. 視需要清除或編輯內容,以移除非公開資訊或您不想納入搜尋範圍的其他資訊。

使用 Flutter 文件進行測試

如果您需要一組內容來測試文件代理程式,可以使用 Flutter 開發人員說明文件進行測試。

如何取得 Flutter 開發人員說明文件:

  1. 找出要讓 AI 代理程式搜尋的內容,並移至內容目錄。
    cd docs-agent/content/
    
  2. 將 Flutter 文件複製到 docs-agent/content/ 目錄。
    git clone --recurse-submodules https://github.com/flutter/website.git
    

處理內容

為了讓搜尋代理程式有效搜尋使用者的問題相關內容,您需要建構代表內容的向量資料庫。這些向量是透過名為「文字嵌入」的 AI 生成式模型函式產生。文字嵌入是文字內容的數值表示法。這類修飾符會用一組數字近似隨機描述文字的語意含義。透過數字形式呈現資訊可讓系統採用使用者的問題,並使用相同的文字嵌入函式估算其含義,然後使用最接近鄰 (k-NN) 演算法,以數學計算方式尋找相關資訊。

分割文字內容

文字嵌入向量可有效代表的文字量有限。此專案會將向量表示的文字限制在 3, 000 個字元以內,也就是說,您必須將內容拆分為不超過該字元限制的區塊。本節說明如何使用文件代理程式專案提供的指令碼,將 Markdown 檔案分割為較小的文字區塊。如需處理其他內容格式的訣竅,請參閱「處理其他格式」。

如何分割 Markdown 格式的內容:

  1. 編輯 docs-agent/config.yaml 檔案,設定處理指令碼的輸入參數。這個範例僅指定部分 Flutter 文件:
    input:
    - path: "content/website/src/ui"
      url_prefix: "https://docs.flutter.dev/ui"
    
  2. 儲存您對這個設定檔所做的變更。
  3. 前往 docs-agent 專案目錄:
    cd docs-agent/
    
  4. 執行 agent chunk 指令來分割 Markdown 來源內容:
    agent chunk
    

這個指令碼會處理輸入內容,並在 docs-agent/data 目錄中建立輸出文字檔案,並根據標題、標題和相關段落分割文字。視內容大小而定,處理作業可能需要一段時間才能完成。

建立文字嵌入向量

將內容分割為適當大小的「有意義的」區塊後,即可使用文字嵌入函式將內容填入向量資料庫。文件代理程式專案使用 Chroma 向量資料庫儲存文字嵌入向量。這些操作說明會說明如何使用文件代理程式指令碼,以您的分割內容填入向量資料庫。

產生文字嵌入並填入向量資料庫:

  1. 前往 docs-agent 專案目錄:
    cd docs-agent/
    
  2. 使用 agent populate 指令將向量資料庫填入您的內容:
    agent populate
    

此指令碼會使用 Google Gemini API 產生文字嵌入向量,然後將輸出內容儲存到向量資料庫。視內容大小而定,處理作業可能需要一段時間才能完成。

處理其他格式

Document Agent 專案的設計旨在處理 Markdown 格式的網站內容。專案作者建構了一些轉換工具指令碼,能將其他類型的內容產生成 Markdown 格式,包括 Google 文件、可攜式文件格式 (PDF) 與 Gmail。如要進一步瞭解如何使用這些轉換工具,請參閱程式碼存放區的 docs-agent/apps_script 目錄。

轉換其他內容格式

您可以在專案中使用其他內容格式,但這些額外方法必須由您或社群成員建構。請參閱程式碼存放區的問題提取要求,瞭解建構類似解決方案的人員。

為支援其他內容格式,您需要建構的鍵程式碼是分割指令碼,例如 files_to_plain_text.py 指令碼。目標是建構能建立類似這個指令碼輸出的指令碼或程式。請記得,最終的文字輸出內容應具有最少的格式和擷取資訊。如果您使用 HTML 或 JSON 等內容格式,請盡可能刪除所有非資訊格式 (標記、指令碼、CSS),這樣就不會使從這些格式產生的文字嵌入值出現偏差。

建立內容格式的分割器指令碼後,您應該就能執行 populate_vector_database.py 指令碼來填入向量資料庫。如要進一步瞭解如何處理要與文件代理程式搭配使用的檔案,請參閱文件代理程式的預先處理 Readme 文件。

測試應用程式

完成填入向量資料庫後,即可開始測試專案。此專案提供封裝函式,可讓您在本機執行專案。

如何執行及測試專案網頁介面:

  1. 前往 docs-agent 專案目錄:
    cd docs-agent/
    
  2. 執行網頁應用程式啟動指令碼:
    agent chatbot
    
  3. 使用網路瀏覽器前往啟動指令碼輸出內容中顯示的網址,然後測試應用程式。
    * Running on http://your-hostname-here:5000
    

實踐方式

Gemini API 提供的程式設計工具可取代文件代理程式實作的元件,特別是語意擷取和歸因問題回答 (AQA) Gemini 模型變化版本。您可以使用 Gemini API 的語意擷取功能取代獨立的向量資料庫。語意擷取功能可讓您產生內容的嵌入,並儲存該內容。AQA Gemini 模型已根據提示中提供的來源內容回答問題。您可以使用語意擷取模型搭配 AQA 模型,在 Gemini API 中回答內容相關問題

文件代理程式的設定選項包括使用 Semantic Retrieval API 功能、AQA Gemini 模型或兩者皆有的設定選項。詳情請參閱文件代理程式 Readme 文件。

其他資源

如要進一步瞭解文件代理程式專案,請參閱程式碼存放區。如果您在建構應用程式時需要協助,或尋找開發人員協作夥伴,請前往 Google Developers Community Discord 伺服器。

正式版應用程式

如果您打算為大量目標對象部署文件代理程式,請注意使用 Google Gemini API 時可能會受到頻率限制和其他使用限制的規範。如果您考慮使用 Gemini API (例如文件代理程式) 建構正式版應用程式,請查看 Google Cloud Vertex AI 服務,以提高應用程式的擴充性和可靠性。