เหตุการณ์สำคัญ

1. 「เหตุการณ์สำคัญ」คืออะไร

「เหตุการณ์สำคัญ」คือความสามารถด้านความจำทางธุรกิจระยะยาวที่มีในตัว GPTBots: ระหว่างที่ผู้ใช้สนทนากับ Bot ในหลายรอบ แพลตฟอร์มจะเรียกใช้ LLM เพื่อระบุเหตุการณ์ที่มีคุณค่าทางธุรกิจจากบทสนทนาโดยอัตโนมัติ (เช่น การถอนเงิน การร้องเรียน การจองนัด การคืนเงิน...) จัดเก็บอย่างเป็นโครงสร้างตามมิติของผู้ใช้ และนำกลับเข้ามาเป็นบริบทในบทสนทนาครั้งต่อ ๆ ไป เพื่อให้ Bot「จำได้」ว่าผู้ใช้คนนี้เคยเกิดอะไรขึ้นมาก่อน และเหตุการณ์ปัจจุบันดำเนินการไปถึงขั้นใดแล้ว

ปัญหาหลักที่แก้ไขได้คือ:

  • การขาดความจำข้ามบทสนทนา: LLM แบบดั้งเดิมเห็นเฉพาะหน้าต่างความจำระยะสั้นของบทสนทนาปัจจุบันเท่านั้น การกระทำทางธุรกิจที่สำคัญจะถูกลืมเมื่อข้ามบทสนทนาหรือในบทสนทนาที่ยาว
  • การสะสมข้อมูลที่เป็นโครงสร้าง: เปลี่ยนบทสนทนาที่กระจัดกระจายให้เป็นกระแสเหตุการณ์ที่สามารถสอบถาม สถิติ และตรวจสอบได้ เพื่อให้ฝ่ายควบคุมความเสี่ยง การตรวจสอบคุณภาพการบริการลูกค้า และการนำโปรไฟล์ผู้ใช้ไปใช้ซ้ำสามารถนำไปใช้ได้
  • การติดตามการดำเนินการของสถานะ: เหตุการณ์แต่ละรายการมีสถานะ PENDING / IN_PROGRESS / RESOLVED / CLOSED ที่สามารถดำเนินการต่อเนื่องได้ระหว่างหลายบทสนทนา
    alt text

2. แนวคิดการออกแบบ

1. เปลี่ยน "บทสนทนา" ให้เป็น "กระแสเหตุการณ์"

บทสนทนาเป็นข้อมูลที่ไม่มีโครงสร้าง ส่วนเหตุการณ์เป็นข้อมูลที่มีโครงสร้าง เหตุการณ์สำคัญแปล "สิ่งที่ผู้ใช้พูด สิ่งที่ผู้ใช้ทำ" ให้กลายเป็นบันทึกเหตุการณ์ที่ประกอบด้วย「ประเภท + สรุป + เอนทิตี + สถานะ + ลำดับความสำคัญ + ความเชื่อมั่น」เพื่อให้ระบบปลายทางอื่นนอกเหนือจาก LLM (สถิติ การควบคุมความเสี่ยง การตรวจสอบคุณภาพโดยมนุษย์) สามารถใช้ความจำชุดนี้ได้เช่นกัน

2. ทริกเกอร์สองช่องทาง หลีกเลี่ยงทั้งการพลาดและการสกัดมากเกินไป

ในบทสนทนาเดียวเหตุการณ์อาจปรากฏกลางทาง หรืออาจต้องสกัดเสริมหลังจากผู้ใช้ออกไปแล้ว ระบบใช้แผนสามระดับ ได้แก่ เกณฑ์จำนวนข้อความ (เรียลไทม์) + การหมดเวลาว่าง (เป็นชุด) + ทริกเกอร์ด้วยตนเอง (สำรอง) นักพัฒนาสามารถปรับพารามิเตอร์เพื่อสร้างสมดุลระหว่างต้นทุนและความรวดเร็ว

