Google AI Gemini
https://ai.google.dev/gemini-api/docs
目录
- Maven 依赖
- API Key
- 可用模型
- GoogleAiGeminiChatModel
- GoogleAiGeminiStreamingChatModel
- 工具
- 结构化输出
- Python 代码执行
- 多模态
- 思考(Thinking)
- Gemini Files API
- 批处理
Maven 依赖
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-google-ai-gemini</artifactId>
<version>1.18.1</version>
</dependency>
API Key
在此免费获取 API 密钥:https://ai.google.dev/gemini-api/docs/api-key 。
可用模型
请在文档中查看可用模型列表。
gemini-3-pro-previewgemini-2.5-progemini-2.5-flashgemini-2.5-flash-litegemini-2.0-flashgemini-2.0-flash-lite
GoogleAiGeminiChatModel
提供常用的 chat(...) 方法:
ChatModel gemini = GoogleAiGeminiChatModel.builder()
.apiKey(System.getenv("GEMINI_AI_KEY"))
.modelName("gemini-2.5-flash")
...
.build();
String response = gemini.chat("Hello Gemini!");
以及 ChatResponse chat(ChatRequest req) 方法:
ChatModel gemini = GoogleAiGeminiChatModel.builder()
.apiKey(System.getenv("GEMINI_AI_KEY"))
.modelName("gemini-2.5-flash")
.build();
ChatResponse chatResponse = gemini.chat(ChatRequest.builder()
.messages(UserMessage.from(
"How many R's are there in the word 'strawberry'?"))
.build());
String response = chatResponse.aiMessage().text();
配置
ChatModel gemini = GoogleAiGeminiChatModel.builder()
.httpClientBuilder(...)
.defaultRequestParameters(...)
.apiKey(System.getenv("GEMINI_AI_KEY"))
.baseUrl(...)
.modelName("gemini-2.5-flash")
.maxRetries(...)
.temperature(1.0)
.topP(0.95)
.topK(64)
.seed(42)
.frequencyPenalty(...)
.presencePenalty(...)
.maxOutputTokens(8192)
.timeout(Duration.ofSeconds(60))
.responseFormat(ResponseFormat.JSON) // or .responseFormat(ResponseFormat.builder()...build())
.stopSequences(List.of(...))
.toolConfig(GeminiFunctionCallingConfig.builder()...build()) // or below
.toolConfig(GeminiMode.ANY, List.of("fnOne", "fnTwo"))
.allowCodeExecution(true)
.includeCodeExecution(true)
.logRequestsAndResponses(true)
.safetySettings(List<GeminiSafetySetting> or Map<GeminiHarmCategory, GeminiHarmBlockThreshold>)
.thinkingConfig(...)
.returnThinking(true)
.sendThinking(true)
.responseLogprobs(...)
.logprobs(...)
.enableEnhancedCivicAnswers(...)
.mediaResolution(GeminiMediaResolutionLevel.MEDIA_RESOLUTION_HIGH)
.mediaResolutionPerPartEnabled(true)
.listeners(...)
.supportedCapabilities(...)
.build();
默认请求参数
除了(或除了)上方所示的各个构建器方法之外,您还可以通过
defaultRequestParameters(...) 提供单个 ChatRequestParameters 对象。这些参数会应用于模型发出的每个
请求,除非被单个 ChatRequest 的参数覆盖。
您可以传入通用的 ChatRequestParameters 或 Gemini 特有的 GoogleAiGeminiChatRequestParameters。
后者额外暴露了 Gemini 专有选项,例如 aspectRatio 和 imageSize:
GoogleAiGeminiChatRequestParameters parameters = GoogleAiGeminiChatRequestParameters.builder()
.modelName("gemini-2.5-flash")
.temperature(1.0)
.maxOutputTokens(8192)
.aspectRatio("16:9") // Gemini-specific
.imageSize("2K") // Gemini-specific
.build();
ChatModel gemini = GoogleAiGeminiChatModel.builder()
.apiKey(System.getenv("GEMINI_AI_KEY"))
.defaultRequestParameters(parameters)
.build();
当同一参数既通过 defaultRequestParameters(...) 又通过单个构建器方法
(例如 modelName(String))设置时,以单个构建器方法设置的值为准:
ChatModel gemini = GoogleAiGeminiChatModel.builder()
.apiKey(System.getenv("GEMINI_AI_KEY"))
.defaultRequestParameters(GoogleAiGeminiChatRequestParameters.builder()
.modelName("gemini-2.5-flash")
.temperature(1.0)
.build())
.temperature(0.0) // overrides temperature from defaultRequestParameters
.build();
// effective parameters: modelName=gemini-2.5-flash, temperature=0.0
GoogleAiGeminiStreamingChatModel
GoogleAiGeminiStreamingChatModel 允许逐 token 流式返回响应文本。
响应必须由 StreamingChatResponseHandler 处理。
StreamingChatModel gemini = GoogleAiGeminiStreamingChatModel.builder()
.apiKey(System.getenv("GEMINI_AI_KEY"))
.modelName("gemini-2.5-flash")
.build();
CompletableFuture<ChatResponse> futureResponse = new CompletableFuture<>();
gemini.chat("Tell me a joke about Java", new StreamingChatResponseHandler() {
@Override
public void onPartialResponse(String partialResponse) {
System.out.print(partialResponse);
}
@Override
public void onCompleteResponse(ChatResponse completeResponse) {
futureResponse.complete(completeResponse);
}
@Override
public void onError(Throwable error) {
futureResponse.completeExceptionally(error);
}
});
futureResponse.join();
工具
支持工具(即函数调用),包括并行调用。
您可以使用接受 ChatRequest 的 chat(ChatRequest) 方法,并配置一个或多个
ToolSpecification,让 Gemini 知道它可以请求调用函数。
或者您可以使用 LangChain4j 的 AiServices 来定义它们。
以下是使用 AiServices 的天气工具示例:
record WeatherForecast(
String location,
String forecast,
int temperature) {}
class WeatherForecastService {
@Tool("Get the weather forecast for a location")
WeatherForecast getForecast(
@P("Location to get the forecast for") String location) {
if (location.equals("Paris")) {
return new WeatherForecast("Paris", "sunny", 20);
} else if (location.equals("London")) {
return new WeatherForecast("London", "rainy", 15);
} else if (location.equals("Tokyo")) {
return new WeatherForecast("Tokyo", "warm", 32);
} else {
return new WeatherForecast("Unknown", "unknown", 0);
}
}
}
interface WeatherAssistant {
String chat(String userMessage);
}
WeatherForecastService weatherForecastService =
new WeatherForecastService();
ChatModel gemini = GoogleAiGeminiChatModel.builder()
.apiKey(System.getenv("GEMINI_AI_KEY"))
.modelName("gemini-2.5-flash")
.temperature(0.0)
.build();
WeatherAssistant weatherAssistant =
AiServices.builder(WeatherAssistant.class)
.chatModel(gemini)
.tools(weatherForecastService)
.build();
String tokyoWeather = weatherAssistant.chat(
"What is the weather forecast for Tokyo?");
System.out.println("Gemini> " + tokyoWeather);
// Gemini> The weather forecast for Tokyo is warm
// with a temperature of 32 degrees.