OpenAI 公式 SDK
これは公式OpenAI Java SDKを使用するOpenAI 公式 SDK
統合のドキュメントです。
LangChain4jはチャットモデルを使用するためにOpenAIとの4つの異なる統合を提供しており、これは#2です:
- OpenAIはOpenAI REST APIのカスタムJava実装を使用し、Quarkus(Quarkus RESTクライアントを使用)とSpring(SpringのRestClientを使用)で最もよく機能します。
- OpenAI 公式 SDKは公式OpenAI Java SDKを使用します。
- Azure OpenAIはMicrosoftのAzure SDKを使用し、高度なAzure認証メカニズムを含むMicrosoft Javaスタックを使用している場合に最適です。
- GitHub ModelsはAzure AI Inference APIを使用してGitHub Modelsにアクセスします。
この統合のユースケース
この統合はOpenAI Java SDK GitHubリポジトリを使用し、以下が提供するすべてのOpenAIモデルで動作します:
- OpenAI
- Azure OpenAI
- GitHub Models
また、DeepSeekなどのOpenAI APIをサポートするモデルでも動作します。
OpenAIドキュメント
Maven依存関係
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-official</artifactId>
<version>1.0.0-beta4</version>
</dependency>
モデルの設定
この設定と次のセクションの使用方法は、非ストリーミングモード(「ブロッキング」または「同期」モードとも呼ばれます)のためのものです。 ストリーミングモードについては2セクション後で詳しく説明します:モデルとのリアルタイムチャットを可能にしますが、使用はより複雑です。
OpenAIモデルを使用するには、通常、エンドポイントURL、APIキー、モデル名が必要です。これはモデルがホストされている場所によって異なり、この統合は いくつかの自動設定でより簡単にしようとしています:
一般的な設定
import com.openai.models.ChatModel;
import dev.langchain4j.model.chat.ChatModel;
import dev.langchain4j.model.openaiofficial.OpenAiOfficialChatModel;
// ....
ChatModel model = OpenAiOfficialChatModel.builder()
.baseUrl(System.getenv("OPENAI_BASE_URL"))
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName(ChatModel.GPT_4O_MINI)
.build();
OpenAI設定
OpenAIのbaseUrl
(https://api.openai.com/v1
)はデフォルトなので、省略できます:
ChatModel model = OpenAiOfficialChatModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName(ChatModel.GPT_4O_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(ChatModel.GPT_4O_MINI)
.build();
Azure OpenAIの使用を強制したい場合は、isAzure()
メソッドも使用できます:
ChatModel model = OpenAiOfficialChatModel.builder()
.baseUrl(System.getenv("AZURE_OPENAI_ENDPOINT"))
.apiKey(System.getenv("AZURE_OPENAI_KEY"))
.isAzure(true)
.modelName(ChatModel.GPT_4O_MINI)
.build();
パスワードレス認証
「パスワードレス」認証を使用してAzure OpenAIに認証することができます。これはAPIキーを管理する必要がないため、より安全です。
そのためには、まずAzure OpenAIインスタンスがマネージドIDをサポートするように設定し、このアプリケーションにアクセス権を与える必要があります。例えば:
# Azure OpenAIインスタンスでシステムマネージドIDを有効にする
az cognitiveservices account identity assign \
--name <your-openai-instance-name> \
--resource-group <your-resource-group>
# ログイン しているIDを取得する
az ad signed-in-user show \
--query id -o tsv
# Azure OpenAIインスタンスへのアクセス権を付与する
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(ChatModel.GPT_4O_MINI)
.build();
または、GitHub Modelsの使用を強制するためにisGitHubModels()
メソッドを使用することもできます。これによりbaseUrl
が自動的に設定されます:
ChatModel model = OpenAiOfficialChatModel.builder()
.apiKey(System.getenv("GITHUB_TOKEN"))
.modelName(ChatModel.GPT_4O_MINI)
.isGitHubModels(true)
.build();
GitHub ModelsはGitHub ActionsやGitHub Codespacesを使用する際に自動的に入力されるGITHUB_TOKEN
環境変数を使用して設定されることが多いため、自動的に検出されます:
ChatModel model = OpenAiOfficialChatModel.builder()
.modelName(ChatModel.GPT_4O_MINI)
.isGitHubModels(true)
.build();
この最後の設定は使いやすく、GITHUB_TOKEN
環境変数がコードやGitHubログに公開されないため、より安全です。
モデルの使用
前のセクションでは、ChatModel
イン ターフェースを実装するOpenAiOfficialChatModel
オブジェクトが作成されました。
これはAIサービスによって使用されるか、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);
}
}
構造化出力
構造化出力機能は ツールとレスポンスフォーマットの両方でサポートされています。
構造化出力の詳細についてはこちらをご覧ください。
ツール用の構造化出力
ツールの構造化出力機能を有効にするには、モデルを構築する際に.strictTools(true)
を設定します:
OpenAiOfficialChatModel.builder()
// ...
.strictTools(true)
.build();
これにより、現在のOpenAIの制限により、すべてのツールパラメータが必須(JSONスキーマではrequired
)になり、
JSONスキーマの各object
に対してadditionalProperties=false
が設定されることに注意してください。
レスポンスフォーマット用の構造化出力
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();
この場合、AIサービスは指定されたPOJOからJSONスキーマを自動的に生成し、それをLLMに渡します。