AI
December 16, 2023

Chatbot กับ RAG ทำงานร่วมกันอย่างไร

สำหรับบทความสุดท้ายของแคมเปญนี้ ก็ยังคงเป็นเรื่องราวเกี่ยวกับ Chatbot เช่นเคย แต่จะมีความซับซ้อนยิ่งกว่า วันนี้เราจะมาทำ Chatbot with RAG and Agents เพื่อช่วยให้ Chatbot ของเราสามารถตอบคำถามได้ดียิ่งขึ้นและถูกต้องกว่าเดิม ถ้าพร้อมแล้ว เรามาเริ่มกันเลยค่ะ!

สำหรับบทความนี้ยังคงอ้างอิงมาจาก Demo ของ Vulture Prime โดยในรอบนี้เราได้ทำ Chatbot ที่ประกอบไปด้วย AI 2 ตัว และ RAG อีกหนึ่ง โดยเมื่อ user ถามคำถามเข้ามายัง Chatbot ตัว AI ตัวที่ 1 จะตัดสินใจว่าจะใช้งาน RAG เพื่อค้นหาข้อมูลเฉพาะทาง หรือ ใช้ LLMs ในการตอบคำถาม ก่อนที่จะสรุปคำตอบและตอบคำถามกลับไป อีกทั้ง Chatbot ในครั้งนี้ ยังมี Memory หรือความจำที่สามารถจดจำคำตอบก่อนหน้าที่ถามไปแล้วได้ ทำให้การใช้งาน Chatbot ถามตอบจะเป็นไปอย่างราบรื่นมากขึ้น

ยกตัวอย่างจาก Demo ใน RAG เราได้ใช้ Metadata ข้อมูลผลประกอบการรายปีของปี 2019 - 2022 จาก Uber ดังนั้นหาก user ถามคำถามที่เกี่ยวข้องกับข้อมูลใน RAG AI ที่ทำหน้าที่ตัดสินใจก็จะไปค้นหาข้อมูลจาก RAG มาเป็นคำตอบให้ ในขณะที่หากถามคำถามทั่วไปก็จะใช้ข้อมูลจาก OpenAI Agent แทน

ในการทำ Chatbot รอบนี้จะมีหลาย Engine ประกอบอยู่รวมกันหลายส่วน ซึ่งทำหน้าที่แตกต่างกันออกไป เราจะค่อย ๆ มาอธิบายภาพทีละส่วนกันนะคะ

Chat Agent

สำหรับพาร์ทของ Chat Agent เราก็ได้เลือกใช้ OpenAI มาเป็น LLMs ที่ทำหน้าที่ในส่วนนี้ หน้าที่ของ Chat Agent มี 2 อย่างคือตัดสินใจว่าใช้ข้อมูลจากฝั่งไหนเอามาใช้ตอบคำถาม ซึ่งประกอบด้วย Chat Engine, Sub Question Engine และ RAG Engine

ก็คือเมื่อ user ถามคำถามเข้ามา Chat Agent จะทำหน้าที่ตัดสินใจว่าคำถามนี้สามารถหาคำตอบจาก RAG ได้หรือไม่ ซึ่งการจะรู้ว่าควรจะใช้ RAG หรือไม่ สำคัญอยู่ที่ Description ที่ถูกกำหนดใน Metadata ของ RAG Engine และ Sub Question Engine กล่าวคือถ้าคำถามมีความเกี่ยวข้องกับ Description ของ RAG Engine ทาง Chat Engine ก็จะเลือกใช้งาน RAG แต่ถ้าหากคำถามที่ถูกถามมาไม่เกี่ยวข้องกับข้อมูลใน RAG ก็จะตอบคำถามนั้นด้วย Chat Engine

Sub Question Engine

เมื่อตัดสินใจว่าจะเลือกใช้ RAG ในการตอบคำถาม ในกรณีที่ Prompt ที่ถูกส่งมาต้องการข้อมูลที่เกี่ยวข้องกับ RAG Engine หลายตัว จะถูกส่งมายัง Sub Question Engine ก่อน เพื่อแตกเป็นคำถามย่อยก่อนส่งไปยัง RAG Engine เนื่องจากเราได้จำแนก RAG ออกเป็น 4 Engine ย่อย โดยแต่ละ Engine จะตอบคำถามที่เกี่ยวข้องกับของตัวเอง จึงก็จะต้องถามคำถามเดิมกับทีละ RAG Engine ดังนั้นจึงต้องมี Sub Question Engine เพื่อช่วยแตกคำถามย่อยก่อนนั่นเอง