3. เปิดใช้งานการสกัด LLM เป็นค่าเริ่มต้น สามารถลดระดับไปใช้โมเดลราคาถูกกว่าได้

การสกัดเหตุการณ์ต้องอาศัยการอนุมานของ LLM ซึ่งจะใช้ Token ดังนั้นโมเดลที่ใช้ในการสกัดและโมเดลของบทสนทนาหลักของ Bot สามารถกำหนดค่าได้แยกกัน — ตัวอย่างเช่น บทสนทนาหลักใช้ Claude / GPT ส่วนการสกัดใช้โมเดลขนาดเล็กที่ราคาถูกกว่า โดยเรียกเก็บเงินและปรับให้เหมาะสมแยกกัน

4. การสำรองข้อมูลตัวตนผู้ใช้สองช่องทาง

เหตุการณ์ถูกรวบรวมตามมิติของผู้ใช้ ใช้ userId ที่นักพัฒนาส่งผ่านมาเป็นลำดับแรก (ตัวระบุระดับสูงสุด) เมื่อขาดหายไปจะถอยกลับไปใช้ anonymousId ที่แพลตฟอร์มสร้างขึ้น (เช่น ผู้ใช้ที่ยังไม่ได้เข้าสู่ระบบ) แม้ว่านักพัฒนาจะไม่ส่ง userId มา บทสนทนาของผู้เยี่ยมชมแบบนิรนามก็ยังสามารถสะสมเหตุการณ์ได้

5. แยกขอบเขตของผู้ใช้อย่างเข้มงวด ป้องกันการปนเปื้อนจากภาพหลอนของ LLM

LLM อาจ "แต่ง" eventId ของผู้ใช้คนอื่นขึ้นมาในการดำเนินการ UPDATE / DELETE / MERGE โค้ดภายในจะตรวจสอบ matchesUserScope สำหรับการดำเนินการทุกครั้ง โดยบังคับให้ใช้ userId / anonymousId เป็นเงื่อนไขกรองที่เข้มงวด เพื่อป้องกันการปนเปื้อนของเหตุการณ์ข้ามผู้ใช้

6. การฉีด Prompt มีสองช่องทางทั้งแบบชัดเจนและแบบโดยปริยาย

  • ชัดเจน: เขียน placeholder {{key_event_<eventType>}} ใน Prompt เพื่อรับค่าตามประเภทเหตุการณ์อย่างแม่นยำ
  • โดยปริยาย: เมื่อไม่ได้เขียน placeholder ระบบจะเพิ่มย่อหน้า ## Recent Key Events ต่อท้ายของ Prompt โดยอัตโนมัติ ใช้งานได้โดยไม่ต้องตั้งค่า

3. หลักการทำงาน

3.1 โมเดลข้อมูล

บทบาท หมายเหตุ
ตารางหลักของเหตุการณ์สำคัญ จัดทำดัชนีหลายมิติตามผู้ใช้/ประเภท/เวลา
การกำหนดค่าระดับ Bot (แต่ละ Bot มีเพียงรายการเดียว) ควบคุมสวิตช์ เกณฑ์ และกฎการสกัด
สถานะการสกัดระดับบทสนทนา บันทึกจำนวนข้อความที่รอสกัด เวลาว่าง และสถานะการทำงานพร้อมกัน
บันทึกการดำเนินการสกัด การตรวจสอบของแต่ละการสกัด + การใช้ Token / เครดิต

3.2 กลไกการทริกเกอร์สามระดับ

