89 lines
2.7 KiB
Markdown

# 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
```javascript
let url = `${settings.apiurl}/${settings.productcode}/${settings.ingress}/inference/verint-contextual-question-answering-v2`;
```
### Installation
1. Copy the [CQA_Retriever](./GlobalVariable/CQA_Retriever.js) and [CQA_RetieverSettings](./GlobalVariable/CQA_RetrieverSettings.json) files into **Global Variables**
2. _Optional:_ Import the Example Conversation Flow and Intent
### Configuration
#### CQA_RetieverSettings
Fill out the settings below.
```json
{
"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 input that dont provides an answer, then change ```${conversationData.cqa_question}``` to ```${recognizedObject.input}```
> NOTE: This example exits via the output pin '0'. If you need it to continue to the next block, then change the ```next(0)``` to ```next()``` on the second to last line,
```javascript
(async () => {
console.log(`CQA Retrieval: ${conversationData.cqa_question}`);
conversationData.cqa_source = await CQA_Retriever().retrieve(
conversationData.cqa_question
);
})()
.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(() => {
next(0);
});
```