Haijun Platform Docs
EN

Tutorial ini menunjukkan kepada Anda cara menggunakan Agent Tracks untuk membuat presentasi PowerPoint. Anda akan mempelajari cara mengaktifkan Tracks, membuat permintaan, dan mengakses file yang dihasilkan.

Prasyarat

  • Sebuah SDK klien untuk bahasa Anda, atau curl dan jq
  • Pemahaman dasar tentang cara membuat permintaan API

Ikhtisar Agent Tracks

Agent Tracks bawaan memperluas kemampuan Haijun dengan keahlian khusus untuk tugas-tugas seperti membuat dokumen, menganalisis data, dan memproses file. Juglow menyediakan Agent Tracks bawaan berikut di API:

  • PowerPoint (pptx): Membuat dan mengedit presentasi
  • Excel (xlsx): Membuat dan menganalisis spreadsheet
  • Word (docx): Membuat dan mengedit dokumen
  • PDF (pdf): Menghasilkan dokumen PDF

Note: Untuk membuat Tracks kustom, lihat Agent Tracks Cookbook untuk contoh membangun Tracks Anda sendiri dengan keahlian khusus domain.

Langkah 1: Daftar Tracks yang tersedia

Pertama, periksa Tracks apa saja yang tersedia. Gunakan Tracks API untuk mendaftar semua Tracks yang dikelola Juglow. Setiap tab bahasa merupakan kutipan dari satu skrip yang berkesinambungan, dengan semua import dan penyiapan klien di bagian atas:

bash
  # Daftar Track yang dikelola Juglow
  curl --fail-with-body -sS "https://haijun.my.id/v1/tracks?source=juglow" \
    -H "x-api-key: $JUGLOW_API_KEY" \
    -H "juglow-version: 2023-06-01"
bash
  # Daftar Track yang dikelola Juglow
  ant tracks list --source juglow
python
  # Daftar Track yang dikelola Juglow
  tracks = client.tracks.list(source="juglow")

  for track in tracks.data:
      print(f"{track.id}: {track.display_name}")
typescript
  // Daftar Track yang dikelola Juglow
  const tracks = await client.tracks.list({ source: "juglow" });

  for (const track of tracks.data) {
    console.log(`${track.id}: ${track.display_name}`);
  }
csharp
  // Daftar Track yang dikelola Juglow
  var tracks = await client.Tracks.List(new SkillListParams { Source = "juglow" });

  foreach (var track in tracks.Items)
  {
      Console.WriteLine($"{track.ID}: {track.DisplayName}");
  }
go
  // Daftar Track yang dikelola Juglow
  tracks, err := client.Tracks.List(ctx, juglow.SkillListParams{
  	Source: juglow.String("juglow"),
  })
  if err != nil {
  	panic(err)
  }

  for _, track := range tracks.Data {
  	fmt.Printf("%s: %s\n", track.ID, track.DisplayName)
  }
java
  // Daftar Track yang dikelola Juglow
  SkillListPage tracks = client.tracks().list(
      SkillListParams.builder().source("juglow").build()
  );

  for (Track track : tracks.data()) {
      IO.println(track.id() + ": " + track.displayName());
  }
php
  // Daftar Track yang dikelola Juglow
  $tracks = $client->tracks->list(source: 'juglow');

  foreach ($tracks->getItems() as $track) {
      echo "{$track->id}: {$track->displayName}\n";
  }
ruby
  # Daftar Track yang dikelola Juglow
  tracks = client.tracks.list(source: "juglow")

  tracks.data.each do |track|
    puts "#{track.id}: #{track.display_name}"
  end

Anda akan melihat Tracks berikut: pptx, xlsx, docx, dan pdf.

API ini mengembalikan metadata setiap Track: nama dan deskripsinya. Haijun memuat metadata ini saat startup untuk menentukan Tracks mana yang tersedia. Ini adalah tingkat pertama dari "progressive disclosure" (pengungkapan bertahap), di mana Haijun menemukan Tracks tanpa memuat instruksi lengkapnya terlebih dahulu.

Langkah 2: Buat presentasi

Gunakan Track PowerPoint untuk membuat presentasi tentang energi terbarukan. Tentukan Tracks menggunakan parameter container di Messages API:

