Moonshot AI チャット

Spring AI は、Moonshot AI のさまざまな AI 言語モデルをサポートしています。Moonshot AI 言語モデルと対話し、Moonshot モデルに基づいて多言語会話アシスタントを作成できます。

前提条件

Moonshot AI 言語モデルにアクセスするには、Moonshot で API を作成する必要があります。Moonshot AI 登録ページ (英語) でアカウントを作成し、API キーページ (英語) でトークンを生成します。Spring AI プロジェクトでは、spring.ai.moonshot.api-key という名前の構成プロパティが定義されており、これを API キーページ (英語) から取得した API Key の値に設定する必要があります。環境変数をエクスポートすることは、その構成プロパティを設定する 1 つの方法です。

export SPRING_AI_MOONSHOT_API_KEY=<INSERT KEY HERE>

リポジトリと BOM の追加

Spring AI アーティファクトは、Spring マイルストーンおよびスナップショットリポジトリで公開されます。これらのリポジトリをビルドシステムに追加するには、リポジトリセクションを参照してください。

依存関係の管理を支援するために、Spring AI は BOM (部品表) を提供し、一貫したバージョンの Spring AI がプロジェクト全体で使用されるようにします。Spring AI BOM をビルドシステムに追加するには、"依存関係管理" セクションを参照してください。

自動構成

Spring AI は、Moonshot チャットモデル用の Spring Boot 自動構成を提供します。これを有効にするには、プロジェクトの Maven pom.xml ファイルに次の依存関係を追加します。

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-moonshot-spring-boot-starter</artifactId>
</dependency>

または、Gradle build.gradle ビルドファイルに保存します。

dependencies {
    implementation 'org.springframework.ai:spring-ai-moonshot-spring-boot-starter'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。

チャットのプロパティ

再試行プロパティ

プレフィックス spring.ai.retry は、Moonshot AI チャットモデルの再試行メカニズムを構成できるプロパティプレフィックスとして使用されます。

プロパティ 説明 デフォルト

spring.ai.retry.max-attempts

再試行の最大回数。

10

spring.ai.retry.backoff.initial-interval

指数関数的バックオフポリシーの初期スリープ期間。

2 秒

spring.ai.retry.backoff.multiplier

バックオフ間隔の乗数。

5

spring.ai.retry.backoff.max-interval

最大バックオフ期間。

3 分

spring.ai.retry.on-client-errors

false の場合、NonTransientAiException をスローし、4xx クライアントエラーコードの再試行を試行しません。

false

spring.ai.retry.exclude-on-http-codes

再試行をトリガーすべきではない HTTP ステータスコードのリスト (NonTransientAiException をスローするなど)。

spring.ai.retry.on-http-codes

再試行をトリガーする必要がある HTTP ステータスコードのリスト (例: TransientAiException をスローする)。

接続プロパティ

接頭辞 spring.ai.moonshot は、Moonshot への接続を可能にするプロパティ接頭辞として使用されます。

プロパティ 説明 デフォルト

spring.ai.moonshot.base-url

接続先の URL

api.moonshot.cn (英語)

spring.ai.moonshot.api-key

API キー

-

プロパティの構成

プレフィックス spring.ai.moonshot.chat は、Moonshot のチャットモデル実装を構成できるプロパティプレフィックスです。

プロパティ 説明 デフォルト

spring.ai.moonshot.chat.enabled

Moonshot チャットモデルを有効にします。

true

spring.ai.moonshot.chat.base-url

オプションで spring.ai.moonshot.base-url をオーバーライドして、チャット固有の URL を提供します

-

spring.ai.moonshot.chat.api-key

オプションで spring.ai.moonshot.api-key をオーバーライドしてチャット固有の API キーを提供します

-

spring.ai.moonshot.chat.options.model

使用するチャットモデルは Moonshot です

moonshot-v1-8k (moonshot-v1-8kmoonshot-v1-32kmoonshot-v1-128k は最新モデルのバージョンを指します)

spring.ai.moonshot.chat.options.maxTokens

チャット補完で生成するトークンの最大数。入力トークンと生成されたトークンの合計の長さは、モデルのコンテキストの長さによって制限されます。

-

spring.ai.moonshot.chat.options.temperature

生成される補完の見かけの創造性を制御するために使用するサンプリング温度。値を高くすると出力がよりランダムになり、値を低くすると結果がより集中的で決定的になります。これら 2 つの設定の相互作用を予測するのは難しいため、同じ完了リクエストに対して温度と top_p を変更することはお勧めできません。

0.7

spring.ai.moonshot.chat.options.topP

核サンプリングと呼ばれる、温度によるサンプリングの代替方法。モデルは、top_p 確率質量を使用してトークンの結果を考慮します。0.1 は、上位 10% の確率質量を構成するトークンのみが考慮されることを意味します。通常、これまたは温度を変更することをお勧めしますが、両方を変更することは推奨しません。

1.0

spring.ai.moonshot.chat.options.n

各入力メッセージに対して生成するチャット補完の選択肢の数。すべての選択肢で生成されたトークンの数に基づいて課金されることに注意してください。デフォルト値は 1 で、5 を超えることはできません。具体的には、温度が非常に低く 0 に近い場合、1 つの結果しか返せません。この時点で n がすでに設定されていて>1 の場合、サービスは不正な入力パラメーターを返します。(invalid_request_error)

1

spring.ai.moonshot.chat.options.presencePenalty

-2.0 から 2.0 までの数値。正の値を指定すると、これまでにテキストに出現したかどうかに基づいて新しいトークンにペナルティが課され、モデルが新しいトピックについて話す可能性が高まります。

0.0f

spring.ai.moonshot.chat.options.frequencyPenalty

-2.0 から 2.0 までの数値。正の値を指定すると、これまでのテキスト内の既存の頻度に基づいて新しいトークンにペナルティが課され、モデルが同じ行をそのまま繰り返す可能性が低くなります。

0.0f

spring.ai.moonshot.chat.options.stop

API がそれ以上トークンの生成を停止するシーケンスは最大 5 つ。各文字列は 32 バイトを超えてはなりません

-

ChatModel 実装の共通の spring.ai.moonshot.base-url および spring.ai.moonshot.api-key をオーバーライドできます。spring.ai.moonshot.chat.base-url および spring.ai.moonshot.chat.api-key プロパティが設定されている場合は、共通のプロパティよりも優先されます。これは、異なるモデルおよび異なるモデルエンドポイントに異なる Moonshot アカウントを使用する場合に便利です。
spring.ai.moonshot.chat.options というプレフィックスが付いたすべてのプロパティは、リクエスト固有のランタイムオプションを Prompt 呼び出しに追加することで実行時にオーバーライドできます。

ランタイムオプション

MoonshotChatOptions.java [GitHub] (英語) は、使用するモデル、温度、周波数ペナルティなどのモデル構成を提供します。

起動時に、MoonshotChatModel(api, options) コンストラクターまたは spring.ai.moonshot.chat.options.* プロパティを使用してデフォルトのオプションを構成できます。

実行時に、新しいリクエスト固有のオプションを Prompt 呼び出しに追加することで、デフォルトのオプションをオーバーライドできます。たとえば、特定のリクエストのデフォルトのモデルと温度をオーバーライドするには、次のようにします。

ChatResponse response = chatModel.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        MoonshotChatOptions.builder()
            .withModel(MoonshotApi.ChatModel.MOONSHOT_V1_8K.getValue())
            .withTemperature(0.5f)
        .build()
    ));
