Perplexity チャット

Perplexity AI (英語) は、言語モデルとリアルタイム検索機能を統合した独自の AI サービスを提供します。さまざまなモデルを提供し、会話型 AI のストリーミングレスポンスをサポートします。

Spring AI は、既存の OpenAI クライアントを再利用して Perplexity AI と統合します。開始するには、Perplexity API キー (英語) を取得し、ベース URL を構成し、サポートされているモデル (英語) の 1 つを選択する必要があります。

spring ai perplexity integration
Perplexity API は OpenAI API と完全に互換性がありません。Perplexity はリアルタイムの Web 検索結果と言語モデルのレスポンスを組み合わせます。OpenAI とは異なり、Perplexity は toolCalls - function call メカニズムを公開しません。また、現在 Perplexity はマルチモーダルメッセージをサポートしていません。

Spring AI で Perplexity を使用する例については、PerplexityWithOpenAiChatModelIT.java [GitHub] (英語) テストを確認してください。

前提条件

  • API キーを作成する : API キーを作成するには、ここを参照してください。Spring AI プロジェクトの spring.ai.openai.api-key プロパティを使用して設定します。

  • Perplexity ベース URL を設定する spring.ai.openai.base-url プロパティを api.perplexity.ai (英語) に設定します。

  • Perplexity モデルを選択 : モデルを指定するには、spring.ai.openai.chat.model=<model name> プロパティを使用します。使用可能なオプションについては、対応モデル (英語) を参照してください。

  • チャット補完パスを設定する spring.ai.openai.chat.completions-path を /chat/completions に設定します。詳細については、チャット補完 API (英語) を参照してください。

環境変数の設定例:

export SPRING_AI_OPENAI_API_KEY=<INSERT PERPLEXITY API KEY HERE>
export SPRING_AI_OPENAI_BASE_URL=https://api.perplexity.ai
export SPRING_AI_OPENAI_CHAT_MODEL=llama-3.1-sonar-small-128k-online

リポジトリと BOM の追加

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

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

自動構成

Spring AI は、OpenAI チャットクライアント用の Spring Boot 自動構成を提供します。これを有効にするには、プロジェクトの Maven pom.xml または Gradle build.gradle ビルドファイルに次の依存関係を追加します。

  • Maven

  • Gradle

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

チャットのプロパティ

再試行プロパティ

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

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

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.openai は、OpenAI への接続を可能にするプロパティ接頭辞として使用されます。

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

spring.ai.openai.base-url

接続先の URL。api.perplexity.ai (英語) に設定する必要があります

-

spring.ai.openai.chat.api-key

Perplexity API キー

-

プロパティの構成

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

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

spring.ai.openai.chat.model

サポートされている Perplexity モデル (英語) の 1 つ。例: llama-3.1-sonar-small-128k-online

-

spring.ai.openai.chat.base-url

オプションで spring.ai.openai.base-url をオーバーライドしてチャット固有の URL を提供します。api.perplexity.ai (英語) に設定する必要があります

-

spring.ai.openai.chat.completions-path

/chat/completions に設定する必要があります

/v1/chat/completions

spring.ai.openai.chat.options.temperature

レスポンスのランダム性の量。値は 0 以上 2 以下です。値が高いほどランダム性が高くなり、値が低いほど決定論的になります。必要な範囲: 0 < x < 2.

0.2

spring.ai.openai.chat.options.frequencyPenalty

0 より大きい乗法ペナルティ。1.0 より大きい値は、これまでのテキスト内の既存の頻度に基づいて新しいトークンにペナルティを課し、モデルが同じ行を逐語的に繰り返す可能性を減らします。1.0 の値はペナルティがないことを意味します。presence_penalty とは互換性がありません。必要な範囲: x > 0.

1

spring.ai.openai.chat.options.maxTokens

API によって返される完了トークンの最大数。max_tokens でリクエストされたトークンの合計数とメッセージで送信されたプロンプトトークンの数の合計は、リクエストされたモデルのコンテキストウィンドウトークン制限を超えてはなりません。指定しない場合は、モデルは停止トークンに到達するかコンテキストウィンドウの終わりに達するまでトークンを生成します。

-

spring.ai.openai.chat.options.presencePenalty

-2.0 から 2.0 までの値。正の値は、新しいトークンがこれまでのテキストに出現したかどうかに基づいてペナルティを課し、モデルが新しいトピックについて話す可能性を高めます。frequency_penalty とは互換性がありません。必要な範囲: -2 < x < 2

0

spring.ai.openai.chat.options.topP

核サンプリングしきい値。0 から 1 までの値です。後続の各トークンについて、モデルは top_p 確率質量を持つトークンの結果を考慮します。top_k または top_p のいずれかを変更することを推奨しますが、両方を変更することは推奨しません。必要な範囲: 0 < x < 1

0.9

spring.ai.openai.chat.options.stream-usage

(ストリーミングのみ) リクエスト全体のトークン使用統計を含む追加のチャンクを追加するように設定します。このチャンクの choices フィールドは空の配列であり、他のすべてのチャンクにも使用状況フィールドが含まれますが、値は null になります。

false

spring.ai.openai.chat.options というプレフィックスが付いたすべてのプロパティは、リクエスト固有のランタイムオプションを Prompt 呼び出しに追加することで実行時にオーバーライドできます。

ランタイムオプション

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

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

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

ChatResponse response = chatModel.call(
    new Prompt(
        "Generate the names of 5 famous pirates.",
        OpenAiChatOptions.builder()
            .withModel("llama-3.1-sonar-large-128k-online")
            .withTemperature(0.4)
        .build()
    ));
モデル固有の OpenAiChatOptions [GitHub] (英語) に加えて、ChatOptionsBuilder#builder() [GitHub] (英語) で作成されたポータブル ChatOptions [GitHub] (英語) インスタンスを使用できます。

関数呼び出し

Perplexity は明示的な関数呼び出しをサポートしていません。代わりに、検索結果をレスポンスに直接統合します。

マルチモーダル

現在、Perplexity API はメディアコンテンツをサポートしていません。

サンプルコントローラー

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

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

spring.ai.openai.api-key=<PERPLEXITY_API_KEY>
spring.ai.openai.base-url=https://api.perplexity.ai
spring.ai.openai.chat.completions-path=/chat/completions
spring.ai.openai.chat.options.model=llama-3.1-sonar-small-128k-online
spring.ai.openai.chat.options.temperature=0.7

# The Perplexity API doesn't support embeddings, so we need to disable it.
spring.ai.openai.embedding.enabled=false
api-key を Perplexity Api キーに置き換えます。

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

@RestController
public class ChatController {

    private final OpenAiChatModel chatModel;

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

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

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

対応モデル

Perplexity は、検索強化型会話型 AI 向けに最適化されたいくつかのモデルをサポートしています。詳細については、対応モデル (英語) を参照してください。