loading...
flowchart TB
    subgraph L1["ระดับ 1: ทริกเกอร์เรียลไทม์"]
        direction TB
        A1["ข้อความผู้ใช้แต่ละรายการ<br/>pendingMessageCount +1"] --> A2{"pendingMessageCount<br/>≥ messageThreshold ?"}
    end
    subgraph L2["ระดับ 2: ทริกเกอร์ขณะว่าง"]
        direction TB
        B1["สแกนตามกำหนดเวลา<br/>ทุก 30 / 60 / 300 วินาที"] --> B2{"lastMessageTime &gt; ก่อน idleTimeout<br/>และ pendingMessageCount &gt; 0<br/>และ extractionStatus == IDLE"}
    end
    subgraph L3["ระดับ 3: ทริกเกอร์ด้วยตนเอง"]
        direction TB
        C1["POST /bot/event/execute/.../retry<br/>หรือคลิก ลองใหม่ บนหน้าบันทึกการดำเนินการ"]
    end
    LLM(["เรียก LLM สกัด"])
    A2 -->|ใช่| LLM
    B2 -->|ตรงทั้งหมด| LLM
    C1 --> LLM

3.3 วิธีนำเหตุการณ์สำคัญไปใช้

  • โมดูลหน่วยความจำเพิ่มการควบคุมเหตุการณ์สำคัญ ในคอมโพเนนต์ memory สามารถอ่านและจดจำเหตุการณ์สำคัญได้ ผู้ใช้สามารถเปิดใช้งานเหตุการณ์สำคัญและกำหนดประเภทและจำนวนของเหตุการณ์สำคัญได้
  • โหนดที่ขับเคลื่อนด้วย LLM ใน FlowAgent ทุกโหนดรองรับการเปิดใช้งานเหตุการณ์สำคัญในโมดูลหน่วยความจำ ซึ่งช่วยเพิ่มความสามารถในการกระจายของ Classifier ความแม่นยำของการตอบสนองของ LLM และความแม่นยำของโหนดตัดสินใจ
  • รองรับการอ้างอิงตัวแปรผ่าน "ตัวแปรเต็ม – เหตุการณ์สำคัญ" และรองรับการแยกสาขา If/else ตามประเภทของเหตุการณ์สำคัญ

3.4 กลไกการฉีด

โหมด A: เพิ่มต่อท้ายอัตโนมัติ (ไม่ต้องตั้งค่า)

เมื่อ Bot เปิดใช้งานเหตุการณ์สำคัญ และใน Prompt ไม่มี placeholder {{key_event_*}} ระบบจะรวมเหตุการณ์ N รายการล่าสุดต่อท้ายของ Prompt โดยอัตโนมัติในรูปแบบต่อไปนี้ ก่อนจะเรียก LLM ทุกครั้ง:

## Recent Key Events eventType: withdrawal | summary: ผู้ใช้ขอถอนเงิน 5000 บาท | status: กำลังดำเนินการ | priority: สูง | confidence: สูง | updateTime: 2026-04-28 09:21:33 | entities: {"amount":5000,"channel":"bank"} eventType: complaint | summary: ผู้ใช้ร้องเรียนการบริการลูกค้าตอบช้า | status: แก้ไขแล้ว | priority: กลาง | confidence: กลาง | updateTime: 2026-04-27 18:02:11
                      
                      ## Recent Key Events
eventType: withdrawal | summary: ผู้ใช้ขอถอนเงิน 5000 บาท | status: กำลังดำเนินการ | priority: สูง | confidence: สูง | updateTime: 2026-04-28 09:21:33 | entities: {"amount":5000,"channel":"bank"}
eventType: complaint | summary: ผู้ใช้ร้องเรียนการบริการลูกค้าตอบช้า | status: แก้ไขแล้ว | priority: กลาง | confidence: กลาง | updateTime: 2026-04-27 18:02:11

                    
บล็อกโค้ดนี้ในหน้าต่างลอย

โหมด B: การแทนที่ placeholder (ควบคุมอย่างแม่นยำ)

เขียนใน Prompt / องค์ประกอบเวิร์กโฟลว์ / กฎ:

