Spring AI'a Giriş: Java Dünyasında Yapay Zeka Entegrasyonu
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
| Özellik | Açıklama |
|---|---|
| Model Çeşitliliği | OpenAI, Azure, HuggingFace, Ollama gibi birçok LLM sağlayıcısını destekler |
| Prompt Template | Dinamik prompt oluşturma ve yönetimi |
| RAG Desteği | Retrieval-Augmented Generation ile kendi verilerinizi LLM’e entegre etme |
| Çok Modlu Destek | Metin, görsel ve yakında ses işleme |
| Output Parsers | LLM çıktılarını Java nesnelerine dönüştürme |
Neden Spring AI?
Bir Spring geliştiricisi olarak neden Spring AI kullanmalısınız?
- Familiarite: Spring Boot’un auto-configuration özelliği sayesinde, yapay zeka entegrasyonu diğer Spring modülleri kadar kolay.
- Soyutlama: Farklı LLM sağlayıcıları arasında geçiş yaparken kodunuzu değiştirmek zorunda değilsiniz.
- 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:
- API Maliyetleri: LLM çağrıları maliyetli olabilir. Özellikle üretim ortamında rate limiting ve maliyet takibi yapın.
- Hata Yönetimi: LLM servisleri zaman zaman yanıt vermeyebilir.
RetryTemplateveya Spring’in@Retryableözelliğini kullanın. - 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.