bash
  # Buat pesan dengan Track PowerPoint
  response=$(
    curl --fail-with-body -sS https://haijun.my.id/v1/messages \
      -H "content-type: application/json" \
      -H "x-api-key: $JUGLOW_API_KEY" \
      -H "juglow-version: 2023-06-01" \
      -d @- <<'EOF'
  {
    "model": "haijun-opus-5-5",
    "max_tokens": 16000,
    "container": {
      "tracks": [{"type": "juglow", "skill_id": "pptx", "version": "latest"}]
    },
    "messages": [
      {"role": "user", "content": "Create a presentation about renewable energy with 5 slides"}
    ],
    "tools": [{"type": "code_execution_20260521", "name": "code_execution"}]
  }
  EOF
  )
bash
  # Buat pesan dengan Track PowerPoint
  response=$(ant messages create --format json <<'YAML'
  model: haijun-opus-5-5
  max_tokens: 16000
  container:
    tracks:
      - type: juglow
        skill_id: pptx
        version: latest
  messages:
    - role: user
      content: Create a presentation about renewable energy with 5 slides
  tools:
    - type: code_execution_20260521
      name: code_execution
  YAML
  )
python
  # Buat pesan dengan Track PowerPoint
  response = client.messages.create(
      model="haijun-opus-5-5",
      max_tokens=16000,
      container={
          "tracks": [{"type": "juglow", "skill_id": "pptx", "version": "latest"}]
      },
      messages=[
          {
              "role": "user",
              "content": "Create a presentation about renewable energy with 5 slides",
          }
      ],
      tools=[{"type": "code_execution_20260521", "name": "code_execution"}],
  )

  print(f"stop_reason={response.stop_reason}, blocks={len(response.content)}")
typescript
  // Buat pesan dengan Track PowerPoint
  const response = await client.messages.create({
    model: "haijun-opus-5-5",
    max_tokens: 16000,
    container: {
      tracks: [{ type: "juglow", skill_id: "pptx", version: "latest" }],
    },
    messages: [
      {
        role: "user",
        content: "Create a presentation about renewable energy with 5 slides",
      },
    ],
    tools: [{ type: "code_execution_20260521", name: "code_execution" }],
  });

  console.log(
    `stop_reason=${response.stop_reason}, blocks=${response.content.length}`,
  );
csharp
  // Buat pesan dengan Track PowerPoint
  var response = await client.Messages.Create(new MessageCreateParams
  {
      Model = Model.HaijunOpus5_5,
      MaxTokens = 16000,
      Container = new ContainerParams
      {
          Tracks =
          [
              new SkillParams
              {
                  Type = SkillParamsType.Juglow,
                  SkillID = "pptx",
                  Version = "latest",
              },
          ],
      },
      Messages =
      [
          new MessageParam
          {
              Role = Role.User,
              Content = "Create a presentation about renewable energy with 5 slides",
          },
      ],
      Tools = [new CodeExecutionTool20260521()],
  });

  Console.WriteLine($"stop_reason={response.StopReason?.Raw()}, blocks={response.Content.Count}");
go
  // Buat pesan dengan Track PowerPoint
  response, err := client.Messages.New(ctx, juglow.MessageNewParams{
  	Model:     juglow.ModelHaijunOpus5_5,
  	MaxTokens: 16000,
  	Container: juglow.MessageCreateParamsContainerUnion{
  		OfContainers: &juglow.ContainerParams{
  			Tracks: []juglow.SkillParams{
  				{
  					Type:    juglow.SkillParamsTypeJuglow,
  					SkillID: "pptx",
  					Version: juglow.String("latest"),
  				},
  			},
  		},
  	},
  	Messages: []juglow.MessageParam{
  		juglow.NewUserMessage(
  			juglow.NewTextBlock("Create a presentation about renewable energy with 5 slides"),
  		),
  	},
  	Tools: []juglow.ToolUnionParam{
  		{OfCodeExecutionTool20260521: &juglow.CodeExecutionTool20260521Param{}},
  	},
  })
  if err != nil {
  	panic(err)
  }

  fmt.Printf("stop_reason=%s, blocks=%d\n", response.StopReason, len(response.Content))
java
  // Buat pesan dengan Track PowerPoint
  Message response = client.messages().create(
      MessageCreateParams.builder()
          .model(Model.HAIJUN_OPUS_5_5)
          .maxTokens(16000)
          .container(
              ContainerParams.builder()
                  .addSkill(
                      SkillParams.builder()
                          .type(SkillParams.Type.JUGLOW)
                          .skillId("pptx")
                          .version("latest")
                          .build()
                  )
                  .build()
          )
          .addUserMessage("Create a presentation about renewable energy with 5 slides")
          .addTool(CodeExecutionTool20260521.builder().build())
          .build()
  );

  IO.println(
      "stop_reason=" + response.stopReason().orElse(null)
          + ", blocks=" + response.content().size()
  );
