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

      From Data To Decisions: UX Strategies For Real-Time Dashboards

      September 13, 2025

      Honeycomb launches AI observability suite for developers

      September 13, 2025

      Low-Code vs No-Code Platforms for Node.js: What CTOs Must Know Before Investing

      September 12, 2025

      ServiceNow unveils Zurich AI platform

      September 12, 2025

      Building personal apps with open source and AI

      September 12, 2025

      What Can We Actually Do With corner-shape?

      September 12, 2025

      Craft, Clarity, and Care: The Story and Work of Mengchu Yao

      September 12, 2025

      Distribution Release: Q4OS 6.1

      September 12, 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

      Optimizely Mission Control – Part III

      September 14, 2025
      Recent

      Optimizely Mission Control – Part III

      September 14, 2025

      Learning from PHP Log to File Example

      September 13, 2025

      Online EMI Calculator using PHP – Calculate Loan EMI, Interest, and Amortization Schedule

      September 13, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      sudo vs sudo-rs: What You Need to Know About the Rust Takeover of Classic Sudo Command

      September 14, 2025
      Recent

      sudo vs sudo-rs: What You Need to Know About the Rust Takeover of Classic Sudo Command

      September 14, 2025

      Dmitry — The Deep Magic

      September 13, 2025

      Right way to record and share our Terminal sessions

      September 13, 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

    Repurposing Protein Folding Models for Generation with Latent Diffusion
    Artificial Intelligence

    Repurposing Protein Folding Models for Generation with Latent Diffusion

    September 14, 2025
    Artificial Intelligence

    Scaling Up Reinforcement Learning for Traffic Smoothing: A 100-AV Highway Deployment

    September 14, 2025
    Leave A Reply Cancel Reply

    For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

    Continue Reading

    CVE-2025-6270 – HDF5 Heap-Based Buffer Overflow Vulnerability

    Common Vulnerabilities and Exposures (CVEs)

    CVE-2025-4483 – iSourcecode Gym Management System SQL Injection Vulnerability

    Common Vulnerabilities and Exposures (CVEs)

    Voicebots in Banking: The New Standard for 24/7 Support

    Web Development

    New RISC-V SBC Supports Ubuntu 24.04, But Won’t Run Future Releases

    Linux

    Highlights

    CVE-2025-5894 – Honding Technology Smart Parking Management System Missing Authorization Privilege Escalation Vulnerability

    June 9, 2025

    CVE ID : CVE-2025-5894

    Published : June 9, 2025, 8:15 a.m. | 1 hour, 23 minutes ago

    Description : Smart Parking Management System from Honding Technology has a Missing Authorization vulnerability, allowing remote attackers with regular privileges to access a specific functionality to create administrator accounts, and subsequently log into the system using those accounts.

    Severity: 8.8 | HIGH

    Visit the link for more details, such as CVSS details, affected products, timeline, and more…

    CVE-2025-48885 – XWiki URL Shortener Unauthenticated Page Creation Vulnerability

    May 30, 2025

    Warhammer 40,000: Dawn of War – Definitive Edition Launches on PC

    August 19, 2025

    I asked AI to modify mission-critical code, and what happened next haunts me

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

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