เมื่อไม่กี่วันที่ผ่านมา ทาง OpenAI ผู้พัฒนา ChatGPT ได้เปิดตัวฟีเจอร์ใหม่ที่น่าสนใจมากมาย ไม่ว่าจะเป็น Assistants, Vision, Text to speech (TTS), และอื่นๆ อีกมากมาย ทางผมได้ลองใช้งาน Assistants API และอยากจะมาแชร์ถึงการใช้งานเบื้องต้น และ use cases ต่างๆ ให้ทุกคนสามารถนำไปลองปรับใช้กันดูครับ
What is Assistants?
Assistants เป็นฟีเจอร์ใหม่ของ OpenAI ที่ทำให้เราสามารถป้อนข้อมูลที่เฉพาะเจาะจงให้กับ ChatGPT เพื่อทำให้ ChatGPT สามารถตอบคำถามที่เกี่ยวกับสิ่งเหล่านั้นได้ คล้ายกับการสอน AI นั่นเอง ซึ่งวิธีที่กล่าวมานั้นเป็นงานวิจัยของทาง Meta ที่เรียกว่า Retrival Augmented Generation (RAG)
ข้อดีของวิธีนี้คือทำให้ Developer ที่ไม่เชี่ยวชาญด้าน Machine learning สามารถสอน AI ให้ตอบเรื่องเฉพาะทางได้โดยไม่ต้องทำการสร้าง AI model และเทรนเองทั้งหมด
Assistants use cases
เนื่องจากฟีเจอร์ Assistants ทำให้เราสามารถป้อนข้อมูลของเราให้ AI เราจึงสามารถนำตัว Assistants มาใช้กับเรื่องต่างๆ ได้ อาทิเช่น
- Data Analysis - เราสามารถป้อนข้อมูล
.jsonที่มาจาก Database ให้กับ Assistants เพื่อใช้ในการวิเคราะห์ข้อมูล หรือสรุปข้อมูลให้เราได้ - Chat bot - เราสามารถป้อนข้อมูล
.txt,.docxหรือ.pdfให้ Assistants ตอบคำถามเกี่ยวกับเอกสารนั้นได้ - Similarity search - เราสามารถป้อนรูปสินค้า
.png,.jpgให้กับ Assistants เพื่อใช้ค้นหาสินค้าที่ไกล้เคียงได้
นี่เป็นแค่ตัวอย่างคร่าวๆ ซึ่งในความจริงแล้วเราสามารถนำ Assistants ไปใช้กับงานอย่างอื่นได้อีกมากมาย
How to use Assistant API?
สำหรับบุคคลทั่วไป ฟีเจอร์ Assistants เปิดให้ใช้งานได้แล้วผ่าน ChatGPT Plus แต่สำหรับ Assistants API เราต้องสมัครใช้งานกับทาง OpenAI ก่อนซึ่งสามารถทำได้ดังต่อไปนี้
Set up OpenAI API
เราต้องทำการสมัครการใช้งานกับ OpenAI ก่อนเพื่อที่เราจะสามารถสร้าง API Key สำหรับใช้งานฟีเจอร์ต่างๆ ของ OpenAI API ได้
- ทำการ Signup ผ่านทาง Platform OpenAI
- ทำการเพิ่ม Payment method ผ่านทางหน้า Billing - Payment methods
- ไปที่หน้า Billing Overview Billing - Overview และทำการเติมเงินเข้าไป เนื่องจากการคิดเงินเป็นแบบ Pay as you go เราสามารถทดลองที่ 1 USD ซึ่งเพียงพอต่อการใช้เทสฟีเจอร์ต่างๆ แล้วครับ
- หลังจากที่เติมเงินเข้าไปเรียบร้อย ให้เราไปที่หน้า Api Keys และทำการสร้าง API Key ขึ้นมา ซึ่งเราจะนำไปใช้ในหัวข้อถัดไปครับ
Integrate with Node.js
สำหรับตัวอย่างที่เราจะลองสร้างกันในวันนี้คือ HR assistant ที่จะช่วยให้ HR สามารถถามข้อมูลเกี่ยวกับผู้มาสมัครงานได้ครับ สิ่งที่ต้องใช้มีดังนี้
- Resume / CV ของเราในรูปของ
.pdf - OpenAI API key
เมื่อเตรียมทุกอย่างพร้อมแล้ว เราจะมาเริ่มทำการเขียน code กันเลยครับ ขึ้นตอนแรกให้สร้าง Node.js โปรเจ็คขึ้นมา และทำการ install openai package ดังนี้
npm install openai
หลังจากนั้นให้เราทำการ initialize OpenAI client ขึ้นมาครับ
// index.ts
import OpenAI from 'openai'
const openai = new OpenAI({
apiKey: YOUR_API_KEY,
})
หลังจากนั้นเราจะเริ่มทำการสร้าง Assistant ขึ้นมา พร้อมกับป้อน CV ของเราให้กับ Assistant
import fs from 'fs'
import path from 'path'
// Upload file for our assistant.
const file = await openai.files.create({
// Please change to your file path.
file: fs.createReadStream(path.join(__dirname, '../data/cv.pdf')),
purpose: 'assistants',
})
// Create assistant.
const assistant = await openai.beta.assistants.create({
instructions:
'You are a recruiter support chatbot. Use your knowledge base to best respond to customer queries.',
model: 'gpt-4-1106-preview',
tools: [{ type: 'retrieval' }],
// Attach file for assistant.
file_ids: [file.id],
})
เรามีการใช้ fs ฟังก์ชั่นเพื่อทำการอ่านไฟล์ CV จากเครื่องของเรา และทำการ upload ไฟล์เราขึ้นไปบน OpenAI เพื่อป้อนให้ Assistant ต่อไป (สังเกต file_ids: [file.id])
นอกจากนี้เรายังมีการป้อนคำสั่งให้กับ Assistant โดยการบอก Assistant ให้ช่วยตอบคำถามจากข้อมูลที่เราป้อนให้อีกด้วย
หลังจากที่เราสร้าง Assistant และป้อนไฟล์ CV เราให้กับ Assistant แล้ว เราจะเริ่มทำการส่งข้อความหา Assistant แล้วเริ่มการทำงานของ Assistant กันครับ
// Send message to Assistant.
const message = await openai.beta.threads.messages.create(thread.id, {
role: 'user',
content:
'Summarize technologies that the candidate has worked with in the past and how long they have worked with them.',
})
// Tell assistant to start processing data.
const run = await openai.beta.threads.runs.create(thread.id, {
assistant_id: assistant.id,
})
หลังจากที่เราสั่ง Assistant ให้เริ่มต้นทำงานแล้ว เราต้องทำการ polling เป็นระยะเพื่อเช็คว่า Assistant ทำงานเสร็จหรือยัง เนื่องจากตอนนี้ฟีเจอร์ Assistant ยังไม่ support การ stream ข้อมูลครับ
const checkRun = async () => {
return new Promise((resolve, reject) => {
// Check assistant run status every 3s.
const interval = setInterval(async () => {
const retrieveRun = await openai.beta.threads.runs.retrieve(
thread.id,
run.id
)
if (retrieveRun.status === 'completed') {
clearInterval(interval)
resolve(retrieveRun)
}
}, 3000)
})
}
await checkRun()
// Get all thread messages.
const messages = await openai.beta.threads.messages.list(thread.id)
// Get assistant answer.
const answer = (messages.data ?? []).find((m) => m?.role === 'assistant')
?.content?.[0] as MessageContentText
console.log('Answer: ', answer.text)
หลังจากที่เราเช็คว่า Assistant ทำงานเสร็จสิ้นแล้ว เราก็สามารถใช้ openai.beta.threads.messages.list เพื่อเรียกดูข้อมูลที่ Assistant ตอบกลับมาได้ และนี่คือตัวอย่างของผลลัพธ์ที่ได้ครับ 
สุดท้ายนี้เรายังสามารถเข้าไปเทส Assistant ของเราได้ผ่าน OpenAI Playground ได้อีกด้วย

ดูตัวอย่าง code ทั้งหมดได้ที่นี่
Wrapping up
ฟีเจอร์ Assistant ช่วยเพิ่มขีดความสามารถให้กับ ChatGPT จากการเทรนด้วยข้อมูลจากผู้ใช้ ซึ่งช่วยให้ ChatGPT สามารถตอบข้อมูลเกี่ยวกับตัวเรา ธุรกิจของเรา หรือ data ต่างๆได้
เทคโนโลยี AI ตอนนี้พัฒนาไปได้ไวมาก ซึ่งบางอย่างช่วยทดแทนงานที่ซ้ำซ้อนของมนุษย์ทำให้มนุษย์สามารถ focus กับสิ่งที่สำคัญ และมี impact จริงๆได้มากขึ้น สุดท้ายนี้หวังว่าบทความนี้จะมีประโยชน์กับทุกคน และช่วยให้ทุกคนสามารถนำ Assistant ไปช่วยในงานหรือชีวิตประจำวันได้นะครับ ✌️