다음을 통해 공유


Container Apps 개요의 Java PetClinic AI 샘플

Spring PetClinic 샘플은 Java와 함께 Spring Boot를 사용하는 방법을 보여 주는 클래식 참조 애플리케이션입니다. 이 자습서에서는 Azure Container Apps 기반으로 빌드된 AI 강화 버전을 소개합니다. 이 버전은 최신 AI 기능으로 기존 PetClinic 관리 시스템을 확장합니다.

이 자습서에서 만드는 애플리케이션은 RAG(검색 증강 생성)를 사용하는 AI 채팅 도우미입니다. Azure OpenAI Service에 연결하기 위해 애플리케이션은 Spring AI SDK를 사용하여 웹 애플리케이션을 지원합니다. RAG에 대한 자세한 내용은 Azure OpenAI Service를 사용하여 RAG(검색 증강 생성) 구현을 참조하세요.

이 애플리케이션은 Spring PetClinic 샘플에 AI 관련 기능을 도입하기 위해 함께 작동하는 다양한 서비스를 제공합니다.

Azure Container Apps의 AI 앱 아키텍처

다음 다이어그램은 Azure Container Apps의 AI 애플리케이션 아키텍처를 보여 줍니다.

Container Apps 환경, API 게이트웨이, 인증을 위한 Entra ID 및 기타 구성 요소를 포함하는 AI 애플리케이션 아키텍처 다이어그램.

Azure Container Apps 환경에서 호스트되는 애플리케이션의 API 게이트웨이는 모든 외부 요청에 대한 중앙 진입점 역할을 합니다.

이 게이트웨이는 다음 함수를 수행합니다.

  • 애플리케이션 구성 요소 간의 통신을 라우팅하고 관리합니다.
  • Microsoft Entra ID를 통해 사용자를 인증합니다.
  • 관리 ID를 사용하여 Azure Container Registry 및 Cognitive Services에 대한 액세스를 보호합니다.
  • 들어오는 모든 외부 사용자 요청을 처리합니다.

게이트웨이는 전용 가상 네트워크 내에서 작동하여 애플리케이션과 외부 시스템 간의 안전하고 격리된 통신을 보장합니다.

다음 표에서는 애플리케이션에 포함된 주요 구성 요소와 서비스를 설명합니다.

서비스 또는 기능 설명
Azure Container Apps 최신 앱을 빌드하고 배포하기 위한 완전 관리형 서버리스 컨테이너 플랫폼입니다. 컨테이너화된 애플리케이션의 자동 크기 조정, 트래픽 분할 및 수정 버전 관리를 처리합니다.
Azure Container Apps 환경 네트워킹, 크기 조정 및 관리 구성을 공유하는 컨테이너 앱 그룹을 둘러싼 안전한 경계입니다. 컨테이너 앱 배포를 위한 기본 런타임을 제공합니다.
Azure OpenAI 서비스 OpenAI의 ChatGPT, 포함, GPT-4와 같은 강력한 언어 모델에 대한 REST API 액세스를 제공합니다. 엔터프라이즈급 보안 및 규정 준수 기능을 통해 AI 기능을 지원합니다.
Azure Container Registry 컨테이너 이미지를 저장하고 관리하기 위한 프라이빗 Docker 레지스트리 서비스입니다. 자동화된 컨테이너 빌드, 취약성 검사, 지역 복제를 지원합니다.
관리 ID Azure AD에서 자동으로 관리 ID를 Azure 서비스에 제공합니다. 코드에 자격 증명을 저장하지 않고도 안전한 서비스 간 인증을 허용하여 자격 증명 관리의 필요성을 없앱니다.
스프링 AI Spring 에코시스템에 AI 디자인 원칙을 적용하는 AI 엔지니어링을 위한 Spring 프레임워크입니다. 또는 Langchain4jspring-petclinic-langchain4j에 자체 PetClinic 샘플이 있는 또 다른 AI 프레임워크입니다. 자세한 내용은 채팅 클라이언트 API를 참조하세요.