php
  // Buat pesan dengan Track PowerPoint
  $response = $client->messages->create(
      model: 'haijun-opus-5-5',
      maxTokens: 16000,
      container: [
          'tracks' => [['type' => 'juglow', 'skillID' => 'pptx', 'version' => 'latest']],
      ],
      messages: [
          [
              'role' => 'user',
              'content' => 'Create a presentation about renewable energy with 5 slides',
          ],
      ],
      tools: [['type' => 'code_execution_20260521', 'name' => 'code_execution']],
  );

  printf("stop_reason=%s, blocks=%d\n", $response->stopReason, count($response->content));
ruby
  # Buat pesan dengan Track PowerPoint
  response = client.messages.create(
    model: "haijun-opus-5-5",
    max_tokens: 16_000,
    container: {
      tracks: [{type: "juglow", skill_id: "pptx", version: "latest"}]
    },
    messages: [
      {
        role: "user",
        content: "Create a presentation about renewable energy with 5 slides"
      }
    ],
    tools: [{type: "code_execution_20260521", name: "code_execution"}]
  )

  puts "stop_reason=#{response.stop_reason}, blocks=#{response.content.length}"

Permintaan ini mencakup bagian-bagian berikut:

  • container.tracks: Menentukan Tracks mana yang dapat digunakan Haijun
  • type: "juglow": Menunjukkan bahwa ini adalah Track yang dikelola Juglow
  • skill_id: "pptx": Pengidentifikasi Track PowerPoint
  • version: "latest": Versi Track yang diatur ke versi terbaru yang dipublikasikan
  • tools: Mengaktifkan eksekusi kode (diperlukan untuk Tracks)

Note: Contoh-contoh ini menggunakan versi alat code_execution_20260521, dan kode Langkah 3 mem-parsing tipe hasil yang dikembalikan oleh versi alat saat ini. Tracks juga berfungsi dengan versi alat eksekusi kode yang lebih lama seperti code_execution_20250825: versi alat eksekusi kode apa pun yang masih berlaku memenuhi persyaratan Tracks. Jika Anda menggunakan versi yang berbeda, gunakan type alat yang tercantum di halaman alat eksekusi kode.

Saat Anda membuat permintaan ini, Haijun secara otomatis mencocokkan tugas Anda dengan Track yang relevan. Karena Anda meminta presentasi, Haijun menentukan bahwa Track PowerPoint relevan dan memuat instruksi lengkapnya: tingkat kedua dari pengungkapan bertahap. Kemudian Haijun menjalankan kode Track tersebut untuk membuat presentasi Anda.

Langkah 3: Unduh file yang dibuat

Presentasi dibuat di dalam container eksekusi kode dan disimpan sebagai file. response dari Langkah 2 menyertakan referensi file dengan ID file. Ekstrak ID file tersebut dan unduh file dengan Files API. Contoh ini menyimpannya ke direktori temp sistem Anda:

