iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
生成式 AI

30 天打造你的 AI Agent:LangChain × n8n 實戰系列 第 19

知識庫 Agent:整合外部文件(如 PDF、Docs)

  • 分享至 

  • xImage
  •  

今天我們要讓 Agent 讀取 PDF、Docs 或其他文件,整合成可查詢知識庫。

一、概念

  • 目標:把文件變成向量索引(Vector Store)
  • 方法:先分段 → 生成 Embeddings → 建立檢索器
  • 使用方式:Agent 問問題 → 自動檢索 → 回答

二、實作範例

# -------------------------------
# 安裝套件
# -------------------------------
# pip install  pypdf fpdf langchain langchain_community sentence-transformers

# -------------------------------
# 1. 生成範例 PDF(中文支援)
# -------------------------------
from fpdf import FPDF
import os

pdf = FPDF()
pdf.add_page()
# 載入支援中文的 ttf 字型,需先確認系統有此字型檔
# Windows 內建字型可使用 C:\Windows\Fonts\arial.ttf
pdf.add_font("ArialUnicode", "", "C:\\Windows\\Fonts\\ARIALN.TTF", uni=True)
pdf.set_font("ArialUnicode", size=12)
pdf.multi_cell(0, 10, """LangChain 是一個可以快速構建 LLM 應用的框架。
它支援多種工具串接、上下文記憶、問答型 Agent。
可以用於資料分析、文件檢索、聊天機器人等應用。""")
pdf_file = "example.pdf"
pdf.output(pdf_file)
print(f"✅ {pdf_file} 已生成")

上半部分是預防沒有合適的PDF檔,若有想要嘗試的檔案可以直接改pdf_file的名稱即可
下半部才是本次主題內容

# -------------------------------
# 2. 載入 PDF 並建立向量資料庫
# -------------------------------
from langchain_community.document_loaders import PyPDFLoader
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain_google_genai import ChatGoogleGenerativeAI

# 載入 PDF
loader = PyPDFLoader(pdf_file)
docs = loader.load()

# Embeddings (免費 HuggingFace 模型)
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")

# 建立向量資料庫
vectorstore = FAISS.from_documents(docs, embeddings)

# -------------------------------
# 3. 建立 RetrievalQA
# -------------------------------
# 若使用 Gemini LLM,需要設定 API Key
os.environ["GOOGLE_API_KEY"] = ""

llm = ChatGoogleGenerativeAI(model="gemini-2.5-flash", temperature=0)
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectorstore.as_retriever(),
    chain_type="stuff"
)

# -------------------------------
# 4. 測試問答
# -------------------------------
query = "這份 PDF 主要討論什麼主題?"
result = qa_chain.run(query)
print("\n💡 QA 結果:")
print(result)

預計測試結果(範例pdf)
💡 QA 結果:
我不知道這份 PDF 主要討論什麼主題。

提供的內容是關於 LangChain 的介紹,它是一個用於構建 LLM 應用的框架。

三、今日小結

  • Agent 可以整合外部文件成知識庫
  • 可查詢 PDF、Docs 或其他文本(更改路徑及名稱就行)
  • 支援多來源資料分析與問答

上一篇
資料分析 Agent:讀取 CSV 並產生結論
下一篇
Web 搜尋 Agent:自動查詢與回應
系列文
30 天打造你的 AI Agent:LangChain × n8n 實戰20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言