{{key_event_withdrawal}} ← ฉีดเฉพาะเหตุการณ์ประเภท "ถอนเงิน" {{key_event_complaint}} ← ฉีดเฉพาะเหตุการณ์ประเภท "ร้องเรียน"
                      
                      {{key_event_withdrawal}}     ← ฉีดเฉพาะเหตุการณ์ประเภท "ถอนเงิน"
{{key_event_complaint}}      ← ฉีดเฉพาะเหตุการณ์ประเภท "ร้องเรียน"

                    
บล็อกโค้ดนี้ในหน้าต่างลอย

แพลตฟอร์มจะสร้างตัวแปรที่สอดคล้องกันโดยจัดกลุ่มตาม eventType ประเภทเหตุการณ์ที่ไม่ตรงกันจะไม่ถูกฉีดเข้า ฉีดได้สูงสุด 30 รายการ / ตัวแปร

Flow Bot: การควบคุมอิสระระดับองค์ประกอบ

แต่ละโหนด LLM ในเวิร์กโฟลว์มี FlowKeyEventConfig ของตัวเอง: เปิด/ปิด เลือกประเภทเหตุการณ์ และตั้ง recentEventCount (ค่าเริ่มต้น 5 รายการ) ได้แยกกัน เหตุการณ์ในบทสนทนาเดียวกันจะถูกค้นหาเพียงครั้งเดียว (แคชไว้ใน ChatContext) และโหนดหลายโหนดจะใช้ข้อมูลร่วมกัน


4. คู่มือการใช้งาน

4.1 เปิดใช้งานในแผงตั้งค่าของ Bot

เส้นทางการเข้า: คอนโซลนักพัฒนา → รายละเอียด Bot → การจัดการผู้ใช้ (User Manage) → ลิ้นชัก「เหตุการณ์สำคัญ」

ขั้นตอนการดำเนินการ:

  1. เปิดสวิตช์หลัก
  2. โมเดลสกัด: เป็นตัวเลือก เมื่อไม่ได้เลือกจะใช้โมเดลบทสนทนาเริ่มต้นของ Bot แนะนำให้เลือกโมเดลที่ราคาถูก (เช่น GPT-4o-mini / ตระกูล Haiku)
  3. กฎการสกัด (≤2000 ตัวอักษร): ใช้ภาษาธรรมชาติเพื่อบอก LLM ว่าในบริบทของ Bot นี้ "อะไรนับเป็นเหตุการณ์สำคัญ" ตัวอย่าง:
    สกัดเฉพาะการกระทำทางธุรกิจที่เกี่ยวข้องกับการเงิน (ถอนเงิน ฝากเงิน โอนเงิน คืนเงิน) ละเว้นการพูดคุยทั่วไปและการแสดงอารมณ์ ฟิลด์เอนทิตีต้องประกอบด้วยจำนวนเงิน (amount) สกุลเงิน (currency) หมายเลขคำสั่งซื้อ (orderId)
                          
                          สกัดเฉพาะการกระทำทางธุรกิจที่เกี่ยวข้องกับการเงิน (ถอนเงิน ฝากเงิน โอนเงิน คืนเงิน)
    ละเว้นการพูดคุยทั่วไปและการแสดงอารมณ์
    ฟิลด์เอนทิตีต้องประกอบด้วยจำนวนเงิน (amount) สกุลเงิน (currency) หมายเลขคำสั่งซื้อ (orderId)
    
                        
    บล็อกโค้ดนี้ในหน้าต่างลอย
  4. จำนวนเหตุการณ์ล่าสุด (050): จำนวนเหตุการณ์ที่ฉีดเข้า Prompt ในแต่ละบทสนทนา 0 หมายถึงไม่ฉีด ที่พบบ่อยคือ 510
  5. เวลาทริกเกอร์:
    • เกณฑ์จำนวนข้อความ (5~50): ค่าเริ่มต้น 10
    • การหมดเวลาว่าง (2~60 นาที): ค่าเริ่มต้น 3
  6. พจนานุกรมประเภทเหตุการณ์ (สูงสุด 10 รายการ): แต่ละประเภทประกอบด้วย「ชื่อ」(≤10 ตัวอักษร) และ「คำอธิบาย」(≤100 ตัวอักษร บอก LLM ว่าประเภทนี้บรรจุอะไรไว้)
  7. คลิกบันทึก