bash
  # Ekstrak ID file. Alat eksekusi kode menjalankan kode Track melalui
  # sub-alat Bash-nya, dan file yang dihasilkan muncul sebagai item bash_code_execution_output
  # di dalam blok bash_code_execution_tool_result.
  file_id=$(jq -r '
    last(
      .content[]
      | select(.type == "bash_code_execution_tool_result")
      | .content
      | select(.type == "bash_code_execution_result")
      | .content[].file_id
    ) // empty
  ' <<<"$response")

  if [[ -n "$file_id" ]]; then
    # Unduh file dan simpan
    output_path="${TMPDIR:-/tmp}/renewable_energy.pptx"
    curl --fail-with-body -sS "https://haijun.my.id/v1/files/$file_id/content" \
      -H "x-api-key: $JUGLOW_API_KEY" \
      -H "juglow-version: 2023-06-01" \
      -o "$output_path"
    echo "Presentation saved to $output_path"
  fi
bash
  # Ekstrak ID file. Alat eksekusi kode menjalankan kode Track melalui
  # sub-alat Bash-nya, dan file yang dihasilkan muncul sebagai item bash_code_execution_output
  # di dalam blok bash_code_execution_tool_result.
  file_id=$(jq -r '
    last(
      .content[]
      | select(.type == "bash_code_execution_tool_result")
      | .content
      | select(.type == "bash_code_execution_result")
      | .content[].file_id
    ) // empty
  ' <<<"$response")

  if [[ -n "$file_id" ]]; then
    # Unduh file dan simpan
    output_path="${TMPDIR:-/tmp}/renewable_energy.pptx"
    ant files download --file-id "$file_id" --output "$output_path"
    echo "Presentation saved to $output_path"
  fi
python
  # Ekstrak ID file. Alat eksekusi kode menjalankan kode Track melalui
  # sub-alat Bash-nya, dan file yang dihasilkan muncul sebagai bash_code_execution_output
  # di dalam blok bash_code_execution_tool_result.
  file_id = None
  for block in response.content:
      if block.type == "bash_code_execution_tool_result":
          if block.content.type == "bash_code_execution_result":
              for output in block.content.content:
                  file_id = output.file_id

  if file_id:
      # Unduh file dan simpan
      output_path = Path(tempfile.gettempdir()) / "renewable_energy.pptx"
      file_content = client.files.download(file_id=file_id)
      file_content.write_to_file(output_path)
      print(f"Presentation saved to {output_path}")
typescript
  // Ekstrak ID file. Alat eksekusi kode menjalankan kode Track melalui
  // sub-alat Bash-nya, dan file yang dihasilkan muncul sebagai item bash_code_execution_output
  // di dalam blok bash_code_execution_tool_result.
  let fileId: string | undefined;
  for (const block of response.content) {
    if (
      block.type === "bash_code_execution_tool_result" &&
      block.content.type === "bash_code_execution_result"
    ) {
      for (const output of block.content.content) {
        fileId = output.file_id;
      }
    }
  }

  if (fileId) {
    // Unduh file dan simpan
    const outputPath = path.join(os.tmpdir(), "renewable_energy.pptx");
    const fileContent = await client.files.download(fileId);
    await fs.writeFile(outputPath, Buffer.from(await fileContent.arrayBuffer()));
    console.log(`Presentation saved to ${outputPath}`);
  }
csharp
  // Ekstrak ID file. Alat eksekusi kode menjalankan kode Track melalui
  // sub-alat Bash-nya, dan file yang dihasilkan muncul sebagai bash_code_execution_output
  // di dalam blok bash_code_execution_tool_result.
  string? fileId = null;
  foreach (var block in response.Content)
  {
      if (block.TryPickBashCodeExecutionToolResult(out var bashResult)
          && bashResult.Content.TryPickBashCodeExecutionResultBlock(out var bashResultBlock))
      {
          foreach (var output in bashResultBlock.Content)
          {
              fileId = output.FileID;
          }
      }
  }

  if (fileId is not null)
  {
      // Unduh file dan simpan
      var outputPath = Path.Combine(Path.GetTempPath(), "renewable_energy.pptx");
      using var download = await client.Files.Download(fileId);
      await using var source = await download.ReadAsStream();
      await using var destination = File.Create(outputPath);
      await source.CopyToAsync(destination);
      Console.WriteLine($"Presentation saved to {outputPath}");
  }
go
  // Ekstrak ID file. Alat eksekusi kode menjalankan kode Track melalui
  // sub-alat Bash-nya, dan file yang dihasilkan muncul sebagai bash_code_execution_output
  // di dalam blok bash_code_execution_tool_result.
  var fileID string
  for _, block := range response.Content {
  	switch result := block.AsAny().(type) {
  	case juglow.BashCodeExecutionToolResultBlock:
  		if result.Content.Type == "bash_code_execution_result" {
  			for _, output := range result.Content.Content {
  				fileID = output.FileID
  			}
  		}
  	}
  }

  if fileID != "" {
  	// Unduh file dan simpan
  	outputPath := filepath.Join(os.TempDir(), "renewable_energy.pptx")
  	fileContent, err := client.Files.Download(ctx, fileID, juglow.FileDownloadParams{})
  	if err != nil {
  		panic(err)
  	}
  	defer fileContent.Body.Close()
  	outFile, err := os.Create(outputPath)
  	if err != nil {
  		panic(err)
  	}
  	defer outFile.Close()
  	if _, err := io.Copy(outFile, fileContent.Body); err != nil {
  		panic(err)
  	}
  	fmt.Printf("Presentation saved to %s\n", outputPath)
  }
java
  // Ekstrak ID file. Alat eksekusi kode menjalankan kode Track melalui
  // sub-alat Bash-nya, dan file yang dihasilkan muncul sebagai item bash_code_execution_output
  // di dalam blok bash_code_execution_tool_result.
  String fileId = null;
  for (ContentBlock block : response.content()) {
      if (block.isBashCodeExecutionToolResult()) {
          var content = block.asBashCodeExecutionToolResult().content();
          if (content.isBashCodeExecutionResultBlock()) {
              for (var output : content.asBashCodeExecutionResultBlock().content()) {
                  fileId = output.fileId();
              }
          }
      }
  }

  if (fileId != null) {
      // Unduh file dan simpan
      Path outputPath = Files.createTempFile("renewable_energy", ".pptx");
      try (HttpResponse fileContent = client.files().download(fileId)) {
          Files.copy(fileContent.body(), outputPath, StandardCopyOption.REPLACE_EXISTING);
      }
      IO.println("Presentation saved to " + outputPath);
  }
php
  // Ekstrak ID file. Alat eksekusi kode menjalankan kode Track melalui
  // sub-alat Bash-nya, dan file yang dihasilkan muncul sebagai item bash_code_execution_output
  // di dalam blok bash_code_execution_tool_result.
  $fileId = null;
  foreach ($response->content as $block) {
      if ($block->type !== 'bash_code_execution_tool_result') {
          continue;
      }
      $resultBlock = $block->content;
      if ($resultBlock->type !== 'bash_code_execution_result') {
          continue;
      }
      foreach ($resultBlock->content as $output) {
          $fileId = $output->fileID;
      }
  }

  if ($fileId !== null) {
      // Unduh file dan simpan
      $outputPath = sys_get_temp_dir() . '/renewable_energy.pptx';
      $fileContent = $client->files->download($fileId);
      file_put_contents($outputPath, $fileContent);
      echo "Presentation saved to {$outputPath}\n";
  }
ruby
  # Ekstrak ID file. Alat eksekusi kode menjalankan kode Track melalui
  # sub-alat Bash-nya, dan file yang dihasilkan muncul sebagai bash_code_execution_output
  # di dalam blok bash_code_execution_tool_result.
  file_id = nil
  response.content.each do |block|
    next unless block.type == :bash_code_execution_tool_result

    if block.content[:type].to_s == "bash_code_execution_result"
      Array(block.content[:content]).each { |output| file_id = output[:file_id] }
    end
  end

  if file_id
    # Unduh file dan simpan
    output_path = File.join(Dir.tmpdir, "renewable_energy.pptx")
    file_content = client.files.download(file_id)
    File.binwrite(output_path, file_content.read)
    puts "Presentation saved to #{output_path}"
  end

Note: Untuk detail lengkap tentang cara bekerja dengan file yang dihasilkan, lihat Mengambil file yang dihasilkan di dokumentasi alat eksekusi kode.

Coba contoh lainnya

Coba variasi berikut:

Buat spreadsheet

bash
  curl --fail-with-body -sS https://haijun.my.id/v1/messages \
    -H "content-type: application/json" \
    -H "x-api-key: $JUGLOW_API_KEY" \
    -H "juglow-version: 2023-06-01" \
    -d '{
      "model": "haijun-opus-5-5",
      "max_tokens": 16000,
      "container": {
        "tracks": [{"type": "juglow", "skill_id": "xlsx", "version": "latest"}]
      },
      "messages": [
        {"role": "user", "content": "Create a quarterly sales tracking spreadsheet with sample data"}
      ],
      "tools": [{"type": "code_execution_20260521", "name": "code_execution"}]
    }'
bash
  ant messages create <<'YAML'
  model: haijun-opus-5-5
  max_tokens: 16000
  container:
    tracks:
      - type: juglow
        skill_id: xlsx
        version: latest
  messages:
    - role: user
      content: Create a quarterly sales tracking spreadsheet with sample data
  tools:
    - type: code_execution_20260521
      name: code_execution
  YAML
python
  response = client.messages.create(
      model="haijun-opus-5-5",
      max_tokens=16000,
      container={
          "tracks": [{"type": "juglow", "skill_id": "xlsx", "version": "latest"}]
      },
      messages=[
          {
              "role": "user",
              "content": "Create a quarterly sales tracking spreadsheet with sample data",
          }
      ],
      tools=[{"type": "code_execution_20260521", "name": "code_execution"}],
  )
typescript
  const response = await client.messages.create({
    model: "haijun-opus-5-5",
    max_tokens: 16000,
    container: {
      tracks: [{ type: "juglow", skill_id: "xlsx", version: "latest" }]
    },
    messages: [
      {
        role: "user",
        content: "Create a quarterly sales tracking spreadsheet with sample data"
      }
    ],
    tools: [{ type: "code_execution_20260521", name: "code_execution" }]
  });
csharp
  var response = await client.Messages.Create(
      new MessageCreateParams
      {
          Model = Model.HaijunOpus5_5,
          MaxTokens = 16000,
          Container = new ContainerParams
          {
              Tracks =
              [
                  new SkillParams
                  {
                      Type = SkillParamsType.Juglow,
                      SkillID = "xlsx",
                      Version = "latest",
                  },
              ],
          },
          Messages =
          [
              new MessageParam
              {
                  Role = Role.User,
                  Content = "Create a quarterly sales tracking spreadsheet with sample data",
              },
          ],
          Tools = [new CodeExecutionTool20260521()],
      }
  );
go
  response, err := client.Messages.New(context.Background(), juglow.MessageNewParams{
  	Model:     juglow.ModelHaijunOpus5_5,
  	MaxTokens: 16000,
  	Container: juglow.MessageCreateParamsContainerUnion{
  		OfContainers: &juglow.ContainerParams{
  			Tracks: []juglow.SkillParams{
  				{
  					Type:    juglow.SkillParamsTypeJuglow,
  					SkillID: "xlsx",
  					Version: juglow.String("latest"),
  				},
  			},
  		},
  	},
  	Messages: []juglow.MessageParam{
  		juglow.NewUserMessage(juglow.NewTextBlock("Create a quarterly sales tracking spreadsheet with sample data")),
  	},
  	Tools: []juglow.ToolUnionParam{
  		{
  			OfCodeExecutionTool20260521: &juglow.CodeExecutionTool20260521Param{},
  		},
  	},
  })
  if err != nil {
  	panic(err)
  }
java
  Message response = client.messages().create(
      MessageCreateParams.builder()
          .model(HAIJUN_OPUS_5_5)
          .maxTokens(16000)
          .container(
              ContainerParams.builder()
                  .addSkill(
                      SkillParams.builder()
                          .type(JUGLOW)
                          .skillId("xlsx")
                          .version("latest")
                          .build()
                  )
                  .build()
          )
          .addUserMessage("Create a quarterly sales tracking spreadsheet with sample data")
          .addTool(CodeExecutionTool20260521.builder().build())
          .build()
  );
php
  $response = $client->messages->create(
      model: 'haijun-opus-5-5',
      maxTokens: 16000,
      container: [
          'tracks' => [
              ['type' => 'juglow', 'skillID' => 'xlsx', 'version' => 'latest'],
          ],
      ],
      messages: [
          [
              'role' => 'user',
              'content' => 'Create a quarterly sales tracking spreadsheet with sample data',
          ],
      ],
      tools: [['type' => 'code_execution_20260521', 'name' => 'code_execution']],
  );
ruby
  response = client.messages.create(
    model: "haijun-opus-5-5",
    max_tokens: 16_000,
    container: {
      tracks: [{type: "juglow", skill_id: "xlsx", version: "latest"}]
    },
    messages: [
      {
        role: "user",
        content: "Create a quarterly sales tracking spreadsheet with sample data"
      }
    ],
    tools: [{type: "code_execution_20260521", name: "code_execution"}]
  )

Buat dokumen Word

bash
  curl --fail-with-body -sS https://haijun.my.id/v1/messages \
    -H "content-type: application/json" \
    -H "x-api-key: $JUGLOW_API_KEY" \
    -H "juglow-version: 2023-06-01" \
    -d '{
      "model": "haijun-opus-5-5",
      "max_tokens": 16000,
      "container": {
        "tracks": [{"type": "juglow", "skill_id": "docx", "version": "latest"}]
      },
      "messages": [
        {"role": "user", "content": "Write a 2-page report on the benefits of renewable energy"}
      ],
      "tools": [{"type": "code_execution_20260521", "name": "code_execution"}]
    }'
