Doctor AI

Dr. Savath Saypadith

240 ບົດຄວາມ

ອະທິບາຍລະບົບ RAG (Retrieval-Augmented Generation): ວິທີເຊື່ອມຕໍ່ LLM ເຂົ້າກັບເອກະສານ PDF ຂອງບໍລິສັດທ່ານ

ໂພສເມື່ອ # Large Language Models # RAG # Python # Artificial Intelligence

ອະທິບາຍລະບົບ RAG (Retrieval-Augmented Generation): ວິທີເຊື່ອມຕໍ່ LLM ເຂົ້າກັບເອກະສານ PDF ຂອງບໍລິສັດທ່ານ

ລອງຈິນຕະນາການເບິ່ງວ່າ ທ່ານເປັນນັກພັດທະນາ (Developer) ຢູ່ໃນບໍລິສັດສົ່ງອອກກາເຟລາຍໃຫຍ່ທີ່ເມືອງປາກຊ່ອງ ຫຼື ເປັນໄອທີໃນທະນາຄານທີ່ນະຄອນຫຼວງວຽງຈັນ. ບໍລິສັດຂອງທ່ານມີເອກະສານ PDF ຫຼາຍພັນສະບັບ ບໍ່ວ່າຈະເປັນ ລາຍງານການເງິນ, ກົດລະບຽບການປ່ອຍສິນເຊື່ອ, ຍອດຂາຍປະຈຳປີ ຫຼື ເອກະສານສັນຍາຕ່າງໆ. ເມື່ອພະນັກງານຕ້ອງການຊອກຫາຂໍ້ມູນສະເພາະເຈາະຈົງ ມັກຈະໃຊ້ເວລາຫຼາຍຊົ່ວໂມງໃນການເປີດອ່ານແຕ່ລະໄຟລ໌.

ທ່ານອາດຈະຄິດຢາກເອົາ Large Language Models (LLMs) ເຊັ່ນ ChatGPT ມາຊ່ວຍຕອບຄຳຖາມ, ແຕ່ບັນຫາຄື LLM ເຫຼົ່ານີ້ບໍ່ເຄີຍເຫັນ “ຂໍ້ມູນລັບ” ຂອງບໍລິສັດທ່ານມາກ່ອນ. ວິທີການແກ້ໄຂບັນຫານີ້ຢ່າງມີປະສິດທິຜົນທີ່ສຸດໃນປັດຈຸບັນແມ່ນການນຳໃຊ້ເຕັກໂນໂລຊີທີ່ເອີ້ນວ່າ RAG (Retrieval-Augmented Generation).

ໃນບົດຄວາມນີ້, ເຮົາຈະມາເຈາະເລິກວິທີການເຮັດວຽກຂອງ RAG ແລະ ສອນວິທີຂຽນໂຄດພາສາ Python ເພື່ອເຊື່ອມຕໍ່ LLM ເຂົ້າກັບເອກະສານ PDF ຂອງທ່ານເອງ.

ລະບົບ RAG ແມ່ນຫຍັງ?

RAG (Retrieval-Augmented Generation) ແມ່ນກອບການເຮັດວຽກ (Framework) ທີ່ຊ່ວຍເພີ່ມຄວາມສາມາດໃຫ້ກັບ LLM ໂດຍການອະນຸຍາດໃຫ້ມັນ “ຄົ້ນຫາ” (Retrieve) ຂໍ້ມູນຈາກຖານຂໍ້ມູນພາຍນອກ (ເຊັ່ນ: PDF ຂອງບໍລິສັດ) ກ່ອນທີ່ມັນຈະ “ສ້າງ” (Generate) ຄຳຕອບ.

ອາໄນລັອກຈີ (Analogy) ທີ່ເຂົ້າໃຈງ່າຍໆຄື: ການໃຫ້ LLM ຕອບຄຳຖາມທົ່ວໄປ ແມ່ນຄືກັບການໃຫ້ນັກຮຽນເສັງແບບ ປິດປຶ້ມ (Closed-book exam) ທີ່ຕອບຈາກຄວາມຈຳ. ແຕ່ລະບົບ RAG ແມ່ນການໃຫ້ນັກຮຽນເສັງແບບ ເປີດປຶ້ມໄດ້ (Open-book exam) ໂດຍລະບົບຈະຄົ້ນຫາໜ້າປຶ້ມທີ່ມີເນື້ອຫາທີ່ກ່ຽວຂ້ອງມາວາງໄວ້ຕໍ່ໜ້າ AI, ແລ້ວໃຫ້ AI ອ່ານແລະສະຫຼຸບຄຳຕອບອອກມາ.

ໂຄງສ້າງ ແລະ ຂັ້ນຕອນການເຮັດວຽກຂອງ RAG (RAG Architecture)

