Geri getirme ile güçlendirilmiş oluşturma uygulamaları geliştirme

Tamamlandı

Bilgi Almayı Artırıcı Üretim (RAG), verilerle etkileşim kuran yapay zeka uygulamalarına yönelik bir modeldir. RAG uygulamaları, eğitim sırasında yalnızca büyük dil modellerine eklenen bilgilere güvenmek yerine veritabanınızdan ilgili bilgileri dinamik olarak alır ve yapay zeka modeline bağlam olarak sağlar. Bu yaklaşım, dil modellerinin akıl yürütme özelliklerini kullanırken yanıtların geçerli ve doğru verilerinize dayanmasını sağlar.

SQL Server 2025 , vektör arama özelliklerini, yerel yapay zeka tümleştirmesini ve kurumsal düzeyde veri yönetimini birleştiren RAG uygulamaları oluşturmaya yönelik eksiksiz bir platform sağlar. Bu tümleşik yaklaşım, birden çok veritabanını yönetmeden, verileri sistemler arasında eşitlemeden veya güvenlik ve uyumluluktan ödün vermeden yapay zeka uygulamaları oluşturabileceğiniz anlamına gelir.

RAG, gerçek zamanlı veri alma ile model yanıtlarını artırarak statik yapay zeka modellerinin sınırlamalarını (bilgi kesme tarihleri, yanlış bilgiler ve etki alanına özgü bilgi eksikliği) ele alır. Geliştiriciler için bu, kullanılan veri kaynakları üzerinde tam denetim sağlarken doğru, bağlamsal ve up-togüncel yanıtlar sunan uygulamalar oluşturmak anlamına gelir.

RAG desenini anlama

RAG düzeni, geleneksel veritabanı işlemlerini yapay zeka özellikleriyle birleştiren sistematik bir iş akışını izler.

RAG iş akışını keşfetme

RAG düzeni veritabanınız, yapay zeka modelleriniz ve uygulama kullanıcılarınız arasındaki etkileşimi düzenler. Bu iş akışını anlamak, doğru, bağlamsal olarak ilgili yanıtlar sunan yapay zeka destekli uygulamalar oluşturmak için önemlidir. Microsoft'un Azure OpenAI belgelerindeki aşağıdaki diyagramda RAG sisteminin farklı bileşenlerinin birlikte nasıl çalıştığı gösterilmektedir:

Veri alımı, geliştirme ve çıkarım aşamalarını gösteren alma artırıcı oluşturma iş akışının diyagramı.

Diyagramda üç aşamalı RAG iş akışı gösterilmektedir: Alma (aranabilir dizinlere veri yükleme ve ekleme), Geliştirme (istemler ve arama amaçlarıyla uygulama oluşturma) ve Çıkarım (amaç oluşturma, alma, filtreleme/yeniden boyutlandırma ve yanıt oluşturma yoluyla kullanıcı istemlerini işleme).

Bu düzen SQL Server 2025 RAG uygulamaları için geçerlidir; burada veriler yanıt oluşturma için dil modellerine gönderilmeden önce SQL Server'da depolanır ve aranır.

Tipik bir RAG uygulaması birkaç temel adımı içerir:

  • Veri alımı: Kaynak belgelerinizi veya verilerinizi SQL Server'da depolama
  • Ekleme oluşturma: Yapay zeka modellerini kullanarak metni vektör eklemelerine dönüştürme
  • Vektör depolama: İlişkisel verilerinizin yanı sıra eklemeleri depolama
  • Sorgu işleme: Kullanıcı soru sorduğunda, sorgusu için bir ekleme oluşturun
  • Benzerlik araması: Vektör aramasını kullanarak en uygun belgeleri bulma
  • Bağlam derlemesi: İlgili belgelerin tam içeriğini alma
  • komut istemi oluşturma: Kullanıcının sorusunu ve ilgili bağlamı içeren bir istem oluşturma
  • Yapay zeka çıkarımı: Yanıt oluşturma için istemi bir dil modeline (GPT-4 gibi) gönderme
  • Yanıt teslimi: Yapay zeka tarafından oluşturulan yanıtı kullanıcıya döndürme

