SDK's
Enige OpenAI- of Anthropic-SDK werk reguit uit die boks.
Shannon praat die OpenAI- en die Anthropic-drylformate, so jy gebruik die amptelike SDK's van albei soos hulle is. Jy verander drie waardes in die kliënt: die basis-URL, die API-sleutel en die model-id. Die res van jou kode bly dieselfde.
Wat om te stel
| Instelling | OpenAI-SDK's | Anthropic-SDK's |
|---|---|---|
| Basis-URL | https://api.shannon-ai.com/v1 | https://api.shannon-ai.com |
| API-sleutel | Jou Shannon-sleutel. Die SDK stuur dit as Authorization: Bearer. | Jou Shannon-sleutel. Die SDK stuur dit as x-api-key. |
| Model | 'n Gepubliseerde model-id, byvoorbeeld shannon-3. | 'n Gepubliseerde model-id, byvoorbeeld shannon-1.6-lite. |
| Eindpunte wat dit bereik | /v1/chat/completions, /v1/responses, /v1/models | /v1/messages, /v1/messages/count_tokens |
| Omgewingsveranderlikes | OPENAI_API_KEY en OPENAI_BASE_URL, gelees deur die Python- en JavaScript-SDK's wanneer jy geen waarde deurgee nie. | ANTHROPIC_API_KEY en ANTHROPIC_BASE_URL, gelees deur die Python- en TypeScript-SDK's wanneer jy geen waarde deurgee nie. |
Die twee basis-URL's verskil met /v1: 'n OpenAI-SDK voeg /chat/completions by sy basis-URL, 'n Anthropic-SDK voeg /v1/messages by. 'n Modelnaam wat Shannon nie publiseer nie, word met 400 en unknown model beantwoord. Modelle en pryse
Jou sleutel is op die bladsy Sleutels en gebruik. Sleutels en gebruik
OpenAI-SDK's
Die amptelike OpenAI-SDK's roep POST /v1/chat/completions en POST /v1/responses op. Elke voorbeeld stuur een gebruikersboodskap en druk die antwoord.
# 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); | Taal | Installeer | Basis-URL-opsie | Bron |
|---|---|---|---|
| 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 |
Elke veld van die twee eindpunte word op hul eie bladsye beskryf. Chat Completions Responses API
Anthropic-SDK's
Die amptelike Anthropic-SDK's roep POST /v1/messages op. Hulle vereis max_tokens by elke oproep, so die voorbeelde gebruik shannon-1.6-lite, wat dit toepas. Elke voorbeeld druk die teksblokke van die antwoord.
# 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())); | Taal | Installeer | Basis-URL-opsie | Bron |
|---|---|---|---|
| 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 |
Die Messages-formaat en sy verskille is op die bladsy Anthropic-versoenbaarheid. Anthropic
Waarop die SDK's kan staatmaak
- 'n Versoekveld wat die API nie gebruik nie, word aanvaar. 'n Veld wat die API ken, met die verkeerde tipe gestuur, word met
422beantwoord. - Die weergawe- en beta-headers wat die SDK's byvoeg (
anthropic-version,anthropic-beta,openai-beta) word aanvaar. Geen een daarvan is vereis nie. - Die
modelvan 'n antwoord is die gepubliseerde id, so jy kan dit soos dit is terugstuur. - Op
/v1/messageskan 'n antwoord met 'nthinking-blok begin. Lees die blokke van tipetextin plaas daarvan om die eerste blok te neem. - Stroming werk deur die SDK se eie stroomhulpmiddels. Gebruik kom aan die einde van elke stroom aan.
- Elke antwoord dra 'n
x-request-id-header. Stuur jou eiex-request-iden dieselfde waarde kom terug.
Gemeenskaps-SDK's
Kliënte wat deur ander outeurs vir die OpenAI API geskryf is, werk op dieselfde manier: gee die kliënt die basis-URL met /v1, jou sleutel en 'n Shannon-model-id. Hierdie word deur hul outeurs onderhou, nie deur Shannon nie.
| Taal | Installeer | Kliënt |
|---|---|---|
| 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 |
Sonder 'n SDK
Jy het nie 'n SDK nodig nie. Enige HTTP-kliënt wat JSON kan stuur, werk:
POSTmet 'n JSON-liggaam en die headerContent-Type: application/json. Daarsonder word die versoek met415beantwoord.- Jou sleutel in
Authorization: Bearer <key>of inx-api-key: <key>. Albei werk op elke eindpunt. - 'n Liggaam van tot 32 MiB.
- Met
"stream": trueis die antwoord 'n stroom bediener-gestuurde gebeure (text/event-stream). Lees dit reël vir reël en moenie dit buffer nie. - 'n Fout is 'n JSON-liggaam met
error.typeenerror.message, langs die HTTP-status.
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); Vir die gebeure van 'n stroom en die foutipes, sien: Stroming Fouthantering