มาต่อ Open AI ผ่าน Line ด้วย Golang ให้บอทมันฉลาดและคุยต่อเนื่องแบบง่ายๆกัน PartI

เกริ่นก่อนพอดีผมอยากจะสร้างบอทไว้ใช้เองผ่านมือถืออยู่แล้ว แต่มีพี่ในทีมมาสอนพอดีก็เลยเขียนใช้เองบวกทำบทความขึ้นมาเลย และคงปฏิเสธไม่ได้จริงๆว่า เทรน AI มันมาแรง และจะแรงขึ้นไปอย่างต่อเนื่องทั้งแง่ประหยัดเวลาการทำงานและทำให้เราเรียนรู้สิ่งที่อยากรู้ได้เร็วขึ้นมากๆ

OpenAI ได้พัฒนาโมเดลปัญญาประดิษฐ์ต่างๆ ที่มีชื่อเสียง เช่น GPT, Codex, และ DALL-E ซึ่งมันเรียนรู้ด้วยข้อมูลที่ป้อนเข้าไปและจะฉลาดขึ้นไปเรื่อยๆ คิดว่าอนาคตอาจจะนำหน้ามนุษย์ไปด้วยซ้ำ ย้ำว่าคนที่ไม่ใช้เตรียมตกยุคแน่นอนผมเคยแอนตี้มันมาก่อน 5555

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

เนื่องจาก ณ ตอนนี้ตัว Open AI ยังไม่มีการสร้าง Session และไม่เก็บข้อความที่คุยกันก่อนหน้า เราเลยต้องมาทำให้มันรู้ว่าข้อความก่อนหน้าคืออะไรคุยอะไรกันมาแล้วบ้างบทความนี้จะไม่ใช้ฐานข้อมูลเลย แต่ถ้าอยากให้เก็บถาวรก็ควรมีฐานข้อมูลซักตัวครับ

สิ่งที่จะทำจะให้ออกมาอยู่ในรูปนี้

1.LINE: ผู้ใช้ส่งข้อความผ่าน LINE

2.Webhook: ข้อความจาก LINE จะถูกส่งไปยัง Webhook ที่คุณกำหนดในโค้ด

3.handleTextEvent: Webhook รับข้อความและเรียกฟังก์ชัน handleTextEvent เพื่อประมวลผลข้อความ

  • ฟังก์ชันนี้จะดึงข้อมูลจาก tempMessagesถ้ามีข้อมูลก่อนหน้า
  • ถ้าไม่มีข้อมูลก่อนหน้า จะเพิ่มข้อความเริ่มต้นลงใน tempMessages และให้รู้จักชื่อเล่นในไลน์ของเราด้วย
  • ฟังก์ชันจะเพิ่มข้อความใหม่จากผู้ใช้ลงใน tempMessages

4.OpenAI Completions: ข้อความทั้งหมดที่เก็บใน tempMessages จะถูกส่งไปยัง OpenAI เพื่อสร้างการตอบกลับ

5.Reply Message: ผลลัพธ์จาก OpenAI จะถูกส่งกลับไปยังผู้ใช้ผ่าน LINE

สิ่งที่ต้องเตรียมสำหรับบทความนี้

  • Line OA หรือ Line Messaging API
  • เปิดบัญชี OpenAI พร้อมผูกบัตรให้เรียบร้อยไม่จำเป็นต้องเปิด Chat GPT
  • Golang ลงในเครื่องให้พร้อม
  • VSCode ขาดไม่ได้แต่ใครถนัดอันไหนก็ใช้อันนั้น 5555
  • ngrok ถ้าใครใช้ตัวอื่นก็ได้ใช้ได้ครับ

มาดูขั้นตอนติดตั้งดีกว่าเริ่มจาก Line ก่อน

ขั้นแรกไปที่ https://developers.line.biz/console/ เพื่อสร้าง Provider และ Line Message API

สมัครเสร็จแล้วง่ายๆเลย

ต่อมาสมัคร Open AI

สมัครง่ายๆแค่ Login Google แล้วก็ไปที่ URL นี้เพื่อผูกบัตร https://platform.openai.com/settings/organization/billing/overview