ສຳລັບການປ່ຽນ PDF ໃຫ້ເປັນຖານຂໍ້ມູນໃຫ້ AI ສາມາດຖາມ-ຕອບໄດ້ ຈະປະກອບມີ 5 ຂັ້ນຕອນຫຼັກ:

  1. Document Loading (ການໂຫຼດເອກະສານ): ອ່ານຂໍ້ມູນຈາກໄຟລ໌ສະກຸນ PDF.
  2. Text Chunking (ການຕັດແບ່ງຂໍ້ຄວາມ): ໜ້າເຈ້ຍ PDF ຍາວເກີນໄປສຳລັບ LLM. ເຮົາຕ້ອງຕັດມັນເປັນທ່ອນນ້ອຍໆ (Chunks).
  3. Embeddings (ການປ່ຽນຂໍ້ຄວາມເປັນຕົວເລກ Vector): ແປງຂໍ້ຄວາມແຕ່ລະທ່ອນໃຫ້ເປັນຊຸດຕົວເລກ (Vector) ເພື່ອໃຫ້ຄອມພິວເຕີເຂົ້າໃຈຄວາມໝາຍທາງພາສາ.
  4. Vector Store (ການຈັດເກັບ): ບັນທຶກ Vector ເຫຼົ່ານັ້ນລົງໃນ Vector Database (ເຊັ່ນ: FAISS, Chroma, ຫຼື Pinecone).
  5. Retrieval & QA (ການຄົ້ນຫາ ແລະ ຕອບຄຳຖາມ): ເມື່ອຜູ້ໃຊ້ພິມຄຳຖາມ, ລະບົບຈະແປງຄຳຖາມເປັນ Vector, ໄປຄົ້ນຫາທ່ອນຂໍ້ຄວາມໂຕທີ່ໃກ້ຄຽງທີ່ສຸດໃນ Database, ແລ້ວສົ່ງຂໍ້ຄວາມນັ້ນໄປໃຫ້ LLM (ເຊັ່ນ GPT-4) ເພື່ອຮຽບຮຽງເປັນຄຳຕອບ.

ວິທີການສ້າງລະບົບ RAG ດ້ວຍ Python (Step-by-Step)

ໃນຕົວຢ່າງນີ້, ເຮົາຈະໃຊ້ LangChain (ເຊິ່ງເປັນ Framework ຍອດຮິດສຳລັບສ້າງແອັບພລິເຄຊັນ LLM), PyPDF ສຳລັບອ່ານ PDF ແລະ FAISS ເຊິ່ງເປັນ Vector Database ຈາກ Facebook.

ສິ່ງທີ່ຕ້ອງກຽມກ່ອນຂຽນໂຄດ:

ໂຄດຕົວຢ່າງ: ການສ້າງ Chatbot ອ່ານລາຍງານກາເຟປາກຊ່ອງ

ລອງມາຂຽນໂຄດຕົວຈິງກັນເລີຍ (ສາມາດບັນທຶກເປັນໄຟລ໌ app.py):

import os
from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA

# ຕັ້ງຄ່າ API Key ຂອງທ່ານ
os.environ["OPENAI_API_KEY"] = "sk-YourRealAPIKeyHere"

# ຂັ້ນຕອນທີ 1: ໂຫຼດເອກະສານ PDF (ຕົວຢ່າງ: ລາຍງານຍອດຂາຍກາເຟປາກຊ່ອງ)
loader = PyPDFLoader("paksong_coffee_report_2024.pdf")
documents = loader.load()

# ຂັ້ນຕອນທີ 2: ຕັດແບ່ງຂໍ້ຄວາມ (Text Chunking)
# ຕັດເປັນທ່ອນລະ 1000 ຕົວອັກສອນ, ໂດຍມີການທັບຊ້ອນກັນ (overlap) 200 ຕົວອັກສອນ ເພື່ອບໍ່ໃຫ້ປະໂຫຍກຂາດຕອນ
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
chunks = text_splitter.split_documents(documents)

# ຂັ້ນຕອນທີ 3 & 4: ແປງເປັນ Vector (Embeddings) ແລະ ເກັບຂໍ້ມູນໃນ FAISS
# ເຮົາໃຊ້ Model ນ້ອຍຂອງ OpenAI ສຳລັບການເຮັດ Embedding
embeddings = OpenAIEmbeddings()
# ສ້າງ Vector Database ໄວ້ໃນ Memory ຂອງເຄື່ອງ
vectorstore = FAISS.from_documents(chunks, embeddings)