⚠️ คำเตือน: เมื่อชื่อประเภทถูกเผยแพร่แล้วอย่าเปลี่ยนชื่อตามอำเภอใจ — เหตุการณ์ในอดีตยังคงเก็บชื่อเก่าไว้ ซึ่งจะทำให้ {{key_event_<ชื่อเก่า>}} ดึงค่าไม่ได้ หน้าบ้านจะแสดงคำเตือนสีส้มเมื่อประเภทมีอยู่แล้ว

4.2 อ้างอิงเหตุการณ์ใน Prompt

Prompt ของ Bot ทั่วไป

คุณคือผู้ช่วยฝ่ายบริการลูกค้าด้านการเงิน 【การกระทำทางการเงินล่าสุดของผู้ใช้รายนี้】 {{key_event_withdrawal}} 【การร้องเรียนล่าสุดของผู้ใช้รายนี้】 {{key_event_complaint}} กรุณาตอบคำถามของผู้ใช้โดยอ้างอิงจากบริบทข้างต้น
                      
                      คุณคือผู้ช่วยฝ่ายบริการลูกค้าด้านการเงิน

【การกระทำทางการเงินล่าสุดของผู้ใช้รายนี้】
{{key_event_withdrawal}}

【การร้องเรียนล่าสุดของผู้ใช้รายนี้】
{{key_event_complaint}}

กรุณาตอบคำถามของผู้ใช้โดยอ้างอิงจากบริบทข้างต้น

                    
บล็อกโค้ดนี้ในหน้าต่างลอย

Prompt ขององค์ประกอบใน Flow Bot

  • คลิกที่โหนดที่ขับเคลื่อนด้วย LLM ในแคนวาส → ที่แผงตั้งค่าค้นหาการตั้งค่า「ความจำ-เหตุการณ์สำคัญ」
  • ติ๊ก enable เลือกประเภทเหตุการณ์ที่จะฉีดเข้าโหนดปัจจุบัน และตั้งจำนวนเหตุการณ์ล่าสุดที่จะเรียกคืน (ค่าเริ่มต้น 5)

4.3 ตรวจสอบบันทึกการดำเนินการสกัด

เส้นทางการเข้า: คอนโซลนักพัฒนา → รายละเอียด Bot → การจัดการผู้ใช้ → แท็บบันทึกการดำเนินการ

ข้อมูลที่สามารถดูได้:

  • สถานะของแต่ละการสกัด (PENDING / RUNNING / COMPLETED / FAILED)
  • ที่มาของการทริกเกอร์ (REALTIME / SCHEDULED / MANUAL)
  • จำนวนข้อความที่ประมวลผล / จำนวนเหตุการณ์ที่สกัดได้
  • การใช้ Token / การใช้เครดิต
  • เหตุผลความล้มเหลว + ปุ่ม「ลองใหม่」
  • ลิ้นชักรายละเอียด: แสดงเหตุการณ์ทั้งหมดที่สร้าง / แก้ไขในการสกัดครั้งนี้

4.4 ใบแจ้งหนี้และการคิดค่าบริการ

ค่าใช้จ่ายในการเรียก LLM ของเหตุการณ์สำคัญจะถูกบันทึกในรายการ เหตุการณ์สำคัญ ของใบแจ้งหนี้ ซึ่งแยกการคิดค่าบริการออกจากกระบวนการบทสนทนาหลัก เพื่อความสะดวกในการควบคุมต้นทุนแยกต่างหาก

5. กรณีการใช้งานทั่วไป

