SwissAI API
API chat completions ដែលត្រូវគ្នានឹង OpenAI។ បង្កើតសោនៅក្នុងផតថល កំណត់ token Bearer រួចចាប់ផ្តើម — SDK OpenAI ដែលមានស្រាប់ដំណើរការដោយគ្រាន់តែប្តូរ base_url។
ចាប់ផ្តើមរហ័ស
បីជំហានទៅកាន់ការឆ្លើយតបដំបូង៖
1. នៅក្នុងផ្ទាំងគ្រប់គ្រងអ្នកអភិវឌ្ឍន៍ ក្រោម API Keys បង្កើតសោមួយ។ វាបង្ហាញតែម្តងគត់ — រក្សាទុកឱ្យមានសុវត្ថិភាព។ ទម្រង់៖ sk-souheng-…
2. ផ្ញើសំណើទៅកាន់ chat endpoint៖
curlcurl -N https://api.swiss-ai.one/api/v1/external/chat/completions \
-H "Authorization: Bearer sk-souheng-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"messages": [{ "role": "user", "content": "ស្វាគមន៍ជាភាសាអាល្លឺម៉ង់ស្វីស។" }],
"stream": true
}'
3. អ្នកនឹងទទួលបាន SSE stream ដែលត្រូវគ្នានឹង OpenAI (សូមមើល Streaming)។
ការផ្ទៀងផ្ទាត់
ផ្ទៀងផ្ទាត់សំណើនីមួយៗដោយប្រើសោ API របស់អ្នកនៅក្នុង header Authorization៖
httpAuthorization: Bearer sk-souheng-YOUR_KEY
model នៅក្នុង body សំណើត្រូវបានមិនអើពើ — អ្នកអាចផ្ញើតម្លៃណាក៏បាន (ងាយស្រួលសម្រាប់ SDK OpenAI ដែលមិនបានកែ)។សោ API ត្រូវបានគ្រប់គ្រងតែនៅក្នុងផតថល (បង្កើត រាយ ដកហូត)។ អតិបរមា 20 សោសកម្មក្នុងមួយគណនី។
URL មូលដ្ឋាន
| គោលបំណង | URL |
|---|---|
| មូលដ្ឋាន API | https://api.swiss-ai.one |
| Chat Completions | /api/v1/external/chat/completions |
OpenAI SDK base_url | https://api.swiss-ai.one/api/v1/external |
POST/api/v1/external/chat/completions
បង្កើតការឆ្លើយតប chat។ Streaming បើកតាមលំនាំដើម។
Body សំណើ
| វាល | ប្រភេទ | លំនាំដើម | ការពិពណ៌នា |
|---|---|---|---|
messages ត្រូវការ | array | — | បញ្ជី { "role", "content" }។ តួនាទី៖ system, user, assistant, tool។ |
stream | boolean | true | SSE streaming បើក/បិទ។ |
temperature | number | 0.7 | 0.0–2.0. |
max_tokens | integer | 4096 | 1–128000. |
tools | array | null | និយមន័យឧបករណ៍ក្នុងទម្រង់ OpenAI។ |
tool_choice | string | null | ឧ. "auto"។ |
model ត្រូវបានទទួលយក ប៉ុន្តែមិនអើពើ (ម៉ូដែលកំណត់ដោយសោ)។ វាលដែលមិនស្គាល់ត្រូវបានមិនអើពើ។Streaming (SSE)
ជាមួយ "stream": true API បញ្ជូន text/event-stream ក្នុងទម្រង់ chunk OpenAI។ Stream បញ្ចប់ដោយ data: [DONE]។
ssedata: {"id":"chatcmpl-1a2b3c4d","object":"chat.completion.chunk","created":1750000000,"model":"swissai","choices":[{"index":0,"delta":{"content":"Hallo"},"finish_reason":null}]}
data: {"id":"chatcmpl-1a2b3c4d","object":"chat.completion.chunk","created":1750000000,"model":"swissai","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
data: {"id":"chatcmpl-1a2b3c4d","object":"chat.completion.chunk","created":1750000000,"model":"swissai","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]
គ្មាន Streaming
ជាមួយ "stream": false អ្នកទទួលបានវត្ថុ chat.completion តែមួយ៖
json{
"id": "chatcmpl-1a2b3c4d",
"object": "chat.completion",
"created": 1750000000,
"model": "swissai",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "សួស្តី! តើខ្ញុំអាចជួយអ្វីបាន?" },
"finish_reason": "stop"
}
]
}
ឧបករណ៍ / function calling
បញ្ជូនឧបករណ៍ក្នុងទម្រង់ OpenAI។ ពេលម៉ូដែលហៅឧបករណ៍ tool_calls ត្រឡប់មកវិញ (ទាំង streaming និងមិន streaming)។ បញ្ជូនលទ្ធផលត្រឡប់ជាសារ tool ជាមួយ tool_call_id ដែលត្រូវគ្នា។
json{
"messages": [{ "role": "user", "content": "អាកាសធាតុនៅ Zürich យ៉ាងណា?" }],
"stream": false,
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "អាកាសធាតុបច្ចុប្បន្នសម្រាប់ទីក្រុង",
"parameters": {
"type": "object",
"properties": { "city": { "type": "string" } },
"required": ["city"]
}
}
}],
"tool_choice": "auto"
}
Python
requests (streaming)
pythonimport json, requests
resp = requests.post(
"https://api.swiss-ai.one/api/v1/external/chat/completions",
headers={"Authorization": "Bearer sk-souheng-YOUR_KEY"},
json={"messages": [{"role": "user", "content": "សួស្តី"}], "stream": True},
stream=True,
)
for line in resp.iter_lines():
if not line:
continue
line = line.decode()
if line.startswith("data: "):
data = line[6:]
if data == "[DONE]":
break
delta = json.loads(data)["choices"][0]["delta"]
print(delta.get("content", ""), end="", flush=True)
JavaScript / Node
javascriptconst res = await fetch(
"https://api.swiss-ai.one/api/v1/external/chat/completions",
{
method: "POST",
headers: {
"Authorization": "Bearer sk-souheng-YOUR_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
messages: [{ role: "user", content: "សួស្តី" }],
stream: true,
}),
}
);
const reader = res.body.getReader();
const decoder = new TextDecoder();
let buffer = "";
for (;;) {
const { done, value } = await reader.read();
if (done) break;
buffer += decoder.decode(value, { stream: true });
const lines = buffer.split("\n");
buffer = lines.pop();
for (const line of lines) {
if (!line.startsWith("data: ")) continue;
const data = line.slice(6);
if (data === "[DONE]") { reader.cancel(); break; }
const delta = JSON.parse(data).choices[0].delta;
if (delta.content) process.stdout.write(delta.content);
}
}
OpenAI SDK
SDK OpenAI ដែលមានស្រាប់ដំណើរការដោយកំណត់ base_url និង api_key។ model គឺជាវាលចាំបាច់របស់ SDK ប៉ុន្តែត្រូវបានមិនអើពើនៅផ្នែកម៉ាស៊ីនមេ។
pythonfrom openai import OpenAI
client = OpenAI(
api_key="sk-souheng-YOUR_KEY",
base_url="https://api.swiss-ai.one/api/v1/external",
)
stream = client.chat.completions.create(
model="swissai", # តម្លៃណាក៏បាន — មិនអើពើ
messages=[{"role": "user", "content": "សួស្តី"}],
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")
javascriptimport OpenAI from "openai";
const client = new OpenAI({
apiKey: "sk-souheng-YOUR_KEY",
baseURL: "https://api.swiss-ai.one/api/v1/external",
});
const stream = await client.chat.completions.create({
model: "swissai", // តម្លៃណាក៏បាន — មិនអើពើ
messages: [{ role: "user", content: "សួស្តី" }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
វិក្កយបត្រ និងដែនកំណត់
- សំណើត្រូវបានគិតប្រាក់តាម token ពីសមតុល្យ (wallet) របស់អ្នក។
- សមតុល្យ និងការប្រើប្រាស់អាចមើលនៅផ្ទាំងគ្រប់គ្រង ហើយអ្នកក៏អាចបញ្ចូលប្រាក់នៅទីនោះដែរ។
- អតិបរមា 20 សោ API សកម្មក្នុងមួយគណនី។
លេខកូដកំហុស
| ស្ថានភាព | អត្ថន័យ |
|---|---|
401 | សោ API បាត់ មិនត្រឹមត្រូវ ឬអសកម្ម។ |
402 | សមតុល្យអស់ — បញ្ចូលប្រាក់នៅផ្ទាំងគ្រប់គ្រង។ |
404 | ផ្លូវ / endpoint មិនស្គាល់។ |
429 | លើសដែនកំណត់អត្រា — សូមព្យាយាមម្តងទៀតពេលក្រោយ។ |
5xx | បញ្ហាម៉ាស៊ីនមេ / upstream បណ្តោះអាសន្ន។ |