今天我們要讓 Agent 讀取 PDF、Docs 或其他文件,整合成可查詢知識庫。
# -------------------------------
# 安裝套件
# -------------------------------
# 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 應用的框架。