Mga SDK
Gumagana agad ang anumang OpenAI o Anthropic SDK.
Sinasalita ng Shannon ang mga wire format ng OpenAI at Anthropic, kaya magagamit mo nang buo ang mga opisyal na SDK ng pareho. Tatlong value ang papalitan mo sa client: ang base URL, ang API key at ang model id. Nananatiling pareho ang natitira sa iyong code.
Ano ang ise-set
| Setting | Mga OpenAI SDK | Mga Anthropic SDK |
|---|---|---|
| Base URL | https://api.shannon-ai.com/v1 | https://api.shannon-ai.com |
| API key | Ang iyong Shannon key. Ipinapadala ito ng SDK bilang Authorization: Bearer. | Ang iyong Shannon key. Ipinapadala ito ng SDK bilang x-api-key. |
| Model | Isang inilathalang model id, halimbawa shannon-3. | Isang inilathalang model id, halimbawa shannon-1.6-lite. |
| Mga naaabot na endpoint | /v1/chat/completions, /v1/responses, /v1/models | /v1/messages, /v1/messages/count_tokens |
| Mga environment variable | OPENAI_API_KEY at OPENAI_BASE_URL, binabasa ng mga Python at JavaScript SDK kapag wala kang ipinasang value. | ANTHROPIC_API_KEY at ANTHROPIC_BASE_URL, binabasa ng mga Python at TypeScript SDK kapag wala kang ipinasang value. |
Magkaiba ng /v1 ang dalawang base URL: nagdaragdag ang OpenAI SDK ng /chat/completions sa base URL nito, ang Anthropic SDK ay /v1/messages. Ang pangalan ng model na hindi inilalathala ng Shannon ay sinasagot ng 400 at unknown model. Mga model at presyo
Nasa pahinang Keys & usage ang iyong key. Keys & usage
Mga OpenAI SDK
Tinatawag ng mga opisyal na OpenAI SDK ang POST /v1/chat/completions at POST /v1/responses. Nagpapadala ang bawat sample ng isang user message at ipinapakita ang sagot.
# 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); | Wika | I-install | Opsyon ng base URL | Source |
|---|---|---|---|
| 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 |
Inilalarawan ang bawat field ng dalawang endpoint sa kanilang sariling mga pahina. Chat Completions Responses API
Mga Anthropic SDK
Tinatawag ng mga opisyal na Anthropic SDK ang POST /v1/messages. Kinakailangan nila ang max_tokens sa bawat call, kaya ginagamit ng mga sample ang shannon-1.6-lite, na ina-apply ito. Ipinapakita ng bawat sample ang mga text block ng sagot.
# 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())); | Wika | I-install | Opsyon ng base URL | Source |
|---|---|---|---|
| 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 |
Nasa pahinang Anthropic compatibility ang Messages format at ang mga pagkakaiba nito. Anthropic
Ang maaasahan ng mga SDK
- Tinatanggap ang request field na hindi ginagamit ng API. Ang field na kilala ng API, na ipinadala na may maling type, ay sinasagot ng
422. - Tinatanggap ang mga header ng bersyon at beta na idinaragdag ng mga SDK (
anthropic-version,anthropic-beta,openai-beta). Walang kinakailangan sa mga ito. - Ang
modelng reply ay ang inilathalang id, kaya maaari mo itong ipadala pabalik nang buo. - Sa
/v1/messages, ang reply ay maaaring magsimula sathinkingblock. Basahin ang mga block na type natextsa halip na kunin ang unang block. - Gumagana ang streaming sa pamamagitan ng sariling stream helper ng SDK. Dumarating ang usage sa dulo ng bawat stream.
- Bawat reply ay may dalang header na
x-request-id. Magpadala ng sarili mongx-request-idat babalik ang parehong value.
Mga community SDK
Gumagana sa parehong paraan ang mga client na isinulat ng ibang awtor para sa OpenAI API: ibigay sa client ang base URL na may /v1, ang iyong key at isang Shannon model id. Pinapanatili ang mga ito ng kanilang mga awtor, hindi ng Shannon.
| Wika | I-install | 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 |
Nang walang SDK
Hindi mo kailangan ng SDK. Gumagana ang anumang HTTP client na kayang magpadala ng JSON:
POSTna may JSON body at ang header naContent-Type: application/json. Kung wala ito, sinasagot ang request ng415.- Ang iyong key sa
Authorization: Bearer <key>o sax-api-key: <key>. Parehong gumagana sa bawat endpoint. - Isang body na hanggang 32 MiB.
- Gamit ang
"stream": true, ang reply ay isang server-sent event stream (text/event-stream). Basahin ito linya por linya at huwag i-buffer. - Ang error ay isang JSON body na may
error.typeaterror.message, katabi ng 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); Para sa mga event ng stream at mga error type, tingnan ang: Pag‑stream Paghawak ng Error