Tag: Vector Store

  • สร้างระบบ Q&A จากเอกสารด้วย LangChain RAG Chain

    สร้างระบบ Q&A จากเอกสารด้วย LangChain RAG Chain

    เรากำลังเข้าสู่ขั้นตอนสุดท้าย: ให้ AI ตอบคำถามจากเอกสารที่เราอัปโหลด

    ในตอนที่แล้ว เราได้:

    1. โหลดเอกสาร (Load)
    2. แบ่งข้อมูลเป็นชิ้นเล็ก ๆ (Split)
    3. แปลงเป็นตัวเลข (Embedding)
    4. เก็บในฐานข้อมูลเวกเตอร์ (Vector Store)

    ในตอนนี้ เราจะ
    ➡️ สร้างระบบถาม–ตอบ (Q&A System) ที่ทำให้ AI อ่านข้อมูลจากฐานข้อมูลเวกเตอร์ แล้วตอบคำถามของเรา อย่างแม่นยำและสุภาพ


    💡 คำศัพท์สำคัญที่ต้องรู้

    คำศัพท์ความหมาย
    Retrieverตัวค้นหาข้อมูลจาก Vector Store ที่ “ใกล้เคียง” กับคำถามของเรา
    Chainโครงสร้างที่เชื่อมทุกอย่างเข้าด้วยกัน (Retriever + Prompt + AI Model + Output)
    ChatPromptTemplateแบบฟอร์มคำสั่งที่ระบุว่า AI จะมี “บทบาทอะไร” และจะตอบ “คำถาม” ยังไง
    System Messageข้อความเบื้องหลังที่กำหนดพฤติกรรมของ AI
    Human Messageข้อความที่ผู้ใช้งานส่งเข้ามา เช่น “ปีที่ก่อตั้งบริษัทคือเมื่อไร?”

    🔧 ขั้นตอนการสร้างระบบถาม–ตอบ (RAG Chain)

    ✅ 1. ออกแบบ Prompt Template

    ChatPromptTemplate.from_messages([
        SystemMessage(content="ใช้ข้อมูลจากเอกสารในการตอบคำถามอย่างสุภาพและกระชับ"),
        HumanMessage(content="คำถาม: {question} \nข้อมูลที่เกี่ยวข้อง: {context}")
    ])
    

    💬 System Message: บอกให้ AI ตอบ “จากเอกสาร” และตอบอย่างสุภาพ
    💬 Human Message: กรอบคำถาม + ข้อมูลที่ AI จะใช้ตอบ


    ✅ 2. สร้าง AI Model (LLM)

    ChatOpenAI(model="gpt-4-mini")
    

    ใช้โมเดล GPT ที่เราตั้งค่าไว้ เช่น GPT-3.5 หรือ GPT-4-mini
    จะทำหน้าที่ “คิดคำตอบ” จากสิ่งที่เราป้อนเข้าไป


    ✅ 3. สร้าง Retriever

    retriever = vectorstore.as_retriever()
    

    ดึงข้อมูลที่เกี่ยวข้องจากฐานข้อมูลเวกเตอร์ โดยเทียบกับคำถามที่ถามเข้ามา


    ✅ 4. สร้าง Chain

    chain = (
        {"context": retriever, "question": RunnablePassthrough()}
        | prompt
        | llm
        | StrOutputParser()
    )
    

    อธิบาย:

    • "context" ดึงข้อมูลจาก Vector Store ด้วย retriever
    • "question" รับคำถามโดยตรงจากผู้ใช้
    • แล้วป้อนทั้งหมดเข้า Prompt → AI Model → แสดงผล

    ✅ 5. เรียกใช้งาน Chain

    result = chain.invoke("ผู้ก่อตั้งบริษัทคือใคร")
    print(result)
    

    เราใส่คำถามไปแบบธรรมดา แต่เบื้องหลัง AI จะไป “ค้น + สรุป + ตอบ” ให้เอง


    🔍 ตัวอย่างคำถามที่เราทดสอบในคลิป

    คำถามคำตอบที่ AI ตอบกลับ
    ข้อมูลสำคัญในเอกสารมีอะไรบ้าง?ชื่อบริษัท ABC, จำหน่ายของเล่นและหนังสือ, ผู้ก่อตั้ง, ที่อยู่, อีเมล ฯลฯ
    ผู้ก่อตั้งบริษัทคือใคร?กล้องรัชยาม ค่ะ
    มีสินค้าอะไรบ้าง?ของเล่น, โมเดล, ตุ๊กตา, บริการพรีออเดอร์ ฯลฯ

    ✨ คำตอบทั้งหมดเป็นมิตร และมีคำลงท้ายแบบสุภาพ (ค่ะ / ครับ) ตามที่เรากำหนดใน System Message


    🧭 Workflow โดยรวม

    ขั้นตอนคำอธิบาย
    Loadโหลดไฟล์เอกสาร
    Splitแบ่งข้อความเป็นส่วนย่อย
    Embedแปลงเป็นเวกเตอร์
    Storeเก็บในฐานข้อมูลเวกเตอร์
    Retrieveดึงข้อมูลที่เกี่ยวข้องจาก Store
    Promptสร้างคำสั่งให้ AI เข้าใจ
    Modelส่งข้อมูลให้โมเดลประมวลผล
    Outputได้คำตอบเป็นข้อความ

    🤔 ประโยชน์ของ RAG Chain คืออะไร?

    • ✅ ทำให้ AI ตอบคำถามจากเอกสารภายในองค์กรได้
    • ✅ ลดปัญหา “ตอบผิด” หรือ Hallucination
    • ✅ ไม่ต้องเทรนโมเดลใหม่ แค่โหลดเอกสารใหม่ก็ใช้ได้เลย
    • ✅ เหมาะสำหรับสร้าง Chatbot ถาม–ตอบภายในองค์กร เช่น
      • ฐานข้อมูลสินค้า
      • คู่มือการใช้งาน
      • นโยบายบริษัท
    📢 แชร์บทความนี้ให้เพื่อนอ่านสิ!
  • แปลงข้อความเป็นเวกเตอร์ด้วย Embedding & Vector Store

    แปลงข้อความเป็นเวกเตอร์ด้วย Embedding & Vector Store


    🧠 ตอนนี้เรากำลังทำอะไร?

    หลังจากตอนก่อนหน้านี้ เราได้:

    1. โหลดเอกสาร เช่น data.txt ที่มีข้อมูลขององค์กร
    2. แบ่งข้อความ ในเอกสารออกเป็นชิ้นเล็กๆ (เรียกว่า chunks)

    ในตอนนี้ เราจะ:

    🔁 แปลงข้อความแต่ละ chunk เป็นตัวเลข (Vector)
    🧠 เพื่อให้ AI เข้าใจข้อมูล
    💾 แล้วนำไปเก็บไว้ใน Vector Store เพื่อใช้ค้นหาและตอบคำถามภายหลัง


    💡 แล้ว Vector คืออะไร?

    ให้นึกง่ายๆ ว่า:

    • ข้อความ = สิ่งที่มนุษย์เข้าใจ
    • Vector = ตัวเลขหลายๆ ตัวที่ AI เข้าใจ

    เช่น
    ข้อความ: "กล้องถ่ายรูป" → ถูกแปลงเป็นตัวเลขแบบนี้:
    [0.384, -0.277, 0.008, ..., 0.695]

    AI ไม่เข้าใจคำว่า “กล้อง” แต่เข้าใจว่ามันคือชุดตัวเลขที่มีความหมาย


    🔧 ขั้นตอนการทำ Embedding & Vector Store

    ✅ 1. แปลงข้อความเป็นเวกเตอร์ (Embeddings)

    Library ที่ใช้:

    from langchain.embeddings import OpenAIEmbeddings
    

    สร้างตัวแปลง:

    embedding = OpenAIEmbeddings()
    

    💡 ใช้บริการของ OpenAI ซึ่งต้องมี API Key
    (สามารถโหลดจาก .env ได้โดยใช้ load_dotenv())

    เมื่อเราแปลงข้อความแล้ว ผลลัพธ์ที่ได้จะเป็น “ชุดตัวเลข” หรือ “เวกเตอร์”
    ลองส่งคำว่า "กล้อง" เข้าไป ก็จะได้เวกเตอร์ยาวๆ กลับมา


    ✅ 2. สร้าง Vector Store สำหรับเก็บเวกเตอร์

    Library ที่ใช้:

    from langchain.vectorstores import FAISS
    

    FAISS เป็นเครื่องมือจาก Facebook สำหรับจัดเก็บและค้นหาเวกเตอร์อย่างรวดเร็ว

    ติดตั้งแบบใช้ CPU (แนะนำสำหรับผู้เรียนทั่วไป):

    pip install faiss-cpu
    

    ถ้าใช้ GPU (กรณีมีการ์ดจอ NVIDIA):

    pip install faiss-gpu
    

    ✅ 3. แปลง chunks ทั้งหมดเป็นเวกเตอร์ และเก็บลง Vector Store

    สมมุติว่าเราแบ่งข้อความไว้ในตัวแปร chunks

    vectorstore = FAISS.from_documents(
        documents=chunks,
        embedding=embedding
    )
    

    📦 chunks คือข้อมูลที่เราต้องการให้ AI เข้าใจ
    🧠 embedding คือสิ่งที่แปลงข้อความเป็นตัวเลข
    💾 vectorstore คือคลังเก็บเวกเตอร์


    ✅ 4. ดึงข้อมูลจาก Vector Store (Retrieval)

    หากผู้ใช้มีคำถาม เช่น
    “ปีที่ก่อตั้งของบริษัท ABC คือเมื่อไร?”

    เราต้องการดึงเวกเตอร์จากคำถามนี้ แล้วไปเปรียบเทียบกับสิ่งที่เคยเก็บไว้

    retriever = vectorstore.as_retriever()
    

    ต่อไป เราก็จะใช้ retriever ใน Chain เพื่อให้ AI ค้นหาข้อมูลที่ใกล้เคียง แล้วตอบกลับได้อย่างแม่นยำ


    🧭 Workflow สรุปอีกครั้ง

    ขั้นตอนคำอธิบาย
    1. โหลดเอกสารเช่น data.txt
    2. แบ่งข้อความแบ่งเป็น chunks ยาว 100 ตัวอักษร
    3. สร้าง Embeddingใช้ OpenAIEmbeddings แปลงเป็นเวกเตอร์
    4. เก็บเวกเตอร์ใช้ FAISS เก็บไว้ใน vectorstore
    5. ดึงข้อมูลใช้ retriever ค้นหาเวกเตอร์ที่ใกล้กับคำถามที่ได้รับ

    🧪 ทดลอง: แปลงคำว่า “กล้อง” เป็นเวกเตอร์

    result = embedding.embed_query("กล้อง")
    print(result)
    

    ผลลัพธ์คือเวกเตอร์ยาวๆ เช่น:

    [0.384, -0.277, 0.008, ..., 0.695]
    

    🔄 ประโยชน์ของการมี Vector Store

    • ช่วยให้ AI “จดจำ” และ “อ้างอิง” ข้อมูลภายในองค์กรได้
    • รองรับการค้นหาข้อมูลตามคำถาม (Question → Search → Answer)
    • ไม่ต้องเทรนโมเดลใหม่ เพียงแค่เพิ่มเอกสารและสร้างเวกเตอร์
    📢 แชร์บทความนี้ให้เพื่อนอ่านสิ!
  • 🧠 RAG คืออะไร?

    🧠 RAG คืออะไร?

    RAG เปรียบเสมือนการ “เติมความรู้สดใหม่” ให้กับ AI


    ลองนึกภาพแบบนี้นะครับ…

    คุณมี AI เป็นเลขาส่วนตัวที่ฉลาดมาก แต่เธอเคยเรียนมาแค่ถึงปี 2023
    แล้ววันหนึ่งคุณถามไปว่า…

    “นโยบายของรัฐบาลใหม่ล่าสุดในปี 2025 คืออะไร?”

    AI ก็ตอบคุณไม่ได้ เพราะเธอไม่เคยเรียนเรื่องนี้!

    ปัญหา คือ AI ที่เราใช้ทุกวันนี้ (เช่น ChatGPT, Claude ฯลฯ) จะรู้เฉพาะเรื่องที่ “เคยฝึกไว้ก่อน” เท่านั้น
    แต่จะไม่รู้ข้อมูลใหม่ล่าสุด หรือ “ข้อมูลเฉพาะของคุณ” เช่น เอกสารบริษัท, คู่มือยา, ข้อมูลคนไข้ ฯลฯ


    🧪 แล้ว RAG แก้ปัญหานี้ยังไง?

    RAG คือ “ตัวกลาง” ที่คอยช่วย AI ค้นหาข้อมูลล่าสุดให้ก่อนจะตอบ

    มันทำตัวเหมือนเลขาชั้นเทพที่…

    • 📥 โหลดเอกสาร ที่คุณมี (เช่น PDF, Word, คู่มือ ฯลฯ)
    • ✂️ ตัดข้อมูลเป็นส่วนเล็กๆ เพื่อจัดการง่าย
    • 🔢 แปลงข้อมูลเป็นรหัสลับ (ตัวเลขที่ AI เข้าใจได้)
    • 📦 เก็บข้อมูลเหล่านั้นไว้ใน “กล่องความจำ” (เรียกว่า Vector Store)
    • 🔍 เมื่อคุณถามอะไร → มันจะ “ไปค้นหาคำตอบ” จากกล่อง แล้วเอามาให้ AI ตอบแทน

    📌 ยกตัวอย่างให้เห็นภาพ

    สมมติคุณมีเอกสารชื่อ “นโยบายโรงพยาบาลส่งเสริมสุขภาพตำบล ปี 2567”

    แล้วคุณถาม AI ว่า

    “แผนการดูแลผู้สูงอายุในปีนี้มีอะไรบ้าง?”

    AI ทั่วไปจะตอบไม่ได้ เพราะไม่เคยเรียนเอกสารฉบับนี้

    แต่ถ้าคุณใช้ RAG:

    1. RAG จะ เปิดเอกสารนั้น
    2. ตัดข้อมูลเป็นย่อๆ (เช่น ย่อหน้า)
    3. แปลงเป็นรหัสที่ AI เข้าใจ
    4. เก็บไว้ในคลัง
    5. แล้ว ค้นหาสิ่งที่ใกล้เคียงกับคำถามของคุณ
    6. ส่งให้ AI สรุปคำตอบอย่างชาญฉลาด

    🔄 เปรียบเทียบแบบเข้าใจง่าย

    ถ้าไม่มี RAGถ้ามี RAG
    AI ตอบจากความจำเก่าAI ค้นจากข้อมูลจริงที่คุณป้อน
    ข้อมูลอาจล้าสมัยข้อมูลอัปเดตได้เสมอ
    ตอบมั่ว (Hallucinate)ตอบตรงจากแหล่งอ้างอิง
    ไม่รู้เรื่องขององค์กรรู้ลึกเรื่องของคุณทันที

    🧩 แล้วมันทำงานยังไง

    1. โหลดไฟล์ – PDF หรือ Word, Excel อะไรก็ได้
    2. ตัดไฟล์เป็นย่อหน้า – เพื่อให้ค้นหาได้ง่าย
    3. แปลงข้อความเป็นรหัสลับ – ให้ AI เข้าใจ
    4. เก็บในคลังข้อมูล (vector store)
    5. เวลาเราถาม – ระบบจะไปค้นหาข้อมูลที่ตรงกับคำถาม
    6. AI ใช้ข้อมูลนั้นมาตอบเรา

    🎯 ใช้ RAG ไปทำอะไรได้?

    • สร้าง แชทบอทที่ตอบคำถามเอกสารภายใน เช่น HR, ฝ่ายกฎหมาย, คู่มือสินค้า
    • ให้เภสัชกรใช้ถามข้อมูลยา จากเอกสารของโรงพยาบาลหรือ อย.
    • สรุปรายงานจากไฟล์ Excel โดยไม่ต้องเปิดเอง
    • ค้นหาคำตอบจากเอกสารขนาดใหญ่ เช่น แผนงาน, นโยบายองค์กร, วิจัย

    ✅ จุดเด่นของ RAG

    • ไม่ต้องฝึก AI ใหม่ (ประหยัด)
    • อัปเดตเอกสารได้ตลอดเวลา
    • ลดปัญหา AI มโนหรือพูดผิด
    • ดึงความรู้จากสิ่งที่คุณมี ไม่ใช่แค่ที่ AI เคยเรียน

    🛠️ แล้ว LangChain เกี่ยวอะไร?

    LangChain คือเครื่องมือที่ช่วยคุณ “เชื่อมต่อ” ทุกอย่างให้ทำงานอัตโนมัติ:

    • โหลดไฟล์
    • ตัดข้อมูล
    • แปลงเป็นเวกเตอร์
    • เก็บคลัง
    • ค้นหา
    • ส่งไปให้ AI

    คุณไม่ต้องทำเองทีละขั้น ขอแค่มีเอกสาร + รู้ว่าอยากถามอะไร
    LangChain จะจัดการให้หมดในเบื้องหลังครับ


    🔚 สรุป

    ถ้าคุณมีข้อมูลอยู่แล้ว (เช่น เอกสารบริษัท, คู่มือ, รายงานยา ฯลฯ)
    และอยากให้ AI ช่วยตอบคำถามจากข้อมูลเหล่านั้น อย่างแม่นยำและอัปเดตได้เสมอ

    ✅ ใช้ RAG คือคำตอบ

    มันเหมือนกับให้ AI “อ่านไฟล์ของเรา” แล้วค่อยตอบ ไม่ใช่ตอบมั่วจากความจำเก่าที่ AI กวาดมาแล้วเป็นช่วงๆ เท่านั้น

    📢 แชร์บทความนี้ให้เพื่อนอ่านสิ!