애플리케이션의 코드형 인프라 요소에 대한 자세한 내용은 Azure Container Apps에 첫 번째 AI 앱 가져오기 리포지토리의 bicep 스크립트를 참조하세요.

코드 구현

다음 섹션에서는 이 첫 번째 AI 애플리케이션의 흐름을 이해하는 데 도움이 되는 코드 소개를 제공합니다.

REST 호출하기

ChatClient 컨트롤러는 채팅 클라이언트 엔드포인트와 통신을 담당합니다. PetclinicChatClient.java에서 프롬프트를 제출하기 위한 구문에는 사용자 입력을 제출하기 위한 개체 chatClient가 포함되어 있습니다.

return this.chatClient.prompt().user(u -> u.text(query)).call().content();

채팅 사용자 지정

ChatConfiguration 클래스는 chatClient에 전송된 요청을 사용자 지정합니다. 다음 목록은 chatClient의 몇 가지 주요 구성 설정을 설명합니다.

  • 연결 인증: 클라이언트가 Azure OpenAI에 연결합니다. API 키 인증과 관리 ID 인증이 모두 지원됩니다.
  • 구성 설정 위치: ChatModel의 경우 배포 gpt-4o 및 온도 0.7이 구성 파일에 설정됩니다.
  • 벡터 데이터베이스: 벡터 데이터베이스는 원본 문서의 수학적 표현을 저장합니다. 이를 포함이라고 합니다. 벡터 데이터는 채팅 API에서 사용자 질문과 관련된 문서를 찾는 데 사용됩니다.
  • 시스템 프롬프트: AI 동작을 사용자 지정하고 성능을 향상합니다.
  • API 엔드포인트: 이 애플리케이션은 OpenAI가 애플리케이션과 상호 작용할 수 있도록 사용자 지정 Azure Functions 엔드포인트를 제공합니다.
  • 관리자: 관리자는 Spring 애플리케이션에서 AI 기반 상호 작용을 가로채고, 수정하고, 향상시키는 유연하고 강력한 방법을 제공합니다.

다음 코드 예는 ChatClientCustomizer 클래스가 구성 정보를 로드하는 방법을 보여 줍니다.

@Bean
public ChatClientCustomizer chatClientCustomizer(VectorStore vectorStore, ChatModel model) {
    ChatMemory chatMemory = new InMemoryChatMemory();

    return b -> b.defaultSystem(systemResource)
        .defaultFunctions("listOwners", "listVets", "addPetToOwner", "addOwnerToPetclinic")
        .defaultAdvisors(new PromptChatMemoryAdvisor(chatMemory),
            new ModeledQuestionAnswerAdvisor(vectorStore, SearchRequest.defaults(), model));
}

API 엔드포인트

java.util.Function에 정의된 빈은 애플리케이션 컨텍스트에 정의된 함수입니다. 이러한 함수는 AI 모델과 PetClinic 애플리케이션 간의 인터페이스입니다.

AIFunctionConfiguration.java에는 PetClinic 애플리케이션과 통신하는 샘플 함수가 있습니다. 이러한 함수에 대한 다음 세부 사항을 염두에 둡니다.

  • @Description 함수에 대한 주석은 AI 모델이 자연어로 함수를 이해하는 데 도움이 됩니다.
  • 함수 본문은 비즈니스 요구 사항에 따라 달라집니다.

관리자

관리자는 AI 프롬프트를 수정하거나 향상시키는 구성 요소로, 프롬프트 처리를 위한 미들웨어 역할을 합니다.

이 애플리케이션은 두 가지 다른 관리자를 사용합니다.

  • QuestionAnswerAdvisor는 프롬프트를 마무리하기 전에 검색 벡터의 결과를 포함하는 새로운 사용자 쿼리를 생성하기 위해 AI 모델을 호출합니다.
  • PromptChatMemoryAdvisor는 프롬프트에 채팅 메모리를 추가하고 채팅 모델에 대화 기록을 제공합니다. 이러한 컨텍스트를 통해 AI 모델은 채팅의 컨텍스트를 기억하고 채팅 품질을 개선할 수 있습니다.

자세한 내용은 Advisors API를 참조하세요.

다음 단계