본문으로 건너뛰기

Spring AI, DeepSeek를 연동하여 챗봇 만들기

· 약 6분

지난한주 DeepSeek가 많은 화제가 됐엇죠? 각종 미디어 메인에 도배가 됐더군요.

이번 글에서는 최대한 간단한 방식으로, Spring AI를 이용하여 DeepSeek API를 연동하고 간단한 AI 챗봇을 구현하는 방법을 소개합니다.

본 글의 내용은 Spring AI와 기타 언어모델 연동에도(OpenAI, Groq 등) 동일한 방식으로 적용할 수 있습니다.

Spring AI: AI 통합을 위한 강력한 도구

Spring AI 통합, 다이어그램

Spring AI는 Spring 생태계에 생성형 AI(Generative AI) 기능을 통합하기 위한 프로젝트로, 개발자가 쉽게 AI 모델을 애플리케이션에 통합할 수 있도록 지원합니다. Spring AI는 다음과 같은 주요 기능을 제공합니다:

  1. 표준화된 API: 다양한 AI 제공자(Anthropic, OpenAI, Microsoft, Amazon, Google, Ollama, DeepSeek 등)와의 통합을 위한 일관된 인터페이스 제공
  2. 모듈화된 구조: 특정 AI 제공자에 종속되지 않는 유연한 아키텍처
  3. 쉬운 통합: Spring Boot의 자동 설정 기능을 활용한 빠른 통합
  4. 확장성: 커스텀 모델 및 옵션 지원을 통한 고급 사용 사례 대응

Spring AI는 특히 엔터프라이즈 환경에서 AI 기능을 빠르게 도입하고 확장할 수 있도록 설계되었습니다.

DeepSeek: 고성능, 저렴한 가격

deepseek 벤치마크

이번에 DeepSeek R1 모델을 공개하며 많이 알려졋는데요, OpenAI-o1 못지않은 성능에 저력한 가격, 거기에 오픈소스로 배포하며 미국 자본시장까지 뒤흔들정도로 업계에 충격을 준 회사입니다.

  • 고성능 언어 모델: OpenAI-o1 수준의 성능을 제공하는 고급 언어 모델
  • OpenAI 호환 API: OpenAI의 API 표준을 준수하여 기존 OpenAI 기반 애플리케이션과의 호환성 보장
  • 비용 효율성: OpenAI에 비해 상대적으로 저렴한 가격 정책

사전 준비

  • Java 17+ 설치
  • Gradle 8+ 설치
  • DeepSeek API 키 발급 (DeepSeek 공식 사이트)
  • 환경 변수 설정 (API 키는 application.yml에 직접 입력하지 않고 환경 변수로 관리하는 것을 추천)

기능 구현

1. build.gradle 설정

먼저, Spring Boot 프로젝트를 생성하고 build.gradle 파일에서 다음과 같이 의존성 설정을 합니다.

build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.4.2'
id 'io.spring.dependency-management' version '1.1.7'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}

repositories {
mavenCentral()
maven { url 'https://repo.spring.io/milestone' }
maven { url 'https://repo.spring.io/snapshot' }
}

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter:1.0.0-M5'
// implementation 'org.springframework.ai:spring-ai-ollama-spring-boot-starter:1.0.0-M5'
}

spring-ai-openai-spring-boot-starter는 OpenAI API 표준을 준수하는 모든 서비스와 호환됩니다.

2. application.yml 작성

다음으로, application.yml에서 DeepSeek API와의 연결과 모델 옵션을 설정합니다.

base-url, api-key,model 값만 변경하여 기타 언어모델과의 연동이 가능합니다.

spring:
application:
name: spring-ai-deepseek
ai:
openai:
base-url: https://api.deepseek.com
api-key: ${DEEPSEEK_API_KEY}
chat:
options:
# model: deepseek-chat
model: deepseek-reasoner
stream-usage: false

# ollama integration
# ollama:
# base-url: http://localhost:11434
# chat:
# options:
# model: deepseek-r1:7b

3. Controller 구현

이제 Spring AI를 통해 DeepSeek API를 호출하는 Controller를 작성합니다.

@RestController
@CrossOrigin(origins = "*")
public class ChatController {

private final ChatClient chatClient;

public ChatController(ChatClient.Builder builder) {
chatClient = builder.build();
}

@PostMapping("/chat")
public ChatResponse chat(@RequestParam String prompt) {
return chatClient.prompt().user(prompt).call().chatResponse();
}
}

API 테스트

사용자 급증으로 Deppseek API서비스는 아직까지 안정적이지 않습니다..API오류 발생시 아래 링크에서 서비스 상태 확인바랍니다.

서비스 상태 확인: https://status.deepseek.com/

Spring AI, Deppseek 연동 테스트

Chat UI 적용

저는 Cursor 도움을 받아 간단히 만들어봤는데 이 부분의 소스 코드는 너무 길어 생략하겠습니다. 여러분도 자신에게 편한 AI 도구를 활용하여 직접 원하는 대로 인터페이스를 만들어 보시길 추천드립니다.

Spring AI, Deppseek Chat UI

마무리

본 가이드에서는 Spring AI를 이용하여 DeepSeek API를 연동하고 간단한 AI 챗봇을 개발하는 방법을 소개했습니다. DeepSeek은 OpenAI의 강력한 경쟁자로서, 앞으로 AI 시장에 큰 영향을 미칠 것으로 예상됩니다.