API v1 · Production Ready

OKMD AI Playground API
คู่มือการใช้งาน

API บริการ AI Chat Completions ที่รองรับมาตรฐาน OpenAI และ Anthropic ให้คุณเชื่อมต่อกับโมเดล AI ชั้นนำผ่าน endpoint เดียว พร้อมระบบจัดการ token quota และการบันทึกการใช้งานอัตโนมัติ

OpenAI Compatible

ใช้ SDK เดิมของ OpenAI ได้ทันที

🤖

Anthropic Compatible

รองรับ Messages API ของ Claude

🌊

Streaming Support

Server-Sent Events แบบเรียลไทม์

🔐

Token Quota

จำกัดและติดตามการใช้งานรายวัน

ภาพรวม

ทำความรู้จักกับ OKMD AI Playground API

Base URL

https://gen.ai.kku.ac.th/okmd/api/v1

ทุก request จะถูกส่งไปยัง base URL ด้านบน โดย API ออกแบบให้เข้ากันได้กับ OpenAI SDK และ Anthropic SDK แบบ drop-in คุณสามารถเปลี่ยนเฉพาะ baseURL ใน SDK เดิมของคุณได้ทันที

💡
เคล็ดลับ: หากคุณกำลังใช้ OpenAI SDK อยู่แล้ว คุณสามารถสลับมาใช้ OKMD AI Playground API ได้ทันที โดยเปลี่ยนแค่ baseURL และ apiKey

เริ่มต้นอย่างรวดเร็ว

เรียกใช้ API ครั้งแรกของคุณภายในไม่กี่นาที

1. ขอ API Key

เข้าสู่ระบบที่ https://playground.okmd.or.th ไปที่หน้าตั้งค่า → API Platform เพื่อสร้าง key ส่วนตัวของคุณ

2. ส่ง Request แรก

curl https://gen.ai.kku.ac.th/okmd/api/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d '{
    "model": "gemini-3.5-flash",
    "messages": [
      {"role": "user", "content": "สวัสดี"}
    ]
  }'
from openai import OpenAI

client = OpenAI(
    base_url="https://gen.ai.kku.ac.th/okmd/api/v1",
    api_key="YOUR_KKU_API_KEY",
)

response = client.chat.completions.create(
    model=1,
    messages=[
        {"role": "user", "content": "สวัสดี"}
    ],
)

print(response.choices[0].message.content)
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://gen.ai.kku.ac.th/okmd/api/v1",
  apiKey: process.env.API_KEY,
});

const response = await client.chat.completions.create({
  model: 1,
  messages: [
    { role: "user", content: "สวัสดี" }
  ],
});

console.log(response.choices[0].message.content);

Authentication

การยืนยันตัวตนสำหรับเรียกใช้ API

Bearer Token (แนะนำ)

ส่ง API Key ของคุณผ่าน HTTP Header Authorization ในรูปแบบ Bearer token

Authorization: Bearer YOUR_API_KEY
⚠️
ความปลอดภัย: ห้ามฝัง API Key ในโค้ดฝั่ง client หรือ commit ลงใน Git ให้เก็บไว้ใน environment variable หรือ secret manager เสมอ

API Endpoints

รายละเอียดของแต่ละ endpoint ที่ให้บริการ

GET /models

ดึงรายการโมเดล AI ทั้งหมดที่ใช้งานได้ (รูปแบบ OpenAI-compatible) · มี alias เป็น /chat/models

ตัวอย่าง Request

curl https://gen.ai.kku.ac.th/okmd/api/v1/models \
  -H "Authorization: Bearer $API_KEY"

ตัวอย่าง Response

{
  "object": "list",
  "data": [
    {
      "id": 1,
      "object": "model",
      "created": 1761053047,
      "owned_by": "claude-sonnet-4"
    },
    {
      "id": 2,
      "object": "model",
      "created": 1761053047,
      "owned_by": "gpt-5"
    }
  ]
}
POST /chat/models-list

ดึงรายการโมเดลในรูปแบบเรียบง่าย (เฉพาะ id และ name) เหมาะสำหรับใช้งานภายในแอปพลิเคชัน

ตัวอย่าง Response

