This is an educational repository for learning Generative AI development with Java. It provides a comprehensive hands-on course covering Large Language Models (LLMs), prompt engineering, embeddings, RAG (Retrieval-Augmented Generation), and the Model Context Protocol (MCP).
Key Technologies:
- Java 21
- Spring Boot 3.5.x
- Spring AI 1.1.x
- Maven
- LangChain4j
- Azure AI Foundry, Azure OpenAI, and OpenAI SDKs
Architecture:
- Multiple standalone Spring Boot applications organized by chapters
- Sample projects demonstrating different AI patterns
- GitHub Codespaces-ready with pre-configured dev containers
- Java 21 or higher
- Maven 3.x
- Azure subscription with an Azure AI Foundry model deployment (provision with
azd up) - Azure CLI (
az) and Azure Developer CLI (azd), signed in for keyless auth
Option 1: GitHub Codespaces (Recommended)
# Fork the repository and create a codespace from GitHub UI
# The dev container will automatically install all dependencies
# Wait ~2 minutes for environment setupOption 2: Local Dev Container
# Clone repository
git clone https://github.com/microsoft/Generative-AI-for-beginners-java.git
cd Generative-AI-for-beginners-java
# Open in VS Code with Dev Containers extension
# Reopen in Container when promptedOption 3: Local Setup
# Install dependencies
sudo apt-get update
sudo apt-get install -y maven openjdk-21-jdk
# Verify installation
java -version
mvn -versionAzure AI Foundry Setup (keyless, recommended):
# Provision the Foundry account + model deployments as code
cd 02-SetupDevEnvironment
azd auth login
az login
azd up
# azd writes examples/basic-chat-azure/.env with your endpoint (no key)Manual endpoint config:
# If you didn't use azd, set the endpoint yourself (auth stays keyless via az login)
cd 02-SetupDevEnvironment/examples/basic-chat-azure
cp .env.example .env
# Edit .env: AZURE_OPENAI_ENDPOINT=https://<resource>.openai.azure.com//
├── 01-IntroToGenAI/ # Chapter 1: Introduction
├── 02-SetupDevEnvironment/ # Chapter 2: Environment setup
│ └── examples/ # Working examples
├── 03-CoreGenerativeAITechniques/ # Chapter 3: Core techniques
├── 04-PracticalSamples/ # Chapter 4: Sample projects
│ ├── calculator/ # MCP service example
│ ├── foundrylocal/ # Local model integration
│ └── petstory/ # Multi-modal app
├── 05-ResponsibleGenAI/ # Chapter 5: Responsible AI
└── translations/ # Multi-language support
Running a Spring Boot application:
cd [project-directory]
mvn spring-boot:runBuilding a project:
cd [project-directory]
mvn clean installStarting the MCP Calculator Server:
cd 04-PracticalSamples/calculator
mvn spring-boot:run
# Server runs on http://localhost:8080Running Client Examples:
# After starting the server in another terminal
cd 04-PracticalSamples/calculator
# Direct MCP client
mvn exec:java -Dexec.mainClass="com.microsoft.mcp.sample.client.SDKClient"
# AI-powered client (requires AZURE_OPENAI_ENDPOINT + az login)
mvn exec:java -Dexec.mainClass="com.microsoft.mcp.sample.client.LangChain4jClient"
# Interactive bot
mvn exec:java -Dexec.mainClass="com.microsoft.mcp.sample.client.Bot"Spring Boot DevTools is included in projects that support hot reload:
# Changes to Java files will automatically reload when saved
mvn spring-boot:runRun all tests in a project:
cd [project-directory]
mvn testRun tests with verbose output:
mvn test -XRun specific test class:
mvn test -Dtest=CalculatorServiceTest- Test files use JUnit 5 (Jupiter)
- Test classes are located in
src/test/java/ - Client examples in the calculator project are in
src/test/java/com/microsoft/mcp/sample/client/
Many examples are interactive applications that require manual testing:
- Start the application with
mvn spring-boot:run - Test endpoints or interact with the CLI
- Verify expected behavior matches documentation in each project's README.md
- Sign in with
az loginbefore running examples (keyless auth) - Ensure your account has the Cognitive Services OpenAI User role on the resource
- Test content filtering with the responsible AI example in Chapter 5
- Java Version: Java 21 with modern features
- Style: Follow standard Java conventions
- Naming:
- Classes: PascalCase
- Methods/variables: camelCase
- Constants: UPPER_SNAKE_CASE
- Package names: lowercase
- Use
@Servicefor business logic - Use
@RestControllerfor REST endpoints - Configuration via
application.ymlorapplication.properties - Environment variables preferred over hard-coded values
- Use
@Toolannotation for MCP-exposed methods
src/
├── main/
│ ├── java/
│ │ └── com/microsoft/[component]/
│ │ ├── [Component]Application.java
│ │ ├── config/
│ │ ├── controller/
│ │ ├── service/
│ │ └── exception/
│ └── resources/
│ ├── application.yml
│ └── static/
└── test/
└── java/
└── com/microsoft/[component]/
- Managed via Maven
pom.xml - Spring AI BOM for version management
- LangChain4j for AI integrations
- Spring Boot starter parent for Spring dependencies
- Add JavaDoc for public APIs
- Include explanatory comments for complex AI interactions
- Document MCP tool descriptions clearly
Build without tests:
mvn clean install -DskipTestsBuild with all checks:
mvn clean installPackage application:
mvn package
# Creates JAR in target/ directory- Compiled classes:
target/classes/ - Test classes:
target/test-classes/ - JAR files:
target/*.jar - Maven artifacts:
target/
Development:
# application.yml (keyless - no api-key; auth via DefaultAzureCredential)
spring:
ai:
azure:
openai:
endpoint: ${AZURE_OPENAI_ENDPOINT}
chat:
options:
deployment-name: ${AZURE_OPENAI_DEPLOYMENT:gpt-4o-mini}Production:
- Use a managed identity instead of
az loginfor keyless auth - Point
AZURE_OPENAI_ENDPOINTat your production Foundry resource - Manage configuration via environment variables or Azure Key Vault
- This is an educational repository with sample applications
- Not designed for production deployment as-is
- Samples demonstrate patterns to adapt for production use
- See individual project READMEs for specific deployment notes
- Keyless auth: connect with Microsoft Entra ID — no API keys to manage
- Provisioned as code: Bicep + azd (
azd up) create the account and model deployments - The same OpenAI-compatible code runs locally (
az login) and in Azure (managed identity)
Each sample project is standalone:
# Navigate to specific project
cd 04-PracticalSamples/[project-name]
# Each has its own pom.xml and can be built independently
mvn clean installJava Version Mismatch:
# Verify Java 21
java -version
# Update JAVA_HOME if needed
export JAVA_HOME=/usr/lib/jvm/msopenjdk-currentDependency Download Issues:
# Clear Maven cache and retry
rm -rf ~/.m2/repository
mvn clean installEndpoint or Sign-in Not Found:
# Set the endpoint in the current session and sign in (keyless)
export AZURE_OPENAI_ENDPOINT="https://your-resource.openai.azure.com/"
az login
# Or use a .env file in the project directory
echo "AZURE_OPENAI_ENDPOINT=https://your-resource.openai.azure.com/" > .envPort Already in Use:
# Spring Boot uses port 8080 by default
# Change in application.properties:
server.port=8081- Documentation available in 45+ languages via automated translation
- Translations in
translations/directory - Translation managed by GitHub Actions workflow
- Start with 02-SetupDevEnvironment
- Follow chapters in order (01 → 05)
- Complete hands-on examples in each chapter
- Explore sample projects in Chapter 4
- Learn responsible AI practices in Chapter 5
The .devcontainer/devcontainer.json configures:
- Java 21 development environment
- Maven pre-installed
- VS Code Java extensions
- Spring Boot tools
- GitHub Copilot integration
- Docker-in-Docker support
- Azure CLI
- Azure AI Foundry deployments have per-minute token/request quotas
- Use appropriate batch sizes for embeddings
- Consider caching for repeated API calls
- Monitor token usage for cost optimization
- Never commit
.envfiles (already in.gitignore) - Prefer keyless auth (Microsoft Entra ID) over API keys
- Use managed identities in Azure;
az loginfor local development - Follow responsible AI guidelines in Chapter 5