สถานการณ์ ตัวอย่างประเภทเหตุการณ์ คุณค่า
บริการลูกค้าด้านการเงิน / การชำระเงินข้ามชาติ withdrawal ถอนเงิน / deposit ฝากเงิน / kyc ยืนยันตัวตน / dispute ข้อพิพาท ติดตามการกระทำทางการเงินข้ามบทสนทนา ให้ฝ่ายควบคุมความเสี่ยงและพนักงานบริการลูกค้าเห็นกระแสธุรกิจในอดีตของผู้ใช้รายนี้ในพริบตาเมื่อเข้ารับงาน
บริการหลังการขายของอีคอมเมิร์ซ refund คืนเงิน / return คืนสินค้า / complaint ร้องเรียน ดูแลสถานะการบริการหลังการขายของผู้ใช้โดยอัตโนมัติ ดำเนินการอย่างต่อเนื่องในหลายบทสนทนา
การจองนัด / การจัดตารางเวลา appointment นัดหมาย / cancellation ยกเลิก ให้ Bot จดจำว่าผู้ใช้เปลี่ยนเวลามาแล้วกี่ครั้ง และช่วงเวลาที่ยืนยันในปัจจุบันคือช่วงไหน
HR / ผู้ช่วย IT ภายในองค์กร leave_request ขอลา / it_ticket ใบงาน สะสมบทสนทนาเป็นกระแสใบงานที่สามารถสอบถามได้
การศึกษา / ผู้ช่วยการเรียน homework_submission / quiz_score / weak_topic บันทึกสถานะการเรียนของนักเรียนในระยะยาว สร้างแผนการทบทวนเฉพาะบุคคล
การแพทย์ / การปรึกษาด้านสุขภาพ symptom อาการ / medication การใช้ยา / appointment การนัดติดตาม เก็บข้อมูลความก้าวหน้าของอาการข้ามครั้งการปรึกษา เพิ่มความต่อเนื่องของการตรวจวินิจฉัย

6. แนวทางปฏิบัติที่ดีที่สุด

✅ ระดับการกำหนดค่า

  1. เขียนคำอธิบายในพจนานุกรมประเภท — ต้องกรอกทั้ง name และ description LLM อาศัย description เป็นหลักในการตัดสินว่า "บทสนทนานี้เป็นประเภทนี้หรือไม่" การเว้น description ว่างจะลดความแม่นยำของการจัดประเภทอย่างมีนัยสำคัญ
  2. ควบคุมจำนวนประเภทไว้ที่ 5~10 รายการ มากเกินไปจะทำให้ LLM ลังเลเมื่อจัดประเภทขณะสกัด และทำให้ Prompt บวมขึ้น รวมประเภทที่มีความหมายเดียวกันเข้าด้วยกัน ("ถอนเงิน" และ "ถอน" ใช้ตัวเดียวกัน)
  3. กฎการสกัดควรเขียนทั้ง "ทำอะไร" และ "ไม่ทำอะไร" ตัวอย่าง:
    สกัดเฉพาะการกระทำทางธุรกิจที่ยืนยันแล้วว่าเสร็จสิ้นหรือกำลังดำเนินการ ยกเว้น: การพูดคุยเชิงสมมติ ("ถ้า...จะทำอย่างไร") อารมณ์ล้วน ๆ การพูดคุยทั่วไป
                          
                          สกัดเฉพาะการกระทำทางธุรกิจที่ยืนยันแล้วว่าเสร็จสิ้นหรือกำลังดำเนินการ
    ยกเว้น: การพูดคุยเชิงสมมติ ("ถ้า...จะทำอย่างไร") อารมณ์ล้วน ๆ การพูดคุยทั่วไป
    
                        
    บล็อกโค้ดนี้ในหน้าต่างลอย
  4. เลือกโมเดลสกัดที่เล็กไม่ใช่ใหญ่ การสกัดเป็นงานที่ให้ผลลัพธ์เป็นโครงสร้าง ความต้องการด้านความสามารถในการอนุมานต่ำ GPT-4o-mini / Claude Haiku / DeepSeek-V3 มักจะเพียงพอ ต้นทุนต่อครั้งสามารถต่ำกว่าโมเดลบทสนทนาหลักได้หนึ่งเท่าตัว
  5. อย่าตั้ง recentEventCount ให้สูงสุดตั้งแต่แรก การฉีดเหตุการณ์มากเกินไปจะแย่งบริบทของบทสนทนาหลัก เริ่มที่ 5 หาก Bot มัก "นึกไม่ออก" ก็ค่อยเพิ่ม