[
  { "id": 1, "name": "claude-sonnet-4" },
  { "id": 2, "name": "gpt-5" },
  { "id": 3, "name": "gemini-2.5-pro" }
]
POST /chat/completions

สร้างคำตอบจาก AI ในรูปแบบ OpenAI Chat Completions API · alias: /completions

Request Body

Field Type Description
modelrequired number ID ของโมเดล (ดึงได้จาก /models)
messagesrequired array รายการข้อความในรูปแบบ { role, content }
streamoptional boolean เปิด streaming response แบบ SSE (default: false)
temperatureoptional number ความสุ่ม 0-2 (ค่าน้อย = สุ่มน้อย)
max_tokensoptional number จำกัดจำนวน token ของคำตอบ
toolsoptional array นิยาม function tools สำหรับ tool calling
tool_choiceoptional string / object วิธีเลือก tool: auto, none หรือระบุชื่อ

ตัวอย่าง Request

curl https://gen.ai.kku.ac.th/okmd/api/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d '{
    "model": "gemini-3.5-flash",
    "messages": [
      {"role": "system", "content": "คุณคือผู้ช่วยอัจฉริยะของ OKMD สำนักงานบริหารและพัฒนาองค์ความรู้"},
      {"role": "user", "content": "แนะนำ OKMD สำนักงานบริหารและพัฒนาองค์ความรู้ ให้หน่อย"}
    ],
    "temperature": 0.7,
    "max_tokens": 1024
  }'
from openai import OpenAI

client = OpenAI(
    base_url="https://gen.ai.kku.ac.th/okmd/api/v1",
    api_key=os.environ["API_KEY"],
)

response = client.chat.completions.create(
    model=1,
    messages=[
        {"role": "system", "content": "คุณคือผู้ช่วยอัจฉริยะของ OKMD สำนักงานบริหารและพัฒนาองค์ความรู้"},
        {"role": "user", "content": "แนะนำคณะวิศวฯ ให้หน่อย"},
    ],
    temperature=0.7,
    max_tokens=1024,
)

print(response.choices[0].message.content)
print("คงเหลือ:", response.model_quota.daily_remaining_tokens)
import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://gen.ai.kku.ac.th/okmd/api/v1",
  apiKey: process.env.API_KEY,
});

const response = await client.chat.completions.create({
  model: 1,
  messages: [
    { role: "system", content: "คุณคือผู้ช่วยอัจฉริยะของ OKMD สำนักงานบริหารและพัฒนาองค์ความรู้" },
    { role: "user", content: "แนะนำคณะวิศวฯ ให้หน่อย" }
  ],
  temperature: 0.7,
  max_tokens: 1024,
});

console.log(response.choices[0].message.content);
// เปิด stream: true เพื่อรับผลแบบ Server-Sent Events
const stream = await client.chat.completions.create({
  model: 1,
  messages: [{ role: "user", content: "เล่านิทานสั้นๆ" }],
  stream: true,
});

for await (const chunk of stream) {
  const delta = chunk.choices[0]?.delta?.content || "";
  process.stdout.write(delta);

  // chunk สุดท้ายจะมี usage และ model_quota
  if (chunk.usage) console.log("\nused:", chunk.usage);
}

ตัวอย่าง Response (non-streaming)

{
  "id": "genai-018f5c...",
  "object": "chat.completion",
  "created": 1715000000,
  "model": 1,
  "provider": "claude-sonnet-4",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "OKMD สำนักงานบริหารและพัฒนาองค์ความรู้ ก่อตั้งเมื่อ...",
        "reasoning": ""
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 42,
    "completion_tokens": 128,
    "total_tokens": 170
  },
  "model_quota": {
    "daily_quota_tokens": 100000,
    "daily_usage_tokens": 170,
    "daily_remaining_tokens": 99830
  }
}
📊
model_quota: ทุก response จะมีฟิลด์นี้แนบมาด้วย เพื่อให้คุณทราบจำนวน token ที่ใช้ไปและที่เหลือต่อวันแบบเรียลไทม์
POST /messages

Anthropic Messages API – เหมาะสำหรับใช้กับโมเดลตระกูล Claude และรองรับ feature พิเศษเช่น thinking, system prompt แยก

