Tag: Retriever

  • สร้างระบบ 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 ถาม–ตอบภายในองค์กร เช่น
      • ฐานข้อมูลสินค้า
      • คู่มือการใช้งาน
      • นโยบายบริษัท
    📢 แชร์บทความนี้ให้เพื่อนอ่านสิ!