✅ พารามิเตอร์การทริกเกอร์

  1. บทสนทนายาว / สถานการณ์บริการลูกค้า: messageThreshold = 10, idleTimeoutMinutes = 3 มักจะเหมาะสม
  2. ปฏิสัมพันธ์สั้น / Bot แบบเชิงงาน: ตั้ง idleTimeoutMinutes ไปที่ 2 เพื่อหลีกเลี่ยงการสกัดเหตุการณ์ที่ล่าช้าหลังจากผู้ใช้สิ้นสุดบทสนทนา
  3. บทสนทนาความถี่สูงคุณค่าต่ำ (เช่น คำถามทั่วไป): เพิ่ม messageThreshold เป็น 20~30 หลีกเลี่ยงการเรียก LLM สกัดทุกรอบจนสิ้นเปลืองต้นทุน

✅ การอ้างอิงใน Prompt

  1. เลือกใช้ placeholder เป็นลำดับแรก แทนการพึ่งพาการเพิ่มต่อท้ายอัตโนมัติ placeholder ควบคุมได้และสามารถแบ่งตามประเภทได้อย่างแม่นยำ ส่วนการเพิ่มต่อท้ายอัตโนมัติเหมาะสำหรับสถานการณ์สำรองที่ "ต้องการทุกอย่าง"
  2. ในการ Flow Bot อย่าเปิดใช้งานทุกโหนด เปิดใช้งานเฉพาะในโหนดที่ต้องการบริบทของเหตุการณ์อย่างแท้จริง (เช่น โหนดตอบกลับการบริการลูกค้า โหนดตัดสินใจการควบคุมความเสี่ยง) โหนดการจดจำเจตนา / การจัดเส้นทางไม่จำเป็นต้องเปิด
  3. หลีกเลี่ยงการให้ {{key_event_xxx}} ปรากฏที่ส่วนบนของ Prompt ระดับระบบ — เหตุการณ์ในอดีตมักจะเพิ่มขึ้นตามเวลา หากมันเต็ม Token คำสั่งหลักจะถูกตัดทอน แนะนำให้วางที่ส่วนกลางของ Prompt หรือก่อน Few-shot

✅ การกำกับดูแลข้อมูล

  1. ตรวจสอบเหตุการณ์ความเชื่อมั่นต่ำ LOW โดยมนุษย์เป็นระยะ LLM จะสกัดเนื้อหาที่ "ผู้ใช้กล่าวอ้างฝ่ายเดียว" ออกมาด้วย ฝ่ายธุรกิจควรกรองอีกชั้นหนึ่ง — สามารถตรวจสอบโดย confidence=LOW + disputeFlag=true
  2. กระบวนการธุรกิจที่สำคัญควรใช้ร่วมกับการเขียนผ่าน API เช่น เมื่อระบบคำสั่งซื้อมีข้อมูลที่เป็นโครงสร้างอยู่แล้ว การเขียนตรง ๆ ด้วย createdBy=API จะแม่นยำกว่าการให้ LLM สกัดจากบทสนทนา และอยู่ร่วมกับผลการสกัดของ LLM ได้
  3. ใช้การดำเนินการ MERGE อย่างระมัดระวัง LLM อาจรวมเหตุการณ์ที่ไม่ควรรวมเข้าด้วยกันเป็นครั้งคราว แนะนำให้สนใจการดำเนินการประเภท MERGE ในบันทึกการดำเนินการ และคืนสภาพโดยการแยกผ่าน API หากจำเป็น
  4. ใช้ฟิลด์ entities ให้เป็นประโยชน์ ในกฎการสกัดให้กำหนดอย่างชัดเจนให้ LLM สกัด KV ที่สำคัญ (จำนวนเงิน หมายเลขคำสั่งซื้อ เวลา ฯลฯ) ในภายหลังสามารถสอบถามแบบมีโครงสร้างได้โดยตรง ซึ่งน่าเชื่อถือกว่าการแยกวิเคราะห์ข้อความ summary

