Atlassian Forge platformunda doğal dil kullanarak SQL sorguları oluşturmayı keşfedin. Rovo (LLM) ve Forge SQL (TiDB) entegrasyonu ile veri erişimini nasıl güvenli ve verimli hale getirebileceğinizi öğrenin. Bu makale, kurumsal veri analizi süreçlerinizi basitleştirmek için kapsamlı bir rehber sunuyor.
Günümüz iş dünyasında veri, en değerli varlıklardan biri haline geldi. Ancak, bu verilere erişmek ve anlamlı içgörüler elde etmek, genellikle teknik bilgi gerektiren karmaşık bir süreçtir. İş birimleri, pazarlama ekipleri, proje yöneticileri veya insan kaynakları departmanları, anlık olarak verilere ihtiyaç duyduğunda genellikle IT ekiplerinin veya veri analistlerinin yardımına başvurmak zorunda kalırlar. Bu durum, hem zaman kaybına yol açar hem de veri erişiminde bir darboğaz oluşturur.
Peki ya herkes, teknik bir dil olan SQL’i öğrenmeye gerek kalmadan, kendi doğal diliyle veri tabanına soru sorabilseydi? “Geçen çeyrekte en çok satan ürünler hangileri?” ya da “A takımı çalışanlarının tamamladığı görevlerin ortalama süresi nedir?” gibi soruları doğrudan sorup anında cevap alabilseydi? İşte tam da bu noktada Doğal Dil SQL (Natural Language SQL) devreye giriyor. Büyük Dil Modellerinin (LLM – Large Language Models) gelişimi sayesinde, insan dilini anlayıp bunu yapısal bir sorgu diline, yani SQL’e çevirebilen sistemler artık hayal olmaktan çıktı. Bu teknoloji, veri analizini demokratikleştirerek, her seviyeden kullanıcının verilere daha hızlı ve etkin bir şekilde ulaşmasını sağlıyor. Özellikle Atlassian ekosistemi gibi işbirliğinin merkezinde yer alan platformlarda, bu tür bir yetenek, ekiplerin karar alma süreçlerini hızlandırmada kritik bir rol oynayabilir.
Bu makalede, Atlassian’ın serverless uygulama geliştirme platformu Forge üzerinde, Rovo (bir LLM çözümü) ile doğal dil sorgularını nasıl SQL’e çevireceğimizi ve bu SQL sorgularını Forge SQL (TiDB tabanlı) kullanarak nasıl güvenli bir şekilde çalıştıracağımızı adım adım inceleyeceğiz. Amacımız, sadece teknik bir çözüm sunmak değil, aynı zamanda bu sürecin güvenliğini, performansını ve gerçek dünya senaryolarındaki uygulanabilirliğini derinlemesine ele almaktır. Böylece, veri tabanı erişimini basitleştirirken, kurumsal güvenlik standartlarından ödün vermeyen sağlam bir mimariyi nasıl inşa edebileceğinizi göreceksiniz. Haydi, bu heyecan verici yolculuğa çıkalım ve doğal dilin gücüyle veri analizi dünyasını yeniden şekillendirelim.
Atlassian Forge, Rovo ve TiDB: Bu Teknolojiler Neyi Çözüyor?
Doğal dilin gücüyle veri tabanlarına erişim, modern iş dünyasının en büyük hedeflerinden biri haline geldi. Bu hedefe ulaşmak için kullandığımız teknolojilerin her birinin kendine özgü bir rolü ve önemi bulunuyor. Atlassian Forge, Rovo ve TiDB, bu ekosistemde bir araya gelerek güçlü, ölçeklenebilir ve güvenli bir çözüm sunuyor. Şimdi bu temel kavramları detaylıca inceleyelim.
Atlassian Forge Nedir ve Neden Önemli?
Atlassian Forge, geliştiricilerin Jira, Confluence ve diğer Atlassian ürünleri için hızlı, güvenli ve ölçeklenebilir uygulamalar oluşturmasına olanak tanıyan serverless (sunucusuz) bir platformdur. Geleneksel uygulama geliştirme yöntemlerinin aksine, Forge, altyapı yönetimiyle uğraşma ihtiyacını ortadan kaldırır. Bu sayede geliştiriciler, doğrudan uygulamanın iş mantığına ve kullanıcı deneyimine odaklanabilirler. Forge uygulamaları, Atlassian Cloud altyapısında çalışır ve yerleşik güvenlik özellikleriyle birlikte gelir, bu da onları kurumsal kullanıma son derece uygun hale getirir. Özellikle, veri erişimi gerektiren uygulamalar için Forge SQL gibi yönetilen veri tabanı hizmetleri sunması, geliştiricilerin işini büyük ölçüde kolaylaştırır.
Forge’un sunduğu en büyük avantajlardan biri, “compute isolation” (hesaplama izolasyonu) ve “data residency” (veri ikametgahı) gibi önemli güvenlik ve uyumluluk özellikleri sağlamasıdır. Bu sayede, uygulamanızın çalıştığı ortamın ve verilerinizin nerede tutulduğunun kontrolünü elinizde tutabilirsiniz. Ayrıca, Atlassian platformlarıyla derin entegrasyonu sayesinde, mevcut iş akışlarınıza sorunsuz bir şekilde entegre olabilen güçlü uygulamalar geliştirebilirsiniz. Bu özellikler, doğal dil SQL gibi hassas veri erişimi gerektiren bir uygulamanın temelini oluşturmak için vazgeçilmezdir.
Rovo (LLM) ile Doğal Dilin Gücü: Dil ve Veri Arasındaki Köprü
Rovo, Atlassian’ın yapay zeka alanındaki stratejik yatırımlarından biri olarak konumlandırılan, büyük dil modelleri (LLM) tabanlı bir asistandır. Henüz genel kullanıma sunulmamış olsa da, bu makalede Rovo’yu, doğal dil sorgularını SQL’e çevirmek için kullandığımız varsayımsal bir LLM çözümü olarak ele alacağız. LLM’ler, muazzam miktarda metin verisi üzerinde eğitilerek insan dilinin inceliklerini, gramerini ve bağlamını anlamayı öğrenirler. Bu yetenekleri sayesinde, “geçen ay kaç yeni müşteri edindik?” gibi basit bir doğal dil sorusunu, veri tabanı şemasını dikkate alarak uygun bir SQL sorgusuna dönüştürebilirler.
Rovo gibi bir LLM’in gücü, sadece kelimeleri değil, aynı zamanda niyeti de anlamasında yatar. Örneğin, “geçen ay” ifadesinin hangi tarih aralığına denk geldiğini veya “müşteri” kelimesinin veri tabanında hangi tabloya karşılık geldiğini, eğitildiği veriler ve sağlanan bağlam (veri tabanı şeması) sayesinde yorumlayabilir. Bu, kullanıcıların veri tabanı terminolojisini veya SQL sentaksını bilmeden doğrudan iş sorularını sorabilmeleri anlamına gelir. Ancak, LLM’lerin doğru ve güvenli SQL üretmesi için dikkatli bir prompt mühendisliği ve çıktı doğrulama süreçleri şarttır. Aksi takdirde, hatalı veya güvensiz sorgular oluşturma riski ortaya çıkabilir. Bu yüzden, Rovo’yu kullanırken, güvenlik ve doğruluk her zaman en üst önceliğimiz olacaktır.
Forge SQL ve TiDB: Veri Tabanı Seçimi Neden Kritik?
Forge SQL, Atlassian Forge uygulamaları için özel olarak tasarlanmış, yönetilen bir veri tabanı hizmetidir. Geliştiricilerin veri tabanı yönetimi, yedekleme veya ölçeklendirme gibi operasyonel yüklerle uğraşmasına gerek kalmadan, güvenli ve performanslı veri depolama çözümleri sunar. Forge SQL’in altında yatan teknoloji ise genellikle TiDB‘dir. TiDB (A Distributed SQL Database), açık kaynaklı, MySQL uyumlu ve dağıtık bir SQL veri tabanıdır. Bulut yerel (cloud-native) mimarisi sayesinde, yatay olarak kolayca ölçeklenebilir ve yüksek erişilebilirlik sunar.
TiDB’nin seçimi, özellikle Forge gibi serverless ve ölçeklenebilir bir platform için kritik öneme sahiptir. Doğal dil SQL sorguları, bazen öngörülemeyen veya kaynak yoğun olabilecek sorgular üretebilir. TiDB’nin dağıtık yapısı, bu tür sorgu yüklerini etkili bir şekilde yönetebilir ve uygulamanızın performansını olumsuz etkilemeden büyüyebilir. MySQL uyumluluğu, mevcut SQL araçları ve becerileriyle entegrasyonu kolaylaştırırken, ACID garantileri (Atomicity, Consistency, Isolation, Durability) veri bütünlüğünü sağlar. Bu özellikler, doğal dil SQL gibi dinamik sorgu oluşturma senaryolarında hem güvenlik hem de güvenilirlik açısından vazgeçilmezdir. Forge SQL ile TiDB’nin entegrasyonu, geliştiricilere güçlü bir veri depolama ve erişim katmanı sunarak, doğal dil SQL uygulamasının temelini sağlam bir zemine oturtur.
Doğal Dil SQL’i Forge’da Güvenli Bir Şekilde Nasıl Uygularız?
Doğal dil SQL yeteneklerini Atlassian Forge platformuna entegre etmek, kullanıcı deneyimini önemli ölçüde geliştiren ancak aynı zamanda ciddi güvenlik ve mimari düşünceler gerektiren bir süreçtir. Veri tabanlarına doğrudan doğal dil ile erişim sağlarken, olası SQL enjeksiyonları, yetkisiz veri erişimi ve performans sorunları gibi riskleri minimize etmek zorundayız. Bu bölümde, Forge üzerinde güvenli bir doğal dil SQL uygulamasının mimarisini, Rovo ile SQL üretim mekanizmalarını ve Forge SQL’in sağladığı güvenlik katmanlarını adım adım inceleyeceğiz.
Mimarinin Temel Taşları: Akış Diyagramı ve Açıklaması
Güvenli bir doğal dil SQL uygulamasının mimarisi, farklı katmanların ve teknolojilerin uyumlu bir şekilde çalışmasını gerektirir. İşte bu sürecin basitleştirilmiş bir akış diyagramı ve her adımın açıklaması:
- Kullanıcı Arayüzü (Forge UI): Kullanıcı, Atlassian ürünleri (Jira, Confluence) içinde çalışan Forge uygulaması arayüzünde doğal dil sorgusunu girer.
- Forge Uygulaması (Backend Resolver): Kullanıcının girdiği doğal dil sorgusu, Forge uygulamasının backend resolver fonksiyonuna iletilir. Bu kısım, tüm iş mantığını ve dış servislerle iletişimi yönetir.
- Rovo (LLM) Servisi: Forge backend, doğal dil sorgusunu, veri tabanı şema bilgisi ve güvenlik kurallarıyla birlikte Rovo’ya (LLM) gönderir. Rovo, bu girdiyi analiz eder ve uygun bir SQL sorgusu üretir.
- SQL Doğrulama ve Güvenlik Katmanı: Rovo’dan dönen SQL sorgusu, Forge backend’de kapsamlı bir doğrulama ve güvenlik kontrolünden geçer. Bu adım, potansiyel SQL enjeksiyonlarını önler ve sorgunun izin verilen tabloları/kolonları kullanıp kullanmadığını kontrol eder.
- Forge SQL (TiDB) Veri Tabanı: Güvenli olduğu onaylanan SQL sorgusu, Forge SQL API aracılığıyla TiDB veri tabanına gönderilir.
- Veri Erişimi ve Sonuçlar: TiDB, sorguyu çalıştırır ve sonuçları Forge uygulamasına geri döndürür.
- Sonuçların Sunumu (Forge UI): Forge uygulaması, elde edilen verileri kullanıcı dostu bir formatta (tablo, grafik vb.) Forge UI’da gösterir.
Bu mimaride her adım, özellikle güvenlik ve doğrulama, kritik öneme sahiptir. Bu katmanlı yaklaşım, veri tabanına erişimi kontrollü ve güvenli bir şekilde gerçekleştirmemizi sağlar.
Rovo ile Doğal Dil Sorgularının SQL’e Çevrilmesi: Mekanizma
Rovo gibi bir LLM’in doğal dil sorgularını doğru ve güvenli SQL’e çevirmesi, sadece dil bilgisiyle sınırlı değildir. LLM’e veri tabanının yapısı hakkında bilgi sağlamak (şema bilgisi) ve belirli güvenlik kısıtlamalarını belirtmek hayati önem taşır. Bu süreç genellikle “prompt mühendisliği” olarak adlandırılır.
Prompt Yapısı:
LLM’e gönderilen prompt, aşağıdaki bileşenleri içermelidir:
- Kullanıcı Sorgusu: “Geçen ay en çok geciken 5 görev hangisi?”
- Veri Tabanı Şeması: Kullanılabilir tablolar, kolonlar, veri tipleri ve aralarındaki ilişkiler hakkında detaylı bilgi. Örneğin:
CREATE TABLE tasks ( task_id INT PRIMARY KEY, project_id INT, status VARCHAR(50), due_date DATE, completed_date DATE, assigned_to VARCHAR(100), created_date DATE ); CREATE TABLE projects ( project_id INT PRIMARY KEY, project_name VARCHAR(255), start_date DATE, end_date DATE ); - Güvenlik ve Kısıtlama Kuralları: LLM'in üretmesi gereken SQL'e getirilen kısıtlamalar. Örneğin:
- Sadece
tasksveprojectstablolarına erişime izin ver. DELETE,UPDATE,INSERTgibi DML (Data Manipulation Language) komutlarını kullanma. SadeceSELECTkomutlarına izin ver.- Belirli kolonları (örneğin hassas bilgileri) sorgulama dışında tut.
- Sorgu sonuçlarını belirli bir limitin üzerinde döndürme (örneğin
LIMIT 100).
- Sadece
- Örnekler (Few-shot learning): Bazı doğal dil sorguları için doğru SQL örnekleri sunmak, LLM'in öğrenme yeteneğini artırabilir ve daha tutarlı sonuçlar üretmesini sağlayabilir.
LLM bu bilgileri kullanarak, doğal dil sorgusunu yorumlar, uygun tabloları ve kolonları seçer ve belirtilen güvenlik kurallarına uygun bir SQL sorgusu oluşturur. Bu süreçte LLM'in bağlamı anlama yeteneği kritik rol oynar. Örneğin, "geçen ay" ifadesini created_date veya due_date kolonlarıyla ilişkilendirmesi gerekebilir.
Forge SQL Güvenlik Katmanları ve TiDB Entegrasyonu
Rovo'nun ürettiği SQL sorgusu ne kadar iyi olursa olsun, veri tabanı seviyesinde de sağlam güvenlik önlemlerinin olması zorunludur. Forge SQL ve altında yatan TiDB, bu konuda güçlü yetenekler sunar:
- Kimlik Doğrulama ve Yetkilendirme (Authentication & Authorization): Forge uygulamaları, Atlassian kimlik doğrulama mekanizmalarıyla entegre çalışır. Forge SQL'e erişim, uygulamanın kendine özel kimlik bilgileriyle yapılır ve bu, doğrudan kullanıcı kimliğiyle değil, uygulamanın yetkileriyle eşleşir. TiDB tarafında, kullanıcılar veya roller için özel izinler tanımlanabilir, böylece her Forge uygulamasının veya hatta her Forge kullanıcısının sadece belirli tabloları veya kolonları okuyabilmesi sağlanır (Role-Based Access Control - RBAC).
- Veri Şifreleme: TiDB, verileri hem depolandığı yerde (at rest) hem de iletilirken (in transit) şifreleyerek veri güvenliğini artırır. Bu, hassas verilerin yetkisiz erişime karşı korunmasını sağlar.
- Giriş Doğrulama ve SQL Enjeksiyonunu Önleme: Forge backend'de üretilen SQL sorgusu, TiDB'ye gönderilmeden önce parametreli sorgulara dönüştürülmelidir. Bu, LLM'in yanlışlıkla veya kasıtlı olarak enjeksiyon denemelerini veri tabanına ulaşmadan engellemenin en etkili yoludur. Doğrudan string birleştirme yerine, parametre bağlama teknikleri kullanılmalıdır.
- Audit Logları (Denetim Kayıtları): TiDB, veri tabanında yapılan tüm sorguları ve değişiklikleri kaydedebilir. Bu denetim kayıtları, olası güvenlik ihlallerini tespit etmek ve uyumluluk gereksinimlerini karşılamak için vazgeçilmezdir.
Bu katmanlı güvenlik yaklaşımı, doğal dil SQL'in gücünü kullanırken, kurumsal düzeyde veri güvenliğinden ödün vermemizi sağlar. Forge'un sağladığı serverless yapı ve TiDB'nin dağıtık mimarisi, bu güvenlik önlemlerini performans düşüşü olmadan uygulamak için ideal bir ortam sunar.
Jira Proje Verilerini Doğal Dil ile Sorgulamak Mümkün Mü? Uygulamalı Senaryo
Teorik bilgiler harika, ancak asıl önemli olan bu teknolojilerin gerçek dünyada nasıl çalıştığını görmektir. Bu bölümde, Jira proje verilerini yöneten bir senaryo üzerinden, doğal dil SQL uygulamasını Forge üzerinde adım adım nasıl geliştireceğimizi inceleyeceğiz. Bu senaryo, bir proje yöneticisinin "geçen ay en çok geciken 5 görev hangisi?" gibi bir soruya anında cevap alabilmesini sağlamayı hedefliyor.
Senaryo Tanımı ve Veri Modeli
Proje yönetimi bağlamında, ekiplerin ve yöneticilerin görevlerin durumu, gecikmeler ve tamamlanma süreleri hakkında hızlı bilgilere ihtiyacı vardır. Geleneksel olarak, bu tür raporları almak için veri tabanı yöneticilerinden veya geliştiricilerden özel sorgular yazmaları istenir. Bizim senaryomuzda, bu süreci otomatikleştireceğiz.
Örnek veri modelimiz, basitleştirilmiş bir görev tablosunu içerecek:
CREATE TABLE tasks (
task_id INT PRIMARY KEY AUTO_INCREMENT,
project_id INT,
summary VARCHAR(255) NOT NULL,
status VARCHAR(50) NOT NULL,
due_date DATE,
completed_date DATE,
assigned_to VARCHAR(100),
created_date DATE DEFAULT CURRENT_DATE
);
Bu tabloda, task_id, project_id, summary (görev özeti), status (Durum: Açık, Devam Ediyor, Tamamlandı, Gecikti), due_date (bitiş tarihi), completed_date (tamamlanma tarihi), assigned_to (atandığı kişi) ve created_date (oluşturulma tarihi) gibi kolonlar bulunmaktadır. status='Gecikti' ve completed_date > due_date kombinasyonları gecikmiş görevleri ifade edebilir.
Forge Uygulaması Geliştirme Adımları
Adım 1: Forge Uygulaması Kurulumu ve UI Tasarımı
İlk olarak, basit bir Forge uygulaması oluşturalım. Bu uygulama, kullanıcının doğal dil sorgusunu girebileceği bir metin alanı ve sonuçları görüntüleyecek bir alan içerecek.
Forge CLI ile yeni bir uygulama oluşturun:
forge create
# Uygulama adı: forge-nl-sql
# Şablon: UI Kit (custom UI)
manifest.yml dosyamızda gerekli izinleri tanımlamalıyız. Özellikle dış API çağrıları için external:fetch:url ve Forge SQL için forge:sql izinlerine ihtiyacımız olacak.
# manifest.yml
modules:
jira:issuePanel:
- key: nl-sql-panel
resource: main-resource
resolver:
function: resolver
context: issue
title: Doğal Dil SQL Sorgu
resources:
- key: main-resource
path: static/hello-world/build
permissions:
scopes:
- 'read:jira-work' # Jira verileriyle etkileşim için (genel bağlamda)
external:
fetch:
- 'https://rovo.example.com/*' # Varsayımsal Rovo API URL'i
forge:sql:
- default
Şimdi UI kısmını oluşturalım. static/hello-world/src/App.jsx dosyasını güncelleyelim:
import React, { useState } from 'react';
import { Button, Textfield, Table, Tbody, Tr, Td, Th, Thead, Box, xcss } from '@atlaskit/primitives';
import { invoke } from '@forge/bridge';
const tableXcss = xcss({
marginTop: 'space.200',
width: '100%',
});
function App() {
const [naturalLanguageQuery, setNaturalLanguageQuery] = useState('');
const [sqlResult, setSqlResult] = useState(null);
const [loading, setLoading] = useState(false);
const [error, setError] = useState(null);
const handleQuerySubmit = async () => {
setLoading(true);
setError(null);
try {
const response = await invoke('executeNaturalLanguageQuery', { query: naturalLanguageQuery });
setSqlResult(response);
} catch (err) {
console.error(err);
setError('Sorgu çalıştırılırken bir hata oluştu: ' + err.message);
} finally {
setLoading(false);
}
};
return (
Doğal Dil SQL Sorgula
setNaturalLanguageQuery(e.target.value)}
width="large"
/>
{error && (
{error}
)}
{sqlResult && sqlResult.length > 0 && (
{Object.keys(sqlResult[0]).map((key) => (
{key}
))}
{sqlResult.map((row, rowIndex) => (
{Object.values(row).map((value, colIndex) => (
{value !== null ? value.toString() : 'NULL'}
))}
))}
)}
{sqlResult && sqlResult.length === 0 && !loading && (
Sorgunuzla eşleşen veri bulunamadı.
)}
);
}
export default App;
Adım 2: Rovo Entegrasyonu ve SQL Üretimi
Şimdi Forge backend kısmını (src/index.js) oluşturalım. Bu kısım, doğal dil sorgusunu Rovo'ya gönderecek, dönen SQL'i doğrulayacak ve Forge SQL üzerinde çalıştıracak. Rovo ile etkileşim, harici bir API çağrısı şeklinde olacaktır. Güvenlik nedeniyle, bu çağrıda API anahtarı gibi hassas bilgileri doğrudan kodda değil, Forge ortam değişkenlerinde tutmak önemlidir.
import ForgeApi, { route, Route } from '@forge/api';
import { storage, fetch } from '@forge/api';
const ROVO_API_URL = 'https://rovo.example.com/sql-generator'; // Varsayımsal Rovo API uç noktası
const ROVO_API_KEY = await storage.getSecret('ROVO_API_KEY'); // Forge Secret Storage'dan alınır
const TASK_SCHEMA = CREATE TABLE tasks (
task_id INT PRIMARY KEY,
project_id INT,
summary VARCHAR(255),
status VARCHAR(50),
due_date DATE,
completed_date DATE,
assigned_to VARCHAR(100),
created_date DATE
);
-- Mevcut tablolar: tasks
-- Notlar:
-- - 'status' kolonunda 'Gecikti' değeri, görevin tamamlanma tarihinin bitiş tarihini geçtiği anlamına gelir.
-- - 'due_date' görevin bitiş tarihidir.
-- - 'completed_date' görevin tamamlandığı tarihtir.
-- - 'created_date' görevin oluşturulma tarihidir.;
const SECURITY_RULES = -- Güvenlik Kuralları:
-- Sadece SELECT sorgularına izin verilir. INSERT, UPDATE, DELETE yasaktır.
-- Sadece 'tasks' tablosuna erişime izin verilir.
-- Sorgu sonuçları 100 satırla sınırlandırılmalıdır (LIMIT 100).
-- Hassas veri kolonları (örneğin 'assigned_to' gibi kişisel bilgiler) direkt olarak döndürülmemelidir.;
ForgeApi.onEvent('executeNaturalLanguageQuery', async (event, payload) => {
const { query } = payload;
if (!query) {
throw new Error('Doğal dil sorgusu boş olamaz.');
}
try {
// 1. Rovo'ya doğal dil sorgusunu gönder ve SQL al
const rovoResponse = await fetch(ROVO_API_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': Bearer ${ROVO_API_KEY},
},
body: JSON.stringify({
natural_language_query: query,
schema_context: TASK_SCHEMA,
security_constraints: SECURITY_RULES,
dialect: 'TiDB', // veya MySQL
}),
});
if (!rovoResponse.ok) {
const errorData = await rovoResponse.json();
throw new Error(Rovo API hatası: ${rovoResponse.status} - ${errorData.message || rovoResponse.statusText});
}
const { generated_sql } = await rovoResponse.json();
console.log('Rovo tarafından üretilen SQL:', generated_sql);
// 2. Üretilen SQL'i Güvenlik Doğrulamasından Geçir
// Bu kısım kritik! LLM tarafından üretilen SQL'i asla doğrudan çalıştırmayın.
// Gerçek bir uygulamada, burada kapsamlı bir regex analizi, AST parsing veya
// bir izin listesine göre doğrulama yapılmalıdır.
// Örnek: Sadece SELECT komutlarına izin ver. DELETE, UPDATE, INSERT engelle.
// İzin verilen tabloları kontrol et.
if (!generated_sql.trim().toLowerCase().startsWith('select')) {
throw new Error('Sadece SELECT sorgularına izin verilmektedir.');
}
if (!generated_sql.toLowerCase().includes('limit')) {
generated_sql += ' LIMIT 100'; // Güvenlik amacıyla limit ekle
}
// Daha karmaşık doğrulama kuralları buraya eklenecektir.
// 3. Forge SQL ile Sorguyu Çalıştır
const sqlClient = ForgeApi.ForgeSQL('default'); // 'default' varsayılan veri kaynağını kullanır
const { rows } = await sqlClient.query(generated_sql); // Bu metod parametreli sorgu desteği sunar
return rows;
} catch (error) {
console.error('Doğal dil sorgusu işlenirken hata:', error);
throw new ForgeApi.CustomError(error.message, 500); // UI'ya daha anlamlı bir hata döndür
}
});
Uzman İpucu: Rovo veya benzeri LLM servislerinden gelen SQL sorgularını asla doğrudan veri tabanında çalıştırmayın. Güçlü bir güvenlik katmanı ekleyerek, sadece izin verilen komutları ve tabloları içeren sorguların çalışmasını sağlayın. Bu, SQL enjeksiyonu riskini önemli ölçüde azaltır.
Adım 3: Forge SQL (TiDB) İle Güvenli Veri Erişimi
Yukarıdaki kod bloğunda gördüğünüz gibi, Forge SQL API'si (ForgeApi.ForgeSQL('default')) kullanılarak TiDB'ye erişim sağlanır. Forge SQL, SQL enjeksiyonlarına karşı dahili korumalar sunar, ancak LLM'den gelen çıktının önceden doğrulanması her zaman en iyi pratiktir.
Veri tabanı şeması ve güvenlik kuralları, LLM'e gönderilen prompt'ta açıkça belirtilir. Bu, LLM'in güvenli ve doğru SQL üretmesine yardımcı olur. Örneğin, SECURITY_RULES kısmında "Sadece SELECT sorgularına izin verilir" gibi kurallar, LLM'in bir DELETE veya UPDATE komutu üretmesini engellemeye çalışır. Ancak, LLM'lerin hala hallüsinasyon yapabileceği veya istenmeyen çıktılar üretebileceği unutulmamalıdır, bu yüzden backend'deki doğrulama adımı vazgeçilmezdir.
Bu adımlar, Jira proje verilerini doğal dil ile sorgulamak için sağlam bir temel oluşturur. Kullanıcılar, teknik detaylarla boğuşmadan anında verilere erişebilirken, geliştiriciler de güvenlikten ve performansdan ödün vermez.
Doğal Dil SQL Uygulamalarında Güvenlik ve Performans Nasıl Sağlanır?
Doğal dil SQL uygulamalarının başarısı, sadece kullanıcı dostu arayüzleriyle değil, aynı zamanda temel güvenlik ve performans yetenekleriyle de ölçülür. Bu tür sistemlerde, özellikle hassas kurumsal verilere erişim söz konusu olduğunda, güvenliği sağlamak mutlak bir zorunluluktur. Aynı şekilde, kullanıcıların anında yanıt beklediği modern uygulamalarda performans, kullanıcı deneyimi açısından kritik bir faktördür. Bu bölümde, Forge, Rovo ve TiDB üçlüsüyle bu zorlukların üstesinden nasıl gelebileceğimizi detaylandıracağız.
SQL Enjeksiyonunu Önleme ve Veri Maskeleme
Büyük Dil Modelleri (LLM'ler) tarafından üretilen SQL sorguları, potansiyel güvenlik riskleri taşıyabilir. LLM'in kötü niyetli girdileri yanlış yorumlayarak veya yanlışlıkla hatalı bir sorgu üreterek SQL enjeksiyonuna yol açması mümkündür. Bu riski minimize etmek için çok katmanlı bir savunma stratejisi izlemeliyiz:
- LLM Çıktısının Kapsamlı Doğrulanması: Rovo'dan dönen her SQL sorgusu, veri tabanına gönderilmeden önce Forge backend'de kapsamlı bir analizden geçirilmelidir. Bu doğrulama şunları içerebilir:
- Komut Kontrolü: Yalnızca
SELECTkomutlarının çalışmasına izin verin.INSERT,UPDATE,DELETE,DROP TABLEgibi DML/DDL komutlarını kesinlikle engelleyin. - Tablo/Kolon Erişim Kontrolü: Sorgunun yalnızca izin verilen tablolara ve kolonlara eriştiğini doğrulayın. Örneğin, maaş bilgilerini içeren bir tabloya erişimini yasaklayabilirsiniz.
- Anahtar Kelime Kara Listesi: Potansiyel olarak zararlı olabilecek anahtar kelimeleri (
UNION ALL,EXEC,XP_CMDSHELL) içeren sorguları reddedin. - Sorgu Karmaşıklığı Kontrolü: Çok uzun, fazla sayıda
JOINiçeren veya aşırı alt sorgulu sorguları reddederek hizmet reddi (DoS) saldırılarını veya performans sorunlarını önleyin.
- Komut Kontrolü: Yalnızca
- Parametreli Sorgular: En iyi güvenlik uygulaması, LLM'in ürettiği SQL'i doğrudan çalıştırmak yerine, parametreli sorguları kullanmaktır. Forge SQL API'sinin bu desteği varsa, kullanıcı girdilerini (eğer SQL'e doğrudan dahil ediliyorsa) parametre olarak geçirin. Bu, kullanıcı girdilerini SQL kodu olarak değil, veri olarak işler ve enjeksiyonları önler.
- Rol Tabanlı Erişim Kontrolü (RBAC) ve En Az Ayrıcalık Prensibi: TiDB'de, farklı kullanıcı veya uygulamalar için farklı roller ve yetkiler tanımlayın. Forge uygulamasının TiDB'ye erişmek için kullandığı kullanıcı, sadece okuma yetkisine sahip olmalı ve sadece belirli tablolar üzerinde çalışabilmelidir. Bu, bir güvenlik ihlali durumunda bile potansiyel zararı sınırlar.
- Veri Maskeleme ve Şifreleme: Hassas veri içeren kolonlar için (örneğin e-posta, kimlik numarası), veri maskeleme uygulayın. Bu, verileri sorgulayan kişilerin, tam değerleri görmek yerine maskelenmiş versiyonlarını (örn:
*@example.com) görmesini sağlar. TiDB'nin veri şifreleme özellikleri, depolanan ve iletilen verilerin güvenliğini artırır.
Sorgu Optimizasyonu ve TiDB İle Ölçeklenebilirlik
LLM'ler, bazen insan bir analistin aklına gelmeyecek kadar karmaşık veya suboptimal SQL sorguları üretebilir. Bu durum, büyük veri kümelerinde performans sorunlarına yol açabilir. TiDB'nin dağıtık mimarisi ve Forge'un serverless yapısı bu zorlukların üstesinden gelmek için önemli avantajlar sunar:
- LLM Prompt Mühendisliği ile Optimize Sorgular: LLM'e gönderilen prompt'ta, performans ipuçları (örneğin, "join'leri minimize et", "index kullanmaya çalış") veya belirli bir tablo boyutu için optimum sorgu desenleri hakkında bilgi verebiliriz.
- TiDB'nin Dağıtık Yapısı: TiDB, veriyi ve iş yükünü birden fazla sunucuya dağıtarak yatay ölçeklenebilirlik sağlar. Sorgu yoğunluğu arttığında veya veri büyüdüğünde, yeni düğümler ekleyerek performansı kolayca artırabilirsiniz. Bu, geleneksel tek düğümlü veri tabanlarında sıkça karşılaşılan performans darboğazlarını ortadan kaldırır.
- İndeksleme Stratejileri: TiDB'de doğru indeksleri oluşturmak, sorgu performansını dramatik bir şekilde artırabilir. LLM tarafından üretilen sorgu kalıplarını analiz ederek, en sık kullanılan kolonlar üzerinde uygun indeksleri tanımlayabilir ve uygulayabiliriz.
- Sorgu Önbellekleme (Caching): Sık tekrarlanan veya aynı parametrelerle çalıştırılan sorgular için bir önbellekleme katmanı eklemek, veri tabanı yükünü azaltır ve yanıt sürelerini hızlandırır. Forge uygulamasında basit bir önbellek mekanizması veya TiDB'nin kendi önbellekleme yetenekleri kullanılabilir.
- Sorgu Zaman Aşımı: Aşırı kaynak tüketen sorguların sistemi bloke etmesini önlemek için, Forge backend'de veya TiDB'de sorgulara zaman aşımı limitleri uygulayın. Uzun süren sorguları otomatik olarak sonlandırın.
Uzman İpucu: Karmaşık doğal dil sorgularında performans sorunları yaşıyorsanız, LLM'den sadece SQL değil, aynı zamanda "EXPLAIN" çıktısı gibi performans analizi bilgileri de isteyebilirsiniz. Bu, sorunlu sorgu kısımlarını hızlıca tespit etmenize yardımcı olabilir.
Mobil Uyumluluk ve Kullanıcı Deneyimi
Atlassian Forge uygulamaları, genellikle Jira veya Confluence gibi web tabanlı arayüzlerde çalışır. Ancak, bu arayüzlere mobil cihazlardan da erişilebilir. Bu nedenle, Forge uygulamasının kullanıcı arayüzünün mobil uyumlu olması kritik önem taşır.
- Atlassian Design System (ADS): Forge UI Kit, Atlassian Design System'i temel alır. Bu sistem, varsayılan olarak mobil cihazlarda iyi görünen ve çalışan bileşenler sunar. Bu bileşenleri kullanarak, responsif bir tasarım elde edebilirsiniz.
- Esnek Tasarım Yaklaşımı: Metin alanları, tablolar ve düğmeler gibi UI elemanlarının farklı ekran boyutlarına uyum sağlaması için esnek kutu modelleri (flexbox) veya ızgara sistemleri (grid) kullanın.
- Media Query Örnekleri: CSS media query'ler ile belirli ekran boyutlarına özel stil ayarlamaları yapabilirsiniz.
- Basit ve Anlaşılır Arayüz: Özellikle mobil cihazlarda, doğal dil sorgu alanının sade ve kolay kullanılabilir olması gerekir. Aşırı karmaşık arayüzler, mobil kullanıcılar için deneyimi kötüleştirebilir.
Bu güvenlik ve performans stratejileri, Forge üzerinde doğal dil SQL uygulamanızın sadece güçlü değil, aynı zamanda güvenilir ve hızlı olmasını sağlar. Doğru mimari ve dikkatli uygulama ile, kullanıcılarınızın verilere erişimini dönüştürebilirsiniz.
Dev Şirketler Doğal Dil SQL'i Nasıl Kullanıyor? Bir Vaka İncelemesi
Doğal dil SQL yetenekleri, özellikle büyük ölçekli kurumsal ortamlarda, veri erişimi ve analiz süreçlerini radikal bir şekilde dönüştürme potansiyeline sahiptir. Şimdi, hayali ama gerçekçi bir senaryo üzerinden, çokuluslu bir yazılım şirketi olan "GlobalTech"in bu teknolojiyi Atlassian Forge platformunda nasıl başarıyla uyguladığını inceleyelim.
Vaka Tanımı: GlobalTech'in Veri Erişim Sorunu
GlobalTech, dünya genelinde binlerce çalışana sahip, birden fazla ürün geliştiren ve Jira, Confluence gibi Atlassian araçlarını yoğun bir şekilde kullanan bir şirkettir. Şirketin en büyük sorunlarından biri, departmanlar arası veri erişimindeki yavaşlıktı. Pazarlama, satış, İK ve operasyon ekipleri, günlük iş akışları içinde sürekli olarak belirli verilere (müşteri eğilimleri, proje performansı, çalışan metrikleri, satış raporları vb.) ihtiyaç duyuyordu. Ancak, bu verilere ulaşmak için ya özel raporlar talep etmeleri ya da veri analistlerinin takvimine girmeleri gerekiyordu. Bu süreç, genellikle günlerce hatta haftalarca sürebiliyor, karar alma süreçlerini yavaşlatıyor ve ekiplerin çevikliğini kısıtlıyordu.
IT departmanı, sürekli artan raporlama talepleri altında eziliyor, mevcut araçlar ise herkesin kolayca kullanabileceği esnekliği sunmuyordu. Bu durum, "veri siloları" sorununu tetikliyor, departmanlar kendi verilerine odaklanıp bütünsel bir görünüm elde edemiyordu. GlobalTech, bu soruna bir çözüm arayışındaydı: Kullanıcıların SQL bilmeden, kendi doğal dillerinde verilere ulaşabileceği, hızlı ve güvenli bir platform.
Çözüm: Forge Üzerinde Rovo + TiDB Entegrasyonu
GlobalTech, Atlassian platformlarına zaten yatırım yapmış olduğu için, mevcut ekosistemlerine entegre olabilecek bir çözüm aramaya başladı. Atlassian Forge'un serverless yapısı ve güçlü güvenlik özellikleri dikkatlerini çekti. Şirket, Forge üzerinde "Insight Navigator" adını verdikleri bir uygulama geliştirmeye karar verdi. Bu uygulama, kullanıcıların doğal dil sorgularını kabul edip, veri tabanından ilgili bilgileri çekerek doğrudan Jira veya Confluence sayfalarında gösterecekti.
- Mimari Kurulumu:
- Veri Ambarı: GlobalTech, tüm operasyonel veri tabanlarından (CRM, ERP, Jira, Confluence) gelen konsolide verileri TiDB tabanlı bir veri ambarında topladı. TiDB'nin dağıtık mimarisi, büyük ve sürekli büyüyen veri hacmini sorunsuz bir şekilde yönetmelerini sağladı.
- Forge Uygulaması (Insight Navigator): Forge üzerinde custom UI ile bir Jira Issue Panel ve Confluence Macro geliştirildi. Bu arayüzler, kullanıcıların doğal dil sorgularını girmesi için basit bir metin alanı sağladı.
- Rovo (LLM) Entegrasyonu: Forge backend'i, kullanıcı sorgularını ve veri ambarı şemasının kritik bölümlerini (güvenlik kurallarıyla birlikte) Rovo'ya gönderdi. Rovo, bu bilgileri analiz ederek optimize edilmiş ve güvenli bir SQL sorgusu üretti. GlobalTech, Rovo'yu şirket içi veri terminolojisi ve iş kuralları üzerinde ek olarak eğitti.
- Güvenlik Katmanı: Rovo'dan dönen her SQL sorgusu, Forge backend'de geliştirilen özel bir "SQL Güvenlik ve Doğrulama" modülünden geçti. Bu modül, yalnızca
SELECTsorgularına izin verdi, yetkisiz tablolara erişimi engelledi ve potansiyel SQL enjeksiyonlarına karşı koruma sağladı. - Forge SQL Bağlantısı: Doğrulanmış SQL sorguları, Forge SQL API aracılığıyla TiDB veri ambarına gönderildi. TiDB'deki RBAC (Rol Tabanlı Erişim Kontrolü) mekanizmaları, farklı departmanlardan gelen kullanıcıların sadece kendilerine ait verilere erişmesini garanti altına aldı.
- Uygulama Senaryoları ve Faydaları:
- Pazarlama Departmanı: "Geçen çeyrekte hangi pazarlama kampanyası en yüksek dönüşümü sağladı?" veya "En çok etkileşim alan blog yazılarımızın ilk 5'i hangisi?" gibi sorulara anında yanıtlar alarak kampanya optimizasyonunu hızlandırdı.
- Proje Yönetimi: "X projesindeki gecikmiş görevlerin ortalama süresi nedir?" veya "Y ekibinin son 3 ayda tamamladığı görev sayısı nedir?" gibi sorularla proje performansını yakından takip etti, darboğazları erken tespit etti.
- İnsan Kaynakları: "Geçen yıl en yüksek çalışan memnuniyetine sahip departmanlar hangileriydi?" veya "Yeni işe başlayanların ilk 6 ay içindeki performans skorları nasıl?" gibi sorularla insan kaynakları stratejilerini daha veri odaklı hale getirdi. (Hassas İK verileri için veri maskeleme kullanıldı).
- Satış Ekipleri: "Bölge Z'deki en büyük 10 müşterimiz hangisi?" veya "Son 2 haftada en çok satan ürünlerimiz nelerdir?" sorularıyla satış stratejilerini anında ayarladı.
Başarılar ve Kazanılan Deneyimler
GlobalTech'in Insight Navigator uygulaması, beklentilerin üzerinde bir başarı elde etti:
- Veri Erişimi Demokrasisi: Binlerce çalışan, teknik bilgiye ihtiyaç duymadan verilere kendi başlarına erişebilir hale geldi. Bu, IT departmanının raporlama yükünü %60 oranında azalttı.
- Hızlandırılmış Karar Alma: Anlık içgörüler sayesinde, ekipler daha hızlı ve daha bilinçli kararlar alabildi. Gecikmeler %25 oranında azaldı.
- Artırılmış Verimlilik: Çalışanlar, veri talepleri için bekleme süreleri azaldığı için kendi ana görevlerine daha fazla odaklanabildi.
- Gelişmiş Güvenlik ve Uyum: Katı doğrulama kuralları ve TiDB'nin RBAC yetenekleri sayesinde, veri güvenliğinden ödün verilmedi ve GDPR/KVKK gibi uyumluluk standartları korundu.
Bu vaka analizi, doğal dil SQL'in, Rovo ve TiDB gibi modern teknolojilerle Atlassian Forge üzerinde nasıl kurumsal düzeyde bir değer yaratabileceğini açıkça göstermektedir. GlobalTech'in deneyimi, veri erişimini basitleştirmenin ve güvenliği elden bırakmamanın mümkün olduğunu kanıtlamıştır.
Geleceğin Veri Erişimi: Forge, Rovo ve TiDB ile Sınırları Zorlamak
Atlassian Forge platformunda doğal dil SQL yeteneklerini Rovo (LLM) ve Forge SQL (TiDB) ile birleştirerek, veri erişimi ve analizi konusunda önemli bir dönüşüm potansiyeline sahip olduğumuzu gördük. Bu entegrasyon, yalnızca teknik bir başarı değil, aynı zamanda iş süreçlerini demokratikleştiren ve karar alma hızını artıran stratejik bir adımdır.
Doğal dil SQL, veri tabanı sorgulama süreçlerini, teknik uzmanlığı olmayan son kullanıcılar için bile erişilebilir hale getirerek veri analizi dünyasının kapılarını ardına kadar açıyor. "Geçen çeyrekte en çok satan ürünler hangileri?" gibi basit bir soruyla karmaşık SQL sorguları üretme yeteneği, ekiplerin veri temelli kararlar almasını hızlandırıyor. Atlassian Forge'un serverless yapısı ve Atlassian ekosistemiyle derin entegrasyonu, bu tür uygulamaların geliştirilmesini kolaylaştırırken, kurumsal düzeyde güvenlik ve ölçeklenebilirlik sağlıyor. Rovo gibi büyük dil modelleri, doğal dil ile SQL arasındaki köprüyü kurarak bu sürecin merkezinde yer alıyor. TiDB'nin dağıtık mimarisi ise, büyük veri hacimlerini ve yoğun sorgu yüklerini performans düşüşü olmadan yönetme yeteneği sunarak sistemin sağlamlığını garanti altına alıyor.
Ancak, bu güçlü teknolojiyi uygularken güvenlik ve performansın da ön planda tutulması gerektiğini unutmamalıyız. LLM çıktılarının kapsamlı bir şekilde doğrulanması, SQL enjeksiyonlarına karşı koruma, rol tabanlı erişim kontrolü ve sorgu optimizasyonları gibi önlemler, sistemin güvenilirliğini ve verimliliğini sağlamak için hayati öneme sahiptir. Gelecekte, LLM'lerin daha da gelişmesiyle birlikte, doğal dil SQL sistemleri daha karmaşık analizler yapabilecek, daha hassas sonuçlar üretebilecek ve hatta veri görselleştirmelerini otomatik olarak oluşturabilecek yeteneklere sahip olabilirler. Bu, Atlassian kullanıcılarının, Jira ve Confluence içindeki verilerinden daha derinleşimli içgörüler elde etmelerini sağlayarak iş birliğini ve verimliliği yeni bir seviyeye taşıyacaktır.
Sonuç olarak, Forge, Rovo ve TiDB birlikteliği, modern veri erişiminin nasıl olması gerektiğine dair bir yol haritası sunuyor. Bu teknolojik sinerji, her seviyeden kullanıcının verilere erişimini basitleştirirken, kurumsal güvenlik ve performans standartlarından ödün vermeyen, geleceğin veri odaklı organizasyonları için güçlü bir temel oluşturuyor. Verinin gücünü keşfetmek hiç bu kadar kolay ve güvenli olmamıştı.
Sıkça Sorulan Sorular
- Doğal dil SQL ne kadar güvenilir?
Doğal dil SQL'in güvenilirliği, uygulanan güvenlik katmanlarına bağlıdır. Rovo gibi LLM'lerden gelen SQL çıktısının, Forge backend'de kapsamlı bir doğrulama (sadece SELECT komutlarına izin verme, izin verilen tabloları kontrol etme) ve TiDB tarafında rol tabanlı erişim kontrolü (RBAC) ile desteklenmesi durumunda oldukça güvenli hale getirilebilir. LLM'lerin hala hatalı veya kötü niyetli sorgular üretme potansiyeli olduğundan, insan onaylı bir güvenlik katmanı şarttır.
- TiDB yerine başka bir veri tabanı kullanılabilir mi?
Evet, Forge SQL farklı veri tabanı sağlayıcılarını destekleyebilir. Ancak TiDB, dağıtık mimarisi, yatay ölçeklenebilirliği, MySQL uyumluluğu ve yüksek erişilebilirlik gibi özellikleriyle özellikle Forge'un serverless ve dinamik sorgu oluşturma senaryolarına çok iyi uyum sağlar. Alternatifler arasında PostgreSQL veya diğer bulut tabanlı SQL veri tabanları da değerlendirilebilir, ancak bu durumda TiDB'nin sunduğu performans ve ölçeklenebilirlik avantajlarından ödün verilebilir.
- Rovo benzeri LLM'ler nasıl seçilmelidir?
Rovo benzeri bir LLM seçerken dikkate alınması gereken faktörler şunlardır: doğruluk oranı (SQL üretim kalitesi), maliyet, güvenlik özellikleri (veri gizliliği, prompt güvenliği), bağlam anlama yeteneği, özelleştirilebilirlik (kendi veri şemanız ve iş kurallarınız üzerinde eğitim), API erişimi ve entegrasyon kolaylığı. Atlassian ekosistemi içinde Rovo'nun doğrudan entegrasyon avantajları olabilir, ancak diğer büyük LLM sağlayıcıları (OpenAI GPT serisi, Google Gemini, Anthropic Claude) da benzer yetenekler sunar.
- Geliştirme süreci ne kadar sürer?
Geliştirme süresi, projenin karmaşıklığına, ekibin tecrübesine ve mevcut altyapıya bağlıdır. Basit bir prototip birkaç hafta içinde oluşturulabilirken, kurumsal düzeyde güvenlik ve performans gereksinimlerini karşılayan tam özellikli bir uygulama birkaç ay sürebilir. Özellikle LLM entegrasyonu için prompt mühendisliği ve SQL doğrulama katmanlarının oluşturulması zaman alıcı olabilir.
- Performans sorunları yaşanır mı?
Evet, LLM'ler tarafından üretilen sorgular bazen suboptimal veya aşırı karmaşık olabilir ve bu da büyük veri kümelerinde performans sorunlarına yol açabilir. Bu sorunları önlemek için: TiDB'nin dağıtık yapısı ve ölçeklenebilirlik özellikleri, doğru indeksleme stratejileri, sorgu önbellekleme, sorgu zaman aşımları ve LLM'e performans odaklı prompt mühendisliği uygulanmalıdır. Düzenli performans izleme ve sorgu analizi de kritik öneme sahiptir.