チャットの使用 / 埋め込みレスポンスの使用

概要

Spring AI は、Usage インターフェースに getNativeUsage() メソッドを導入し、DefaultUsage 実装を提供することで、モデル使用状況の処理を強化しました。この変更により、フレームワーク全体の一貫性を維持しながら、さまざまな AI モデルが使用状況メトリクスを追跡・報告することが簡素化されます。

主な変更点

使用インターフェースの強化

Usage インターフェースに新しいメソッドが追加されました:

Object getNativeUsage();

このメソッドにより、モデル固有のネイティブ使用状況データにアクセスできるため、必要に応じてより詳細な使用状況追跡が可能になります。

ChatModel と併用

OpenAI の ChatModel を使用して使用状況を追跡する方法を示す完全な例を次に示します。

@SpringBootConfiguration
public class Configuration {

        @Bean
        public OpenAiApi chatCompletionApi() {
            return OpenAiApi.builder()
                .apiKey(System.getenv("OPENAI_API_KEY"))
                .build();
        }

        @Bean
        public OpenAiChatModel openAiClient(OpenAiApi openAiApi) {
            return OpenAiChatModel.builder()
                .openAiApi(openAiApi)
                .build();
        }

    }

@Service
public class ChatService {

    private final OpenAiChatModel chatModel;

    public ChatService(OpenAiChatModel chatModel) {
        this.chatModel = chatModel;
    }

    public void demonstrateUsage() {
        // Create a chat prompt
        Prompt prompt = new Prompt("What is the weather like today?");

        // Get the chat response
        ChatResponse response = this.chatModel.call(prompt);

        // Access the usage information
        Usage usage = response.getMetadata().getUsage();

        // Get standard usage metrics
        System.out.println("Prompt Tokens: " + usage.getPromptTokens());
        System.out.println("Completion Tokens: " + usage.getCompletionTokens());
        System.out.println("Total Tokens: " + usage.getTotalTokens());

        // Access native OpenAI usage data with detailed token information
        if (usage.getNativeUsage() instanceof org.springframework.ai.openai.api.OpenAiApi.Usage) {
            org.springframework.ai.openai.api.OpenAiApi.Usage nativeUsage =
                (org.springframework.ai.openai.api.OpenAiApi.Usage) usage.getNativeUsage();

            // Detailed prompt token information
            System.out.println("Prompt Tokens Details:");
            System.out.println("- Audio Tokens: " + nativeUsage.promptTokensDetails().audioTokens());
            System.out.println("- Cached Tokens: " + nativeUsage.promptTokensDetails().cachedTokens());

            // Detailed completion token information
            System.out.println("Completion Tokens Details:");
            System.out.println("- Reasoning Tokens: " + nativeUsage.completionTokenDetails().reasoningTokens());
            System.out.println("- Accepted Prediction Tokens: " + nativeUsage.completionTokenDetails().acceptedPredictionTokens());
            System.out.println("- Audio Tokens: " + nativeUsage.completionTokenDetails().audioTokens());
            System.out.println("- Rejected Prediction Tokens: " + nativeUsage.completionTokenDetails().rejectedPredictionTokens());
        }
    }
}

ChatClient と併用

ChatClient を使用している場合は、ChatResponse オブジェクトを使用して使用状況情報にアクセスできます。

// Create a chat prompt
Prompt prompt = new Prompt("What is the weather like today?");

// Create a chat client
ChatClient chatClient = ChatClient.create(chatModel);

// Get the chat response
ChatResponse response = chatClient.prompt(prompt)
        .call()
        .chatResponse();

// Access the usage information
Usage usage = response.getMetadata().getUsage();

メリット

標準化 : さまざまな AI モデルの使用状況を一貫した方法で処理します。柔軟性 : ネイティブ使用状況機能簡素化を通じてモデル固有の使用状況データをサポートします: デフォルト実装拡張性で定型コードを削減: 互換性を維持しながら、特定のモデル要件に合わせて簡単に拡張できます

型安全性に関する考慮事項

ネイティブ使用状況データを扱うときは、型キャストを慎重に検討してください。

// Safe way to access native usage
if (usage.getNativeUsage() instanceof org.springframework.ai.openai.api.OpenAiApi.Usage) {
    org.springframework.ai.openai.api.OpenAiApi.Usage nativeUsage =
        (org.springframework.ai.openai.api.OpenAiApi.Usage) usage.getNativeUsage();
    // Work with native usage data
}