昨天我們學會了 Chain 與 PromptTemplate 的基礎用法。
今天要更進一步,做一個能回答問題的 AI 助手。
這類應用在實務上很常見,例如:
如果單靠 LLM,它只會根據訓練知識回覆,可能會「亂編答案」。
但我們需要 AI 根據特定資料(例如文件或 FAQ)來回答。
這時候就需要 RetrievalQA:
安裝套件:
pip install langchain-google-genai faiss-cpu langchain_community sentence-transformers
假設我們有一份 FAQ,存成文字檔 faq.txt
:
Q: 什麼是 LangChain?
A: LangChain 是一個幫助開發者快速構建 LLM 應用的框架。
Q: 我可以用哪些 LLM 搭配 LangChain?
A: 可以用 OpenAI、Gemini、Claude、Llama 等多種模型。
Q: LangChain 的核心功能有哪些?
A: 包含 Chains、Memory、Tools、Agents。
import os
from langchain.text_splitter import CharacterTextSplitter
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
os.environ["GOOGLE_API_KEY"] = "(前幾天的Gemini API Key)"
with open("faq.txt", "r", encoding="utf-8") as f:
text = f.read()
text_splitter = CharacterTextSplitter(chunk_size=200, chunk_overlap=50)
docs = text_splitter.create_documents([text])
# 建立 Embeddings(改用 HuggingFace 免費模型)
embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
# 建立向量資料庫
vectorstore = FAISS.from_documents(docs, embeddings)
現在我們把 Gemini LLM + 向量資料庫 串起來:
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain.chains import RetrievalQA
# 初始化 Gemini LLM(需要填上 API Key)
llm = ChatGoogleGenerativeAI(model="gemini-1.5-flash", temperature=0)
# 建立 RetrievalQA
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
retriever=vectorstore.as_retriever(),
chain_type="stuff"
)
# 測試問答
query = "LangChain 有哪些核心功能?"
result = qa_chain.run(query)
print("問題:", query)
print("回答:", result)
query2 = "LangChain 的使用案例有哪些?"
result2 = qa_chain.run(query2)
print("問題:", query2)
print("回答:", result2)
輸出結果會是:
問題: LangChain 有哪些核心功能?
回答: 包含 Chains、Memory、Tools、Agents。
問題: LangChain 的使用案例有哪些?
回答: 我不知道 LangChain 的具體使用案例。
今天我們學會了:
這樣,你已經能做出一個小型 FAQ 聊天機器人了 🚀
👉 明天,我們會讓 Agent 學會使用 工具,例如:計算數學、查天氣,讓它不只會「回答」,還能「行動」。