जलद सुरुवात
पहिली रिक्वेस्ट करा: तुमची की मिळवा, एक संदेश पाठवा आणि उत्तर वाचा. API OpenAI आणि Anthropic फॉरमॅट बोलते, त्यामुळे तुम्ही आधीच वापरत असलेला SDK त्याचा बेस URL आणि की बदलल्यानंतर चालतो.
1. तुमची की मिळवा
प्रत्येक अकाउंटला एक API की असते. साइन इन करा, Keys & usage उघडा आणि ती कॉपी करा. की प्रत्येक एंडपॉइंट आणि प्रत्येक मॉडेलवर चालते. की आणि वापर
2. तुमचा क्लायंट API कडे वळवा
सर्व एंडपॉइंट्स एकाच बेस URL खाली आहेत. OpenAI SDK तो शेवटी /v1 सह घेतो; Anthropic SDK तो त्याशिवाय घेतो, कारण तो /v1/messages स्वतः जोडतो.
| क्लायंट | बेस URL |
|---|---|
| OpenAI SDK आणि OpenAI-सुसंगत क्लायंट्स | https://api.shannon-ai.com/v1 |
| Anthropic SDK | https://api.shannon-ai.com |
तीन एंडपॉइंट्स मजकूर तयार करतात. ते त्याच मॉडेल्सपर्यंत पोहोचतात; तुमचा कोड आधीच ज्याचा फॉरमॅट वापरतो तो निवडा.
| एंडपॉइंट | फॉरमॅट |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions |
POST /v1/messages | Anthropic Messages |
POST /v1/responses | OpenAI Responses |
3. पहिली रिक्वेस्ट पाठवा
Chat Completions एंडपॉइंटवर shannon-3 ला एक user संदेश पाठवा. 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 हेडर लागतो. फील्ड्सची संपूर्ण यादी एंडपॉइंट पानावर आहे. 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 | उत्तर. उत्तरात tool_calls असतील तेव्हा ते null असू शकते. |
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 वर आहे. मर्यादा आणि बॅलन्स - प्रत्येक उत्तराला, त्रुटी आणि स्ट्रीमलाही,
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
}' स्ट्रीमची प्रत्येक फ्रेम 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" |
स्ट्रीमचा शेवट: data: [DONE] ही ओळ. |
- उत्तराचे स्टेटस
200आणिcontent-type: text/event-streamअसते. प्रत्येक फ्रेम म्हणजेdata: <json>ही ओळ आणि त्यानंतर एक रिकामी ओळ. - दर 15 सेकंदांनी
: pingही ओळ येते. ती कनेक्शन उघडे ठेवणारी कमेंट आहे; SSE क्लायंट्स ती वगळतात. - स्ट्रीम उघडल्यानंतरचे अपयश
data: {"error": {…}}या फ्रेमच्या रूपात येते. स्टेटस200राहते, म्हणून फ्रेम्स तपासा.
कॉल अयशस्वी झाल्यास
त्रुटी म्हणजे type आणि message असलेला error धारण करणारा JSON ऑब्जेक्ट. पहिल्या कॉलला सर्वाधिक वेळा मिळणारी ही उत्तरे आहेत.
| स्टेटस | प्रकार | संदेश | याचा अर्थ |
|---|---|---|---|
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, कॉन्टेक्स्ट विंडो आणि किमती.
- Chat Completions — तुम्ही कॉल केलेल्या एंडपॉइंटचे प्रत्येक रिक्वेस्ट फील्ड, उत्तर फील्ड आणि स्ट्रीम इव्हेंट.
- स्ट्रीमिंग — स्ट्रीमच्या फ्रेम्स, keep-alive ओळी आणि स्ट्रीममधील त्रुटी.
- फंक्शन कॉलिंग — मॉडेलला तुमची फंक्शन्स कॉल करू द्या.
- मर्यादा आणि बॅलन्स — रिक्वेस्ट काय राखून ठेवते आणि किती खर्च करते, आणि तुम्ही किती रिक्वेस्ट्स पाठवू शकता.
- API प्लेग्राउंड — तुमच्या कीसह ब्राउझरमध्ये रिक्वेस्ट्स वापरून पाहा.