ในส่วนของ Description ใน Meta Data ของ Sub Question Engine ระบุว่า “useful for what you want to answer queries that require analyzing multiple SEC 10-K document for Uber”

ซึ่งหลังจากที่ได้ข้อมูลจาก RAG Engine เรียบร้อยแล้ว คำตอบจะถูกส่งไปยัง Synthesizer เพื่อสรุปและเรียบเรียงข้อมูลที่ได้จาก RAG Engine ทุกตัว ก่อนจะส่งออกเป็นคำตอบกลับไปยัง user ต่อไป

RAG Engine

สำหรับ RAG Engine เราได้ใช้ข้อมูลผลประกอบการรายปีของปี 2019 - 2022 จาก Uber โดยเราได้แยก RAG Engine ย่อยออกเป็น 4 ตัว สำหรับข้อมูลผลประกอบการแต่ละปี เมื่อมี Prompt ที่เกี่ยวข้องกับปีนั้นก็จะถูกส่งเข้ามายัง RAG Engine เพื่อค้นหาข้อมูลและตอบคำถามนั่นเอง

โดยในกรณีที่ Prompt จาก Chat Agent ถามคำถามที่เกี่ยวข้องกับปีใดปีหนึ่ง เช่น สรุปข้อมูลผลประกอบการปี 2020 Prompt จะถูกส่งมายัง RAG Engine เลยโดยไม่ต้องผ่าน Sub Question Engine

ในส่วนของ Description ใน Meta Data ของ Sub Question Engine ระบุว่า “useful for what you want to answer queries about the {year} SEC 10-K document for Uber”

Chat Engine

หรือ GPT Engine ไว้ใช้สำหรับตอบคำถามทั่วไป ซึ่งจะเกิดขึ้นเมื่อ Chat Agent ได้สรุปว่า Prompt ไม่เกี่ยวข้องกับ RAG คำถามก็จะถูกส่งมายัง Chat Engine เพื่อตอบคำถามต่อไป

ในส่วนของ Description ใน Meta Data ของ Chat Engine ระบุว่า “Agent that can answer the general question”

Other

  • Chatbot ครั้งนี้ได้เก็บข้อมูลของ Chat Agent บทสนทนาคำถามคำตอบที่เกิดขึ้นไว้ โดยถ้าเปรียบเทียบกับ ChatGPT ก็คือการถามคำถามใน Thread เดิมโดยไม่ขึ้น Topic ใหม่ ดังนั้นการถามตอบจึงเป็นไปอย่างราบรื่นมากยิ่งขึ้น (สามารถใช้ /resetChat เพื่อทำการล้าง Topic หรือเป็นการล้าง Memory ได้)
  • ถ้าต้องการ Query โดยปกติสามารถใช้ /chat เป็น Endpoint แต่ถ้าต้องการ Query แบบไม่ใช้งาน RAG สามารถใช้ Endpoint /chatWithoutRAG ได้

ซึ่งเราสามารถสรุปเป็น user flow ได้ดังนี้ค่ะ

จบไปแล้วสำหรับพาร์ทเกริ่นนำของ Chatbot with RAG and Agents หวังว่าจะทำให้ทุกคนเข้าใจมากขึ้นและเป็นจุดเริ่มต้นการลองสร้าง Chatbot ของตัวเองขึ้นมานะคะ สำหรับใครที่สนใจอ่านต่อด้าน Frontend Backend และ Infra ก็สามารถอ่านต่อได้ในพาร์ทถัดไปได้เลยค่ะ ส่วนคนที่ยังมีข้อสงสัย มี Feedback หรือต้องการสอบถามเพิ่มเติมสามารถติดต่อที่ Facebook Page : Vulture Prime ได้เลย ขอบคุณที่ติดตามอ่านมาตลอดนะคะ 👋


Aa

© 2023, All Rights Reserved, VulturePrime co., ltd.