Building an Advanced AI Assistant for QAPilot: Combining RAG and LLM Capabilities

Introduction

This comprehensive guide details the implementation of a sophisticated AI assistant for QAPilot, combining Retrieval-Augmented Generation (RAG) with OpenAI's GPT models. The system features a hybrid architecture that leverages both pre-existing knowledge and AI capabilities to provide accurate, context-aware responses about QAPilot's mobile testing platform.

Key Features

  • Multi-tier retrieval system with MongoDB and JSON fallback

  • Context-aware AI responses using RAG

  • Source attribution for responses

  • Scalable architecture using Node.js and Express

  • Intelligent query processing and relevance ranking

  • Error handling with graceful fallbacks

Technical Architecture

1. Data Layer

javascriptCopy// MongoDB for primary storage
const db = client.db("QApilotCoreData");
const collection = db.collection("Phrases");

// JSON fallback for basic responses
const jsonData = require('./data.json');

2. Retrieval System

The RAG implementation uses a three-stage retrieval process:

javascriptCopyasync function findSimilarDocuments(query, collection) {
  // 1. Query Processing
  const keywords = query.toLowerCase().split(/\s+/);
  const regexPatterns = keywords.map(keyword => 
    new RegExp(keyword.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'i')
  );

  // 2. Document Retrieval
  const documents = await collection.find({
    $or: [
      { query: { $in: regexPatterns } },
      { response: { $in: regexPatterns } }
    ]
  }).limit(3).toArray();

  // 3. Relevance Ranking
  return documents.sort((a, b) => {
    const aMatches = keywords.filter(keyword => 
      new RegExp(keyword, 'i').test(a.query) || 
      new RegExp(keyword, 'i').test(a.response)
    ).length;
    return bMatches - aMatches;
  });
}

3. Context-Aware AI Response Generation

The system uses OpenAI's GPT model with custom context injection:

javascriptCopyasync function getAIResponseWithContext(query, context) {
  const systemPrompt = `You are a helpful QA assistant for QAPilot, a mobile automation testing tool. 
  Use the following context to answer the question:
  Context: ${context}

  If the context doesn't contain relevant information, provide a general response 
  based on common mobile automation testing knowledge.`;

  const response = await axios.post(
    'https://api.openai.com/v1/chat/completions',
    {
      model: 'gpt-3.5-turbo-0125',
      messages: [
        { role: 'system', content: systemPrompt },
        { role: 'user', content: query }
      ],
      temperature: 0.7
    }
  );
  return response.data.choices[0].message.content;
}

4. Intelligent Query Processing

The system implements a fallback mechanism to ensure reliable responses:

javascriptCopyapp.post('/search', async (req, res) => {
  const query = req.body.query?.toLowerCase() || '';

  try {
    // Primary: MongoDB RAG
    const similarDocs = await findSimilarDocuments(query, collection);

    if (similarDocs.length > 0) {
      const context = similarDocs.map(doc => 
        `Question: ${doc.query}\nAnswer: ${doc.response}`
      ).join('\n\n');

      response = await getAIResponseWithContext(query, context);
      sourceMessage = 'Response generated from database context';
    } else {
      // Secondary: JSON Fallback
      const jsonResponse = await getResponseFromJSON(query);
      if (jsonResponse) {
        response = jsonResponse;
        sourceMessage = 'Response from JSON knowledge base';
      } else {
        // Tertiary: Pure LLM
        response = await getAIResponseWithContext(query, '');
        sourceMessage = 'AI-generated response';
      }
    }

    res.send({ response, source: sourceMessage });
  } catch (error) {
    console.error('Error:', error);
    res.status(500).send('An error occurred while processing your request.');
  }
});

Future Enhancements

  1. Vector Embeddings Integration
javascriptCopyasync function getEmbeddings(text) {
  const response = await axios.post(
    'https://api.openai.com/v1/embeddings',
    {
      model: 'text-embedding-ada-002',
      input: text
    }
  );
  return response.data.embeddings[0];
}
  1. Semantic Search Implementation
javascriptCopyasync function semanticSearch(query, collection) {
  const queryEmbedding = await getEmbeddings(query);
  return await collection.aggregate([
    {
      $search: {
        knnBeta: {
          vector: queryEmbedding,
          path: "embedding",
          k: 5
        }
      }
    }
  ]).toArray();
}

Best Practices for Deployment

  1. Knowledge Base Management
  • Regularly update the MongoDB collection with new QAPilot features

  • Maintain consistent document structure

  • Include metadata for better context matching

  1. Performance Optimization
  • Implement caching for frequent queries

  • Use connection pooling for MongoDB

  • Optimize regex patterns for better matching

  1. Monitoring and Logging
  • Track response sources

  • Monitor response times

  • Log unsuccessful queries for knowledge base improvement

Security Considerations

  1. Data Protection
  • Secure MongoDB connection string

  • Implement rate limiting

  • Validate user input

  1. API Security
  • Use environment variables for sensitive data

  • Implement request validation

  • Add authentication if needed

  1. Error Handling
  • Graceful fallbacks for each layer

  • Proper error messages

  • Request timeout handling

Conclusion

This implementation provides a robust foundation for an AI-powered QA assistant that combines the benefits of RAG with the capabilities of modern language models. The system's ability to provide context-aware responses while maintaining fallback options ensures reliable and accurate information delivery about QAPilot's features and capabilities.

30
Subscribe to my newsletter

Read articles from Karri Sai Sudheer Reddy directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Karri Sai Sudheer Reddy
Karri Sai Sudheer Reddy

Karri Sai Sudheer ReddySenior Product Engineer in Test @QApilot Ex - CISCO | Playwright | Type Script | Java Script | Appium | Selenium | TestNG | <= ISTQB - AWS - Cybersecurity Certified