---
title: SDK
url: https://runapi.ai/zh-CN/docs/resources/sdks.md
canonical: https://runapi.ai/zh-CN/docs/resources/sdks
locale: zh-CN
---

# SDK

RunAPI SDK 为 JavaScript、Python、PHP、Java、Ruby 和 Go
提供受支持模型族的类型化客户端。请按应用调用的模型族和语言选择对应软件包。

## 安装模型 SDK

安装与语言和模型族匹配的软件包。例如，安装 Suno JavaScript SDK：

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

同一模型族可通过每个受支持运行时的软件包管理器安装：

```shell
pip install runapi-suno
composer require runapi-ai/suno
gem install runapi-suno
go get github.com/runapi-ai/suno-sdk/go@latest
```

Java 可通过 Gradle 或 Maven 添加 Suno 模块：

```kotlin
dependencies {
  implementation("ai.runapi:runapi-suno:0.2.0")
}
```

```xml
<dependency>
  <groupId>ai.runapi</groupId>
  <artifactId>runapi-suno</artifactId>
  <version>0.2.0</version>
</dependency>
```

## 验证客户端

创建客户端前，在环境中设置 `RUNAPI_API_KEY`。SDK 使用 RunAPI API Key，并与 REST 请求和 CLI
工作流使用同一个账户上下文。

```shell
export RUNAPI_API_KEY="runapi_..."
```

请在[身份验证指南](/zh-CN/docs/guides/authentication)中创建和轮换密钥。请将密钥保存在密钥管理服务中，而不是应用源码中。

## 处理异步 Task

许多媒体操作是异步的。使用 `create` 提交 Task 并立即取得 id，使用 `get` 获取当前状态，或使用 `run`
提交后持续轮询，直到 Task 到达终态。在 Web 请求处理程序中，请优先使用 `create` 加 callback 或之后的 `get`
轮询，避免请求持续占用 worker。

### 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()
);
```

## 选择下一步工作流

当应用需要类型化请求构造器和语言原生的 Task 辅助功能时，使用 SDK。对于 shell 自动化、本地检查和 callback 调试，请使用
[RunAPI CLI](/zh-CN/docs/resources/cli)。精确的请求字段、Task 响应与错误请查看 [API
参考](/zh-CN/docs)。