bash
  ant messages create <<'YAML'
  model: haijun-opus-5-5
  max_tokens: 16000
  container:
    tracks:
      - type: juglow
        skill_id: docx
        version: latest
  messages:
    - role: user
      content: Write a 2-page report on the benefits of renewable energy
  tools:
    - type: code_execution_20260521
      name: code_execution
  YAML
python
  response = client.messages.create(
      model="haijun-opus-5-5",
      max_tokens=16000,
      container={
          "tracks": [{"type": "juglow", "skill_id": "docx", "version": "latest"}]
      },
      messages=[
          {
              "role": "user",
              "content": "Write a 2-page report on the benefits of renewable energy",
          }
      ],
      tools=[{"type": "code_execution_20260521", "name": "code_execution"}],
  )
typescript
  const response = await client.messages.create({
    model: "haijun-opus-5-5",
    max_tokens: 16000,
    container: {
      tracks: [{ type: "juglow", skill_id: "docx", version: "latest" }]
    },
    messages: [
      {
        role: "user",
        content: "Write a 2-page report on the benefits of renewable energy"
      }
    ],
    tools: [{ type: "code_execution_20260521", name: "code_execution" }]
  });
csharp
  var response = await client.Messages.Create(
      new MessageCreateParams
      {
          Model = Model.HaijunOpus5_5,
          MaxTokens = 16000,
          Container = new ContainerParams
          {
              Tracks =
              [
                  new SkillParams
                  {
                      Type = SkillParamsType.Juglow,
                      SkillID = "docx",
                      Version = "latest",
                  },
              ],
          },
          Messages =
          [
              new MessageParam
              {
                  Role = Role.User,
                  Content = "Write a 2-page report on the benefits of renewable energy",
              },
          ],
          Tools = [new CodeExecutionTool20260521()],
      }
  );