T-SQL ile temel RAG uygulama

SQL Server 2025, T-SQL kullanarak tamamen veritabanında RAG uygulamaları oluşturmanıza olanak tanır.

Bilgi bankanızı hazırlama

Belgeleri ve bunların eklemelerini depolamak için bir tablo oluşturarak başlayın:

CREATE TABLE knowledge_base (
    doc_id INT IDENTITY(1,1) PRIMARY KEY,
    title NVARCHAR(200),
    content NVARCHAR(MAX),
    category NVARCHAR(100),
    created_date DATETIME2 DEFAULT GETDATE(),
    embedding VECTOR(1536)
);

-- Create a vector index for efficient similarity search
CREATE VECTOR INDEX idx_knowledge_embedding ON knowledge_base(embedding);

Bu tablo hem özgün içeriği hem de vektör eklemesini depolar. Vektör dizini, kullanıcılar bilgi bankasını sorguladığında hızlı benzerlik aramalarına olanak tanır.

Ekleme oluşturma ve depolama

Tek bir işlemde belge ekleyin ve eklemeler oluşturun:

-- Insert a document with embedding generation
DECLARE @content NVARCHAR(MAX) = N'SQL Server 2025 introduces native vector support for AI applications. Developers can store high-dimensional embeddings alongside relational data and perform semantic similarity searches using the VECTOR_DISTANCE function.';

INSERT INTO knowledge_base (title, content, category, embedding)
VALUES (
    N'SQL Server 2025 Vector Support',
    @content,
    N'Product Features',
    AI_GENERATE_EMBEDDINGS(@content USE MODEL Ada2Embeddings)
);

Bu kod bir belge ekler ve daha önce tanımlanan dış modeli kullanarak ekleme işlemini otomatik olarak oluşturur. Ekleme, veri tutarlılığını sağlamak için kaynak metinle aynı satırda depolanır.

Kullanıcının sorgusuna göre ilgili belgeleri alın:

-- User's question
DECLARE @user_query NVARCHAR(MAX) = N'How do I use vectors in SQL Server?';

-- Generate embedding for the query
DECLARE @query_embedding VECTOR(1536) = AI_GENERATE_EMBEDDINGS(@user_query USE MODEL Ada2Embeddings);

-- Find top 5 most relevant documents
SELECT TOP 5
    doc_id,
    title,
    content,
    category,
    VECTOR_DISTANCE('cosine', @query_embedding, embedding) AS relevance_score
FROM knowledge_base
ORDER BY relevance_score;

Bu sorgu, vektör eklemelerini karşılaştırarak belgeleri kullanıcının sorusuna benzer şekilde bulur. VECTOR_DISTANCE işlevi benzerlik hesaplar ve daha düşük puanlar daha yüksek ilgi gösterir.

Bağlamla istemler oluşturma

Alınan bağlamı içeren bir istem oluşturun:

DECLARE @user_query NVARCHAR(MAX) = N'How do I use vectors in SQL Server?';
DECLARE @query_embedding VECTOR(1536) = AI_GENERATE_EMBEDDINGS(@user_query USE MODEL Ada2Embeddings);

-- Retrieve relevant context
DECLARE @context NVARCHAR(MAX);

SELECT @context = STRING_AGG(
    CONCAT('Document: ', title, CHAR(10), 'Content: ', content, CHAR(10), CHAR(10)),
    ''
)
FROM (
    SELECT TOP 3
        title,
        content,
        VECTOR_DISTANCE('cosine', @query_embedding, embedding) AS score
    FROM knowledge_base
    ORDER BY score
) AS relevant_docs;

-- Construct the prompt
DECLARE @prompt NVARCHAR(MAX) = CONCAT(
    'You are a helpful assistant. Use the following context to answer the user''s question.',
    CHAR(10), CHAR(10),
    'Context:', CHAR(10),
    @context,
    CHAR(10),
    'Question: ', @user_query,
    CHAR(10),
    'Answer:'
);

SELECT @prompt AS constructed_prompt;

