跳到主要内容

OpenAI

备注

これはOpenAI統合のドキュメントで、OpenAI REST APIのカスタムJava実装を使用しています。これはQuarkus(Quarkus RESTクライアントを使用)とSpring(SpringのRestClientを使用)で最もよく機能します。

Quarkusを使用している場合は、Quarkus LangChain4jドキュメントを参照してください。

LangChain4jはチャットモデルを使用するためにOpenAIとの4つの異なる統合を提供しており、これは#1です:

  • 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ドキュメント

Maven依存関係

通常のJava

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>1.0.0-rc1</version>
</dependency>

Spring Boot

<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
<version>1.0.0-beta4</version>
</dependency>

APIキー

OpenAIモデルを使用するには、APIキーが必要です。 こちらで作成できます。

APIキーを持っていない場合はどうすればよいですか?

独自のOpenAI APIキーを持っていなくても心配いりません。 デモンストレーション目的で無料で提供しているdemoキーを一時的に使用できます。 demoキーを使用する場合、OpenAI APIへのすべてのリクエストは当社のプロキシを経由する必要があり、 プロキシは実際のキーを挿入してからリクエストをOpenAI APIに転送します。 当社はお客様のデータを収集したり使用したりすることはありません。 demoキーには割り当て量があり、gpt-4o-miniモデルに制限されており、デモンストレーション目的でのみ使用すべきです。

OpenAiChatModel model = OpenAiChatModel.builder()
.baseUrl("http://langchain4j.dev/demo/openai/v1")
.apiKey("demo")
.modelName("gpt-4o-mini")
.build();

OpenAiChatModelの作成

通常のJava

ChatModel model = OpenAiChatModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName("gpt-4o-mini")
.build();


// ChatRequestParametersまたはOpenAiChatRequestParametersを使用してデフォルトのチャットリクエストパラメータを指定することもできます
ChatModel model = OpenAiChatModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.defaultRequestParameters(OpenAiChatRequestParameters.builder()
.modelName("gpt-4o-mini")
.build())
.build();

これにより、指定されたデフォルトパラメータを持つOpenAiChatModelのインスタンスが作成されます。

Spring Boot

application.propertiesに追加:

# 必須プロパティ:
langchain4j.open-ai.chat-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.chat-model.model-name=gpt-4o-mini

# オプションプロパティ:
langchain4j.open-ai.chat-model.base-url=...
langchain4j.open-ai.chat-model.custom-headers=...
langchain4j.open-ai.chat-model.frequency-penalty=...
langchain4j.open-ai.chat-model.log-requests=...
langchain4j.open-ai.chat-model.log-responses=...
langchain4j.open-ai.chat-model.logit-bias=...
langchain4j.open-ai.chat-model.max-retries=...
langchain4j.open-ai.chat-model.max-completion-tokens=...
langchain4j.open-ai.chat-model.max-tokens=...
langchain4j.open-ai.chat-model.metadata=...
langchain4j.open-ai.chat-model.organization-id=...
langchain4j.open-ai.chat-model.parallel-tool-calls=...
langchain4j.open-ai.chat-model.presence-penalty=...
langchain4j.open-ai.chat-model.project-id=...
langchain4j.open-ai.chat-model.reasoning-effort=...
langchain4j.open-ai.chat-model.response-format=...
langchain4j.open-ai.chat-model.seed=...
langchain4j.open-ai.chat-model.service-tier=...
langchain4j.open-ai.chat-model.stop=...
langchain4j.open-ai.chat-model.store=...
langchain4j.open-ai.chat-model.strict-schema=...
langchain4j.open-ai.chat-model.strict-tools=...
langchain4j.open-ai.chat-model.supported-capabilities=...
langchain4j.open-ai.chat-model.temperature=...
langchain4j.open-ai.chat-model.timeout=...
langchain4j.open-ai.chat-model.top-p=
langchain4j.open-ai.chat-model.user=...

ほとんどのパラメータの説明はこちらで確認できます。

この設定により、OpenAiChatModelビーンが作成され、 AIサービスによって使用されるか、 必要な場所でオートワイヤリングされます。例えば:

@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)を設定します:

OpenAiChatModel.builder()
...
.strictTools(true)
.build(),

これにより、現在のOpenAIの制限により、すべてのツールパラメータが必須(JSONスキーマではrequired)になり、 JSONスキーマの各objectに対してadditionalProperties=falseが設定されることに注意してください。

レスポンスフォーマット用の構造化出力

