डेटाबेस संदर्भ के साथ संकेत बढ़ाएं

Complete

पुनर्प्राप्ति आपको डेटा प्राप्त करती है। लेकिन एक JSON बूँद अपने आप में किसी के सवाल का जवाब नहीं देती है। यदि कोई ग्राहक बाइक पेडल संगतता के बारे में पूछता है, तो आपको अपने डेटाबेस से उत्पाद की जानकारी मिल गई है, लेकिन अब आपको भाषा मॉडल को यह बताने की आवश्यकता है कि इसके साथ क्या करना है। वह चरण आरएजी में "ए" का प्रतिनिधित्व करता है: वृद्धि।

चैट संदेश संरचना को समझें

अलग-अलग मॉडलों में अलग-अलग एपीआई होते हैं, लेकिन अधिकांश चैट-आधारित मॉडल एक समान पैटर्न का पालन करते हैं। हम अपने उदाहरण के रूप में Azure OpenAI का उपयोग करते हैं, लेकिन अवधारणाएं व्यापक रूप से लागू होती हैं।

Azure OpenAI चैट मॉडल भूमिकाओं वाले संदेशों की अपेक्षा करते हैं। सिस्टम की भूमिका परिभाषित करती है कि सहायक को कैसे व्यवहार करना चाहिए। उपयोगकर्ता की भूमिका में मूल प्रश्न और डेटाबेस संदर्भ होता है जिसमें मॉडल को अपना उत्तर देना चाहिए। वैकल्पिक रूप से, एक सहायक भूमिका एक बहु-मोड़ वार्तालाप में पिछले प्रतिक्रियाओं को पकड़ सकती है। यहां प्रॉम्प्ट संरचना का एक सरलीकृत उदाहरण दिया गया है:

{
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful assistant that answers questions about products. Use only the provided context to answer. If the context doesn't contain enough information, say so."
    },
    {
      "role": "user", 
      "content": "Context: {retrieved_data}\n\nQuestion: {user_question}"
    }
  ]
}

इस उदाहरण में, {retrieved_data} आपके द्वारा अपनी उत्पाद क्वेरी से बनाया गया JSON होगा, और {user_question} कुछ ऐसा होगा "कौन से पैडल माउंटेन -500 के साथ संगत हैं?"

सिस्टम संदेश जमीनी नियम निर्धारित करता है। उपयोगकर्ता संदेश आपके डेटाबेस संदर्भ को वास्तविक प्रश्न के साथ जोड़ता है।

T-SQL में प्रॉम्प्ट बनाएं

आप इस JSON को अपने एप्लिकेशन कोड में बना सकते हैं, लेकिन यह सब डेटाबेस में रखना अक्सर सुविधाजनक होता है। आपकी पुनर्प्राप्ति क्वेरी, आपका संदर्भ स्वरूपण, और आपका त्वरित निर्माण एक साथ रहते हैं, और T-SQL और JSON_OBJECTJSON_ARRAY फ़ंक्शन JSON स्वरूपण को संभालते हैं।

DECLARE @userQuestion NVARCHAR(1000) = 'Which pedals are compatible with the Mountain-500?';

-- @context contains retrieved product data as JSON from the retrieval step

DECLARE @systemMessage NVARCHAR(MAX) = 'You are a customer service assistant for Adventure Works. Answer questions using only the provided product information. Be concise and helpful.';

DECLARE @userMessage NVARCHAR(MAX) = 'Product information: ' + @context + CHAR(10) + CHAR(10) + 'Customer question: ' + @userQuestion;

DECLARE @payload NVARCHAR(MAX) = JSON_OBJECT(
    'messages': JSON_ARRAY(
        JSON_OBJECT('role': 'system', 'content': @systemMessage),
        JSON_OBJECT('role': 'user', 'content': @userMessage)
    ),
    'max_tokens': 500,
    'temperature': 0.7
);

वेरिएबल में @payload अब Azure OpenAI API के लिए तैयार एक पूर्ण अनुरोध निकाय है।

मॉडल को अपने डेटा में ग्राउंड करें

ग्राउंडिंग मॉडल को आपके डेटा को सत्य के स्रोत के रूप में उपयोग करने के लिए कहता है। इसके बिना, मॉडल अपने प्रशिक्षण डेटा पर भरोसा कर सकता है, जो आपके डोमेन के लिए पुराना या गलत हो सकता है। एडवेंचर वर्क्स बाइक वारंटी के बारे में पूछने वाले ग्राहक को इंटरनेट से सामान्य वारंटी जानकारी नहीं मिलनी चाहिए।