# ຂັ້ນຕອນທີ 5: ກຽມລະບົບ Retrieval ແລະ ເຊື່ອມຕໍ່ກັບ LLM
# ໃຊ້ GPT-3.5-turbo (ຫຼື gpt-4) ມາກຽມຕອບຄຳຖາມ, ຕັ້ງ temperature=0 ເພື່ອໃຫ້ຕອບແບບເປະໆທາງວິຊາການ
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)

# ສ້າງ Chain ສຳລັບຖາມ-ຕອບ
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff", # "stuff" ໝາຍເຖິງການຍັດຂໍ້ຄວາມທີ່ຄົ້ນຫາມາໄດ້ເຂົ້າໄປໃນ Prompt ໂດຍກົງ
    retriever=vectorstore.as_retriever(search_kwargs={"k": 3}) # ດຶງຂໍ້ມູນທີ່ກ່ຽວຂ້ອງທີ່ສຸດ 3 ທ່ອນ
)

# ທົດລອງຖາມຄຳຖາມກ່ຽວກັບເອກະສານ!
user_query = "ຍອດສົ່ງອອກກາເຟ ອາຣາບິກາ (Arabica) ໄປປະເທດຈີນ ໃນໄຕມາດທີ 3 ແມ່ນເທົ່າໃດໂຕນ?"
response = qa_chain.run(user_query)

print("ຄຳຕອບຈາກ AI ຈັກກະວານກາເຟ:")
print(response)

ອະທິບາຍເພີ່ມເຕີມ: ໃນໂຄດຂ້າງເທິງ, ຖ້າ LLM ບໍ່ມີລະບົບ RAG, ມັນຈະບໍ່ສາມາດຮູ້ຍອດຂາຍຂອງບໍລິສັດເຮົາໄດ້ເລີຍ ເພາະມັນເປັນຂໍ້ມູນ Private. ແຕ່ເມື່ອເຮົາໃຊ້ vectorstore.as_retriever(), ລະບົບຈະໄປຊອກຫາໜ້າ PDF ທີ່ເວົ້າເຖິງ “ການສົ່ງອອກໄປປະເທດຈີນ ໃນໄຕມາດທີ 3” ແລ້ວສົ່ງຕົວໜັງສືນັ້ນໃຫ້ GPT-3.5-turbo ອ່ານ ແລະ ສັງເຄາະຄຳຕອບທີ່ຖືກຕ້ອງອອກມາໃຫ້ເຮົາທັນທີ.

ການປະຍຸກໃຊ້ RAG ໃນສະພາບແວດລ້ອມທຸລະກິດລາວ

ການນຳໃຊ້ RAG ບໍ່ໄດ້ຈຳກັດແຕ່ພຽງລາຍງານທຸລະກິດ, ທ່ານສາມາດເອົາໄປໝູນໃຊ້ໃນຫຼາຍອົງກອນໃນປະເທດລາວໄດ້ ເຊັ່ນ:

ຈຸດສຳຄັນທີ່ຄວນຈື່ (Key Takeaways)

ສະຫຼຸບ

ເຕັກໂນໂລຊີ RAG ຖືເປັນຈິກຊໍ (Jigsaw) ທີ່ສຳຄັນທີ່ສຸດສຳລັບນັກພັດທະນາໃນຍຸກ AI ທີ່ຕ້ອງການສ້າງແອັບພລິເຄຊັນທີ່ໃຊ້ງານໄດ້ຈິງໃນລະດັບອົງກອນ (Enterprise-ready). ພຽງແຕ່ທ່ານມີພື້ນຖານການຂຽນພາສາ Python ແລະ ເຂົ້າໃຈຫຼັກການຂອງ LangChain ຫຼື Frameworks ທີ່ຄ້າຍຄືກັນ ທ່ານກໍສາມາດປ່ຽນຂໍ້ມູນ PDF ຈອກແຈກຈໍແຈ ທີ່ເຕັມໄປດ້ວຍຝຸ່ນໃນ Hard Drive ຂອງບໍລິສັດ ໃຫ້ກາຍເປັນຜູ້ຊ່ວຍອັດສະລິຍະ ທີ່ສາມາດດຶງບົດລາຍງານການຂາຍເຄື່ອງຢູ່ຕະຫຼາດຊັງຈຽງ ຫຼື ວິເຄາະລະດັບນ້ຳຂອງຈາກກົມອຸຕຸນິຍົມວິທະຍາ ໄດ້ພາຍໃນພຽງບໍ່ເທົ່າໃດວິນາທີ. ກ້າວຕໍ່ໄປແມ່ນລອງນຳເອົາໂຄດຂ້າງເທິງໄປປັບໃຊ້ ແລະ ຕໍ່ຍອດໃສ່ໂປເຈັກຕົວຈິງຂອງທ່ານເບິ່ງ!