Bu kod en ilgili üç belgeyi alır, bunları bir bağlam dizesinde birleştirir ve yapay zeka modeline soruyu yanıtlarken sağlanan bağlamı kullanmasını belirten eksiksiz bir istem oluşturur.

Yapay zeka yanıtları oluşturma

Oluşturulan istemi bir dil modeline gönderin:

-- Build the chat completion request
DECLARE @chat_request NVARCHAR(MAX) = JSON_OBJECT(
    'messages': JSON_ARRAY(
        JSON_OBJECT('role': 'system', 'content': 'You are a helpful assistant that answers questions based on provided context.'),
        JSON_OBJECT('role': 'user', 'content': @prompt)
    ),
    'max_tokens': 500,
    'temperature': 0.7
);

DECLARE @response NVARCHAR(MAX);

-- Call GPT-4
EXEC sp_invoke_external_rest_endpoint
    @url = N'https://myopenai.openai.azure.com/openai/deployments/gpt-4/chat/completions?api-version=2024-02-15-preview',
    @method = 'POST',
    @credential = [MyAzureOpenAICredential],
    @payload = @chat_request,
    @response = @response OUTPUT;

-- Extract and display the answer
SELECT JSON_VALUE(@response, '$.result.choices[0].message.content') AS ai_answer;

Bu işlem, istemi bağlamıyla birlikte GPT-4'e gönderip oluşturulan yanıtı döndürerek RAG desenini tamamlar. Yapay zeka modeli, doğru, veri temelli yanıtlar sağlamak için alınan bağlamı kullanır.

LangChain ile tümleştirme

LangChain , büyük dil modelleriyle uygulama oluşturmaya yönelik popüler bir çerçevedir. SQL Server 2025, LangChain tümleştirmesi için destek sağlayarak SQL Server'ı LangChain uygulamalarınızda vektör deposu olarak kullanmanızı sağlar.

Uyarı

SQL Server vektör özellikleriyle LangChain tümleştirmesi önizleme aşamasındadır. Paket adları, API'ler ve uygulama ayrıntıları değişebilir. SQL Server vektör deposu desteğiyle ilgili en son bilgiler için LangChain belgelerine bakın.

SQL Server ile LangChain'i ayarlama

Gerekli paketleri yükleyin:

# Install LangChain SQL Server connector (preview)
# Package names may vary - check documentation for latest
pip install langchain-sqlserver
pip install langchain-openai

SQL Server bağlantısını yapılandırın:

from langchain_sqlserver import SQLServerVectorStore
from langchain_openai import OpenAIEmbeddings, AzureChatOpenAI
from langchain.chains import RetrievalQA

# Configure Azure OpenAI
embeddings = OpenAIEmbeddings(
    deployment="text-embedding-ada-002",
    model="text-embedding-ada-002",
    azure_endpoint="https://myopenai.openai.azure.com",
    api_key="your-api-key"
)

# Connect to SQL Server vector store
vector_store = SQLServerVectorStore(
    connection_string="Driver={ODBC Driver 18 for SQL Server};Server=myserver;Database=mydb;Trusted_Connection=yes;",
    embedding_function=embeddings,
    table_name="knowledge_base",
    vector_column_name="embedding"
)

Bu Python kodu, LangChain ile SQL Server veritabanınız arasında bir bağlantı kurarak SQL Server'ı RAG uygulamanız için vektör deposu olarak kullanmanızı sağlar.

LangChain ile RAG zinciri oluşturma

Eksiksiz bir soru-cevap sistemi oluşturun:

# Initialize the language model
llm = AzureChatOpenAI(
    deployment_name="gpt-4",
    azure_endpoint="https://myopenai.openai.azure.com",
    api_key="your-api-key"
)

# Create a retrieval QA chain
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vector_store.as_retriever(search_kwargs={"k": 3})
)

# Ask a question
question = "How do I use vectors in SQL Server?"
answer = qa_chain.run(question)
print(answer)

