Tag: LangChain

  • สร้างระบบ 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)
    • ไม่ต้องเทรนโมเดลใหม่ เพียงแค่เพิ่มเอกสารและสร้างเวกเตอร์
    📢 แชร์บทความนี้ให้เพื่อนอ่านสิ!
  • 🧩 Text Splitters คืออะไร?

    🧩 Text Splitters คืออะไร?

    Text Splitter คือเทคนิคในการ “หั่น” ข้อความขนาดใหญ่จากเอกสาร เช่น .txt, .pdf, หรือเอกสารรายงานต่าง ๆ ให้กลายเป็น ชิ้นส่วนย่อย ๆ (Chunks) ที่มีขนาดเล็กลง

    📌 ทำไมต้องแบ่ง?

    1. AI ไม่สามารถอ่านเอกสารยาวๆ ได้ในครั้งเดียว
      เช่น ถ้าเรามีรายงาน 50 หน้า โมเดล LLM (เช่น GPT) ไม่สามารถอ่านได้ครบ จึงต้องหั่นเป็นส่วนๆ ก่อน
    2. เพื่อให้เข้าใจบริบทได้ดีขึ้น
      การมี Chunk ที่มีขนาดเหมาะสมช่วยให้ AI เข้าใจคำถามกับเนื้อหาที่เกี่ยวข้องในระดับดีขึ้น
    3. เตรียมสำหรับการแปลงเป็นเวกเตอร์ (Vectorization)
      ซึ่งจะใช้ในกระบวนการ RAG (Retrieval-Augmented Generation) ต่อไป

    🛠️ องค์ประกอบสำคัญของ Text Splitter

    เมื่อแบ่งข้อความ เราจะต้องกำหนด 2 ค่า:

    พารามิเตอร์ความหมายตัวอย่าง
    chunk_sizeขนาดของแต่ละชิ้น (จำนวนตัวอักษร)เช่น 100 ตัวอักษรต่อ 1 chunk
    chunk_overlapจำนวนตัวอักษรที่ซ้ำกันระหว่างชิ้นก่อนหน้าและชิ้นถัดไปเช่น 50 ตัวอักษร

    📍 การซ้อนทับ (Overlap) จะช่วย “รักษาบริบท” เช่น หากบรรทัดหนึ่งขาดไปบางคำ การมีบางคำซ้ำมาจาก chunk ก่อนหน้า จะช่วยให้โมเดลเข้าใจต่อเนื่องได้ดีขึ้น


    ⚙️ ขั้นตอนการใช้งาน Text Splitter ใน Python + LangChain

    1. Import Library ที่ใช้

    from langchain.text_splitter import RecursiveCharacterTextSplitter
    

    2. สร้าง Text Splitter

    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=100,       # ขนาดชิ้นละ 100 ตัวอักษร
        chunk_overlap=0       # ไม่มีการซ้อนทับ
    )
    

    ✅ ถ้าอยากให้ “มีการซ้อนทับ” ก็เปลี่ยน chunk_overlap=50 (หรือค่าที่ต้องการ)


    3. ใช้ Text Splitter กับข้อมูลเอกสารที่โหลดไว้แล้ว

    สมมุติว่าเรามีเอกสารชื่อ data.txt ซึ่งถูกโหลดไว้ในตัวแปร documents แล้ว:

    chunks = text_splitter.split_documents(documents)
    

    หลังจากรันคำสั่งนี้ เราจะได้ chunks เป็น list ของข้อความย่อยๆ ที่ถูกแบ่งจากเอกสารต้นฉบับ


    4. ดูผลลัพธ์ที่ได้

    for i, chunk in enumerate(chunks):
        print(f"Chunk {i+1}:")
        print(chunk.page_content)
        print("---------------------")
    

    ผลลัพธ์ที่ได้:

    Chunk 1:
    ชื่อบริษัท: ABC
    ประเภทธุรกิจ: ของเล่นและหนังสือการ์ตูน
    ผู้ก่อตั้ง: หมี
    ---------------------
    Chunk 2:
    ผู้ก่อตั้ง: หมี
    ปีที่ก่อตั้ง: 2566
    ---------------------
    Chunk 3:
    บริการ: จำหน่ายของเล่น, หนังสือการ์ตูน
    ---------------------
    ...
    

    🟡 ถ้าเราตั้ง chunk_overlap=50 จะเห็นว่าเนื้อหาบางส่วน “ซ้ำ” ใน chunk ถัดไป — เพื่อให้ AI เข้าใจบริบทได้ดีขึ้น


    🧠 เคล็ดลับสำหรับคนเริ่มต้น

    • ถ้าไฟล์คุณมีข้อมูลแค่ 1-2 หน้า อาจยังไม่จำเป็นต้องแบ่ง
    • ถ้าเอกสารยาวเกิน 500 ตัวอักษรขึ้นไป แนะนำให้ใช้ Text Splitter
    • chunk_size ที่ดีมักอยู่ระหว่าง 300-1000 ตัวอักษร ขึ้นกับความซับซ้อนของเนื้อหา
    • ควรทดลองปรับ chunk_overlap เอง (เช่น 0, 20, 50) แล้วดูผลลัพธ์

    🧭 สรุปขั้นตอน Workflow โดยย่อ

    ขั้นตอนคำอธิบาย
    1. โหลดไฟล์ใช้ TextLoader โหลดไฟล์ data.txt
    2. สร้าง Text Splitterตั้งค่า chunk_size และ chunk_overlap
    3. แบ่งเอกสารใช้ split_documents() กับเอกสารที่โหลดมา
    4. ตรวจสอบผลลัพธ์ปริ้นออกมาดูว่าแบ่งได้กี่ chunk แต่ละ chunk มีข้อมูลอะไรบ้าง
    5. เตรียมไปใช้ในขั้นตอนต่อไปเช่น แปลงเป็นเวกเตอร์ → เก็บในฐานข้อมูล → ใช้กับ AI
    📢 แชร์บทความนี้ให้เพื่อนอ่านสิ!
  • Document Loader คืออะไร? ให้ AI อ่านเอกสารคุณได้ง่ายๆ ใน Langchain

    Document Loader คืออะไร? ให้ AI อ่านเอกสารคุณได้ง่ายๆ ใน Langchain

    คือเครื่องมือที่ช่วยให้ AI “อ่านเอกสารของเราได้”

    ลองนึกภาพว่า…

    • คุณมีเอกสารบริษัทเป็นไฟล์ .txt ที่เขียนรายละเอียดธุรกิจของคุณไว้
    • แล้วคุณอยากให้ AI “รู้จักบริษัทของคุณ” แบบลึกซึ้ง เพื่อให้ตอบคำถามได้
    • เช่น “บริษัท ABC ให้บริการอะไร?” หรือ “ใครเป็นผู้ก่อตั้ง?”

    ถ้าจะให้ AI ตอบได้ คุณต้อง “ป้อนเอกสารเข้าไปก่อน”
    ซึ่งตรงนี้เองที่ Document Loader จะเข้ามาช่วยครับ


    ⚙️ ทำงานยังไง?

    1. ติดตั้งตัวช่วย (LangChain Community)
      ให้ AI อ่านเอกสารได้ ต้องติดตั้งตัวช่วยก่อน โดยใช้คำสั่งนี้: bashCopyEditpip install langchain-community
    2. โหลดเอกสารเข้าระบบ
      ในตัวอย่างนี้ อาจารย์ใช้ไฟล์ชื่อ data.txt ซึ่งเป็นไฟล์ .txt ธรรมดา ภายในไฟล์นี้จะมีข้อมูล เช่น: makefileCopyEditชื่อบริษัท: ABC ประเภทธุรกิจ: จำหน่ายของเล่น หนังสือการ์ตูน ผู้ก่อตั้ง: กรรณัสยาม ปีที่ก่อตั้ง: 2566
    3. ใช้ TextLoader อ่านไฟล์
      LangChain มีตัวที่ชื่อว่า TextLoader เอาไว้ใช้ “อ่านไฟล์ข้อความ” โดยต้องระบุ:
      • ชื่อไฟล์ เช่น data.txt
      • ระบบภาษาที่ใช้ (encoding) เช่น utf-8 สำหรับภาษาไทย
    4. โหลดและเก็บข้อมูลไว้ในตัวแปร documents
      เมื่อโหลดแล้ว ระบบจะ “เก็บเอกสารไว้ในความจำ” เพื่อนำไปใช้ต่อ เช่น:
      • แสดงผลบนหน้าจอ
      • แปลงเป็นตัวเลขเพื่อใช้กับ AI
      • เก็บไว้ในฐานข้อมูล (vector store)

    🧪 ตัวอย่างการใช้งาน

    1. คุณมีไฟล์ .txt ที่เก็บข้อมูลธุรกิจของตัวเอง
    2. คุณสั่งให้ LangChain อ่านไฟล์นี้ ด้วย TextLoader
    3. LangChain จะเปิดไฟล์ → อ่านข้อความ → จัดเก็บเข้าไปในตัวแปร
    4. แล้วคุณสามารถเอาข้อมูลที่อ่านได้ ไปให้ AI ใช้ต่อ เช่น:
      • ตอบคำถามเกี่ยวกับบริษัท
      • สรุปบริการที่ให้
      • หรือค้นหาว่าบริษัทตั้งเมื่อไหร่ ฯลฯ

    🧭 Workflow การเขียนโปรแกรม: โหลดเอกสารให้ AI อ่านด้วย LangChain


    🔁 1. เตรียมข้อมูล (Data Preparation)

    📝 สร้างไฟล์ข้อมูลที่ต้องการให้ AI เรียนรู้ เช่น .txt
    ✅ ควรเป็นข้อมูลที่มีความหมาย เช่น โปรไฟล์บริษัท, คำอธิบายบริการ ฯลฯ

    ตัวอย่างไฟล์: data.txt
    เนื้อหาในไฟล์:

    ชื่อบริษัท: ABC  
    ประเภทธุรกิจ: ของเล่นและหนังสือการ์ตูน  
    ผู้ก่อตั้ง: หมี 
    ปีที่ก่อตั้ง: 2566  
    บริการ: จำหน่ายของเล่น, หนังสือการ์ตูน, พรีออเดอร์สินค้าหายาก  
    

    ⚙️ 2. เตรียม Python Script (Environment Setup)

    👨‍💻 สร้างไฟล์ .py สำหรับเขียนคำสั่ง
    และติดตั้งเครื่องมือ LangChain

    คำสั่งติดตั้ง:

    pip install langchain-community
    

    ไฟล์ Python: read.py


    📥 3. โหลดเอกสารด้วย Document Loader

    🧠 ใช้ LangChain ดึงข้อมูลจากไฟล์ .txt เข้า Python เพื่อให้ AI ใช้งานได้

    ขั้นตอนในโค้ด:

    from langchain_community.document_loaders import TextLoader
    
    # โหลดเอกสาร
    loader = TextLoader("data.txt", encoding="utf-8")
    
    # อ่านเนื้อหาแล้วเก็บไว้ในตัวแปร
    documents = loader.load()
    

    📌 ตอนนี้ข้อมูลจาก data.txt ได้ถูกอ่านเข้ามาไว้ในตัวแปร documents


    🔍 4. ทดสอบว่าโหลดข้อมูลได้จริงหรือไม่

    🖨️ ปริ้นดูผลลัพธ์ เพื่อยืนยันว่าเอกสารถูกโหลดมาถูกต้อง

    pythonCopyEditprint(documents)
    

    ผลลัพธ์ที่ได้จะเป็นข้อความจากไฟล์ เช่น:

    [Document(page_content='ชื่อบริษัท: ABC\nประเภทธุรกิจ: ของเล่น...', metadata={'source': 'data.txt'})]
    

    🧩 5. เตรียมใช้ข้อมูลในขั้นตอนต่อไป (Vectorization หรือ Embedding)

    หลังจากโหลดเอกสารแล้ว จะนำข้อมูลนี้ไปใช้ในขั้นตอนต่อไป เช่น:

    • แปลงข้อความเป็นเวกเตอร์ (Embedding)
    • เก็บลง Vector Store
    • สร้างระบบถาม-ตอบ หรือ AI ที่รู้จักข้อมูลองค์กรของเรา

    🗺️ ภาพรวม Workflow แบบ Step-by-Step

    ลำดับขั้นตอนรายละเอียด
    1เตรียมไฟล์ข้อมูลสร้าง .txt ที่มีเนื้อหาให้ AI อ่าน
    2สร้างไฟล์โค้ดใช้ read.py สำหรับเขียนคำสั่ง
    3ติดตั้ง LangChainติดตั้ง langchain-community ด้วย pip
    4โหลดเอกสารใช้ TextLoader เพื่อโหลดเนื้อหาจากไฟล์
    5ตรวจสอบข้อมูลใช้ print() ดูผลลัพธ์ว่าโหลดถูกต้องไหม
    6พร้อมใช้งานต่อข้อมูลที่โหลดแล้วจะถูกใช้ต่อในกระบวนการ AI

    🎯 จุดเด่นที่ควรรู้

    • ใช้งานง่าย: แค่มีไฟล์ .txt และติดตั้งแพ็คเกจนิดเดียว
    • รองรับภาษาไทย: แค่ระบุ encoding="utf-8"
    • ไม่ต้องพิมพ์ข้อมูลใหม่ซ้ำซ้อน: อ่านจากไฟล์ที่มีอยู่แล้ว
    • เป็นขั้นตอนแรกในการใช้ RAG: ถ้าคุณอยากให้ AI รู้ข้อมูลขององค์กร — ต้องเริ่มจากโหลดเอกสารก่อนเสมอ

    🧠 สรุปเข้าใจง่าย

    Document Loader คือ “ประตูด่านแรก” ที่เปิดให้ AI เข้าไปอ่านเอกสารของคุณ
    เมื่ออ่านแล้ว AI จะจำ และนำไปวิเคราะห์ต่อได้ในขั้นตอนถัดไป เช่น สร้างคำตอบแบบแม่นยำหรือสรุปรายงาน


    ถ้าอยากให้ AI อ่านไฟล์ PDF, Word, หรือเว็บไซต์ ก็สามารถใช้ Document Loader แบบอื่นได้เช่นกัน เช่น:

    • PDFLoader สำหรับไฟล์ PDF
    • WebBaseLoader สำหรับหน้าเว็บ
    • DirectoryLoader ถ้ามีหลายไฟล์ในโฟลเดอร์เดียว

    🏁 พร้อมใช้แล้วทำอะไรต่อ?

    หลังจากโหลดเอกสารด้วย TextLoader เสร็จแล้ว ขั้นตอนต่อไปคือ…

    📌 “แปลงข้อความให้เป็นเวกเตอร์” หรือ “รหัสลับที่ AI เข้าใจได้”
    ซึ่งอาจารย์จะสอนต่อในตอน Embedding และ Vector Store ครับ 😊

    📢 แชร์บทความนี้ให้เพื่อนอ่านสิ!
  • 🧠 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 กวาดมาแล้วเป็นช่วงๆ เท่านั้น

    📢 แชร์บทความนี้ให้เพื่อนอ่านสิ!
  • LangChain เบื้องต้น | ทำความเข้าใจ Message Type

    LangChain เบื้องต้น | ทำความเข้าใจ Message Type


    📌 Message Type คืออะไร?

    เวลาเราสนทนากับโมเดล AI อย่าง GPT มันไม่ได้มีแค่ข้อความที่เราพิมพ์เข้าไปกับคำตอบที่ได้กลับมาเท่านั้น — แต่ในระบบเบื้องหลัง มี “รูปแบบของข้อความ (Message Types)” ที่ใช้แยกบทบาทของแต่ละข้อความอย่างชัดเจน เพื่อให้โมเดล AI ตอบสนองได้ถูกบริบท


    🔍 แบ่งออกเป็น 3 ประเภทหลัก

    ประเภทความหมายเปรียบเทียบให้เห็นภาพ
    🛠️ System Messageข้อความลับที่ใช้ “กำหนดบทบาท” หรือ “กติกา” ให้ AI ก่อนเริ่มสนทนาเหมือนกระซิบบอกเพื่อนว่า “วันนี้นายเป็นครูนะ” ก่อนให้เขาไปตอบคำถาม
    👤 Human Message (หรือ User Message)ข้อความที่เราพิมพ์เข้าไปเหมือนการยื่นคำถามให้ AI ว่า “อธิบายเรื่อง AI ให้เข้าใจง่าย”
    🤖 AI Message (หรือ Assistant Message)คำตอบที่ AI ส่งกลับมาเหมือน AI ตอบเราว่า “AI คือสมองของเครื่องที่เรียนรู้และตัดสินใจได้”

    🧠 ทำไมต้องแยก 3 แบบนี้?

    ลองจินตนาการว่า…

    🧑 เราถาม: “โรคซึมเศร้าคืออะไร?”

    ถ้าเราไม่ได้บอกอะไรล่วงหน้าเลย (ไม่มี System Message)
    🤖 AI อาจตอบแบบวิชาการทั่วไป

    แต่ถ้าเราฝัง System Message ว่า…

    “คุณคือจิตแพทย์ที่อธิบายให้ผู้ป่วยฟังเข้าใจง่าย”

    🤖 คำตอบจะเปลี่ยนทันที! อ่อนโยน เข้าใจง่าย และเข้าถึงใจคนไข้


    🎯 ตัวอย่างสถานการณ์ในชีวิตจริง

    สถานการณ์System MessageHuman MessageAI Message
    🌧️ พยากรณ์อากาศคุณคือผู้เชี่ยวชาญด้านอากาศวันนี้ฝนจะตกไหม?มีโอกาสฝนตก 60% ในพื้นที่ของคุณ
    🧑‍🏫 ครูภาษาอังกฤษคุณคือครูสอนภาษาอังกฤษอธิบาย verb to be“Verb to be คือ is, am, are ใช้กับ…”
    📖 นักแปลภาษาแปลทุกข้อความที่ได้รับเป็นภาษาอังกฤษ“แมว”“Cat”
    🧠 นักวิทยาศาสตร์คุณคือผู้เชี่ยวชาญด้านฟิสิกส์อธิบายไฟฟ้ากระแสสลับใน 1 ประโยค“ไฟฟ้ากระแสสลับเปลี่ยนทิศทางตลอดเวลา”

    🔄 สรุปกระบวนการทำงานของ AI ในแบบ LangChain

    1. System Message: ตั้งต้น AI ให้รู้บทบาทหรือสไตล์การตอบ “คุณคือครู”, “คุณคือหมอ”, “ตอบให้เด็กเข้าใจง่าย”
    2. Human Message: ข้อความที่ผู้ใช้งานส่งให้ AI เช่น “ช่วยอธิบายเรื่องโรคซึมเศร้าใน 2 ประโยค”
    3. AI Message: คำตอบที่ AI สร้างขึ้นจากทั้ง 2 บริบทข้างต้น เช่น “โรคซึมเศร้าคือภาวะทางอารมณ์ที่ส่งผลต่อความคิดและพฤติกรรม…”

    🧪 ทดลองง่ายๆ แบบไม่ต้องเขียนโค้ด

    ตัวอย่างหน้าตาของ playground ของ openai ที่มีรูปแบบ message ที่แตกต่างกัน เข้าไปใช้ได้ที่ https://platform.openai.com/playground

    ❓ ถ้าคุณอยากให้ AI ตอบแบบ “คุณหมอ”
    → ใส่ System Message ว่า “คุณคือจิตแพทย์”

    ❓ ถ้าคุณอยากให้ AI แปลภาษาอังกฤษ
    → ใส่ System Message ว่า “โปรดแปลทุกข้อความเป็นภาษาอังกฤษ”

    ❓ ถ้าคุณอยากให้ AI ตอบสั้นๆ 3 คำ
    → ใส่ System Message ว่า “ตอบทุกคำถามใน 3 คำเท่านั้น”


    ⚒️ ประโยชน์ของการใช้ Message Type อย่างมืออาชีพ

    ✅ ทำให้ AI ตอบได้ ตรงบทบาท
    ✅ ควบคุม “น้ำเสียง” และ “ความยาวของคำตอบ” ได้
    ✅ สร้างประสบการณ์ผู้ใช้งานที่ “เหมาะกับบริบท”
    ✅ ใช้กับระบบที่ซับซ้อน เช่น แชทบอท, ระบบแนะนำยา, หรือแอปเรียนรู้


    👨‍🏫 สรุปท้ายบท

    • System Message = สั่งก่อนเริ่มคุย
    • Human Message = ข้อความที่เราส่งไป
    • AI Message = คำตอบที่ส่งกลับมา
    • ยิ่งเข้าใจและใช้ Message Type ได้อย่างถูกต้อง → ยิ่งควบคุม AI ได้ดีขึ้น
    • แม้ไม่เขียนโค้ด ก็สามารถ “ออกแบบบทสนทนา” ให้ AI ตอบได้ตามใจเรา
    📢 แชร์บทความนี้ให้เพื่อนอ่านสิ!