อินเทอร์เฟซ Chat completion

โครงสร้างคำขอ/คำตอบ การสตรีม และเอนด์พอยต์ที่เทียบเท่าในโปรโตคอล Anthropic และ Gemini

Chat completion เป็นเอนด์พอยต์ที่ถูกใช้มากที่สุด ส่งรายการข้อความไปยังโมเดลแล้วรับคำตอบที่สร้างขึ้นกลับมา ทางเข้าหลักของแพลตฟอร์มคือโปรโตคอลแบบ OpenAI-compatible ส่วนโปรโตคอล Anthropic และ Gemini นั้นเทียบเท่ากันในเชิงโครงสร้าง

รูปแบบคำขอ (OpenAI-compatible)

POST {base}/chat/completions — การยืนยันตัวตนดูที่การยืนยันตัวตน:

{
  "model": "your-model",
  "messages": [
    {"role": "system", "content": "You are a support assistant."},
    {"role": "user", "content": "Where is my order?"},
    {"role": "assistant", "content": "Sure, may I have the order number?"},
    {"role": "user", "content": "A1024"}
  ],
  "temperature": 0.7,
  "max_tokens": 1024,
  "stream": false
}
  • messages คือประวัติบทสนทนาตามลำดับ โดย role มีค่าเป็น system / user / assistant สำหรับบทสนทนาแบบหลายรอบ ไคลเอนต์จะต่อประวัติทั้งหมดแล้วส่งไปใหม่ทุกครั้ง
  • ค่า temperature ที่สูงขึ้นหมายถึงผลลัพธ์ที่หลากหลายขึ้น (มักใช้ช่วง 0–1) ส่วน max_tokens จำกัดความยาวของคำตอบ
  • สตรีมมิ่ง: เมื่อตั้ง "stream": true คำตอบจะถูกส่งกลับแบบทยอยผ่าน SSE (choices[0].delta) เหมาะอย่างยิ่งกับการแสดงข้อความขณะที่ถูกสร้างขึ้น SDK อย่างเป็นทางการเพียงส่ง stream=True แล้ววนอ่านค่า

รูปแบบคำตอบ

ฟิลด์สำคัญของคำตอบแบบไม่สตรีม:

{
  "choices": [
    {
      "message": {"role": "assistant", "content": "..."},
      "finish_reason": "stop"
    }
  ],
  "usage": {"prompt_tokens": 58, "completion_tokens": 132, "total_tokens": 190}
}
  • choices[0].message.content เก็บคำตอบไว้ ส่วน finish_reason ค่า stop หมายถึงจบอย่างเป็นธรรมชาติ และค่า length หมายถึงถูกตัดเพราะถึงขีดจำกัด max_tokens
  • usage คือปริมาณโทเคนที่ใช้ในการเรียกครั้งนี้ ทั้งการคิดค่าบริการและหน้า "การใช้งาน" ใช้อ้างอิงจากค่านี้

เอนด์พอยต์ที่เทียบเท่าในโปรโตคอลอื่น

  • Anthropic: POST {base}/v1/messages — ชื่อฟิลด์ต่างกัน (max_tokens เป็นฟิลด์บังคับ คำตอบอยู่ในอาร์เรย์ content) นอกนั้นความหมายเหมือนกันทั้งหมด
  • Gemini: POST {base}/v1beta/models/{model}:generateContent — ข้อความอยู่ในอาร์เรย์ contents

โปรโตคอลทั้งสามแบบเทียบเท่ากันในเชิงโครงสร้าง การย้ายมาใช้จึงเป็นการเปลี่ยนชื่อฟิลด์เป็นหลัก วิธีที่ได้ผลจริงที่สุดคือใช้ SDK อย่างเป็นทางการที่ตรงกัน (openai / @anthropic-ai/sdk / @google/genai) โดยตั้ง base_url ให้ชี้มาที่แพลตฟอร์ม