Bu işlem, LangChain'in SQL Server'dan ilgili belgeleri otomatik olarak aldığı, istemler oluşturduğu, dil modelini çağırdığı ve yalnızca birkaç satır kod içeren yanıtlar döndürdüğü bir RAG işlem hattı oluşturur.

Anlam Çekirdeği ile tümleştirme

Anlam Çekirdeği , Microsoft'un yapay zeka özelliklerini uygulamalarla tümleştirmeye yönelik açık kaynak SDK'sıdır. SQL Server 2025, Semantik Çekirdek tümleştirmesi için destek sağlayarak SQL Server'ı yapay zeka uygulamalarınızda vektör deposu olarak kullanmanızı sağlar.

Uyarı

SQL Server vektör özellikleriyle Anlamsal Çekirdek tümleştirmesi önizlemededir. Paket adları, API'ler ve uygulama ayrıntıları değişebilir. SQL Server vektör deposu desteğiyle ilgili en son bilgiler için Anlam Çekirdeği belgelerine bakın.

SQL Server ile Anlam Çekirdeğini Yapılandırma

C# dilinde bağlantıyı ayarlayın:

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.SqlServer;
using Microsoft.SemanticKernel.Connectors.OpenAI;

// Build the kernel
var builder = Kernel.CreateBuilder();

// Add Azure OpenAI chat completion
builder.AddAzureOpenAIChatCompletion(
    deploymentName: "gpt-4",
    endpoint: "https://myopenai.openai.azure.com",
    apiKey: "your-api-key"
);

// Add SQL Server vector store (preview - API may change)
builder.AddSqlServerVectorStore(
    connectionString: "Server=myserver;Database=mydb;Trusted_Connection=True;",
    tableName: "knowledge_base",
    vectorColumnName: "embedding"
);

var kernel = builder.Build();

Bu yapılandırma, Anlamsal Çekirdeği'nin vektör deposu olarak SQL Server'ı ve dil modeli çıkarımı amacıyla Azure OpenAI'yi kullanmasını sağlar.

RAG'yi Semantik Çekirdek ile Uygulama

RAG destekli eklenti oluşturma:

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Memory;

public class KnowledgeBasePlugin
{
    private readonly ISemanticTextMemory _memory;
    
    public KnowledgeBasePlugin(ISemanticTextMemory memory)
    {
        _memory = memory;
    }
    
    [KernelFunction]
    [Description("Answers questions based on the knowledge base")]
    public async Task<string> AskQuestion(
        [Description("The user's question")] string question)
    {
        // Search for relevant documents
        var results = _memory.SearchAsync("knowledge_base", question, limit: 3);
        
        // Build context from retrieved documents
        var context = new StringBuilder();
        await foreach (var result in results)
        {
            context.AppendLine($"Document: {result.Metadata.Text}");
            context.AppendLine();
        }
        
        // The kernel will automatically use this context with the LLM
        return context.ToString();
    }
}

Bu eklenti SQL Server vektör deposunda arama yaparak yanıt oluşturmak için dil modeline uygun bağlam sağlar.

Azure AI Search , SQL Server'ın vektör arama özelliklerini tamamlayan gelişmiş arama özellikleri sağlar.

Karma arama hem vektör tabanlı anlamsal aramanın hem de geleneksel anahtar sözcük tabanlı tam metin aramanın güçlü yanlarını birleştirir. Tam metin araması hassas terminolojiyi ve etki alanına özgü tümcecikleri yakalarken, vektör arama tam sözcükler eşleşmediğinde bile kavramsal olarak benzer içeriği bulma konusunda üstünlük sağlar. Bu birleşim, hem görsel açıdan ilgili hem de kullanıcıların sormuş olduğu belirli terimleri içeren belgeleri almanızı sağladığından, daha doğru ve kapsamlı yapay zeka yanıtlarına yol açmanızı sağladığından RAG uygulamaları için kritik önem taşır.

SQL Server'dan Azure AI Search'e veri eşitlemek için bir dizin oluşturucu ayarlayın:

-- Enable Change Tracking on your table
ALTER DATABASE mydb SET CHANGE_TRACKING = ON;
ALTER TABLE knowledge_base ENABLE CHANGE_TRACKING;

