2.9 KiB

CQA Retriever

This package provides an example RAG process using Azure AI Search for Retrieval and the Verint DaVinci Contextual Question Answer (CQA) Service.

What's New: Updated [24/05/2025]

  • Initial Release

Setup Instructions

Prerequisites

  • This package requires the CQA Widget to be installed and configured.

WARNING: There is an error in the CQA_66308ec473f3d10350a2e499 Global Variable file on line 20: It should read v2 instead of v1 and should be fixed manually

    let url = `${settings.apiurl}/${settings.productcode}/${settings.ingress}/inference/verint-contextual-question-answering-v2`;

Installation

  1. Copy the CQA_Retriever and CQA_RetieverSettings files into Global Variables
  2. Optional: Import the Example Conversation Flow and Intent

Configuration

CQA_RetieverSettings

Fill out the settings below.

{
  "azure_aisearch": {
    "endpoint": "https://iva-demo-vector-service.search.windows.net",
    "key": "<azure_aisearch_key>",
    "index_name": "iva-vector-demo"
  },
  "azure_openai_api": {
    "key": "<azure_openai_key>",
    "instance_name": "iva-open-ai",
    "deployment_name": "text-embedding-3-small",
    "embeddings_deployment_name": null,
    "version": "2024-08-01-preview"
  },
  "filterExpression": "search.in(company, 'Verint')",
  "debug": true
}

Package Content Details

CQA_RetieverSettings

A global variable JSON object with environment-specific settings. See above for details.

CQA_Retriever

A global variable function which handles the logic and API calls used to retrieve documents for Context.

Example code block that should be using in your Conversation Flows

This is included in the Example Conversation Flow if you have imported that. If you want to use this on the global flow as a catch all for inputs that do not provide an answer, then change ${conversationData.cqa_question} to ${recognizedObject.input}

NOTE: This example exits via the output pin '0' on error or no sources found.

let exitState=0; // i.e. next(0) means something went wrong or we found 0 sources

(async () => {
    console.log(`CQA Retrieval: ${conversationData.cqa_question}`)
    conversationData.cqa_source = await CQA_Retriever().retrieve(conversationData.cqa_question);
    console.log({ lengthOfSources: conversationData.cqa_source.instances[0].sources.length})
    exitState = conversationData.cqa_source.instances[0].sources.length
    
})()
  .catch((error) => {
    console.log(error.message)
    recognizedObject.answers.push(error.message)
    recognizedObject.errorInfo = {
      ...recognizedObject.errorInfo,
      label: {
        data: error.toJSON ? error.toJSON() : {},
        message: error.message,
      },
    }
  })
  .finally(() => {
    console.log({exitState: exitState})
    if (exitState)
        next()
    else
        next(0)
  })