Construiți aplicații de generare augmentată de recuperare

Finalizat

Retrieval Augmented Generation (RAG) este un model pentru aplicațiile AI care interacționează cu datele. În loc să se bazeze exclusiv pe cunoștințele încorporate în modelele lingvistice mari în timpul antrenamentului, aplicațiile RAG preiau dinamic informații relevante din baza de date și le oferă ca context pentru modelul AI. Această abordare asigură că răspunsurile sunt bazate pe datele curente și precise, în timp ce utilizați capacitățile de raționament ale modelelor lingvistice.

SQL Server 2025 oferă o platformă completă pentru construirea de aplicații RAG, combinând capabilitățile de căutare vectorială, integrarea nativă AI și gestionarea datelor la nivel de întreprindere. Această abordare integrată înseamnă că puteți construi aplicații AI fără a gestiona mai multe baze de date, a sincroniza datele între sisteme sau a compromite securitatea și conformitatea.

RAG abordează limitările modelelor AI statice - date limită de cunoștințe, informații incorecte și lipsa de informații specifice domeniului - prin creșterea răspunsurilor modelului cu recuperarea datelor în timp real. Pentru dezvoltatori, acest lucru înseamnă construirea de aplicații care oferă răspunsuri precise, contextuale și up-to-date, menținând în același timp controlul deplin asupra surselor de date utilizate.

Înțelegeți modelul RAG

Modelul RAG urmează un flux de lucru sistematic care combină operațiunile tradiționale ale bazelor de date cu capabilitățile AI.

Explorați fluxul de lucru RAG

Modelul RAG orchestrează interacțiunea dintre baza de date, modelele AI și utilizatorii aplicației. Înțelegerea acestui flux de lucru este importantă pentru construirea de aplicații bazate pe inteligență artificială care oferă răspunsuri precise și relevante din punct de vedere contextual. Următoarea diagramă din documentația Microsoft Azure OpenAI ilustrează modul în care diferitele componente ale unui sistem RAG funcționează împreună:

Diagramă care ilustrează fluxul de lucru de generare augmentată de recuperare care arată fazele de ingestie, dezvoltare și inferență a datelor.

Diagrama arată fluxul de lucru RAG în trei faze: Ingest (încărcarea și încorporarea datelor în indexuri care pot fi căutate), Develop (crearea de aplicații cu solicitări și intenții de căutare) și Inference (procesarea solicitărilor utilizatorilor prin generarea de intenții, recuperare, filtrare/reclasificare și generare de răspunsuri).

Acest model se aplică implementărilor SQL Server 2025 RAG, unde datele sunt stocate și căutate în SQL Server înainte de a fi trimise către modele de limbaj pentru generarea de răspunsuri.

O implementare tipică a RAG implică mai mulți pași cheie:

  • Ingestia datelor: Stocarea documentelor sau datelor sursă în SQL Server
  • Generarea de încorporare: Convertiți textul în încorporari vectoriale folosind modele AI
  • Stocare vectorială: Stocați încorporarile alături de datele relaționale
  • Procesarea interogărilor: Când un utilizator pune o întrebare, generați o încorporare pentru interogarea sa
  • Căutare de similitudine: Găsiți cele mai relevante documente folosind căutarea vectorială
  • Asamblare context: Preluați întregul conținut al documentelor relevante
  • Construcție promptă: Creați o solicitare care include întrebarea utilizatorului și contextul relevant
  • Inferența AI: Trimiteți solicitarea către un model de limbaj (cum ar fi GPT-4) pentru generarea răspunsului
  • Livrarea răspunsului: Returnați utilizatorului răspunsul generat de AI

Implementați RAG de bază cu T-SQL

SQL Server 2025 vă permite să construiți aplicații RAG în întregime în baza de date folosind T-SQL.

Pregătiți-vă baza de cunoștințe

Începeți prin a crea un tabel pentru a stoca documentele și încorporarile acestora:

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);