Azure portali veya REST API aracılığıyla Azure AI Search indexer'ı yapılandırarak, SQL Server'dan veri çekebilir ve SQL Server'ın işlem özelliklerini, Azure AI Search'ün gelişmiş metin analiziyle birleştirerek kullanabilirsiniz.

Karma arama stratejisi uygulama:

DECLARE @user_query NVARCHAR(MAX) = N'machine learning with SQL Server';
DECLARE @query_embedding VECTOR(1536) = AI_GENERATE_EMBEDDINGS(@user_query USE MODEL Ada2Embeddings);

-- Hybrid search combining vector similarity and full-text search
SELECT 
    kb.doc_id,
    kb.title,
    kb.content,
    VECTOR_DISTANCE('cosine', @query_embedding, kb.embedding) AS vector_score,
    fts.RANK AS text_score,
    -- Combined score (weighted average)
    (VECTOR_DISTANCE('cosine', @query_embedding, kb.embedding) * 0.5) + 
    ((1.0 - fts.RANK/1000.0) * 0.5) AS combined_score
FROM knowledge_base kb
INNER JOIN CONTAINSTABLE(knowledge_base, content, @user_query) fts
    ON kb.doc_id = fts.[KEY]
ORDER BY combined_score;

Bu sorgu, hem kavramsal hem de tam eşleşmeleri yakalayan ilgili sonuçlar sunmak için anlamsal benzerliği (vektör araması) anahtar sözcük eşleştirmesi (tam metin araması) ile birleştirir.

Üretime hazır RAG uygulamaları oluşturma

Prototipten üretime geçmek için performans, güvenilirlik ve bakım konusunda dikkat edilmesi gereken ek noktalar vardır.

Ekleme oluşturmayı iyileştirme

Birden çok belge için verimli bir şekilde eklemeler oluşturun:

-- Update embeddings for documents that don't have them yet
-- Note: AI_GENERATE_EMBEDDINGS executes once per row, not as a batch operation
UPDATE knowledge_base
SET embedding = AI_GENERATE_EMBEDDINGS(content USE MODEL Ada2Embeddings)
WHERE embedding IS NULL;

-- For large-scale operations, process in smaller batches to avoid long transactions
DECLARE @batch_size INT = 100;

WHILE EXISTS (SELECT 1 FROM knowledge_base WHERE embedding IS NULL)
BEGIN
    -- Update a limited number of rows at a time
    UPDATE TOP (@batch_size) knowledge_base
    SET embedding = AI_GENERATE_EMBEDDINGS(content USE MODEL Ada2Embeddings)
    WHERE embedding IS NULL;
    
    -- Optional: Add a small delay to avoid overloading the API endpoint
    WAITFOR DELAY '00:00:01';
END;

Bu yaklaşım, yönetilebilir toplu işlemlere ekleme işlemlerini işler, işlem kilit sürelerini azaltır ve büyük belge koleksiyonları için ilerleme durumunu izlemenize olanak sağlar.

Önbelleğe alma stratejilerini uygulama

Sık sorulan soruları ve yanıtlarını önbelleğe alın:

CREATE TABLE query_cache (
    cache_id INT IDENTITY(1,1) PRIMARY KEY,
    query_text NVARCHAR(500),
    query_embedding VECTOR(1536),
    response_text NVARCHAR(MAX),
    created_date DATETIME2 DEFAULT GETDATE(),
    hit_count INT DEFAULT 0,
    INDEX idx_query_embedding (query_embedding)
);

-- Check cache before executing full RAG pipeline
DECLARE @user_query NVARCHAR(MAX) = N'What are vectors?';
DECLARE @query_embedding VECTOR(1536) = AI_GENERATE_EMBEDDINGS(@user_query USE MODEL Ada2Embeddings);
DECLARE @cached_response NVARCHAR(MAX);

-- Look for similar cached queries
SELECT TOP 1 @cached_response = response_text
FROM query_cache
WHERE VECTOR_DISTANCE('cosine', @query_embedding, query_embedding) < 0.05
ORDER BY VECTOR_DISTANCE('cosine', @query_embedding, query_embedding);

