เข้าใจการเรียกใช้งาน OpenAI ผ่าน Completions API

Paul Story
4 min readApr 26, 2023

--

ขอเกริ่นนำคร่าวๆ

Completions API เป็นโมเดลพื้นฐานของ OpenAI ที่ให้บริการผ่าน API Service ซึ่ง API นี้ค่อนข้างมีความยืดหยุ่นและใช้งานง่าย เช่นเราส่งคำสั่ง promt (Request) เข้าไปผ่าน API Service ตัว API Service ก็จะส่งข้อความกลับมา (Response)

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

ดังที่เราเห็นกันว่ามีการพัฒนาแอปพลิเคชันและบริการที่น่าสนใจมากมาย ไม่ว่าจะเป็นการสร้างบทความ รีวิวสินค้า ระบบแนะนำสินค้าหรือบริการ หรือแม้กระทั่งการสนับสนุนกระบวนการสื่อสารภายในองค์กรโดยเบื้องหลังก็เริ่มมีการนำ Completions API มาใช้งานแล้ว

ถึงแม้ว่าการใช้งาน Completions API จะดูง่าย แต่เรายังสามารถกำหนดค่าหรือแก้ไขผ่าน parameters ที่ให้มาได้ด้วยตัวเอง ซึ่งมันอาจจะทำให้ได้คำตอบที่ดีขึ้นหรือแย่ลง ก็อยู่ที่เรากำหนดค่า parameters ให้มันครับ

Basic Completion Request

ก่อนอื่นเราจะใช้เครื่องมือที่ชื่อว่า Postman (ดาวน์โหลดได้ที่นี้ครับ Postman API Platform | Sign Up for Free) เพื่อใช้ในการทดสอบการเรียกใช้งาน Completion API ในครั้งนี้ครับ โดยทำตามขั้นตอนดังนี้

1. เปิด Postman Tool ที่ติดตั้งเรียบร้อยแล้ว จากนั้นทำการสร้าง Collection ทางด้านซ้ายมือและกดตรงเครื่องหมายบวกเพื่อเพิ่ม Collection (ถ้าใครคุ้นชินกับ Postman แล้วข้าม Step นี้ไปได้เลยครับ)

2. ทำการตั้งชื่อให้กับ Collections กดเลือกเครื่องหมายคล้ายดินสอ แล้วเปลี่ยนชื่อตามที่เราต้องการในที่นี้ผมใช้ชื่อ “Open-AI-By-Paul” จากนั้นทำการเปลี่ยนประเภทของ Authorization method เป็น “Bearer Token”

แก้ไขชื่อ Collection และเปลี่ยนประเภทของ Authorization method

3. ทำการกำหนดค่า Token ซึ่งเราต้องเอาค่า API-Keys จาก OpenAPI มาใช้ระบุครับ สามารถทำตามขั้นตอนที่เคยเขียนไว้ได้ ที่นี้ ตรงหัวข้อวิธีการสร้าง API- Key ครับ

กำหนดค่า Token จาก API-Keys (OpenAPI)

4. เมื่อกำหนดค่าครบแล้วให้ทำการบันทึกการตั้งค่า กดบันทึกตรงปุ่ม “Save” ครับ

บันทึกการตั้งค่าให้ Collection

5. หลังจากที่เราทำการสร้าง Collection ไว้ใช้งานแล้ว ต่อไปเราจะทำการสร้าง Request เพื่อทำการทดสอบเรียกใช้งาน Completion API ก่อนอื่นกดเลือก “Add a request” ภายใต้ Collection ที่เราสร้างไว้ครับ

เพิ่ม Request ภายใต้ Collections

6. ตั้งชื่อ Request ตามที่เราต้องการในที่นี้ผมใช้ “Demo-By-Paul” จากนั้นทำการเปลี่ยนค่า Method Type ให้เป็น “POST” และกำหนด URL ในช่อง Enter URL or paste text เป็น “https://api.openai.com/v1/completions”

กำหนดค่าให้กับ Request

7. จากนั้นทำการเลือก Authorization และกำหนดประเภทของ Authorization Method เป็น “inherit auth from p…” เพื่อให้ใช้ค่าตาม Collection ที่เราได้ตั้งค่าไว้ เมื่อเลือกเสร็จแล้วกดปุ่ม “Save” เพื่อบันทึกครับ

เลือกประเภท Authorization Method และกดปุ่ม Save

8. ต่อมาเราจะกำหนด Body เพื่อทำการกำหนดข้อมูลที่จะส่งเข้าไปยัง Completion API ในรูปแบบ JSON text ทำตามลำดับตามนี้ครับ Body > raw

กำหนด Body > raw

9. จากนั้นเปลี่ยนประเภทของข้อมูลที่จะใช้ในการส่งคำสั่ง Request ไปยัง Completion API เป็น “JSON” แล้วทำการ copy ตามด้านล่างไปวางในช่องตามหมายเลข 2 ครับ

