Spring AI'a Giriş: Java Dünyasında Yapay Zeka Entegrasyonu

3 min read | Edit on GitHub

Yapay zeka ve büyük dil modelleri (LLM) son iki yılda yazılım dünyasını kökten değiştirdi. Python geliştiricileri için LangChain, LlamaIndex gibi kütüphaneler hızla standart haline gelirken, Java ve Spring ekosistemindeki geliştiriciler için benzer bir çözüm uzun süre eksik kaldı. İşte Spring AI, tam da bu noktada devreye giriyor.

Bu yazıda, Spring AI’nin ne olduğunu, hangi problemleri çözdüğünü ve basit bir örnek ile nasıl kullanılacağını inceleyeceğiz.

Spring AI Nedir?

Spring AI, Spring ekosistemini yapay zeka ve LLM dünyasıyla buluşturan resmi bir Spring projesidir. Temel amacı, Python’daki LangChain benzeri bir deneyimi Java ve Spring geliştiricilerine sunarken, Spring’in klasik ilkelerini (bağımlılık enjeksiyonu, soyutlama, test edilebilirlik) yapay zeka uygulamalarına taşımaktır.

Temel Özellikler

ÖzellikAçıklama
Model ÇeşitliliğiOpenAI, Azure, HuggingFace, Ollama gibi birçok LLM sağlayıcısını destekler
Prompt TemplateDinamik prompt oluşturma ve yönetimi
RAG DesteğiRetrieval-Augmented Generation ile kendi verilerinizi LLM’e entegre etme
Çok Modlu DestekMetin, görsel ve yakında ses işleme
Output ParsersLLM çıktılarını Java nesnelerine dönüştürme

Neden Spring AI?

Bir Spring geliştiricisi olarak neden Spring AI kullanmalısınız?

  1. Familiarite: Spring Boot’un auto-configuration özelliği sayesinde, yapay zeka entegrasyonu diğer Spring modülleri kadar kolay.
  2. Soyutlama: Farklı LLM sağlayıcıları arasında geçiş yaparken kodunuzu değiştirmek zorunda değilsiniz.
  3. Enterprise Hazır: Spring’in güvenlik, transaction yönetimi ve test desteği yapay zeka uygulamalarınızda da yanınızda.

İlk Spring AI Uygulaması

Hadi basit bir “Chatbot” uygulaması oluşturalım. Bu örnekte OpenAI’ın GPT modellerini kullanacağız.

1. Bağımlılıkları Ekleme

Öncelikle pom.xml dosyanıza Spring AI OpenAI starter’ını ekleyin:

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
    <version>1.0.0-M6</version>
</dependency>

2. Konfigürasyon

application.yml dosyasında OpenAI API anahtarınızı tanımlayın:

spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}
      chat:
        options:
          model: gpt-4o
          temperature: 0.7

3. Chat Client Kullanımı

Spring AI’de en önemli arayüzlerden biri ChatClient. İşte basit bir kullanım:

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ChatController {

    private final ChatClient chatClient;

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

    @GetMapping("/chat")
    public String chat(@RequestParam String message) {
        return chatClient.prompt()
                .user(message)
                .call()
                .content();
    }
}

Bu kadar! Artık /chat?message=Merhaba endpoint’ine yapılan istekler OpenAI modeline yönlendirilecek ve cevap dönecektir.

Prompt Template ve Structured Output

Spring AI sadece basit chat ile sınırlı değil. Daha gelişmiş senaryolar için Prompt Template ve Output Parsers kullanabilirsiniz.

Prompt Template Örneği

String template = """
    Bana {subject} konusunda {tone} bir dille 
    {wordCount} kelimelik bir özet hazırla.
    """;

String response = chatClient.prompt()
    .user(userSpec -> userSpec.text(template)
        .param("subject", "Spring Boot")
        .param("tone", "teknik")
        .param("wordCount", "100"))
    .call()
    .content();

Java Nesnesi Olarak Çıktı

LLM’den gelen JSON çıktısını doğrudan bir Java sınıfına dönüştürebilirsiniz:

public record BookInfo(String title, String author, int year) {}

BookInfo bookInfo = chatClient.prompt()
    .user("1984 kitabının bilgilerini ver")
    .call()
    .entity(BookInfo.class);

RAG (Retrieval-Augmented Generation)

Spring AI’nin en güçlü özelliklerinden biri RAG desteğidir. Kendi dökümanlarınızı (PDF, TXT vb.) vektör veritabanına yükleyip, LLM’in bu verilere dayanarak cevap vermesini sağlayabilirsiniz.

@Autowired
private VectorStore vectorStore;

public String askAboutDocuments(String question) {
    // Belgeler vektör veritabanından çekilir
    List<Document> similarDocs = vectorStore.similaritySearch(question);
    
    // Belgeler context olarak modele verilir
    return chatClient.prompt()
        .user(userSpec -> userSpec.text("""
            Şu belgelere dayanarak soruyu cevapla:
            {documents}
            
            Soru: {question}
            """)
            .param("documents", similarDocs)
            .param("question", question))
        .call()
        .content();
}

Dikkat Edilmesi Gerekenler

Spring AI kullanırken şu noktalara dikkat etmelisiniz:

  1. API Maliyetleri: LLM çağrıları maliyetli olabilir. Özellikle üretim ortamında rate limiting ve maliyet takibi yapın.
  2. Hata Yönetimi: LLM servisleri zaman zaman yanıt vermeyebilir. RetryTemplate veya Spring’in @Retryable özelliğini kullanın.
  3. Güvenlik: Kullanıcı girdilerini doğrudan LLM’e göndermeden önce sanitize edin. Prompt injection saldırılarına karşı dikkatli olun.

Sonuç

Spring AI, Java ve Spring dünyasının yapay zeka devriminden geride kalmayacağını gösteren harika bir proje. Eğer bir Spring geliştiricisiyseniz ve yapay zeka entegrasyonu yapmanız gerekiyorsa, Python’a geçmek yerine Spring AI ile kendi ekosisteminizde kalabilirsiniz.

Kurumsal Java uygulamalarında yapay zeka kullanımı giderek artacak ve Spring AI bu dönüşümde en önemli araçlarınızdan biri olacak. Hemen denemeye başlayın!


Kaynaklar

İletişim

Spring AI veya Java tabanlı yapay zeka uygulamaları hakkında sorularınız için email yoluyla iletişime geçebilirsiniz.

Share this post on: