JAVA.SV.LLM.CLIENT.NOTIMEOUT

タイムアウトが設定されていない LLM クライアント呼び出し

JAVA.SV.LLM.CLIENT.NOTIMEOUT チェッカーは、タイムアウトが構成されていない LLM クライアント呼び出しを特定します。

脆弱性とリスク

タイムアウトを設定していない LLM クライアント呼び出しでは、モデルの応答が停滞した場合に、スレッドやその他のリソースが想定よりも長い時間消費される可能性があります。

軽減と防止

LLM クライアント呼び出しに対して明示的なタイムアウトを構成し、タイムアウトによる失敗に対処します。

脆弱コード例

コピー
import dev.langchain4j.model.openai.OpenAiChatModel;

public class Example {
    private final OpenAiChatModel model = OpenAiChatModel.builder()
        .apiKey(System.getenv("OPENAI_API_KEY"))
        .modelName("gpt-4o-mini")
        .build(); // no timeout configured

    public String summarize(String prompt) {
        return model.generate(prompt);
    }
}

修正コード例

コピー
import java.time.Duration;
import dev.langchain4j.model.openai.OpenAiChatModel;

public class Example {
    private final OpenAiChatModel model = OpenAiChatModel.builder()
        .apiKey(System.getenv("OPENAI_API_KEY"))
        .modelName("gpt-4o-mini")
        .timeout(Duration.ofSeconds(10))
        .build();

    public String summarize(String prompt) {
        return model.generate(prompt);
    }
}