SDK
Mọi SDK của OpenAI hoặc Anthropic đều dùng được ngay.
Shannon dùng cả định dạng truyền của OpenAI và Anthropic, nên bạn dùng các SDK chính thức của cả hai nguyên trạng. Bạn thay ba giá trị trong client: base URL, API key và id model. Phần còn lại của mã giữ nguyên.
Cần thiết lập gì
| Cài đặt | SDK của OpenAI | SDK của Anthropic |
|---|---|---|
| Base URL | https://api.shannon-ai.com/v1 | https://api.shannon-ai.com |
| API key | Key Shannon của bạn. SDK gửi nó dưới dạng Authorization: Bearer. | Key Shannon của bạn. SDK gửi nó dưới dạng x-api-key. |
| Model | Một id model đã công bố, ví dụ shannon-3. | Một id model đã công bố, ví dụ shannon-1.6-lite. |
| Endpoint nó truy cập | /v1/chat/completions, /v1/responses, /v1/models | /v1/messages, /v1/messages/count_tokens |
| Biến môi trường | OPENAI_API_KEY và OPENAI_BASE_URL, được SDK Python và JavaScript đọc khi bạn không truyền giá trị. | ANTHROPIC_API_KEY và ANTHROPIC_BASE_URL, được SDK Python và TypeScript đọc khi bạn không truyền giá trị. |
Hai base URL khác nhau ở /v1: SDK của OpenAI thêm /chat/completions vào base URL của nó, SDK của Anthropic thêm /v1/messages. Tên model mà Shannon không công bố được trả lời bằng 400 và unknown model. Model và giá
Key của bạn nằm ở trang Keys & usage. Keys & usage
SDK của OpenAI
Các SDK chính thức của OpenAI gọi POST /v1/chat/completions và POST /v1/responses. Mỗi ví dụ gửi một tin nhắn người dùng và in ra câu trả lời.
# 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); | Ngôn ngữ | Cài đặt | Tùy chọn base URL | Nguồn |
|---|---|---|---|
| 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 |
Mọi trường của hai endpoint được mô tả ở các trang riêng của chúng. Chat Completions Responses API
SDK của Anthropic
Các SDK chính thức của Anthropic gọi POST /v1/messages. Chúng yêu cầu max_tokens trong mỗi lượt gọi, nên các ví dụ dùng shannon-1.6-lite, model áp dụng nó. Mỗi ví dụ in ra các khối văn bản của câu trả lời.
# 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())); | Ngôn ngữ | Cài đặt | Tùy chọn base URL | Nguồn |
|---|---|---|---|
| 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 |
Định dạng Messages và các điểm khác biệt của nó nằm ở trang tương thích Anthropic. Định dạng Anthropic
Những điều SDK có thể dựa vào
- Trường yêu cầu mà API không dùng vẫn được chấp nhận. Trường mà API biết, được gửi với kiểu sai, được trả lời bằng
422. - Các header phiên bản và beta mà SDK thêm vào (
anthropic-version,anthropic-beta,openai-beta) được chấp nhận. Không header nào bắt buộc. modelcủa phản hồi là id đã công bố, nên bạn có thể gửi lại nó nguyên trạng.- Trên
/v1/messages, phản hồi có thể bắt đầu bằng một khốithinking. Hãy đọc các khối loạitextthay vì lấy khối đầu tiên. - Streaming hoạt động qua các stream helper riêng của SDK. Usage đến ở cuối mỗi stream.
- Mọi phản hồi đều mang header
x-request-id. Hãy gửix-request-idcủa riêng bạn và cùng giá trị đó sẽ được trả lại.
SDK cộng đồng
Các client do tác giả khác viết cho API OpenAI hoạt động theo cách tương tự: đưa cho client base URL có /v1, key của bạn và một id model Shannon. Chúng do các tác giả của chúng duy trì, không phải Shannon.
| Ngôn ngữ | Cài đặt | 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 |
Không dùng SDK
Bạn không cần SDK. Bất kỳ HTTP client nào gửi được JSON đều dùng được:
POSTvới nội dung JSON và headerContent-Type: application/json. Thiếu nó, yêu cầu được trả lời bằng415.- Key của bạn trong
Authorization: Bearer <key>hoặc trongx-api-key: <key>. Cả hai đều dùng được trên mọi endpoint. - Nội dung tối đa 32 MiB.
- Với
"stream": true, phản hồi là một luồng server-sent event (text/event-stream). Hãy đọc từng dòng và đừng đệm nó. - Lỗi là một nội dung JSON với
error.typevàerror.message, bên cạnh trạng thái HTTP.
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); Về các sự kiện của stream và các loại lỗi, xem: Truyền phát Xử lý lỗi