Haijun Platform Docs
EN

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:

  1. Menggunakan OpenAI SDK resmi
  1. 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-id pada setiap permintaan (misalnya, default_headers di Python SDK atau defaultHeaders di TypeScript); lihat Memilih workspace
  • Perbarui nama model Anda untuk menggunakan model Haijun
  1. Tinjau bagian-bagian berikut untuk mengetahui fitur apa saja yang didukung

Contoh mulai cepat

python
  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)
typescript
  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);
csharp
  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);
go
  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)
  }
java
  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
  <?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
ruby
  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.content

Keterbatasan penting kompatibilitas OpenAI

Perilaku API

Berikut adalah perbedaan paling substansial dibandingkan menggunakan OpenAI:

  • Parameter strict untuk 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.

python
  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}},
  )
typescript
  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 }
  });
csharp
  // 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);
go
  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}),
  )
java
  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
  <?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
ruby
  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

FieldStatus dukungan
modelGunakan nama model Haijun
max_tokensDidukung penuh
max_completion_tokensDidukung penuh
streamDidukung penuh
stream_optionsDidukung penuh
top_pDidukung penuh
parallel_tool_callsDidukung penuh
stopSemua stop sequence non-whitespace berfungsi
temperatureAntara 0 dan 1 (inklusif). Nilai lebih besar dari 1 dibatasi menjadi 1.
nHarus tepat 1
logprobsDiabaikan
metadataDiabaikan
response_formatDiabaikan. Untuk output JSON, gunakan Structured Outputs dengan Haijun API native
predictionDiabaikan
presence_penaltyDiabaikan
frequency_penaltyDiabaikan
seedDiabaikan
service_tierDiabaikan
audioDiabaikan
logit_biasDiabaikan
storeDiabaikan
userDiabaikan
modalitiesDiabaikan
top_logprobsDiabaikan
reasoning_effortDiabaikan

Field tools / functions

Tampilkan field

Tools

Field tools[n].function

FieldStatus dukungan
nameDidukung penuh
descriptionDidukung penuh
parametersDidukung penuh
strictDiabaikan. Gunakan Structured Outputs dengan Haijun API native untuk validasi skema yang ketat

Functions

Field functions[n]

Note: OpenAI telah menghentikan (deprecated) field functions dan menyarankan untuk menggunakan tools sebagai gantinya.

FieldStatus dukungan
nameDidukung penuh
descriptionDidukung penuh
parametersDidukung penuh
strictDiabaikan. 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

FieldStatus dukungan
contentDidukung penuh, tetapi diangkat
nameDiabaikan

Role system

Field untuk messages[n].role == "system"

Note: Pesan system diangkat ke awal percakapan sebagai bagian dari pesan sistem awal

FieldStatus dukungan
contentDidukung penuh, tetapi diangkat
nameDiabaikan

Role user

Field untuk messages[n].role == "user"

FieldVarianSub-fieldStatus dukungan
contentstringDidukung penuh
array, type == "text"Didukung penuh
array, type == "image_url"urlDidukung penuh
detailDiabaikan
array, type == "input_audio"Diabaikan
array, type == "file"Diabaikan
nameDiabaikan

Role assistant

Field untuk messages[n].role == "assistant"

FieldVarianStatus dukungan
contentstringDidukung penuh
array, type == "text"Didukung penuh
array, type == "refusal"Diabaikan
tool_callsDidukung penuh
function_callDidukung penuh
audioDiabaikan
refusalDiabaikan

Role tool

Field untuk messages[n].role == "tool"

FieldVarianStatus dukungan
contentstringDidukung penuh
array, type == "text"Didukung penuh
tool_call_idDidukung penuh
tool_choiceDidukung penuh
nameDiabaikan

Role function

Field untuk messages[n].role == "function"

FieldVarianStatus dukungan
contentstringDidukung penuh
array, type == "text"Didukung penuh
tool_choiceDidukung penuh
nameDiabaikan

Field respons

FieldStatus dukungan
idDidukung penuh
choices[]Akan selalu memiliki panjang 1
choices[].finish_reasonDidukung penuh
choices[].indexDidukung penuh
choices[].message.roleDidukung penuh
choices[].message.contentDidukung penuh
choices[].message.tool_callsDidukung penuh
objectDidukung penuh
createdDidukung penuh
modelDidukung penuh
finish_reasonDidukung penuh
contentDidukung penuh
usage.completion_tokensDidukung penuh
usage.prompt_tokensDidukung penuh
usage.total_tokensDidukung penuh
usage.completion_tokens_detailsSelalu kosong
usage.prompt_tokens_detailsSelalu kosong
choices[].message.refusalSelalu kosong
choices[].message.audioSelalu kosong
logprobsSelalu kosong
service_tierSelalu kosong
system_fingerprintSelalu 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.

HeaderStatus Dukungan
x-ratelimit-limit-requestsDidukung penuh
x-ratelimit-limit-tokensDidukung penuh
x-ratelimit-remaining-requestsDidukung penuh
x-ratelimit-remaining-tokensDidukung penuh
x-ratelimit-reset-requestsDidukung penuh
x-ratelimit-reset-tokensDidukung penuh
retry-afterDidukung penuh
request-idDidukung penuh
openai-versionSelalu 2020-10-01
authorizationDidukung penuh
openai-processing-msSelalu kosong
On this page
Memulai dengan OpenAI SDKContoh mulai cepatKeterbatasan penting kompatibilitas OpenAIPerilaku APIPertimbangan kualitas outputPengangkatan pesan system / developerDukungan thinkingBatas lajuDukungan API kompatibel OpenAI secara terperinciField permintaanField sederhanaField tools / functionsTampilkan fieldField array messagesTampilkan fieldField responsKompatibilitas pesan errorKompatibilitas header