iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
Software Development

建構跨平台AI對話機器人:從LINE到Telegram實踐SDGs推廣的30天專案紀實系列 第 7

Day 7【向量化】 實作將 PDF 內容向量化:為你的 AI 機器人建立知識庫的基石

  • 分享至 

  • xImage
  •  

HI!大家好,我是 Shammi 😊

昨天完成了 Embedding 模型的技術選擇,並決定最適合專案的模型作為我的機器人「大腦核心🧠」。今天要使用這個核心,將處理好的 SDGs 文字內容,轉化成 AI 能理解的語言—>向量

這一步是 RAG 架構中,最關鍵的實作環節之一。此階段將會把 SDGs 知識庫,從一堆冰冷的文字,變成一個可以被 AI 機器人快速、精準檢索的「記憶中樞」。

🌐 一、為什麼需要將文字轉成向量?

電腦無法理解文字的語義和上下文。但透過 Embedding 技術,我將每一段文字(例如,SDGs 知識庫中的一個段落)轉換成一串獨特的數字向量。

這串數字向量在數學空間中,代表了這段文字的語義

👉 語義相近的文字,它們的向量會非常靠近。

👉 語義不相關的文字,它們的向量會離得很遠。

這樣一來,當使用者提問時,我只需將問題也轉成向量,然後在向量空間中,找到距離最近的文字向量,就能快速地找出最相關的答案!

🌐 二、準備工作:申請與設定 Google AI 金鑰

在正式開始向量化之前,需要先取得使用 Google 模型服務的通行證:API 金鑰

請打開你的瀏覽器,前往 Google AI Studio 網站:
https://aistudio.google.com/app/apikey

登入 Google 帳號後,點擊「Create API key」按鈕,你的一串專屬金鑰就會生成。申請完後請在頁面中找到「API key」並點擊「Copy」,會是一串英數字的組合請將它複製並妥善保存,這將是你接下來使用模組的通行證。

🌐 三、實作教學:使用 text-embedding-004 進行向量化

接著,我會使用 google-generativeai 套件,來實作將文字區塊(Day 5 從 PDF 提取的內容)轉換成向量的過程。

步驟 1:匯入套件與設定 API 金鑰

請確保 Colab 環境已經安裝好 google-generativeai。接下來,需先設定 Google API 金鑰。

強烈建議使用 Colab 的「金鑰管理員 (Secrets)」功能,這能確保金鑰不會被公開。
資安意識對於開發人員是非常重要的一環哦!

接著按照以下步驟操作:

  1. 點擊 Colab 左側導覽列的「鑰匙」圖標。
  2. 點擊 Add new secretName 欄位中輸入 GOOGLE_API_KEY
  3. Value 欄位中貼上金鑰,並勾選 Notebook access

參考畫面:
https://ithelp.ithome.com.tw/upload/images/20250902/20151627alx16r0kCo.jpg

接著,請新增程式區塊,將以下程式碼新增上去並執行,就可以在程式碼中安全地呼叫API:

import google.generativeai as genai
from google.colab import userdata

#從金鑰管理員中取得金鑰
GOOGLE_API_KEY = userdata.get('GOOGLE_API_KEY')
genai.configure(api_key=GOOGLE_API_KEY)

步驟 2:載入與切割 PDF

再這裡我直接整合 Day 1-5 的流程,載入 PDF 並將其切分為文字區塊,以便後續向量化。(新增程式區塊)

!pip install pypdf
from pypdf import PdfReader
from langchain.text_splitter import RecursiveCharacterTextSplitter

#請替換你在DAY5所上傳的檔案名稱並確認一致性!
pdf_path = "17sdgs.pdf"

reader = PdfReader(pdf_path)
pdf_text = ""
for page in reader.pages:
    pdf_text += page.extract_text()

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200,
    length_function=len
)
stored_chunks = text_splitter.split_text(pdf_text)

print(f"成功將 PDF 內容切分為 {len(stored_chunks)} 個區塊。")

步驟 3:將文字區塊向量化

(新增程式區塊)將 stored_chunks 列表中的所有文字區塊進行向量化,並將結果儲存起來。

import numpy as np

def get_embedding(text, task_type="RETRIEVAL_DOCUMENT"):
    response = genai.embed_content(
        model="models/text-embedding-004",
        content=text,
        task_type=task_type
    )
    return np.array(response['embedding']).astype('float32')

all_embeddings = [get_embedding(chunk) for chunk in stored_chunks]

print(f"總共生成了 {len(all_embeddings)} 個向量。")

參考結果:
https://ithelp.ithome.com.tw/upload/images/20250902/20151627bddB5TeN20.jpg

總結

今天完成核心的步驟之一:將 SDGs 的知識庫文字,轉化成了 AI 能理解的向量

這些向量,就像是 SDGs 知識的「指紋」,每一個指紋都獨一無二地代表了一段文字的語義。有了這些指紋,明天就可以開始打造一個高效的「指紋辨識系統」——也就是機器人的向量資料庫,讓機器人能夠在海量知識中精準搜尋!


上一篇
Day 6【模型比較】為了讓 AI 不胡說八道之面對各家 Embedding 模型
下一篇
Day 8【向量資料庫】用 FAISS 打造 AI 機器人的記憶中樞
系列文
建構跨平台AI對話機器人:從LINE到Telegram實踐SDGs推廣的30天專案紀實8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言