go
  response, err := client.Messages.New(context.Background(), juglow.MessageNewParams{
  	Model:     juglow.ModelHaijunOpus5_5,
  	MaxTokens: 16000,
  	Container: juglow.MessageCreateParamsContainerUnion{
  		OfContainers: &juglow.ContainerParams{
  			Tracks: []juglow.SkillParams{
  				{
  					Type:    juglow.SkillParamsTypeJuglow,
  					SkillID: "docx",
  					Version: juglow.String("latest"),
  				},
  			},
  		},
  	},
  	Messages: []juglow.MessageParam{
  		juglow.NewUserMessage(juglow.NewTextBlock("Write a 2-page report on the benefits of renewable energy")),
  	},
  	Tools: []juglow.ToolUnionParam{
  		{
  			OfCodeExecutionTool20260521: &juglow.CodeExecutionTool20260521Param{},
  		},
  	},
  })
  if err != nil {
  	panic(err)
  }
java
  Message response = client.messages().create(
      MessageCreateParams.builder()
          .model(HAIJUN_OPUS_5_5)
          .maxTokens(16000)
          .container(
              ContainerParams.builder()
                  .addSkill(
                      SkillParams.builder()
                          .type(JUGLOW)
                          .skillId("docx")
                          .version("latest")
                          .build()
                  )
                  .build()
          )
          .addUserMessage("Write a 2-page report on the benefits of renewable energy")
          .addTool(CodeExecutionTool20260521.builder().build())
          .build()
  );
