Spring AI는 OpenAI와 Azure OpenAI와의 통합을 제공합니다

Spring AI Provides Integration with OpenAI and Azure OpenAI

Spring AI 프로젝트는 SpringOne 컨퍼런스 동안 소개되었으며, Spring의 일반적인 개념을 사용하여 AI 애플리케이션을 생성할 수 있게 해줍니다. 현재 이 프로젝트는 Azure OpenAI와 OpenAI를 AI 백엔드로 통합하고 있습니다. 콘텐츠 생성, 코드 생성, 의미론적 검색, 요약과 같은 사용 사례가 프로젝트에 의해 지원됩니다.

역사적으로, Python은 C와 C++와 같은 언어로 작성된 AI 알고리즘에 빠르게 접근할 수 있도록 자주 사용되었습니다. OpenAI의 ChatGPT와 같은 솔루션에서 사용되는 생성 AI는 HTTP를 통해 사전 훈련된 모델에 접근할 수 있게 해줍니다. 이로 인해 Java와 같은 언어가 AI 알고리즘과 효율적으로 상호 작용할 수 있게 됩니다.

약어 ChatGPT는 Chat Generative Pre-Trained Transformer를 의미하며, 사전 훈련된 모델을 사용합니다. 이로 인해 개발자가 데이터베이스를 사용하는 것과 유사한 방식으로 AI를 사용할 수 있게 됩니다. AI는 더 이상 데이터 과학자가 데이터를 수집하고 모델을 훈련시키는 것을 필요로 하지 않습니다.

이 프로젝트는 SpringOne 컨퍼런스에서 소개되었으며, Spring 프레임워크와 통합하여 AI 애플리케이션을 쉽게 개발할 수 있도록 목표를 두고 있습니다. 주요 내용을 요약하면 다음과 같습니다:

Spring AI 프로젝트

  • 소개: SpringOne 컨퍼런스에서 발표됨.
  • 목적: Spring의 일반적인 개념을 사용하여 AI 애플리케이션 개발을 쉽게 함.
  • 통합: 현재 Azure OpenAI와 OpenAI를 AI 백엔드로 지원함.
  • 사용 사례: 콘텐츠 생성, 코드 생성, 의미론적 검색, 요약 등을 지원함.

역사적 맥락

  • 파이썬의 역할: 전통적으로 C나 C++로 작성된 AI 알고리즘에 빠르게 접근할 수 있게 함.
  • 생성 AI: OpenAI의 ChatGPT와 같은 기술은 HTTP를 통해 사전 훈련된 모델에 접근할 수 있게 해, Java와 같은 다른 언어로도 AI 알고리즘과 효율적으로 상호 작용할 수 있게 함.

ChatGPT

  • 약자의 의미: Chat Generative Pre-Trained Transformer(챗 생성 사전 훈련 트랜스포머).
  • 사용의 용이성: 사전 훈련된 모델을 사용하여 개발자가 AI를 쉽게 통합할 수 있게 함. 이는 데이터베이스를 사용하는 것과 유사함.
  • 데이터 과학자의 필요성 감소: 사전 훈련된 모델을 사용하므로, 데이터 수집과 모델 훈련이 필요 없어 AI 개발 과정이 단순화됨.

Java 개발자들이 AI를 자신들의 애플리케이션에 통합하는 데 있어 매우 흥미로운 발전이라고 할 수 있습니다.

그러나 OpenAI와 Azure OpenAI와 같은 AI 솔루션을 위한 다양한 Java 클라이언트 API는 서로 다르기 때문에, 이러한 솔루션 간에 전환하기가 더 어렵습니다. Spring AI는 Python 라이브러리인 LangChain과 LlamaIndex에서 영감을 받아 이러한 클라이언트 API 위에 추상화 계층을 제공합니다. 이 라이브러리들은 모듈성, 확장성, 다양한 데이터 소스와의 통합과 같은 디자인 가치를 기반으로 하고 있습니다.

Spring AI는 공통 API를 통한 AI 모델과의 통합과 같은 여러 기능을 제공합니다. Spring MVC의 뷰와 유사하게 비교할 수 있는 템플릿을 선택적으로 사용하는 프롬프트(prompt)는 AI 모델과 상호 작용하는 데 사용됩니다. 모델에 대한 호출을 연결하는 것이 지원되며, 더 어려운 문제의 경우 문제를 분해하고 조각별로 해결할 수 있습니다. 출력 파싱은 문자열 출력을 예를 들어 CSV나 JSON으로 변환할 수 있게 해줍니다. 모델은 프로젝트의 FAQ와 같은 사용자 정의 데이터를 사용할 수 있으며, 특정 대화 스타일을 학습할 수 있습니다. 테스트를 통한 답변 평가는 프로젝트의 품질을 유지하는 데 사용될 수 있습니다.

Spring AI는 실험적인 프로젝트로 스냅샷 릴리즈만 있기 때문에, 다음과 같은 저장소를 추가한 후에 사용할 수 있습니다: (저장소 정보가 누락되어 있습니다)

<repositories>
    <repository>
        <id>spring-snapshots</id>
        <name>Spring Snapshots</name>
        <url>https://repo.spring.io/snapshot</url>
        <releases>
            <enabled>false</enabled>
        </releases>
    </repository>
