SDKዎች
ማንኛውም የOpenAI ወይም የAnthropic SDK ሳይስተካከል ይሰራል።
Shannon የOpenAI እና የAnthropic wire ፎርማቶችን ይናገራል፣ ስለዚህ የሁለቱንም ኦፊሴላዊ SDKs እንዳሉ ይጠቀማሉ። በclient ውስጥ ሦስት እሴቶችን ይቀይራሉ፦ base URL፣ API ቁልፍ እና የሞዴል id። የቀረው ኮድዎ አይቀየርም።
ምን ማዘጋጀት
| ቅንብር | OpenAI SDKs | Anthropic SDKs |
|---|---|---|
| Base URL | https://api.shannon-ai.com/v1 | https://api.shannon-ai.com |
| API ቁልፍ | የእርስዎ Shannon ቁልፍ። SDK እንደ Authorization: Bearer ይልከዋል። | የእርስዎ Shannon ቁልፍ። SDK እንደ x-api-key ይልከዋል። |
| ሞዴል | የታተመ የሞዴል id፣ ለምሳሌ shannon-3። | የታተመ የሞዴል id፣ ለምሳሌ shannon-1.6-lite። |
| የሚደርስባቸው Endpoints | /v1/chat/completions, /v1/responses, /v1/models | /v1/messages, /v1/messages/count_tokens |
| የአካባቢ ተለዋዋጮች | OPENAI_API_KEY እና OPENAI_BASE_URL፣ እሴት ካላስተላለፉ በPython እና በJavaScript SDKs ይነበባሉ። | ANTHROPIC_API_KEY እና ANTHROPIC_BASE_URL፣ እሴት ካላስተላለፉ በPython እና በTypeScript SDKs ይነበባሉ። |
ሁለቱ base URLs በ/v1 ይለያያሉ፦ የOpenAI SDK ወደ base URL /chat/completions ይጨምራል፣ የAnthropic SDK /v1/messages ይጨምራል። Shannon የማያትመው የሞዴል ስም በ400 እና በunknown model ይመለሳል። ሞዴሎችና ዋጋ
ቁልፍዎ በKeys & usage ገጽ ላይ ነው። Keys & usage
OpenAI SDKs
ኦፊሴላዊ የOpenAI SDKs POST /v1/chat/completions እና POST /v1/responses ይጠራሉ። እያንዳንዱ ናሙና አንድ የተጠቃሚ መልእክት ይልካል እና መልሱን ያትማል።
# pip install openai
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!"}],
)
print(response.choices[0].message.content) // npm install openai
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!" }],
});
console.log(response.choices[0].message.content); // go get github.com/openai/openai-go/v3
package main
import (
"context"
"fmt"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/option"
)
func main() {
client := openai.NewClient(
option.WithAPIKey("YOUR_API_KEY"),
option.WithBaseURL("https://api.shannon-ai.com/v1/"),
)
completion, err := client.Chat.Completions.New(context.TODO(), openai.ChatCompletionNewParams{
Model: "shannon-3",
Messages: []openai.ChatCompletionMessageParamUnion{
openai.UserMessage("Hello, Shannon!"),
},
})
if err != nil {
panic(err)
}
fmt.Println(completion.Choices[0].Message.Content)
} // Gradle: implementation("com.openai:openai-java:<version>")
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.chat.completions.ChatCompletion;
import com.openai.models.chat.completions.ChatCompletionCreateParams;
OpenAIClient client = OpenAIOkHttpClient.builder()
.apiKey("YOUR_API_KEY")
.baseUrl("https://api.shannon-ai.com/v1")
.build();
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.model("shannon-3")
.addUserMessage("Hello, Shannon!")
.build();
ChatCompletion completion = client.chat().completions().create(params);
completion.choices().get(0).message().content().ifPresent(System.out::println); // dotnet add package OpenAI
using System.ClientModel;
using OpenAI;
using OpenAI.Chat;
ChatClient client = new(
model: "shannon-3",
credential: new ApiKeyCredential("YOUR_API_KEY"),
options: new OpenAIClientOptions()
{
Endpoint = new Uri("https://api.shannon-ai.com/v1")
});
ChatCompletion completion = client.CompleteChat("Hello, Shannon!");
Console.WriteLine(completion.Content[0].Text); | ቋንቋ | መጫን | የBase URL አማራጭ | ምንጭ |
|---|---|---|---|
| Python | pip install openai | base_url | openai/openai-python |
| JavaScript / TypeScript | npm install openai | baseURL | openai/openai-node |
| Go | go get github.com/openai/openai-go/v3 | option.WithBaseURL | openai/openai-go |
| Java | com.openai:openai-java | baseUrl | openai/openai-java |
| .NET | dotnet add package OpenAI | OpenAIClientOptions.Endpoint | openai/openai-dotnet |
የሁለቱ endpoints እያንዳንዱ መስክ በራሳቸው ገጾች ላይ ተብራርቷል። Chat Completions Responses API
Anthropic SDKs
ኦፊሴላዊ የAnthropic SDKs POST /v1/messages ይጠራሉ። በእያንዳንዱ ጥሪ max_tokens ይጠይቃሉ፣ ስለዚህ ናሙናዎቹ የሚተገብረውን shannon-1.6-lite ይጠቀማሉ። እያንዳንዱ ናሙና የመልሱን text blocks ያትማል።
# pip install anthropic
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com",
)
message = client.messages.create(
model="shannon-1.6-lite",
max_tokens=1024,
messages=[{"role": "user", "content": "Hello, Shannon!"}],
)
for block in message.content:
if block.type == "text":
print(block.text) // npm install @anthropic-ai/sdk
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com",
});
const message = await client.messages.create({
model: "shannon-1.6-lite",
max_tokens: 1024,
messages: [{ role: "user", content: "Hello, Shannon!" }],
});
for (const block of message.content) {
if (block.type === "text") console.log(block.text);
} // go get github.com/anthropics/anthropic-sdk-go
package main
import (
"context"
"fmt"
"github.com/anthropics/anthropic-sdk-go"
"github.com/anthropics/anthropic-sdk-go/option"
)
func main() {
client := anthropic.NewClient(
option.WithAPIKey("YOUR_API_KEY"),
option.WithBaseURL("https://api.shannon-ai.com/"),
)
message, err := client.Messages.New(context.TODO(), anthropic.MessageNewParams{
Model: "shannon-1.6-lite",
MaxTokens: 1024,
Messages: []anthropic.MessageParam{
anthropic.NewUserMessage(anthropic.NewTextBlock("Hello, Shannon!")),
},
})
if err != nil {
panic(err)
}
for _, block := range message.Content {
if block.Type == "text" {
fmt.Println(block.Text)
}
}
} // Gradle: implementation("com.anthropic:anthropic-java:<version>")
import com.anthropic.client.AnthropicClient;
import com.anthropic.client.okhttp.AnthropicOkHttpClient;
import com.anthropic.models.messages.Message;
import com.anthropic.models.messages.MessageCreateParams;
AnthropicClient client = AnthropicOkHttpClient.builder()
.apiKey("YOUR_API_KEY")
.baseUrl("https://api.shannon-ai.com")
.build();
MessageCreateParams params = MessageCreateParams.builder()
.model("shannon-1.6-lite")
.maxTokens(1024L)
.addUserMessage("Hello, Shannon!")
.build();
Message message = client.messages().create(params);
message.content().stream()
.flatMap(block -> block.text().stream())
.forEach(text -> System.out.println(text.text())); | ቋንቋ | መጫን | የBase URL አማራጭ | ምንጭ |
|---|---|---|---|
| Python | pip install anthropic | base_url | anthropics/anthropic-sdk-python |
| TypeScript | npm install @anthropic-ai/sdk | baseURL | anthropics/anthropic-sdk-typescript |
| Go | go get github.com/anthropics/anthropic-sdk-go | option.WithBaseURL | anthropics/anthropic-sdk-go |
| Java | com.anthropic:anthropic-java | baseUrl | anthropics/anthropic-sdk-java |
የMessages ፎርማት እና ልዩነቶቹ በAnthropic ተኳሃኝነት ገጽ ላይ ናቸው። Anthropic ፎርማት
SDKs የሚመኩባቸው
- API የማይጠቀምበት የጥያቄ መስክ ተቀባይነት አለው። API የሚያውቀው መስክ በተሳሳተ አይነት ከተላከ በ
422ይመለሳል። - SDKs የሚጨምሯቸው የስሪት እና የbeta headers (
anthropic-version፣anthropic-beta፣openai-beta) ተቀባይነት አላቸው። አንዳቸውም ግዴታ አይደሉም። - የምላሽ
modelየታተመው id ነው፣ ስለዚህ እንዳለ መልሰው ሊልኩት ይችላሉ። - በ
/v1/messagesላይ ምላሽ በthinkingblock ሊጀምር ይችላል። የመጀመሪያውን block ከመውሰድ ይልቅtextአይነት ያላቸውን blocks ያንብቡ። - Streaming በSDK የራሱ stream helpers ይሰራል። Usage በእያንዳንዱ stream መጨረሻ ይደርሳል።
- እያንዳንዱ ምላሽ
x-request-idheader ይይዛል። የራስዎንx-request-idይላኩ እና ተመሳሳዩ እሴት ይመለሳል።
የማህበረሰብ SDKs
በሌሎች ደራሲዎች ለOpenAI API የተጻፉ clients በተመሳሳይ መንገድ ይሰራሉ፦ ለclient base URL ን ከ/v1 ጋር፣ ቁልፍዎን እና የShannon ሞዴል id ይስጡት። እነዚህ የሚጠበቁት በደራሲዎቻቸው ነው እንጂ በShannon አይደለም።
| ቋንቋ | መጫን | Client |
|---|---|---|
| Go | go get github.com/sashabaranov/go-openai | sashabaranov/go-openai |
| Ruby | gem install ruby-openai | alexrudall/ruby-openai |
| PHP | composer require openai-php/client | openai-php/client |
| Rust | cargo add async-openai | 64bit/async-openai |
ያለ SDK
SDK አያስፈልግዎትም። JSON መላክ የሚችል ማንኛውም HTTP client ይሰራል፦
POSTከJSON body እና ከContent-Type: application/jsonheader ጋር። ያለ እሱ ጥያቄው በ415ይመለሳል።- ቁልፍዎ በ
Authorization: Bearer <key>ወይም በx-api-key: <key>። ሁለቱም በእያንዳንዱ endpoint ላይ ይሰራሉ። - እስከ 32 MiB የሆነ body።
- በ
"stream": trueምላሹ server-sent event stream (text/event-stream) ነው። መስመር በመስመር ያንብቡት እና buffer አያድርጉት። - ስህተት ከHTTP status ጎን
error.typeእናerror.messageያለው JSON body ነው።
curl 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!"}]
}' import requests
response = requests.post(
"https://api.shannon-ai.com/v1/chat/completions",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"model": "shannon-3",
"messages": [{"role": "user", "content": "Hello, Shannon!"}],
},
)
response.raise_for_status()
print(response.json()["choices"][0]["message"]["content"]) const response = await fetch("https://api.shannon-ai.com/v1/chat/completions", {
method: "POST",
headers: {
Authorization: "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "shannon-3",
messages: [{ role: "user", content: "Hello, Shannon!" }],
}),
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const data = await response.json();
console.log(data.choices[0].message.content); ስለ stream events እና ስለ የስህተት አይነቶች ይመልከቱ፦ ስትሪሚንግ ስህተት አስተዳደር