php
  $response = $client->messages->create(
      model: 'haijun-opus-5-5',
      maxTokens: 16000,
      container: [
          'tracks' => [
              ['type' => 'juglow', 'skillID' => 'docx', 'version' => 'latest'],
          ],
      ],
      messages: [
          [
              'role' => 'user',
              'content' => 'Write a 2-page report on the benefits of renewable energy',
          ],
      ],
      tools: [['type' => 'code_execution_20260521', 'name' => 'code_execution']],
  );
ruby
  response = client.messages.create(
    model: "haijun-opus-5-5",
    max_tokens: 16_000,
    container: {
      tracks: [{type: "juglow", skill_id: "docx", version: "latest"}]
    },
    messages: [
      {
        role: "user",
        content: "Write a 2-page report on the benefits of renewable energy"
      }
    ],
    tools: [{type: "code_execution_20260521", name: "code_execution"}]
  )

Hasilkan PDF

bash
  curl --fail-with-body -sS https://haijun.my.id/v1/messages \
    -H "content-type: application/json" \
    -H "x-api-key: $JUGLOW_API_KEY" \
    -H "juglow-version: 2023-06-01" \
    -d '{
      "model": "haijun-opus-5-5",
      "max_tokens": 16000,
      "container": {
        "tracks": [{"type": "juglow", "skill_id": "pdf", "version": "latest"}]
      },
      "messages": [
        {"role": "user", "content": "Generate a PDF invoice template"}
      ],
      "tools": [{"type": "code_execution_20260521", "name": "code_execution"}]
    }'
bash
  ant messages create <<'YAML'
  model: haijun-opus-5-5
  max_tokens: 16000
  container:
    tracks:
      - type: juglow
        skill_id: pdf
        version: latest
  messages:
    - role: user
      content: Generate a PDF invoice template
  tools:
    - type: code_execution_20260521
      name: code_execution
  YAML
