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

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

本教學課程將說明如何為內容建構 AI 對話式搜尋介面。這個專案以 Docs Agent 為基礎,這是一個開放原始碼專案,會使用 Google Gemini API 建立對話式搜尋介面,不需訓練新的 AI 模型,也不需要使用 Gemini 模型進行模型調整。也就是說,您可以快速建構這項搜尋功能,並用於小型和大型內容集合。

如要觀看有關專案的簡介影片和擴充方式,以及開發人員提供的洞察資料,請參閱「AI 內容搜尋 | 使用 Google AI 進行建構」。否則,您可以按照下方說明開始擴充專案。

總覽

Docs Agent 專案針對特定內容組合提供對話式搜尋介面,並由 Google Gemini API 和生成式模型提供支援。使用者可以以對話方式提出詳細問題,並根據特定內容集合取得詳細解答。在幕後,文件服務專員會根據問題,在內容的向量資料庫中進行搜尋,並為生成式模型建立詳細提示,包括相關文字片段。生成式模型會針對問題產生回應,而 Docs 服務機器人會將回應格式化,並呈現給使用者。

Docs 服務代理程式的功能圖 圖 1. Docs Agent 專案應用程式的功能圖。

如要讓 Docs 服務專員能夠回答關於內容的問題,關鍵在於建立該內容的向量資料庫。您可以將內容分割成邏輯文字區塊,並為每個區塊產生向量。這些向量是每個區塊中資訊的數值表示法,並由 Google 生成式模型的 AI 文字嵌入函式產生。

使用者提出問題時,Docs 服務機器人會使用相同的文字嵌入函式,為該問題建立數值表示法,並使用該值搜尋向量資料庫,找出相關內容。它會擷取前幾項結果,並將該資訊新增至產生模型的提示中。AI 模型會擷取問題和其他背景資訊,並產生答案。

專案設定

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

安裝必要條件

Docs Agent 專案會使用 Python 3 和 Python Poetry 管理套件及執行應用程式。以下安裝說明適用於 Linux 主機。

如何安裝必要軟體:

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

如果您要擴充專案,可以使用 Python Poetry 新增更多 Python 程式庫。

設定環境變數

設定幾個環境變數,以便執行 Docs Agent 程式碼專案,包括 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 Poetry 的已知問題。在 Linux 主機上,請使用下列指令。
    export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
    

複製及設定專案

下載專案程式碼,然後使用 Poetry 安裝指令下載必要的依附元件,並設定專案。您需要使用 git 原始碼控管軟體,才能擷取專案原始碼。如要下載及設定專案程式碼,請按照下列步驟操作:

  1. 使用下列指令複製 Git 存放區。
    git clone https://github.com/google/generative-ai-docs
    
  2. 您可以選擇設定本機 Git 存放區,以便使用稀疏檢查功能,這樣您就只會取得 Docs Agent 專案的檔案。
    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
    

準備內容

Docs Agent 專案可處理文字內容,其中包含專門用於處理使用 Markdown 做為來源格式的網站的工具。如果您要處理網站內容,請保留 (或複製) 所提供網站的目錄結構,讓內容處理工作能夠對應並建立該內容的連結。

視內容格式和詳細資料而定,您可能需要清理內容,移除不公開資訊、內部備註或其他不希望可供搜尋的資訊。您應保留標題和標題標記等基本格式,這有助於在內容處理步驟中建立邏輯文字分割 (或分塊)。

如何準備內容以供處理:

  1. 建立目錄,用於儲存您要 AI 虛擬服務專員搜尋的內容。
    mkdir docs-agent/content/
    
  2. 將內容複製到 docs-agent/content/ 目錄。如果內容是網站,請保留 (或複製) 所提供網站的目錄結構。
  3. 視需要清除或編輯內容,移除非公開資訊或不想納入搜尋的其他資訊。

使用 Flutter 文件進行測試

如果您需要一組內容來測試 Docs Agent,可以使用 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 近鄰 (k-NN) 演算法,找出相關資訊做為數學計算。

分割文字內容

文字嵌入向量可有效呈現的文字量有限。這個專案會將向量中顯示的文字限制在 3000 個半形字元以下,也就是說,您必須將內容分割成不超過該字元限制的片段。本節說明如何使用 Docs Agent 專案提供的指令碼,將 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 目錄中建立輸出文字檔案,並根據標題、標題和相關段落分割文字。視內容大小而定,處理作業可能需要一些時間。

建立文字嵌入向量

將內容分割成大小適當的有意義分塊後,您就可以使用文字嵌入函式,將內容填入向量資料庫。Docs Agent 專案使用 Chroma 向量資料庫來儲存文字嵌入向量。本操作說明將說明如何使用 Docs Agent 指令碼,將分割內容填入向量資料庫。

如要產生文字嵌入並填入向量資料庫,請按照下列步驟操作:

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

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

處理其他格式

Docs Agent 專案可處理以 Markdown 格式編寫的網站內容。專案作者已建立了幾個轉換器指令碼,可將其他類型的內容轉換為 Markdown 格式,包括 Google 文件、可攜式文件格式 (PDF) 和 Gmail。如要進一步瞭解如何使用這些轉換器,請參閱程式碼存放區的 docs-agent/apps_script 目錄。

轉換其他內容格式

您可以將其他內容格式與專案搭配使用,但這些額外方法必須由您或社群的其他成員建立。請查看程式碼存放區的問題提取要求,看看是否有人正在建構類似的解決方案。

您需要建構的關鍵程式碼,用於支援其他內容格式,是類似 files_to_plain_text.py 程式碼的拆分器指令碼。請務必建立指令碼或程式,以便產生與此指令碼類似的輸出內容。請注意,最終文字輸出內容應盡量減少格式和多餘資訊。如果您使用 HTML 或 JSON 等內容格式,請務必盡可能移除非資訊格式 (標記、指令碼、CSS),以免影響您從這些格式產生的文字嵌入值。

建立內容格式的分割器指令碼後,您應該就能執行 populate_vector_database.py 指令碼,為向量資料庫填入資料。如要進一步瞭解如何處理檔案以供 Docs Agent 使用,請參閱 Docs Agent 預處理 Readme 檔案

測試應用程式

填入向量資料庫後,專案即可進行測試。這個專案提供封裝函式,可讓您在本機執行專案。

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

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

實踐方式

Gemini API 提供可取代 Docs 服務代理程式實作項目的程式設計工具,特別是語意擷取和歸因問題回答 (AQA) Gemini 模型變化版本。您可以使用 Gemini API 的語意擷取功能取代個別的向量資料庫。語意擷取功能可讓您為內容產生嵌入項目,並儲存該內容。AQA Gemini 模型經過調整,可根據提示中提供的來源資料回答問題。您可以使用語意擷取功能搭配 AQA 模型,在 Gemini API 中回答有關內容的問題

Docs Agent 包含設定選項,可用於使用語意檢索 API 功能、AQA Gemini 模型,或兩者皆用。詳情請參閱 Google 說明文件代理程式 Readme

其他資源

如要進一步瞭解 Docs Agent 專案,請參閱 程式碼存放區。如果您需要建構應用程式的協助,或想尋找開發人員協作者,請前往 Google 開發人員社群 Discord 伺服器。

正式版應用程式

如果您打算為大量使用者部署 Google 文件操作員,請注意,您使用 Google Gemini API 時可能會受到速率限制和其他使用限制。如果您考慮使用 Gemini API (例如 Docs Agent) 建構正式版應用程式,請參閱 Google Cloud Vertex AI 服務,進一步提升應用程式的可擴充性和可靠性。