跳至主要內容
開發者資源
開發者資源

SDK

安裝有類型的 RunAPI SDK,使用 API 金鑰進行身份驗證,並為您的應用程式選擇合適的 Task 生命週期。

RunAPI SDK 為 JavaScript、Python、PHP、Java、Ruby 及 Go 中支援的模型系列提供具類型的客戶端。請選擇適合您應用程式所呼叫模型系列的語言套件。

安裝模型 SDK

安裝符合您的語言及模型系列的套件。例如,安裝 Suno JavaScript SDK:

SHELL
npm install @runapi.ai/[email protected]

每個支援的執行環境均可透過套件管理器使用相同的模型系列:

SHELL
pip install runapi-suno==0.6.0
composer require runapi-ai/suno:0.4.0
gem install runapi-suno --version 0.6.0
go get github.com/runapi-ai/suno-sdk/[email protected]

對於 Java,使用 Gradle 或 Maven 新增 Suno 模組:

KOTLIN
dependencies {
  implementation("ai.runapi:runapi-suno:0.5.0")
}
XML
<dependency>
  <groupId>ai.runapi</groupId>
  <artifactId>runapi-suno</artifactId>
  <version>0.5.0</version>
</dependency>

驗證客戶端

在建立客戶端前,請在環境中設定 RUNAPI_API_KEY。SDK 使用 RunAPI API 金鑰,與您的 REST 請求及 CLI 工作流程共用相同的帳戶上下文。

SHELL
export RUNAPI_API_KEY="runapi_..."

在身份驗證 指南中建立並輪換金鑰。請將金鑰保存於您的密鑰管理器, 而非應用程式原始碼中。

使用檔案與上傳功能

每個 Provider Client 均從其核心套件公開持久的 files 及多部分 uploads 資源。現有的 files.create 方法仍會建立臨時 URL;在 JavaScript、 Java 和 PHP 中使用 files.createFile,在 Python 和 Ruby 中使用 files.create_file,或 在 Go 中使用 Files.CreateFile 來建立持久的 File 物件。

JAVASCRIPT
const file = await client.files.createFile({
  file: new Blob([fileBytes], { type: "application/pdf" }),
  filename: "knowledge.pdf",
  purpose: "user_data",
});

const bytes = await client.files.content(file.id);
await client.files.deleteFile(file.id);

當請求被拆分為 Parts 時,請使用 uploads.create、addPart、complete 及 cancel。Python 和 Ruby 使用 add_part;Go 使用 AddPart。有關限制、REST 範例及完整生命週期,請參閱 Files and Uploads。

同步轉錄音訊

OpenAI Transcription SDK 在同一請求中上傳本地音訊檔案並返回已完成的轉錄結果。JSON 回應格式返回語言原生物件;text、SRT 及 VTT 格式則返回確切的回應字串。

JAVASCRIPT
import { OpenaiTranscriptionClient } from "@runapi.ai/openai-transcription";

const client = new OpenaiTranscriptionClient();
const transcript = await client.speechToText.run({
  file: new Blob([audioBytes], { type: "audio/mpeg" }),
  filename: "interview.mp3",
  response_format: "json",
});

請參閱 Audio Transcription API reference 了解檔案格式、模型特定欄位及回應格式。

使用非同步任務

許多媒體操作均為非同步。使用 create 提交任務並立即獲取其 id,使用 get 獲取其當前狀態,或使用 run 提交並輪詢直至達到終止狀態。在網頁請求處理程序中,建議使用 create 搭配回呼或稍後的 get 輪詢,以避免請求長時間佔用工作進程。

JavaScript

JAVASCRIPT
import { SunoClient } from "@runapi.ai/suno";

const client = new SunoClient();
const result = await client.textToMusic.run({
  model: "suno-v5",
  vocal_mode: "auto_lyrics",
  prompt: "A short piano theme",
});

console.log(result.audios[0].audio_url);

Python

PYTHON
from runapi.suno import SunoClient

client = SunoClient()
result = client.text_to_music.run(
    model="suno-v4.5-plus",
    vocal_mode="auto_lyrics",
    prompt="A short piano theme",
)

print(result.audios[0].audio_url)

PHP

PHP
<?php

use RunApi\Suno\SunoClient;

$client = new SunoClient();
$result = $client->textToMusic->run([
    'model' => 'suno-v5.5',
    'vocal_mode' => 'auto_lyrics',
    'prompt' => 'A short piano theme',
]);

print_r($result->toArray());

Ruby

RUBY
require "runapi/suno"

client = RunApi::Suno::Client.new
result = client.text_to_music.run(
  model: "suno-v4.5-plus",
  vocal_mode: "auto_lyrics",
  prompt: "A short piano theme"
)

puts result.dig("audios", 0, "audio_url")

Go

GO
package main

