Γρήγορη εκκίνηση
Κάντε ένα πρώτο αίτημα: πάρτε το κλειδί σας, στείλτε ένα μήνυμα και διαβάστε την απάντηση. Το API μιλά τις μορφές της OpenAI και της Anthropic, οπότε το SDK που ήδη χρησιμοποιείτε δουλεύει αφού αλλάξετε το base URL και το κλειδί του.
1. Πάρτε το κλειδί σας
Κάθε λογαριασμός έχει ένα κλειδί API. Συνδεθείτε, ανοίξτε το Κλειδιά & χρήση και αντιγράψτε το. Το κλειδί λειτουργεί σε κάθε endpoint και κάθε μοντέλο. Κλειδιά & χρήση
2. Στρέψτε τον client σας στο API
Όλα τα endpoints βρίσκονται κάτω από ένα base URL. Ένα SDK της OpenAI το δέχεται με /v1 στο τέλος· ένα SDK της Anthropic το δέχεται χωρίς, επειδή προσθέτει μόνο του το /v1/messages.
| Client | Base URL |
|---|---|
| SDK της OpenAI και clients συμβατοί με OpenAI | https://api.shannon-ai.com/v1 |
| SDK της Anthropic | 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. Στείλτε ένα πρώτο αίτημα
Στείλτε ένα μήνυμα user στο shannon-3 στο endpoint Chat Completions. Αντικαταστήστε το 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 του μοντέλου που απαντά. Τα ids απαριθμούνται στη σελίδα Μοντέλα & τιμές. | |
messages | array | Η συνομιλία μέχρι τώρα: αντικείμενα με role και content. Το τελευταίο μήνυμα user είναι το prompt. Υποχρεωτικό. | |
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 του μοντέλου που απάντησε, ακόμη κι όταν στείλατε 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 | Ο συλλογισμός του μοντέλου πριν από την απάντησή του, ή null όταν δεν υπάρχει. |
choices[0].message.tool_calls | array | Υπάρχει μόνο όταν το μοντέλο καλεί ένα από τα εργαλεία που δηλώσατε. |
choices[0].finish_reason | string | stop για μια απάντηση, tool_calls όταν το μοντέλο καλεί εργαλείο. |
usage.prompt_tokens | integer | Τα tokens που διάβασε το μοντέλο για αυτή την απάντηση. Στα shannon-2-* και στην οικογένεια Shannon 3 μπορεί να είναι περισσότερα από το κείμενο που στείλατε. |
usage.completion_tokens | integer | Τα tokens που έγραψε το μοντέλο. |
usage.total_tokens | integer | Το σύνολο. Η χρέωση ενός μοντέλου Shannon υπολογίζεται από αυτόν τον αριθμό. |
- Το
usageπεριέχει αριθμούς tokens, όχι χρήματα. Όσα αφαίρεσε η κλήση από το υπόλοιπό σας φαίνονται ανά αίτημα στο Κλειδιά & χρήση· πώς υπολογίζονται περιγράφεται στη σελίδα Όρια και υπόλοιπο. Όρια και υπόλοιπο - Κάθε απάντηση, και σφάλμα και stream, έχει την κεφαλίδα
x-request-id. Αν το αίτημά σας φέρει κεφαλίδαx-request-id, η τιμή της επιστρέφει· αλλιώς η τιμή είναι 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
}' Κάθε frame του stream είναι μία γραμμή που αρχίζει με data: και περιέχει ένα αντικείμενο JSON. Ένα 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 |
Το τελευταίο frame JSON. Φέρει επίσης το usage· δεν χρειάζεται να το ζητήσετε. | {} | "stop" |
Το τέλος του stream: η γραμμή data: [DONE]. |
- Η απάντηση έχει κατάσταση
200καιcontent-type: text/event-stream. Κάθε frame είναι μια γραμμήdata: <json>ακολουθούμενη από κενή γραμμή. - Μια γραμμή
: pingφτάνει κάθε 15 δευτερόλεπτα. Είναι σχόλιο που κρατά τη σύνδεση ανοιχτή· οι clients SSE την προσπερνούν. - Μια αποτυχία αφού έχει ανοίξει το stream φτάνει ως frame
data: {"error": {…}}. Η κατάσταση παραμένει200, οπότε ελέγχετε τα frames.
Αν η κλήση αποτύχει
Ένα σφάλμα είναι αντικείμενο JSON με ένα error που περιέχει type και message. Αυτές είναι οι απαντήσεις που συναντά συχνότερα μια πρώτη κλήση.
| Κατάσταση | Τύπος | Μήνυμα | Τι σημαίνει |
|---|---|---|---|
401 | authentication_error | Missing authentication | Κανένα κλειδί δεν έφτασε στο API. Στείλτε Authorization: Bearer ακολουθούμενο από το κλειδί σας. |
401 | authentication_error | Invalid API key | Το κλειδί δεν είναι το τρέχον κλειδί κάποιου λογαριασμού. Αντιγράψτε το ξανά από το Κλειδιά & χρήση. |
400 | invalid_request_error | unknown model: <id> | Το model δεν είναι δημοσιευμένο id. Χρησιμοποιήστε ένα 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 | Ο προϋπολογισμός εξόδου του αιτήματος δεν χωράει στο υπόλοιπό σας. |
Πού να πάτε στη συνέχεια
- Μοντέλα & τιμές — Διαλέξτε μοντέλο: ids, παράθυρα συμφραζομένων και τιμές.
- Chat Completions — Κάθε πεδίο αιτήματος, πεδίο απάντησης και συμβάν stream του endpoint που καλέσατε.
- Ροή — Τα frames ενός stream, οι γραμμές keep-alive και τα σφάλματα μέσα σε stream.
- Κλήση συναρτήσεων — Αφήστε το μοντέλο να καλεί τις συναρτήσεις σας.
- Όρια και υπόλοιπο — Τι δεσμεύει και τι κοστίζει ένα αίτημα, και πόσα αιτήματα μπορείτε να στείλετε.
- Παιδότοπος API — Δοκιμάστε αιτήματα στο πρόγραμμα περιήγησης με το κλειδί σας.