AIサービスを使用する際にレスポンスフォーマット用の構造化出力機能を有効にするには、 モデルを構築する際に.supportedCapabilities(RESPONSE_FORMAT_JSON_SCHEMA).strictJsonSchema(true)を設定します:

OpenAiChatModel.builder()
...
.supportedCapabilities(RESPONSE_FORMAT_JSON_SCHEMA)
.strictJsonSchema(true)
.build();

この場合、AIサービスは指定されたPOJOからJSONスキーマを自動的に生成し、それをLLMに渡します。

OpenAiStreamingChatModelの作成

通常のJava

StreamingChatModel model = OpenAiStreamingChatModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName("gpt-4o-mini")
.build();

// ChatRequestParametersまたはOpenAiChatRequestParametersを使用してデフォルトのチャットリクエストパラメータを指定することもできます
StreamingChatModel model = OpenAiStreamingChatModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.defaultRequestParameters(OpenAiChatRequestParameters.builder()
.modelName("gpt-4o-mini")
.build())
.build();

Spring Boot

application.propertiesに追加:

# 必須プロパティ:
langchain4j.open-ai.streaming-chat-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.streaming-chat-model.model-name=gpt-4o-mini

# オプションプロパティ:
langchain4j.open-ai.streaming-chat-model.base-url=...
langchain4j.open-ai.streaming-chat-model.custom-headers=...
langchain4j.open-ai.streaming-chat-model.frequency-penalty=...
langchain4j.open-ai.streaming-chat-model.log-requests=...
langchain4j.open-ai.streaming-chat-model.log-responses=...
langchain4j.open-ai.streaming-chat-model.logit-bias=...
langchain4j.open-ai.streaming-chat-model.max-retries=...
langchain4j.open-ai.streaming-chat-model.max-completion-tokens=...
langchain4j.open-ai.streaming-chat-model.max-tokens=...
langchain4j.open-ai.streaming-chat-model.metadata=...
langchain4j.open-ai.streaming-chat-model.organization-id=...
langchain4j.open-ai.streaming-chat-model.parallel-tool-calls=...
langchain4j.open-ai.streaming-chat-model.presence-penalty=...
langchain4j.open-ai.streaming-chat-model.project-id=...
langchain4j.open-ai.streaming-chat-model.reasoning-effort=...
langchain4j.open-ai.streaming-chat-model.response-format=...
langchain4j.open-ai.streaming-chat-model.seed=...
langchain4j.open-ai.streaming-chat-model.service-tier=...
langchain4j.open-ai.streaming-chat-model.stop=...
langchain4j.open-ai.streaming-chat-model.store=...
langchain4j.open-ai.streaming-chat-model.strict-schema=...
langchain4j.open-ai.streaming-chat-model.strict-tools=...
langchain4j.open-ai.streaming-chat-model.temperature=...
langchain4j.open-ai.streaming-chat-model.timeout=...
langchain4j.open-ai.streaming-chat-model.top-p=...
langchain4j.open-ai.streaming-chat-model.user=...

OpenAiModerationModelの作成

通常のJava

ModerationModel model = OpenAiModerationModel.builder()
.apiKey(System.getenv("OPENAI_API_KEY"))
.modelName("text-moderation-stable")
.build();

Spring Boot

application.propertiesに追加:

# 必須プロパティ:
langchain4j.open-ai.moderation-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.moderation-model.model-name=text-moderation-stable

# オプションプロパティ:
langchain4j.open-ai.moderation-model.base-url=...
langchain4j.open-ai.moderation-model.custom-headers=...
langchain4j.open-ai.moderation-model.log-requests=...
langchain4j.open-ai.moderation-model.log-responses=...
langchain4j.open-ai.moderation-model.max-retries=...
langchain4j.open-ai.moderation-model.organization-id=...
langchain4j.open-ai.moderation-model.project-id=...
langchain4j.open-ai.moderation-model.timeout=...

OpenAiTokenCountEstimatorの作成

TokenCountEstimator tokenCountEstimator = new OpenAiTokenCountEstimator("gpt-4o-mini");

HTTPクライアント

通常のJava

langchain4j-open-aiモジュールを使用する場合、 JDKのjava.net.http.HttpClientがデフォルトのHTTPクライアントとして使用されます。

カスタマイズしたり、他の任意のHTTPクライアントを使用したりすることができます。 詳細はこちらで確認できます。

Spring Boot

langchain4j-open-ai-spring-boot-starter Spring Bootスターターを使用する場合、 SpringのRestClientがデフォルトのHTTPクライアントとして使用されます。

カスタマイズしたり、他の任意のHTTPクライアントを使用したりすることができます。 詳細はこちらで確認できます。