python
  response = client.messages.create(
      model="haijun-opus-5-5",
      max_tokens=16000,
      container={
          "tracks": [{"type": "juglow", "skill_id": "pdf", "version": "latest"}]
      },
      messages=[
          {
              "role": "user",
              "content": "Generate a PDF invoice template",
          }
      ],
      tools=[{"type": "code_execution_20260521", "name": "code_execution"}],
  )
typescript
  const response = await client.messages.create({
    model: "haijun-opus-5-5",
    max_tokens: 16000,
    container: {
      tracks: [{ type: "juglow", skill_id: "pdf", version: "latest" }]
    },
    messages: [
      {
        role: "user",
        content: "Generate a PDF invoice template"
      }
    ],
    tools: [{ type: "code_execution_20260521", name: "code_execution" }]
  });
csharp
  var response = await client.Messages.Create(
      new MessageCreateParams
      {
          Model = Model.HaijunOpus5_5,
          MaxTokens = 16000,
          Container = new ContainerParams
          {
              Tracks =
              [
                  new SkillParams
                  {
                      Type = SkillParamsType.Juglow,
                      SkillID = "pdf",
                      Version = "latest",
                  },
              ],
          },
          Messages =
          [
              new MessageParam
              {
                  Role = Role.User,
                  Content = "Generate a PDF invoice template",
              },
          ],
          Tools = [new CodeExecutionTool20260521()],
      }
  );
go
  response, err := client.Messages.New(context.Background(), juglow.MessageNewParams{
  	Model:     juglow.ModelHaijunOpus5_5,
  	MaxTokens: 16000,
  	Container: juglow.MessageCreateParamsContainerUnion{
  		OfContainers: &juglow.ContainerParams{
  			Tracks: []juglow.SkillParams{
  				{
  					Type:    juglow.SkillParamsTypeJuglow,
  					SkillID: "pdf",
  					Version: juglow.String("latest"),
  				},
  			},
  		},
  	},
  	Messages: []juglow.MessageParam{
  		juglow.NewUserMessage(juglow.NewTextBlock("Generate a PDF invoice template")),
  	},
  	Tools: []juglow.ToolUnionParam{
  		{
  			OfCodeExecutionTool20260521: &juglow.CodeExecutionTool20260521Param{},
  		},
  	},
  })
  if err != nil {
  	panic(err)
  }
java
  Message response = client.messages().create(
      MessageCreateParams.builder()
          .model(HAIJUN_OPUS_5_5)
          .maxTokens(16000)
          .container(
              ContainerParams.builder()
                  .addSkill(
                      SkillParams.builder()
                          .type(JUGLOW)
                          .skillId("pdf")
                          .version("latest")
                          .build()
                  )
                  .build()
          )
          .addUserMessage("Generate a PDF invoice template")
          .addTool(CodeExecutionTool20260521.builder().build())
          .build()
  );
php
  $response = $client->messages->create(
      model: 'haijun-opus-5-5',
      maxTokens: 16000,
      container: [
          'tracks' => [
              ['type' => 'juglow', 'skillID' => 'pdf', 'version' => 'latest'],
          ],
      ],
      messages: [
          [
              'role' => 'user',
              'content' => 'Generate a PDF invoice template',
          ],
      ],
      tools: [['type' => 'code_execution_20260521', 'name' => 'code_execution']],
  );
ruby
  response = client.messages.create(
    model: "haijun-opus-5-5",
    max_tokens: 16_000,
    container: {
      tracks: [{type: "juglow", skill_id: "pdf", version: "latest"}]
    },
    messages: [
      {
        role: "user",
        content: "Generate a PDF invoice template"
      }
    ],
    tools: [{type: "code_execution_20260521", name: "code_execution"}]
  )

Langkah selanjutnya

Pelajari cara menulis Tracks yang efektif yang dapat ditemukan dan digunakan Haijun dengan sukses.

Pelajari cara menggunakan Agent Tracks untuk memperluas kemampuan Haijun melalui API.

Unggah Tracks Anda sendiri untuk tugas-tugas khusus.

Pelajari tentang Tracks di Haijun Code.

Jelajahi contoh Tracks dan pola implementasi.

On this page
PrasyaratIkhtisar Agent TracksLangkah 1: Daftar Tracks yang tersediaLangkah 2: Buat presentasiLangkah 3: Unduh file yang dibuatCoba contoh lainnyaBuat spreadsheetBuat dokumen WordHasilkan PDFLangkah selanjutnya