เอกสารอ้างอิง API
OpenTyphoon.ai API ได้รับการออกแบบให้เข้ากันได้กับ API ของ OpenAI ทำให้ง่ายต่อการผสานรวมหากคุณคุ้นเคยกับ OpenAI อยู่แล้ว เอกสารอ้างอิงนี้ครอบคลุมถึง endpoints ที่มีทั้งหมด, พารามิเตอร์ที่จำเป็นและไม่จำเป็น และตัวอย่างรูปแบบการตอบกลับ
การยืนยันตัวตน
Section titled “การยืนยันตัวตน”การร้องขอ API ทั้งหมดต้องมีการยืนยันตัวตนโดยใช้ API key ของคุณ โดยรวม API key ของคุณไว้ในส่วนหัว Authorization:
Authorization: Bearer <YOUR_API_KEY>วิธีรับ API Key
Section titled “วิธีรับ API Key”ไปยังหน้า Playground > API Keys
คุณจะต้องสร้างบัญชีและล็อกอินให้เรียบร้อยเสียก่อน
URL พื้นฐาน
Section titled “URL พื้นฐาน”การร้องขอ API ทั้งหมดควรทำไปยัง:
https://api.opentyphoon.ai/v1Endpoints
Section titled “Endpoints”Chat Completions
Section titled “Chat Completions”สร้างการตอบกลับสำหรับการสนทนา
Endpoint: POST /v1/chat/completions
พารามิเตอร์ในส่วนเนื้อหาของคำขอ
Section titled “พารามิเตอร์ในส่วนเนื้อหาของคำขอ”| พารามิเตอร์ | ประเภท | จำเป็น | คำอธิบาย |
|---|---|---|---|
| model | string | ใช่ | ID ของโมเดลที่จะใช้ (เช่น “typhoon-v2.5-30b-a3b-instruct”) |
| messages | array | ใช่ | อาร์เรย์ของออบเจ็กต์ข้อความที่แสดงถึงประวัติการสนทนา |
| max_tokens | integer | ไม่ | จำนวนโทเค็นสูงสุดที่จะสร้าง ค่าเริ่มต้นคือ 150 สูงสุดคือ 8192 โทเค็นที่แบ่งปันระหว่างคำถามและคำตอบ |
| temperature | float | ไม่ | อุณหภูมิการสุ่มตัวอย่างระหว่าง 0 และ 2 ค่าที่สูงกว่าเช่น 0.8 จะทำให้เอาต์พุตมีความสุ่มมากขึ้น ในขณะที่ค่าที่ต่ำกว่าเช่น 0.2 จะทำให้มีความเน้นและแน่นอนมากขึ้น ค่าเริ่มต้นคือ 0.7 |
| top_p | float | ไม่ | ทางเลือกในการสุ่มตัวอย่างด้วยอุณหภูมิ เรียกว่า nucleus sampling เราแนะนำให้ปรับแต่งค่านี้หรืออุณหภูมิ แต่ไม่ควรปรับทั้งสองค่า ค่าเริ่มต้นคือ 1 |
| n | integer | ไม่ | จำนวนตัวเลือกการตอบกลับของการสนทนาที่จะสร้างสำหรับแต่ละข้อความที่ป้อนเข้ามา ค่าเริ่มต้นคือ 1 |
| stream | boolean | ไม่ | หากตั้งค่าเป็น true ข้อความบางส่วนจะถูกส่งเป็นเหตุการณ์ที่เซิร์ฟเวอร์ส่งเฉพาะข้อมูล ค่าเริ่มต้นคือ false |
| stop | string หรือ array | ไม่ | ลำดับสูงสุด 4 ลำดับที่ API จะหยุดสร้างโทเค็นเพิ่มเติม |
| presence_penalty | float | ไม่ | ตัวเลขระหว่าง -2.0 และ 2.0 ค่าบวกจะลงโทษโทเค็นใหม่ตามที่ปรากฏในข้อความจนถึงตอนนี้ ค่าเริ่มต้นคือ 0 |
| frequency_penalty | float | ไม่ | ตัวเลขระหว่าง -2.0 และ 2.0 ค่าบวกจะลงโทษโทเค็นใหม่ตามความถี่ที่มีอยู่ในข้อความจนถึงตอนนี้ ค่าเริ่มต้นคือ 0 |
| repetition_penalty | float | ไม่ | ตัวเลขระหว่าง 1.0 และ 2.0 ลงโทษโทเค็นที่ซ้ำกัน ค่าเริ่มต้นคือ 1.0 เราแนะนำ 1.05 สำหรับผลลัพธ์ที่ดี |
| user | string | ไม่ | ตัวระบุเฉพาะที่แสดงถึงผู้ใช้ปลายทางของคุณ ซึ่งสามารถช่วยในการตรวจสอบและตรวจจับการใช้งานที่ไม่เหมาะสม |
รูปแบบอาร์เรย์ Messages
Section titled “รูปแบบอาร์เรย์ Messages”แต่ละข้อความในอาร์เรย์ messages ควรมี role และ content:
{ "role": "system" | "user" | "assistant", "content": "เนื้อหาข้อความ"}system: กำหนดพฤติกรรมของผู้ช่วยuser: ข้อความของผู้ใช้assistant: ข้อความจากผู้ช่วย
ตัวอย่างคำขอ
Section titled “ตัวอย่างคำขอ”curl --location 'https://api.opentyphoon.ai/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <YOUR_API_KEY>' \ --data '{ "model": "typhoon-v2.5-30b-a3b-instruct", "messages": [ { "role": "system", "content": "You are a helpful assistant that translates English to Thai." }, { "role": "user", "content": "Translate the following: Hello, how are you?" } ], "temperature": 0.7, "max_tokens": 256 }'import openai
client = openai.OpenAI( api_key="<YOUR_API_KEY>", base_url="https://api.opentyphoon.ai/v1")
response = client.chat.completions.create( model="typhoon-v2.5-30b-a3b-instruct", messages=[ {"role": "system", "content": "You are a helpful assistant that translates English to Thai."}, {"role": "user", "content": "Translate the following: Hello, how are you?"} ], temperature=0.7, max_tokens=256)
print(response.choices[0].message.content)import OpenAI from 'openai';
const openai = new OpenAI({ apiKey: '<YOUR_API_KEY>', baseURL: 'https://api.opentyphoon.ai/v1',});
async function translate() { const response = await openai.chat.completions.create({ model: 'typhoon-v2.5-30b-a3b-instruct', messages: [ { role: 'system', content: 'You are a helpful assistant that translates English to Thai.' }, { role: 'user', content: 'Translate the following: Hello, how are you?' } ], temperature: 0.7, max_tokens: 256 });
console.log(response.choices[0].message.content);}
translate();รูปแบบการตอบกลับ
Section titled “รูปแบบการตอบกลับ”{ "id": "cmpl-abc123", "object": "chat.completion", "created": 1677858242, "model": "typhoon-v2.5-30b-a3b-instruct", "usage": { "prompt_tokens": 25, "completion_tokens": 12, "total_tokens": 37 }, "choices": [ { "message": { "role": "assistant", "content": "สวัสดี คุณสบายดีไหม?" }, "finish_reason": "stop", "index": 0 } ]}การตอบกลับแบบสตรีมมิ่ง
Section titled “การตอบกลับแบบสตรีมมิ่ง”เมื่อตั้งค่า stream เป็น true API จะส่งการตอบกลับบางส่วนในขณะที่กำลังสร้าง โดยแต่ละชิ้นส่วนจะมีเนื้อหาที่สร้างขึ้นใหม่:
data: {"id":"cmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"typhoon-v2.1-12b-instruct","choices":[{"index":0,"delta":{"role":"assistant","content":"สวัสดี"},"finish_reason":null}]}
data: {"id":"cmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"typhoon-v2.1-12b-instruct","choices":[{"index":0,"delta":{"content":" คุณ"},"finish_reason":null}]}
data: {"id":"cmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"typhoon-v2.1-12b-instruct","choices":[{"index":0,"delta":{"content":"สบายดี"},"finish_reason":null}]}
data: {"id":"cmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"typhoon-v2.1-12b-instruct","choices":[{"index":0,"delta":{"content":"ไหม?"},"finish_reason":null}]}
data: {"id":"cmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"typhoon-v2.1-12b-instruct","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]from openai import OpenAI
client = OpenAI( api_key="<YOUR_API_KEY>", base_url="https://api.opentyphoon.ai/v1")
stream = client.chat.completions.create( model="typhoon-v2.5-30b-a3b-instruct", messages=[ {"role": "user", "content": "เล่าเรื่องตำนานไทยสั้นๆ"} ], stream=True)
# ประมวลผลการตอบกลับแบบสตรีมมิ่งfor chunk in stream: if chunk.choices[0].delta.content is not None: print(chunk.choices[0].delta.content, end="", flush=True)print() # เพิ่มการขึ้นบรรทัดใหม่ที่ตอนจบimport OpenAI from 'openai';
const openai = new OpenAI({ apiKey: '<YOUR_API_KEY>', baseURL: 'https://api.opentyphoon.ai/v1',});
async function streamCompletion() { const stream = await openai.chat.completions.create({ model: 'typhoon-v2.5-30b-a3b-instruct', messages: [ { role: 'user', content: 'เล่าเรื่องตำนานไทยสั้นๆ' } ], stream: true, });
for await (const chunk of stream) { process.stdout.write(chunk.choices[0]?.delta?.content || ''); } console.log(); // เพิ่มการขึ้นบรรทัดใหม่ที่ตอนจบ}
streamCompletion();การจัดการข้อผิดพลาด
Section titled “การจัดการข้อผิดพลาด”API ส่งคืนรหัสสถานะ HTTP มาตรฐานเพื่อแสดงความสำเร็จหรือความล้มเหลวของคำขอ
| รหัสสถานะ | คำอธิบาย |
|---|---|
| 200 | OK - คำขอสำเร็จ |
| 400 | Bad Request - คำขอไม่ถูกต้องหรือไม่ถูกรูปแบบ |
| 401 | Unauthorized - API key ไม่ถูกต้อง |
| 403 | Forbidden - API key ไม่มีสิทธิ์ในการดำเนินการตามคำขอ |
| 404 | Not Found - ไม่พบทรัพยากรที่ร้องขอ |
| 429 | Too Many Requests - เกินขีดจำกัดอัตราการใช้งาน |
| 500 | Internal Server Error - เกิดข้อผิดพลาดบนเซิร์ฟเวอร์ |
รูปแบบการตอบกลับข้อผิดพลาด
Section titled “รูปแบบการตอบกลับข้อผิดพลาด”{ "error": { "message": "คำอธิบายของข้อผิดพลาด", "type": "invalid_request_error", "param": null, "code": null }}