სწრაფი დაწყება
გააგზავნეთ პირველი მოთხოვნა: აიღეთ გასაღები, გააგზავნეთ ერთი შეტყობინება და წაიკითხეთ პასუხი. API OpenAI-ისა და Anthropic-ის ფორმატებს ფლობს, ამიტომ SDK, რომელსაც უკვე იყენებთ, base URL-ისა და გასაღების შეცვლის შემდეგ იმუშავებს.
1. აიღეთ გასაღები
ყველა ანგარიშს ერთი API გასაღები აქვს. შედით, გახსენით Keys & usage და დააკოპირეთ. გასაღები მუშაობს ყველა endpoint-ზე და ყველა მოდელზე. გასაღებები და გამოყენება
2. მიუთითეთ კლიენტს API
ყველა endpoint ერთ base URL-ის ქვეშ არის. OpenAI SDK მას იღებს ბოლოში /v1-ით; Anthropic SDK კი მის გარეშე, რადგან /v1/messages-ს თავად ამატებს.
| კლიენტი | Base URL |
|---|---|
| OpenAI SDK-ები და OpenAI-თან თავსებადი კლიენტები | https://api.shannon-ai.com/v1 |
| Anthropic SDK-ები | https://api.shannon-ai.com |
ტექსტს სამი endpoint იძლევა. ისინი ერთსა და იმავე მოდელებს აღწევენ; აირჩიეთ ის, რომლის ფორმატსაც თქვენი კოდი უკვე იყენებს.
| Endpoint | ფორმატი |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions |
POST /v1/messages | Anthropic Messages |
POST /v1/responses | OpenAI Responses |
3. გააგზავნეთ პირველი მოთხოვნა
გააგზავნეთ ერთი user შეტყობინება shannon-3-ზე Chat Completions endpoint-ზე. 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-ით. ბოლო user შეტყობინება არის პრომპტი. სავალდებულოა. | |
max_tokens | integer | 4096 | მოთხოვნის გამოტანის ბიუჯეტი, 1-დან 65,536-მდე. მოთხოვნა ამ რაოდენობას თქვენი ბალანსიდან რეზერვავს, ხოლო ჩამოგეჭრებათ იმდენი, რამდენიც რეალურად გამოიყენა. |
stream | boolean | false | true პასუხს ნაწილ-ნაწილ აგზავნის, როგორც იწერება. |
მოთხოვნის სხეული JSON-ია და სჭირდება სათაური Content-Type: application/json. ველების სრული სია endpoint-ის გვერდზეა. Chat Completions
პასუხი
გამოძახება stream-ის გარეშე ერთ 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, მაშინაც, როცა ალიასი ან სხვა დაწერილობა გაგზავნეთ. |
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 | მოდელის მსჯელობა პასუხამდე, ან null, თუ ის არ არის. |
choices[0].message.tool_calls | array | გვხვდება მხოლოდ მაშინ, როცა მოდელი თქვენ მიერ გამოცხადებულ ერთ-ერთ ინსტრუმენტს იძახებს. |
choices[0].finish_reason | string | stop პასუხისთვის, tool_calls როცა მოდელი ინსტრუმენტს იძახებს. |
usage.prompt_tokens | integer | ტოკენები, რომლებიც მოდელმა ამ პასუხისთვის წაიკითხა. shannon-2-*-სა და Shannon 3-ის ოჯახზე ეს შეიძლება მეტი იყოს, ვიდრე თქვენ მიერ გაგზავნილი ტექსტი. |
usage.completion_tokens | integer | ტოკენები, რომლებიც მოდელმა დაწერა. |
usage.total_tokens | integer | ჯამი. Shannon-ის მოდელის ღირებულება ამ რიცხვიდან გამოითვლება. |
-
usageშეიცავს ტოკენების რაოდენობას და არა ფულს. რა ჩამოგეჭრათ ბალანსიდან, ნაჩვენებია თითოეულ მოთხოვნაზე გვერდზე Keys & usage; როგორ გამოითვლება, აღწერილია გვერდზე Limits and balance. ლიმიტები და ბალანსი - ყოველ პასუხს, შეცდომასა და stream-საც, აქვს სათაური
x-request-id. თუ თქვენს მოთხოვნას აქვს სათაურიx-request-id, მისი მნიშვნელობა უკან დაბრუნდება; სხვა შემთხვევაში მნიშვნელობა 12 თექვსმეტობითი სიმბოლოა. შეინახეთ ის თქვენს ლოგებში: ის სწორედ ამ ერთ მოთხოვნას ასახელებს.
იგივე გამოძახება სტრიმის სახით
დააყენეთ 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-ის ყოველი ფრეიმი არის ერთი ხაზი, რომელიც იწყება data:-თი და შეიცავს JSON ობიექტს. ერთი ფრეიმი, დაბეჭდილი რამდენიმე ხაზად:
{
"id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
"object": "chat.completion.chunk",
"created": 1791590400,
"model": "shannon-3",
"choices": [
{
"index": 0,
"delta": {
"content": "Hello! "
},
"finish_reason": null
}
]
} | ფრეიმები, თანმიმდევრობით | delta | finish_reason |
|---|---|---|
| სანამ მოდელი მსჯელობს. ნულიდან მეტი ფრეიმი. | {"reasoning_content": "…"} | null |
| პასუხი, ნაწილ-ნაწილ. ნულიდან მეტი ფრეიმი. | {"content": "…"} | null |
ბოლო JSON ფრეიმი. ის usage-საც შეიცავს; მისი მოთხოვნა საჭირო არ არის. | {} | "stop" |
stream-ის დასასრული: ხაზი data: [DONE]. |
- პასუხს აქვს სტატუსი
200დაcontent-type: text/event-stream. ყოველი ფრეიმი არის ხაზიdata: <json>, რომელსაც ცარიელი ხაზი მოჰყვება. - ხაზი
: pingყოველ 15 წამში ერთხელ მოდის. ეს კომენტარია, რომელიც კავშირს ღიად ინარჩუნებს; SSE კლიენტები მას გამოტოვებენ. - წარუმატებლობა stream-ის გახსნის შემდეგ მოდის ფრეიმის სახით
data: {"error": {…}}. სტატუსი რჩება200, ამიტომ შეამოწმეთ ფრეიმები.
თუ გამოძახება ვერ შესრულდა
შეცდომა არის JSON ობიექტი ველით error, რომელიც შეიცავს type-სა და message-ს. ეს არის პასუხები, რომლებსაც პირველი გამოძახება ყველაზე ხშირად აწყდება.
| სტატუსი | ტიპი | შეტყობინება | რას ნიშნავს |
|---|---|---|---|
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 არ არის. გამოიყენეთ 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 | მოთხოვნის გამოტანის ბიუჯეტი თქვენს ბალანსში არ ეტევა. |
სად გადავიდეთ შემდეგ
- მოდელები და ფასები — აირჩიეთ მოდელი: id-ები, კონტექსტის ფანჯრები და ფასები.
- Chat Completions — გამოძახებული endpoint-ის ყველა მოთხოვნის ველი, პასუხის ველი და stream-ის მოვლენა.
- სტრიმინგი — stream-ის ფრეიმები, keep-alive ხაზები და შეცდომები stream-ის შიგნით.
- ფუნქციის გამოძახება — მიეცით მოდელს საშუალება, თქვენი ფუნქციები გამოიძახოს.
- ლიმიტები და ბალანსი — რას რეზერვავს და რა ღირს მოთხოვნა და რამდენი მოთხოვნის გაგზავნა შეგიძლიათ.
- API Playground — სცადეთ მოთხოვნები ბრაუზერში თქვენი გასაღებით.