Acest tabel stochează atât conținutul original, cât și încorporarea vectorială . Indicele vectorial permite căutări rapide de similitudine atunci când utilizatorii interoghează baza de cunoștințe.

Generați și stocați încorporari

Introduceți documente și generați încorporari într-o singură operațiune:

-- 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)
);

Acest cod inserează un document și generează automat încorporarea acestuia folosind modelul extern definit anterior. Încorporarea este stocată în același rând cu textul sursă, asigurând consecvența datelor.

Preluați documentele relevante pe baza interogării unui utilizator:

-- 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;

Această interogare găsește documente similare semantic cu întrebarea utilizatorului prin compararea încorporarilor vectoriale. Funcția VECTOR_DISTANCE calculează similitudinea, scorurile mai mici indicând o relevanță mai mare.

Construiți solicitări cu context

Creați o solicitare care include contextul preluat:

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;

Acest cod preia primele trei cele mai relevante documente, le concatenează într-un șir de context și construiește o solicitare completă care instruiește modelul AI să utilizeze contextul furnizat atunci când răspunde la întrebare.

Generați răspunsuri AI

Trimiteți promptul construit la un model de limbaj:

-- 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;

Acest lucru completează modelul RAG trimițând solicitarea cu context la GPT-4 și returnând răspunsul generat. Modelul AI folosește contextul preluat pentru a oferi răspunsuri precise, bazate pe date.

Integrare cu LangChain

LangChain este un cadru popular pentru construirea de aplicații cu modele lingvistice mari. SQL Server 2025 oferă suport pentru integrarea LangChain, permițându-vă să utilizați SQL Server ca depozit vectorial în aplicațiile LangChain.

Notă

Integrarea LangChain cu caracteristicile vectoriale SQL Server este în previzualizare. Numele pachetelor, API-urile și detaliile de implementare se pot schimba. Consultați documentația LangChain pentru cele mai recente informații despre suportul pentru depozitele vectoriale SQL Server.

Configurarea LangChain cu SQL Server

Instalați pachetele necesare:

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

Configurați conexiunea la SQL Server:

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"
)

Acest cod Python stabilește o conexiune între LangChain și baza de date SQL Server, permițându-vă să utilizați SQL Server ca depozit vectorial pentru aplicația RAG.

Construiți un lanț RAG cu LangChain

Creați un sistem complet de întrebări și răspunsuri:

# 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)

Acest lucru creează o conductă RAG în care LangChain preia automat documentele relevante din SQL Server, construiește solicitări, apelează modelul lingvistic și returnează răspunsuri, toate cu doar câteva linii de cod.

Integrare cu nucleul semantic

Semantic Kernel este SDK-ul open-source al Microsoft pentru integrarea capabilităților AI în aplicații. SQL Server 2025 oferă suport pentru integrarea kernelului semantic, permițându-vă să utilizați SQL Server ca depozit vectorial în aplicațiile dvs.

Notă

Integrarea kernelului semantic cu caracteristicile vectoriale SQL Server este în previzualizare. Numele pachetelor, API-urile și detaliile de implementare se pot schimba. Consultați documentația kernelului semantic pentru cele mai recente informații despre suportul pentru depozitele vectoriale SQL Server.

Configurați nucleul semantic cu SQL Server

Configurați conexiunea în C#:

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();

Aceasta configurează nucleul semantic să utilizeze SQL Server ca depozit vectorial și Azure OpenAI pentru inferența modelului de limbaj.

Implementați RAG cu nucleul semantic

Creați un plugin alimentat de RAG:

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();
    }
}

Acest plugin caută în depozitul vectorial SQL Server și oferă context relevant modelului de limbaj pentru generarea răspunsurilor.

Azure AI Search oferă capacități avansate de căutare care completează caracteristicile de căutare vectorială ale SQL Server.