import (
    "context"
    "fmt"
    "log"
    "os"

    "github.com/runapi-ai/core-sdk/go/option"
    "github.com/runapi-ai/suno-sdk/go/suno"
)

func main() {
    client, err := suno.NewClient(option.WithAPIKey(os.Getenv("RUNAPI_API_KEY")))
    if err != nil {
        log.Fatal(err)
    }

    result, err := client.TextToMusic.Run(context.Background(), suno.TextToMusicParams{
        SunoBaseParams: suno.SunoBaseParams{Model: suno.ModelV45Plus},
        VocalMode: suno.VocalModeAutoLyrics,
        Prompt:    "A short piano theme",
    })
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(result.ID)
}

Java

JAVA
import ai.runapi.suno.SunoClient;
import ai.runapi.suno.types.CompletedTextToMusicResponse;
import ai.runapi.suno.types.TextToMusicModel;
import ai.runapi.suno.types.TextToMusicParams;

SunoClient client = SunoClient.builder()
    .apiKey(System.getenv("RUNAPI_API_KEY"))
    .build();

CompletedTextToMusicResponse result = client.textToMusic().run(
    TextToMusicParams.builder()
        .model(TextToMusicModel.SUNO_V5)
        .vocalMode("auto_lyrics")
        .prompt("A short piano theme")
        .build()
);

重複使用 Style Persona

從公開音訊 URL 建立 Style Persona,然後將返回的 persona.id 與四個支援的音樂操作配合使用。persona_type: "style" 應用可重複使用的流派和情緒特性。這不保證克隆原始錄音的聲音、無損保留其風格,或與原始音訊有任何特定相似度。

JAVASCRIPT
import { SunoClient } from "@runapi.ai/suno";

const client = new SunoClient();
const referenceAudioUrl = "https://cdn.runapi.ai/public/samples/music.mp3";

const sampled = await client.addSamples.run({
  model: "suno-v5",
  audio_url: referenceAudioUrl,
  start_seconds: 0,
  end_seconds: 30,
});
const sourceAudioId = sampled.audios?.[0]?.id;
if (!sourceAudioId) throw new Error("The sample Task did not return an audio ID");

const { persona } = await client.generatePersona.run({
  task_id: sampled.id,
  audio_id: sourceAudioId,
  name: "Studio Style",
  description: "A warm and expressive acoustic pop style.",
});
const textToMusic = await client.textToMusic.run({
  model: "suno-v5",
  vocal_mode: "auto_lyrics",
  prompt: "An uplifting acoustic pop song about a rainy city night",
  persona_id: persona.id,
  persona_type: "style",
});

const coverAudio = await client.coverAudio.run({
  model: "suno-v5",
  upload_url: referenceAudioUrl,
  vocal_mode: "auto_lyrics",
  prompt: "Rework the reference track as acoustic pop",
  persona_id: persona.id,
  persona_type: "style",
});

const createMashup = await client.createMashup.run({
  model: "suno-v5",
  upload_url_list: [
    referenceAudioUrl,
    "https://cdn.runapi.ai/public/samples/audio-2.mp3",
  ],
  vocal_mode: "auto_lyrics",
  prompt: "Blend both tracks into an energetic acoustic pop mashup",
  persona_id: persona.id,
  persona_type: "style",
});

const extendMusic = await client.extendMusic.run({
  model: "suno-v5",
  upload_url: referenceAudioUrl,
  parameter_mode: "custom",
  instrumental: false,
  prompt: "Continue the arrangement with a brighter chorus",
  style: "Acoustic pop with warm piano",
  title: "Brighter Chorus",
  continue_at: 60,
  persona_id: persona.id,
  persona_type: "style",
});

console.log({
  textToMusic: textToMusic.audios[0]?.audio_url,
  coverAudio: coverAudio.audios[0]?.audio_url,
  createMashup: createMashup.audios[0]?.audio_url,
  extendMusic: extendMusic.audios[0]?.audio_url,
});

選擇下一個工作流程

當您的應用程式需要類型化請求構建器及語言原生 Task 輔助工具時,請使用 SDK。使用 RunAPI CLI 進行 Shell 自動化、本地檢查及回呼除錯。如需確切的請求欄位、Task 回應及錯誤,請使用 API 參考。

Vidu Q4

Vidu 軟體包提供圖像到視頻和參考到視頻 具有建立、檢索和非同步任務助理的資源。使用 vidu-q4-image-to-video 或 vidu-q4-reference-to-video 為 相應的資源。軟體包名稱為 @runapi.ai/vidu JavaScript、 runapi-vidu 適用於 Python 和 Ruby、 runapi-ai/vidu 適用於 PHP, ai.runapi:runapi-vidu 適用於 Java 和 github.com/runapi-ai/vidu-sdk/go 適用於 Go。

參考圖片和 MP3 要求見 任務 API 指南。 價格另見 圖片生成影片價格 · 多參考圖片生成影片價格。