ການຕິດຕັ້ງ Vector Database ແບບ Local ດ້ວຍ ChromaDB
ການຕິດຕັ້ງ ແລະ ນຳໃຊ້ Vector Database ແບບ Local ດ້ວຍ ChromaDB ສຳລັບນັກພັດທະນາ
ໃນຍຸກທີ່ AI ແລະ Large Language Models (LLMs) ກຳລັງເຂົ້າມາມີບົດບາດສຳຄັນ, ໜຶ່ງໃນເຕັກໂນໂລຊີທີ່ນັກພັດທະນາ (Developers) ຕ້ອງຮູ້ຈັກແມ່ນ “Vector Database”. ລອງນຶກພາບວ່າທ່ານກຳລັງສ້າງ Chatbot ສຳລັບຕອບຄຳຖາມນັກທ່ອງທ່ຽວທີ່ມາທ່ຽວງານບຸນທາດຫຼວງ ຫຼື ສ້າງລະບົບຄົ້ນຫາຂໍ້ມູນສິນຄ້າສຳລັບ SME ໃນລາວ. ການຈະເຮັດໃຫ້ AI ເຂົ້າໃຈ ແລະ ຈື່ຈຳຂໍ້ມູນເຫຼົ່ານີ້ໄດ້, ພວກເຮົາຈຳເປັນຕ້ອງປ່ຽນຂໍ້ຄວາມໃຫ້ເປັນຕົວເລກ (Embeddings) ແລະ ເກັບໄວ້ໃນຖານຂໍ້ມູນພິເສດ.
ສຳລັບບົດຄວາມນີ້, ພວກເຮົາຈະມາເຈາະເລິກວິທີການຕິດຕັ້ງ ແລະ ນຳໃຊ້ ChromaDB ເຊິ່ງເປັນ Vector Database ທີ່ສາມາດແລ່ນແບບ Local ໄດ້ຢ່າງງ່າຍດາຍຜ່ານ Python.
Vector Database ແມ່ນຫຍັງ? ແລະ ເປັນຫຍັງຈຶ່ງສຳຄັນ?
Vector DB ແມ່ນຖານຂໍ້ມູນທີ່ຖືກອອກແບບມາເພື່ອເກັບຂໍ້ມູນໃນຮູບແບບຂອງ Vector (ອະເຣຂອງຕົວເລກຫຼາຍມິຕິ). ເມື່ອເຮົາໃຊ້ AI Model ປ່ຽນຂໍ້ຄວາມເປັນ Vector (ຂະບວນການນີ້ເອີ້ນວ່າ Embedding), ຂໍ້ຄວາມທີ່ມີຄວາມໝາຍກ່ຽວຂ້ອງກັນຈະມີຄ່າຕົວເລກທີ່ຢູ່ໃກ້ຄຽງກັນ.
ຕົວຢ່າງໃນສະພາບແວດລ້ອມບ້ານເຮົາ: ຖ້າເຮົາປ່ຽນຄຳວ່າ “ຕຳໝາກຫຸ່ງ” ແລະ “ເຂົ້າປຽກເສັ້ນ” ເປັນ Vector, ພວກມັນຈະຢູ່ໃກ້ກັນໃນ Vector Space ເພາະເປັນໝວດໝູ່ອາຫານ. ແຕ່ຈະຢູ່ຫ່າງໄກຈາກຄຳວ່າ “ສະພາບລົດຕິດແຖວດົງປ່າລານໃນຕອນແລງ”. ນີ້ຄືຫຼັກການຂອງ Semantic Search (ການຄົ້ນຫາຕາມຄວາມໝາຍ) ທີ່ຊ່ວຍໃຫ້ແອັບພລິເຄຊັນຂອງທ່ານຄົ້ນຫາຂໍ້ມູນໄດ້ຢ່າງຊານສະຫຼາດ.
ເປັນຫຍັງຕ້ອງເລືອກ ChromaDB?
ສຳລັບນັກພັດທະນາລະດັບກາງ (Intermediate) ທີ່ຕ້ອງການຕໍ່ຍອດທັກສະ, ChromaDB ແມ່ນຕົວເລືອກທີ່ດີເລີດດ້ວຍເຫດຜົນດັ່ງນີ້:
- Local-first (ແລ່ນໃນເຄື່ອງ): ບໍ່ຈຳເປັນຕ້ອງເພິ່ງພາ Cloud server, ເໝາະສຳລັບການທົດລອງ, ຫຼຸດຕົ້ນທຶນ ແລະ ຮັກສາຄວາມປອດໄພຂອງຂໍ້ມູນ.
- Python Integration: ຮອງຮັບ Python ໄດ້ຢ່າງສົມບູນແບບ ແລະ ເຊື່ອມຕໍ່ກັບ Frameworks ຍອດຮິດຄື LangChain ແລະ LlamaIndex ໄດ້ງ່າຍ.
- Built-in Embeddings: ມີ Model ສຳລັບເຮັດ Embedding ມາໃຫ້ໃນຕົວ, ບໍ່ຕ້ອງເສຍເວລາເຊື່ອມຕໍ່ API ພາຍນອກໃນໄລຍະເລີ່ມຕົ້ນ.
ຂັ້ນຕອນການຕິດຕັ້ງ ແລະ ນຳໃຊ້ບົນ Python
1. ການຕິດຕັ້ງ (Installation)
ເລີ່ມຕົ້ນດ້ວຍການເປີດ Terminal ແລ້ວຕິດຕັ້ງແພັກເກັດຜ່ານ pip:
pip install chromadb
2. ການສ້າງ Client ແລະ Collection
ໃນ ChromaDB, “Collection” ຈະປຽບເໝືອນ Table ໃນຖານຂໍ້ມູນ Relational ປົກກະຕິ. ເຮົາຈະສ້າງ Persistent Client ເພື່ອໃຫ້ຂໍ້ມູນຖືກບັນທຶກລົງໃນຮາດດິດຂອງເຄື່ອງເຮົາ.
import chromadb
# ສ້າງ Client ເພື່ອເກັບຂໍ້ມູນໄວ້ໃນໂຟນເດີທ້ອງຖິ່ນ (Local)
client = chromadb.PersistentClient(path="./lao_tourism_db")
# ສ້າງ ຫຼື ດຶງຂໍ້ມູນ Collection
collection = client.get_or_create_collection(name="lao_places")
print("ສ້າງ Collection ສຳເລັດແລ້ວ!")
3. ການເພີ່ມຂໍ້ມູນ (Adding Data)
ດຽວນີ້, ເຮົາຈະທົດລອງເພີ່ມຂໍ້ມູນກ່ຽວກັບສະຖານທີ່ໃນລາວ. ສັງເກດວ່າເຮົາພຽງແຕ່ສົ່ງ Text ເຂົ້າໄປ, ChromaDB ຈະທຳການປ່ຽນ Text ເປັນ Vectors ໃຫ້ອັດຕະໂນມັດ ໂດຍໃຊ້ Model ເລີ່ມຕົ້ນຂອງມັນ (all-MiniLM-L6-v2).
documents = [
"ພະທາດຫຼວງແມ່ນສະຖານທີ່ສັກສິດ ແລະ ເປັນສັນຍາລັກຂອງນະຄອນຫຼວງວຽງຈັນ",
"ນ້ຳຕົກຕາດຄອນພະເພັງ ແມ່ນນ້ຳຕົກທີ່ໃຫຍ່ທີ່ສຸດໃນແມ່ນ້ຳຂອງ ຢູ່ແຂວງຈຳປາສັກ",
"ການປູກກາເຟຢູ່ພູພຽງບໍລະເວນ ເມືອງປາກຊ່ອງ ມີຊື່ສຽງລະດັບໂລກ ດ້ວຍດິນພູໄຟທີ່ອຸດົມສົມບູນ",
"ສະພາບຈະລາຈອນຢູ່ສາຍທາງໄກສອນ ພົມວິຫານ ມັກຈະແອອັດໃນຊົ່ວໂມງເລັ່ງດ່ວນ"
]
# ການໃສ່ metadata ຈະຊ່ວຍໃຫ້ເຮົາກັ່ນຕອງຂໍ້ມູນ (Filter) ໄດ້ງ່າຍຂຶ້ນພາຍຫຼັງ
metadatas = [
{"category": "culture", "location": "Vientiane"},
{"category": "nature", "location": "Champasak"},
{"category": "agriculture", "location": "Champasak"},
{"category": "traffic", "location": "Vientiane"}
]
ids = ["doc1", "doc2", "doc3", "doc4"]
# ບັນທຶກຂໍ້ມູນລົງ Collection
collection.add(
documents=documents,
metadatas=metadatas,
ids=ids
)
print("ເພີ່ມຂໍ້ມູນທັງໝົດລົງໃນຖານຂໍ້ມູນສຳເລັດແລ້ວ!")
4. ການຄົ້ນຫາຂໍ້ມູນທີ່ກ່ຽວຂ້ອງ (Semantic Search)
ມາຮອດສ່ວນທີ່ມ່ວນທີ່ສຸດ! ລອງຄົ້ນຫາດ້ວຍຄຳສັບທີ່ກ່ຽວຂ້ອງ ເຊັ່ນ “ສະຖານທີ່ທຳມະຊາດໃກ້ແມ່ນ້ຳໃນພາກໃຕ້”. ເຖິງວ່າເຮົາຈະບໍ່ໄດ້ພິມຄຳວ່າ “ນ້ຳຕົກຕາດຄອນພະເພັງ” ຫຼື “ຈຳປາສັກ” ກົງໆ, ແຕ່ Vector DB ຈະຄຳນວນຫາຄວາມຄ້າຍຄືກັນທາງຄະນິດສາດ ແລະ ສົ່ງຜົນລາຍທີກົງກັບຄວາມໝາຍທີ່ສຸດມາໃຫ້.
results = collection.query(
query_texts=["ສະຖານທີ່ທຳມະຊາດໃກ້ແມ່ນ້ຳໃນພາກໃຕ້"],
n_results=1 # ຂໍຜົນລັດທີ່ໃກ້ຄຽງທີ່ສຸດ 1 ອັນດັບ
)
print("--- ຜົນການຄົ້ນຫາທີ່ກົງກັບຄວາມໝາຍທີ່ສຸດ ---")
print(f"Document: {results['documents'][0][0]}")
print(f"Metadata: {results['metadatas'][0][0]}")
ຜົນທີ່ໄດ້ຮັບຈະດຶງເອົາເອກະສານກ່ຽວກັບ “ນ້ຳຕົກຕາດຄອນພະເພັງ…” ອອກມາສະແດງເຊິ່ງຖືວ່າມີຄວາມແມ່ນຍຳສູງຫຼາຍ.
Key Takeaways (ຂໍ້ສັງເກດສຳຄັນ)
- Vector Database ຄືກຸນແຈສຳຄັນຂອງ RAG: ຫາກທ່ານຕ້ອງການເຮັດລະບົບ Retrieval-Augmented Generation ໃຫ້ LLM ສາມາດດຶງຂໍ້ມູນພາຍໃນອົງກອນໄປຕອບຄຳຖາມ, Vector DB ຄືເຕັກໂນໂລຊີຫຼັກທີ່ຂາດບໍ່ໄດ້.
- ChromaDB ເໝາະສຳລັບການເລີ່ມຕົ້ນ: ມັນເປັນເຄື່ອງມືທີ່ຍອດຢ້ຽມສຳລັບນັກພັດທະນາໃນລາວ ທີ່ຕ້ອງການສ້າງ Prototype ຫຼື ແອັບພລິເຄຊັນຂະໜາດນ້ອຍເຖິງກາງ ໂດຍບໍ່ຕ້ອງກັງວົນເລື່ອງຄ່າໃຊ້ຈ່າຍເທີງ Cloud.
- ຢ່າເບິ່ງຂ້າມ Metadata: ການຈັດເກັບ Metadata (ເຊັ່ນ: ທີ່ຕັ້ງ, ໝວດໝູ່) ໄປພ້ອມກັບ Embedding ຈະຊ່ວຍໃຫ້ການ Query ມີປະສິດທິພາບ. ຕົວຢ່າງ: ທ່ານສາມາດຄົ້ນຫາສະເພາະເອກະສານກ່ຽວກັບກະສິກຳເມືອງປາກຊ່ອງ ໂດຍການໃຊ້ Metadata Filter.
ບົດສະຫຼຸບ
ການນຳໃຊ້ ChromaDB ຮ່ວມກັບ Python ເປັນການເປີດປະຕູສູ່ນະວັດຕະກຳໃໝ່ໆສຳລັບນັກພັດທະນາຊາວລາວ. ບໍ່ວ່າທ່ານຈະສ້າງລະບົບຜູ້ຊ່ວຍສະເໝືອນຈິງ (Virtual Assistant) ສຳລັບການທ່ອງທ່ຽວ, ລະບົບວິເຄາະຂໍ້ມູນປູກຝັງຂອງຊາວກະສິກອນ, ຫຼື ຖານຂໍ້ມູນຄວາມຮູ້ພາຍໃນອົງກອນ, ການມີ Vector DB ທີ່ສາມາດຕັ້ງຄ່າໄດ້ງ່າຍພາຍໃນບໍ່ເທົ່າໃດນາທີ ຈະຊ່ວຍປະຢັດເວລາໃນການພັດທະນາໄດ້ຢ່າງມະຫາສານ. ຢ່າລືມນຳເອົາ Code ຂ້າງເທິງນີ້ໄປທົດລອງ ແລະ ປັບໃຊ້ກັບໂປຣເຈັກຂອງທ່ານເອງ ເພື່ອຍົກລະດັບແອັບພລິເຄຊັນຂອງທ່ານໃຫ້ມີຄວາມສະຫຼາດຫຼາຍຍິ່ງຂຶ້ນ.