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 สามารถทำได้