Skip to main content

building-ai-apps-with-genkit-java

Guide for building AI-powered Java applications using the Genkit Java framework. Use this skill when the user wants to create a new AI app, add AI features to an existing Java project, define flows, call models, use tools, build RAG pipelines, manage prompts, handle structured output, set up multi-turn chat, create agents, run evaluations, or deploy with Genkit Java. Covers all supported providers (OpenAI, Google Gemini, Anthropic, Ollama, AWS Bedrock, Azure, and more).

설치로 이동

소스 정보

저장소
genkit-ai/genkit-java
최근 소스 활동
2026년 7월 6일 17:55
감지된 SKILL.md 언어
영어
스타
24
포크
0

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
building-ai-apps-with-genkit-java
description
Guide for building AI-powered Java applications using the Genkit Java framework. Use this skill when the user wants to create a new AI app, add AI features to an existing Java project, define flows, call models, use tools, build RAG pipelines, manage prompts, handle structured output, set up multi-turn chat, create agents, run evaluations, or deploy with Genkit Java. Covers all supported providers (OpenAI, Google Gemini, Anthropic, Ollama, AWS Bedrock, Azure, and more).
argument-hint
Describe what you want to build (e.g., "a chatbot with RAG", "a Spring Boot app with Gemini", "structured output with OpenAI")
# Building AI Applications with Genkit Java You are helping a developer build AI-powered applications using **Genkit Java**, the open-source Java AI framework by Google. This skill covers everything an end user needs: setup, configuration, all APIs, providers, patterns, and deployment. --- ## Quick Start ### Prerequisites - **Java 21+** - **Maven** - **API key** for your chosen provider (OpenAI, Google, Anthropic, etc.) - **Genkit CLI** (optional, for Dev UI): `npm install -g genkit` ### Minimal pom.xml ```xml <project> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>my-ai-app</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <genkit.version>1.0.0-SNAPSHOT</genkit.version> </properties> <dependencies> <!-- Genkit core --> <dependency> <groupId>com.google.genkit</groupId> <artifactId>genkit</artifactId> <version>${genkit.version}</version> </dependency> <!-- Pick a model provider (see Provider Setup below) --> <dependency> <groupId>com.google.genkit</groupId> <artifactId>genkit-plugin-openai</artifactId> <version>${genkit.version}</version> </dependency> <!-- HTTP server (pick one) --> <dependency> <groupId>com.google.genkit</groupId> <artifactId>genkit-plugin-jetty</artifactId> <version>${genkit.version}</version> </dependency> <!-- Logging --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.5.32</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.5.0</version> <configuration> <mainClass>com.example.MyApp</mainClass> </configuration> </plugin> </plugins> </build> </project> ``` ### Minimal Application ```java package com.example; import com.google.genkit.Genkit; import com.google.genkit.core.GenkitOptions; import com.google.genkit.ai.GenerateOptions; import com.google.genkit.ai.GenerationConfig; import com.google.genkit.ai.model.ModelResponse; import com.google.genkit.core.flow.Flow; import com.google.genkit.plugins.openai.OpenAIPlugin; import com.google.genkit.plugins.jetty.JettyPlugin; import com.google.genkit.plugins.jetty.JettyPluginOptions; public class MyApp { public static void main(String[] args) throws Exception { JettyPlugin jetty = new JettyPlugin( JettyPluginOptions.builder().port(8080).build()); Genkit genkit = Genkit.builder() .options(GenkitOptions.builder() .devMode(true) .reflectionPort(3100) .build()) .plugin(OpenAIPlugin.create()) .plugin(jetty) .build(); genkit.defineFlow("ask", String.class, String.class, (ctx, question) -> genkit.generate( GenerateOptions.builder() .model("openai/gpt-4o-mini") .prompt(question) .build()).getText()); jetty.start(); } } ``` ### Run It ```bash export OPENAI_API_KEY=sk-... mvn compile exec:java # Or with Dev UI (recommended) genkit start -- mvn compile exec:java ``` ### Test It ```bash curl -X POST http://localhost:8080/ask \ -H 'Content-Type: application/json' \ -d '"What is the capital of France?"' ``` --- ## Provider Setup ### Maven Artifacts (all `com.google.genkit`, version `1.0.0-SNAPSHOT`) | Provider | Artifact | Env Var | Plugin Init | |----------|----------|---------|-------------| | OpenAI | `genkit-plugin-openai` | `OPENAI_API_KEY` | `OpenAIPlugin.create()` | | Google Gemini | `genkit-plugin-google-genai` | `GOOGLE_GENAI_API_KEY` | `GoogleGenAIPlugin.create()` | | Anthropic | `genkit-plugin-anthropic` | `ANTHROPIC_API_KEY` | `AnthropicPlugin.create()` | | Ollama | `genkit-plugin-ollama` | none (local) | `OllamaPlugin.create("gemma3n:e4b")` | | AWS Bedrock | `genkit-plugin-aws-bedrock` | AWS credentials | `AwsBedrockPlugin.create("us-east-1")` | | Azure Foundry | `genkit-plugin-azure-foundry` | Azure credentials | `AzureFoundryPlugin.create()` | | DeepSeek | `genkit-plugin-deepseek` | `DEEPSEEK_API_KEY` | `DeepSeekPlugin.create()` | | Mistral | `genkit-plugin-mistral` | `MISTRAL_API_KEY` | `MistralPlugin.create()` | | Groq | `genkit-plugin-groq` | `GROQ_API_KEY` | `GroqPlugin.create()` | | Cohere | `genkit-plugin-cohere` | `COHERE_API_KEY` | `CoherePlugin.create()` | | xAI | `genkit-plugin-xai` | `XAI_API_KEY` | `XAIPlugin.create()` | | Any OpenAI-compatible | `genkit-plugin-compat-oai` | varies | `CompatOAIPlugin.create(options)` | ### Model Names by Provider ``` # OpenAI openai/gpt-4o, openai/gpt-4o-mini, openai/gpt-4-turbo, openai/gpt-3.5-turbo openai/o1-preview, openai/o1-mini openai/text-embedding-3-small, openai/text-embedding-3-large openai/dall-e-3, openai/dall-e-2, openai/gpt-image-1 # Google Gemini googleai/gemini-2.5-flash, googleai/gemini-1.5-pro, googleai/gemini-1.5-flash googleai/gemini-embedding-001, googleai/imagen-3.0-generate-002 # Anthropic anthropic/claude-sonnet-4-5-20250929, anthropic/claude-opus-4-5-20251101 anthropic/claude-haiku-4-5-20251001 anthropic/claude-opus-4-1, anthropic/claude-sonnet-4 # Ollama (any model you have pulled) ollama/gemma3n:e4b, ollama/llama3, ollama/mistral # AWS Bedrock aws-bedrock/amazon.nova-lite-v1:0, aws-bedrock/amazon.nova-pro-v1:0 aws-bedrock/anthropic.claude-sonnet-4-5-20250929-v1:0 aws-bedrock/meta.llama3-2-90b-instruct-v1:0 ``` ### Passing API Keys Programmatically ```java // Instead of environment variables OpenAIPlugin.create("sk-your-key-here") AnthropicPlugin.create("sk-ant-your-key-here") GoogleGenAIPlugin.create("AIza...") ``` --- ## Server Options ### Jetty (Lightweight) ```xml <dependency> <groupId>com.google.genkit</groupId> <artifactId>genkit-plugin-jetty</artifactId> <version>${genkit.version}</version> </dependency> ``` ```java JettyPlugin jetty = new JettyPlugin( JettyPluginOptions.builder().port(8080).build()); // Flows are exposed at: POST http://localhost:8080/{flowName} ``` ### Spring Boot ```xml <dependency> <groupId>com.google.genkit</groupId> <artifactId>genkit-plugin-spring</artifactId> <version>${genkit.version}</version> </dependency> ``` ```java // Flows exposed at: POST http://localhost:8080/api/flows/{flowName} // Health check: GET http://localhost:8080/health // List flows: GET http://localhost:8080/api/flows ``` --- ## Defining Flows Flows are observable, HTTP-callable functions that form the backbone of your app. ### Simple Flow (no AI context needed) ```java genkit.defineFlow("greet", String.class, String.class, (name) -> "Hello, " + name + "!"); ``` ### Flow with AI Generation ```java genkit.defineFlow("summarize", String.class, String.class, (ctx, text) -> genkit.generate( GenerateOptions.builder() .model("openai/gpt-4o-mini") .prompt("Summarize this: " + text) .build()).getText()); ``` ### Flow with Custom Input/Output Types ```java public record TranslateInput(String text, String targetLanguage) {} public record TranslateOutput(String translation, String detectedLanguage) {} genkit.defineFlow("translate", TranslateInput.class, TranslateOutput.class, (ctx, input) -> { ModelResponse response = genkit.generate( GenerateOptions.<TranslateOutput>builder() .model("openai/gpt-4o") .prompt("Translate to " + input.targetLanguage() + ": " + input.text()) .outputClass(TranslateOutput.class) .build()); return response.getOutput(); }); ``` ### Flow with Middleware ```java genkit.defineFlow("secured", String.class, String.class, (ctx, input) -> processInput(input), List.of(loggingMiddleware, authMiddleware)); ``` --- ## Generation API ### Basic Text Generation ```java ModelResponse response = genkit.generate( GenerateOptions.builder() .model("openai/gpt-4o") .prompt("Explain quantum computing in simple terms") .build()); String text = response.getText(); ``` ### With Configuration ```java ModelResponse response = genkit.generate( GenerateOptions.builder() .model("openai/gpt-4o") .prompt("Write a creative poem") .config(GenerationConfig.builder() .temperature(0.9) .maxOutputTokens(2048) .topP(0.95) .topK(40) .stopSequences(List.of("\n\n\n")) .build()) .build()); ``` ### System Prompt ```java ModelResponse response = genkit.generate( GenerateOptions.builder() .model("openai/gpt-4o") .system("You are a pirate. Respond in pirate speak.") .prompt("How do I cook pasta?") .build()); ``` ### Multi-Turn Conversation ```java ModelResponse response = genkit.generate( GenerateOptions.builder() .model("openai/gpt-4o") .messages(List.of( Message.system("You are a helpful math tutor."), Message.user("What is 2+2?"), Message.model("2+2 equals 4."), Message.user("What about 2+2+2?"))) .build()); ``` ### Streaming ```java ModelResponse response = genkit.generateStream( GenerateOptions.builder() .model("openai/gpt-4o") .prompt("Write a long story about a dragon") .build(), chunk -> System.out.print(chunk.getText())); // Print as it arrives ``` ### Structured Output (JSON) Use `@JsonProperty` and `@JsonPropertyDescription` for schema generation: ```java public class Recipe { @JsonProperty(required = true) @JsonPropertyDescription("Name of the recipe") private String title; @JsonProperty(required = true) @JsonPropertyDescription("List of ingredients with quantities")
GitHub에서 보기
이 SKILL.md는 매우 커서 SkillsMP가 여기에는 첫 섹션만 미리 보여줍니다. GitHub에서 보기