Request Body

Field Type Description
modelrequirednumberID ของโมเดล
messagesrequiredarrayรายการข้อความสนทนา
systemoptionalstringSystem prompt แยกจาก messages
max_tokensoptionalnumberจำกัด output (default: 4096)
temperatureoptionalnumberความสุ่มของคำตอบ
top_p / top_koptionalnumberSampling parameters
stop_sequencesoptionalarrayหยุดการสร้างเมื่อพบ pattern
thinkingoptionalobjectเปิดโหมด extended thinking
tools / tool_choiceoptionalarrayกำหนด tools สำหรับ tool use
streamoptionalbooleanเปิด streaming response

ตัวอย่างการใช้งาน

curl https://gen.ai.kku.ac.th/okmd/api/v1/messages \
  -H "Content-Type: application/json" \
  -H "x-api-key: $API_KEY" \
  -d '{
    "model": "gemini-3.5-flash",
    "max_tokens": 1024,
    "system": "คุณคือผู้ช่วยอัจฉริยะของ OKMD สำนักงานบริหารและพัฒนาองค์ความรู้",
    "messages": [
      {"role": "user", "content": "อธิบาย RAG ให้ฟังหน่อย"}
    ]
  }'
import anthropic

client = anthropic.Anthropic(
    base_url="https://gen.ai.kku.ac.th/okmd/api",
    api_key="YOUR_KKU_API_KEY",
)

response = client.messages.create(
    model=1,
    max_tokens=1024,
    system="คุณคือผู้ช่วยอัจฉริยะของ OKMD สำนักงานบริหารและพัฒนาองค์ความรู้",
    messages=[
        {"role": "user", "content": "อธิบาย RAG ให้ฟังหน่อย"}
    ],
)

print(response.content[0].text)
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  baseURL: "https://gen.ai.kku.ac.th/okmd/api",
  apiKey: process.env.API_KEY,
});

const response = await client.messages.create({
  model: 1,
  max_tokens: 1024,
  system: "คุณคือผู้ช่วยอัจฉริยะของ OKMD สำนักงานบริหารและพัฒนาองค์ความรู้",
  messages: [
    { role: "user", content: "อธิบาย RAG ให้ฟังหน่อย" }
  ],
});

console.log(response.content[0].text);

ตัวอย่าง Response

{
  "id": "msg_018f5c...",
  "type": "message",
  "role": "assistant",
  "content": [
    { "type": "text", "text": "RAG ย่อมาจาก Retrieval-Augmented..." }
  ],
  "stop_reason": "end_turn",
  "usage": {
    "input_tokens": 38,
    "output_tokens": 256
  },
  "model_quota": {
    "daily_quota_tokens": 100000,
    "daily_usage_tokens": 294,
    "daily_remaining_tokens": 99706
  }
}

Error Codes

รหัสข้อผิดพลาดที่อาจพบและวิธีแก้ไข

Status Error Message สาเหตุ / วิธีแก้
401 Invalid API key API key ไม่ถูกต้อง หรือไม่ได้ส่ง Header Authorization / x-api-key
401 Invalid model model id ไม่มีในระบบ หรือถูกปิดใช้งาน ตรวจสอบจาก /models
401 This model reached daily limit. ใช้งานเกินโควต้าประจำวันของโมเดลนี้ รอวันถัดไป หรือขอเพิ่ม quota
400 messages is required ไม่ได้ส่งฟิลด์ messages หรือส่งเป็น array ว่าง

Token Quota

ระบบโควต้าและการคำนวณ token

การคำนวณ Quota

ทุก response จะมีออบเจ็กต์ model_quota แนบมาด้วย ประกอบด้วย:

  • daily_quota_tokens – โควต้าทั้งหมดต่อวัน
  • daily_usage_tokens – จำนวนที่ใช้ไปแล้ว (รวม request นี้)
  • daily_remaining_tokens – จำนวนที่เหลือสำหรับวันนี้
♻️
การ Reset: โควต้าจะรีเซ็ตทุกวันโดยอัตโนมัติ

· OKMD AI Playground API ·

© 2026 Unleash Your Potential. All rights reserved.