ปัญหาหลักที่ได้รับฟี้ดแบคมาคือ Developer ที่เพิ่งเริ่มต้นทำระบบ LLM/Agent ไม่รู้จะนำ ทฤษฎี Agentic Pattern ที่อ่านมาจากในเน็ต มาประยุกต์ยังไง บทความนี้จะมาเล่าให้ฟังว่า จากโจทย์ที่เราได้รับมาจากลูกค้า เราใช้ Agentic Pattern อันไหน ที่เราใช้ช่วยแก้ปัญหาให้ลูกค้าได้จริงๆ

ด้วยเหตุนี้เลยอยากเขียนบทความนำเคสการออกแบบ Agentic Pattern จริงๆ มาแบ่งปันกัน โดยดั้งใจว่าจะแบ่งออกเป็นตอนๆ

Pre-requisite

  1. เคยอ่านบทความ https://www.anthropic.com/engineering/building-effective-agents ผ่านๆ มาบ้าง
  2. เคยมีประสบการณ์การใช้ LLM ทำแอพมาก่อน ไม่ว่าจะเป็นโปรเจคเล่นๆ หรือทำให้ลูกค้าจริงจัง

หมายเหตุ

  1. ก่อนอื่นต้องของท้าวความก่อนว่า Agentic Pattern มีการพูดถึงแต่ยังไม่มีใคร standadize terms อย่างเป็นทางการ จน Anthropic เค้าออกบทความและ learning resource อื่นๆ มาเพื่อ standadize terms ให้เข้าใจตรงกัน บทความนี้ผมก็จะใช้ term เหล่านั้นในการอ้างอิง
  2. ตัวอย่างที่เห็นในบทความนี้คือประสบการณ์จริง ที่เอามาดัดแปลงเพื่อให้สามารถถ่ายทอดเป็นความรู้ได้
  3. เพื่อความง่ายในการทำความเข้าใจ ให้คิดไว้ว่าจุดประสงค์ของ Agentic Pattern เหล่านี้คือการเพิ่มความแม่นยำของคำตอบ ให้ได้มากที่สุด ในเวลาที่เร็วที่สุด
  4. บทความเหล่านี้ เหมาะสำหรับ Developer ที่กำลังทำ backend application ที่ใช้ LLM ในการแก้ปัญาทางธุรกิจ เรียกง่ายๆ ก็คือ backend คุณไปเรียก LLM api นั่นเอง

โจทย์ที่ 1: Document to Graph Agent— Agent สำหรับ วิเคราะห์รายงานประจำปีของบริษัทใน SET (ตลาดหุ้นไทย)

หน้าที่ของ agent ตัวนี้คือการอ่าน และวิเคราะห์ รายงานประจำปี และทำรายงานสรุปออกมาเฉพาะส่วนที่สนใจ อย่างเช่น งบกำไรขาดทุน งบฐานะการเงิน งบกำไรขาดทุนเบ็ดเสร็จ

Input คือ รายงานประจำปี

Output คือ JSON data ที่จะนำไป ทำกราฟสรุป 3 กราฟ

  • Graph งบกำไรขาดทุน
  • Graph งบฐานะการเงิน
  • Graph งบกำไรขาดทุนเบ็ดเสร็จ

ตัวอย่างด้านล่างคือ JSON และ กราฟที่จะนำไปพล็อต

{
"periods": ["Q1", "Q2", "Q3", "Q4"],
"incomeStatement": {
"revenue": [120, 150, 170, 200],
"expenses": [80, 100, 120, 140]
},
"balanceSheet": {
"assets": [500, 550, 600, 650],
"liabilities": [300, 320, 340, 360]
},
"comprehensiveIncome": {
"netIncome": [40, 50, 55, 60],
"otherIncome": [5, -3, 8, 2]
}
}

เรามาลองวิเคราะห์การวาง structure AI แบบต่างๆ เริ่มจากแบบแรก

 

Solution เริ่มต้น — Naive Approach(กำปั้นทุบดิน)


Naive Approach

