Perplexity チャット

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

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

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

Perplexity を Spring AI と組み合わせて使用する例については、PerplexityWithOpenAiChatModelIT.java [GitHub] (英語) のテストを参照してください。

前提条件

  • API キーを作成する : API キーを作成するには、こちら (英語) にアクセスしてください。Spring AI プロジェクトの spring.ai.openai.api-key プロパティを使用して設定してください。

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

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

application.properties ファイルで次の構成プロパティを設定できます。

spring.ai.openai.api-key=<your-perplexity-api-key>
spring.ai.openai.base-url=https://api.perplexity.ai
spring.ai.openai.chat.model=llama-3.1-sonar-small-128k-online

API キーなどの機密情報を扱う際のセキュリティを強化するために、Spring 式言語 (SpEL) を使用してカスタム環境変数を参照できます。

# In application.yml
spring:
  ai:
    openai:
      api-key: ${PERPLEXITY_API_KEY}
      base-url: ${PERPLEXITY_BASE_URL}
      chat:
        model: ${PERPLEXITY_MODEL}
# In your environment or .env file
export PERPLEXITY_API_KEY=<your-perplexity-api-key>
export PERPLEXITY_BASE_URL=https://api.perplexity.ai
export PERPLEXITY_MODEL=llama-3.1-sonar-small-128k-online

これらの構成をアプリケーションコードでプログラム的に設定することもできます。

// Retrieve configuration from secure sources or environment variables
String apiKey = System.getenv("PERPLEXITY_API_KEY");
String baseUrl = System.getenv("PERPLEXITY_BASE_URL");
String model = System.getenv("PERPLEXITY_MODEL");

リポジトリと BOM の追加

Spring AI の成果物は、Maven Central リポジトリと Spring Snapshot リポジトリに公開されています。これらのリポジトリをビルドシステムに追加するには、アーティファクトリポジトリのセクションを参照してください。

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

自動構成

Spring AI の自動構成およびスターターモジュールのアーティファクト名に大幅な変更がありました。詳細については、アップグレードノートを参照してください。

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

  • Maven

  • Gradle

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

チャットのプロパティ

再試行プロパティ

プレフィックス 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。https://api.perplexity.ai に設定する必要があります

-

spring.ai.openai.chat.api-key

Perplexity API キー

-

プロパティの構成

チャットの自動構成の有効化と無効化は、プレフィックス spring.ai.model.chat を持つ最上位プロパティを介して設定されるようになりました。

有効にするには、spring.ai.model.chat=openai (デフォルトで有効になっています)

無効にするには、spring.ai.model.chat=none (または openai と一致しない値)

この変更は、複数のモデルの構成を可能にするために行われます。

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

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

spring.ai.model.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 を提供します。https://api.perplexity.ai に設定する必要があります

-

spring.ai.openai.chat.temperature

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

0.2

spring.ai.openai.chat.frequency-penalty

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

1

spring.ai.openai.chat.max-tokens

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

-

spring.ai.openai.chat.presence-penalty

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

0

spring.ai.openai.chat.top-p

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

0.9

spring.ai.openai.chat.stream-usage

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

false

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

ランタイムオプション

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

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

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

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

関数呼び出し

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

マルチモーダル

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

サンプルコントローラー

新しい Spring Boot プロジェクトを作成し、spring-ai-starter-model-openai を 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.model=llama-3.1-sonar-small-128k-online
spring.ai.openai.chat.temperature=0.7

# The Perplexity API doesn't support embeddings, so we need to disable it.
spring.ai.model.embedding=none
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 向けに最適化されたいくつかのモデルをサポートしています。詳細については、対応モデル (英語) を参照してください。