</repositories>

When using OpenAI the following dependency may be used:

<dependency>
    <groupId>org.springframework.experimental.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>0.2.0-SNAPSHOT</version>
</dependency>

In order to use Azure OpenAI instead of OpenAI, the following dependency may be used:

<dependency>
    <groupId>org.springframework.experimental.ai</groupId>
    <artifactId>spring-ai-azure-openai-spring-boot-starter</artifactId>
    <version>0.2.0-SNAPSHOT</version>
</dependency>

대안으로, Spring CLI를 사용하여 새 프로젝트를 생성할 수 있습니다. Spring CLI는 다양한 운영 체제를 위한 바이너리(binaries)를 제공하며, 문서(documentation)에서 더 많은 정보를 찾을 수 있습니다. 다음 명령어는 OpenAI를 위한 새 프로젝트를 생성하는 데 사용될 수 있습니다:

spring boot new ai
spring boot new ai-azure

Spring CLI 시작 가이드(Getting Started)는 Spring AI로 프로젝트를 생성하는 데 대한 더 많은 정보를 제공합니다.

프로젝트가 OpenAI나 Azure OpenAI를 사용하기 전에 API 키를 제공해야 합니다. OpenAI의 경우 API Keys 페이지에서 토큰을 생성할 수 있습니다. 그런 다음 이 토큰은 spring.ai.openai.api-key 속성을 위해 사용 가능해야 하며, 예를 들어 환경 변수를 내보내는 방식으로 설정할 수 있습니다:

export SPRING_AI_OPENAI_API_KEY=<INSERT KEY HERE>

Azure OpenAI의 경우, 엔드포인트와 api-key는 Azure OpenAI Service  섹션에서 가져올 수 있습니다. 그런 다음 이 토큰들은 spring.ai.azure.openai.api-key와 같은 속성을 위해 사용 가능해야 하며, 예를 들어 환경 변수를 내보내는 방식으로 설정할 수 있습니다:

export SPRING_AI_AZURE_OPENAI_API_KEY=<INSERT KEY HERE>
export SPRING_AI_AZURE_OPENAI_ENDPOINT=<INSERT ENDPOINT URL HERE>

이제 이 설정을 사용하여 Azure OpenAI 서비스에 질문을 할 수 있습니다:

AiClient aiClient = new AzureOpenAiClient();
String response = aiClient.generate("What's the answer to the Ultimate Question of Life, the Universe, and Everything?");

실제로, Spring Boot Starter는 AiClient를 생성할 것이며, 이를 통해 단 한 줄의 코드로 AI 모델과 상호 작용할 수 있게 됩니다.

하드 코딩된 질문을 생성하는 대신에, 프롬프트 템플릿을 사용할 수도 있습니다. 먼저 .st 확장자를 가진 파일을 생성해야 합니다. 예를 들어, ‘your-prompt.st’라는 파일을 만들고, 그 안에 ‘topic’이라는 플레이스홀더를 포함한 문장을 넣습니다:

Tell me a fun fact about {topic}

다음으로, AI 모델을 호출할 때 프롬프트 템플릿을 사용할 수 있습니다. 예를 들어, ‘topic’ 템플릿에 ‘developers’라는 값을 제공하는 방식으로 사용할 수 있습니다:

@Bean
ApplicationRunner applicationRunner (@Value("classpath:/your-prompt.st) 
        Resource resource, AiClient aiClient) { return args -> {

    var promptTemplate = new PromptTemplate(resource);
    var prompt = promptTemplate.create(Map.of("topic", "developers");

    var response = aiClient.generate(prompt);
    System.out.println(response.getGeneration());
    };
}

이 프로젝트는 사용자가 모델에 사용자 정의 정보나 데이터를 제공할 수 있게 해줍니다. 예를 들어, 회사 내부 정보인 자주 묻는 질문(FAQs)이나 모델이 생성될 당시에는 사용할 수 없었던 새로운 데이터 등을 제공할 수 있습니다. 관련 정보에 대한 리소스를 정의할 수 있습니다:

@Value("classpath:/myCustomInformation.txt) Resource myCustomInformation;

Then the context may be added as a prompt template:

var prompt = "... {context}...";

Lastly, the context is filled with the provided information:

var promptTemplate = new PromptTemplate( prompt);
promptTemplate.create(Map.of("context", myCustomInformation)));

프롬프트 입력은 AI 모델로 전송하기 전에 먼저 검증됩니다. 이렇게 하면 요청 수를 줄이고 따라서 비용을 절감할 수 있습니다.

VMware의 Spring 개발자 옹호자인 Josh Long은 Spring AI 프로젝트의 리더인 Dr. Mark Pollack와 interview 를 진행했으며, 그들은 다양한 가능성을 논의하고 여러 코드 예시(examples.)를 만들었습니다.

참조 문서(reference documentation)에서 더 많은 정보를 찾을 수 있으며, Azure OpenAI에 대한 지침이 있는 워크샵(workshop)도 이용할 수 있습니다. 워크샵 예시는 올바른 의존성을 사용함으로써 Azure OpenAI 대신 OpenAI를 지원하도록 변환될 수 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다