IF @cached_response IS NOT NULL
BEGIN
    -- Return cached response
    SELECT @cached_response AS answer;
    
    -- Increment hit count
    UPDATE query_cache
    SET hit_count = hit_count + 1
    WHERE response_text = @cached_response;
END
ELSE
BEGIN
    -- Execute full RAG pipeline
    -- ... (RAG code here)
    
    -- Cache the new response
    INSERT INTO query_cache (query_text, query_embedding, response_text)
    VALUES (@user_query, @query_embedding, @generated_response);
END;

Sorgu önbelleğe alma, benzer soruların yanıtlarını yeniden kullanarak maliyetleri azaltır ve yanıt sürelerini iyileştirir.

Büyük belgeler için öbekleme işleme

Büyük belgeleri yönetilebilir öbeklere bölün:

-- Use AI_GENERATE_CHUNKS for text splitting
DECLARE @large_document NVARCHAR(MAX) = N'... very long document content ...';

-- Generate chunks with AI_GENERATE_CHUNKS
-- The function splits text into fixed-size character chunks
INSERT INTO knowledge_base (title, content, embedding)
SELECT 
    CONCAT('Document Chunk ', c.chunk_order),
    c.chunk,
    AI_GENERATE_EMBEDDINGS(c.chunk USE MODEL Ada2Embeddings)
FROM AI_GENERATE_CHUNKS(
    source = @large_document,
    chunk_type = FIXED,
    chunk_size = 512  -- Size in characters (not tokens)
) AS c;

Öbekleme, alınan bağlamın belirteç sınırlarına sığmasını sağlar ve alınan bölümlerin ilgi düzeyini artırır.

RAG en iyi uygulamalarını uygulama

Etkili RAG uygulamaları için şu yönergeleri izleyin:

Kategori Practice Description
Etkili istemler tasarlama Belirli olun Modelin yalnızca sağlanan bağlamı kullanmasını açıkça belirtin
Kısıtlama ekleme Bilgiler bağlamda olmadığında modelin kabul etmesi gerektiğini belirtin
Örnek ekle İstenen yanıt biçimine birkaç deneme örneği sağlayın
Ton ayarlama Yardımcının kişi ve iletişim stilini tanımlama
Alma parametrelerini ayarla K değerini ayarla Farklı sayıda belge alma denemesi (genellikle 3-5)
Benzerlik eşiklerini ayarlama İlgi puanı eşiğinin altındaki belgeleri filtreleyin
Kesinlik ve geri çağırmayı dengeleme Kullanım örneğiniz için doğru dengeyi bulun
Çeşitli sorgularla test edin Alma işleminin farklı soru türlerinde çalıştığından emin olun
Veri kalitesinden emin olun Kaynak belgeleri temizleme Gürültüyü, biçimlendirme sorunlarını ve ilgisiz içeriği kaldırma
Düzenli olarak güncelleştirme Kaynak belgeler değiştiğinde eklemeleri yenileme
Eklemeleri doğrulama Eklemelerin içeriği doğru şekilde temsil ettiğini denetleyin
Kayma izleme Alma kalitesinin zaman içinde düşüp düşmediğini izleme
GÜVENLI RAG uygulamaları Veri erişimini denetleme Kullanıcıların hangi belgeleri alabileceğini kısıtlamak için satır düzeyi güvenlik kullanma
Yapay zeka işlemlerini denetleme Uyumluluk için tüm sorguları ve yanıtları günlüğe kaydedin.
Girişleri temizle Ekleme saldırılarını önlemek için kullanıcı sorgularını doğrulama ve temizleme
API anahtarlarını koruma Yönetilen kimlikleri kullanma ve kimlik bilgisi depolamanın güvenliğini sağlama

Bu uygulamaları izleyerek ve SQL Server 2025'in tümleşik yapay zeka özelliklerini uygulayarak doğru, bağlamsal ve güvenli yapay zeka destekli deneyimler sunan üretime hazır RAG uygulamaları oluşturabilirsiniz.