- Java 17+: Primary programming language for backend services
- Spring Boot 3.3.6: Application framework for microservices architecture
- Spring Security: Authentication and authorization implementation
- Maven: Build and dependency management tool
- Langchain4j 1.0.0-beta2: Agent orchestration and tool invocation framework
- Multi-agent supervisor pattern implementation
- Automatic tool binding and execution
- Conversation memory and context management
- Azure OpenAI Service: LLM provider
- Models: GPT-4o-mini or GPT-4o
- Chat completion API integration
- Spring AI MCP (Model Context Protocol): Framework for exposing business APIs as agent tools
- Automatic tool registration from REST APIs
- Tool parameter extraction and validation
- Azure Document Intelligence: OCR and document data extraction
- Prebuilt invoice model for payment processing
- Azure Container Apps: Microservices hosting platform
- Azure Container Registry: Docker image repository
- Azure Key Vault: Secrets and configuration management
- Azure Application Insights: Application performance monitoring and telemetry
- Azure Log Analytics: Centralized logging and diagnostics
- Azure Cognitive Search: (Infrastructure provisioned for future enhancements)
- Azure Bicep: Infrastructure as Code (IaC) templates
- Azure Developer CLI (azd): Deployment automation and environment management
- Docker & Docker Compose: Container orchestration for local development
- GitHub Actions: CI/CD pipeline automation
- React 18: UI library for building component-based interfaces
- TypeScript 5.2: Type-safe JavaScript for development
- Vite 6.3: Modern build tool and development server
- Fluent UI v8 & v9: Microsoft's design system
- @fluentui/react: UI components library
- @fluentui/react-components: Next-generation components
- @fluentui/react-icons: Icon library
- React Router DOM 6: Client-side routing
- @react-spring/web: Animation library
- Azure MSAL (Microsoft Authentication Library)
- @azure/msal-browser: Browser-based authentication
- @azure/msal-react: React integration for authentication flows
- Node.js >=14.0.0: JavaScript runtime
- Nginx: Web server for production deployment
- Prettier: Code formatting
- JUnit 5: Unit testing framework
- Mockito: Mocking framework for Java tests
- AssertJ: Fluent assertion library
- WireMock: HTTP service mocking for integration tests
azure.yaml: Azure Developer CLI configuration defining services, languages, and hosting targetscompose.yaml: Docker Compose orchestration for local multi-container developmentREADME.md: Project overview, architecture, and getting started guideCHANGELOG.md: Version history and release notesCONTRIBUTING.md: Contribution guidelines for developersSECURITY.md: Security policies and vulnerability reportingLICENSE/LICENSE.md: MIT license termsCODEOWNERS: Code ownership and review assignment
Main application directory containing all microservices and frontend code.
Multi-module Maven project implementing the multi-agent banking assistant.
-
/copilot-backend: Spring Boot application serving as the main copilot service- REST API endpoints for chat interactions
- Supervisor agent orchestration
- Integration with Azure OpenAI and Document Intelligence
/manifests: Kubernetes deployment configurations for AKS- Backend deployment templates
- Service definitions
- Ingress rules
- Environment configuration maps
-
/langchain4j-agents: Agent implementation module- Domain-specific agents (Account, Transactions, Payments)
- Langchain4j integration and configuration
- MCP tool bindings and execution logic
- Agent conversation flows and tool invocation
-
/copilot-common: Shared utilities and domain models- Common DTOs and domain entities
- Utility classes and helpers
- Shared configuration
-
Root files:
pom.xml: Parent POM coordinating all copilot modulesDockerfile: Container image build instructionsapplicationinsights.json: Application Insights configurationmvnw/mvnw.cmd: Maven wrapper scripts
- Purpose: Manages user account information, balances, and payment methods
- Exposed as: REST API and MCP tools
- Features:
- Retrieve account details by username
- Get credit balance information
- Manage registered payment methods
- List beneficiaries
- Technology: Spring Boot microservice with Maven build
- Files:
pom.xml,Dockerfile,applicationinsights.json, Maven wrapper - Source:
/src/main(application code),/src/test(tests)
- Purpose: Handles payment submission and processing
- Exposed as: REST API and MCP tools
- Features:
- Submit payment requests
- Notify transaction status
- Payment validation and processing
- Technology: Spring Boot microservice with Maven build
- Files:
pom.xml,Dockerfile,applicationinsights.json, Maven wrapper - Source:
/src/main(application code)
- Purpose: Provides transaction history and reporting
- Exposed as: REST API and MCP tools
- Features:
- Search transaction history
- Query transactions by recipient
- Income and outcome payment tracking
- Duplicate payment detection
- Technology: Spring Boot microservice with Maven build
- Files:
pom.xml,Dockerfile,applicationinsights.json, Maven wrapper - Source:
/src/main(application code)
- Purpose: Chat-based user interface for the banking assistant
- Technology: React SPA with TypeScript, Vite build, Fluent UI components
- Features:
- Conversational chat interface
- Image upload support (invoices, receipts, bills)
- Authentication with Azure AD
- Real-time agent responses
- Structure:
/src: TypeScript/React source code/api: API client and models/components: Reusable UI components (AnalysisPanel, etc.)/pages: Application pages/routes/assets: Static assets
/public: Public static files/manifests: Kubernetes deployment configurations/nginx: Nginx web server configurationDockerfile/Dockerfile-aks: Container configurationspackage.json: Node.js dependencies and scriptsvite.config.ts: Vite bundler configurationtsconfig.json: TypeScript compiler options
Helper scripts to start all services locally using Docker Compose.
Test data and sample files for development and demonstration.
- Contents: Sample invoices, receipts, and mock banking data
- Purpose: Enable testing payment OCR features and agent interactions
Project documentation and guides.
faq.md: Frequently asked questionstroubleshooting.md: Common issues and solutionskusto-queries.md: Azure Monitor/Log Analytics query examples/assets: Documentation images and diagrams/multi-agents: Multi-agent architecture documentationintroduction.md: Detailed agent architecture explanations
Azure infrastructure definitions using Bicep templates.
main.bicep: Main infrastructure orchestration templatemain.parameters.json: Environment-specific parameter values
Bicep modules for each application service:
account.bicep: Account service Container Apppayment.bicep: Payment service Container Apptransaction.bicep: Transaction service Container Appcopilot.bicep: Copilot agent service Container Appweb.bicep: Frontend web application Container App
cognitiveservices.bicep: Azure OpenAI and Document Intelligence provisioning
container-apps-environment.bicep: Container Apps environment setupcontainer-app.bicep: Base container app templatecontainer-app-upsert.bicep: Container app update/create logiccontainer-apps.bicep: Multi-container app orchestrationcontainer-registry.bicep: Azure Container Registry setup
monitoring.bicep: Monitoring infrastructure orchestrationloganalytics.bicep: Log Analytics workspaceapplicationinsights.bicep: Application Insights instanceapplicationinsights-dashboard.bicep: Custom monitoring dashboardbackend-dashboard.bicep: Backend-specific monitoring dashboard
keyvault.bicep: Azure Key Vault provisioningkeyvault-access.bicep: Key Vault access policieskeyvault-secret.bicep: Secret managementregistry-access.bicep: Container registry access controlrole.bicep: RBAC role assignments
storage-account.bicep: Azure Storage account provisioning
Resource naming conventions and abbreviations for consistent Azure resource names.
The system implements a vertical multi-agent supervisor pattern:
- Supervisor Agent: Routes user requests to specialized domain agents based on intent
- Account Agent: Handles account balance, payment methods, and beneficiary queries
- Transactions Agent: Manages transaction history searches and reporting
- Payments Agent: Processes payment submissions with invoice OCR capabilities
User → React Frontend → Copilot Backend (Spring Boot)
↓
Supervisor Agent (Langchain4j)
↓
┌─────────┴─────────┐
↓ ↓ ↓
Account Transactions Payments
Agent Agent Agent
↓ ↓ ↓
MCP Tools (Spring AI MCP)
↓ ↓ ↓
Business APIs (Spring Boot Microservices)
↓ ↓ ↓
Account Transaction Payment
Service Service Service
- Local Development: Docker Compose orchestrates all services
- Cloud Deployment: Azure Container Apps with:
- Automatic scaling
- Zero-downtime deployments
- Managed identity for service authentication
- Application Insights for observability
- Azure OpenAI for LLM capabilities
- Document Intelligence for OCR
Business APIs are exposed as agent tools using Spring AI MCP, enabling:
- Automatic tool registration from OpenAPI specifications
- Type-safe parameter binding
- Standardized tool invocation protocol
Langchain4j manages:
- Automatic tool selection based on conversation context
- Parameter extraction from natural language
- Function calling with Azure OpenAI
- Response synthesis and error handling
- Domain-driven design: Each service owns its business domain
- API-first: REST APIs with OpenAPI specifications
- Containerized deployment: Docker images for consistent environments
- Observability: Distributed tracing with Application Insights
- Start all services:
./app/start-compose.sh(Linux/Mac) or./app/start-compose.ps1(Windows) - Access frontend:
http://localhost:8081 - Backend services run on assigned ports with live reload
- Provision infrastructure:
azd provision - Deploy services:
azd deploy - Monitor: Azure Portal → Application Insights dashboards
- Unit tests: Maven test phase in each service
- Integration tests: WireMock for API mocking
- E2E testing: Manual testing through frontend
- Azure AD Authentication: Frontend uses MSAL for user authentication
- Managed Identity: Services authenticate to Azure resources without credentials
- Key Vault Integration: Secrets stored securely and injected at runtime
- API Security: Spring Security protects backend endpoints
- Application Insights: Real-time performance monitoring, distributed tracing
- Log Analytics: Centralized logging with Kusto query language
- Custom Dashboards: Pre-built dashboards for backend and agent metrics
- Telemetry: Automatic instrumentation of HTTP calls, dependencies, and exceptions