Skip to main content

ตั้งค่า AI และสร้าง Flex ด้วย AI

ภาพรวม

โมดูล AI ทำหน้าที่สองอย่าง คือเก็บการตั้งค่า AI provider ต่อ LINE OA หรือต่อองค์กรไว้ในตาราง ai_config และให้บริการสร้างเนื้อหาด้วย AI จุดที่ใช้งานจริงในปัจจุบันคือการ สร้าง Flex Message จากคำสั่งภาษาคน เพื่อลดเวลาที่ทีมงานต้องใช้ประกอบการ์ดข้อความด้วยมือ

ปัจจุบัน provider ที่ implement แล้วมีเพียง Gemini แต่โครงสร้างโค้ดเปิดช่องไว้ให้เพิ่ม provider อื่นได้ ส่วนโมดูล เวิร์กโฟลว์ ก็เรียกใช้ AI เพื่อร่าง flow เช่นกัน แต่ผ่านเส้นทางของตัวเองที่ workflow/ai.go

ทุก route ของโมดูลนี้อยู่บน group public และใช้ JwtLoginAuth จึงเรียกได้ทันทีหลังล็อกอินโดยไม่ต้องเลือก LINE OA ก่อน

Business Flow

  1. ตั้งค่า AI — ผู้ดูแลเรียก PUT /api/ai-config พร้อม CreateOrUpdateAiConfigDto ซึ่งประกอบด้วย provider, model, API key และพารามิเตอร์ของการ generate การทำงานเป็นแบบ upsert คือสร้างใหม่ถ้ายังไม่มี และอัปเดตถ้ามีอยู่แล้ว
  2. อ่านค่าที่ตั้งไว้GET /api/ai-config ใช้แสดงค่าปัจจุบันในหน้าตั้งค่า
  3. ขอให้ AI สร้างการ์ด — ตอนสร้าง rich message ผู้ใช้พิมพ์คำอธิบายว่าต้องการการ์ดแบบไหน แล้วระบบเรียก POST /api/ai-config/generate-flex ด้วย body รูปแบบ {"prompt": "..."}
  4. ประมวลผลใน service — ฟังก์ชัน generate() ทำงานตามลำดับนี้
    • โหลด ai_config ที่ active อยู่ของ LINE OA หรือองค์กรปัจจุบัน
    • ถ้า provider เป็น Gemini จะยิง HTTP ไปยัง Gemini API
    • provider อื่นยังไม่ได้ implement
    • option ที่ผู้เรียกไม่ส่งมาจะใช้ค่า default โดยฝั่ง Go ใช้ pointer field เพื่อแยกกรณี "ไม่ส่งค่า" ออกจาก "ส่งค่าศูนย์" ให้พฤติกรรมตรงกับตัวดำเนินการ ?? และ || ของ TypeScript เดิม
  5. ส่งผลลัพธ์กลับ — คืน Flex Message ในรูป JSON ให้ cms-web นำไปวางต่อในตัวแก้ไข rich message

ไฟล์และฟังก์ชันหลัก

โค้ดอยู่ที่ internal/modules/ai/ ประกอบด้วย controller.go, service.go และ dto.go

MethodRouteHandlerGuard / Policy
GET/api/ai-configct.getConfigJwtLoginAuth + read line-oa
PUT/api/ai-configct.upsertConfigJwtLoginAuth + update line-oa
POST/api/ai-config/generate-flexct.generateFlexJwtLoginAuth + read line-oa

ทั้งสาม route ลงทะเบียนบน group public โดยบรรทัด _ = authed ในโค้ดยืนยันว่าไม่ได้ใช้ group authed

โครงสร้างที่ควรรู้จัก ได้แก่ AiGenerateOptions ซึ่งใช้ pointer field แทน optional field ของ TypeScript และ Service.generate() ที่เป็นจุดรวมตรรกะการเรียก provider

จุดเชื่อมต่อกับ Service อื่น

  • สิทธิ์การเข้าถึง — ต้องผ่าน JwtLoginAuth เท่านั้น ไม่ต้องมี lineOaId ใน token และไม่มี ModuleGate ครอบ ส่วน policy metadata ใช้ PolicyModuleLineOa ซึ่งยังไม่ได้บังคับใช้
  • ตารางที่เกี่ยวข้องai_config และ line_oa
  • บริการภายนอก — Gemini API เรียกผ่าน HTTP
  • โมดูลที่เกี่ยวข้อง — Rich Message (ปลายทางของ Flex ที่ generate ออกมา), เวิร์กโฟลว์ (ใช้ AI ร่าง flow) และ คลังความรู้ (แหล่งความรู้ของบอต)