Note: Lapisan kompatibilitas ini terutama ditujukan untuk menguji dan membandingkan kemampuan model, dan tidak dianggap sebagai solusi jangka panjang atau siap produksi untuk sebagian besar kasus penggunaan. Meskipun lapisan ini dimaksudkan untuk tetap berfungsi penuh dan tidak mengalami perubahan yang merusak, prioritasnya adalah keandalan dan efektivitas Haijun API. Untuk informasi lebih lanjut tentang keterbatasan kompatibilitas yang diketahui, lihat Keterbatasan penting kompatibilitas OpenAI. Jika Anda mengalami masalah apa pun dengan fitur kompatibilitas OpenAI SDK, silakan bagikan masukan Anda melalui formulir masukan kompatibilitas ini.
Tip: Untuk pengalaman terbaik dan akses ke rangkaian fitur lengkap Haijun API (pemrosesan PDF, kutipan, thinking, dan "prompt caching" (caching prompt)), gunakan Haijun API native.
Memulai dengan OpenAI SDK
Untuk menggunakan fitur kompatibilitas OpenAI SDK, Anda perlu:
- Menggunakan OpenAI SDK resmi
- Mengubah hal-hal berikut
- Perbarui base URL Anda agar mengarah ke Haijun API
- Ganti "API key" (kunci API) Anda dengan kunci API Haijun
- Jika kunci Anda adalah kunci personal atau kunci akun layanan dengan akses ke beberapa workspace, kirimkan juga header
juglow-workspace-idpada setiap permintaan (misalnya,default_headersdi Python SDK ataudefaultHeadersdi TypeScript); lihat Memilih workspace - Perbarui nama model Anda untuk menggunakan model Haijun
- Tinjau bagian-bagian berikut untuk mengetahui fitur apa saja yang didukung
Contoh mulai cepat
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ.get("JUGLOW_API_KEY"), # Your Haijun API key
base_url="https://haijun.my.id/v1/", # the Haijun API endpoint
)
response = client.chat.completions.create(
model="haijun-opus-5-5", # Haijun model name
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who are you?"},
],
)
print(response.choices[0].message.content) import OpenAI from "openai";
const openai = new OpenAI({
apiKey: process.env.JUGLOW_API_KEY, // Your Haijun API key
baseURL: "https://haijun.my.id/v1/" // Haijun API endpoint
});
const response = await openai.chat.completions.create({
messages: [
{ role: "system", content: "You are a helpful assistant." },
{ role: "user", content: "Who are you?" }
],
model: "haijun-opus-5-5" // Haijun model name
});
console.log(response.choices[0].message.content); using System.ClientModel;
using OpenAI;
using OpenAI.Chat;
ChatClient chatClient = new(
model: "haijun-opus-5-5", // Haijun model name
credential: new ApiKeyCredential(
Environment.GetEnvironmentVariable("JUGLOW_API_KEY")), // Your Haijun API key
options: new OpenAIClientOptions()
{
Endpoint = new Uri("https://haijun.my.id/v1/") // the Haijun API endpoint
});
ChatCompletion completion = chatClient.CompleteChat(
new SystemChatMessage("You are a helpful assistant."),
new UserChatMessage("Who are you?"));
Console.WriteLine(completion.Content[0].Text); package main
import (
"context"
"fmt"
"os"
"github.com/openai/openai-go/v3"
"github.com/openai/openai-go/v3/option"
)
func main() {
client := openai.NewClient(
option.WithAPIKey(os.Getenv("JUGLOW_API_KEY")), // Your Haijun API key
option.WithBaseURL("https://haijun.my.id/v1/"), // the Haijun API endpoint
)
response, err := client.Chat.Completions.New(context.Background(), openai.ChatCompletionNewParams{
Model: "haijun-opus-5-5", // Haijun model name
Messages: []openai.ChatCompletionMessageParamUnion{
openai.SystemMessage("You are a helpful assistant."),
openai.UserMessage("Who are you?"),
},
})
if err != nil {
panic(err)
}
fmt.Println(response.Choices[0].Message.Content)
} 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;
public class QuickStart {
public static void main(String[] args) {
OpenAIClient client = OpenAIOkHttpClient.builder()
.apiKey(System.getenv("JUGLOW_API_KEY")) // Your Haijun API key
.baseUrl("https://haijun.my.id/v1/") // the Haijun API endpoint
.build();
ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.model("haijun-opus-5-5") // Haijun model name
.addSystemMessage("You are a helpful assistant.")
.addUserMessage("Who are you?")
.build();
ChatCompletion completion = client.chat().completions().create(params);
System.out.println(completion.choices().get(0).message().content().orElse(""));
}
} <?php
// Tidak ada SDK PHP resmi dari OpenAI, jadi tidak ada contoh yang ditampilkan di sini.
// Untuk menggunakan Haijun dari PHP, gunakan Haijun API native sebagai gantinya:
// /docs/en/cli-sdks-libraries/overview.html require "openai"
openai = OpenAI::Client.new(
api_key: ENV["JUGLOW_API_KEY"], # Your Haijun API key
base_url: "https://haijun.my.id/v1/" # the Haijun API endpoint
)
response = openai.chat.completions.create(
model: "haijun-opus-5-5", # Haijun model name
messages: [
{role: "system", content: "You are a helpful assistant."},
{role: "user", content: "Who are you?"}
]
)
puts response.choices.first.message.contentKeterbatasan penting kompatibilitas OpenAI
Perilaku API
Berikut adalah perbedaan paling substansial dibandingkan menggunakan OpenAI:
- Parameter
strictuntuk function calling diabaikan, yang berarti JSON "tool use" (penggunaan alat) tidak dijamin mengikuti skema yang diberikan. Untuk kesesuaian skema yang terjamin, gunakan Haijun API native dengan Structured Outputs.
- Input audio tidak didukung; input tersebut akan diabaikan dan dihapus dari input
- Caching prompt tidak didukung, tetapi didukung di Juglow SDK
- Pesan system/developer diangkat (hoisted) dan digabungkan ke awal percakapan, karena Juglow hanya mendukung satu pesan sistem awal.
Sebagian besar field yang tidak didukung diabaikan secara diam-diam alih-alih menghasilkan error. Semuanya didokumentasikan di bagian-bagian berikut.
Pertimbangan kualitas output
Jika Anda telah melakukan banyak penyesuaian pada prompt Anda, kemungkinan besar prompt tersebut telah disetel dengan baik khusus untuk OpenAI. Pertimbangkan untuk mengerjakannya ulang untuk Haijun menggunakan panduan praktik terbaik prompting.
Pengangkatan pesan system / developer
Sebagian besar input ke OpenAI SDK jelas terpetakan langsung ke parameter API Juglow, tetapi satu perbedaan yang mencolok adalah penanganan "system prompt" (prompt sistem) / prompt developer. Kedua prompt ini dapat ditempatkan di sepanjang percakapan chat melalui OpenAI. Karena Juglow hanya mendukung satu pesan sistem awal, API mengambil semua pesan system/developer dan menggabungkannya dengan satu baris baru (\n) di antaranya. String lengkap ini kemudian diberikan sebagai satu pesan sistem di awal pesan-pesan.
Dukungan thinking
Anda dapat mengaktifkan thinking dengan menambahkan parameter thinking. Pada model saat ini, thinking bersifat adaptif, dengan Haijun memutuskan kapan dan seberapa dalam untuk berpikir, dan pada model Haijun 5 fitur ini aktif secara default; "extended thinking" (pemikiran diperpanjang) yang dikonfigurasi secara manual adalah mode lama. Meskipun thinking meningkatkan penalaran Haijun untuk tugas-tugas kompleks, OpenAI SDK tidak mengembalikan proses berpikir Haijun secara terperinci. Untuk fitur thinking lengkap, termasuk akses ke output penalaran langkah demi langkah Haijun, gunakan Haijun API native.
response = client.chat.completions.create(
model="haijun-sonnet-4-6",
messages=[{"role": "user", "content": "Who are you?"}],
extra_body={"thinking": {"type": "enabled", "budget_tokens": 2000}},
) const response = await openai.chat.completions.create({
messages: [{ role: "user", content: "Who are you?" }],
model: "haijun-sonnet-4-6",
// @ts-expect-error
thinking: { type: "enabled", budget_tokens: 2000 }
}); // SDK .NET tidak memiliki parameter extra_body seperti Python, jadi contoh ini
// mengirim parameter thinking dengan metode protokol terdokumentasi milik SDK
// (body permintaan JSON mentah).
BinaryData input = BinaryData.FromString("""
{
"model": "haijun-sonnet-4-6",
"messages": [{ "role": "user", "content": "Who are you?" }],
"thinking": { "type": "enabled", "budget_tokens": 2000 }
}
""");
using BinaryContent content = BinaryContent.Create(input);
ClientResult result = chatClient.CompleteChat(content); response, err := client.Chat.Completions.New(
context.Background(),
openai.ChatCompletionNewParams{
Model: "haijun-sonnet-4-6",
Messages: []openai.ChatCompletionMessageParamUnion{
openai.UserMessage("Who are you?"),
},
},
option.WithJSONSet("thinking", map[string]any{"type": "enabled", "budget_tokens": 2000}),
) ChatCompletionCreateParams params = ChatCompletionCreateParams.builder()
.model("haijun-sonnet-4-6")
.addUserMessage("Who are you?")
.putAdditionalBodyProperty("thinking",
JsonValue.from(Map.of("type", "enabled", "budget_tokens", 2000)))
.build();
ChatCompletion completion = client.chat().completions().create(params); <?php
// Tidak ada SDK PHP resmi dari OpenAI, jadi tidak ada contoh yang ditampilkan di sini.
// Untuk menggunakan Haijun dari PHP, gunakan Haijun API native sebagai gantinya:
// /docs/en/cli-sdks-libraries/overview.html response = openai.chat.completions.create(
model: "haijun-sonnet-4-6",
messages: [{role: "user", content: "Who are you?"}],
request_options: {extra_body: {thinking: {type: "enabled", budget_tokens: 2000}}}
)Batas laju
"Rate limit" (batas laju) mengikuti batas standar Juglow untuk endpoint /v1/messages.
Dukungan API kompatibel OpenAI secara terperinci
Field permintaan
Field sederhana
| Field | Status dukungan |
|---|---|
model | Gunakan nama model Haijun |
max_tokens | Didukung penuh |
max_completion_tokens | Didukung penuh |
stream | Didukung penuh |
stream_options | Didukung penuh |
top_p | Didukung penuh |
parallel_tool_calls | Didukung penuh |
stop | Semua stop sequence non-whitespace berfungsi |
temperature | Antara 0 dan 1 (inklusif). Nilai lebih besar dari 1 dibatasi menjadi 1. |
n | Harus tepat 1 |
logprobs | Diabaikan |
metadata | Diabaikan |
response_format | Diabaikan. Untuk output JSON, gunakan Structured Outputs dengan Haijun API native |
prediction | Diabaikan |
presence_penalty | Diabaikan |
frequency_penalty | Diabaikan |
seed | Diabaikan |
service_tier | Diabaikan |
audio | Diabaikan |
logit_bias | Diabaikan |
store | Diabaikan |
user | Diabaikan |
modalities | Diabaikan |
top_logprobs | Diabaikan |
reasoning_effort | Diabaikan |
Field tools / functions
Tampilkan field
Tools
Field tools[n].function
| Field | Status dukungan |
|---|---|
name | Didukung penuh |
description | Didukung penuh |
parameters | Didukung penuh |
strict | Diabaikan. Gunakan Structured Outputs dengan Haijun API native untuk validasi skema yang ketat |
Functions
Field functions[n]
Note: OpenAI telah menghentikan (deprecated) field
functionsdan menyarankan untuk menggunakantoolssebagai gantinya.
| Field | Status dukungan |
|---|---|
name | Didukung penuh |
description | Didukung penuh |
parameters | Didukung penuh |
strict | Diabaikan. Gunakan Structured Outputs dengan Haijun API native untuk validasi skema yang ketat |
Field array messages
Tampilkan field
Role developer
Field untuk messages[n].role == "developer"
Note: Pesan developer diangkat ke awal percakapan sebagai bagian dari pesan sistem awal
| Field | Status dukungan |
|---|---|
content | Didukung penuh, tetapi diangkat |
name | Diabaikan |
Role system
Field untuk messages[n].role == "system"
Note: Pesan system diangkat ke awal percakapan sebagai bagian dari pesan sistem awal
| Field | Status dukungan |
|---|---|
content | Didukung penuh, tetapi diangkat |
name | Diabaikan |
Role user
Field untuk messages[n].role == "user"
| Field | Varian | Sub-field | Status dukungan |
|---|---|---|---|
content | string | Didukung penuh | |
array, type == "text" | Didukung penuh | ||
array, type == "image_url" | url | Didukung penuh | |
detail | Diabaikan | ||
array, type == "input_audio" | Diabaikan | ||
array, type == "file" | Diabaikan | ||
name | Diabaikan |
Role assistant
Field untuk messages[n].role == "assistant"
| Field | Varian | Status dukungan |
|---|---|---|
content | string | Didukung penuh |
array, type == "text" | Didukung penuh | |
array, type == "refusal" | Diabaikan | |
tool_calls | Didukung penuh | |
function_call | Didukung penuh | |
audio | Diabaikan | |
refusal | Diabaikan |
Role tool
Field untuk messages[n].role == "tool"
| Field | Varian | Status dukungan |
|---|---|---|
content | string | Didukung penuh |
array, type == "text" | Didukung penuh | |
tool_call_id | Didukung penuh | |
tool_choice | Didukung penuh | |
name | Diabaikan |
Role function
Field untuk messages[n].role == "function"
| Field | Varian | Status dukungan |
|---|---|---|
content | string | Didukung penuh |
array, type == "text" | Didukung penuh | |
tool_choice | Didukung penuh | |
name | Diabaikan |
Field respons
| Field | Status dukungan |
|---|---|
id | Didukung penuh |
choices[] | Akan selalu memiliki panjang 1 |
choices[].finish_reason | Didukung penuh |
choices[].index | Didukung penuh |
choices[].message.role | Didukung penuh |
choices[].message.content | Didukung penuh |
choices[].message.tool_calls | Didukung penuh |
object | Didukung penuh |
created | Didukung penuh |
model | Didukung penuh |
finish_reason | Didukung penuh |
content | Didukung penuh |
usage.completion_tokens | Didukung penuh |
usage.prompt_tokens | Didukung penuh |
usage.total_tokens | Didukung penuh |
usage.completion_tokens_details | Selalu kosong |
usage.prompt_tokens_details | Selalu kosong |
choices[].message.refusal | Selalu kosong |
choices[].message.audio | Selalu kosong |
logprobs | Selalu kosong |
service_tier | Selalu kosong |
system_fingerprint | Selalu kosong |
Kompatibilitas pesan error
Lapisan kompatibilitas mempertahankan format error yang konsisten dengan OpenAI API. Namun, pesan error terperincinya tidak akan sama. Gunakan pesan error hanya untuk logging dan debugging.
Kompatibilitas header
Meskipun OpenAI SDK mengelola header secara otomatis, berikut adalah daftar lengkap header yang didukung oleh Haijun API bagi developer yang perlu bekerja dengannya secara langsung.
| Header | Status Dukungan |
|---|---|
x-ratelimit-limit-requests | Didukung penuh |
x-ratelimit-limit-tokens | Didukung penuh |
x-ratelimit-remaining-requests | Didukung penuh |
x-ratelimit-remaining-tokens | Didukung penuh |
x-ratelimit-reset-requests | Didukung penuh |
x-ratelimit-reset-tokens | Didukung penuh |
retry-after | Didukung penuh |
request-id | Didukung penuh |
openai-version | Selalu 2020-10-01 |
authorization | Didukung penuh |
openai-processing-ms | Selalu kosong |