{
"model": "text-davinci-003"
}
ดำเนินการส่ง Request ไปยัง Completion API

จากนั้นกดปุ่ม “Save” เพื่อบันทึกการตั้งค่า

10. เสร็จการตั้งค่าแล้ว

เอาละเราจะมาทดสอบการเรียกใช้งานโดย กดปุ่ม “Send” ถ้าเรียกใช้งานสำเร็จจะได้ค่า response text กลับมาตามรูปครับ ถ้าไม่ได้กลับมาในลักษณะนี้ถือว่าไม่ผ่าน

ทดสอบเรียกใช้งาน

Completion Response

จากที่ตั้งต้นใน Completion Request เราได้ใช้ model ที่ชื่อ “text-davinci-003” ซึ่งเป็น completion modelในกลุ่ม GPT-3

ผมจะขออธิบายรายละเอียดเพิ่มเติมใน Completion Response

ตัวอย่าง Completion Response

“id”: เป็นค่า unique ไม่สามารถซ้ำกับ response อื่นได้
ประโยชน์คือเอาไว้ใช้เวลาที่เราต้องการตรวจสอบการ response ค่าของเราในภายหลังได้

“object”: คือประเภทค่าของ response type ในที่นี้จะ return ค่ากลับมาเป็น “text_completion” ซึ่งขึ้นกับ endpoint ที่เราเรียกใช้งาน ถ้าเราเลือก endpoint เป็น /edits ค่า object ก็จะมีค่าเป็น “edit”

Model Endpoints

created”: ค่าวันที่เวลา UNIX timestamp ที่ response นี้ถูกสร้างขึ้นมา

model”: ค่า OpenAPI model ที่เราใช้ซึ่งจะเป็นค่าเดียวกับที่เราส่งเข้าไป request ในที่นี้จะเป็น “text-davinci-003”

choices”: คือส่วนที่สำคัญที่ทาง Completion API ได้ response กลับมาให้ ซึ่งค่าข้างในจะประกอบไปด้วยค่าต่างๆดังนี้

{
"text": " §§ FILE scripts/docker_mongodb.sh\n §§ 1000\n#",
"index": 0,
"logprobs": null,
"finish_reason": "length"
}

ยังอยู่กับ “choices” อยู่นะครับ

text: ค่าข้อความ text ที่ response ส่งกลับมาให้ซึ่งเป็นข้อความที่เราต้องการคำตอบจากการส่ง request เข้าไป

index: เป็น index ค่าของ arrays ที่ถูกส่งกลับเข้ามาใน response ถ้าเรามีการกำหนดค่าในตอน request เพื่อต้องการให้ได้คำตอบมากกว่า 1 คำตอบ โดยกำหนดค่า n=จำนวนคำตอบที่อยากได้ ตามตัวอย่างด้านล่างครับ

multiples answers

logprobs: เป็นค่าความสามารถในการคาดเดา ความน่าจะเป็นของคำที่เกิดขึ้นในประโยคคำตอบ ถ้าเราไม่ได้ระบุใน completion request (กำหนดเป็นตัวเลขให้ค่า score) ค่าได้จะเป็น null

finish_reason : เป็นค่าที่บอกว่าการหยุดสร้างข้อความ text response เกิดจากอะไร โดยหลักๆ มีค่าดังนี้

> "stop" คือข้อความ text ได้สร้างเสร็จเรียบร้อยแล้ว และ

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

usage”: จำนวน token ในการเรียกใช้งาน Completion ครั้งนี้

{
"prompt_tokens": 1,
"completion_tokens": 16,
"total_tokens": 17
}

ยังอยู่กับ “usage” อยู่นะครับ

prompt_tokens: คือจำนวน token ของ prompt ที่เราใช้ไปในการเรียกใช้งาน completion request ครั้งนี้

completion_tokens: คือจำนวน token ของ Text คำตอบ (text response ใน “choices” property) ที่ได้รับกลับมาใน completion response

total_tokens: คือจำนวน token ทั้งหมดที่เราใช้ไปทั้งในส่วนของ prompt (completion request) และในส่วนของ Text คำตอบ (completion response)

ทิ้งท้ายกับการส่งข้อความ Prompt request

เราก็แค่เพิ่ม “prompt” property นี้เข้าไปแล้วตามด้วยข้อความ prompt ครับ อย่าลืมกด “Send” ทุกครั้งนะครับเมื่อมีการส่งคำสั่ง completion request ใหม่

{
"model": "text-davinci-003",
"prompt": "Explain the completion api"
}
Completion Request ด้วย prompt property

หลังจากกด Send เรียบร้อยแล้วเราก็จะได้คำตอบใน “choices” property ครับ

คร่าวๆสำหรับการเรียกใช้งาน Completion API เพื่อเป็นแนวทางในการนำไปต่อยอดในการพัฒนาในเชิงธุรกิจต่อไปครับ ขอบคุณที่มา: Introduction — OpenAI API

--

--