Căutarea hibridă combină punctele forte atât ale căutării semantice bazate pe vectori, cât și ale căutării tradiționale în text complet bazate pe cuvinte cheie. Căutarea vectorială excelează în găsirea de conținut similar din punct de vedere conceptual chiar și atunci când cuvintele exacte nu se potrivesc, în timp ce căutarea în text complet surprinde terminologia precisă și frazele specifice domeniului. Această combinație este esențială pentru aplicațiile RAG, deoarece vă asigură că preluați documente care sunt atât relevante din punct de vedere semantic, cât și care conțin termenii specifici pe care utilizatorii îi solicită, ceea ce duce la răspunsuri AI mai precise și mai cuprinzătoare.

Configurați un indexor pentru a sincroniza datele din SQL Server cu Azure AI Search:

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

Configurați indexorul Azure AI Search prin portalul Azure sau API-ul REST pentru a extrage date din SQL Server, permițându-vă să utilizați atât capacitățile tranzacționale ale SQL Server, cât și analiza avansată a textului Azure AI Search.

Implementați o strategie de căutare hibridă:

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;

Această interogare combină similitudinea semantică (căutare vectorială) cu potrivirea cuvintelor cheie (căutare text complet) pentru a oferi rezultate relevante care surprind atât potriviri conceptuale, cât și exacte.

Creați aplicații RAG gata de producție

Trecerea de la prototip la producție necesită considerații suplimentare pentru performanță, fiabilitate și întreținere.

Optimizați generarea de încorporare

Generați încorporari pentru mai multe documente în mod eficient:

-- 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;

Această abordare procesează încorporarile în loturi gestionabile, reducând timpii de blocare a tranzacțiilor și permițându-vă să monitorizați progresul pentru colecțiile mari de documente.

Implementați strategii de cache

Întrebările frecvente din cache și răspunsurile acestora:

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;

Stocarea în cache a interogărilor reduce costurile și îmbunătățește timpii de răspuns prin reutilizarea răspunsurilor la întrebări similare.

Manipulați fragmentarea pentru documente mari

Împărțiți documentele mari în bucăți ușor de gestionat:

-- 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;

Fragmentarea asigură că contextul preluat se încadrează în limitele tokenului și îmbunătățește relevanța pasajelor recuperate.

Aplicarea celor mai bune practici RAG

Urmați aceste orientări pentru implementarea eficace a OAR:

Categorie Obicei Descriere
Proiectați solicitări eficiente Fiți specific Instruiți în mod clar modelul să utilizeze doar contextul furnizat
Adăugați constrângeri Specificați că modelul ar trebui să admită atunci când informațiile nu sunt în context
Includeți exemple Oferiți câteva exemple de fotografii ale formatului de răspuns dorit
Setați tonul Definiți persoana asistentului și stilul de comunicare
Reglați parametrii de recuperare Reglați valoarea k Experimentați cu recuperarea diferitelor numere de documente (de obicei 3-5)
Setați praguri de similitudine Filtrarea documentelor sub un prag de scor de relevanță
Echilibrați precizia și reamintirea Găsiți compromisul potrivit pentru cazul dvs.
Testați cu diverse interogări Asigurați-vă că recuperarea funcționează pentru diferite tipuri de întrebări
Asigurați calitatea datelor Curățați documentele sursă Eliminați zgomotul, problemele de formatare și conținutul irelevant
Actualizați în mod regulat Reîmprospătarea încorporarilor atunci când se modifică documentele sursă
Validați încorporarile Verificați dacă încorporarea reprezintă cu acuratețe conținutul
Monitorizați deriva Urmăriți dacă calitatea recuperării se degradează în timp
Aplicații RAG securizate Controlați accesul la date Utilizați securitatea la nivel de rând pentru a restricționa documentele pe care utilizatorii le pot prelua
Auditați operațiunile AI Înregistrați toate întrebările și răspunsurile pentru conformitate
Igienizați intrările Validați și curățați interogările utilizatorilor pentru a preveni atacurile de injecție
Protejați cheile API Utilizați identități gestionate și stocare securizată a acreditărilor

Urmând aceste practici și aplicând capacitățile AI integrate ale SQL Server 2025, puteți crea aplicații RAG gata de producție care oferă experiențe precise, contextuale și sigure bazate pe inteligență artificială.