1. พื้นฐานของโมเดลสร้างข้อความ
โมเดลสร้างข้อความของ OpenAI ซึ่งโดยทั่วไปก็จะถูกเรียกว่า Generative Pre-trained Transformer (GPT) จะพึงพอใจกับหลักการของการทำงานของตนเองคือ self-attention mechanism ในการเรียนรู้ลึกและประมวลผลภาษาธรรมชาติ การฝึกฝนของโมเดล GPT ประกอบด้วยสองขั้นตอน: pre-training และ fine-tuning.
การ Pre-training
ระหว่างขั้นตอน pre-training, โมเดลจะผ่านการเรียนรู้แบบไม่มีการตรวจสอบผ่านชุดข้อมูลข้อความขนาดใหญ่ ในขั้นตอนนี้ โมเดลจะถูกฝึกโดยการพยากรณ์คำถัดไป ตัวอย่างเช่น ให้กับประโยค "ฉันมีปากกา" หลังจากที่มองเหนกันคำแรกๆ โมเดลจะพยากรณ์คำ "ปากกา" วัตถุประสงค์หลักของการ pre-training คือเพื่อทำให้โมเดลสามารถเข้าใจโครงสร้างและความหมายของภาษา
การ fine-tuning
การช่วยปรับแต่งโมเดลในขั้นตอน fine-tuning ให้เป็นการเรียนรู้ซึ่งถูกกำกับดูแลในงานที่เฉพาะ ในขั้นตอนนี้ โมเดลจะถูกปรับเพื่อที่จะเข้ากันกับการประยุกต์พิเศษ เช่น ระบบตอบคำถามและสรุปเอกสาร fine-tuning นำมาฝึกโมเดลเพิ่มเติมด้วยชุดข้อมูลที่ถูกหมุนเวียนโดยใช้โมเดลที่ได้รับการ pre-trained ทำให้โมเดลสามารถที่จะปรับมากขึ้นกับงานที่เฉพาะ
2. สถานการณ์การประยุกต์ใช้
โมเดลสร้างข้อความของ OpenAI สามารถประยุกต์ใช้กับหลายสถานการณ์ได้ ต่อไปนี้คือสถานการณ์การประยุกต์ที่เฉพาะเจาะจงบางอย่าง:
- การร่างเอกสาร: ช่วยให้ผู้ใช้สามารถร่างและแก้ไขเอกสารอย่างรวดเร็ว
- เขียนโค้ดคอมพิวเตอร์: สร้างโค้ดส่วนย่อยเพื่อช่วยในการเขียนโปรแกรม
- ตอบคำถามเกี่ยวกับฐานความรู้: ให้คำตอบโดยตั้งฐานความรู้ที่เก็บไว้
- การวิเคราะห์ข้อความ: สกัดสาระข้อความ วิเคราะห์อารมณ์ และอื่นๆ
- การให้ส่วนของอินเตอร์เฟซภาษาธรรมชาติสำหรับซอฟต์แวร์: อนุญาตให้ผู้ใช้ที่จะปฏิสัยกับซอฟต์แวร์โดยใช้อารมณ์ธรรมชาติ
- ผู้ช่วยสอนในหลายๆ เรื่อง: ให้คำแนะนำการสอนในหลายเรื่อง
- การแปลภาษา: การแปลข้อความไปมาระหว่างภาษาที่แตกต่างกัน
- การจำลองตัวละครสำหรับเกม: สร้างบทสนทนาและเรื่องราวพื้นหลังสำหรับเกมหรือสถานการณ์เล่นบทบาท
3. การนำเสนอโมเดลโต้ตอบ
โมเดลโต้ตอบเป็นชนิดพิเศษของโมเดลสร้างข้อความที่เข้าใจและสร้างการสนทนาธรรมชาติผ่านการเทรนแบบ pre-training โมเดลนี้สามารถจำลองการสนทนาระหว่างผู้ใช้และผู้ช่วยส่วนตัวirtual assistant ที่เหมาะสำหรับการประยุกต์ใช้แบบทันเวลา
การนำโมเดลโต้ตอบมักเกี่ยวข้องกับการสนทนาแบบหลายรอบ ตัวอย่างเช่น เมื่อผู้ใช้ถามคำถาม โมเดลสามารถสร้างการตอบที่เหมาะสมจากข้อมูลการฝึกก่อนหน้านี้ อีกทั้ง โมเดลโต้ตอบสามารถเก็บข้อมูลแวดล้อม เพิ่มเติมโดยที่พิจารณาเนื้อหาสนทนาก่อนหน้าเพื่อสร้างการตอบที่มีเนื้อหาที่สามารถติดต่อกันและถาวร
สถานการณ์การประยุกต์ใช้ของโมเดลโต้ตอบ:
- ผู้ช่วยบริการลูกค้า: ตอบคำถามที่ลูกค้าถามบ่อยๆ ให้คำปรึกษาและคำแนะนำ
- แชทบอท: มีการสนทนาแบบธรรมชาติกับผู้ใช้
- ผู้ช่วยส่วนตัว: ดำเนินการคำสั่งเสียงของผู้ใช้ เช่น การตั้งนัดพบ การตั้งคำแนะนำ และอื่นๆ
- เกมบทบาท: บ enriched ประสบการณ์ในการเล่นเกมโดยให้ตัวละครของเกมคุยและมีลักษณะเฉพาะ
4. โมเดลโต้ตอบ API
API ของโมเดลโต้ตอบช่วยให้นักพัฒนาสามารถปฏิสัยกับโมเดล GPT ผ่านการส่งคำขอ HTTP ส่วนนี้จะแนะนำวิธีใช้ curl เพื่อสร้างคำขอ และแยกวิเคราะห์การตอบที่ถูกส่งกลับจากโมเดล
สร้างคำขอ
ก่อนที่จะเริ่มต้น คุณต้องลงทะเบียนและรับคีย์ API จาก OpenAI ซึ่งจำเป็นต้องได้รับการรับรองผ่านหัวข้อการส่งคำขอด้วย HTTP
ต่อนี้คือตัวอย่างการใช้ curl เพื่อส่งคำขอไปยัง API โมเดลโต้ตอบ:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Which team won the 2020 World Series?"
}
]
}'
ความหมายของพารามิเตอร์ของโมเดลโต้ตอบ
เมื่อใช้ API ของโมเดลโต้ตอบของ OpenAI, พารามิเตอร์หลักมี "model" และ "messages" แต่ละอย่างมีความหมายเฉพาะเจาะจงและส่งผลต่อผลลัพธ์ที่ได้โดยโมเดล
พารามิเตอร์ของโมเดล
พารามิเตอร์ของโมเดลถูกใช้เพื่อระบุเวอร์ชันของโมเดลที่จะใช้ ตัวอย่างเช่น "model": "gpt-3.5-turbo"
แสดงให้เห็นว่าคุณกำลังร้องขอใช้โมเดล GPT-3.5-Turbo โมเดลที่เลือกที่นี่จะตอบกลับการป้อนข้อมูลของผู้ใช้โดยขึ้นอยู่กับความสามารถ ข้อมูลการฝึกฝน และคุณสมบัติของอินเทอร์เฟซ
นี่คือโมเดลที่รองรับอยู่ในปัจจุบัน:
โมเดลที่รองรับ | ความยาวสูงสุดของคำอธิบาย | รายละเอียดของโมเดล |
---|---|---|
gpt-4-0125-preview | 128,000 โทเค็น | โมเดลพรีวิว GPT-4 Turbo ที่ออกแบบมาเพื่อลด "lazy" cases ซึ่งจะทำให้โมเดลไม่สามารถทำงานเสร็จสิ้นได้ |
gpt-4-turbo-preview | 128,000 โทเค็น | ปัจจุบันชี้ไปที่โมเดล gpt-4-0125-preview |
gpt-4-1106-preview | 128,000 โทเค็น | โมเดล GPT-4 Turbo ที่มีความสามารถในการดำเนินการคำสั่งที่ปรับปรุง โหมด JSON ผลลัพธ์ที่สามารถทำซ้ำ และการเรียกใช้ฟังก์ชันแบบพร้อมเพียงคนิอย่างเดียว |
gpt-4-vision-preview | 128,000 โทเค็น | โมเดล GPT-4 ที่มีความสามารถในการเข้าใจภาพ นอกจากความสามารถอื่น ๆ ของ GPT-4 Turbo อีกด้วย |
gpt-4 | 8,192 โทเค็น | ปัจจุบันชี้ไปที่ gpt-4-0613 |
gpt-4-0613 | 8,192 โทเค็น | สแนปช็อตของ GPT-4 จากวันที่ 13 มิถุนายน 2023 ที่มีการสนับสนุนฟังก์ชันการเรียกใช้ที่ปรับปรุง |
gpt-4-32k | 32,768 โทเค็น | ปัจจุบันชี้ไปที่ gpt-4-32k-0613 โมเดลนี้ไม่ได้รับการโปรโมทอย่างกว้างขวางและชอบการใช้ GPT-4 Turbo เป็นพิเศษ |
gpt-4-32k-0613 | 32,768 โทเค็น | สแนปช็อตของ GPT-4 32k จากวันที่ 13 มิถุนายน 2023 โมเดลนี้ไม่ได้รับการโปรโมทและชอบการใช้ GPT-4 Turbo เป็นพิเศษ |
gpt-3.5-turbo-1106 | 16,385 โทเค็น | โมเดล GPT-3.5 Turbo ล่าสุดที่มีความสามารถในการดำเนินการคำสั่งที่ปรับปรุง โหมด JSON ผลลัพธ์ที่สามารถทำซ้ำ และการเรียกใช้ฟังก์ชันแบบพร้อมเพียงคนิอย่างเดียว |
gpt-3.5-turbo | 4,096 โทเค็น | ปัจจุบันชี้ไปที่ gpt-3.5-turbo-0613 |
gpt-3.5-turbo-16k | 16,385 โทเค็น | ปัจจุบันชี้ไปที่ gpt-3.5-turbo-16k-0613 |
gpt-3.5-turbo-instruct | 4,096 โทเค็น | มีความสำคัญตามแบบจงรถข้อความในยุคของ GPT-3 สามารถปรับใช้กับจุดปลายที่เพิมเตล้าเก่า แต่ไม่เหมาะสำหรับการทำการสรุปแชท |
gpt-3.5-turbo-0613 | 4,096 โทเค็น | สแนปช็อตของ gpt-3.5-turbo จากวันที่ 13 มิถุนายน 2023 จะไม่สามารถใช้ได้หลังจากวันที่ 13 มิถุนายน 2024 |
gpt-3.5-turbo-16k-0613 | 16,385 โทเค็น | สแนปช็อตของ gpt-3.5-16k-turbo จากวันที่ 13 มิถุนายน 2023 จะไม่สามารถใช้ได้หลังจากวันที่ 13 มิถุนายน 2024 |
gpt-3.5-turbo-0301 | 4,096 โทเค็น | สแนปช็อตของ gpt-3.5-turbo จากวันที่ 1 มีนาคม 2023 จะไม่สามารถใช้ได้หลังจากวันที่ 13 มิถุนายน 2024 |
พารามิเตอร์ข้อความ
พารามิเตอร์ข้อความเป็นอาร์เรย์ แต่ละส่วนแทนข้อมูลข้อความในการสนทนา แต่ละข้อความเป็นออบเจ็กต์ซึ่งรวมถึงคุณสมบัติสองอย่าง: บทบาท (บทบาทของผู้ส่ง) และเนื้อหา (เนื้อหาของข้อความนั้น)
- role: กำหนดบทบาทของผู้ส่งข้อความ ค่าทางเลือกได้ระหว่าง "ระบบ", "ผู้ใช้", และ "ผู้ช่วยเหลือ"
- content: เนื้อหาที่แตกต่างกันของข้อความ
ประเภทและฟังก์ชั่นของบทบาท
บทบาท 'ระบบ'
ข้อความของระบบถูกใช้เพื่อระบุพฤติกรรมของโมเดลอย่างกว้างขวาง ตัวอย่างเช่น มันสามารถระบุชัดเจนหน้าที่ที่โมเดลเล่นบท(เช่น ผู้ช่วย, ล่าม, ฯลฯ) หรือให้คำสั่งเฉพาะที่ต้องทำตามในการสนทนา ข้อความของระบบสร้างผลกระทบในฝั่งของพฤติกรรมของโมเดลไปตลอดการสนทนา แต่มักจะไม่จำเป็นที่จะต้องมีเสมอ
ตัวอย่างเช่น ถ้าคุณต้องการให้โมเดลมีส่วนร่วมในการสนทนาเป็นตัวแทนบริการลูกค้า คุณสามารถระบุได้ในข้อความของระบบ:
{
"role": "system",
"content": "คุณเป็นตัวแทนบริการลูกค้า"
}
บทบาท 'ผู้ใช้'
ข้อความของผู้ใช้แทนคำถามที่ผู้ใช้ป้อนเข้ามา โมเดลตอบกลับข้อความเหล่านี้และให้ข้อมูล คำตอบ หรือรูปแบบอื่น ๆ ของการเอาเสีย นี่เป็นส่วนสำคัญของไฟล์ข้อมูลของ Dialogue API และมักจะสอดคล้องกับคำถามจริงของผู้ใช้ในแอปลิเคชั่น
ตัวอย่างเช่น ในคำขอของผู้ใช้ในตัวอย่าง curl ข้างต้น:
{
"role": "user",
"content": "ทีมไหนได้รับแชมป์ซีรีส์โลกปี 2020?"
}
บทบาท 'ผู้ช่วย'
ข้อความของผู้ช่วยมักอ้างถึงคำตอบที่โมเดลสร้างขึ้นและยังสามารถเป็นส่วนของประวัติของการสนทนาที่นักพัฒนาระบุ ซึ่งใช้เพื่อจำลองรูปแบบของข้อความที่ AI ส่งกลับมา ในคำขอ API ข้อความตำแหน่งของผู้ช่วยมักจะไม่ถูกรวบและอาจจะต้องระบุมันเพียงถ้าจำเป็นต้องตั้งรูปแบบของโมเดลในการตอบคำถามที่อยู่ในประวัติการสนทนาเพื่อให้ตัวอย่างเอาเสียสำหรับโมเดล
วิเคราะห์การตอบกลับ
คำตอบของโมเดลถูกส่งกลับมาในรูปแบบ JSON ตามนี้คือตัวอย่างการวิเคราะห์การตอบกลับ:
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "แชมป์ซีรีส์โลกปี 2020 คือทีม Los Angeles Dodgers ค่ะ",
"role": "assistant"
},
"logprobs": null
}
],
"created": 1677664795,
"id": "chatcmpl-7QyqpwdfhqwajicIEznoc6Q47XAyW",
"model": "gpt-3.5-turbo-0613",
"object": "chat.completion",
"usage": {
"completion_tokens": 17,
"prompt_tokens": 57,
"total_tokens": 74
}
}
ในการตอบกลับด้านบนคุณสามารถได้รับคำตอบของโมเดลจาก choices[0].message.content
วิธีการนำระบบหน่วยจำมาใช้ในโมเดลสนทนา
ด้านล่างนี้คือตัวอย่างการใช้ OpenAI's Chat Completions API เพื่อนำฟังก์ชันหน่วยจำของโมเดล GPT เข้ามาใช้ ซึ่งสาเหตุการณ์การใช้เครื่องมือนี้เป็นการบันทึกประวัติของบทสนทนาก่อนหน้า (เช่น เนื้อหาของหน่วยจำ) ในคำขอ API ใหม่เพื่อให้สามารถสนทนาต่อไปได้ต่อเนื่อง
import requests
api_url = "https://api.openai.com/v1/chat/completions"
api_key = "Your OpenAI API Key"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_key}"
}
data = {
"model": "gpt-3.5-turbo", # สามารถเปลี่ยนเป็น gpt-4 หรือโมเดลที่ใช้งานได้อื่น ๆ
"messages": [
{
"role": "system", # ข้อความของระบบ ใช้เพื่อกำหนดพฤติกรรมของโมเดลสนทนา
"content": "You are a help assistant."
},
{
"role": "user", # ข้อความจากผู้ใช้ โมเดลจะตอบกลับตามข้อความนี้
"content": "Can you tell me the main reasons for climate change?"
},
{
"role": "assistant", # การตอบของโมเดล
"content": "The main reasons for climate change include greenhouse gas emissions, fossil fuel combustion, and deforestation, etc."
},
{
"role": "user", # คำถามใหม่โดยใช้ข้อมูลจากการตอบของโมเดล
"content": "How can we reduce greenhouse gas emissions?"
}
]
}
response = requests.post(api_url, headers=headers, json=data)
if response.status_code == 200:
reply_content = response.json()['choices'][0]['message']['content']
print(f"Model's response => {reply_content}")
else:
print(f"Request error: {response.status_code}")
ในตัวอย่างนี้ เราจำลองว่าผู้ใช้ถามเกี่ยวกับสาเหตุหลักของการเปลี่ยนแปลงสภาพอากาศ และถามคำถามอื่นๆ จากคำตอบของโมเดล ในคำขอที่ตามมา เราเก็บเนื้อหาของการสนทนาก่อนหน้าเพื่อให้โมเดลจำประวัติการสนทนาก่อนหน้าและสร้างคำตอบขึ้นมาขึ้นอยู่กับประวัติการสนทนานี้ เทคนิคนี้ทำให้สามารถทำการส่งและจำได้ว่าสถานะของสนทนาโดยการใช้ข้อมูลของการสนทนาก่อนหน้าและสร้างคำตอบขึ้นมาขึ้นอยู่กับเนื่อหานั้น
เกร็ดคำแนะนำ: ในการนำระบบหน่วยจำมาใช้ในสนทนา โมเดลมีข้อจำกัดในการให้โทเคน ทำให้ไม่สามารถนำข้อความทั้งหมดของการสนทนาก่อนหน้ามาส่งเสริมสร้างให้กับคำขอแต่ละครั้ง โดยทั่วไปแล้ว ข้อความที่เกี่ยวข้องกับคำถามปัจจุบันถูกนำมาเสริมสร้างให้กับโมเดล และส่วนที่ตามจะแนะนำถึงตัวอย่างของเอมเบดดิงสำหรับค้นหาความคล้ายคลึงของข้อความ
5. โครงสร้างของ JSON
JSON Schema เป็นคุณสมบัติหนึ่งของ dialogue model API ที่ช่วยให้ผู้ใช้สั่งให้โมเดลส่งออกเป็นวัตถุ JSON เสมาะสำหรับสถานการณ์ที่ต้องรับคำตอบในรูปแบบ JSON
การใช้ JSON Schema
เพื่อใช้ JSON Schema คุณต้องกำหนดฟิลด์ response_format
เป็น { "type": "json_object" }
ในส่วนของร่างคำขอ HTTP และตรวจสอบว่าข้อความของระบบระบุว่าการส่งออกของโมเดลเป็นในรูปแบบ JSON ดังต่อไปนี้เป็นตัวอย่างของการใช้งานด้วย curl:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-3.5-turbo-1106",
"response_format": { "type": "json_object" },
"messages": [
{
"role": "system",
"content": "You are a helpful assistant designed to output JSON."
},
{
"role": "user",
"content": "Which team won the 2020 World Series?"
}
]
}'
การแยกวิเคราะห์การตอบสนอง JSON Schema
ในโหมด JSON Schema การตอบสนองจะประกอบด้วยอ็อบเจ็กต์ JSON ที่ถูกแยกวิเคราะห์อย่างสมบูรณ์และถูกต้อง โหมดนี้ให้ความมั่นใจว่าเอาท์พุตของโมเดลคืออ็อบเจ็กต์ JSON ที่ถูกต้องที่สามารถแยกวิเคราะห์และใช้งานได้โดยตรง ด้านล่างนี้เป็นตัวอย่างของการตอบสนองที่สามารถที่จะถูกรีเทิร์นออกมาโดยใช้ JSON Schema:
{
"choices": [
{
"finish_reason": "stop",
"message": {
"content": "{\"winner\": \"Los Angeles Dodgers\"}"
}
}
]
}
ใน Python คุณสามารถใช้โค้ดต่อไปนี้เพื่อแยกวิเคราะห์เนื้อหาจากการตอบสนอง:
import json
response = {
"choices": [
{
"finish_reason": "stop",
"message": {
"content": "{\"winner\": \"Los Angeles Dodgers\"}"
}
}
]
}
response_content = json.loads(response['choices'][0]['message']['content'])
print(response_content)
ผลลัพธ์จะเป็น:
{'winner': 'Los Angeles Dodgers'}
JSON Schema ให้วิธีการที่น่าเชื่อถือในการให้ความแน่ใจในการจัดรูปแบบของการตอบสนองสำหรับกรณีใช้โดยเฉพาะ ดังนั้น เราขอแนะนำให้เปิดใช้ JSON Schema ในสถานการณ์ที่มีความต้องการเฉพาะเจาะจงสำหรับรูปแบบการตอบสนองของ API สามารถทำได้