ผูกเสร็จก็เพิ่ม Credit ขั้นต่ำไป 5$

จากนั้นก็ไปเพิ่ม Key เพื่อที่จะเอามาใช้ใน Code เราเอง https://platform.openai.com/api-keys

หน้าตาหลังจากสร้าง Key สร้างแล้วเก็บไว้ด้วยนะครับไม่งั้นได้ลบสร้างใหม่

ต่อมามาดูหน้าตาของ Code กัน มาอธิบายส่วนสำคัญเป็นจุดๆ

Set ENV ให้เรียบร้อย ตามชื่อเลยส่วนนี้ไม่มีอะไรครับ
Source Code ทั้งหมด
Fuction ผมเตรียมไว้มีแค่ handleTextMessage
อันนี้คือตัวรับ Webhook ว่าจะให้ไปไหนซึ่งผมให้มีแค่ตัว message ไปตรงกับ type ไหนก็ให้ไป Function นั้นๆ ใครอยากเขียนเป็น if else หรือ switch case ก็ได้นะ แต่ปกติถ้าอันไหนมันมีเงื่อนไขเดียวผมชอบใช้ท่านี้ สะอาดและไม่ยาวดี
Token แบบ Statelate คือ Token ที่มีอายุสั้นๆเพียง 15 นาที และสามารถสร้างมาใหม่เท่าไหร่ก็ได้ผมเลยเลือกใช้สดวกดี 5555
ส่งข้อความจาก Line ด้วยการ Reply จาก Message ที่ส่งเข้ามาทำให้ไม่เสียเงิน
ตรงๆเลย Get Profile เดียวมาดูกันว่าผมจะเอามาใช้ยังไง
โดยผมจะใช้ Open AI โดยเลือก Model เป็น gpt-4o มันเร็วดีเลยเลือกแต่ราคาอาจจะแพงกว่าตัวธรรมดาพอสมควรอยู่
ตัวแปรสำคัญที่ผมจะมาเก็บข้อความถามตอบบอทครับ
ส่วนประกอบครบหมดแล้วมาดูที่ตัว handleTextMessage กันดีกว่าครับจะเห็นได้ว่าผม จะมีการ Check messages ด้วย key userID ถ้ามัน ไม่มีอะไรอยู่ใน key userID เลยผมจะทำการ Set ข้อความ

Role system : เป็นการตั้งค่าเริ่มต้นให้ AI โดยผมให้เป็นเด็กเล็กน่ารักชื่อว่าลูฟี่ หรือ ปลาวาฬ และตอบเป็นภาษาไทยเท่านั้น
Role user : ที่ User ถาม
Role assistant : ที่ Bot ตอบ

จากนั้นก็ส่งข้อความที่จัดเตรียมและข้อความล่าสุดไปหา Open AI ถ้า Generate สำเร็จก็จะให้ ข้อความล่าสุด กับ response จากบอทมาเก็บใน Temp key ของ user คนนั้นๆ เนื่องจากถ้าไม่ทำแบบนี้บอทจะไม่รู้เลยว่าคุยอะไรกับเราก่อนหน้านี้ แต่ความฉลาดก็แลกกับการเสียเงินที่เพิ่มขึ้นนะครับ

จากนั้นผมจะ Run NGROK ที่ port 3000
ngrok http 3000

หน้าตาก็ประมาณนี้
จากนั้นเอา Webhook กลับไปใส่ที่ไลน์

มาชมวีดีโอกันครับจะได้บอทหน้าตาแบบนี้ออกมา

แค่นี้ก็มีบอทฉลาดๆไว้คุยกันแล้วแต่อาจจะเสียเงินขึ้นมาเยอะหน่อยแต่เอาไว้ใช้เองผ่าน Serverless ยิ่งสบายเลยถ้าเอาใช้เอง ถ้าเอาไปใช้จริงยังไงก็ต้องผ่านฐานข้อมูลนะครับอันนี้เป็นบอททำมาเล่นๆไว้ใช้เอง หวังว่าจะเป็นประโยชน์ไม่มากก็น้อยนะครับ รอบหน้ามาชม PartII กันครับจะมาพูดถึง embedding และ vector กดจากตรงนี้ได้เลยครับ PartII

--

--

No responses yet