モデル固有の MoonshotChatOptions [GitHub] (英語) に加えて、ChatOptionsBuilder#builder() [GitHub] (英語) で作成されたポータブル ChatOptions [GitHub] (英語) インスタンスを使用できます。

サンプルコントローラー (自動構成)

新しい Spring Boot プロジェクトを作成し、spring-ai-moonshot-spring-boot-starter を pom (または gradle) の依存関係に追加します。

src/main/resources ディレクトリに application.properties ファイルを追加して、Moonshot チャットモデルを有効にして構成します。

spring.ai.moonshot.api-key=YOUR_API_KEY
spring.ai.moonshot.chat.options.model=moonshot-v1-8k
spring.ai.moonshot.chat.options.temperature=0.7
api-key を Moonshot 資格情報に置き換えます。

これにより、クラスに挿入できる MoonshotChatModel 実装が作成されます。以下は、テキスト生成にチャットモデルを使用する単純な @Controller クラスの例です。

@RestController
public class ChatController {

    private final MoonshotChatModel chatModel;

    @Autowired
    public ChatController(MoonshotChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", chatModel.call(message));
    }

    @GetMapping("/ai/generateStream")
	public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        var prompt = new Prompt(new UserMessage(message));
        return chatModel.stream(prompt);
    }
}

手動構成

MoonshotChatModel [GitHub] (英語) は ChatModel と StreamingChatModel を実装し、低レベル Moonshot API クライアントを使用して Moonshot サービスに接続します。

spring-ai-moonshot 依存関係をプロジェクトの Maven pom.xml ファイルに追加します。

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-moonshot</artifactId>
</dependency>

または、Gradle build.gradle ビルドファイルに保存します。

dependencies {
    implementation 'org.springframework.ai:spring-ai-moonshot'
}
Spring AI BOM をビルドファイルに追加するには、"依存関係管理" セクションを参照してください。

次に、MoonshotChatModel を作成し、テキスト生成に使用します。

var moonshotApi = new MoonshotApi(System.getenv("MOONSHOT_API_KEY"));

var chatModel = new MoonshotChatModel(moonshotApi, MoonshotChatOptions.builder()
                .withModel(MoonshotApi.ChatModel.MOONSHOT_V1_8K.getValue())
                .withTemperature(0.4f)
                .withMaxTokens(200)
                .build());

ChatResponse response = chatModel.call(
    new Prompt("Generate the names of 5 famous pirates."));

// Or with streaming responses
Flux<ChatResponse> streamResponse = chatModel.stream(
    new Prompt("Generate the names of 5 famous pirates."));

MoonshotChatOptions は、チャットリクエストの構成情報を提供します。MoonshotChatOptions.Builder は流れるようなオプションビルダーです。

低レベル Moonshot API クライアント

MoonshotApi [GitHub] (英語) が提供するのは、Moonshot AI API (英語) 用の軽量 Java クライアントです。

API をプログラムで使用する方法の簡単なスニペットを次に示します。

MoonshotApi moonshotApi =
    new MoonshotApi(System.getenv("MOONSHOT_API_KEY"));

ChatCompletionMessage chatCompletionMessage =
    new ChatCompletionMessage("Hello world", Role.USER);

// Sync request
ResponseEntity<ChatCompletion> response = moonshotApi.chatCompletionEntity(
    new ChatCompletionRequest(List.of(chatCompletionMessage), MoonshotApi.ChatModel.MOONSHOT_V1_8K.getValue(), 0.7f, false));

// Streaming request
Flux<ChatCompletionChunk> streamResponse = moonshotApi.chatCompletionStream(
        new ChatCompletionRequest(List.of(chatCompletionMessage), MoonshotApi.ChatModel.MOONSHOT_V1_8K.getValue(), 0.7f, true));

詳細については、MoonshotApi.java [GitHub] (英語) の JavaDoc を参照してください。

MoonshotApi サンプル