⚠️ รายการตรวจสอบปัญหา

ปรากฏการณ์ เส้นทางการตรวจสอบ
ไม่สามารถสกัดเหตุการณ์ได้ ① สวิตช์หลักเปิดอยู่หรือไม่ ② Bot มียอดเครดิตคงเหลือหรือไม่ ③ บันทึกการดำเนินการมี FAILED หรือไม่ ④ กฎการสกัดเข้มงวดเกินไปหรือไม่
เนื้อหาเหตุการณ์สำคัญบางประเภทว่างเปล่า ① ผู้ใช้รายนี้มีเหตุการณ์ประเภทนั้นหรือไม่ ② สร้างเหตุการณ์ประเภทนั้นถูกต้องหรือไม่ ③ การสะกดชื่อประเภทตรงกันหรือไม่
การปนเปื้อนข้ามผู้ใช้ ตรวจสอบว่าได้ส่ง userId ที่ถูกต้องหรือไม่ ถ้าเป็นผู้ใช้ที่ยังไม่ได้เข้าสู่ระบบ ตรวจสอบว่า anonymousId มีความเสถียรหรือไม่
ค่าใช้จ่ายในการสกัดสูงเกินไป ① ลดความถี่ในการสกัด ② เปลี่ยนไปใช้โมเดลสกัดที่ราคาถูกกว่า
ผลการสกัดจัดประเภทผิดเพี้ยน ① ให้ข้อมูลคำอธิบายของประเภทที่แม่นยำยิ่งขึ้น ② ให้ตัวอย่าง few-shot จำนวนหนึ่งในช่องกฎการสกัด

7. ขอบเขตความสามารถและข้อควรระวัง

  • การสกัดไม่ใช่เรียลไทม์ แม้แต่ทริกเกอร์เรียลไทม์ระดับ 1 ก็ยังต้องรอจำนวนข้อความสะสมถึงเกณฑ์ก่อนจึงจะสกัด ธุรกิจที่ต้องการความสอดคล้องอย่างเข้มงวด (เช่น การทำธุรกรรม) ไม่สามารถพึ่งพากระแสเหตุการณ์ในการตัดสินใจได้ — เหตุการณ์เป็นความจำเสริม ไม่ใช่แหล่งที่มาของความจริง
  • หน้าต่างการสกัดสูงสุด 100 ข้อความ (MAX_MESSAGES_PER_BATCH) บทสนทนาที่ยาวเกินไปจะถูกแบ่งออกเป็นหลายหน้าต่างเพื่อประมวลผล ความสัมพันธ์เชิงเหตุและผลข้ามหน้าต่างจะอาศัย "การเปรียบเทียบเหตุการณ์ในอดีต" เพื่อเรียกคืน
  • การสอบถามเหตุการณ์มีการป้องกันการหมดเวลา 500ms การสอบถามที่ช้าจะไม่ลากระบบลูกโซ่ของแชท แต่ในกรณีสุดโต่งจะไม่มีการฉีดเหตุการณ์
  • anonymousId จะถูกรีเซ็ตเมื่อล้างที่ฝั่งไคลเอนต์ ผู้ใช้นิรนามที่เปลี่ยนอุปกรณ์ / ล้างแคชจะถูกถือว่าเป็นผู้ใช้ใหม่ และเหตุการณ์จะไม่ตามไปด้วย
  • กระแสเหตุการณ์ไม่เกี่ยวข้องในโหมด multi-agent (ดูคำประกาศการเลิกใช้งานใน CLAUDE.md ของ oversea-ailab)