OpenAI公式SDK
これは、公式OpenAI Java SDKを使用するOpenAI Official SDK統合のドキュメントです。
LangChain4jはチャットモデル用に3つの異なるOpenAI統合を提供しており、これはその#2です:
- OpenAIはOpenAI REST APIのカスタムJava実装を使用し、Quarkus(Quarkus RESTクライアントを使用)およびSpring(SpringのRestClientを使用)で最もよく動作します。
- OpenAI Official SDKは公式のOpenAI Java SDKを使用します。
- Azure OpenAIはMicrosoftのAzure SDKを使用し、高度なAzure認証メカニズムを含むMicrosoft Javaスタックを使用している場合に最もよく動作します。
この統合のユースケース
この統合はOpenAI Java SDK GitHubリポジトリを使用し、次から提供されるすべてのOpenAIモデルで動作します:
- OpenAI
- Microsoft Foundry
- GitHub Models
DeepSeekなど、OpenAI APIをサポートするモデルでも動作します。
OpenAIドキュメント
Maven依存関係
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-official</artifactId>
<version>1.18.1-beta28</version>
</dependency>
モデルの設定
この設定、および次の使用方法のセクションは、非ストリーミングモード(「ブロッキング」または「同期」モードとも呼ばれます)向けです。 ストリーミングモードは2セクション後で詳しく説明します。モデルとのリアルタイムチャットが可能ですが、使用はより複雑です。
OpenAIモデルを使用するには、通常エンドポイントURL、APIキー、モデル名が必要です。これはモデルのホスト場所によって異なり、この統合は 自動構成により設定を容易にしようとします:
汎用設定
import com.openai.models.ChatModel;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openaiofficial.OpenAiOfficialChatModel;
import static com.openai.models.ChatModel.GPT_5_MINI;
// ....
ChatModel model = OpenAiOfficialChatModel.builder()
.baseUrl(System.getenv("OPENAI_BASE_URL"))
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName(GPT_5_MINI)
.build();
OpenAI設定
OpenAIのbaseUrl(https://api.openai.com/v1)がデフォルトのため、省略できます:
ChatModel model = OpenAiOfficialChatModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName(GPT_5_MINI)
.build();
Azure OpenAI設定
汎用設定
Azure OpenAIではbaseUrlの設定が必須で、URLがopenai.azure.comで終わる場合はAzure OpenAIが自動検出されます:
ChatModel model = OpenAiOfficialChatModel.builder()
.baseUrl(System.getenv("AZURE_OPENAI_ENDPOINT"))
.apiKey(System.getenv("AZURE_OPENAI_KEY"))
.modelName(GPT_5_MINI)
.build();
Azure OpenAIの使用を強制したい場合は、isAzure()メソッドも使用できます:
ChatModel model = OpenAiOfficialChatModel.builder()
.baseUrl(System.getenv("AZURE_OPENAI_ENDPOINT"))
.apiKey(System.getenv("AZURE_OPENAI_KEY"))
.isAzure(true)
.modelName(GPT_5_MINI)
.build();
パスワードレス認証
「パスワードレス」認証を使用してAzure OpenAIに認証できます。APIキーを管理しないため、より安全です。
そのためには、まずAzure OpenAIインスタンスがマネージドIDをサポートするよう構成し、次にこのアプリケーションにアクセス権を付与します。例:
# Enable system managed identity on the Azure OpenAI instance
az cognitiveservices account identity assign \
--name <your-openai-instance-name> \
--resource-group <your-resource-group>
# Get your logged-in identity
az ad signed-in-user show \
--query id -o tsv
# Give access to the Azure OpenAI instance
az role assignment create \
--role "Cognitive Services OpenAI User" \
--assignee <your-logged-identity-from-the-previous-command> \
--scope "/subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>"
次に、Mavenのpom.xmlにazure-identity依存関係を追加する必要があります:
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
</dependency>
APIキーが構成されていない場合、LangChain4j は自動的にAzure OpenAIのパスワードレス認証を使用します。
GitHub Models設定
GitHub Modelsでは、デフォルトのbaseUrl(https://models.inference.ai.azure.com)を使用できます:
ChatModel model = OpenAiOfficialChatModel.builder()
.baseUrl("https://models.inference.ai.azure.com")
.apiKey(System.getenv("GITHUB_TOKEN"))
.modelName(GPT_5_MINI)
.build();
または、isGitHubModels()メソッドを使用してGitHub Modelsの使用を強制でき、baseUrlが自動設定されます:
ChatModel model = OpenAiOfficialChatModel.builder()
.apiKey(System.getenv("GITHUB_TOKEN"))
.modelName(GPT_5_MINI)
.isGitHubModels(true)
.build();
GitHub Modelsは通常、GitHub ActionsまたはGitHub Codespaces使用時に自動入力されるGITHUB_TOKEN環境変数で構成されるため、自動検出されます:
ChatModel model = OpenAiOfficialChatModel.builder()
.modelName(GPT_5_MINI)
.isGitHubModels(true)
.build();
この最後の構成は使いやすく、GITHUB_TOKEN環境変数がコードやGitHubログに露出しないため、より安全です。
モデルの使用
前のセクションでは、ChatModelインターフェースを実装するOpenAiOfficialChatModelオブジェクトを作成しました。
AI Serviceで使用するか、Javaアプリケーションで直接使用できます。
この例では、Spring Beanとしてオートワイヤリングされています:
@RestController
class ChatModelController {
ChatModel chatModel;
ChatModelController(ChatModel chatModel) {
this.chatModel = chatModel;
}
@GetMapping("/model")
public String model(@RequestParam(value = "message", defaultValue = "Hello") String message) {
return chatModel.chat(message);
}
}
構造化出力
構造化出力機能は ツールとレスポンスフォーマットの両方でサポートされています。
構造化出力の詳細はこちらをご覧ください。
構造化出力 for Tools
ツールの構造化出力機能を有効にするには、モデル構築時に.strictTools(true)を設定します:
OpenAiOfficialChatModel.builder()
// ...
.strictTools(true)
.build();
これにより、現在のOpenAIの制限により、すべてのツールパラメータが必須(JSONスキーマではrequired)になり、
JSONスキーマの各objectに対してadditionalProperties=falseが設定されることに注意してください。
構造化出力 for Response Format
AIサービス使用時にレスポンスフォーマット用の構造化出力機能を有効にするには、
モデル構築時にsupportedCapabilities(Set.of(RESPONSE_FORMAT_JSON_SCHEMA))と.strictJsonSchema(true)を設定します:
import static dev.langchain4j.model.chat.Capability.RESPONSE_FORMAT_JSON_SCHEMA;
// ...
OpenAiChatModel.builder()
// ...
.supportedCapabilities(Set.of(RESPONSE_FORMAT_JSON_SCHEMA))
.strictJsonSchema(true)
.build();