Μετάβαση στο περιεχόμενο
Γρήγορη εκκίνηση

Γρήγορη εκκίνηση

Κάντε ένα πρώτο αίτημα: πάρτε το κλειδί σας, στείλτε ένα μήνυμα και διαβάστε την απάντηση. Το 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)
Πεδίο Τύπος Προεπιλογή Περιγραφή
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 όταν ολοκληρωθεί η απάντηση. Τα κείμενα και οι αριθμοί παρακάτω είναι παραδείγματα.

200 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)

Κάθε frame του stream είναι μία γραμμή που αρχίζει με data: και περιέχει ένα αντικείμενο JSON. Ένα frame, τυπωμένο σε πολλές γραμμές:

Ένα 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 — Δοκιμάστε αιτήματα στο πρόγραμμα περιήγησης με το κλειδί σας.