前一篇聊到,我平常會透過 MCP,請 AI 幫我把資料存進知識庫。
不過,一開始存進去的其實只有網址。讀取原文、整理摘要,都是後來才慢慢加上的。
因為我希望下次看到這筆資料時,可以先知道它大概在講什麼、能拿來做什麼,不用每一個連結都重新打開。
但開始讀取網頁內容之後,又有一個需要注意的地方:有抓到文字,就代表重要內容都有留下來嗎?
我比較在意的是,有時候不一定完全抓不到,而是只抓到一部分。如果少了使用限制,後面看到整理好的說明時,就可能誤以為這個工具什麼情況都能用。
知識庫裡用到一個工具,叫做 Trafilatura。
一個網頁除了文章本身,也可能有選單、頁尾或其他文字。Trafilatura 的工作,就是從網頁的 HTML 裡擷取主要內容,讓後面的程式有文字可以繼續處理。
這裡可以先分成兩件事:
也就是說,Trafilatura 處理的是前面「取得材料」的部分。如果這一步少了一段,後面的 AI 收到的材料就可能不完整。

圖說:這張圖簡化呈現正文擷取的位置;先取得文字,後續才有材料可以整理。
為了把這件事看清楚,這次請 AI 協助做了一份簡單的 HTML 範例,模擬工具說明頁面。
裡面有工具介紹、安裝說明、使用範例,以及這段限制:
只支援文字型 PDF,不支援掃描圖片。處理大量文件前,請先用小檔案測試。
這是虛構工具的教學範例,沒有真的安裝 PDF 工具。我們測的是「網頁文字擷取」,不是 PDF 處理能力。
測試先把限制寫在一般段落,再把同一段限制放進表格,觀察擷取結果有什麼不同。
範例檔案與測試程式,是我跟 AI 說明想法後,請 AI 協助產生並執行的,可能仍有疏漏,歡迎指正。這次使用 Trafilatura 2.2.0,在本機測試 HTML 範例,沒有呼叫摘要模型,也沒有修改正式知識庫。
這次要看的設定是:
include_tables=False
include_tables 控制擷取時是否包含表格內容。False 表示不包含,True 表示包含。
測試使用的呼叫方式如下,其中 html 是範例網頁的 HTML 字串:
text = trafilatura.extract(
html,
include_comments=False,
include_tables=False,
)
接著,對同一份含有表格的 HTML,只把設定改成:
text = trafilatura.extract(
html,
include_comments=False,
include_tables=True,
)
include_comments=False 維持不變,這樣比較容易看出表格設定帶來的差異。這些是程式呼叫片段,不是可以單獨執行的完整檔案。
先前由 AI 執行的結果如下:
| 限制放置的位置 | 設定 | 使用限制是否保留 |
|---|---|---|
| 一般段落 | include_tables=False |
有 |
| 表格 | include_tables=False |
沒有 |
| 同一份表格範例 | include_tables=True |
有 |
在排除表格的結果裡,工具介紹和使用範例都還在,讀起來也很順,但「不支援掃描圖片」這段限制不見了。
改成包含表格後,同一段限制就出現在輸出裡。
假設我存這個工具,是想找時間拿來整理文件。如果只看到它能把 PDF 文字整理出來,卻沒有看到「不支援掃描圖片」,就可能拿掃描文件去嘗試,最後才發現不適用。
少掉的文字可能不多,卻會影響我判斷這個工具能不能用。
這也是我在意的地方。我希望知識庫可以幫我快速理解資料,但如果只留下功能,沒有留下條件或限制,反而可能讓我產生錯誤期待。
不過,這次結果也不能直接解讀成:以後把 include_tables 全部改成 True 就好了。
它只能證明,在這份範例裡,重要資訊放在表格中,排除表格就會漏掉它。其他網頁的結構不同,還是需要看實際擷取結果。
如果之後發現摘要少了重要資訊,我可以先依序核對:
如果原文有寫,但擷取結果沒有,就先檢查擷取階段。
如果擷取結果有保留,摘要卻沒有,再往後檢查:程式實際交給 AI 的材料是否包含那一段,以及摘要是怎麼整理的。
請另一個 AI 看同一份已經缺少限制的文字,也不能靠這份材料確認原文漏掉了什麼。要核對遺漏,還是需要回到原始內容。
做知識庫,是希望之後能更容易找回資料,也能從裡面學到東西。
所以除了存得進去,我也需要確認存下來的是什麼。
這次的範例讓「有抓到文字」和「重要資訊有保留」的差別變得比較具體。
之後看到整理結果不完整時,可以先沿著原文、擷取結果、摘要這幾個步驟回頭看,找出內容是在哪裡少掉的,再決定要調整哪個地方。