अच्छे ग्राउंडिंग निर्देश दायरा सेट करते हैं ("केवल प्रदान किए गए उत्पाद डेटा का उपयोग करें"), ईमानदारी को प्रोत्साहित करें ("यदि आपके पास पर्याप्त जानकारी नहीं है, तो ऐसा कहें"), और प्रारूप निर्दिष्ट कर सकते हैं ("प्रतिक्रियाओं को 100 शब्दों से कम रखें")। सिस्टम भूमिका के लिए यहां एक उदाहरण दिया गया है:

DECLARE @systemMessage NVARCHAR(MAX) = 
'You are an Adventure Works product expert. Follow these rules:
1. Answer only using the product information provided
2. Do not invent features or specifications
3. If information is missing, tell the customer you''ll need to check
4. Keep responses under 100 words
5. Suggest related products when relevant';

ये निर्देश मॉडल को केंद्रित रहने और उपयोगी, सटीक उत्तर प्रदान करने में मदद करते हैं।

नियंत्रण मॉडल व्यवहार

अनुरोध पेलोड में कुछ पैरामीटर शामिल हैं जो प्रभावित करते हैं कि मॉडल प्रतिक्रियाएं कैसे उत्पन्न करता है:

  • max_tokens प्रतिक्रिया की लंबाई सीमित करता है। विस्तृत उत्पाद उत्तरों के लिए, 500 से 1,000 अच्छी तरह से काम करता है.
  • temperature रचनात्मकता को 0 से 2 के पैमाने पर नियंत्रित करता है। कम मान (0.3 से 0.5) अधिक सुसंगत, तथ्यात्मक प्रतिक्रियाएं उत्पन्न करते हैं। उच्च मान मॉडल को अधिक रचनात्मक बनने देते हैं, जो आप आमतौर पर आरएजी के लिए नहीं चाहते हैं।

टोकन और तापमान को नियंत्रित करने से यह सुनिश्चित करने में मदद मिलती है कि आपके डेटा में आधारित होने पर मॉडल अनुमानित रूप से व्यवहार करता है।

पूर्ण पेलोड का निर्माण करें

यहां बताया गया है कि आप एडवेंचर वर्क्स टेबल का उपयोग करके उत्पाद प्रश्न के लिए आरएजी प्रॉम्प्ट कैसे बना सकते हैं:

DECLARE @userQuestion NVARCHAR(1000) = 'Which pedals are compatible with the Mountain-500?';
DECLARE @questionVector VECTOR(1536);
DECLARE @context NVARCHAR(MAX);
DECLARE @payload NVARCHAR(MAX);

-- Generate embedding for the question
SELECT @questionVector = AI_GENERATE_EMBEDDINGS(@userQuestion USE MODEL my_embedding_model);

-- Get product context using vector search
SET @context = (
    SELECT TOP 3
        p.Name AS ProductName,
        p.Color,
        p.Size,
        pc.Name AS Category,
        pm.Name AS Model
    FROM Production.Product p
    INNER JOIN Production.ProductSubcategory ps ON p.ProductSubcategoryID = ps.ProductSubcategoryID
    INNER JOIN Production.ProductCategory pc ON ps.ProductCategoryID = pc.ProductCategoryID
    INNER JOIN Production.ProductModel pm ON p.ProductModelID = pm.ProductModelID
    ORDER BY VECTOR_DISTANCE('cosine', p.DescriptionVector, @questionVector)
    FOR JSON PATH
);

-- Build the prompt
SET @payload = JSON_OBJECT(
    'messages': JSON_ARRAY(
        JSON_OBJECT(
            'role': 'system', 
            'content': 'You are an Adventure Works product assistant. Use only the provided product data to answer questions.'
        ),
        JSON_OBJECT(
            'role': 'user', 
            'content': 'Product data: ' + @context + CHAR(10) + 'Question: ' + @userQuestion
        )
    ),
    'max_tokens': 500,
    'temperature': 0.5
);

चर में @payload अब वह सब कुछ शामिल है जो मॉडल की जरूरत है: आपके ग्राउंडिंग निर्देश, पुनर्प्राप्त उत्पाद डेटा और ग्राहक का प्रश्न। आपको बस इसे मॉडल समापन बिंदु पर भेजना है और प्रतिक्रिया को संभालना है।

चाबी छीन लेना

संकेत वह जगह है जहां पुनर्प्राप्ति उपयोगी हो जाती है। आपके JSON संदर्भ का कोई मतलब नहीं है जब तक कि आप मॉडल को यह नहीं बताते कि इसका उपयोग कैसे करना है। सिस्टम संदेश में स्पष्ट ग्राउंडिंग नियम सेट करें ताकि मॉडल आपके डेटा से चिपके रहे। तथ्यात्मक उत्तरों के लिए तापमान कम रखें। T-SQL में सीधे वैध JSON पेलोड का उपयोग करें JSON_OBJECT और बनाने JSON_ARRAY के लिए।