ເລີ່ມໄວ
ສົ່ງຄຳຮ້ອງຂໍທຳອິດ: ຮັບ key, ສົ່ງໜຶ່ງຂໍ້ຄວາມ ແລະ ອ່ານຄຳຕອບ. API ໃຊ້ຮູບແບບ OpenAI ແລະ Anthropic, ດັ່ງນັ້ນ SDK ທີ່ທ່ານໃຊ້ຢູ່ແລ້ວຈະໃຊ້ໄດ້ຫຼັງຈາກປ່ຽນ base URL ແລະ key.
1. ຮັບ key ຂອງທ່ານ
ທຸກບັນຊີມີ API key ໜຶ່ງອັນ. ເຂົ້າສູ່ລະບົບ, ເປີດ Keys & usage ແລະ ຄັດລອກມັນ. key ໃຊ້ໄດ້ກັບທຸກ endpoint ແລະ ທຸກ model. Keys & usage
2. ຊີ້ client ຂອງທ່ານໄປຫາ API
ທຸກ endpoint ຢູ່ພາຍໃຕ້ base URL ດຽວ. SDK ຂອງ OpenAI ຮັບມັນພ້ອມ /v1 ທີ່ທ້າຍ; SDK ຂອງ Anthropic ຮັບມັນໂດຍບໍ່ມີ, ເພາະມັນເພີ່ມ /v1/messages ເອງ.
| Client | Base URL |
|---|---|
| SDK ຂອງ OpenAI ແລະ client ທີ່ເຂົ້າກັນໄດ້ກັບ OpenAI | https://api.shannon-ai.com/v1 |
| SDK ຂອງ Anthropic | https://api.shannon-ai.com |
ສາມ endpoint ສ້າງຂໍ້ຄວາມ. ພວກມັນເຂົ້າເຖິງ model ດຽວກັນ; ເລືອກອັນທີ່ຮູບແບບກົງກັບທີ່ໂຄ້ດຂອງທ່ານໃຊ້ຢູ່ແລ້ວ.
| Endpoint | ຮູບແບບ |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions |
POST /v1/messages | Anthropic Messages |
POST /v1/responses | OpenAI Responses |
3. ສົ່ງຄຳຮ້ອງຂໍທຳອິດ
ສົ່ງຂໍ້ຄວາມ user ໜຶ່ງອັນໄປຫາ shannon-3 ທີ່ endpoint Chat Completions. ແທນ YOUR_API_KEY ດ້ວຍ key ຂອງທ່ານ.
POST https://api.shannon-ai.com/v1/chat/completions
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1"
)
response = client.chat.completions.create(
model="shannon-3",
messages=[
{"role": "user", "content": "Hello, Shannon!"}
],
max_tokens=1024
)
print(response.choices[0].message.content) import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.shannon-ai.com/v1'
});
const response = await client.chat.completions.create({
model: 'shannon-3',
messages: [
{ role: 'user', content: 'Hello, Shannon!' }
],
max_tokens: 1024
});
console.log(response.choices[0].message.content); package main
import (
"context"
"fmt"
openai "github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("YOUR_API_KEY")
config.BaseURL = "https://api.shannon-ai.com/v1"
client := openai.NewClientWithConfig(config)
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: "shannon-3",
Messages: []openai.ChatCompletionMessage{
{Role: "user", Content: "Hello, Shannon!"},
},
MaxTokens: 1024,
},
)
if err != nil {
panic(err)
}
fmt.Println(resp.Choices[0].Message.Content)
} curl -X POST "https://api.shannon-ai.com/v1/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [
{"role": "user", "content": "Hello, Shannon!"}
],
"max_tokens": 1024
}' | ຟີລດ໌ | ປະເພດ | ຄ່າເລີ່ມຕົ້ນ | ຄຳອະທິບາຍ |
|---|---|---|---|
model | string | id ຂອງ model ທີ່ຕອບ. id ຖືກລາຍຊື່ໃນ Models & pricing. | |
messages | array | ການສົນທະນາມາຮອດຕອນນີ້: object ທີ່ມີ role ແລະ content. ຂໍ້ຄວາມ user ສຸດທ້າຍແມ່ນ prompt. ຈຳເປັນ. | |
max_tokens | integer | 4096 | ງົບ output ຂອງຄຳຮ້ອງຂໍ, ຈາກ 1 ຫາ 65,536. ຄຳຮ້ອງຂໍກັນຈຳນວນນີ້ຈາກຍອດເງິນຂອງທ່ານ ແລະ ຖືກຄິດເງິນຕາມທີ່ໃຊ້ຈິງ. |
stream | boolean | false | true ສົ່ງຄຳຕອບເທື່ອລະສ່ວນໃນຂະນະທີ່ຖືກຂຽນ. |
body ຂອງຄຳຮ້ອງຂໍເປັນ JSON ແລະ ຕ້ອງມີ header Content-Type: application/json. ລາຍຊື່ຟີລດ໌ທັງໝົດຢູ່ໃນໜ້າຂອງ endpoint. Chat Completions
ຄຳຕອບ
ການເອີ້ນທີ່ບໍ່ມີ stream ສົ່ງ object JSON ໜຶ່ງອັນກັບຄືນເມື່ອຄຳຕອບສົມບູນ. ຂໍ້ຄວາມ ແລະ ຕົວເລກຂ້າງລຸ່ມເປັນຕົວຢ່າງ.
{
"id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
"object": "chat.completion",
"created": 1791590400,
"model": "shannon-3",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! What would you like to work on?",
"reasoning_content": "A greeting. A short, friendly reply fits."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1386,
"completion_tokens": 74,
"total_tokens": 1460
}
} | ຟີລດ໌ | ປະເພດ | ຄຳອະທິບາຍ |
|---|---|---|
id | string | chatcmpl- ຕາມດ້ວຍຕົວອັກສອນເລກຖານສິບຫົກ 32 ຕົວ. |
object | string | ເປັນ chat.completion ສະເໝີ. |
created | integer | ເວລາຂອງຄຳຕອບເປັນວິນາທີ Unix. |
model | string | id ທີ່ເຜີຍແຜ່ຂອງ model ທີ່ຕອບ, ເຖິງແມ່ນທ່ານຈະສົ່ງ alias ຫຼື ການສະກົດອື່ນ. |
choices | array | ມີໜຶ່ງລາຍການສະເໝີ, ດ້ວຍ index 0. |
choices[0].message.role | string | ເປັນ assistant ສະເໝີ. |
choices[0].message.content | string | null | ຄຳຕອບ. ມັນເປັນ null ໄດ້ເມື່ອຄຳຕອບມີ tool_calls. |
choices[0].message.reasoning_content | string | null | reasoning ຂອງ model ກ່ອນຄຳຕອບ, ຫຼື null ເມື່ອບໍ່ມີ. |
choices[0].message.tool_calls | array | ມີສະເພາະເມື່ອ model ເອີ້ນໜຶ່ງໃນ tool ທີ່ທ່ານປະກາດ. |
choices[0].finish_reason | string | stop ສຳລັບຄຳຕອບ, tool_calls ເມື່ອ model ເອີ້ນ tool. |
usage.prompt_tokens | integer | tokens ທີ່ model ອ່ານສຳລັບຄຳຕອບນີ້. ໃນ shannon-2-* ແລະ ຕະກູນ Shannon 3 ຈຳນວນນີ້ອາດຫຼາຍກວ່າຂໍ້ຄວາມທີ່ທ່ານສົ່ງ. |
usage.completion_tokens | integer | ຈຳນວນ tokens ທີ່ model ຂຽນຂຶ້ນມາ. |
usage.total_tokens | integer | ຍອດລວມ. ຄ່າໃຊ້ຈ່າຍຂອງ model Shannon ຖືກຄິດຈາກຕົວເລກນີ້. |
-
usageເກັບຈຳນວນ tokens, ບໍ່ແມ່ນເງິນ. ສິ່ງທີ່ການເອີ້ນຫັກຈາກຍອດເງິນຂອງທ່ານສະແດງຕໍ່ຄຳຮ້ອງຂໍໃນ Keys & usage; ວິທີຄິດຢູ່ໃນໜ້າຂີດຈຳກັດ ແລະ ຍອດເງິນ. ຂີດຈຳກັດ ແລະ ຍອດເງິນ - ທຸກຄຳຕອບ, ລວມທັງຂໍ້ຜິດພາດ ແລະ stream, ມີ header
x-request-id. ຖ້າຄຳຮ້ອງຂໍຂອງທ່ານມີ headerx-request-id, ຄ່າຂອງມັນຈະກັບມາ; ບໍ່ດັ່ງນັ້ນຄ່າແມ່ນຕົວອັກສອນເລກຖານສິບຫົກ 12 ຕົວ. ເກັບມັນໄວ້ໃນ log ຂອງທ່ານ: ມັນໃຊ້ຕັ້ງຊື່ຄຳຮ້ອງຂໍອັນດຽວນີ້.
ການເອີ້ນດຽວກັນແບບ stream
ຕັ້ງ stream ເປັນ true ເພື່ອອ່ານຄຳຕອບໃນຂະນະທີ່ມັນຖືກຂຽນ. ທຸກຢ່າງອື່ນໃນຄຳຮ້ອງຂໍຄືເກົ່າ.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com/v1"
)
stream = client.chat.completions.create(
model="shannon-3",
messages=[
{"role": "user", "content": "Hello, Shannon!"}
],
max_tokens=1024,
stream=True
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True) import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.shannon-ai.com/v1'
});
const stream = await client.chat.completions.create({
model: 'shannon-3',
messages: [
{ role: 'user', content: 'Hello, Shannon!' }
],
max_tokens: 1024,
stream: true
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
} curl -N -X POST "https://api.shannon-ai.com/v1/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [
{"role": "user", "content": "Hello, Shannon!"}
],
"max_tokens": 1024,
"stream": true
}' ແຕ່ລະ frame ຂອງ stream ແມ່ນໜຶ່ງແຖວທີ່ເລີ່ມດ້ວຍ data: ແລະ ມີ object JSON. ໜຶ່ງ frame, ພິມເປັນຫຼາຍແຖວ:
{
"id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
"object": "chat.completion.chunk",
"created": 1791590400,
"model": "shannon-3",
"choices": [
{
"index": 0,
"delta": {
"content": "Hello! "
},
"finish_reason": null
}
]
} | Frame, ຕາມລຳດັບ | delta | finish_reason |
|---|---|---|
| ໃນຂະນະທີ່ model ຄິດຫາເຫດຜົນ. ສູນ frame ຫຼື ຫຼາຍກວ່ານັ້ນ. | {"reasoning_content": "…"} | null |
| ຄຳຕອບ, ເທື່ອລະສ່ວນ. ສູນ frame ຫຼື ຫຼາຍກວ່ານັ້ນ. | {"content": "…"} | null |
frame JSON ສຸດທ້າຍ. ມັນຍັງມີ usage ນຳ; ທ່ານບໍ່ຕ້ອງຂໍມັນ. | {} | "stop" |
ຈຸດຈົບຂອງ stream: ແຖວ data: [DONE]. |
- ຄຳຕອບມີ status
200ແລະcontent-type: text/event-stream. ທຸກ frame ແມ່ນແຖວdata: <json>ຕາມດ້ວຍແຖວວ່າງ. - ແຖວ
: pingມາທຸກ 15 ວິນາທີ. ມັນເປັນ comment ທີ່ຮັກສາການເຊື່ອມຕໍ່ໃຫ້ເປີດຢູ່; client SSE ຂ້າມມັນ. - ຄວາມລົ້ມເຫຼວຫຼັງຈາກ stream ເປີດແລ້ວຈະມາເປັນ frame
data: {"error": {…}}. status ຍັງເປັນ200, ດັ່ງນັ້ນໃຫ້ກວດ frame.
ຖ້າການເອີ້ນລົ້ມເຫຼວ
ຂໍ້ຜິດພາດແມ່ນ object JSON ທີ່ມີ error ເຊິ່ງເກັບ type ແລະ message. ນີ້ແມ່ນຄຳຕອບທີ່ການເອີ້ນຄັ້ງທຳອິດພົບເລື້ອຍທີ່ສຸດ.
| ສະຖານະ | ປະເພດ | ຂໍ້ຄວາມ | ຄວາມໝາຍ |
|---|---|---|---|
401 | authentication_error | Missing authentication | ບໍ່ມີ key ຮອດ API. ສົ່ງ Authorization: Bearer ຕາມດ້ວຍ key ຂອງທ່ານ. |
401 | authentication_error | Invalid API key | key ບໍ່ແມ່ນ key ປັດຈຸບັນຂອງບັນຊີໃດ. ຄັດລອກມັນໃໝ່ຈາກ Keys & usage. |
400 | invalid_request_error | unknown model: <id> | model ບໍ່ແມ່ນ id ທີ່ເຜີຍແຜ່. ໃຊ້ id ຈາກ Models & pricing. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type… | ຟີລດ໌ມີປະເພດ JSON ຜິດ, ຫຼື ຂາດ messages. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | ງົບ output ຂອງຄຳຮ້ອງຂໍບໍ່ພໍດີກັບຍອດເງິນຂອງທ່ານ. |
ໄປຕໍ່ບ່ອນໃດ
- Model ແລະ ລາຄາ — ເລືອກ model: id, context window ແລະ ລາຄາ.
- Chat Completions — ທຸກຟີລດ໌ຂອງຄຳຮ້ອງຂໍ, ຟີລດ໌ຂອງຄຳຕອບ ແລະ stream event ຂອງ endpoint ທີ່ທ່ານເອີ້ນ.
- ສະຕຣີມມິ້ງ — Frame ຂອງ stream, ແຖວ keep-alive ແລະ ຂໍ້ຜິດພາດພາຍໃນ stream.
- ການເອີ້ນຟັງຊັນ — ໃຫ້ model ເອີ້ນ function ຂອງທ່ານ.
- ຂີດຈຳກັດ ແລະ ຍອດເງິນ — ສິ່ງທີ່ຄຳຮ້ອງຂໍກັນໄວ້ ແລະ ຄ່າໃຊ້ຈ່າຍ, ແລະ ທ່ານສົ່ງຄຳຮ້ອງຂໍໄດ້ຈັກອັນ.
- API Playground — ລອງຄຳຮ້ອງຂໍໃນບຣາວເຊີດ້ວຍ key ຂອງທ່ານ.