ፈጣን መጀመሪያ
የመጀመሪያ ጥያቄ ያድርጉ፦ ቁልፍዎን ያግኙ፣ አንድ መልእክት ይላኩ እና ምላሹን ያንብቡ። API የOpenAI እና የAnthropic ፎርማቶችን ይናገራል፣ ስለዚህ አስቀድመው የሚጠቀሙበት SDK base URL እና ቁልፉን ከቀየሩ በኋላ ይሰራል።
1. ቁልፍዎን ያግኙ
እያንዳንዱ መለያ አንድ API ቁልፍ አለው። ይግቡ፣ Keys & usage ን ይክፈቱ እና ይቅዱት። ቁልፉ በእያንዳንዱ endpoint እና በእያንዳንዱ ሞዴል ላይ ይሰራል። Keys & usage
2. client ዎን ወደ API ያመልክቱ
ሁሉም endpoints በአንድ base URL ስር ይገኛሉ። የOpenAI SDK መጨረሻው ላይ /v1 ይዞ ይቀበለዋል፤ የAnthropic SDK ያለ እሱ ይቀበለዋል፣ ምክንያቱም /v1/messages ራሱ ይጨምራል።
| Client | Base URL |
|---|---|
| OpenAI SDKs እና OpenAI-ተኳሃኝ clients | https://api.shannon-ai.com/v1 |
| Anthropic SDKs | https://api.shannon-ai.com |
ሦስት endpoints ጽሑፍ ያመነጫሉ። ወደ ተመሳሳይ ሞዴሎች ይደርሳሉ፤ ኮድዎ አስቀድሞ ፎርማቱን የሚጠቀምበትን ይምረጡ።
| ኤንድ-ፖይንት (Endpoint) | ፎርማት |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions |
POST /v1/messages | Anthropic Messages |
POST /v1/responses | OpenAI Responses |
3. የመጀመሪያ ጥያቄ ይላኩ
በChat Completions endpoint ላይ አንድ user መልእክት ወደ shannon-3 ይላኩ። YOUR_API_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። id ዎቹ በModels & pricing ላይ ተዘርዝረዋል። | |
messages | array | እስካሁን ያለው ውይይት፦ role እና content ያላቸው objects። የመጨረሻው user መልእክት prompt ነው። ግዴታ። | |
max_tokens | integer | 4096 | የጥያቄው የውጤት በጀት፣ ከ1 እስከ 65,536። ጥያቄው ይህን መጠን ከቀሪ ሂሳብዎ ይይዛል እና በእውነት ለተጠቀመበት ይከፈላል። |
stream | boolean | false | true መልሱ ሲጻፍ ቁራጭ በቁራጭ ይልካል። |
የጥያቄው body JSON ነው እና Content-Type: application/json header ያስፈልገዋል። የመስኮቹ ሙሉ ዝርዝር በendpoint ገጽ ላይ ነው። Chat Completions
ምላሹ
ያለ stream የተደረገ ጥሪ መልሱ ሲጠናቀቅ አንድ JSON object ይመልሳል። ከታች ያሉት ጽሑፎችና ቁጥሮች ምሳሌዎች ናቸው።
{
"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፣ alias ወይም ሌላ አጻጻፍ ቢልኩም። |
choices | array | ሁልጊዜ አንድ ግቤት፣ index 0 ያለው። |
choices[0].message.role | string | ሁልጊዜ assistant። |
choices[0].message.content | string | null | መልሱ። ምላሹ tool_calls ሲይዝ null ሊሆን ይችላል። |
choices[0].message.reasoning_content | string | null | ሞዴሉ ከመልሱ በፊት ያደረገው reasoning፣ ወይም ምንም ከሌለ null። |
choices[0].message.tool_calls | array | ሞዴሉ ካወጁት tools አንዱን ሲጠራ ብቻ ይገኛል። |
choices[0].finish_reason | string | ለመልስ stop፣ ሞዴሉ tool ሲጠራ tool_calls። |
usage.prompt_tokens | integer | ሞዴሉ ለዚህ መልስ ያነበባቸው tokens። በshannon-2-* እና በShannon 3 ቤተሰብ ላይ ይህ ከላኩት ጽሑፍ ሊበልጥ ይችላል። |
usage.completion_tokens | integer | ሞዴሉ የጻፈባቸው tokens። |
usage.total_tokens | integer | ድምሩ። የShannon ሞዴል ክፍያ የሚሰላው ከዚህ ቁጥር ነው። |
-
usageየtoken ቆጠራ ይይዛል እንጂ ገንዘብ አይደለም። ጥሪው ከቀሪ ሂሳብዎ ምን እንደወሰደ በKeys & usage ላይ በየጥያቄው ይታያል፤ እንዴት እንደሚሰላ በ ገደቦች እና ቀሪ ሂሳብ ገጽ ላይ ነው። ገደቦች እና ቀሪ ሂሳብ - እያንዳንዱ ምላሽ፣ ስህተትና stream ጭምር፣
x-request-idheader አለው። ጥያቄዎx-request-idheader ከያዘ እሴቱ ይመለሳል፤ ካልሆነ እሴቱ 12 የሄክሳዴሲማል ቁምፊዎች ነው። በlogs ውስጥ ያስቀምጡት፦ ይህን አንድ ጥያቄ ይሰይማል።
ተመሳሳዩ ጥሪ እንደ 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
}' የstream እያንዳንዱ frame በdata: የሚጀምር እና JSON object የያዘ አንድ መስመር ነው። አንድ frame፣ በበርካታ መስመሮች የታተመ፦
{
"id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
"object": "chat.completion.chunk",
"created": 1791590400,
"model": "shannon-3",
"choices": [
{
"index": 0,
"delta": {
"content": "Hello! "
},
"finish_reason": null
}
]
} | Frames፣ በቅደም ተከተል | delta | finish_reason |
|---|---|---|
| ሞዴሉ በሚያስብበት ጊዜ። ዜሮ ወይም ከዚያ በላይ frames። | {"reasoning_content": "…"} | null |
| መልሱ፣ ቁራጭ በቁራጭ። ዜሮ ወይም ከዚያ በላይ frames። | {"content": "…"} | null |
የመጨረሻው JSON frame። usageንም ይይዛል፤ መጠየቅ አያስፈልግዎትም። | {} | "stop" |
የstream መጨረሻ፦ መስመሩ data: [DONE]። |
- ምላሹ status
200እናcontent-type: text/event-streamአለው። እያንዳንዱ framedata: <json>መስመር እና ከዚያ ባዶ መስመር ነው። - መስመር
: pingበየ15 ሰከንዱ ይደርሳል። ግንኙነቱን ክፍት የሚያደርግ comment ነው፤ SSE clients ይዘለሉታል። - stream ከተከፈተ በኋላ የሚከሰት ብልሽት እንደ frame
data: {"error": {…}}ይመጣል። status200ሆኖ ይቆያል፣ ስለዚህ frames ን ይመርምሩ።
ጥሪው ቢከሽፍ
ስህተት type እና message የያዘ error ያለው JSON object ነው። የመጀመሪያ ጥሪ ብዙ ጊዜ የሚያጋጥማቸው ምላሾች እነዚህ ናቸው።
| ሁኔታ | ዓይነት | መልእክት | ምን ማለት ነው |
|---|---|---|---|
401 | authentication_error | Missing authentication | ምንም ቁልፍ ወደ API አልደረሰም። Authorization: Bearer እና ከዚያ ቁልፍዎን ይላኩ። |
401 | authentication_error | Invalid API key | ቁልፉ የመለያ የአሁኑ ቁልፍ አይደለም። ከKeys & usage እንደገና ይቅዱት። |
400 | invalid_request_error | unknown model: <id> | model የታተመ id አይደለም። ከModels & pricing id ይጠቀሙ። |
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 | የጥያቄው የውጤት በጀት በቀሪ ሂሳብዎ ውስጥ አይገባም። |
ቀጥሎ የት መሄድ
- ሞዴሎችና ዋጋ — ሞዴል ይምረጡ፦ id ዎች፣ context windows እና ዋጋዎች።
- Chat Completions — የጠሩት endpoint እያንዳንዱ የጥያቄ መስክ፣ የምላሽ መስክ እና stream event።
- ስትሪሚንግ — የstream frames፣ keep-alive መስመሮች እና በstream ውስጥ ያሉ ስህተቶች።
- ፋንክሽን ጥራት — ሞዴሉ የእርስዎን functions እንዲጠራ ያድርጉ።
- ገደቦች እና ቀሪ ሂሳብ — ጥያቄ ምን እንደሚይዝና እንደሚያስከፍል፣ እና ስንት ጥያቄዎች መላክ እንደሚችሉ።
- API Playground — ጥያቄዎችን በብሮውዘር ውስጥ በቁልፍዎ ይሞክሩ።