ตัวอย่าง Pseudo Prompt

<Context>[Report Content]</Context>
From the given report in xml tag above, Extract ….

โครงสร้างแรกที่เรามักจะเริ่มคือการใช้ LLM ในแบบเดียวกับ ChatGPT ปี 2023 นั่นก็คือใส่ Input ให้ LLM ส่งทุกอย่างออกมาเป็นอันจบ

วิเคราะห์ Input

ข้อเสียของวิธีนี้คือ ถ้า report มีขนาดใหญ่ LLM มีโอกาส Hullucinate สูงมาก ซึ่งในความเป็นจริง report ทางการเงินของบริษัทในตลาดหุ้นจะมีขนาดค่อนข้างใหญ่ ประมาณ 100–1000 หน้า โดยประมาณ

และถ้า Input content มีขนาดใหญ่เกิน LLM ก็จะส่ง error กลับมา

วิเคราะห์ Output

ลองสมมุติว่า LLM เราสามารถ รับ Input ได้ และเราจะใช้การ plot graph โดยการให้ LLM extract เฉพาะตัวเลขของแต่ละไตรมาส ของแต่ละ graph ออกมา เป็น JSON ให้ function code ของเราเอาไปใช้ต่อได้ อันนี้น่าจะทำได้ไม่ยาก เพราะ LLM api ส่วนใหญ่ support structure output แล้ว

ฝากไว้อีกนิดนึง ถ้าหากสามารถ ให้ LLM แค่ extract text/number แล้วสามารถคำณวนต่อเองในโค้ดได้แนะนำให้ทำเป็นอย่างยิ่ง พยายามอย่าให้ LLM คำณวนตัวเลขเองเพื่อความแม่นยำสูงสุด

วิเคราะห์การเขียน Prompt

การที่จะ fine tune prompt ให้สามารถทำ graph ทั้ง 3 อันเป็นไปได้ยาก หากมีความต้องการยิบย่อยจากลูกค้าเพียงเล็กน้อย เราจำเป็นต้องทดสอบและปรับแก้ Prompt ที่มีขนาดใหญ่มากๆ หากท่านเคย fine-tune prompt ก็จะรู้ว่าเพียงแค่ขยับนิดหน่อยจะทำให้ผลลัพธ์ต่างออกไปมากน้อย ก็ไม่สามารถคาดเดาได้

สรุปการวิเคราะห์ Solution เริ่มต้น

จากการ วิเคราะห์ทั้งสามส่วนสามารถ สรุปได้ว่า

  1. ขนาด output มีขนาดใหญ่เกิน สามารถแก้ได้ด้วยการใช้ RAG
  2. งานที่ LLM ต้องทำมี scope กว้างเกิน สามารถแก้ได้ด้วยการให้ 1 LLM Agent ทำแค่ 1 Graph ซึ่งจะง่ายต่อการ Optimize Accuracy ให้จบทีละตัว

 

Solution ปรับปรุง — RAG+Apply Agentic Pattern “Workflow: Parallelization”


RAG+Apply Agentic Pattern

ตัวอย่าง Pseudo Prompt

<Context>[Only Relevant Report Content]</Context>
From the given report in xml tag above, Extract [Income Sheet/Balance Sheet/Comprehensive Income]….

จากบทสรุปของ Solution แรก ทำให้เราต้องปรับปรุง Agentic Design ของเราวะน้อย มาสู่ Diagram ที่เป็น RAG+Agentic Pattern(ในที่นี้ผมไม่ได้อธิบายเรื่อง RAG อย่างละเอียด แนะนำให้ไป google เพิ่มเติมหรือดูในบทความน้องริวกับน้องนัด)

RAG มีหน้าที่ในการหา Relevant content(เนื้อหาหน้าที่เกี่ยวข้องกับกราฟนั้นๆ) ไปเป็นส่วนหนึ่งของ Prompt

Agentic Pattern ที่เหมาะกับงานนี้คือ Workflow: Parallelization คือการแบ่งงานเป็น section แล้วเรียก LLM parallel กัน(นึกถึง promise all ใน javascript/typescript)

