Browse Guides

Connect AI to Halo using Azure OpenAI
Reading mode
Copy Link
Link Copied!
Print
Feedback
This guide has multiple versions available:
<style>p { margin: 0; }span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left:0; padding-left:5px;}blockquote blockquote{ border-color: #00bcd4; color: #00bcd4;}blockquote blockquote blockquote{ border-color: #43a047; color: #43a047;} table.grid{ border-collapse: collapse;} table.grid td, table.grid th { border: 1px solid #ddd;} .fr-fic.fr-dib{ display: block; margin: 5px auto;}.fr-fic.fr-dib.fr-fir{ text-align: right; margin: 5px 0 5px auto;}.fr-fic.fr-dib.fr-fil{ text-align: left; margin: 5px auto 5px 0;}.fr-fic.fr-dii{ float: none; margin: 5px auto;}.fr-fic.fr-dii.fr-fil{ float: left; margin: 5px auto;}.fr-fic.fr-dii.fr-fir{ float: right; margin: 5px auto;}img.fr-dib.fr-fir { margin-right: 0; text-align: right;}img.fr-dib.fr-fil { margin-left: 0; text-align: left;}img.fr-dib { margin: 5px auto; display: block; float: none;}img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC;}img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc;}img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box;}</style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><style> p { margin: 0; } span.fr-emoticon.fr-emoticon-img { background-repeat: no-repeat !important; font-size: inherit; height: 1em; width: 1em; min-height: 20px; min-width: 20px; display: inline-block; margin: -0.1em 0.1em 0.1em; line-height: 1; vertical-align: middle; } span.fr-emoticon { font-weight: normal; font-family: "Apple Color Emoji", "Segoe UI Emoji", "NotoColorEmoji", "Segoe UI Symbol", "Android Emoji", "EmojiSymbols"; display: inline; line-height: 0; } blockquote { border-left: solid 2px #5e35b1; color: #5e35b1; margin-left: 0; padding-left: 5px; } blockquote blockquote { border-color: #00bcd4; color: #00bcd4; } blockquote blockquote blockquote { border-color: #43a047; color: #43a047; } table.grid { border-collapse: collapse; } table.grid td, table.grid th { border: 1px solid #ddd; } .fr-fic.fr-dib { display: block; margin: 5px auto; } .fr-fic.fr-dib.fr-fir { text-align: right; margin: 5px 0 5px auto; } .fr-fic.fr-dib.fr-fil { text-align: left; margin: 5px auto 5px 0; } .fr-fic.fr-dii { float: none; margin: 5px auto; } .fr-fic.fr-dii.fr-fil { float: left; margin: 5px auto; } .fr-fic.fr-dii.fr-fir { float: right; margin: 5px auto; } img.fr-dib.fr-fir { margin-right: 0; text-align: right; } img.fr-dib.fr-fil { margin-left: 0; text-align: left; } img.fr-dib { margin: 5px auto; display: block; float: none; } img.fr-bordered { box-sizing: content-box; border: solid 5px #CCC; } img.fr-shadow { box-shadow: 10px 10px 5px 0px #cccccc; } img.fr-rounded { border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; -moz-background-clip: padding; -webkit-background-clip: padding-box; background-clip: padding-box; } </style><p><strong>In this guide we will cover:</strong></p><p><strong>- Video Walkthrough &nbsp;</strong></p><p><strong>- Create an AI model in Azure and connect this model to Halo</strong></p><p><strong>- Entering Details in Halo&nbsp;</strong></p><p><br></p><p>You are able to connect your own Azure OpenAI deployment to Halo instead of using Halo&#39;s default AI connection. In this article we will walk you through how to configure this connection.&nbsp;</p><p><br></p><p><br></p><p><strong><span style="font-size: 14pt;">Video Walkthrough &nbsp;</span></strong></p><p id="isPasted">The following video is by Mendy Green from Rising Tide Consulting, a HaloPSA partner, who covers how to set up the AI application in Azure.</p><p><br></p><p><iframe width="560" height="315" src="https://www.youtube.com/embed/VW62ldt_Hkk?si=jnAWVR5Xd7zWGAS6" title="YouTube video player" frameborder="0" allowfullscreen=""><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span><span class="fr-mk" style="display: none;">&nbsp;</span></iframe></p><p>&nbsp;</p><p><strong><em>Disclaimer: For the most up to date information please use the content in this guide instead of the video.&nbsp;</em></strong></p><p><br></p><p><strong><span style="font-size: 14pt;">Create an AI model in Azure<br></span></strong></p><p>It is important to make sure your Azure tenant is set up to support the Azure AI area, as it can be disabled. If this is the case, please contact Microsoft to get Azure AI enabled for your tenant. There are multiple models which you can deploy in the Azure AI area, for information on them please visit the Microsoft documentation: <a href="https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/models" rel="noopener noreferrer" target="_blank">AI Models</a>.</p><p><br></p><p><strong><span style="font-size: 12pt;">Create a Resource Group&nbsp;</span></strong></p><p id="isPasted">Go to <a data-fr-linked="true" href="https://portal.azure.com">https://portal.azure.com</a> and sign in with your Azure account. If you don&rsquo;t have an account yet, you will need to create one first.&nbsp;</p><p>Then create a Resource Group, if you do not already have one:</p><ul style="margin-left: 20px ;"><li id="isPasted">In the left sidebar, click Resource groups</li><li>Select Create</li><li>Give your resource group a name (e.g., openai-rg)</li><li>Choose your subscription and region</li><li>Click Review + Create, then Create</li></ul><p><br></p><p id="isPasted"><strong><span style="font-size: 12pt;">Create an Azure OpenAI Resource:</span></strong></p><ul style="margin-left: 20px ;"><li>From the Azure Portal home, click Create a resource</li><li>Search for Azure OpenAI in the marketplace</li><li>Select it, then click Create</li></ul><p><br><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImM5MDA3NjUxLTgwMGMtNDg5NS04MzljLWI3YjM0OGQzYzVlMiJ9.D1tJq0eQVJw-i1cXSK__fTwlXlivFFVEBv019mH0EEU" class="fr-fic fr-fil fr-dib" width="880" style="width: 882px; height: 612.667px;" height="613"></p><p><strong><span style="font-size: 10pt;">Fig 1. Create Azure OpenAI resource&nbsp;</span></strong></p><p><br></p><p>Now fill in the required fields.&nbsp;</p><p><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImU1ZjM2MzJiLTI5MmQtNDE5Ny04MjE2LWVmYTk4NmZiNzU0MSJ9.NeuKIt8qwQNHLrvPP6vE8AufUYz9deSwYIbeR9lXmi4" class="fr-fic fr-fil fr-dib" width="718" style="width: 720px; height: 764.255px;" height="764"></p><p><strong><span style="font-size: 10pt;">Fig 2. Complete details for Azure OpenAI resource</span></strong></p><p><br></p><p id="isPasted"><strong>Subscription</strong><strong>&nbsp;-</strong> Pick your Azure subscription.</p><p><strong>Resource Group</strong> <strong>-&nbsp;</strong>Select the resource group you created earlier.</p><p><strong>Region -</strong> Select a region</p><p><strong>Name -</strong> Give your resource a unique name (e.g., openai-service).</p><p><br></p><p id="isPasted">Click Review + Create, then Create. This will provision your Azure OpenAI instance.</p><p><br></p><p><strong><span style="font-size: 12pt;">Create Deployments</span></strong></p><p id="isPasted">Once your resource is created, you will need to navigate to it in the Azure Portal and create two deployments - one for your embeddings, and one for your GPT model.</p><p><br></p><p>Go to the Azure OpenAI Studio (sometimes called AI Foundry). Alternatively, you can go directly to <a data-fr-linked="true" href="https://ai.azure.com">https://ai.azure.com</a> and sign in.</p><p><br></p><p id="isPasted"><strong>Deploy an Embeddings Model</strong></p><ul style="margin-left: 20px ;"><li>In Azure AI Foundry, open your Azure OpenAI resource</li><li>Go to Deployments in the left sidebar</li><li>Click + Create new deployment</li><li>Choose Model = text-embedding-ada-002 (or another embedding model that uses 1536 dimensions)</li><li>Enter a deployment name (e.g., embeddings-deployment)</li><li>Click Create</li></ul><p><strong>Deploy a GPT Model</strong></p><ul style="margin-left: 20px ;"><li>Still in Deployments, click + Create new deployment again</li><li>Choose your GPT model (e.g., gpt-35-turbo or gpt-4)</li><li>Give it a deployment name (e.g., gpt-deployment)</li><li><span style="white-space:pre;">&nbsp;</span>Adjust settings if needed (defaults are usually fine)</li><li><span style="white-space:pre;">&nbsp;</span>Click Create</li></ul><p><br></p><p id="isPasted"><strong><span style="font-size: 12pt;">Retrieve Your Keys &amp; Endpoint</span></strong></p><ul style="margin-left: 20px ;"><li>In the Azure Portal, go back to your Azure OpenAI resource.</li><li>From the left sidebar, select Keys and Endpoint.</li><li>Copy your Endpoint URL and API Key</li><li style="color: rgb(209, 72, 65);"><strong><em>Important: Save these somewhere secure. You&rsquo;ll need them when connecting your application to Azure AI.</em></strong></li><li>Enter the API version you would like to use. For information on available API versions refer to <a href="https://learn.microsoft.com/en-us/azure/foundry/openai/api-version-lifecycle?tabs=python" target="_blank" rel="noopener noreferrer">Microsoft&#39;s documentation</a>. Be sure to check for the most recent articles from Microsoft as these are updated often. &nbsp;<ul><li>For the creation of custom Virtual Agents within Halo, a minimum API version of 2024-02-15-preview is required.</li></ul></li><li>The best way to find the API Key, is to go to the Azure OpenAI Studio: <a data-fr-linked="true" href="https://oai.azure.com/">https://oai.azure.com/</a> and location the version within the model deployment.&nbsp;</li></ul><p><br></p><p><strong><span style="font-size: 14pt;">Entering Details in Halo&nbsp;</span></strong></p><p>Now that you have completed the Azure AI setup, you will need to establish the AI connection in Halo.&nbsp;</p><p><br></p><p>Navigate to Configuration &gt; AI &gt; and select the &#39;Own Azure OpenAI Connection&#39; option under &#39;Default AI Connection&#39;, then select the &#39;Configure Azure OpenAI Connection&#39; button.&nbsp;</p><p><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjU4NjgxYjU1LTA1NjItNGNkZi1iNjhlLWJkZjI3YzJkOGFkMyJ9.RbXGfEVqTLPluP2KxpbRQ3rsCccdo0J7UbZdAPwjTJo" class="fr-fic fr-fil fr-dib" width="509" style="width: 511px; height: 382.667px;" height="383"></p><p><strong><span style="font-size: 10pt;">Fig 3. Configure OpenAI Connection in Halo&nbsp;</span></strong></p><p><br></p><p>Enter the connection details for your deployment.</p><p><img src="https://halo.haloservicedesk.com/api/attachment/image?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6IjMxY2E4Y2Y1LWU5NmEtNDQ3OS1iYTM1LTE5YmEzN2UwODBhZSJ9.Zv-wTb8QwUVl2gva-nkdTJwlzYu4RxF_gFjltnVSMgw" class="fr-fic fr-fil fr-dib" width="691" style="width: 693px; height: 554.4px;" height="554"></p><p><strong><span style="font-size: 10pt;">Fig 4. Example connection details for an Azure OpenAI connection</span></strong></p><p><br></p><p><strong>Endpoint:</strong> Enter the resource URL that you copied earlier when in your Azure OpenAI resource</p><p><strong>API Key:</strong> Enter the API key that you copied earlier when in your Azure OpenAI resource</p><p><strong>API Version:</strong> Enter your API version&nbsp;</p><p id="isPasted"><strong>Default Azure OpenAI Deployment</strong> - Enter your GPT deployment name here, this is the model that will perform summarisations of Ticket data</p><p><strong>Default Azure OpenAI Embeddings Deployment&nbsp;</strong>- Enter your embeddings model here</p><p><br></p><p><strong><em>Note: Your &#39;Default Azure OpenAI Deployment&#39; should be the name of the deployment, not the model itself. For example, if the model is gpt-5-mini but the deployment name is demo-gpt, I would put demo-gpt in the the &#39;Default Azure OpenAI Deployment&#39; field.&nbsp;</em></strong></p><p><br></p><p>There are no save buttons on this modal window, but your details will save automatically once you click off the fields.&nbsp;</p>
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.