Close Menu
    DevStackTipsDevStackTips
    • Home
    • News & Updates
      1. Tech & Work
      2. View All

      Sunshine And March Vibes (2025 Wallpapers Edition)

      May 15, 2025

      The Case For Minimal WordPress Setups: A Contrarian View On Theme Frameworks

      May 15, 2025

      How To Fix Largest Contentful Paint Issues With Subpart Analysis

      May 15, 2025

      How To Prevent WordPress SQL Injection Attacks

      May 15, 2025

      Intel’s latest Arc graphics driver is ready for DOOM: The Dark Ages, launching for Premium Edition owners on PC today

      May 15, 2025

      NVIDIA’s drivers are causing big problems for DOOM: The Dark Ages, but some fixes are available

      May 15, 2025

      Capcom breaks all-time profit records with 10% income growth after Monster Hunter Wilds sold over 10 million copies in a month

      May 15, 2025

      Microsoft plans to lay off 3% of its workforce, reportedly targeting management cuts as it changes to fit a “dynamic marketplace”

      May 15, 2025
    • Development
      1. Algorithms & Data Structures
      2. Artificial Intelligence
      3. Back-End Development
      4. Databases
      5. Front-End Development
      6. Libraries & Frameworks
      7. Machine Learning
      8. Security
      9. Software Engineering
      10. Tools & IDEs
      11. Web Design
      12. Web Development
      13. Web Security
      14. Programming Languages
        • PHP
        • JavaScript
      Featured

      A cross-platform Markdown note-taking application

      May 15, 2025
      Recent

      A cross-platform Markdown note-taking application

      May 15, 2025

      AI Assistant Demo & Tips for Enterprise Projects

      May 15, 2025

      Celebrating Global Accessibility Awareness Day (GAAD)

      May 15, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      Intel’s latest Arc graphics driver is ready for DOOM: The Dark Ages, launching for Premium Edition owners on PC today

      May 15, 2025
      Recent

      Intel’s latest Arc graphics driver is ready for DOOM: The Dark Ages, launching for Premium Edition owners on PC today

      May 15, 2025

      NVIDIA’s drivers are causing big problems for DOOM: The Dark Ages, but some fixes are available

      May 15, 2025

      Capcom breaks all-time profit records with 10% income growth after Monster Hunter Wilds sold over 10 million copies in a month

      May 15, 2025
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»Development»Natural Language Q&A in Optimizely CMS Using Azure OpenAI and AI Search

    Natural Language Q&A in Optimizely CMS Using Azure OpenAI and AI Search

    April 25, 2025

    In Part 2, we integrated Azure AI Search with Azure Personalizer to build a smarter, user-focused experience in Optimizely CMS. We used ServiceAPI to send CMS content to Azure AI Search. In Part 3, we’ll take things a step further: enabling users to ask natural language questions and get AI-powered answers. But here’s the twist: instead of using ServiceAPI, this time we’ll explore how to query indexed content directly using Azure AI Search’s REST API.

    Why Natural Language Q&A?

    Sometimes users don’t know the exact keywords. They ask things like:

    “How do I return a product?” “Can I book a demo?”

    With OpenAI on Azure and the semantic capabilities of Azure AI Search, your website can now understand those queries and provide helpful, contextual responses.

    Architecture Overview

    1. CMS content is indexed by Azure AI Search (via ServiceAPI or crawler).
    2. The search index is enriched with semantic settings.
    3. A user types a natural language query.
    4. Your backend uses Azure Search’s Semantic Search + Azure OpenAI (chat/completion API) to return a contextual answer.

    Using Azure Search API to Extract Content

    You can directly access indexed content using the Azure Search REST API. Here’s an example of how to fetch top 5 results:

    public async Task<List<string>> SearchAzureContentAsync(string query)
    {
        var searchServiceName = "<your-search-service-name>";
        var indexName = "<your-index-name>";
        var apiKey = "<your-api-key>";
    
        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("api-key", apiKey);
    
        var url = $"https://{searchServiceName}.search.windows.net/indexes/{indexName}/docs?api-version=2021-04-30-Preview&search={query}&$top=5";
        var result = await client.GetStringAsync(url);
        
        var json = JsonDocument.Parse(result);
        var docs = new List<string>();
    
        foreach (var item in json.RootElement.GetProperty("value").EnumerateArray())
        {
            docs.Add(item.GetProperty("content").GetString());
        }
    
        return docs;
    }

    Generate Answer Using Azure OpenAI

    Once we retrieve relevant documents, we’ll pass them into Azure OpenAI to generate a contextual answer:

    public async Task<string> AskOpenAiAsync(string question, List<string> context)
    {
        var prompt = $"""
    You are a helpful assistant. Based on the following content, answer the question:
    
    {string.Join("nn", context)}
    
    Question: {question}
    Answer:
    """;
    
        var openAiKey = "<your-openai-key>";
        var endpoint = "https://<your-openai-endpoint>.openai.azure.com/openai/deployments/<deployment-name>/completions?api-version=2022-12-01";
    
        var payload = new
        {
            prompt = prompt,
            temperature = 0.7,
            max_tokens = 200
        };
    
        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("api-key", openAiKey);
        var response = await client.PostAsync(endpoint, new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"));
    
        var result = JsonDocument.Parse(await response.Content.ReadAsStringAsync());
        return result.RootElement.GetProperty("choices")[0].GetProperty("text").GetString();
    }

    Integrate with Optimizely CMS

    You can create a controller like this:

    public class QnAController : Controller
    {
        [HttpPost]
        public async Task<ActionResult> Ask(string question)
        {
            var docs = await SearchAzureContentAsync(question);
            var answer = await AskOpenAiAsync(question, docs);
            return Json(new { answer });
        }
    }

    And on your view:

    <form method="post" id="qnaForm">
      <input type="text" name="question" placeholder="Ask a question..." />
      <button type="submit">Ask</button>
    </form>
    <div id="answer"></div>
    
    <script>
      $('#qnaForm').submit(function(e) {
        e.preventDefault();
        const question = $('input[name=question]').val();
        fetch('/QnA/Ask', {
          method: 'POST',
          headers: {'Content-Type': 'application/json'},
          body: JSON.stringify({ question })
        })
        .then(r => r.json())
        .then(data => $('#answer').text(data.answer));
      });
    </script>

    Summary

    This wraps up the final puzzle piece: letting users speak freely with your Optimizely site, while AI interprets and responds in real-time. From content indexing to re-ranking to full-on Q&A, your CMS is now intelligent, conversational, and user-first. Want to see this in action? Stay tuned for the sample repo and video walkthrough!

    The blog is also published here Natural Language Q&A in Optimizely CMS Using Azure OpenAI and AI Search

    Source: Read More 

    Facebook Twitter Reddit Email Copy Link
    Previous ArticleHow to use chatgpt4o to redesign your website
    Next Article Perficient Included in IDC Market Glance: Healthcare Provider Operational IT Solutions, 1Q25

    Related Posts

    Security

    Nmap 7.96 Launches with Lightning-Fast DNS and 612 Scripts

    May 16, 2025
    Common Vulnerabilities and Exposures (CVEs)

    CVE-2025-4732 – TOTOLINK A3002R/A3002RU HTTP POST Request Handler Buffer Overflow

    May 16, 2025
    Leave A Reply Cancel Reply

    Continue Reading

    Laravel Wayfinder Public Beta

    Development

    How PHP Type Juggling Works – Explained with Code Examples

    Development

    I’ve used my AirPods Pro 2 since they first launched. Here’s my buying advice for 2025

    News & Updates

    New report finds signs of slowing supply chain security momentum, plateaued DevOps maturity

    Development

    Highlights

    Development

    Bridging Neural Dynamics and Collective Intelligence: A Study on Adaptive Multi-Agent Systems for Effective Consensus-Building in Complex and Dynamic Environments

    December 2, 2024

    The study of collective decision-making in biological and artificial systems addresses critical challenges in understanding…

    How Can You Reinstall Windows 10?

    July 5, 2024

    Vue.js image input component

    January 9, 2025

    U.S. Cyber Safety Board Slams Microsoft Over Breach by China-Based Hackers

    April 3, 2024
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.