การควบคุมการใช้งาน Token บน OpenAPI ผ่าน Completion API
By @NexaByte Dispatches
สืบเนื่องจาก Part 1 เพื่อให้เข้าใจหลักการทำงานของ Text Completion มากขึ้น
กำหนดจำนวน Token ก่อนใช้งาน
อย่างที่ทราบกัน OpenAI คิดค่าใช้จ่ายตามจำนวน token ที่เราเรียกใช้งาน ดังนั้นหากเราไม่ระมัดระวังในการสร้างคำถาม prompt และไม่มีการกำหนด limit ให้กับ token ก็จะทำให้ token ของเราหมดเร็วขึ้น
เราจึงควรต้องสร้างรูปแบบคำถาม prompt ให้เฉพาะเจาะจงลงไปและกำหนดจำนวน limit ให้กับ token เพื่อหลีกเลี่ยงคำตอบที่ได้มาเกินความจำเป็นและลดการใช้จำนวน token ลงไปด้วย
ทาง OpenAI ใช่ว่าจะใจร้ายนะครับ เขาได้ให้ค่า property ที่ชื่อว่า “max_tokens” มาเพื่อกำหนดจำนวน limit ของ token ที่ใช้ในการสร้างคำตอบ ซึ่งจะช่วยควบคุมความยาวของคำตอบ หากคำตอบยาวเกินไปก็จะถูกตัดให้สั้นลง และเหตุผลของการหยุดสร้างคำตอบคือ “length” ซึ่งบอกว่าคำตอบนั้นถูกตัดก่อนที่คำตอบจะถูกสร้างเสร็จสมบูรณ์
// Bad answer (completion response), เกินจำนวน token ที่ถูก limit ไว้
{
...
"finish_reason": "length"
}
ต่อมาเราดูกันว่าถ้ากำหนด limit ให้กับจำนวน token แล้วจะเกิดอะไรขึ้น ในที่นี้ผมจะกำหนด limit ไว้ที่ 2000 tokens
{
"model": "text-davinci-003",
"prompt": "Explain the text completion api.",
"max_tokens": 2000
}
Completion Request บน Postman (ดูวิธีการทดสอบได้ ที่นี้ ครับ)
Completion Response บน Postman
ซึ่งเราจะเห็นว่าค่า finish_reason มีค่าเป็น “stop” ก็คือข้อความคำตอบถูกสร้างเสร็จสมบูรณ์เรียบร้อบแล้ว และจำนวน Token ที่ใช้สร้างคำตอบอยู่ที่ 116 token
ยกอีกตัวอย่างถ้าเราต้องการใช้ token ในการสร้างคำตอบกลับมาแค่ 50 token ละครับ
{
"model": "text-davinci-003",
"prompt": "Explain the text completion api.",
"max_tokens": 50
}
ค่า finish_reason มีค่าเป็น “length” แสดงว่าข้อความถูกตัดก่อนที่คำตอบจะถูกสร้างเสร็จสมบูรณ์ ซึ่งแบบนี้จะกลายเป็นเราได้คำตอบที่อาจเอาไปใช้งานต่อไม่ได้
จากปัญหาข้างต้นมีเทคนิควิธีการแก้ไขด้วยการระบุจำนวน limit ให้กับ token ลงไปใน prompt ได้เลยครับ
{
"model": "text-davinci-003",
"prompt": "Explain the text completion api in 50 or less tokens.",
"max_tokens": 50
}
มาดู Completion response กันครับ
เราจะได้ค่า finish_reason มีค่าเป็น “stop” ก็คือข้อความคำตอบถูกสร้างเสร็จสมบูรณ์และเป็นคำตอบที่สามารถเอาไปใช้งานต่อไปได้ครับ
หวังว่าเทคนิคนี้จะทำให้เราเข้าใจการควบคุม token ของเรามากขึ้นนะครับ
ไว้คร่าวหน้าจะมาอธิบายส่วนสำคัญอื่นๆ ที่จำเป็นต้องรู้ในการนำไปใช้ต่อยอดในการพัฒนาเชิงธุรกิจต่อไปครับ