เมื่อได้รับ result ของทุกตัวออกมาแล้วเราก็จะเขียนโค้ดให้ รวม JSON ของทั้ง 3 agent เข้าด้วยกัน

เรามาวิเคราะห์ Agentic Design ตัวนี้กัน

วิเคราะห์ Input

จะเห็น ได้ว่า Prompt จะมีขนาดเล็กลงอย่างเห็นได้ชัด เพราะคัดมาแต่เนื้อหาที่เกี่ยวข้อง ทำให้ความแม่นยำไม่เปลี่ยนไปตามขนาดของ Report(แต่ RAG ก็ยังต้อง Optimize อีก)

วิเคราะห์ Output

Output ของแต่ละ LLM Call มีขนาดเล็กลง เพราะแต่ละตัว โฟกัสแค่งานอย่างเดียว

วิเคราะห์การเขียน Prompt

จะเห็นได้ว่าหลังจากแยก LLM หรือ Agent เป็น กราฟละหนึ่งตัวแล้ว การเขียน Prompt จะง่ายขึ้นมาก เพราะสามารถแก้ prompt ของ แต่ละอันได้อย่างอิสระหรือมี seperation of concern นั่นเอง เราสามารถ แก้ Income Statement Prompt ได้ โดยที่ไม่ต้องกังวลว่าจะมีผลกับ Balance Sheet

สรุปการวิเคราะห์ Solution ปรับปรุง

จากการปรับปรุงและวิเคราะห์ Agentic Pattern ทั้งสามส่วนด้านบน สามารถสรุปได้ว่า

  1. Agentic Pattern — Workflow: Parallelizationไม่เพียงทำให้ความแม่นยำของ Agent มากขึ้น แต่ความเร็วในการทำงานของระบบไม่ได้ตกลงเยอะ เพราะสามารถ ทำงานคู่ขนานกันไปได้
  2. Agentic Pattern — Workflow: Parallelization นอกจากจะเป็นประโยชน์ในการเพิ่มประสิทธิภาพของ Agent แล้วยังช่วยให้การ develope ระบบง่ายขึ้นเพราะ developer ไม่จำเป็นต้องรอหรือมี dependency ระหว่างกันตอนพัฒนาแต่ละส่วน
  3. RAG มีส่วนสำคัญที่ช่วยให้ขนาดของ Relevant Content ลดลงเป็นอย่างมาก ซึ่งช่วยให้การ scale เป็นไปได้มากขึ้นถ้าขนาด document มีขนาดมากขึ้น ตัวอย่างเช่น ไม่ว่าเอกสารต้นฉบับจะมี 100 หน้า หรือ 200 หน้า RAG ก็ยังดึง Top K ปริมาณเท่าเดิมออกมา

สรุปโจทย์ 1

จากตัวอย่างการออกแบบ Agentic Pattern ด้านบนจะเห็นได้ว่า Parallelization จะค่อนข้างทรงพลังอย่างมากถ้าเอามาใช้ให้ถูกกับเนื้องาน ซึ่งส่วนตัวมองว่า Parallelization เป็น Pattern แรกๆที่ทุกคนมีโอกาสจะหยิบไปใช้งาน

ถ้าใครชอบบทความนี้แล้วอยากเห็นโจทย์ถัดไปสามารถติดตามกันได้เลย


หากท่านไหนต้องการปรึกษาหรือหาคนช่วยทำ Agentic AI Workflow, รีวิว Agentic Architecture, ปรับ Prompt & Template, เลือกเครื่องมือ RAG, เขียนโค้ดรวมผลลัพธ์/แปลงเป็น JSON, ไปจนถึงตั้งค่า Guardrails/Observability สำหรับใช้งานจริงในองค์กร ให้ทีม PALO IT Thailand เข้าไปช่วยทำได้เลย!

ติดต่อพวกเราผ่าน Facebook: PALO IT Thailand

Ready to kickstart your next big project?
Let's innovate together.