---
title: SDK | RunAPI
description: 安裝有類型的 RunAPI SDK，使用 API 金鑰進行身份驗證，並為您的應用程式選擇合適的 Task 生命週期。
url: https://runapi.ai/zh-HK/docs/resources/sdks.md
canonical: https://runapi.ai/zh-HK/docs/resources/sdks
locale: zh-HK
---

> HTML 版本: https://runapi.ai/zh-HK/docs/resources/sdks
> 智能代理網站索引: https://runapi.ai/llms.txt

# SDK

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

## 安裝模型 SDK

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

```shell
npm install @runapi.ai/suno@0.6.0
```

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

```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/go@v0.6.0
```

對於 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_..."
```

在[身份驗證
指南](https://runapi.ai/zh-HK/docs/guides/authentication.md)中建立並輪換金鑰。請將金鑰保存於您的密鑰管理器，
而非應用程式原始碼中。

## 使用檔案與上傳功能

每個 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](https://runapi.ai/zh-HK/docs/resources/files.md)。

## 同步轉錄音訊

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](https://runapi.ai/zh-HK/docs/api/openai-transcription/speech-to-text.md) 了解檔案格式、模型特定欄位及回應格式。

## 使用非同步任務

許多媒體操作均為非同步。使用 `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](https://runapi.ai/zh-HK/docs/resources/cli.md) 進行 Shell 自動化、本地檢查及回呼除錯。如需確切的請求欄位、Task 回應及錯誤，請使用 [API 參考](https://runapi.ai/zh-HK/docs/api/openai/chat-completions.md)。

## 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 指南](https://runapi.ai/zh-HK/docs/guides/task-api/quickstart.md#generate-vidu-q4-videos)。 價格另見 [圖片生成影片價格](https://runapi.ai/zh-HK/models/vidu/q4-image-to-video) · [多參考圖片生成影片價格](https://runapi.ai/zh-HK/models/vidu/q4-reference-to-video)。

---

## RunAPI 的更多內容

- [首頁](https://runapi.ai/zh-HK/.md)
- [模型目錄](https://runapi.ai/zh-HK/models.md)
- [收費](https://runapi.ai/zh-HK/pricing.md)
- [服務商](https://runapi.ai/zh-HK/models)
- [文件](https://runapi.ai/zh-HK/docs/guides)
- [SDK](https://runapi.ai/zh-HK/sdk.md)
- [CLI](https://runapi.ai/zh-HK/cli.md)
- [MCP Server](https://runapi.ai/zh-HK/mcp.md)
- [x402](https://runapi.ai/zh-HK/x402.md)
- [Claude Code 與 Cursor](https://runapi.ai/zh-HK/claude-code-vs-cursor.md)
- [Cursor API 設定](https://runapi.ai/zh-HK/cursor-api-setup.md)
- [RunAPI 與 OpenRouter](https://runapi.ai/zh-HK/openrouter-alternative.md)
- [企業版](https://runapi.ai/zh-HK/contact.md)
- [聯絡](https://runapi.ai/zh-HK/contact.md)
- [條款](https://runapi.ai/zh-HK/terms.md)
- [私隱](https://runapi.ai/zh-HK/privacy.md)
- [智能代理網站索引](https://runapi.ai/llms.txt)

聯絡我們: contact@runapi.ai

## 結構化資料

```json
[
  {
    "@context": "https://schema.org",
    "inLanguage": "zh-HK",
    "@type": "WebSite",
    "name": "RunAPI",
    "url": "https://runapi.ai/zh-HK",
    "potentialAction": {
      "@type": "SearchAction",
      "target": {
        "@type": "EntryPoint",
        "urlTemplate": "https://runapi.ai/zh-HK/models?q={search_term_string}"
      },
      "query-input": "required name=search_term_string"
    }
  },
  {
    "@context": "https://schema.org",
    "inLanguage": "zh-HK",
    "@type": "Organization",
    "name": "RunAPI",
    "url": "https://runapi.ai/zh-HK",
    "logo": {
      "@type": "ImageObject",
      "url": "https://runapi.ai/zh-HKicon.svg"
    },
    "sameAs": [
      "https://github.com/runapi-ai"
    ]
  },
  {
    "@context": "https://schema.org",
    "inLanguage": "zh-HK",
    "@type": "TechArticle",
    "headline": "SDK",
    "description": "安裝有類型的 RunAPI SDK，使用 API 金鑰進行身份驗證，並為您的應用程式選擇合適的 Task 生命週期。",
    "url": "https://runapi.ai/zh-HK/docs/resources/sdks",
    "mainEntityOfPage": "https://runapi.ai/zh-HK/docs/resources/sdks"
  }
]
```
