CINXE.COM
Azure Open IA, acelerando nossos caminhos. | Microsoft Community Hub
<!DOCTYPE html><html lang="en-US"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><link rel="icon" href="https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/themes/customTheme1/favicon-1730836283320.png?time=1730836286415&image-dimensions=32x32" type="image/png"/><link rel="apple-touch-icon" href="https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/themes/customTheme1/favicon-1730836283320.png?time=1730836286415&image-dimensions=180x180" type="image/png"/><link rel="manifest" href="/manifest.webmanifest/customTheme1/1739785328557"/><style>@font-face { font-family: "Segoe UI"; font-style: normal; font-weight: 400; font-display: swap; src: local("Segoe UI-normal-400"), url("https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/themes/customTheme1/SegoeUI-normal-400.woff2") format('woff2'); } @font-face { font-family: "Segoe UI"; font-style: normal; font-weight: 300; font-display: swap; src: local("Segoe UI-normal-300"), url("https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/themes/customTheme1/SegoeUI-normal-300.woff2") format('woff2'); } @font-face { font-family: "Segoe UI"; font-style: normal; font-weight: 600; font-display: swap; src: local("Segoe UI-normal-600"), url("https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/themes/customTheme1/SegoeUI-normal-600.woff2") format('woff2'); } @font-face { font-family: "Segoe UI"; font-style: normal; font-weight: 700; font-display: swap; src: local("Segoe UI-normal-700"), url("https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/themes/customTheme1/SegoeUI-normal-700.woff2") format('woff2'); } @font-face { font-family: "Segoe UI"; font-style: italic; font-weight: 400; font-display: swap; src: local("Segoe UI-italic-400"), url("https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/themes/customTheme1/SegoeUI-italic-400.woff2") format('woff2'); }</style><style type="text/css">:root { --lia-vars-loaded: flex;--lia-body-margin: 0;--lia-body-max-width: 100%;--lia-container-max-width: 1300px;--lia-one-column-narrow-width: 800px;--lia-grid-gutter-width-md: 30px;--lia-grid-gutter-width-xs: 10px;--lia-bs-black-h: 0;--lia-bs-black-s: 0%;--lia-bs-black-l: 0%;--lia-bs-black: hsl(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l));--lia-bs-white-h: 0;--lia-bs-white-s: 0%;--lia-bs-white-l: 100%;--lia-bs-white: hsl(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l));--lia-bs-gray-100-h: 0;--lia-bs-gray-100-s: 0%;--lia-bs-gray-100-l: 96.86274509803921%;--lia-bs-gray-100: hsl(var(--lia-bs-gray-100-h), var(--lia-bs-gray-100-s), var(--lia-bs-gray-100-l));--lia-bs-gray-200-h: 0;--lia-bs-gray-200-s: 0%;--lia-bs-gray-200-l: 96.86274509803921%;--lia-bs-gray-200: hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), var(--lia-bs-gray-200-l));--lia-bs-gray-300-h: 0;--lia-bs-gray-300-s: 0%;--lia-bs-gray-300-l: 90.98039215686275%;--lia-bs-gray-300: hsl(var(--lia-bs-gray-300-h), var(--lia-bs-gray-300-s), var(--lia-bs-gray-300-l));--lia-bs-gray-400-h: 0;--lia-bs-gray-400-s: 0%;--lia-bs-gray-400-l: 85.09803921568627%;--lia-bs-gray-400: hsl(var(--lia-bs-gray-400-h), var(--lia-bs-gray-400-s), var(--lia-bs-gray-400-l));--lia-bs-gray-500-h: 0;--lia-bs-gray-500-s: 0%;--lia-bs-gray-500-l: 80%;--lia-bs-gray-500: hsl(var(--lia-bs-gray-500-h), var(--lia-bs-gray-500-s), var(--lia-bs-gray-500-l));--lia-bs-gray-600-h: 0;--lia-bs-gray-600-s: 0%;--lia-bs-gray-600-l: 44.31372549019608%;--lia-bs-gray-600: hsl(var(--lia-bs-gray-600-h), var(--lia-bs-gray-600-s), var(--lia-bs-gray-600-l));--lia-bs-gray-700-h: 0;--lia-bs-gray-700-s: 0%;--lia-bs-gray-700-l: 43.92156862745098%;--lia-bs-gray-700: hsl(var(--lia-bs-gray-700-h), var(--lia-bs-gray-700-s), var(--lia-bs-gray-700-l));--lia-bs-gray-800-h: 0;--lia-bs-gray-800-s: 0%;--lia-bs-gray-800-l: 32.94117647058823%;--lia-bs-gray-800: hsl(var(--lia-bs-gray-800-h), var(--lia-bs-gray-800-s), var(--lia-bs-gray-800-l));--lia-bs-gray-900-h: 0;--lia-bs-gray-900-s: 0%;--lia-bs-gray-900-l: 20%;--lia-bs-gray-900: hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l));--lia-bs-dark-h: 0;--lia-bs-dark-s: 0%;--lia-bs-dark-l: 32.94117647058823%;--lia-bs-dark: hsl(var(--lia-bs-dark-h), var(--lia-bs-dark-s), var(--lia-bs-dark-l));--lia-bs-light-h: 0;--lia-bs-light-s: 0%;--lia-bs-light-l: 96.86274509803921%;--lia-bs-light: hsl(var(--lia-bs-light-h), var(--lia-bs-light-s), var(--lia-bs-light-l));--lia-bs-primary-h: 210.2830188679245;--lia-bs-primary-s: 100%;--lia-bs-primary-l: 41.568627450980394%;--lia-bs-primary: hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l));--lia-bs-secondary-h: 0;--lia-bs-secondary-s: 0%;--lia-bs-secondary-l: 20%;--lia-bs-secondary: hsl(var(--lia-bs-secondary-h), var(--lia-bs-secondary-s), var(--lia-bs-secondary-l));--lia-bs-body-bg-h: 0;--lia-bs-body-bg-s: 0%;--lia-bs-body-bg-l: 100%;--lia-bs-body-bg: hsl(var(--lia-bs-body-bg-h), var(--lia-bs-body-bg-s), var(--lia-bs-body-bg-l));--lia-bs-body-color-h: 0;--lia-bs-body-color-s: 0%;--lia-bs-body-color-l: 20%;--lia-bs-body-color: hsl(var(--lia-bs-body-color-h), var(--lia-bs-body-color-s), var(--lia-bs-body-color-l));--lia-bs-info-h: 206.66666666666674;--lia-bs-info-s: 73.63636363636363%;--lia-bs-info-l: 56.86274509803921%;--lia-bs-info: hsl(var(--lia-bs-info-h), var(--lia-bs-info-s), var(--lia-bs-info-l));--lia-bs-success-h: 169.5454545454545;--lia-bs-success-s: 53.2258064516129%;--lia-bs-success-l: 51.37254901960784%;--lia-bs-success: hsl(var(--lia-bs-success-h), var(--lia-bs-success-s), var(--lia-bs-success-l));--lia-bs-warning-h: 43.04347826086956;--lia-bs-warning-s: 96.8421052631579%;--lia-bs-warning-l: 62.745098039215684%;--lia-bs-warning: hsl(var(--lia-bs-warning-h), var(--lia-bs-warning-s), var(--lia-bs-warning-l));--lia-bs-danger-h: 9.316770186335418;--lia-bs-danger-s: 74.88372093023257%;--lia-bs-danger-l: 42.15686274509804%;--lia-bs-danger: hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), var(--lia-bs-danger-l));--lia-alert-system-color-h: 24;--lia-alert-system-color-s: 100%;--lia-alert-system-color-l: 50%;--lia-alert-system-color: hsl(var(--lia-alert-system-color-h), var(--lia-alert-system-color-s), var(--lia-alert-system-color-l));--lia-bs-text-muted-h: 0;--lia-bs-text-muted-s: 0%;--lia-bs-text-muted-l: 43.92156862745098%;--lia-bs-text-muted: hsl(var(--lia-bs-text-muted-h), var(--lia-bs-text-muted-s), var(--lia-bs-text-muted-l));--lia-highlight-color-h: 57.804878048780495;--lia-highlight-color-s: 100%;--lia-highlight-color-l: 83.92156862745098%;--lia-highlight-color: hsl(var(--lia-highlight-color-h), var(--lia-highlight-color-s), var(--lia-highlight-color-l));--lia-outline-color: var(--lia-bs-primary);--lia-bs-font-size-base: 16px;--lia-bs-font-size-sm: 14px;--lia-font-size-xxs: 11px;--lia-font-size-xs: 12px;--lia-bs-font-size-lg: 20px;--lia-bs-small-font-size: 14px;--lia-font-size-xl: 24px;--lia-bs-font-family-base: Segoe UI, system-ui;--lia-bs-font-weight-base: 400;--lia-bs-font-weight-light: 300;--lia-bs-font-weight-normal: 400;--lia-font-weight-md: 500;--lia-bs-font-weight-bold: 700;--lia-font-style-base: normal;--lia-bs-line-height-base: 1.5;--lia-bs-h1-font-size: 34px;--lia-bs-h2-font-size: 32px;--lia-bs-h3-font-size: 28px;--lia-bs-h4-font-size: 24px;--lia-bs-h5-font-size: 20px;--lia-bs-h6-font-size: 16px;--lia-bs-headings-font-family: Segoe UI, system-ui;--lia-bs-headings-line-height: 1.3;--lia-bs-headings-font-weight: 400;--lia-headings-font-style: normal;--lia-subheader-font-size: 11px;--lia-subheader-font-weight: 500;--lia-bs-headings-color: var(--lia-bs-body-color);--lia-h1-letter-spacing: normal;--lia-h2-letter-spacing: normal;--lia-h3-letter-spacing: normal;--lia-h4-letter-spacing: normal;--lia-h5-letter-spacing: normal;--lia-h6-letter-spacing: normal;--lia-letter-spacing-subheading: 2px;--lia-letter-spacing-sm: normal;--lia-letter-spacing-xs: normal;--lia-h1-font-weight: var(--lia-bs-headings-font-weight);--lia-h2-font-weight: var(--lia-bs-headings-font-weight);--lia-h3-font-weight: var(--lia-bs-headings-font-weight);--lia-h4-font-weight: var(--lia-bs-headings-font-weight);--lia-h5-font-weight: var(--lia-bs-headings-font-weight);--lia-h6-font-weight: var(--lia-bs-headings-font-weight);--lia-btn-font-style: normal;--lia-bs-btn-font-weight: 700;--lia-btn-text-transform: none;--lia-bs-btn-disabled-opacity: 0.5;--lia-bs-btn-border-radius-sm: 3px;--lia-bs-btn-border-radius: 3px;--lia-bs-btn-border-radius-lg: 5px;--lia-bs-btn-padding-x: 12px;--lia-bs-btn-padding-x-lg: 16px;--lia-btn-padding-x-hero: 60px;--lia-bs-btn-padding-y: 5px;--lia-bs-btn-padding-y-lg: 7px;--lia-btn-padding-y-hero: var(--lia-bs-btn-padding-y-lg);--lia-btn-primary-text-color: var(--lia-bs-white);--lia-btn-primary-text-hover-color: var(--lia-bs-white);--lia-btn-primary-text-active-color: var(--lia-bs-white);--lia-btn-primary-bg-color: var(--lia-bs-primary);--lia-btn-primary-bg-hover-color: hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.85));--lia-btn-primary-bg-active-color: hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.7));--lia-btn-primary-border: 1px solid transparent;--lia-btn-primary-border-hover: 1px solid transparent;--lia-btn-primary-border-active: 1px solid transparent;--lia-btn-primary-border-focus: 1px solid var(--lia-bs-white);--lia-btn-primary-box-shadow-focus: 0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2);--lia-btn-secondary-text-color: var(--lia-bs-gray-900);--lia-btn-secondary-text-hover-color: hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95));--lia-btn-secondary-text-active-color: hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9));--lia-btn-secondary-bg-color: var(--lia-bs-gray-200);--lia-btn-secondary-bg-hover-color: hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.96));--lia-btn-secondary-bg-active-color: hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.92));--lia-btn-secondary-border: 1px solid transparent;--lia-btn-secondary-border-hover: 1px solid transparent;--lia-btn-secondary-border-active: 1px solid transparent;--lia-btn-secondary-border-focus: 1px solid transparent;--lia-btn-secondary-box-shadow-focus: 0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2);--lia-btn-tertiary-text-color: var(--lia-bs-gray-900);--lia-btn-tertiary-text-hover-color: hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95));--lia-btn-tertiary-text-active-color: hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9));--lia-btn-tertiary-bg-color: transparent;--lia-btn-tertiary-bg-hover-color: transparent;--lia-btn-tertiary-bg-active-color: hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.04);--lia-btn-tertiary-border: 1px solid transparent;--lia-btn-tertiary-border-hover: 1px solid hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08);--lia-btn-tertiary-border-active: 1px solid transparent;--lia-btn-tertiary-border-focus: 1px solid transparent;--lia-btn-tertiary-box-shadow-focus: 0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2);--lia-btn-destructive-text-color: var(--lia-bs-danger);--lia-btn-destructive-text-hover-color: hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.95));--lia-btn-destructive-text-active-color: hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.9));--lia-btn-destructive-bg-color: var(--lia-bs-gray-200);--lia-btn-destructive-bg-hover-color: hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.96));--lia-btn-destructive-bg-active-color: hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.92));--lia-btn-destructive-border: 1px solid transparent;--lia-btn-destructive-border-hover: 1px solid transparent;--lia-btn-destructive-border-active: 1px solid transparent;--lia-btn-destructive-border-focus: 1px solid transparent;--lia-btn-destructive-box-shadow-focus: 0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2);--lia-bs-border-color: hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08);--lia-bs-border-radius-sm: 3px;--lia-bs-border-radius: 5px;--lia-bs-border-radius-lg: 9px;--lia-border-radius-50: 100vw;--lia-content-item-border: none;--lia-box-shadow-xs: 0 0 0 1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.08), 0 3px 0 -1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.16);--lia-bs-box-shadow-sm: 0 2px 4px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.12);--lia-bs-box-shadow: 0 5px 15px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3);--lia-bs-box-shadow-lg: 0 10px 30px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3);--lia-bs-link-color: var(--lia-bs-primary);--lia-bs-link-hover-color: hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) - 10%));--lia-bs-link-decoration: none;--lia-bs-link-hover-decoration: underline;--lia-timing-fast: 150ms;--lia-timing-normal: 250ms;--lia-timing-slow: 500ms;--lia-timing-slowest: 750ms;--lia-timing-function: cubic-bezier(0.07, 0.91, 0.51, 1);--lia-avatar-border-radius: 50%;--lia-default-message-font-style: NORMAL;--lia-default-message-font-weight: 400;--lia-default-message-link-color: var(--lia-bs-link-color);--lia-default-message-link-decoration: none;--lia-default-message-link-font-weight: 400;--lia-default-message-link-font-style: NORMAL;--lia-forum-color-h: 207.03703703703695;--lia-forum-color-s: 73.63636363636363%;--lia-forum-color-l: 56.86274509803921%;--lia-forum-color: hsl(var(--lia-forum-color-h), var(--lia-forum-color-s), var(--lia-forum-color-l));--lia-forum-font-family: var(--lia-bs-font-family-base);--lia-forum-font-weight: var(--lia-default-message-font-weight);--lia-forum-line-height: var(--lia-bs-line-height-base);--lia-forum-font-style: var(--lia-default-message-font-style);--lia-forum-message-link-color: var(--lia-default-message-link-color);--lia-forum-message-link-decoration: var(--lia-default-message-link-decoration);--lia-forum-message-link-font-style: var(--lia-default-message-link-font-style);--lia-forum-message-link-font-weight: var(--lia-default-message-link-font-weight);--lia-forum-solved-color-h: 161.94690265486724;--lia-forum-solved-color-s: 73.85620915032679%;--lia-forum-solved-color-l: 30.000000000000004%;--lia-forum-solved-color: hsl(var(--lia-forum-solved-color-h), var(--lia-forum-solved-color-s), var(--lia-forum-solved-color-l));--lia-blog-color-h: 170.126582278481;--lia-blog-color-s: 73.83177570093459%;--lia-blog-color-l: 41.96078431372548%;--lia-blog-color: hsl(var(--lia-blog-color-h), var(--lia-blog-color-s), var(--lia-blog-color-l));--lia-blog-font-family: var(--lia-bs-font-family-base);--lia-blog-font-weight: var(--lia-default-message-font-weight);--lia-blog-line-height: 1.75;--lia-blog-font-style: var(--lia-default-message-font-style);--lia-blog-message-link-color: var(--lia-default-message-link-color);--lia-blog-message-link-decoration: var(--lia-default-message-link-decoration);--lia-blog-message-link-font-style: var(--lia-default-message-link-font-style);--lia-blog-message-link-font-weight: var(--lia-default-message-link-font-weight);--lia-tkb-color-h: 212.6470588235294;--lia-tkb-color-s: 30.909090909090907%;--lia-tkb-color-l: 43.13725490196079%;--lia-tkb-color: hsl(var(--lia-tkb-color-h), var(--lia-tkb-color-s), var(--lia-tkb-color-l));--lia-tkb-font-family: var(--lia-bs-font-family-base);--lia-tkb-font-weight: var(--lia-default-message-font-weight);--lia-tkb-line-height: 1.75;--lia-tkb-font-style: var(--lia-default-message-font-style);--lia-tkb-message-link-color: var(--lia-default-message-link-color);--lia-tkb-message-link-decoration: var(--lia-default-message-link-decoration);--lia-tkb-message-link-font-style: var(--lia-default-message-link-font-style);--lia-tkb-message-link-font-weight: var(--lia-default-message-link-font-weight);--lia-qanda-color-h: 207.03703703703695;--lia-qanda-color-s: 73.63636363636363%;--lia-qanda-color-l: 56.86274509803921%;--lia-qanda-color: hsl(var(--lia-qanda-color-h), var(--lia-qanda-color-s), var(--lia-qanda-color-l));--lia-qanda-font-family: var(--lia-bs-font-family-base);--lia-qanda-font-weight: var(--lia-default-message-font-weight);--lia-qanda-line-height: var(--lia-bs-line-height-base);--lia-qanda-font-style: var(--lia-default-message-link-font-style);--lia-qanda-message-link-color: var(--lia-default-message-link-color);--lia-qanda-message-link-decoration: var(--lia-default-message-link-decoration);--lia-qanda-message-link-font-style: var(--lia-default-message-link-font-style);--lia-qanda-message-link-font-weight: var(--lia-default-message-link-font-weight);--lia-qanda-solved-color: #3FA023;--lia-idea-color-h: 30.117647058823536;--lia-idea-color-s: 100%;--lia-idea-color-l: 50%;--lia-idea-color: hsl(var(--lia-idea-color-h), var(--lia-idea-color-s), var(--lia-idea-color-l));--lia-idea-font-family: var(--lia-bs-font-family-base);--lia-idea-font-weight: var(--lia-default-message-font-weight);--lia-idea-line-height: var(--lia-bs-line-height-base);--lia-idea-font-style: var(--lia-default-message-font-style);--lia-idea-message-link-color: var(--lia-default-message-link-color);--lia-idea-message-link-decoration: var(--lia-default-message-link-decoration);--lia-idea-message-link-font-style: var(--lia-default-message-link-font-style);--lia-idea-message-link-font-weight: var(--lia-default-message-link-font-weight);--lia-contest-color-h: 42.95081967213116;--lia-contest-color-s: 96.82539682539684%;--lia-contest-color-l: 62.94117647058823%;--lia-contest-color: hsl(var(--lia-contest-color-h), var(--lia-contest-color-s), var(--lia-contest-color-l));--lia-contest-font-family: var(--lia-bs-font-family-base);--lia-contest-font-weight: var(--lia-default-message-font-weight);--lia-contest-line-height: var(--lia-bs-line-height-base);--lia-contest-font-style: var(--lia-default-message-link-font-style);--lia-contest-message-link-color: var(--lia-default-message-link-color);--lia-contest-message-link-decoration: var(--lia-default-message-link-decoration);--lia-contest-message-link-font-style: ITALIC;--lia-contest-message-link-font-weight: var(--lia-default-message-link-font-weight);--lia-occasion-color-h: 9.101123595505612;--lia-occasion-color-s: 74.16666666666666%;--lia-occasion-color-l: 47.05882352941176%;--lia-occasion-color: hsl(var(--lia-occasion-color-h), var(--lia-occasion-color-s), var(--lia-occasion-color-l));--lia-occasion-font-family: var(--lia-bs-font-family-base);--lia-occasion-font-weight: var(--lia-default-message-font-weight);--lia-occasion-line-height: var(--lia-bs-line-height-base);--lia-occasion-font-style: var(--lia-default-message-font-style);--lia-occasion-message-link-color: var(--lia-default-message-link-color);--lia-occasion-message-link-decoration: var(--lia-default-message-link-decoration);--lia-occasion-message-link-font-style: var(--lia-default-message-link-font-style);--lia-occasion-message-link-font-weight: var(--lia-default-message-link-font-weight);--lia-grouphub-color-h: 0;--lia-grouphub-color-s: 0%;--lia-grouphub-color-l: 20%;--lia-grouphub-color: hsl(var(--lia-grouphub-color-h), var(--lia-grouphub-color-s), var(--lia-grouphub-color-l));--lia-category-color-h: 0;--lia-category-color-s: 0%;--lia-category-color-l: 58.03921568627452%;--lia-category-color: hsl(var(--lia-category-color-h), var(--lia-category-color-s), var(--lia-category-color-l));--lia-community-color-h: 0;--lia-community-color-s: 0%;--lia-community-color-l: 100%;--lia-community-color: hsl(var(--lia-community-color-h), var(--lia-community-color-s), var(--lia-community-color-l));--lia-product-color-h: 0;--lia-product-color-s: 0%;--lia-product-color-l: 58.03921568627452%;--lia-product-color: hsl(var(--lia-product-color-h), var(--lia-product-color-s), var(--lia-product-color-l));--lia-panel-bg-color: var(--lia-bs-white);--lia-panel-border-radius: var(--lia-bs-border-radius);--lia-panel-border-color: var(--lia-bs-border-color);--lia-panel-box-shadow: none;--lia-card-bg-color: var(--lia-panel-bg-color);--lia-card-border-radius: var(--lia-panel-border-radius);--lia-card-box-shadow: var(--lia-box-shadow-xs);--lia-bs-modal-content-color: var(--lia-bs-body-color);--lia-bs-modal-content-bg: var(--lia-bs-white);--lia-bs-modal-backdrop-bg: var(--lia-bs-black);--lia-bs-modal-sm: 440px;--lia-bs-modal-md: 760px;--lia-bs-modal-lg: 1080px;--lia-bs-modal-backdrop-opacity: 0.3;--lia-bs-modal-content-box-shadow-xs: var(--lia-bs-box-shadow-sm);--lia-bs-modal-content-box-shadow-xs-up: var(--lia-bs-box-shadow);--lia-bs-modal-header-font-weight: 700;--lia-icon-size-10: 10px;--lia-icon-size-12: 12px;--lia-icon-size-14: 14px;--lia-icon-size-16: 16px;--lia-icon-size-20: 20px;--lia-icon-size-24: 24px;--lia-icon-size-30: 30px;--lia-icon-size-40: 40px;--lia-icon-size-50: 50px;--lia-icon-size-60: 60px;--lia-icon-size-80: 80px;--lia-icon-size-120: 120px;--lia-icon-size-160: 160px;--lia-bs-input-border-color: var(--lia-bs-gray-600);--lia-bs-input-disabled-color: var(--lia-bs-gray-600);--lia-bs-input-focus-border-color: var(--lia-bs-primary);--lia-bs-label-margin-bottom: 10px;--lia-bs-input-btn-font-size: var(--lia-bs-font-size-sm);--lia-bs-input-focus-box-shadow: 0 0 0 3px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2);--lia-check-label-margin-bottom: 2px;--lia-checkbox-border-radius: 3px;--lia-bs-input-border-radius-sm: var(--lia-bs-border-radius-sm);--lia-bs-input-border-radius: var(--lia-bs-border-radius);--lia-bs-input-border-radius-lg: var(--lia-bs-border-radius-lg);--lia-bs-form-text-margin-top: 4px;--lia-textarea-border-radius: var(--lia-bs-border-radius);--lia-input-active-fill-color: var(--lia-bs-primary);--lia-bs-popover-arrow-height: 8px;--lia-bs-popover-arrow-width: 16px;--lia-bs-popover-max-width: 300px;--lia-bs-popover-min-width: 100px;--lia-bs-popover-header-bg: var(--lia-bs-white);--lia-bs-popover-border-color: var(--lia-bs-border-color);--lia-bs-popover-border-radius: var(--lia-bs-border-radius);--lia-bs-popover-box-shadow: 0 0.5rem 1rem hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.15);--lia-bs-dropdown-font-size: var(--lia-bs-font-size-sm);--lia-bs-dropdown-border-color: var(--lia-bs-border-color);--lia-bs-dropdown-border-radius: var(--lia-bs-border-radius-sm);--lia-bs-dropdown-divider-bg: var(--lia-bs-gray-300);--lia-bs-dropdown-item-padding-y: 5px;--lia-bs-dropdown-item-padding-x: 20px;--lia-bs-dropdown-header-color: var(--lia-bs-gray-700);--lia-bs-list-group-item-padding-y: 15px;--lia-bs-list-group-item-padding-x: 15px;--lia-bs-list-group-border-color: var(--lia-bs-gray-300);--lia-list-li-mb-sm: 5px;--lia-list-li-mb-md: 10px;--lia-list-li-mb-lg: 15px;--lia-list-li-mb-xl: 20px;--lia-list-li-mb-xxl: 25px;--lia-img-preview-content-bg-color: var(--lia-bs-gray-900);--lia-img-preview-title-color: var(--lia-bs-white);--lia-img-preview-control-color: var(--lia-bs-white);--lia-img-preview-control-bg-color: var(--lia-bs-gray-800);--lia-load-dot-dark-color: hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.2);--lia-load-dot-light-color: hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.5);--lia-load-bar-dark-color: hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.06);--lia-load-bar-light-color: hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.4);--lia-load-text-color: var(--lia-bs-link-color);--lia-load-text-font-weight: var(--lia-font-weight-md);--lia-load-text-font-size: var(--lia-bs-font-size-sm);--lia-divider-size: 3px;--lia-divider-ml: 4px;--lia-divider-mr: 4px;--lia-divider-border-radius: 50%;--lia-divider-bg-color: var(--lia-bs-gray-600);--lia-divider-bg-color-active: var(--lia-bs-gray-600);--lia-chip-max-width: 300px;--lia-chip-height: 30px;--lia-yiq-light-h: 0;--lia-yiq-light-s: 0%;--lia-yiq-light-l: 100%;--lia-yiq-light: hsl(var(--lia-yiq-light-h), var(--lia-yiq-light-s), var(--lia-yiq-light-l));--lia-yiq-dark-h: 0;--lia-yiq-dark-s: 0%;--lia-yiq-dark-l: 0%;--lia-yiq-dark: hsl(var(--lia-yiq-dark-h), var(--lia-yiq-dark-s), var(--lia-yiq-dark-l));--lia-rte-bg-color: var(--lia-bs-white);--lia-rte-border-radius: var(--lia-panel-border-radius);--lia-rte-box-shadow: var(--lia-panel-box-shadow);--lia-rte-custom-color-1: #bfedd2;--lia-rte-custom-color-2: #fbeeb8;--lia-rte-custom-color-3: #f8cac6;--lia-rte-custom-color-4: #eccafa;--lia-rte-custom-color-5: #c2e0f4;--lia-rte-custom-color-6: #2dc26b;--lia-rte-custom-color-7: #f1c40f;--lia-rte-custom-color-8: #e03e2d;--lia-rte-custom-color-9: #b96ad9;--lia-rte-custom-color-10: #3598db;--lia-rte-custom-color-11: #169179;--lia-rte-custom-color-12: #e67e23;--lia-rte-custom-color-13: #ba372a;--lia-rte-custom-color-14: #843fa1;--lia-rte-custom-color-15: #236fa1;--lia-rte-custom-color-16: #ecf0f1;--lia-rte-custom-color-17: #ced4d9;--lia-rte-custom-color-18: #95a5a6;--lia-rte-custom-color-19: #7e8c8d;--lia-rte-custom-color-20: #34495e;--lia-rte-custom-color-21: #000000;--lia-rte-custom-color-22: #ffffff;--lia-rte-default-message-header-mt: 40px;--lia-rte-default-message-header-mb: 20px;--lia-rte-default-message-item-mt: 0;--lia-rte-default-message-item-mb: 10px;--lia-rte-diff-added-color: hsla(170, 53%, 51%, 0.4);--lia-rte-diff-removed-color: hsla(9, 74%, 47%, 0.4);--lia-rte-diff-none-color: hsla(0, 0%, 80%, 0.4);--lia-rte-diff-changed-color: hsla(43, 97%, 63%, 0.4);--lia-rte-special-message-header-mt: 40px;--lia-rte-special-message-header-mb: 20px;--lia-rte-special-message-item-mt: 0;--lia-rte-special-message-item-mb: 10px;--lia-prism-color: #000000;--lia-prism-bg-color: #f5f2f0;--lia-prism-font-family: var(--font-family-monospace);--lia-prism-font-size: var(--lia-bs-font-size-base);--lia-prism-font-weight-bold: var(--lia-bs-font-weight-bold);--lia-prism-font-style-italic: italic;--lia-prism-tab-size: 2;--lia-prism-highlight-color: #b3d4fc;--lia-prism-comment-color: #62707e;--lia-prism-punctuation-color: #6f6f6f;--lia-prism-namespace-opacity: 0.7;--lia-prism-prop-color: #990055;--lia-prism-selector-color: #517a00;--lia-prism-operator-color: #906736;--lia-prism-operator-bg-color: hsla(0, 0%, 100%, 0.5);--lia-prism-keyword-color: #0076a9;--lia-prism-function-color: #d3284b;--lia-prism-variable-color: #c14700;--lia-tag-bg-color: var(--lia-bs-gray-200);--lia-tag-bg-hover-color: var(--lia-bs-gray-400);--lia-tag-border-radius: var(--lia-bs-border-radius-sm);--lia-tag-color: var(--lia-bs-body-color);--lia-tag-hover-color: var(--lia-bs-body-color);--lia-tag-font-weight: var(--lia-font-weight-md);--lia-tag-font-size: var(--lia-font-size-xxs);--lia-tag-text-transform: uppercase;--lia-tag-letter-spacing: 0.5px;--lia-bs-toast-border-radius: var(--lia-bs-border-radius);--lia-bs-toast-padding-x: 12px;--lia-emoji-skin-tone-default: #ffcd43;--lia-emoji-skin-tone-light: #fae3c5;--lia-emoji-skin-tone-medium-light: #e2cfa5;--lia-emoji-skin-tone-medium: #daa478;--lia-emoji-skin-tone-medium-dark: #a78058;--lia-emoji-skin-tone-dark: #5e4d43;--lia-email-link-color: #0069D4;--lia-email-link-hover-color: #0061c2;--lia-email-link-decoration: none;--lia-email-link-hover-decoration: underline;--lia-email-border-color: #e4e4e4;--lia-email-btn-border-radius-lg: 5px;--lia-email-btn-padding-x-lg: 16px;--lia-email-btn-padding-y-lg: 7px;--lia-email-btn-font-weight: 700;--lia-email-btn-primary-text-color: #ffffff;--lia-email-btn-primary-text-hover-color: #ffffff;--lia-email-btn-primary-bg-color: #0069D4;--lia-email-btn-primary-bg-hover-color: #005cb8;--lia-email-btn-primary-border: 1px solid transparent;--lia-email-btn-primary-border-hover: 1px solid transparent;--lia-email-panel-border-color: #e4e4e4;--lia-email-panel-border-radius: 5px;--lia-checkmark-input-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/checkmark-input.svg#checkmark-input);--lia-chevron-down-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/chevron-down.svg#chevron-down);--lia-close-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/close.svg#close);--lia-edit-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/edit.svg#edit);--lia-select-arrow-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/select-arrow.svg#select-arrow);--lia-video-play-active-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/video-play-active.svg#video-play-active);--lia-video-play-disabled-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/video-play-disabled.svg#video-play-disabled);--lia-user-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/user.svg#user);--lia-user-mention-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/mention.svg#mention);--lia-content-blog-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/content-blog.svg#content-blog);--lia-content-knowledge-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/content-knowledge.svg#content-knowledge);--lia-content-category-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/content-category.svg#content-category);--lia-content-contest-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/content-contest.svg#content-contest);--lia-content-discussion-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/content-discussion.svg#content-discussion);--lia-content-discussion-question-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/content-discussion-question.svg#content-discussion-question);--lia-content-occasion-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/content-occasion.svg#content-occasion);--lia-content-group-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/content-group.svg#content-group);--lia-content-idea-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/content-idea.svg#content-idea);--lia-external-link-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/external-link.svg#external-link);--lia-anchor-icon: url(/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/anchor.svg#anchor);--lia-primary-dark-h: var(--lia-bs-primary-h);--lia-primary-dark-s: var(--lia-bs-primary-s);--lia-primary-dark-l: 36%;--lia-primary-dark: hsl(var(--lia-primary-dark-h), var(--lia-primary-dark-s), var(--lia-primary-dark-l));--lia-primary-light-h: var(--lia-bs-primary-h);--lia-primary-light-s: var(--lia-bs-primary-s);--lia-primary-light-l: 74%;--lia-primary-light: hsl(var(--lia-primary-light-h), var(--lia-primary-light-s), var(--lia-primary-light-l));--lia-primary-lighter-h: var(--lia-bs-primary-h);--lia-primary-lighter-s: var(--lia-bs-primary-s);--lia-primary-lighter-l: 89%;--lia-primary-lighter: hsl(var(--lia-primary-lighter-h), var(--lia-primary-lighter-s), var(--lia-primary-lighter-l));--lia-primary-lightest-h: var(--lia-bs-primary-h);--lia-primary-lightest-s: var(--lia-bs-primary-s);--lia-primary-lightest-l: 95%;--lia-primary-lightest: hsl(var(--lia-primary-lightest-h), var(--lia-primary-lightest-s), var(--lia-primary-lightest-l));--lia-info-dark-h: var(--lia-bs-info-h);--lia-info-dark-s: var(--lia-bs-info-s);--lia-info-dark-l: 39%;--lia-info-dark: hsl(var(--lia-info-dark-h), var(--lia-info-dark-s), var(--lia-info-dark-l));--lia-info-light-h: var(--lia-bs-info-h);--lia-info-light-s: var(--lia-bs-info-s);--lia-info-light-l: 72%;--lia-info-light: hsl(var(--lia-info-light-h), var(--lia-info-light-s), var(--lia-info-light-l));--lia-info-lighter-h: var(--lia-bs-info-h);--lia-info-lighter-s: var(--lia-bs-info-s);--lia-info-lighter-l: 85%;--lia-info-lighter: hsl(var(--lia-info-lighter-h), var(--lia-info-lighter-s), var(--lia-info-lighter-l));--lia-info-lightest-h: var(--lia-bs-info-h);--lia-info-lightest-s: var(--lia-bs-info-s);--lia-info-lightest-l: 93%;--lia-info-lightest: hsl(var(--lia-info-lightest-h), var(--lia-info-lightest-s), var(--lia-info-lightest-l));--lia-success-dark-h: var(--lia-bs-success-h);--lia-success-dark-s: var(--lia-bs-success-s);--lia-success-dark-l: 24%;--lia-success-dark: hsl(var(--lia-success-dark-h), var(--lia-success-dark-s), var(--lia-success-dark-l));--lia-success-light-h: var(--lia-bs-success-h);--lia-success-light-s: var(--lia-bs-success-s);--lia-success-light-l: 62%;--lia-success-light: hsl(var(--lia-success-light-h), var(--lia-success-light-s), var(--lia-success-light-l));--lia-success-lighter-h: var(--lia-bs-success-h);--lia-success-lighter-s: var(--lia-bs-success-s);--lia-success-lighter-l: 80%;--lia-success-lighter: hsl(var(--lia-success-lighter-h), var(--lia-success-lighter-s), var(--lia-success-lighter-l));--lia-success-lightest-h: var(--lia-bs-success-h);--lia-success-lightest-s: var(--lia-bs-success-s);--lia-success-lightest-l: 91%;--lia-success-lightest: hsl(var(--lia-success-lightest-h), var(--lia-success-lightest-s), var(--lia-success-lightest-l));--lia-warning-dark-h: var(--lia-bs-warning-h);--lia-warning-dark-s: var(--lia-bs-warning-s);--lia-warning-dark-l: 39%;--lia-warning-dark: hsl(var(--lia-warning-dark-h), var(--lia-warning-dark-s), var(--lia-warning-dark-l));--lia-warning-light-h: var(--lia-bs-warning-h);--lia-warning-light-s: var(--lia-bs-warning-s);--lia-warning-light-l: 68%;--lia-warning-light: hsl(var(--lia-warning-light-h), var(--lia-warning-light-s), var(--lia-warning-light-l));--lia-warning-lighter-h: var(--lia-bs-warning-h);--lia-warning-lighter-s: var(--lia-bs-warning-s);--lia-warning-lighter-l: 84%;--lia-warning-lighter: hsl(var(--lia-warning-lighter-h), var(--lia-warning-lighter-s), var(--lia-warning-lighter-l));--lia-warning-lightest-h: var(--lia-bs-warning-h);--lia-warning-lightest-s: var(--lia-bs-warning-s);--lia-warning-lightest-l: 93%;--lia-warning-lightest: hsl(var(--lia-warning-lightest-h), var(--lia-warning-lightest-s), var(--lia-warning-lightest-l));--lia-danger-dark-h: var(--lia-bs-danger-h);--lia-danger-dark-s: var(--lia-bs-danger-s);--lia-danger-dark-l: 41%;--lia-danger-dark: hsl(var(--lia-danger-dark-h), var(--lia-danger-dark-s), var(--lia-danger-dark-l));--lia-danger-light-h: var(--lia-bs-danger-h);--lia-danger-light-s: var(--lia-bs-danger-s);--lia-danger-light-l: 72%;--lia-danger-light: hsl(var(--lia-danger-light-h), var(--lia-danger-light-s), var(--lia-danger-light-l));--lia-danger-lighter-h: var(--lia-bs-danger-h);--lia-danger-lighter-s: var(--lia-bs-danger-s);--lia-danger-lighter-l: 89%;--lia-danger-lighter: hsl(var(--lia-danger-lighter-h), var(--lia-danger-lighter-s), var(--lia-danger-lighter-l));--lia-danger-lightest-h: var(--lia-bs-danger-h);--lia-danger-lightest-s: var(--lia-bs-danger-s);--lia-danger-lightest-l: 95%;--lia-danger-lightest: hsl(var(--lia-danger-lightest-h), var(--lia-danger-lightest-s), var(--lia-danger-lightest-l)); }</style><title>Azure Open IA, acelerando nossos caminhos. | Microsoft Community Hub</title><meta name="robots" content="index,follow"/><meta name="description" content="Há algum tempo temos ouvido falar sobre o OpenAI, que se tornou um dos temas mais requisitados da atualidade. É comum sentirmos o desejo de testar suas..."/><meta name="twitter:card" content="summary_large_image"/><meta property="og:title" content="Azure Open IA, acelerando nossos caminhos. | Microsoft Community Hub"/><meta property="og:description" content="Há algum tempo temos ouvido falar sobre o OpenAI, que se tornou um dos temas mais requisitados da atualidade. É comum sentirmos o desejo de testar suas..."/><meta property="og:url" content="https://techcommunity.microsoft.com/blog/desenvolvedoresbr/azure-open-ia-acelerando-nossos-caminhos-/4276402"/><meta property="og:type" content="article"/><meta property="article:modified_time" content="2024-11-01T13:21:06.388-07:00"/><meta property="og:image" content="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NGk2REU3REY4M0IwOTg3MDYw?revision=5"/><meta property="og:image:width" content="1364"/><meta property="og:image:height" content="674"/><meta property="og:site_name" content="TECHCOMMUNITY.MICROSOFT.COM"/><link rel="canonical" href="https://techcommunity.microsoft.com/blog/desenvolvedoresbr/azure-open-ia-acelerando-nossos-caminhos-/4276402"/><style type="text/css">:root:root { --lia-nav-bg-color: var(--lia-bs-white); --lia-nav-bg-opacity: 0.8; --lia-nav-pt: 15px; --lia-nav-pb: 15px; --lia-nav-border-bottom: 1px solid var(--lia-bs-border-color); --lia-nav-box-shadow: var(--lia-bs-box-shadow-sm); --lia-nav-brand-mr: 30px; --lia-nav-brand-mr-sm: 10px; --lia-nav-brand-logo-height: 30px; --lia-nav-link-gap: 10px; --lia-nav-link-justify-content: flex-start; --lia-nav-link-py: 5px; --lia-nav-link-px: 10px; --lia-nav-link-dropdown-py: 9px; --lia-nav-link-dropdown-px: var(--lia-nav-link-px); --lia-nav-link-color: var(--lia-bs-body-color); --lia-nav-link-hover-color: var(--lia-bs-body-color); --lia-nav-link-font-size: 14px; --lia-nav-link-font-style: NORMAL; --lia-nav-link-font-weight: 400; --lia-nav-link-text-transform: none; --lia-nav-link-letter-spacing: normal; --lia-nav-link-border-radius: var(--lia-bs-border-radius-sm); --lia-nav-link-bg-color: transparent; --lia-nav-link-bg-hover-color: transparent; --lia-nav-link-border: none; --lia-nav-link-border-hover: none; --lia-nav-link-box-shadow: none; --lia-nav-link-box-shadow-hover: none; --lia-nav-link-text-border-bottom: none; --lia-nav-link-text-border-bottom-hover: 2px solid var(--lia-bs-body-color); --lia-nav-dropdown-pt: 10px; --lia-nav-dropdown-pb: 15px; --lia-nav-dropdown-px: 10px; --lia-nav-dropdown-menu-offset: 2px; --lia-nav-dropdown-divider-mt: 10px; --lia-nav-dropdown-divider-mb: 10px; --lia-nav-dropdown-border-color: hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08); --lia-nav-controller-bg-hover-color: hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1); --lia-nav-controller-icon-color: var(--lia-bs-body-color); --lia-nav-controller-icon-hover-color: var(--lia-bs-body-color); --lia-nav-controller-icon-highlight: hsla(30, 100%, 50%); --lia-nav-controller-icon-highlight-text: var(--lia-yiq-dark); --lia-nav-controller-text-color: var(--lia-nav-controller-icon-color); --lia-nav-controller-text-hover-color: var(--lia-nav-controller-icon-hover-color); --lia-nav-controller-border-radius: var(--lia-border-radius-50); --lia-nav-hamburger-color: var(--lia-nav-controller-icon-color); --lia-nav-hamburger-hover-color: var(--lia-nav-controller-icon-color); --lia-nav-hamburger-bg-color: transparent; --lia-nav-hamburger-bg-hover-color: transparent; --lia-nav-hamburger-border: none; --lia-nav-hamburger-border-hover: none; --lia-nav-collapse-menu-ml: 20px; --lia-nav-collapse-menu-divider-bg: var(--lia-nav-link-color); --lia-nav-collapse-menu-divider-opacity: 0.16; }</style><script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":0,"item":"https://techcommunity.microsoft.com","name":"Microsoft Community Hub"},{"@type":"ListItem","position":1,"item":"/category/communities","name":"Communities"},{"@type":"ListItem","position":2,"item":"/category/solutions","name":"Topics"},{"@type":"ListItem","position":3,"item":"/category/RegionalBlogs","name":"Regional Blogs"},{"@type":"ListItem","position":4,"item":"/category/RegionalBlogs/blog/DesenvolvedoresBR","name":"Desenvolvedores BR"}]}</script><style data-testid="CustomComponentContentCss" type="text/css">.custom_widget_community_banner_community-banner_1a5zb_1 { a.custom_widget_community_banner_top-bar_1a5zb_2.custom_widget_community_banner_btn_1a5zb_2 { top: 0; width: 100%; z-index: 999; text-align: center; left: 0; background: #0068b8; color: white; padding: 0.625rem 0; display:block; box-shadow:none !important; border: none !important; border-radius: none !important; margin: 0 !important; font-size:0.875rem; } }</style><style data-testid="CustomComponentContentCss" type="text/css">.custom_widget_Social_Sharing_social-share_c7xxz_1 { .custom_widget_Social_Sharing_sharing-options_c7xxz_2 { position: relative; margin: 0; padding: 0; line-height: 0.625rem; display: flex; justify-content: left; gap: 0.3125rem; list-style-type: none; li { text-align: left; a { min-width: 1.875rem; min-height: 1.875rem; display: block; padding: 0.0625rem; .custom_widget_Social_Sharing_social-share-linkedin_c7xxz_18 { img { background-color: rgb(0, 119, 181); } } .custom_widget_Social_Sharing_social-share-facebook_c7xxz_23 { img { background-color: rgb(59, 89, 152); } } .custom_widget_Social_Sharing_social-share-x_c7xxz_28 { img { background-color: rgb(0, 0, 0); } } .custom_widget_Social_Sharing_social-share-rss_c7xxz_33 { img { background-color: rgb(0, 0, 0); } } .custom_widget_Social_Sharing_social-share-reddit_c7xxz_38 { img { background-color: rgb(255, 69, 0); } } .custom_widget_Social_Sharing_social-share-email_c7xxz_43 { img { background-color: rgb(132, 132, 132); } } } a { img { height: 2rem; } } } } } </style><style data-testid="CustomComponentContentCss" type="text/css">.custom_widget_MicrosoftFooter_context-uhf_f95yq_1 { min-width: 17.5rem; font-size: 0.9375rem; box-sizing: border-box; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; & *, & *:before, & *:after { box-sizing: inherit; } a.custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12 { color: #616161; word-break: break-word; text-decoration: none; } &a:link, &a:focus, &a:hover, &a:active, &a:visited { text-decoration: none; color: inherit; } & div { font-family: 'Segoe UI', SegoeUI, 'Helvetica Neue', Helvetica, Arial, sans-serif; } } .custom_widget_MicrosoftFooter_c-uhff_f95yq_12 { background: #f2f2f2; margin: -1.5625; width: auto; height: auto; } .custom_widget_MicrosoftFooter_c-uhff-nav_f95yq_35 { margin: 0 auto; max-width: calc(100rem + 10%); padding: 0 5%; box-sizing: inherit; &:before, &:after { content: ' '; display: table; clear: left; } @media only screen and (max-width: 1083px) { padding-left: 0.75rem; } .custom_widget_MicrosoftFooter_c-heading-4_f95yq_49 { color: #616161; word-break: break-word; font-size: 0.9375rem; line-height: 1.25rem; padding: 2.25rem 0 0.25rem; font-weight: 600; } .custom_widget_MicrosoftFooter_c-uhff-nav-row_f95yq_57 { .custom_widget_MicrosoftFooter_c-uhff-nav-group_f95yq_58 { display: block; float: left; min-height: 0.0625rem; vertical-align: text-top; padding: 0 0.75rem; width: 100%; zoom: 1; &:first-child { padding-left: 0; @media only screen and (max-width: 1083px) { padding-left: 0.75rem; } } @media only screen and (min-width: 540px) and (max-width: 1082px) { width: 33.33333%; } @media only screen and (min-width: 1083px) { width: 16.6666666667%; } ul.custom_widget_MicrosoftFooter_c-list_f95yq_78.custom_widget_MicrosoftFooter_f-bare_f95yq_78 { font-size: 0.6875rem; line-height: 1rem; margin-top: 0; margin-bottom: 0; padding-left: 0; list-style-type: none; li { word-break: break-word; padding: 0.5rem 0; margin: 0; } } } } } .custom_widget_MicrosoftFooter_c-uhff-base_f95yq_94 { background: #f2f2f2; margin: 0 auto; max-width: calc(100rem + 10%); padding: 1.875rem 5% 1rem; &:before, &:after { content: ' '; display: table; } &:after { clear: both; } a.custom_widget_MicrosoftFooter_c-uhff-ccpa_f95yq_107 { font-size: 0.6875rem; line-height: 1rem; float: left; margin: 0.1875rem 0; } a.custom_widget_MicrosoftFooter_c-uhff-ccpa_f95yq_107:hover { text-decoration: underline; } ul.custom_widget_MicrosoftFooter_c-list_f95yq_78 { font-size: 0.6875rem; line-height: 1rem; float: right; margin: 0.1875rem 0; color: #616161; li { padding: 0 1.5rem 0.25rem 0; display: inline-block; } } .custom_widget_MicrosoftFooter_c-list_f95yq_78.custom_widget_MicrosoftFooter_f-bare_f95yq_78 { padding-left: 0; list-style-type: none; } @media only screen and (max-width: 1083px) { display: flex; flex-wrap: wrap; padding: 1.875rem 1.5rem 1rem; } } </style><script type="application/ld+json">{"@context":"https://schema.org","@type":"BlogPosting","datePublished":"11/1/2024, 8:23:44 PM","description":"\nAzure Open IA, acelerando nossos caminhos.\n&nbsp;\n\nHá algum tempo temos ouvido falar sobre o OpenAI, que se tornou um dos temas mais requisitados da atualidade. É comum sentirmos o desejo de testar suas funcionalidades, porém, surge a dúvida de por onde começar e como fazê-lo sem comprometer a confidencialidade de nossos dados.\n&nbsp;\nO caminho que vou apresentar aqui envolve o uso de um acelerador do Azure para o OpenAI&nbsp;azure-search-openai-demo, ele nos auxiliará desde a configuração da infraestrutura até a implementação de aplicações de exemplo. Fiquei impressionado com a facilidade de uso, a estratégia de usar o “azd” facilitou muito as coisas, veja como instalar aqui&nbsp;Install the Azure Developer CLI | Microsoft Learn\nBasta executar alguns comandos e pronto, o ambiente estará todo configurado no Azure. Eu apenas criei uma nova pasta sem clonar nenhum repositório e executei esses comandos.\n&nbsp;\n\nazd init -t azure-search-openai-demo \nazd auth login \nazd up\n\n&nbsp;\n1-)&nbsp;azd init -t azure-search-openai-demo\n&nbsp;\nazd init -t azure-search-openai-demo\n&nbsp;\n2-)&nbsp;azd auth login&nbsp;\n&nbsp;\nazd auth login\n&nbsp;\n3-)&nbsp;azd up\nazd up\n&nbsp;\n&nbsp;\nAo fim da execução de mais ou menos 30 minutos, pude ver esses recursos criados:\n&nbsp;\nLista de recursos criados\n&nbsp;\nVisualizador de Recursos:\n&nbsp;\n&nbsp;\nMapa dos recursos\n&nbsp;\nA aplicação nasce pronta:\n&nbsp;\nAplicação de exemplo do acelerador\n&nbsp;\nArquivos criados ao rodar o comando azd init -t azure-search-openai-demo:\nArquivos criados ao rodar o comando azd init -t azure-search-openai-demo\n&nbsp;\nBasta fazer as perguntas. Inclusive, uma série de documentos de exemplo foram adicionados à solução, os quais podem ser encontrados na pasta local “data” ou no armazenamento do Azure.\n\n&nbsp;\nO próximo passo será trabalhar com a ingestão de dados. Existe um guia na própria documentação do acelerador intitulado&nbsp;Indexing documents for the Chat App. Para começar, vou fazer o upload de um artigo meu do blog, chamado “Escalando nodes e escalando e pods no AKS. | by Wilson Santos | Medium”, para isso, basta gerar um PDF e colocar o arquivo dentro da pasta “data” do acelerador, diretamente na sua máquina local.\n&nbsp;\nApós isso, você irá executar um pequeno script em PowerShell chamado “prepdoc”. O comando para executá-lo é o seguinte\n\n.\\\\scripts\\\\prepdocs.ps1\n&nbsp;\n\nAssim que terminar de rodar podemos fazer perguntas sobre esse conteúdo.\n\n&nbsp;\nO acelerador traz uma implementação em React e python e podemos estudar como ela funciona usando esse código que fica na pasta app do acelerador\nTemos um front em React e um backend em Python, mas caso você esteja acostumado com C# que é o meu caso, nada melhor que explorar os SDKS do&nbsp;Azure.AI.OpenAI&nbsp;e o&nbsp;SemanticKernel&nbsp;que eu estou apresentando a seguir.\n&nbsp;\n\nNada melhor que “codar” para entender melhor as coisas!\n&nbsp;\n\nAgora, vamos criar um pequeno programa em .NET Core Console que aproveitará toda a infraestrutura criada pelo acelerador. Este programa será capaz de fazer perguntas ao Azure Open AI e, além disso, responderá com base nos documentos que forem atualizados na base de conhecimento. Para isso, utilizaremos o pacote&nbsp;Azure.AI.OpenAI. No meu exemplo, estou utilizando a versão 2.0.0.\n&nbsp;\n\ninstall-package Azure.AI.OpenAI\n&nbsp;\n\nPrimeiro passo vamos criar um client da classe AzureOpenAIClient:\n&nbsp;\n\nAzureOpenAIClient azureClient = new(endpoint, credential);\n\n&nbsp;\nPara as credenciais e o endpoint, utilizamos uma chave do recurso que pode ser obtida na seção “Keys and Endpoint” da instância do Azure OpenAI.\n&nbsp;\n\n\n\n&nbsp;\n var credential = new AzureKeyCredential("...");\n&nbsp;\n\n\nDepois, vamos criar uma instancia da classe chamada SearchClient. Essa classe ajudará na conexão com o serviço de busca (Search service).\n&nbsp;\nalgo assim:\n&nbsp;\nvar searchEndpoint = new Uri("...");\nvar searchCredential = new AzureKeyCredential("...");\nvar indexName = "gptkbindex";\nvar searchClient = new SearchClient(searchEndpoint, indexName, searchCredential);\nvar searchOptions = new SearchOptions\n{\n Size = 5 // Número de documentos a recuperar\n};\nvar searchResults = searchClient.Search&lt;SearchDocument&gt;(text, searchOptions);\nvar retrievedDocuments = searchResults.Value.GetResults().Select(result =&gt; result.Document["content"].ToString());\nvar context = string.Join("\\n", retrievedDocuments);\n&nbsp;\n&nbsp;\nA classe SearchClient também requer o uso de uma chave de segurança. Para encontrá-la, acessamos a instância do serviço de busca (Search service) na seção “Keys”\n&nbsp;\n\n&nbsp;\no endpoint esta em overview\n\n&nbsp;\nAgora vamos criar uma instancia da classe ChatClient, que será responsável por fazer perguntas para o OpenAI, e passar o prompt para o Azure openIA.\n&nbsp;\nE aqui que está o grande segredo do RAG, tudo é prompt, pegamos o resultado da busca do SearchClient&nbsp;que está na variável&nbsp;context e juntamos no prompt.\n&nbsp;\n&nbsp;\nvar prompt = $"Contexto: {context}\\nPergunta: {text}";\nChatClient chatClient = await azureClient.CompleteChatAsync("gpt-4o");\nChatCompletion completion = chatClient.CompleteChat(new List&lt;ChatMessage&gt;\n{\nnew SystemChatMessage("Você é um assistente atencioso"),\nnew UserChatMessage(prompt),\n\n});\n&nbsp;\n&nbsp;\nPara obter o valor do campo&nbsp;DeploymentName, no meu caso o gpt-4o, você pode encontrá-lo na instância do OpenAI. Basta abrir os “Model deployments”, clicar em “Management deployment”. Isso abrirá o Azure OpenAI Studio, onde você poderá visualizar os modelos implantados.\n&nbsp;\n\n&nbsp;\n&nbsp;\nos pacotes utilizados foram esses:\n\n&lt;PackageReference Include="Azure.AI.OpenAI" Version="2.0.0" /&gt;&lt;PackageReference Include="Azure.Identity" Version="1.13.1" /&gt;&lt;PackageReference Include="Azure.Search.Documents" Version="11.4.0" /&gt;\n&nbsp;\no Código final ficou assim:\n&nbsp;\nusing Azure;\nusing Azure.AI.OpenAI;\nusing Azure.Search.Documents;\nusing Azure.Search.Documents.Models;\nusing OpenAI.Chat;\n\n\npublic class Program\n{\n\n static async Task Main(string[] args)\n {\n while (true)\n {\n Console.WriteLine("Digite uma Pergunta");\n var question = Console.ReadLine();\n if (question != null)\n {\n var result = await AskingChatCompletionWithSearchsAsync(question);\n Console.WriteLine(result);\n }\n\n }\n\n }\n\n static async Task&lt;string&gt; AskingChatCompletionWithSearchsAsync(string text)\n {\n\n var endpoint = new Uri("https://openiapriv02.openai.azure.com/");\n var credential = new AzureKeyCredential("...");\n AzureOpenAIClient azureClient = new(endpoint, credential);\n\n\n var searchEndpoint = new Uri("https://gptkb-kv4atymcdg6pg.search.windows.net");\n var searchCredential = new AzureKeyCredential("...");\n var indexName = "gptkbindex";\n var searchClient = new SearchClient(searchEndpoint, indexName, searchCredential);\n var searchOptions = new SearchOptions\n {\n Size = 5 // Número de documentos a recuperar\n };\n var searchResults = searchClient.Search&lt;SearchDocument&gt;(text, searchOptions);\n var retrievedDocuments = searchResults.Value.GetResults().Select(result =&gt; result.Document["content"].ToString());\n var context = string.Join("\\n", retrievedDocuments);\n\n\n\n var prompt = $"Contexto: {context}\\nPergunta: {text}";\n ChatClient chatClient = azureClient.GetChatClient("gpt-4o");\n ChatCompletion completion = await chatClient.CompleteChatAsync(new List&lt;ChatMessage&gt;\n {\n new SystemChatMessage("Você é um assistente atencioso"),\n new UserChatMessage(prompt),\n\n });\n\n\n var result = $"{completion.Role}: {completion.Content[0].Text}";\n return result;\n }\n}\n\n&nbsp;\nfiz uma pergunta para o assistente com base em um documento que já veio de exemplo no acelerador o&nbsp;Benefit_Options.pdf, perguntei&nbsp;o que é o programa Northwind Health Plus?.&nbsp;Observe que a resposta é dada com base nos documentos indexados no&nbsp;Search service\n&nbsp;\n\n&nbsp;\n\nMas o que são essas versões de modelos?\n&nbsp;\n\nOs modelos são constantemente atualizados com novas características, as versões de modelo são a maneira de controlar essas mudanças do OpenAI.\n&nbsp;\nEm particular, os modelos&nbsp;GPT-3.5 Turbo&nbsp;e&nbsp;GPT-4&nbsp;recebem atualizações regulares com novos recursos. Por exemplo, as versões 0613 do GPT-3.5 Turbo e GPT-4 introduziram a chamada de função. A chamada de função é um recurso popular que permite ao modelo criar saídas estruturadas que podem ser usadas para chamar ferramentas externas. Fique atento aos modelos disponíveis para sua região quais modelos seu SDK suporta, saiba mais em&nbsp;Azure OpenAI Service model versions — Azure OpenAI | Microsoft Learn\n&nbsp;\n\nSemantic Kernel\n&nbsp;\n\nO Semantic Kernel é um SDK de código aberto projetado para integrar com o código existente. Ele suporta várias linguagens de programação, incluindo C#, Python e Java. Através de conectores e plugins, o Semantic Kernel permite adicionar inteligencia aos aplicativos. Sua flexibilidade permite aos desenvolvedores orquestrar o código existente sem se prender a um provedor específico de modelos de IA, proporcionando liberdade na escolha e combinação de serviços conforme as necessidades do projeto.&nbsp;Saiba mais\n&nbsp;\nVamos fazer algumas implementações básicas, a começar por um chat básico sem RAG, é importante lembrar que alguns dos pacotes usados ainda estão em versões alpha não indicados para ambiente produtivo.\nvamos começar a instalar o pacote\n&nbsp;\n\ninstall-pacakge Microsoft.SemanticKernel\n&nbsp;\n\nAgora vamos criar uma representação do que o SDK chama de Kernel, essa representação já adiciona a injeção do Chat Completion da nossa instancia do Azure Open IA\n&nbsp;\n&nbsp;\n var builder = Kernel.CreateBuilder(); \n \n builder.AddAzureOpenAIChatCompletion( \n "gpt-4o", // Azure OpenAI Deployment Name \n "https://wsopenia.openai.azure.com/", // Azure OpenAI Endpoint \n "..."); // Azure OpenAI Key \n \n \n var kernel = builder.Build();\n&nbsp;\n&nbsp;\nO prompt no Semantic Kernel é um template em formato texto que permite valorar variáveis, chamar funções e extrair valores, para isso usamos as chaves {{…}}. no nosso exemplo temos as variáveis history e input em uma estrutura que mostra para a IA quais informações são a entrada de usuário e quais são apenas instruções. para saber mais sobre prompt&nbsp;Using the out-of-the-box prompt template language | Microsoft Learn\n&nbsp;\n&nbsp;\nvar prompt = @"Chat:{{$history}} User:{{$input}}";\n&nbsp;\n&nbsp;\nAgora usamos o método&nbsp;CreateFunctionFromPrompt&nbsp;especificando as configurações de prompt como&nbsp;MaxTokens, Temperatura etc.\n&nbsp;\n\n var kf = kernel.CreateFunctionFromPrompt(prompt, executionSettings: new OpenAIPromptExecutionSettings\n {\n MaxTokens = 500,\n ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions\n });\n\ne usando a classe&nbsp;KernelArguments, passamos os valores das variáveis\n&nbsp;\n\nvar arguments = new KernelArguments(); \narguments\\["input"\\] = question; \narguments\\["history"\\] = questionHistory;\n\n&nbsp;\na etapa final é chamar as funções InvokeAsync passando a instancia de “kf” e passando a instancia dos argumentos\n&nbsp;\n&nbsp;\nvar result = await kernel.InvokeAsync(kf, arguments);\n&nbsp;\n&nbsp;\num exemplo de implementação é essa:\n&nbsp;\nvar arguments = new KernelArguments();\nvar prompt = @"Chat:{{$history}} User:{{$input}}";\nvar kf = kernel.CreateFunctionFromPrompt(prompt, executionSettings: new OpenAIPromptExecutionSettings\n{\n MaxTokens = 500,\n ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions\n});\n\n\nvar questionHistory = "";\nwhile (true)\n{\n Console.WriteLine("Digite uma Pergunta");\n\n var question = Console.ReadLine();\n\n\n // Add user input \n arguments["input"] = question;\n\n var result = await kernel.InvokeAsync(kf, arguments);\n\n\n Console.WriteLine("result:" + result);\n //Console.WriteLine("history:" + questionHistory);\n\n questionHistory += "Chat:" + result + "User:" + question + "\\n";\n arguments["history"] = questionHistory;\n}\n&nbsp;\n&nbsp;\naqui não temos RAG apenas o LLM respondendo a pergunta "o que é o Azure OpenIA"?\n&nbsp;\n\n\n&nbsp;\nPacotes utilizados:\n\n\n&nbsp;\n\n&lt;PackageReference Include="Microsoft.SemanticKernel" Version="1.26.0" /&gt;\n&nbsp;\n\n\nSemantic é extensível\n\n&nbsp;\nCom ele podemos usar os plugins para interagir com nosso código existente como por exemplo consultar pedidos em uma base de dados, e podemos usar os conectores para integrar com os serviços de IA, por exemplo o Azure openIA,&nbsp;saiba mais\nVou mostrar um exemplo de plugin, vou criar uma classe order:\n&nbsp;\n&nbsp;\npublic sealed class Order\n{\n [KernelFunction, Description("Show order details for number")]\n public static string Sqrt([Description("The number to order details")] double number1)\n {\n return $"The detail about order {number1} is your current state is closed.";\n }\n\n}\n&nbsp;\n&nbsp;\nperceba que descrevemos seu comportamento usando um atributo&nbsp;KernelFunction\ndepois eu vou adicionar esse plugin dessa forma:\n&nbsp;\n&nbsp;\nvar builder = Kernel.CreateBuilder(); \nbuilder.Plugins.AddFromType&lt;Order&gt;();\n&nbsp;\n&nbsp;\nfeito isso podemos optar pela auto chamada configurando a classe&nbsp;OpenAIPromptExecutionSettings&nbsp;com propriedade&nbsp;ToolCallBehavior&nbsp;setada para o valor&nbsp;AutoInvokeKernelFunctions\n&nbsp;\n\n // Enable auto function calling \n OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new() \n { \n ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, \n };\n\n&nbsp;\no restante do código é o mesmo mas vou colocar um exemplo completo aqui:\n&nbsp;\n\nvar builder = Kernel.CreateBuilder(); \n \nbuilder.AddAzureOpenAIChatCompletion( \n "gpt-4o", // Azure OpenAI Deployment Name \n "https://cog-nggxeq6fpjnxg.openai.azure.com/", // Azure OpenAI Endpoint \n "..."); // Azure OpenAI Key \n \nbuilder.Plugins.AddFromType&lt;Order&gt;(); \n \nvar arguments = new KernelArguments(); \nvar prompt = @"Chat:{{$history}} User:{{$input}}"; \nvar kf = kernel.CreateFunctionFromPrompt(prompt, executionSettings: new OpenAIPromptExecutionSettings \n{ \n MaxTokens = 500, \n ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions \n}); \n \n \nvar questionHistory = ""; \nwhile (true) \n{ \n Console.WriteLine("Digite uma Pergunta"); \n var question = Console.ReadLine(); \n // Add user input \n arguments\\["input"\\] = question; \n var result = await kernel.InvokeAsync(kf, arguments); \n Console.WriteLine("result:" + result); \n \n questionHistory += "Chat:" + result + "User:" + question + "\\\\n"; \n arguments\\["history"\\] = questionHistory; \n}\n\n&nbsp;\nObservem a mágica deste exemplo: com ele, podemos criar uma classe que controla os mecanismos de busca e, portanto, o conteúdo da resposta. No entanto, é o LLM que decide se a pergunta corresponde à descrição da classe e aciona o mecanismo. Esse recurso é chamado de 'function calling' e está disponível apenas nas versões mais recentes dos modelos, como o GPT-4.\n&nbsp;\n\n&nbsp;console e execução respondendo a pergunta “Show order details for number 10”?\n&nbsp;\n\n\npacotes utilizados:\n\n&nbsp;&lt;PackageReference Include="Microsoft.SemanticKernel" Version="1.26.0" /&gt;\n&nbsp;\n\n\nMemorias usando IA Search\n&nbsp;\n\nAqui temos o uso de um conector e de um plugin, o conector vai adicionar accesso ao IA Search por meio dessa implementação:\n&nbsp;\n\nvar memoryBuilder = new MemoryBuilder();\nmemoryBuilder.WithMemoryStore(new AzureAISearchMemoryStore(\n "https://gptkb-nggxeq6fpjnxg.search.windows.net",\n "...")\n);\n&nbsp;\n\n\nAlem do pacote do&nbsp;Microsoft.SemanticKernel&nbsp;ainda vamos precisar de mais dois pacotes o&nbsp;Microsoft.SemanticKernel.Connectors.AzureAISearch&nbsp;e o&nbsp;Microsoft.SemanticKernel.Plugins.Memory\n\nMas também precisamos do plugin&nbsp;TextMemoryPlugin&nbsp;para acessar as memorias, mas ates de acessar vamos cria-las\nPara isso vamos usar essa implementação:\n&nbsp;\n\nvar memory = memoryBuilder.Build(); \n \nconst string MemoryCollectionName = "aboutMe"; \n \nawait memory.SaveInformationAsync(MemoryCollectionName, id: "info1", text: "My name is Andrea"); \nawait memory.SaveInformationAsync(MemoryCollectionName, id: "info2", text: "I currently work as a tourist operator"); \nawait memory.SaveInformationAsync(MemoryCollectionName, id: "info3", text: "I currently live in Seattle and have been living there since 2005"); \nawait memory.SaveInformationAsync(MemoryCollectionName, id: "info4", text: "I visited France and Italy five times since 2015"); \nawait memory.SaveInformationAsync(MemoryCollectionName, id: "info5", text: "My family is from New York");\n\nkernel.ImportPluginFromObject(new TextMemoryPlugin(memory));\n\n&nbsp;\nCom isso sera gerado um&nbsp;index&nbsp;na IA Search chamado aboutme\n&nbsp;\n\n&nbsp;\n&nbsp;lista de indexs\n&nbsp;\n\n&nbsp;\n&nbsp;Search explorer\n&nbsp;\n\n&nbsp;Campos do index\n&nbsp;\nesse index foi gerado usando esse Text Embedding text-embedding-ada-002, que é um tipo de algoritmo de vetorização\n&nbsp;\n\n&nbsp;\n&nbsp;\n&nbsp;Deployments Azure OpenAI Studio\n&nbsp;\ncom essa implementação temos a configuração da instancia do Azure openIA que irá fazer o embending das perguntas usando o modelo text-embedding-ada-002 :\n&nbsp;\n memoryBuilder.WithTextEmbeddingGeneration((loggerFactory, httpClient) =&gt; {\n return new AzureOpenAITextEmbeddingGenerationService(\n "text-embedding-ada-002", // Embedding generation service name\n "https://openiapriv02.openai.azure.com/",\n "...",\n httpClient: httpClient,\n loggerFactory: loggerFactory\n );\n });\n&nbsp;\n\n&nbsp;\n\npor fim para fazer as perguntas ao chat e receber resposta que vem desse index como se fossem uma lembrança do chat, mas antes precisamos enriquecer o prompt com essas informações algo assim:\n&nbsp;\n&nbsp;\n const string skPrompt = @" \n ChatBot can have a conversation with you about any topic. \n It can give explicit instructions or say 'I don't know' if it does not have an answer. \n \n Information about me, from previous conversations: \n - {{$fact1}} {{recall $fact1}} \n - {{$fact2}} {{recall $fact2}} \n - {{$fact3}} {{recall $fact3}} \n - {{$fact4}} {{recall $fact4}} \n - {{$fact5}} {{recall $fact5}} \n \n Chat: \n {{$history}} \n User: {{$userInput}} \n ChatBot: ";\n&nbsp;\n&nbsp;\nesses valores serão passados pelo KernelArguments:\n&nbsp;\n arguments\\["fact1"\\] = "What my name?"; \n arguments\\["fact2"\\] = "where do I live?"; \n arguments\\["fact3"\\] = "where is my family from?"; \n arguments\\["fact4"\\] = "where have I travelled?"; \n arguments\\["fact5"\\] = "what do I do for work?";\n&nbsp;\n&nbsp;\nveja a implementação completa:\n&nbsp;\nvar builder = Kernel.CreateBuilder();\n\nbuilder.AddAzureOpenAIChatCompletion(\n "gpt-35-turbo", // Azure OpenAI Deployment Name\n "https://cog-nggxeq6fpjnxg.openai.azure.com/", // Azure OpenAI Endpoint\n "..."); // Azure OpenAI Key\n\n\nvar kernel = builder.Build();\n\n#pragma warning disable SKEXP0001, SKEXP0010, SKEXP0050, SKEXP0020\n\nvar memoryBuilder = new MemoryBuilder();\n\n\nmemoryBuilder.WithTextEmbeddingGeneration((loggerFactory, httpClient) =&gt; {\n return new AzureOpenAITextEmbeddingGenerationService(\n "text-embedding-ada-002", // Embedding generation service name\n "https://openiapriv02.openai.azure.com/",\n "...",\n httpClient: httpClient,\n loggerFactory: loggerFactory\n );\n});\n\n\nmemoryBuilder.WithMemoryStore(new AzureAISearchMemoryStore(\n "https://gptkb-nggxeq6fpjnxg.search.windows.net",\n "...")\n);\n\nvar memory = memoryBuilder.Build();\n\nconst string MemoryCollectionName = "aboutMe";\n\nawait memory.SaveInformationAsync(MemoryCollectionName, id: "info1", text: "My name is Andrea");\nawait memory.SaveInformationAsync(MemoryCollectionName, id: "info2", text: "I currently work as a tourist operator");\nawait memory.SaveInformationAsync(MemoryCollectionName, id: "info3", text: "I currently live in Seattle and have been living there since 2005");\nawait memory.SaveInformationAsync(MemoryCollectionName, id: "info4", text: "I visited France and Italy five times since 2015");\nawait memory.SaveInformationAsync(MemoryCollectionName, id: "info5", text: "My family is from New York");\n\nvar questions = new[]\n{\n "what is my name?",\n "where do I live?",\n "where is my family from?",\n "where have I travelled?",\n "what do I do for work?",\n};\n\n\n#pragma warning disable SKEXP0050\n\n// TextMemoryPlugin provides the "recall" function\nkernel.ImportPluginFromObject(new TextMemoryPlugin(memory));\n\n\nconst string skPrompt = @"\nChatBot can have a conversation with you about any topic.\nIt can give explicit instructions or say 'I don't know' if it does not have an answer.\n\nInformation about me, from previous conversations:\n- {{$fact1}} {{recall $fact1}}\n- {{$fact2}} {{recall $fact2}}\n- {{$fact3}} {{recall $fact3}}\n- {{$fact4}} {{recall $fact4}}\n- {{$fact5}} {{recall $fact5}}\n\nChat:\n{{$history}}\nUser: {{$userInput}}\nChatBot: ";\n\nvar chatFunction = kernel.CreateFunctionFromPrompt(skPrompt, new OpenAIPromptExecutionSettings { MaxTokens = 200, Temperature = 0.8 });\n\n#pragma warning disable SKEXP0050\n\nvar arguments = new KernelArguments();\n\narguments["fact1"] = "What my name?";\narguments["fact2"] = "where do I live?";\narguments["fact3"] = "where is my family from?";\narguments["fact4"] = "where have I travelled?";\narguments["fact5"] = "what do I do for work?";\n\narguments[TextMemoryPlugin.CollectionParam] = MemoryCollectionName;\narguments[TextMemoryPlugin.LimitParam] = "2";\narguments[TextMemoryPlugin.RelevanceParam] = "0.8";\n\nvar history = "";\narguments["history"] = history;\nFunc&lt;string, Task&gt; Chat = async (string input) =&gt; {\n // Save new message in the kernel arguments\n arguments["userInput"] = input;\n\n // Process the user message and get an answer\n var answer = await chatFunction.InvokeAsync(kernel, arguments);\n\n // Append the new interaction to the chat history\n var result = $"\\nUser: {input}\\nChatBot: {answer}\\n";\n\n history += result;\n arguments["history"] = history;\n\n // Show the bot response\n Console.WriteLine(result);\n};\n\n\nwhile (true)\n{\n Console.WriteLine("Digite uma Pergunta");\n var question = Console.ReadLine();\n if (question != null)\n {\n await Chat(question);\n }\n\n}\n&nbsp;\n&nbsp;\n\nconsole e execução respondendo a pergunta “What my name”?\n&nbsp;\nPacotes utilizados:\n&nbsp;\n\n&lt;PackageReference Include="Microsoft.SemanticKernel" Version="1.26.0" /&gt;&lt;PackageReference Include="Microsoft.SemanticKernel.Connectors.AzureAISearch" Version="1.6.3-alpha" /&gt;&lt;PackageReference Include="Microsoft.SemanticKernel.Plugins.Memory" Version="1.6.3-alpha" /&gt;&lt;PackageReference Include="System.Linq.Async" Version="6.0.1" /&gt;\n&nbsp;\n\n\nReferências\n\n\nazure-search-openai-demo\nazure-search-openai-demo-csharp\nAzure/Vector-Search-AI-Assistant at cognitive-search-vector (github.com)\nTroubleshoot Azure Developer CLI | Microsoft Learn\nUsar seus próprios dados com o Serviço OpenAI do Azure — Azure OpenAI | Microsoft Learn\nIndexing documents for the Chat App\nAzureAIServicesLandingZone\nCreate AI agents with Semantic Kernel | Microsoft Learn\nUsing the out-of-the-box prompt template language | Microsoft Learn\nAzure OpenAI Service model versions — Azure OpenAI | Microsoft Learn\nGUEST POST: Getting Started with Semantic Kernel for LangChain users | Semantic Kernel (microsoft.com)\nIntroducing API Manifest Plugins for Semantic Kernel | Semantic Kernel (microsoft.com)\n","mainEntityOfPage":{"@type":"WebPage","@id":"https://techcommunity.microsoft.com/blog/desenvolvedoresbr/azure-open-ia-acelerando-nossos-caminhos-/4276402"},"headline":"Azure Open IA, acelerando nossos caminhos.","image":["https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NGk2REU3REY4M0IwOTg3MDYw?revision=5"],"dateModified":"11/1/2024, 8:21:06 PM","author":{"@type":"Person","name":"wdossantos","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0xMTcxNjczLTMyNTM2MGkwNjkyMDE1OTQ0RkQ5MTM0"},"publisher":{"@type":"Organization","name":"TECHCOMMUNITY.MICROSOFT.COM"}}</script><meta name="next-head-count" content="27"/><noscript id="__next_css__DO_NOT_USE__"></noscript><script id="prism-bootstrap" data-nscript="beforeInteractive" crossorigin="anonymous">window.Prism = window.Prism || {};Prism.manual = true;</script><link rel="preload" href="/_next/static/css/f2548b19c82c9252.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/f2548b19c82c9252.css" crossorigin="anonymous" data-n-g=""/><link rel="preload" href="/_next/static/css/85ae5125dd9799da.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/85ae5125dd9799da.css" crossorigin="anonymous" data-n-p=""/><link rel="preload" href="/_next/static/css/695513f4460cf9de.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/695513f4460cf9de.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/27354a62d6df58b7.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/27354a62d6df58b7.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/6b6feb98a73e4b36.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/6b6feb98a73e4b36.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/b3570409e4961851.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/b3570409e4961851.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/862b9c0d1ee38b75.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/862b9c0d1ee38b75.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/96e83c4412cdcd6d.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/96e83c4412cdcd6d.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/0aea06143d4d2261.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/0aea06143d4d2261.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/a87e85723550ff6c.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/a87e85723550ff6c.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/da1b9bc00ca1b132.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/da1b9bc00ca1b132.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/2cb7930a61479b70.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/2cb7930a61479b70.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/0da1a563af23ca7c.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/0da1a563af23ca7c.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/0ddbd47ca7e61fdd.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/0ddbd47ca7e61fdd.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/75c3051a6282c4c8.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/75c3051a6282c4c8.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/d9008e6eff4bb31c.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/d9008e6eff4bb31c.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/01bbadcc1be827c5.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/01bbadcc1be827c5.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/0c51bccf3b306949.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/0c51bccf3b306949.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/301c38302d8be06d.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/301c38302d8be06d.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/66e75bf06f523a07.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/66e75bf06f523a07.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/d251c99cf38a4187.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/d251c99cf38a4187.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/c94ef98af7effe01.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/c94ef98af7effe01.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/8cc8a18b0063d113.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/8cc8a18b0063d113.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/2fa8acea5ddb7a0d.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/2fa8acea5ddb7a0d.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/2816a50928585b4e.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/2816a50928585b4e.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/52dd8be324cc5f5a.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/52dd8be324cc5f5a.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/acce1e159f006524.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/acce1e159f006524.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/eaa1e83705b8a1b9.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/eaa1e83705b8a1b9.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/d9e0f6ee4c8b30bc.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/d9e0f6ee4c8b30bc.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/2d01909ce48d3a0a.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/2d01909ce48d3a0a.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/8e9fe845357bfc67.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/8e9fe845357bfc67.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/741822ca69eb63d7.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/741822ca69eb63d7.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/e50f24e20f7bc6ce.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/e50f24e20f7bc6ce.css" crossorigin="anonymous"/><link rel="preload" href="/_next/static/css/1a1bf94077a4998e.css" as="style" crossorigin="anonymous"/><link rel="stylesheet" href="/_next/static/css/1a1bf94077a4998e.css" crossorigin="anonymous"/><noscript data-n-css=""></noscript><script defer="" crossorigin="anonymous" nomodule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script id="searchHeader" src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/pagescripts/1736264387000/searchHeader.js" defer="" data-nscript="beforeInteractive" crossorigin="anonymous"></script><script id="cookie_consent" src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/pagescripts/1729284608000/cookie_consent.js?page.id=BlogMessagePage&entity.id=board%3Adesenvolvedoresbr&entity.id=message%3A4276402" defer="" data-nscript="beforeInteractive" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/77463-2acfddc67ff4590a.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/84770-15660bbd05b5edfa.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/97333-fce065001bc1b0c7.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/34062-9be2d4c300245cc1.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/70193.0446f1b58a8be886.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/83256.76b91cbc22802a86.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/1530.e06b0f0b83f97a6b.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/86460.ba3f744c64cbd793.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/44786.618e88b46021e53c.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/25232.332c8cc01832b7d7.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/43158.bfecf0345c26e96a.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/40423.6e764a1e65bf4776.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/4398-6d4713519649882b.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/9908.7188f56f1baf415a.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/28601.74c0583412520582.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/97924.8c85bf8f7349eadf.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/54340.964a0582cb40e965.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/6156.a8da351ef58c61ee.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/73603.082c1e6c3430d681.js" crossorigin="anonymous"></script><script defer="" src="/_next/static/chunks/83804.b64181c0e85fe050.js" crossorigin="anonymous"></script><script src="/_next/static/chunks/webpack-6ce0ff601a4c1ab6.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/main-5fe5cbe4f3280849.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/pages/_app-1699ccf41ff8f681.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/15089-e29bf7f37c7b7582.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/56954-a661bff96978ced0.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/37553-349b571b1837d9f5.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/67527-2f9f9c5d94b90716.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/15543-fe4cde6618117bea.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/54341-89846ea64957f2fc.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/83729-3801bb3dc0460da7.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/23842-15faa7ccb146fc4e.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/37330-c326830a1058a439.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/85258-3c88938f5903bdfa.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/76820-8541394ea68feffc.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/56930-6a969639091cece1.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/97524-4855ab2412a5ff3a.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/51325-f799cb915ede1d5f.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/36752-b2c8cf995534bce4.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/2873-6528504ce11ce723.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/42098-d8826705c7394b5c.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/17603-e4910b99ae1d371e.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/92236-a3c47c22843a7ce2.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/43847-eb5bebd3c9cb2d5a.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/18182-69ac41a5cef8a044.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/23446-c0f0466a2ad73ed4.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/39667-789603eda821d3f8.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/74783-54dd9820d2d470bb.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/32876-873955bb1646d726.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/chunks/pages/blogs/BlogMessagePage/BlogMessagePage-93506c4554b2653f.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/fgNKhcnISUB1E49u99qsx/_buildManifest.js" defer="" crossorigin="anonymous"></script><script src="/_next/static/fgNKhcnISUB1E49u99qsx/_ssgManifest.js" defer="" crossorigin="anonymous"></script></head><body><div id="__next"><header data-testid="QuiltWrapperSection"><div aria-hidden="true"></div><nav class="Navbar_lia-nav__x3UtG Navbar_lia-nav-fixed__mp9zl" style="--lia-d-nav-bg-combined:hsla(0, 0%, 100%, 0.8)"><div data-testid="ThemedContainer" class="Navbar_lia-container__PneN7 ThemedContainer_lia-fixed-container__MPYgN ThemedContainer_lia-fixed-gutters__1PeHV styles_container__6wTQq"><div class="NavbarHamburgerDropdown_lia-hamburger__wMSGy styles_dropdown__gtmlA"><button data-testid="Button" aria-haspopup="true" aria-expanded="false" aria-label="Side Menu" id=":Rtiq6lbem:" type="button" class="styles_lia-g-unstyled-btn__Sglpm NavbarHamburgerDropdown_lia-hamburger-toggle__A99vU styles_dropdown-toggle__lyIUd styles_btn__1HFm0"><span class="HamburgerIcon_lia-hamburger__Vl1W7"><span class="HamburgerIcon_lia-burger-part__gpOaQ HamburgerIcon_lia-lettuce__CHkD6 NavbarHamburgerDropdown_lia-hamburger-icon__CaJzZ"></span><span class="HamburgerIcon_lia-burger-part__gpOaQ HamburgerIcon_lia-tomato__gEm9r NavbarHamburgerDropdown_lia-hamburger-icon__CaJzZ"></span><span class="HamburgerIcon_lia-burger-part__gpOaQ HamburgerIcon_lia-cheese__4316P NavbarHamburgerDropdown_lia-hamburger-icon__CaJzZ"></span></span></button></div><div class="Navbar_lia-brand-wrap__kMjMv"><a class="Navbar_lia-brand-logo___j4kl" href="/"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/themes/customTheme1/favicon-1730836271365.png?time=1730836274203" alt="Brand Logo" class="BrandLogo_lia-logo__9HhbP"/></a><a href="#main-content" class="Navbar_lia-skip-content__x8IQ0">Skip to content</a></div><section class="NavbarTextLinks_lia-main-links-container__QOLn4"><div class="NavbarTextLinks_lia-main-links__XTYIO"><a tabindex="0" href="/" class="styles_lia-g-navbar-link___5V8S" data-testid="NavbarLink.gxcuf89792" target="_self"><span class="styles_lia-g-navbar-link-text__hNCPc">Tech Community</span></a><a tabindex="0" href="/Directory" class="styles_lia-g-navbar-link___5V8S" data-testid="NavbarLink.external_link" target="_self"><span class="styles_lia-g-navbar-link-text__hNCPc">Community Hubs</span></a><div data-menu-open="false" class="NavbarDropdown_lia-dropdown__UxoG7 styles_dropdown__gtmlA"><div aria-haspopup="true" aria-label="Press the down arrow to open the menu" data-testid="NavbarDropdown.Toggle" tabindex="-1" id=":R1ltiq6lbem:"><a tabindex="0" href="/" class="styles_lia-g-navbar-link___5V8S NavbarDropdownToggle_lia-link-extender__HG9yN NavbarAnchor_lia-disabled__IqfY3" data-testid="NavbarLink.communities" target="_blank"><span class="styles_lia-g-navbar-link-text__hNCPc">Products<svg class="styles_lia-g-navbar-dropdown-icon__MBB_c Icon_lia-icon__on1Gb" data-testid="Icon" style="--lia-local-icon-color:var(--lia-bs-body-color);--lia-local-icon-color-h:var(--lia-bs-body-color-h);--lia-local-icon-color-s:var(--lia-bs-body-color-s);--lia-local-icon-color-l:var(--lia-bs-body-color-l)" aria-hidden="true"><use href="/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/chevron-down.svg#chevron-down"></use></svg></span></a></div></div><div data-menu-open="false" class="NavbarDropdown_lia-dropdown__UxoG7 styles_dropdown__gtmlA"><div aria-haspopup="true" aria-label="Press the down arrow to open the menu" data-testid="NavbarDropdown.Toggle" tabindex="-1" id=":R25tiq6lbem:"><a tabindex="0" href="/" class="styles_lia-g-navbar-link___5V8S NavbarDropdownToggle_lia-link-extender__HG9yN NavbarAnchor_lia-disabled__IqfY3" data-testid="NavbarLink.communities_1" target="_self"><span class="styles_lia-g-navbar-link-text__hNCPc">Topics<svg class="styles_lia-g-navbar-dropdown-icon__MBB_c Icon_lia-icon__on1Gb" data-testid="Icon" style="--lia-local-icon-color:var(--lia-bs-body-color);--lia-local-icon-color-h:var(--lia-bs-body-color-h);--lia-local-icon-color-s:var(--lia-bs-body-color-s);--lia-local-icon-color-l:var(--lia-bs-body-color-l)" aria-hidden="true"><use href="/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/chevron-down.svg#chevron-down"></use></svg></span></a></div></div><a tabindex="0" href="/Blogs" class="styles_lia-g-navbar-link___5V8S" data-testid="NavbarLink.external" target="_self"><span class="styles_lia-g-navbar-link-text__hNCPc">Blogs</span></a><a tabindex="0" href="/Events" class="styles_lia-g-navbar-link___5V8S" data-testid="NavbarLink.external_1" target="_self"><span class="styles_lia-g-navbar-link-text__hNCPc">Events</span></a><div data-menu-open="false" class="NavbarDropdown_lia-dropdown__UxoG7 styles_dropdown__gtmlA"><div aria-haspopup="true" aria-label="Press the down arrow to open the menu" data-testid="NavbarDropdown.Toggle" tabindex="-1" id=":R3ltiq6lbem:"><a tabindex="0" href="/category/MicrosoftLearn" class="styles_lia-g-navbar-link___5V8S NavbarDropdownToggle_lia-link-extender__HG9yN NavbarAnchor_lia-disabled__IqfY3" data-testid="NavbarLink.microsoft_learn" target="_self"><span class="styles_lia-g-navbar-link-text__hNCPc">Microsoft Learn<svg class="styles_lia-g-navbar-dropdown-icon__MBB_c Icon_lia-icon__on1Gb" data-testid="Icon" style="--lia-local-icon-color:var(--lia-bs-body-color);--lia-local-icon-color-h:var(--lia-bs-body-color-h);--lia-local-icon-color-s:var(--lia-bs-body-color-s);--lia-local-icon-color-l:var(--lia-bs-body-color-l)" aria-hidden="true"><use href="/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/chevron-down.svg#chevron-down"></use></svg></span></a></div></div><a tabindex="0" href="/category/Community-Info-Center" class="styles_lia-g-navbar-link___5V8S" data-testid="NavbarLink.community_info_center" target="_self"><span class="styles_lia-g-navbar-link-text__hNCPc">Lounge</span></a></div><div class="NavbarTextLinks_lia-more__Lo2H5"></div></section><section class="Navbar_lia-section__0E_DT Navbar_lia-controls__i63Rp"><a data-testid="AuthenticationLink.registration" class="Navbar_lia-controller-text-link__1JNsW styles_lia-g-navbar-link___5V8S" href="/t5/s/gxcuf89792/auth/oidcss/sso_login_redirect/provider/default?referer=https%3A%2F%2Ftechcommunity.microsoft.com%2Fblog%2Fdesenvolvedoresbr%2Fazure-open-ia-acelerando-nossos-caminhos-%2F4276402">Register</a><a data-testid="AuthenticationLink.login" class="Navbar_lia-controller-text-link__1JNsW styles_lia-g-navbar-link___5V8S" href="/t5/s/gxcuf89792/auth/oidcss/sso_login_redirect/provider/default?referer=https%3A%2F%2Ftechcommunity.microsoft.com%2Fblog%2Fdesenvolvedoresbr%2Fazure-open-ia-acelerando-nossos-caminhos-%2F4276402">Sign In</a></section></div></nav><div class="Navbar_lia-nav-spacer__e1b2y" aria-hidden="true"></div><div class="Breadcrumb_lia-breadcrumb-container__qzYKB"><div style="background-color:transparent" class="styles_border-bottom__rm8pu"><nav aria-label="Breadcrumbs" class="Breadcrumb_lia-nav__ilWY3 Breadcrumb_lia-breadcrumb-container-content__95TUn" data-testid="Breadcrumb"><div data-testid="ThemedContainer" style="--lia-breadcrumb-link-color:var(--lia-bs-gray-700);--lia-breadcrumb-divider-opacity:0.5;--lia-breadcrumb-link-highlight-color:var(--lia-bs-primary)" class="Breadcrumb_lia-nav__ilWY3 ThemedContainer_lia-fixed-container__MPYgN ThemedContainer_lia-fixed-gutters__1PeHV styles_container__6wTQq"><ol class="Breadcrumb_lia-crumb-list__Xb5Aw"><li class="Breadcrumb_lia-crumb-list-item__iXBAq"><a data-testid="nodeLink" target="_self" class="Breadcrumb_lia-crumb-item__CSmrj" aria-label="Place Microsoft Community Hub" href="/">Microsoft Community Hub</a></li><li class="Breadcrumb_lia-crumb-divider__Fy21x" aria-hidden="true"><svg class="Breadcrumb_lia-crumb-icon__ZfovN styles_lia-g-icon-size-12__fO_66 Icon_lia-size-12__l8N3M Icon_lia-icon__on1Gb" data-testid="Icon" style="--lia-local-icon-color:var(--lia-bs-gray-500);--lia-local-icon-color-h:var(--lia-bs-gray-500-h);--lia-local-icon-color-s:var(--lia-bs-gray-500-s);--lia-local-icon-color-l:var(--lia-bs-gray-500-l)" aria-hidden="true"><use href="/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/chevron-right.svg#chevron-right"></use></svg></li><li class="Breadcrumb_lia-crumb-list-item__iXBAq"><div class="styles_dropdown__gtmlA"><button data-testid="Button" aria-haspopup="true" aria-expanded="false" aria-label="Additional parent page navigation" type="button" class="Breadcrumb_lia-dropdown-toggle__csMOA styles_dropdown-toggle__lyIUd styles_btn__1HFm0"><svg class="Breadcrumb_lia-ellipsis-icon__ulzm3 styles_lia-g-icon-size-12__fO_66 Icon_lia-size-12__l8N3M Icon_lia-icon__on1Gb" data-testid="Icon" style="--lia-local-icon-color:var(--lia-bs-gray-700);--lia-local-icon-color-h:var(--lia-bs-gray-700-h);--lia-local-icon-color-s:var(--lia-bs-gray-700-s);--lia-local-icon-color-l:var(--lia-bs-gray-700-l)" aria-hidden="true"><use href="/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/ellipsis.svg#ellipsis"></use></svg></button><div x-placement="bottom-start" style="position:absolute;top:0;left:0;opacity:0;pointer-events:none" class="styles_dropdown-menu__gMSix"><a data-testid="nodeLink" target="_self" class="styles_dropdown-item__s_Yb9" aria-label="Place Communities" href="/category/communities">Communities</a><a data-testid="nodeLink" target="_self" class="styles_dropdown-item__s_Yb9" aria-label="Place Topics" href="/category/solutions">Topics</a></div></div></li><li class="Breadcrumb_lia-crumb-divider__Fy21x"><svg class="Breadcrumb_lia-crumb-icon__ZfovN styles_lia-g-icon-size-12__fO_66 Icon_lia-size-12__l8N3M Icon_lia-icon__on1Gb" data-testid="Icon" style="--lia-local-icon-color:var(--lia-bs-gray-500);--lia-local-icon-color-h:var(--lia-bs-gray-500-h);--lia-local-icon-color-s:var(--lia-bs-gray-500-s);--lia-local-icon-color-l:var(--lia-bs-gray-500-l)" aria-hidden="true"><use href="/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/chevron-right.svg#chevron-right"></use></svg></li><li class="Breadcrumb_lia-crumb-list-item__iXBAq"><a data-testid="nodeLink" target="_self" class="Breadcrumb_lia-crumb-item__CSmrj" aria-label="Place Regional Blogs" href="/category/regionalblogs">Regional Blogs</a></li><li class="Breadcrumb_lia-crumb-divider__Fy21x" aria-hidden="true"><svg class="Breadcrumb_lia-crumb-icon__ZfovN styles_lia-g-icon-size-12__fO_66 Icon_lia-size-12__l8N3M Icon_lia-icon__on1Gb" data-testid="Icon" style="--lia-local-icon-color:var(--lia-bs-gray-500);--lia-local-icon-color-h:var(--lia-bs-gray-500-h);--lia-local-icon-color-s:var(--lia-bs-gray-500-s);--lia-local-icon-color-l:var(--lia-bs-gray-500-l)" aria-hidden="true"><use href="/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/chevron-right.svg#chevron-right"></use></svg></li><li class="Breadcrumb_lia-crumb-list-item__iXBAq Breadcrumb_lia-crumb-mobile__phoX_" data-testid="Breadcrumb.Mobilecrumb"><a data-testid="nodeLink" target="_self" class="Breadcrumb_lia-crumb-item__CSmrj" aria-label="Place Desenvolvedores BR" href="/category/regionalblogs/blog/desenvolvedoresbr"><svg class="Breadcrumb_lia-crumb-icon-mobile__TE_1C styles_lia-g-icon-size-16__V9Va_ Icon_lia-size-16__D8_m2 Icon_lia-icon__on1Gb" data-testid="Icon" style="--lia-local-icon-color:var(--lia-bs-gray-700);--lia-local-icon-color-h:var(--lia-bs-gray-700-h);--lia-local-icon-color-s:var(--lia-bs-gray-700-s);--lia-local-icon-color-l:var(--lia-bs-gray-700-l)" aria-hidden="true"><use href="/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/chevron-left.svg#chevron-left"></use></svg>Desenvolvedores BR</a></li></ol><div class="Breadcrumb_lia-crumb-actions__fTD_Z" style="--lia-breadcrumb-link-color:var(--lia-bs-gray-700)"></div></div></nav></div></div><div class="CustomComponent_lia-wrapper__7IqeO" style="--lia-local-bg-color:transparent"><article class="CustomComponent_lia-article__sQ7z4" data-testid="CustomComponent"><section><div class="custom_widget_community_banner_community-banner_1a5zb_1"> <a href="https://aka.ms/MCAG/IPM/MC25002B" target="_blank" class="custom_widget_community_banner_top-bar_1a5zb_2 custom_widget_community_banner_btn_1a5zb_2"> Connect with experts and redefine what’s possible at work – join us at the Microsoft 365 Community Conference May 6-8. Learn more ></a> </div></section></article></div><div class="CustomComponent_lia-wrapper__7IqeO" style="--lia-local-bg-color:transparent"><article class="CustomComponent_lia-article__sQ7z4" data-testid="CustomComponent"><section></section></article></div></header><main id="main-content"><section class="QuiltSection_lia-section-spacing__WK9AB" data-testid="QuiltSection-blog-article"><div class="QuiltSection_lia-section-attached-first__zZ7U_"></div><div data-testid="ThemedContainer" class="ThemedContainer_lia-fixed-container__MPYgN styles_container__6wTQq"><div class="styles_text-center__Pja03 styles_text-break__Ny06M styles_sr-only__NOnjB styles_lia-g-mb-15__YNrGd" data-testid="QuiltSectionHeader"><h2 class="styles_sr-only__NOnjB" data-testid="QuiltSectionHeader.Title">Blog Post</h2></div><div class="styles_row__sjnST"><div style="--lia-content-item-border:none" class="QuiltSection_lia-column__iNmDj styles_col-lg-12__u20eR"><div class="styles_lia-g-section-widget__aHMgk"><div class="BlogArticleWidget_lia-blog-container__PjCkA"><div class="BlogArticleWidget_lia-message-body-container__APZ8H"><div class="MessageViewStandard_lia-wrap__T7pk7"><article class="MessageViewStandard_lia-article__pnxJk styles_lia-g-message-box__arKXm BlogArticleWidget_lia-article__s_eaY" data-testid="StandardMessageView"><section class="MessageViewStandard_lia-section__rh71K" id="uid4276402"><div class="styles_d-flex__7__Y_ styles_flex-column__Vl0ML"><div class="MessageViewStandard_lia-head-wrapper__KIxBz"><div class="MessageViewStandard_lia-title-section__P1a89"><div class="styles_d-flex__7__Y_"><div class="styles_lia-g-subheading__MYxBV MessageViewStandard_lia-node-title__ptFLq NodeTitle_lia-title-and-icon__wEuTM" data-testid="NodeTitle">Desenvolvedores BR </div><div class="styles_lia-g-subheading__MYxBV MessageViewStandard_lia-node-title__ptFLq styles_lia-g-ml-25__j3n4m">13 MIN READ</div></div><h1 title="Azure Open IA, acelerando nossos caminhos." class="styles_text-break__Ny06M MessageViewStandard_lia-cover-image-title__WLVim" data-testid="MessageSubject">Azure Open IA, acelerando nossos caminhos.</h1><div class="MessageViewStandard_lia-header__m8KYT"><div class="MessageViewStandard_lia-header-main__2zLqy"><div class="styles_lia-g-mr-10__IIyjn"><a data-hovercard-trigger="true" data-testid="userLink" class="styles_d-block__btBet" aria-label="View Profile: wdossantos" aria-describedby="UserHoverCard-1171673" target="_self" href="/users/wdossantos/1171673"><span class="UserAvatar_lia-avatar__HFfcv styles_lia-g-icon-size-50__HExtr" data-testid="userAvatar"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0xMTcxNjczLTMyNTM2MGkwNjkyMDE1OTQ0RkQ5MTM0?image-dimensions=50x50" alt="wdossantos's avatar" class="UserAvatar_lia-avatar-img__CUPwZ" aria-hidden="false"/></span></a></div><div class="MessageViewStandard_lia-header-text__6GqFy"><div class="styles_d-flex__7__Y_ styles_align-items-center__OKdH0"><span class="styles_lia-g-divider__X68T2"><a data-hovercard-trigger="true" data-testid="userLink" class="MessageViewStandard_lia-author-text__3ExAu styles_font-weight-bold__3_Kc8 styles_small__seeYj styles_d-flex__7__Y_" aria-label="View Profile: wdossantos" aria-describedby="UserHoverCard-1171673" target="_self" href="/users/wdossantos/1171673">wdossantos</a></span><div class="styles_lia-g-ml-5__SlnKE MessageViewStandard_lia-author-rank__fonU0" data-testid="userRank"><div class="UserRankLabel_lia-rank__CqPss"><img class="UserRankLabel_lia-rank-icon__g_uVM" src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/cmstNC05WEo0blc?image-dimensions=100x16&constrain-image=true" alt="Icon for Microsoft rank"/><span style="border-color:#333333;color:#333333" class="UserRankLabel_lia-is-boxed__Ykpfe UserRankLabel_lia-rank-label__epEUI UserRankLabel_lia-is-outline__q_ZVs"><span class="UserRankLabel_text-break__RX8Tt styles_lia-g-clamp__dg3Sg">Microsoft</span></span></div></div></div><span class="MessageViewStandard_lia-author-post-time__OaTrl" data-testid="messageTime"><span title="November 1, 2024 at 8:23 PM" role="none">Nov 01, 2024</span></span></div></div></div></div></div></div><div class="BlogArticleWidget_lia-blog-content__THh3d"><div class="styles_lia-g-message-body__LkV7_ styles_lia-g-message-body-blog__TUnqH styles_clearfix__xFEoC styles_text-body__F7QRV"><DIV class="markdown-heading" dir="auto"> <H1 class="heading-element" dir="auto" data-sourcepos="1:1-1:44" id="community-4276402-toc-hId--1216694888">Azure Open IA, acelerando nossos caminhos.</H1> <P> </P> <A id="user-content-azure-open-ia-acelerando-nossos-caminhos" class="anchor" href="https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#azure-open-ia-acelerando-nossos-caminhos" target="_blank" rel="noopener noreferrer" aria-label="Permalink: Azure Open IA, acelerando nossos caminhos."></A></DIV> <P data-sourcepos="3:1-3:284">Há algum tempo temos ouvido falar sobre o OpenAI, que se tornou um dos temas mais requisitados da atualidade. É comum sentirmos o desejo de testar suas funcionalidades, porém, surge a dúvida de por onde começar e como fazê-lo sem comprometer a confidencialidade de nossos dados.</P> <P data-sourcepos="3:1-3:284"> </P> <P data-sourcepos="5:1-5:615">O caminho que vou apresentar aqui envolve o uso de um acelerador do Azure para o OpenAI<SPAN> </SPAN><A href="https://github.com/Azure-Samples/azure-search-openai-demo" target="_blank" rel="noopener noreferrer">azure-search-openai-demo</A>, ele nos auxiliará desde a configuração da infraestrutura até a implementação de aplicações de exemplo. Fiquei impressionado com a facilidade de uso, a estratégia de usar o “azd” facilitou muito as coisas, veja como instalar aqui<SPAN> </SPAN><A href="https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd?tabs=winget-windows%2Cbrew-mac%2Cscript-linux&pivots=os-windows" target="_blank" rel="noopener noreferrer">Install the Azure Developer CLI | Microsoft Learn</A></P> <P data-sourcepos="7:1-7:175">Basta executar alguns comandos e pronto, o ambiente estará todo configurado no Azure. Eu apenas criei uma nova pasta sem clonar nenhum repositório e executei esses comandos.</P> <P data-sourcepos="7:1-7:175"> </P> <DIV class="highlight highlight-source-powershell notranslate position-relative overflow-auto" dir="auto"> <PRE>azd init <SPAN class="pl-k">-</SPAN>t azure<SPAN class="pl-k">-</SPAN><SPAN class="pl-c1">search-openai</SPAN><SPAN class="pl-k">-</SPAN>demo azd auth login azd up</PRE> </DIV> <P> </P> <P>1-) azd init -t azure-search-openai-demo</P> <P> </P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="azd init -t azure-search-openai-demo"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image azd init -t azure-search-openai-demo"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NWk5RTk5MkM4REZCOThDQzNB?image-dimensions=750x750&revision=5" alt="azd init -t azure-search-openai-demo" /></button><span class="lia-media-caption-text">azd init -t azure-search-openai-demo</span></span></P> <P data-sourcepos="17:1-17:36"> </P> <P data-sourcepos="17:1-17:36">2-) azd auth login<SPAN> </SPAN></P> <P data-sourcepos="17:1-17:36"> </P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="azd auth login"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image azd auth login"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NmlFN0VGQjFFQ0UzMDg2QjJF?image-dimensions=750x750&revision=5" alt="azd auth login" /></button><span class="lia-media-caption-text">azd auth login</span></span></P> <P data-sourcepos="21:1-22:94"> </P> <P data-sourcepos="21:1-22:94">3-) azd up</P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="azd up"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image azd up"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1N2k2OEZBNjIxMEQ1NTY5RThE?image-dimensions=750x750&revision=5" alt="azd up" /></button><span class="lia-media-caption-text">azd up</span></span></P> <P data-sourcepos="24:1-24:6"> </P> <P data-sourcepos="24:1-24:6"> </P> <P data-sourcepos="26:1-26:82">Ao fim da execução de mais ou menos 30 minutos, pude ver esses recursos criados:</P> <P data-sourcepos="26:1-26:82"> </P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="Lista de recursos criados"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image Lista de recursos criados"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1OGkyQTQyOEM4ODAwODk2OTMx?image-dimensions=750x750&revision=5" alt="Lista de recursos criados" /></button><span class="lia-media-caption-text">Lista de recursos criados</span></span></P> <P data-sourcepos="30:1-30:24"> </P> <P data-sourcepos="30:1-30:24">Visualizador de Recursos:</P> <P data-sourcepos="30:1-30:24"> </P> <P data-sourcepos="30:1-30:24"> </P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="Mapa dos recursos"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image Mapa dos recursos"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1OWk0MzVGNzQ0RkZDM0I3ODk5?image-dimensions=750x750&revision=5" alt="Mapa dos recursos" /></button><span class="lia-media-caption-text">Mapa dos recursos</span></span></P> <P> </P> <P data-sourcepos="34:1-34:26">A aplicação nasce pronta:</P> <P data-sourcepos="34:1-34:26"> </P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="Aplicação de exemplo do acelerador"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image Aplicação de exemplo do acelerador"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2MGkyMDc4RjkzQzc5QTM4QkJC?image-dimensions=750x750&revision=5" alt="Aplicação de exemplo do acelerador" /></button><span class="lia-media-caption-text">Aplicação de exemplo do acelerador</span></span></P> <P data-sourcepos="38:1-38:191"> </P> <P data-sourcepos="38:1-38:191">Arquivos criados ao rodar o comando azd init -t azure-search-openai-demo:</P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="Arquivos criados ao rodar o comando azd init -t azure-search-openai-demo"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image Arquivos criados ao rodar o comando azd init -t azure-search-openai-demo"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2MWlCQzQ3MjkyOTg5REFFQkY4?image-dimensions=750x750&revision=5" alt="Arquivos criados ao rodar o comando azd init -t azure-search-openai-demo" /></button><span class="lia-media-caption-text">Arquivos criados ao rodar o comando azd init -t azure-search-openai-demo</span></span></P> <P data-sourcepos="42:1-42:72"> </P> <P data-sourcepos="42:1-42:72">Basta fazer as perguntas. Inclusive, uma série de documentos de exemplo foram adicionados à solução, os quais podem ser encontrados na pasta local “data” ou no armazenamento do Azure.</P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="wdossantos_33-1729596822623.png"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image wdossantos_33-1729596822623.png"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2Mmk5M0M2QUQ0M0FCQTA1MEQ4?image-dimensions=750x750&revision=5" alt="wdossantos_33-1729596822623.png" /></button></span></P> <P> </P> <P data-sourcepos="46:1-46:647">O próximo passo será trabalhar com a ingestão de dados. Existe um guia na própria documentação do acelerador intitulado<SPAN> </SPAN><A href="https://github.com/Azure-Samples/azure-search-openai-demo/blob/main/docs/data_ingestion.md" target="_blank" rel="noopener noreferrer">Indexing documents for the Chat App</A>. Para começar, vou fazer o upload de um artigo meu do blog, chamado “<A href="https://medium.com/escalando-nodes-e-escalando-pods-s%C3%A3o-dois-conceitos-diferentes-no-contexto-do-aks-b7582b4b209e" target="_blank" rel="nofollow noopener noreferrer">Escalando nodes e escalando e pods no AKS. | by Wilson Santos | Medium</A>”, para isso, basta gerar um PDF e colocar o arquivo dentro da pasta “data” do acelerador, diretamente na sua máquina local.</P> <P data-sourcepos="46:1-46:647"> </P> <P data-sourcepos="48:1-48:127">Após isso, você irá executar um pequeno script em PowerShell chamado “prepdoc”. O comando para executá-lo é o seguinte</P> <DIV class="highlight highlight-source-powershell notranslate position-relative overflow-auto" dir="auto"> <PRE>.\\scripts\\prepdocs.ps1</PRE> <DIV class="zeroclipboard-container position-absolute right-0 top-0"> </DIV> </DIV> <P data-sourcepos="54:1-54:73">Assim que terminar de rodar podemos fazer perguntas sobre esse conteúdo.</P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="wdossantos_34-1729596859679.png"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image wdossantos_34-1729596859679.png"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2M2lDMEU4OEY0MDQ5MzQxMDdG?image-dimensions=750x750&revision=5" alt="wdossantos_34-1729596859679.png" /></button></span></P> <P> </P> <P data-sourcepos="58:1-58:147">O acelerador traz uma implementação em React e python e podemos estudar como ela funciona usando esse código que fica na pasta app do acelerador</P> <P data-sourcepos="60:1-60:221">Temos um front em React e um backend em Python, mas caso você esteja acostumado com C# que é o meu caso, nada melhor que explorar os SDKS do<SPAN> </SPAN><STRONG>Azure.AI.OpenAI</STRONG><SPAN> </SPAN>e o<SPAN> </SPAN><STRONG>SemanticKernel</STRONG><SPAN> </SPAN>que eu estou apresentando a seguir.</P> <P data-sourcepos="60:1-60:221"> </P> <DIV class="markdown-heading" dir="auto"> <H2 class="heading-element" dir="auto" data-sourcepos="62:1-62:30" id="community-4276402-toc-hId--526133414">Nada melhor que “codar” para entender melhor as coisas!</H2> <P> </P> <A id="user-content-nada-melhor-que-codar" class="anchor" href="https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#nada-melhor-que-codar" target="_blank" rel="noopener noreferrer" aria-label="Permalink: Nada melhor que “codar”"></A></DIV> <P data-sourcepos="64:1-64:341"><SPAN>Agora, vamos criar um pequeno programa em .NET Core Console que aproveitará toda a infraestrutura criada pelo acelerador. Este programa será capaz de fazer perguntas ao Azure Open AI e, além disso, responderá com base nos documentos que forem atualizados na base de conhecimento. Para isso, utilizaremos o pacote </SPAN><CODE>Azure.AI.OpenAI</CODE><SPAN>. No meu exemplo, estou utilizando a versão 2.0.0.</SPAN></P> <P data-sourcepos="64:1-64:341"> </P> <DIV class="highlight highlight-source-powershell notranslate position-relative overflow-auto" dir="auto"> <PRE><SPAN class="pl-c1">install-package</SPAN> Azure.AI.OpenAI</PRE> <DIV class="zeroclipboard-container position-absolute right-0 top-0"> </DIV> </DIV> <P data-sourcepos="70:1-70:59">Primeiro passo vamos criar um client da classe <STRONG>AzureOpenAIClient:</STRONG></P> <P data-sourcepos="70:1-70:59"> </P> <DIV class="highlight highlight-source-powershell notranslate position-relative overflow-auto" dir="auto"> <DIV class="zeroclipboard-container position-absolute right-0 top-0"><pre class="lia-code-sample language-csharp"><code>AzureOpenAIClient azureClient = new(endpoint, credential);</code></pre></DIV> </DIV> <P data-sourcepos="76:1-76:151"> </P> <P data-sourcepos="76:1-76:151">Para as credenciais e o endpoint, utilizamos uma chave do recurso que pode ser obtida na seção “Keys and Endpoint” da instância do Azure OpenAI.</P> <P data-sourcepos="76:1-76:151"> </P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="wdossantos_35-1729596914646.png"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image wdossantos_35-1729596914646.png"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2NWlERUYxOEJDNjhEM0FFRkY4?image-dimensions=750x750&revision=5" alt="wdossantos_35-1729596914646.png" /></button></span></P> <DIV class="highlight highlight-source-powershell notranslate position-relative overflow-auto" dir="auto"> <DIV class="zeroclipboard-container position-absolute right-0 top-0"> <P> </P> <pre class="lia-code-sample language-csharp"><code> var credential = new AzureKeyCredential("...");</code></pre> <P> </P> </DIV> </DIV> <P data-sourcepos="84:1-84:156">Depois, vamos criar uma instancia da classe chamada<STRONG> SearchClient</STRONG>. Essa classe ajudará na conexão com o serviço de busca (Search service).</P> <P data-sourcepos="84:1-84:156"> </P> <P data-sourcepos="86:1-86:11">algo assim:</P> <P> </P> <pre class="lia-code-sample language-csharp"><code>var searchEndpoint = new Uri("..."); var searchCredential = new AzureKeyCredential("..."); var indexName = "gptkbindex"; var searchClient = new SearchClient(searchEndpoint, indexName, searchCredential); var searchOptions = new SearchOptions { Size = 5 // Número de documentos a recuperar }; var searchResults = searchClient.Search<SearchDocument>(text, searchOptions); var retrievedDocuments = searchResults.Value.GetResults().Select(result => result.Document["content"].ToString()); var context = string.Join("\n", retrievedDocuments);</code></pre> <P> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> </DIV> <P data-sourcepos="99:1-99:197">A classe <STRONG>SearchClient</STRONG> também requer o uso de uma chave de segurança. Para encontrá-la, acessamos a instância do serviço de busca (Search service) na seção “Keys”</P> <P data-sourcepos="99:1-99:197"> </P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="wdossantos_36-1729596964770.png"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image wdossantos_36-1729596964770.png"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2Nmk0MTM3RDdFNjc3OTBDMjNB?image-dimensions=750x750&revision=5" alt="wdossantos_36-1729596964770.png" /></button></span></P> <P> </P> <P data-sourcepos="103:1-103:27">o endpoint esta em overview</P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="wdossantos_37-1729596995296.png"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image wdossantos_37-1729596995296.png"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2N2lGMUQ1QUE2RUQ5MTQyQTI3?image-dimensions=750x750&revision=5" alt="wdossantos_37-1729596995296.png" /></button></span></P> <P> </P> <P data-sourcepos="107:1-107:383">Agora vamos criar uma instancia da classe<STRONG> ChatClient</STRONG>, que será responsável por fazer perguntas para o OpenAI, e passar o prompt para o Azure openIA.</P> <P data-sourcepos="107:1-107:383"> </P> <P data-sourcepos="107:1-107:383">E aqui que está <STRONG>o grande segredo do RAG</STRONG>, tudo é prompt, pegamos o resultado da busca do <STRONG>SearchClient </STRONG>que está na variável <STRONG>context</STRONG> e juntamos no prompt.</P> <P data-sourcepos="107:1-107:383"> </P> <P> </P> <pre class="lia-code-sample language-csharp"><code>var prompt = $"Contexto: {context}\nPergunta: {text}"; ChatClient chatClient = await azureClient.CompleteChatAsync("gpt-4o"); ChatCompletion completion = chatClient.CompleteChat(new List<ChatMessage> { new SystemChatMessage("Você é um assistente atencioso"), new UserChatMessage(prompt), });</code></pre> <P> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> </DIV> <P data-sourcepos="130:1-130:265">Para obter o valor do campo<SPAN> </SPAN><STRONG>DeploymentName</STRONG>, no meu caso o gpt-4o, você pode encontrá-lo na instância do OpenAI. Basta abrir os “Model deployments”, clicar em “Management deployment”. Isso abrirá o <STRONG>Azure OpenAI Studio</STRONG>, onde você poderá visualizar os modelos implantados.</P> <P data-sourcepos="130:1-130:265"> </P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="wdossantos_0-1730489069431.png"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image wdossantos_0-1730489069431.png"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU1N2lEOTc4NTU3QUM0RjcyQzlC?image-dimensions=750x750&revision=5" alt="wdossantos_0-1730489069431.png" /></button></span></P> <P> </P> <P> </P> <P data-sourcepos="134:1-134:116">os pacotes utilizados foram esses:</P> <DIV class="highlight highlight-text-xml notranslate position-relative overflow-auto" dir="auto"> <PRE><PackageReference Include="Azure.AI.OpenAI" Version="2.0.0" /><BR /><PackageReference Include="Azure.Identity" Version="1.13.1" /><BR /><PackageReference Include="Azure.Search.Documents" Version="11.4.0" /></PRE> <DIV class="zeroclipboard-container position-absolute right-0 top-0"> </DIV> <DIV class="zeroclipboard-container position-absolute right-0 top-0">o Código final ficou assim:</DIV> <DIV class="zeroclipboard-container position-absolute right-0 top-0"> </DIV> <DIV class="zeroclipboard-container position-absolute right-0 top-0"><pre class="lia-code-sample language-csharp"><code>using Azure; using Azure.AI.OpenAI; using Azure.Search.Documents; using Azure.Search.Documents.Models; using OpenAI.Chat; public class Program { static async Task Main(string[] args) { while (true) { Console.WriteLine("Digite uma Pergunta"); var question = Console.ReadLine(); if (question != null) { var result = await AskingChatCompletionWithSearchsAsync(question); Console.WriteLine(result); } } } static async Task<string> AskingChatCompletionWithSearchsAsync(string text) { var endpoint = new Uri("https://openiapriv02.openai.azure.com/"); var credential = new AzureKeyCredential("..."); AzureOpenAIClient azureClient = new(endpoint, credential); var searchEndpoint = new Uri("https://gptkb-kv4atymcdg6pg.search.windows.net"); var searchCredential = new AzureKeyCredential("..."); var indexName = "gptkbindex"; var searchClient = new SearchClient(searchEndpoint, indexName, searchCredential); var searchOptions = new SearchOptions { Size = 5 // Número de documentos a recuperar }; var searchResults = searchClient.Search<SearchDocument>(text, searchOptions); var retrievedDocuments = searchResults.Value.GetResults().Select(result => result.Document["content"].ToString()); var context = string.Join("\n", retrievedDocuments); var prompt = $"Contexto: {context}\nPergunta: {text}"; ChatClient chatClient = azureClient.GetChatClient("gpt-4o"); ChatCompletion completion = await chatClient.CompleteChatAsync(new List<ChatMessage> { new SystemChatMessage("Você é um assistente atencioso"), new UserChatMessage(prompt), }); var result = $"{completion.Role}: {completion.Content[0].Text}"; return result; } }</code></pre></DIV> </DIV> <P data-sourcepos="179:1-179:86"> </P> <P data-sourcepos="179:1-179:86">fiz uma pergunta para o assistente com base em um documento que já veio de exemplo no acelerador o Benefit_Options.pdf, perguntei o <STRONG>que é o programa Northwind Health Plus?. </STRONG>Observe que a resposta é dada com base nos documentos indexados no<SPAN> </SPAN><STRONG>Search service</STRONG></P> <P data-sourcepos="179:1-179:86"> </P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="wdossantos_1-1730489483583.png"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image wdossantos_1-1730489483583.png"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU2MGk3NjREMkRCNjRBODY5Mjg0?image-dimensions=750x750&revision=5" alt="wdossantos_1-1730489483583.png" /></button></span></P> <P> </P> <DIV class="markdown-heading" dir="auto"> <H2 class="heading-element" dir="auto" data-sourcepos="181:1-181:44" id="community-4276402-toc-hId-1961379419">Mas o que são essas versões de modelos?</H2> <P> </P> <A id="user-content-mas-o-que-são-essas-versões-de-modelos" class="anchor" href="https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#mas-o-que-s%C3%A3o-essas-vers%C3%B5es-de-modelos" target="_blank" rel="noopener noreferrer" aria-label="Permalink: Mas o que são essas versões de modelos?"></A></DIV> <P data-sourcepos="183:1-183:147">Os modelos são constantemente atualizados com novas características, as versões de modelo são a maneira de controlar essas mudanças do OpenAI.</P> <P data-sourcepos="183:1-183:147"> </P> <P data-sourcepos="185:1-185:604">Em particular, os modelos<SPAN> </SPAN><STRONG>GPT-3.5 Turbo</STRONG><SPAN> </SPAN>e<SPAN> </SPAN><STRONG>GPT-4</STRONG><SPAN> </SPAN>recebem atualizações regulares com novos recursos. Por exemplo, as versões 0613 do GPT-3.5 Turbo e GPT-4 introduziram a chamada de função. A chamada de função é um recurso popular que permite ao modelo criar saídas estruturadas que podem ser usadas para chamar ferramentas externas. Fique atento aos modelos disponíveis para sua região quais modelos seu SDK suporta, saiba mais em<SPAN> </SPAN><A href="https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/model-versions" target="_blank" rel="noopener noreferrer">Azure OpenAI Service model versions — Azure OpenAI | Microsoft Learn</A></P> <P data-sourcepos="185:1-185:604"> </P> <DIV class="markdown-heading" dir="auto"> <H2 class="heading-element" dir="auto" data-sourcepos="187:1-187:18" id="community-4276402-toc-hId-153924956">Semantic Kernel</H2> <P> </P> <A id="user-content-semantic-kernel" class="anchor" href="https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#semantic-kernel" target="_blank" rel="noopener noreferrer" aria-label="Permalink: Semantic Kernel"></A></DIV> <P data-sourcepos="189:1-189:568">O Semantic Kernel é um SDK de código aberto projetado para integrar com o código existente. Ele suporta várias linguagens de programação, incluindo C#, Python e Java. Através de conectores e plugins, o Semantic Kernel permite adicionar inteligencia aos aplicativos. Sua flexibilidade permite aos desenvolvedores orquestrar o código existente sem se prender a um provedor específico de modelos de IA, proporcionando liberdade na escolha e combinação de serviços conforme as necessidades do projeto.<SPAN> </SPAN><A href="https://github.com/microsoft/semantic-kernel" target="_blank" rel="noopener noreferrer">Saiba mais</A></P> <P data-sourcepos="189:1-189:568"> </P> <P data-sourcepos="191:1-191:209">Vamos fazer algumas implementações básicas, a começar por um chat básico sem RAG, é importante lembrar que alguns dos pacotes usados ainda estão em versões alpha não indicados para ambiente produtivo.</P> <P data-sourcepos="193:1-193:34">vamos começar a instalar o pacote</P> <P data-sourcepos="193:1-193:34"> </P> <DIV class="highlight highlight-source-powershell notranslate position-relative overflow-auto" dir="auto"> <PRE><SPAN class="pl-c1">install-pacakge</SPAN> Microsoft.SemanticKernel</PRE> <DIV class="zeroclipboard-container position-absolute right-0 top-0"> </DIV> </DIV> <P data-sourcepos="199:1-199:168">Agora vamos criar uma representação do que o SDK chama de Kernel, essa representação já adiciona a injeção do Chat Completion da nossa instancia do Azure Open IA</P> <P data-sourcepos="199:1-199:168"> </P> <P> </P> <pre class="lia-code-sample language-csharp"><code> var builder = Kernel.CreateBuilder(); builder.AddAzureOpenAIChatCompletion( "gpt-4o", // Azure OpenAI Deployment Name "https://wsopenia.openai.azure.com/", // Azure OpenAI Endpoint "..."); // Azure OpenAI Key var kernel = builder.Build();</code></pre> <P> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> </DIV> <P data-sourcepos="213:1-213:516">O prompt no Semantic Kernel é um template em formato texto que permite valorar variáveis, chamar funções e extrair valores, para isso usamos as chaves {{…}}. no nosso exemplo temos as variáveis history e input em uma estrutura que mostra para a IA quais informações são a entrada de usuário e quais são apenas instruções. para saber mais sobre prompt<SPAN> </SPAN><A href="https://learn.microsoft.com/en-us/semantic-kernel/prompts/prompt-template-syntax" target="_blank" rel="noopener noreferrer">Using the out-of-the-box prompt template language | Microsoft Learn</A></P> <P data-sourcepos="213:1-213:516"> </P> <P> </P> <pre class="lia-code-sample language-csharp"><code>var prompt = @"Chat:{{$history}} User:{{$input}}";</code></pre> <P> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> </DIV> <P data-sourcepos="219:1-219:131">Agora usamos o método<SPAN> </SPAN><STRONG>CreateFunctionFromPrompt</STRONG><SPAN> </SPAN>especificando as configurações de prompt como<SPAN> </SPAN><STRONG>MaxTokens, Temperatura </STRONG>etc<STRONG>.</STRONG></P> <P data-sourcepos="219:1-219:131"> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> <DIV class="zeroclipboard-container position-absolute right-0 top-0"><pre class="lia-code-sample language-csharp"><code> var kf = kernel.CreateFunctionFromPrompt(prompt, executionSettings: new OpenAIPromptExecutionSettings { MaxTokens = 500, ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions });</code></pre></DIV> </DIV> <P data-sourcepos="227:1-227:73">e usando a classe<SPAN> </SPAN><STRONG>KernelArguments</STRONG>, passamos os valores das variáveis</P> <P data-sourcepos="227:1-227:73"> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> <DIV class="zeroclipboard-container position-absolute right-0 top-0"><pre class="lia-code-sample language-csharp"><code>var arguments = new KernelArguments(); arguments\["input"\] = question; arguments\["history"\] = questionHistory;</code></pre></DIV> </DIV> <P data-sourcepos="235:1-235:119"> </P> <P data-sourcepos="235:1-235:119">a etapa final é chamar as funções <STRONG>InvokeAsync</STRONG> passando a instancia de “kf” e passando a instancia dos argumentos</P> <P data-sourcepos="235:1-235:119"> </P> <P> </P> <pre class="lia-code-sample language-csharp"><code>var result = await kernel.InvokeAsync(kf, arguments);</code></pre> <P> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> </DIV> <P data-sourcepos="241:1-241:37">um exemplo de implementação é essa:</P> <P> </P> <pre class="lia-code-sample language-csharp"><code>var arguments = new KernelArguments(); var prompt = @"Chat:{{$history}} User:{{$input}}"; var kf = kernel.CreateFunctionFromPrompt(prompt, executionSettings: new OpenAIPromptExecutionSettings { MaxTokens = 500, ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions }); var questionHistory = ""; while (true) { Console.WriteLine("Digite uma Pergunta"); var question = Console.ReadLine(); // Add user input arguments["input"] = question; var result = await kernel.InvokeAsync(kf, arguments); Console.WriteLine("result:" + result); //Console.WriteLine("history:" + questionHistory); questionHistory += "Chat:" + result + "User:" + question + "\n"; arguments["history"] = questionHistory; }</code></pre> <P> </P> <P> </P> <P>aqui não temos RAG apenas o LLM respondendo a pergunta "<STRONG>o que é o Azure OpenIA"</STRONG>?</P> <P> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> <DIV class="zeroclipboard-container position-absolute right-0 top-0"><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="wdossantos_41-1729597143650.png"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image wdossantos_41-1729597143650.png"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3MWkyRTI3MEEyM0FFNUE4N0M5?image-dimensions=750x750&revision=5" alt="wdossantos_41-1729597143650.png" /></button></span> <P> </P> <P><SPAN>Pacotes utilizados:</SPAN></P> </DIV> </DIV> <P data-sourcepos="271:1-271:18"> </P> <DIV class="highlight highlight-text-xml notranslate position-relative overflow-auto" dir="auto"> <PRE><PackageReference Include="Microsoft.SemanticKernel" Version="1.26.0" /></PRE> <DIV class="zeroclipboard-container position-absolute right-0 top-0"> </DIV> </DIV> <DIV class="markdown-heading" dir="auto"> <H2 class="heading-element" dir="auto" data-sourcepos="277:1-277:26" id="community-4276402-toc-hId--1653529507">Semantic é extensível</H2> <A id="user-content-semantic-é-extensível" class="anchor" href="https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#semantic-%C3%A9-extens%C3%ADvel" target="_blank" rel="noopener noreferrer" aria-label="Permalink: Semantic é extensível"></A></DIV> <P> </P> <P data-sourcepos="281:1-281:300">Com ele podemos usar os plugins para interagir com nosso código existente como por exemplo consultar pedidos em uma base de dados, e podemos usar os conectores para integrar com os serviços de IA, por exemplo o Azure openIA,<SPAN> </SPAN><A href="https://learn.microsoft.com/en-us/semantic-kernel/overview/" target="_blank" rel="noopener noreferrer">saiba mais</A></P> <P data-sourcepos="283:1-283:60">Vou mostrar um exemplo de plugin, vou criar uma classe order:</P> <P data-sourcepos="283:1-283:60"> </P> <P> </P> <pre class="lia-code-sample language-csharp"><code>public sealed class Order { [KernelFunction, Description("Show order details for number")] public static string Sqrt([Description("The number to order details")] double number1) { return $"The detail about order {number1} is your current state is closed."; } }</code></pre> <P> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> </DIV> <P data-sourcepos="297:1-297:79">perceba que descrevemos seu comportamento usando um atributo<SPAN> </SPAN><STRONG>KernelFunction</STRONG></P> <P data-sourcepos="299:1-299:47">depois eu vou adicionar esse plugin dessa forma:</P> <P data-sourcepos="299:1-299:47"> </P> <P> </P> <pre class="lia-code-sample language-csharp"><code>var builder = Kernel.CreateBuilder(); builder.Plugins.AddFromType<Order>();</code></pre> <P> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> </DIV> <P data-sourcepos="306:1-306:185">feito isso podemos optar pela auto chamada configurando a classe<SPAN> </SPAN><STRONG>OpenAIPromptExecutionSettings</STRONG><SPAN> </SPAN>com propriedade<SPAN> </SPAN><STRONG>ToolCallBehavior</STRONG><SPAN> </SPAN>setada para o valor<SPAN> </SPAN><STRONG>AutoInvokeKernelFunctions</STRONG></P> <P data-sourcepos="306:1-306:185"> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> <DIV class="zeroclipboard-container position-absolute right-0 top-0"><pre class="lia-code-sample language-csharp"><code> // Enable auto function calling OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new() { ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, };</code></pre></DIV> </DIV> <P data-sourcepos="317:1-317:73"> </P> <P data-sourcepos="317:1-317:73">o restante do código é o mesmo mas vou colocar um exemplo completo aqui:</P> <P data-sourcepos="317:1-317:73"> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> <DIV class="zeroclipboard-container position-absolute right-0 top-0"><pre class="lia-code-sample language-csharp"><code>var builder = Kernel.CreateBuilder(); builder.AddAzureOpenAIChatCompletion( "gpt-4o", // Azure OpenAI Deployment Name "https://cog-nggxeq6fpjnxg.openai.azure.com/", // Azure OpenAI Endpoint "..."); // Azure OpenAI Key builder.Plugins.AddFromType<Order>(); var arguments = new KernelArguments(); var prompt = @"Chat:{{$history}} User:{{$input}}"; var kf = kernel.CreateFunctionFromPrompt(prompt, executionSettings: new OpenAIPromptExecutionSettings { MaxTokens = 500, ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions }); var questionHistory = ""; while (true) { Console.WriteLine("Digite uma Pergunta"); var question = Console.ReadLine(); // Add user input arguments\["input"\] = question; var result = await kernel.InvokeAsync(kf, arguments); Console.WriteLine("result:" + result); questionHistory += "Chat:" + result + "User:" + question + "\\n"; arguments\["history"\] = questionHistory; } </code></pre></DIV> <DIV class="zeroclipboard-container position-absolute right-0 top-0"> </DIV> <DIV class="zeroclipboard-container position-absolute right-0 top-0"><SPAN>Observem a mágica deste exemplo: com ele, podemos criar uma classe que controla os mecanismos de busca e, portanto, o conteúdo da resposta. No entanto, é o LLM que decide se a pergunta corresponde à descrição da classe e aciona o mecanismo. Esse recurso é chamado de 'function calling' e está disponível apenas nas versões mais recentes dos modelos, como o GPT-4.</SPAN></DIV> <DIV class="zeroclipboard-container position-absolute right-0 top-0"> </DIV> <DIV class="zeroclipboard-container position-absolute right-0 top-0"><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="wdossantos_42-1729597207511.png"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image wdossantos_42-1729597207511.png"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3MmkwQzg2NTgxOUY1NDM2NDMw?image-dimensions=750x750&revision=5" alt="wdossantos_42-1729597207511.png" /></button></span> <P><SPAN> </SPAN><SPAN>console e execução respondendo a pergunta “Show order details for number 10”?</SPAN></P> <P> </P> </DIV> </DIV> <P data-sourcepos="356:1-356:18">pacotes utilizados:</P> <DIV class="highlight highlight-text-xml notranslate position-relative overflow-auto" dir="auto"> <PRE> <PackageReference Include="Microsoft.SemanticKernel" Version="1.26.0" /></PRE> <DIV class="zeroclipboard-container position-absolute right-0 top-0"> </DIV> </DIV> <DIV class="markdown-heading" dir="auto"> <H2 class="heading-element" dir="auto" data-sourcepos="362:1-362:28" id="community-4276402-toc-hId-833983326">Memorias usando IA Search</H2> <P> </P> <A id="user-content-memorias-usando-ia-search" class="anchor" href="https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#memorias-usando-ia-search" target="_blank" rel="noopener noreferrer" aria-label="Permalink: Memorias usando IA Search"></A></DIV> <P data-sourcepos="364:1-364:124">Aqui temos o uso de um conector e de um plugin, o conector vai adicionar accesso ao IA Search por meio dessa implementação:</P> <P data-sourcepos="364:1-364:124"> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> <DIV class="zeroclipboard-container position-absolute right-0 top-0"><pre class="lia-code-sample language-csharp"><code>var memoryBuilder = new MemoryBuilder(); memoryBuilder.WithMemoryStore(new AzureAISearchMemoryStore( "https://gptkb-nggxeq6fpjnxg.search.windows.net", "...") );</code></pre></DIV> <DIV class="zeroclipboard-container position-absolute right-0 top-0"> </DIV> </DIV> <BLOCKQUOTE data-sourcepos="374:1-374:194"> <P data-sourcepos="374:3-374:194">Alem do pacote do<SPAN> </SPAN><STRONG>Microsoft.SemanticKernel</STRONG><SPAN> </SPAN>ainda vamos precisar de mais dois pacotes o<SPAN> </SPAN><STRONG>Microsoft.SemanticKernel.Connectors.AzureAISearch</STRONG><SPAN> </SPAN>e o<SPAN> </SPAN><STRONG>Microsoft.SemanticKernel.Plugins.Memory</STRONG></P> </BLOCKQUOTE> <P data-sourcepos="376:1-376:114">Mas também precisamos do plugin<SPAN> </SPAN><STRONG>TextMemoryPlugin</STRONG><SPAN> </SPAN>para acessar as memorias, mas ates de acessar vamos cria-las</P> <P data-sourcepos="378:1-378:41">Para isso vamos usar essa implementação:</P> <P data-sourcepos="378:1-378:41"> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> <DIV class="zeroclipboard-container position-absolute right-0 top-0"><pre class="lia-code-sample language-csharp"><code>var memory = memoryBuilder.Build(); const string MemoryCollectionName = "aboutMe"; await memory.SaveInformationAsync(MemoryCollectionName, id: "info1", text: "My name is Andrea"); await memory.SaveInformationAsync(MemoryCollectionName, id: "info2", text: "I currently work as a tourist operator"); await memory.SaveInformationAsync(MemoryCollectionName, id: "info3", text: "I currently live in Seattle and have been living there since 2005"); await memory.SaveInformationAsync(MemoryCollectionName, id: "info4", text: "I visited France and Italy five times since 2015"); await memory.SaveInformationAsync(MemoryCollectionName, id: "info5", text: "My family is from New York"); kernel.ImportPluginFromObject(new TextMemoryPlugin(memory));</code></pre></DIV> </DIV> <P data-sourcepos="392:1-392:62"> </P> <P data-sourcepos="392:1-392:62">Com isso sera gerado um<SPAN> </SPAN><STRONG>index</STRONG><SPAN> </SPAN>na IA Search chamado aboutme</P> <P data-sourcepos="392:1-392:62"> </P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="wdossantos_43-1729597236226.png"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image wdossantos_43-1729597236226.png"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3M2k4MUQ2MTE4MjU1MEE4MzQ2?image-dimensions=750x750&revision=5" alt="wdossantos_43-1729597236226.png" /></button></span></P> <P> </P> <P data-sourcepos="394:1-395:15"><SPAN> </SPAN>lista de indexs</P> <P data-sourcepos="394:1-395:15"> </P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="wdossantos_44-1729597266492.png"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image wdossantos_44-1729597266492.png"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3NGlGMEY3MEQ1N0Y4NkYxMDgz?image-dimensions=750x750&revision=5" alt="wdossantos_44-1729597266492.png" /></button></span></P> <P> </P> <P data-sourcepos="397:1-398:15"><SPAN> </SPAN>Search explorer</P> <P data-sourcepos="397:1-398:15"> </P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-medium" data-image-alt="wdossantos_45-1729597299034.png"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image wdossantos_45-1729597299034.png"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3NmlBRjk0RjAxNDA5MUYyMEI4?image-dimensions=450x450&revision=5" alt="wdossantos_45-1729597299034.png" /></button></span></P> <P data-sourcepos="400:1-401:15"><SPAN> </SPAN>Campos do index</P> <P data-sourcepos="400:1-401:15"> </P> <P data-sourcepos="403:1-403:121">esse index foi gerado usando esse Text Embedding <STRONG>text-embedding-ada-002</STRONG>, que é um tipo de algoritmo de vetorização</P> <P data-sourcepos="403:1-403:121"> </P> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="wdossantos_0-1730492183235.png"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image wdossantos_0-1730492183235.png"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU4OWlEMjI0OTg0QTNDRkNBQTI1?image-dimensions=750x750&revision=5" alt="wdossantos_0-1730492183235.png" /></button></span></P> <P> </P> <P> </P> <P data-sourcepos="405:1-406:31"><SPAN> </SPAN>Deployments Azure OpenAI Studio</P> <P data-sourcepos="408:1-408:24"> </P> <P data-sourcepos="408:1-408:24">com essa implementação temos a configuração da instancia do Azure openIA que irá fazer o embending das perguntas usando o modelo text-embedding-ada-002 :</P> <P> </P> <pre class="lia-code-sample language-csharp"><code> memoryBuilder.WithTextEmbeddingGeneration((loggerFactory, httpClient) => { return new AzureOpenAITextEmbeddingGenerationService( "text-embedding-ada-002", // Embedding generation service name "https://openiapriv02.openai.azure.com/", "...", httpClient: httpClient, loggerFactory: loggerFactory ); });</code></pre> <P> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> <DIV class="zeroclipboard-container position-absolute right-0 top-0"> </DIV> </DIV> <P data-sourcepos="417:1-417:193">por fim para fazer as perguntas ao chat e receber resposta que vem desse index como se fossem uma lembrança do chat, mas antes precisamos enriquecer o prompt com essas informações algo assim:</P> <P data-sourcepos="417:1-417:193"> </P> <P> </P> <pre class="lia-code-sample language-csharp"><code> const string skPrompt = @" ChatBot can have a conversation with you about any topic. It can give explicit instructions or say 'I don't know' if it does not have an answer. Information about me, from previous conversations: - {{$fact1}} {{recall $fact1}} - {{$fact2}} {{recall $fact2}} - {{$fact3}} {{recall $fact3}} - {{$fact4}} {{recall $fact4}} - {{$fact5}} {{recall $fact5}} Chat: {{$history}} User: {{$userInput}} ChatBot: ";</code></pre> <P> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> </DIV> <P data-sourcepos="437:1-437:50">esses valores serão passados pelo KernelArguments:</P> <P> </P> <pre class="lia-code-sample language-csharp"><code> arguments\["fact1"\] = "What my name?"; arguments\["fact2"\] = "where do I live?"; arguments\["fact3"\] = "where is my family from?"; arguments\["fact4"\] = "where have I travelled?"; arguments\["fact5"\] = "what do I do for work?";</code></pre> <P> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> </DIV> <P data-sourcepos="447:1-447:31">veja a implementação completa:</P> <P> </P> <pre class="lia-code-sample language-csharp"><code>var builder = Kernel.CreateBuilder(); builder.AddAzureOpenAIChatCompletion( "gpt-35-turbo", // Azure OpenAI Deployment Name "https://cog-nggxeq6fpjnxg.openai.azure.com/", // Azure OpenAI Endpoint "..."); // Azure OpenAI Key var kernel = builder.Build(); #pragma warning disable SKEXP0001, SKEXP0010, SKEXP0050, SKEXP0020 var memoryBuilder = new MemoryBuilder(); memoryBuilder.WithTextEmbeddingGeneration((loggerFactory, httpClient) => { return new AzureOpenAITextEmbeddingGenerationService( "text-embedding-ada-002", // Embedding generation service name "https://openiapriv02.openai.azure.com/", "...", httpClient: httpClient, loggerFactory: loggerFactory ); }); memoryBuilder.WithMemoryStore(new AzureAISearchMemoryStore( "https://gptkb-nggxeq6fpjnxg.search.windows.net", "...") ); var memory = memoryBuilder.Build(); const string MemoryCollectionName = "aboutMe"; await memory.SaveInformationAsync(MemoryCollectionName, id: "info1", text: "My name is Andrea"); await memory.SaveInformationAsync(MemoryCollectionName, id: "info2", text: "I currently work as a tourist operator"); await memory.SaveInformationAsync(MemoryCollectionName, id: "info3", text: "I currently live in Seattle and have been living there since 2005"); await memory.SaveInformationAsync(MemoryCollectionName, id: "info4", text: "I visited France and Italy five times since 2015"); await memory.SaveInformationAsync(MemoryCollectionName, id: "info5", text: "My family is from New York"); var questions = new[] { "what is my name?", "where do I live?", "where is my family from?", "where have I travelled?", "what do I do for work?", }; #pragma warning disable SKEXP0050 // TextMemoryPlugin provides the "recall" function kernel.ImportPluginFromObject(new TextMemoryPlugin(memory)); const string skPrompt = @" ChatBot can have a conversation with you about any topic. It can give explicit instructions or say 'I don't know' if it does not have an answer. Information about me, from previous conversations: - {{$fact1}} {{recall $fact1}} - {{$fact2}} {{recall $fact2}} - {{$fact3}} {{recall $fact3}} - {{$fact4}} {{recall $fact4}} - {{$fact5}} {{recall $fact5}} Chat: {{$history}} User: {{$userInput}} ChatBot: "; var chatFunction = kernel.CreateFunctionFromPrompt(skPrompt, new OpenAIPromptExecutionSettings { MaxTokens = 200, Temperature = 0.8 }); #pragma warning disable SKEXP0050 var arguments = new KernelArguments(); arguments["fact1"] = "What my name?"; arguments["fact2"] = "where do I live?"; arguments["fact3"] = "where is my family from?"; arguments["fact4"] = "where have I travelled?"; arguments["fact5"] = "what do I do for work?"; arguments[TextMemoryPlugin.CollectionParam] = MemoryCollectionName; arguments[TextMemoryPlugin.LimitParam] = "2"; arguments[TextMemoryPlugin.RelevanceParam] = "0.8"; var history = ""; arguments["history"] = history; Func<string, Task> Chat = async (string input) => { // Save new message in the kernel arguments arguments["userInput"] = input; // Process the user message and get an answer var answer = await chatFunction.InvokeAsync(kernel, arguments); // Append the new interaction to the chat history var result = $"\nUser: {input}\nChatBot: {answer}\n"; history += result; arguments["history"] = history; // Show the bot response Console.WriteLine(result); }; while (true) { Console.WriteLine("Digite uma Pergunta"); var question = Console.ReadLine(); if (question != null) { await Chat(question); } }</code></pre> <P> </P> <DIV class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto"> </DIV> <P><span class="lia-media-object lia-media-is-inline lia-media-size-large" data-image-alt="wdossantos_47-1729597372637.png"><button class="lia-media-unstyled-btn" type="button" aria-haspopup="true" aria-label="Enlarge Image wdossantos_47-1729597372637.png"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3OWlGODdGNjE4OUNEOUIxQjc3?image-dimensions=750x750&revision=5" alt="wdossantos_47-1729597372637.png" /></button></span></P> <P data-sourcepos="566:1-567:63">console e execução respondendo a pergunta “What my name”?</P> <P data-sourcepos="566:1-567:63"> </P> <P data-sourcepos="569:1-569:18">Pacotes utilizados:</P> <P data-sourcepos="569:1-569:18"> </P> <DIV class="highlight highlight-text-xml notranslate position-relative overflow-auto" dir="auto"> <PRE><PackageReference Include="Microsoft.SemanticKernel" Version="1.26.0" /><BR /><PackageReference Include="Microsoft.SemanticKernel.Connectors.AzureAISearch" Version="1.6.3-alpha" /><BR /><PackageReference Include="Microsoft.SemanticKernel.Plugins.Memory" Version="1.6.3-alpha" /><BR /><PackageReference Include="System.Linq.Async" Version="6.0.1" /></PRE> <DIV class="zeroclipboard-container position-absolute right-0 top-0"> </DIV> </DIV> <DIV class="markdown-heading" dir="auto"> <H2 class="heading-element" dir="auto" data-sourcepos="577:1-577:15" id="community-4276402-toc-hId--973471137">Referências</H2> <A id="user-content-referências" class="anchor" href="https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#refer%C3%AAncias" target="_blank" rel="noopener noreferrer" aria-label="Permalink: Referências"></A></DIV> <OL dir="auto" data-sourcepos="579:1-590:196"> <LI data-sourcepos="579:1-579:88"><A href="https://github.com/Azure-Samples/azure-search-openai-demo" target="_blank" rel="noopener noreferrer">azure-search-openai-demo</A></LI> <LI data-sourcepos="580:1-580:102"><A href="https://github.com/Azure-Samples/azure-search-openai-demo-csharp" target="_blank" rel="noopener noreferrer">azure-search-openai-demo-csharp</A></LI> <LI data-sourcepos="581:1-581:178"><A href="https://github.com/Azure/Vector-Search-AI-Assistant/tree/cognitive-search-vector?tab=readme-ov-file" target="_blank" rel="noopener noreferrer">Azure/Vector-Search-AI-Assistant at cognitive-search-vector (github.com)</A></LI> <LI data-sourcepos="582:1-582:152"><A href="https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/troubleshoot?tabs=Browser" target="_blank" rel="noopener noreferrer">Troubleshoot Azure Developer CLI | Microsoft Learn</A></LI> <LI data-sourcepos="583:1-583:247"><A href="https://learn.microsoft.com/pt-br/azure/ai-services/openai/use-your-data-quickstart?tabs=command-line%2Cpython-new&pivots=programming-language-csharp" target="_blank" rel="noopener noreferrer">Usar seus próprios dados com o Serviço OpenAI do Azure — Azure OpenAI | Microsoft Learn</A></LI> <LI data-sourcepos="584:1-584:132"><A href="https://github.com/Azure-Samples/azure-search-openai-demo/blob/main/docs/data_ingestion.md" target="_blank" rel="noopener noreferrer">Indexing documents for the Chat App</A></LI> <LI data-sourcepos="585:1-585:90"><A href="https://github.com/FreddyAyala/AzureAIServicesLandingZone" target="_blank" rel="noopener noreferrer">AzureAIServicesLandingZone</A></LI> <LI data-sourcepos="586:1-586:121"><A href="https://learn.microsoft.com/en-us/semantic-kernel/overview/" target="_blank" rel="noopener noreferrer">Create AI agents with Semantic Kernel | Microsoft Learn</A></LI> <LI data-sourcepos="587:1-587:154"><A href="https://learn.microsoft.com/en-us/semantic-kernel/prompts/prompt-template-syntax" target="_blank" rel="noopener noreferrer">Using the out-of-the-box prompt template language | Microsoft Learn</A></LI> <LI data-sourcepos="588:1-588:160"><A href="https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/model-versions" target="_blank" rel="noopener noreferrer">Azure OpenAI Service model versions — Azure OpenAI | Microsoft Learn</A></LI> <LI data-sourcepos="589:1-589:214"><A href="https://devblogs.microsoft.com/semantic-kernel/getting-started-with-semantic-kernel-for-langchain-users/" target="_blank" rel="noopener noreferrer">GUEST POST: Getting Started with Semantic Kernel for LangChain users | Semantic Kernel (microsoft.com)</A></LI> <LI data-sourcepos="590:1-590:196"><A href="https://devblogs.microsoft.com/semantic-kernel/introducing-api-manifest-plugins-for-semantic-kernel-2/" target="_blank" rel="noopener noreferrer">Introducing API Manifest Plugins for Semantic Kernel | Semantic Kernel (microsoft.com)</A></LI> </OL></div><div class="styles_d-flex__7__Y_ styles_align-items-center__OKdH0"><div class="styles_lia-g-text-xs__xMXX5 styles_lia-g-divider__X68T2 MessageRevision_lia-revision__75lOM"><div class="styles_d-flex__7__Y_ styles_align-items-center__OKdH0"><span data-testid="MessageTimestamp" class="styles_text-body__F7QRV MessageRevision_lia-publish-date__sB2l6">Updated <span title="November 1, 2024 at 8:21 PM">Nov 01, 2024</span></span></div><span data-testid="MessageVersion" class="MessageRevision_lia-revision-text__FVsnQ styles_rounded-sm__gAfAD">Version 1.0</span></div></div><div class="MessageViewStandard_lia-footer__H7yx3 MessageViewStandard_lia-footer-divider__bGc9s"><div class="MessageViewStandard_lia-footer-left__uxaFW MessageViewStandard_lia-has-tags__rcZNi"></div><div class="MessageViewStandard_lia-footer-right__kqY6e"><div class="styles_d-flex__7__Y_ styles_align-items-center__OKdH0"><button data-testid="ReplyButton" aria-label="Comment" type="button" class="styles_lia-g-action-btn__70w24 MessageReplyButton_lia-reply-btn__2ZU73 styles_btn__1HFm0 styles_btn-link__Qn59s"><svg class="styles_lia-g-icon-size-16__V9Va_ Icon_lia-size-16__D8_m2 Icon_lia-icon__on1Gb" data-testid="Icon" style="--lia-local-icon-color:var(--lia-bs-body-color);--lia-local-icon-color-h:var(--lia-bs-body-color-h);--lia-local-icon-color-s:var(--lia-bs-body-color-s);--lia-local-icon-color-l:var(--lia-bs-body-color-l)" aria-hidden="true"><title>Comment</title><use href="/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/comment.svg#comment"></use></svg><span class="MessageReplyButton_lia-reply-text__7NgWG">Comment</span></button></div></div></div><article class="MessageAuthorBio_lia-footer-wrapper__c0isy" data-testid="MessageAuthorBio"><div class="styles_d-flex__7__Y_ styles_align-items-center__OKdH0"><a data-hovercard-trigger="true" data-testid="userLink" class="styles_align-self-start__a5Ju_" aria-label="View Profile: wdossantos" aria-describedby="UserHoverCard-1171673" target="_self" href="/users/wdossantos/1171673"><span class="UserAvatar_lia-avatar__HFfcv styles_lia-g-icon-size-50__HExtr" data-testid="userAvatar"><img src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0xMTcxNjczLTMyNTM2MGkwNjkyMDE1OTQ0RkQ5MTM0?image-dimensions=50x50" alt="wdossantos's avatar" class="UserAvatar_lia-avatar-img__CUPwZ" aria-hidden="false"/></span></a><div class="MessageAuthorBio_lia-footer-details-wrapper__wmghu"><div class="MessageAuthorBio_lia-footer-details__A_A8m"><div class="styles_d-flex__7__Y_ styles_align-items-center__OKdH0"><a data-hovercard-trigger="true" data-testid="userLink" class="styles_lia-g-divider__X68T2 MessageAuthorBio_lia-author-login__HeCwv" aria-label="View Profile: wdossantos" aria-describedby="UserHoverCard-1171673" target="_self" href="/users/wdossantos/1171673">wdossantos</a><div class="MessageAuthorBio_lia-user-rank__Tdh52" data-testid="userRank"><div class="UserRankLabel_lia-rank__CqPss"><img class="UserRankLabel_lia-rank-icon__g_uVM" src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/cmstNC05WEo0blc?image-dimensions=100x16&constrain-image=true" alt="Icon for Microsoft rank"/><span style="border-color:#333333;color:#333333" class="UserRankLabel_lia-is-boxed__Ykpfe UserRankLabel_lia-rank-label__epEUI UserRankLabel_lia-is-outline__q_ZVs"><span class="UserRankLabel_text-break__RX8Tt styles_lia-g-clamp__dg3Sg">Microsoft</span></span></div></div></div><div class="MessageAuthorBio_lia-footer-description__6mbqx" data-testid="UserRegistrationDate">Joined <!-- -->September 30, 2021</div></div><div class="MessageAuthorBio_lia-action__6MD3u styles_d-none__wDjqp"><button title="Send Message" data-testid="SendMessage-Button" aria-label="Send Message" tabindex="0" type="button" class="styles_btn__1HFm0 styles_btn-secondary__Ust3k">Send Message</button></div><div class="MessageAuthorBio_lia-action__6MD3u"><a data-testid="userLink" class="styles_btn__1HFm0 styles_btn-secondary__Ust3k" aria-label="View Profile: wdossantos" target="_self" href="/users/wdossantos/1171673">View Profile</a></div></div></div><div class="styles_d-flex__7__Y_ styles_align-items-center__OKdH0"><a data-hovercard-trigger="true" data-testid="nodeLink" target="_self" class="styles_align-self-start__a5Ju_" aria-label="Go to Desenvolvedores BR board" href="/category/regionalblogs/blog/desenvolvedoresbr"><div class="styles_lia-g-icon-size-50__HExtr Icon_lia-size-50__PduO6 Icon_lia-frame__Que5I" style="--lia-local-icon-color:var(--lia-blog-color);--lia-local-icon-color-h:var(--lia-blog-color-h);--lia-local-icon-color-s:var(--lia-blog-color-s);--lia-local-icon-color-l:var(--lia-blog-color-l)"><svg class="Icon_lia-icon__on1Gb" data-testid="Icon" aria-label="Content Type Blog icon"><use href="/static/graphics/processed/w78VdNAhVv9lCpAB5qCxSL66EsM/content-blog.svg#content-blog"></use></svg></div></a><div class="MessageAuthorBio_lia-footer-details-wrapper__wmghu"><div class="MessageAuthorBio_lia-footer-details__A_A8m"><a data-hovercard-trigger="true" data-testid="nodeLink" target="_self" class="MessageAuthorBio_lia-node-title__XQdEJ" aria-label="Place Desenvolvedores BR" href="/category/regionalblogs/blog/desenvolvedoresbr"><span class="styles_lia-g-mb-0__AIhaX NodeTitle_lia-title-and-icon__wEuTM" data-testid="NodeTitle">Desenvolvedores BR </span></a><div class="MessageAuthorBio_lia-footer-description__6mbqx">Follow this blog board to get notified when there's new activity</div></div><div class="MessageAuthorBio_lia-action__6MD3u"></div></div></div></article></div></section></article></div></div><div></div></div></div></div></div></div></section><section class="QuiltSection_lia-section-spacing__WK9AB" data-testid="QuiltSection-section-1729184836777"><div data-testid="ThemedContainer" class="ThemedContainer_lia-fixed-container__MPYgN styles_container__6wTQq"><div class="styles_row__sjnST"><div style="--lia-content-item-border:none" class="QuiltSection_lia-column__iNmDj styles_col-lg-8__V2wNr"></div><div style="--lia-content-item-border:1px solid hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)" class="QuiltSection_lia-column__iNmDj styles_col-lg-4__6NfeT"><div class="styles_lia-g-section-widget__aHMgk"><article class="CustomComponent_lia-article__sQ7z4 CustomComponent_lia-with-background__LfN1g" data-testid="CustomComponent"><header class="styles_lia-g-mb-25__5lrHe"><h3 class="styles_h5__q_74t styles_mb-0__dO7t3">Share</h3></header><section><div class="custom_widget_Social_Sharing_social-share_c7xxz_1"> <ul class="custom_widget_Social_Sharing_sharing-options_c7xxz_2"> <li> <a class="custom_widget_Social_Sharing_social-share-linkedin_c7xxz_18 social-link" href="https://www.linkedin.com/sharing/share-offsite/?url=page.url" target="_blank"> <img alt="Share to LinkedIn" src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/components/Social_Sharing/assets/social-share-linkedin.svg"/> </a> </li> <li> <a class="custom_widget_Social_Sharing_social-share-facebook_c7xxz_23 social-link" href="https://www.facebook.com/share.php?u=page.url&t=page-name" target="_blank"> <img alt="Share to Facebook" src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/components/Social_Sharing/assets/social-share-facebook.svg"/> </a> </li> <li> <a class="custom_widget_Social_Sharing_social-share-x_c7xxz_28 social-link" href="https://twitter.com/share?text=page-name&url=page.url" target="_blank"> <img alt="Share to X" src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/components/Social_Sharing/assets/social-share-x.svg"/> </a> </li> <li> <a class="custom_widget_Social_Sharing_social-share-reddit_c7xxz_38 social-link" href="https://www.reddit.com/submit?url=page.url&title=page-name" target="_blank"> <img alt="Share to Reddit" src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/components/Social_Sharing/assets/social-share-reddit.svg"/> </a> </li> <li> <a class="custom_widget_Social_Sharing_social-share-email_c7xxz_43 social-link" href="mailto:?body=page.url" target="_blank"> <img alt="Share to Email" src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/components/Social_Sharing/assets/social-share-email.svg"/> </a> </li> <li class="custom_widget_Social_Sharing_social-share-rss_c7xxz_33" id="RSS"> <a class="custom_widget_Social_Sharing_social-share-rss_c7xxz_33" href="/t5/s/gxcuf89792/rss/board?board.id=DesenvolvedoresBR" target="_blank"> <img alt="Subscribe to RSS" src="https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/components/Social_Sharing/assets/rss.svg"/> </a> </li> </ul> </div></section></article></div></div></div></div></section></main><footer data-testid="QuiltWrapperSection"><div class="CustomComponent_lia-wrapper__7IqeO" style="--lia-local-bg-color:transparent"><article class="CustomComponent_lia-article__sQ7z4" data-testid="CustomComponent"><section><footer id="uhf-footer" class="custom_widget_MicrosoftFooter_c-uhff_f95yq_12 custom_widget_MicrosoftFooter_context-uhf_f95yq_1" data-uhf-mscc-rq="false" data-footer-footprint="/MSTechnical/MSTechnicalFooter, fromService: True" data-m="{"cN":"Uhf footer_cont","cT":"Container","id":"c1m1r1a2","sN":1,"aN":"m1r1a2"}"> <nav class="custom_widget_MicrosoftFooter_c-uhff-nav_f95yq_35" aria-label="Footer Resource links" data-m="{"cN":"Footer nav_cont","cT":"Container","id":"c1c1m1r1a2","sN":1,"aN":"c1m1r1a2"}"> <div class="custom_widget_MicrosoftFooter_c-uhff-nav-row_f95yq_57"> <div class="custom_widget_MicrosoftFooter_c-uhff-nav-group_f95yq_58" data-m="{"cN":"footerNavColumn1_cont","cT":"Container","id":"c1c1c1m1r1a2","sN":1,"aN":"c1c1m1r1a2"}"> <div class="custom_widget_MicrosoftFooter_c-heading-4_f95yq_49" role="heading" aria-level="2">What's new</div> <ul class="custom_widget_MicrosoftFooter_c-list_f95yq_78 custom_widget_MicrosoftFooter_f-bare_f95yq_78"> <li> <a aria-label="Surface Pro 9 What's new" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/d/surface-pro-9/93VKD8NP4FVK" data-m="{"cN":"Footer_WhatsNew_NewSurfacePro8_nav","id":"n1c1c1c1m1r1a2","sN":1,"aN":"c1c1c1m1r1a2"}">Surface Pro 9</a> </li> <li> <a aria-label="Surface Laptop 5 What's new" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/d/surface-laptop-5/8XN49V61S1BN" data-m="{"cN":"Footer_WhatsNew_SurfaceLaptop2_nav","id":"n2c1c1c1m1r1a2","sN":2,"aN":"c1c1c1m1r1a2"}">Surface Laptop 5</a> </li> <li> <a aria-label="Surface Studio 2+ What's new" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/d/surface-studio-2plus/8VLFQC3597K4" data-m="{"cN":"Footer_WhatsNew_SurfaceStudio_nav","id":"n3c1c1c1m1r1a2","sN":3,"aN":"c1c1c1m1r1a2"}">Surface Studio 2+</a> </li> <li> <a aria-label="Surface Laptop Go 2 What's new" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/d/surface-laptop-go-2/8PGLPV76MJHN" data-m="{"cN":"Footer_WhatsNew_SurfaceLaptopGo_nav","id":"n4c1c1c1m1r1a2","sN":4,"aN":"c1c1c1m1r1a2"}">Surface Laptop Go 2</a> </li> <li> <a aria-label="Surface Laptop Studio What's new" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/d/surface-laptop-studio/8SRDF62SWKPF" data-m="{"cN":"Footer_WhatsNew_SurfaceLaptopStudio_nav","id":"n5c1c1c1m1r1a2","sN":5,"aN":"c1c1c1m1r1a2"}">Surface Laptop Studio</a> </li> <li> <a aria-label="Surface Duo 2 What's new" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/d/surface-duo-2/9408KGXP4XJL" data-m="{"cN":"Footer_WhatsNew_SurfaceDuo2_nav","id":"n6c1c1c1m1r1a2","sN":6,"aN":"c1c1c1m1r1a2"}">Surface Duo 2</a> </li> <li> <a aria-label="Microsoft 365 What's new" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/microsoft-365" data-m="{"cN":"Whatsnew_Microsoft365_nav","id":"n7c1c1c1m1r1a2","sN":7,"aN":"c1c1c1m1r1a2"}">Microsoft 365</a> </li> <li> <a aria-label="Windows 11 apps What's new" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/windows/windows-11-apps" data-m="{"cN":"Footer_WhatsNew_Windows_11_apps_nav","id":"n8c1c1c1m1r1a2","sN":8,"aN":"c1c1c1m1r1a2"}">Windows 11 apps</a> </li> </ul> </div> <div class="custom_widget_MicrosoftFooter_c-uhff-nav-group_f95yq_58" data-m="{"cN":"footerNavColumn2_cont","cT":"Container","id":"c2c1c1m1r1a2","sN":2,"aN":"c1c1m1r1a2"}"> <div class="custom_widget_MicrosoftFooter_c-heading-4_f95yq_49" role="heading" aria-level="2">Microsoft Store</div> <ul class="custom_widget_MicrosoftFooter_c-list_f95yq_78 custom_widget_MicrosoftFooter_f-bare_f95yq_78"> <li> <a aria-label="Account profile Microsoft Store" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://account.microsoft.com/" data-m="{"cN":"Footer_StoreandSupport_AccountProfile_nav","id":"n1c2c1c1m1r1a2","sN":1,"aN":"c2c1c1m1r1a2"}">Account profile</a> </li> <li> <a aria-label="Download Center Microsoft Store" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/download" data-m="{"cN":"Footer_StoreandSupport_DownloadCenter_nav","id":"n2c2c1c1m1r1a2","sN":2,"aN":"c2c1c1m1r1a2"}">Download Center</a> </li> <li> <a aria-label="Microsoft Store support Microsoft Store" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://go.microsoft.com/fwlink/?linkid=2139749" data-m="{"cN":"Footer_StoreandSupport_SalesAndSupport_nav","id":"n3c2c1c1m1r1a2","sN":3,"aN":"c2c1c1m1r1a2"}">Microsoft Store support</a> </li> <li> <a aria-label="Returns Microsoft Store" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://go.microsoft.com/fwlink/p/?LinkID=824764&clcid=0x409" data-m="{"cN":"MicrosoftStore_ExtendedHolidayReturns_nav","id":"n4c2c1c1m1r1a2","sN":4,"aN":"c2c1c1m1r1a2"}">Returns</a> </li> <li> <a aria-label="Order tracking Microsoft Store" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://account.microsoft.com/orders" data-m="{"cN":"Footer_StoreandSupport_OrderTracking_nav","id":"n5c2c1c1m1r1a2","sN":5,"aN":"c2c1c1m1r1a2"}">Order tracking</a> </li> <li> <a aria-label="Virtual workshops and training Microsoft Store" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/store/workshops-training-and-events?icid=vl_uf_932020" data-m="{"cN":"Footer_StoreandSupport_StoreLocations_nav","id":"n6c2c1c1m1r1a2","sN":6,"aN":"c2c1c1m1r1a2"}">Virtual workshops and training</a> </li> <li> <a aria-label="Microsoft Store Promise Microsoft Store" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/store/b/why-microsoft-store?icid=footer_why-msft-store_7102020" data-m="{"cN":"Footer_StoreandSupport_MicrosoftPromise_nav","id":"n7c2c1c1m1r1a2","sN":7,"aN":"c2c1c1m1r1a2"}">Microsoft Store Promise</a> </li> <li> <a aria-label="Flexible Payments Microsoft Store" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/store/b/payment-financing-options?icid=footer_financing_vcc" data-m="{"cN":"Footer_StoreandSupport_Financing_nav","id":"n8c2c1c1m1r1a2","sN":8,"aN":"c2c1c1m1r1a2"}">Flexible Payments</a> </li> </ul> </div> <div class="custom_widget_MicrosoftFooter_c-uhff-nav-group_f95yq_58" data-m="{"cN":"footerNavColumn3_cont","cT":"Container","id":"c3c1c1m1r1a2","sN":3,"aN":"c1c1m1r1a2"}"> <div class="custom_widget_MicrosoftFooter_c-heading-4_f95yq_49" role="heading" aria-level="2">Education</div> <ul class="custom_widget_MicrosoftFooter_c-list_f95yq_78 custom_widget_MicrosoftFooter_f-bare_f95yq_78"> <li> <a aria-label="Microsoft in education Education" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/education" data-m="{"cN":"Footer_Education_MicrosoftInEducation_nav","id":"n1c3c1c1m1r1a2","sN":1,"aN":"c3c1c1m1r1a2"}">Microsoft in education</a> </li> <li> <a aria-label="Devices for education Education" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/education/devices/overview" data-m="{"cN":"Footer_Education_DevicesforEducation_nav","id":"n2c3c1c1m1r1a2","sN":2,"aN":"c3c1c1m1r1a2"}">Devices for education</a> </li> <li> <a aria-label="Microsoft Teams for Education Education" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/education/products/teams" data-m="{"cN":"Footer_Education_MicrosoftTeamsforEducation_nav","id":"n3c3c1c1m1r1a2","sN":3,"aN":"c3c1c1m1r1a2"}">Microsoft Teams for Education</a> </li> <li> <a aria-label="Microsoft 365 Education Education" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/education/buy-license/microsoft365" data-m="{"cN":"Footer_Education_Microsoft365Education_nav","id":"n4c3c1c1m1r1a2","sN":4,"aN":"c3c1c1m1r1a2"}">Microsoft 365 Education</a> </li> <li> <a aria-label="Education consultation appointment Education" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/store/b/business-consultation?tab=educationconsultation&icid=CNavfooter_educationconsultation" data-m="{"cN":"Footer_Education_ConsultationAppointment_nav","id":"n5c3c1c1m1r1a2","sN":5,"aN":"c3c1c1m1r1a2"}">Education consultation appointment</a> </li> <li> <a aria-label="Educator training and development Education" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://education.microsoft.com/" data-m="{"cN":"Footer_Education_EducatorTrainingDevelopment_nav","id":"n6c3c1c1m1r1a2","sN":6,"aN":"c3c1c1m1r1a2"}">Educator training and development</a> </li> <li> <a aria-label="Deals for students and parents Education" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/store/b/education" data-m="{"cN":"Footer_Education_DealsForStudentsandParents_nav","id":"n7c3c1c1m1r1a2","sN":7,"aN":"c3c1c1m1r1a2"}">Deals for students and parents</a> </li> <li> <a aria-label="Azure for students Education" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://azure.microsoft.com/en-us/free/students/" data-m="{"cN":"Footer_Azureforstudents_nav","id":"n8c3c1c1m1r1a2","sN":8,"aN":"c3c1c1m1r1a2"}">Azure for students</a> </li> </ul> </div> </div> <div class="custom_widget_MicrosoftFooter_c-uhff-nav-row_f95yq_57"> <div class="custom_widget_MicrosoftFooter_c-uhff-nav-group_f95yq_58" data-m="{"cN":"footerNavColumn4_cont","cT":"Container","id":"c4c1c1m1r1a2","sN":4,"aN":"c1c1m1r1a2"}"> <div class="custom_widget_MicrosoftFooter_c-heading-4_f95yq_49" role="heading" aria-level="2">Business</div> <ul class="custom_widget_MicrosoftFooter_c-list_f95yq_78 custom_widget_MicrosoftFooter_f-bare_f95yq_78"> <li> <a aria-label="Microsoft Cloud Business" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/microsoft-cloud" data-m="{"cN":"Footer_Business_Microsoft_Cloud_nav","id":"n1c4c1c1m1r1a2","sN":1,"aN":"c4c1c1m1r1a2"}">Microsoft Cloud</a> </li> <li> <a aria-label="Microsoft Security Business" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/security" data-m="{"cN":"Footer_Business_Microsoft Security_nav","id":"n2c4c1c1m1r1a2","sN":2,"aN":"c4c1c1m1r1a2"}">Microsoft Security</a> </li> <li> <a aria-label="Dynamics 365 Business" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://dynamics.microsoft.com/en-us/" data-m="{"cN":"Footer_Business_MicrosoftDynamics365_nav","id":"n3c4c1c1m1r1a2","sN":3,"aN":"c4c1c1m1r1a2"}">Dynamics 365</a> </li> <li> <a aria-label="Microsoft 365 Business" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/microsoft-365/business/" data-m="{"cN":"More_Business_Microsoft365_nav","id":"n4c4c1c1m1r1a2","sN":4,"aN":"c4c1c1m1r1a2"}">Microsoft 365</a> </li> <li> <a aria-label="Microsoft Power Platform Business" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://powerplatform.microsoft.com/en-us/" data-m="{"cN":"Footer_DeveloperAndIT_Power Platform_nav","id":"n5c4c1c1m1r1a2","sN":5,"aN":"c4c1c1m1r1a2"}">Microsoft Power Platform</a> </li> <li> <a aria-label="Microsoft Teams Business" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/microsoft-teams/group-chat-software" data-m="{"cN":"Footer_Business_Microsoft365_nav","id":"n6c4c1c1m1r1a2","sN":6,"aN":"c4c1c1m1r1a2"}">Microsoft Teams</a> </li> <li> <a aria-label="Microsoft Industry Business" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/industry" data-m="{"cN":"Footer_Business_MicrosoftIndustry_nav","id":"n7c4c1c1m1r1a2","sN":7,"aN":"c4c1c1m1r1a2"}">Microsoft Industry</a> </li> <li> <a aria-label="Small Business Business" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/store/b/business?icid=CNavBusinessStore" data-m="{"cN":"Footer_Business-SmallBusiness_nav","id":"n8c4c1c1m1r1a2","sN":8,"aN":"c4c1c1m1r1a2"}">Small Business</a> </li> </ul> </div> <div class="custom_widget_MicrosoftFooter_c-uhff-nav-group_f95yq_58" data-m="{"cN":"footerNavColumn5_cont","cT":"Container","id":"c5c1c1m1r1a2","sN":5,"aN":"c1c1m1r1a2"}"> <div class="custom_widget_MicrosoftFooter_c-heading-4_f95yq_49" role="heading" aria-level="2">Developer & IT</div> <ul class="custom_widget_MicrosoftFooter_c-list_f95yq_78 custom_widget_MicrosoftFooter_f-bare_f95yq_78"> <li> <a aria-label="Azure Developer & IT" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://azure.microsoft.com/en-us/" data-m="{"cN":"Footer_Enterprise_MicrosoftAzure_nav","id":"n1c5c1c1m1r1a2","sN":1,"aN":"c5c1c1m1r1a2"}">Azure</a> </li> <li> <a aria-label="Developer Center Developer & IT" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://developer.microsoft.com/en-us/" data-m="{"cN":"Footer_Developer_DeveloperCenter_nav","id":"n2c5c1c1m1r1a2","sN":2,"aN":"c5c1c1m1r1a2"}">Developer Center</a> </li> <li> <a aria-label="Documentation Developer & IT" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://learn.microsoft.com/docs/" data-m="{"cN":"Footer_DeveloperAndIT_Documentation_nav","id":"n3c5c1c1m1r1a2","sN":3,"aN":"c5c1c1m1r1a2"}">Documentation</a> </li> <li> <a aria-label="Microsoft Learn Developer & IT" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://learn.microsoft.com/" data-m="{"cN":"Footer_DeveloperAndIT_MicrosoftLearn_nav","id":"n4c5c1c1m1r1a2","sN":4,"aN":"c5c1c1m1r1a2"}">Microsoft Learn</a> </li> <li> <a aria-label="Microsoft Tech Community Developer & IT" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://techcommunity.microsoft.com/" data-m="{"cN":"Footer_DeveloperAndIT_MicrosoftTechCommunity_nav","id":"n5c5c1c1m1r1a2","sN":5,"aN":"c5c1c1m1r1a2"}">Microsoft Tech Community</a> </li> <li> <a aria-label="Azure Marketplace Developer & IT" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://azuremarketplace.microsoft.com/en-us/" data-m="{"cN":"More_DeveloperAndIT_AzureMarketplace_nav","id":"n6c5c1c1m1r1a2","sN":6,"aN":"c5c1c1m1r1a2"}">Azure Marketplace</a> </li> <li> <a aria-label="AppSource Developer & IT" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://appsource.microsoft.com/en-us/" data-m="{"cN":"Footer_DeveloperAndIT_AppSource_nav","id":"n7c5c1c1m1r1a2","sN":7,"aN":"c5c1c1m1r1a2"}">AppSource</a> </li> <li> <a aria-label="Visual Studio Developer & IT" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://visualstudio.microsoft.com/" data-m="{"cN":"Footer_Developer_MicrosoftVisualStudio_nav","id":"n8c5c1c1m1r1a2","sN":8,"aN":"c5c1c1m1r1a2"}">Visual Studio</a> </li> </ul> </div> <div class="custom_widget_MicrosoftFooter_c-uhff-nav-group_f95yq_58" data-m="{"cN":"footerNavColumn6_cont","cT":"Container","id":"c6c1c1m1r1a2","sN":6,"aN":"c1c1m1r1a2"}"> <div class="custom_widget_MicrosoftFooter_c-heading-4_f95yq_49" role="heading" aria-level="2">Company</div> <ul class="custom_widget_MicrosoftFooter_c-list_f95yq_78 custom_widget_MicrosoftFooter_f-bare_f95yq_78"> <li> <a aria-label="Careers Company" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://careers.microsoft.com/" data-m="{"cN":"Footer_Company_Careers_nav","id":"n1c6c1c1m1r1a2","sN":1,"aN":"c6c1c1m1r1a2"}">Careers</a> </li> <li> <a aria-label="About Microsoft Company" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/about" data-m="{"cN":"Footer_Company_AboutMicrosoft_nav","id":"n2c6c1c1m1r1a2","sN":2,"aN":"c6c1c1m1r1a2"}">About Microsoft</a> </li> <li> <a aria-label="Company news Company" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://news.microsoft.com/" data-m="{"cN":"Footer_Company_CompanyNews_nav","id":"n3c6c1c1m1r1a2","sN":3,"aN":"c6c1c1m1r1a2"}">Company news</a> </li> <li> <a aria-label="Privacy at Microsoft Company" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://privacy.microsoft.com/en-us" data-m="{"cN":"Footer_Company_PrivacyAtMicrosoft_nav","id":"n4c6c1c1m1r1a2","sN":4,"aN":"c6c1c1m1r1a2"}">Privacy at Microsoft</a> </li> <li> <a aria-label="Investors Company" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/investor/default.aspx" data-m="{"cN":"Footer_Company_Investors_nav","id":"n5c6c1c1m1r1a2","sN":5,"aN":"c6c1c1m1r1a2"}">Investors</a> </li> <li> <a aria-label="Diversity and inclusion Company" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/diversity/" data-m="{"cN":"Footer_Company_DiversityAndInclusion_nav","id":"n6c6c1c1m1r1a2","sN":6,"aN":"c6c1c1m1r1a2"}">Diversity and inclusion</a> </li> <li> <a aria-label="Accessibility Company" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/accessibility" data-m="{"cN":"Footer_Company_Accessibility_nav","id":"n7c6c1c1m1r1a2","sN":7,"aN":"c6c1c1m1r1a2"}">Accessibility</a> </li> <li> <a aria-label="Sustainability Company" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/sustainability/" data-m="{"cN":"Footer_Company_Sustainability_nav","id":"n8c6c1c1m1r1a2","sN":8,"aN":"c6c1c1m1r1a2"}">Sustainability</a> </li> </ul> </div> </div> </nav> <div class="custom_widget_MicrosoftFooter_c-uhff-base_f95yq_94"> <a data-m="{"id":"n8c1c1m1r1a2","sN":8,"aN":"c1c1m1r1a2"}" href="https://aka.ms/yourcaliforniaprivacychoices" class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12 custom_widget_MicrosoftFooter_c-uhff-ccpa_f95yq_107"> <svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 14" xml:space="preserve" height="16" width="43"> <title>California Consumer Privacy Act (CCPA) Opt-Out Icon</title> <path d="M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#fff"></path> <path d="M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z" style="fill-rule:evenodd;clip-rule:evenodd;fill:#06f"></path> <path d="M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z" style="fill:#fff"></path> <path d="M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z" style="fill:#06f"></path> </svg> <span>Your Privacy Choices</span> </a> <nav aria-label="Microsoft corporate links"> <ul class="custom_widget_MicrosoftFooter_c-list_f95yq_78 custom_widget_MicrosoftFooter_f-bare_f95yq_78" data-m="{"cN":"Corp links_cont","cT":"Container","id":"c8c1c1m1r1a2","sN":8,"aN":"c1c1m1r1a2"}"> <li id="c-uhff-footer_sitemap"> <a class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://www.microsoft.com/en-us/sitemap1.aspx" data-mscc-ic="false" data-m="{"cN":"Footer_Sitemap_nav","id":"n1c8c1c1m1r1a2","sN":1,"aN":"c8c1c1m1r1a2"}">Sitemap</a> </li> <li id="c-uhff-footer_contactus"> <a class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://support.microsoft.com/contactus" data-mscc-ic="false" data-m="{"cN":"Footer_ContactUs_nav","id":"n2c8c1c1m1r1a2","sN":2,"aN":"c8c1c1m1r1a2"}">Contact Microsoft</a> </li> <li id="c-uhff-footer_privacyandcookies"> <a class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://go.microsoft.com/fwlink/?LinkId=521839" data-mscc-ic="false" data-m="{"cN":"Footer_PrivacyandCookies_nav","id":"n3c8c1c1m1r1a2","sN":3,"aN":"c8c1c1m1r1a2"}">Privacy </a> </li> <li class="x-hidden" id="c-uhff-footer_managecookies"> <a class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="javascript:manageConsent();" data-mscc-ic="false" data-m="{"cN":"Footer_ManageCookies_nav","id":"n4c8c1c1m1r1a2","sN":4,"aN":"c8c1c1m1r1a2"}">Manage cookies</a> </li> <li id="c-uhff-footer_termsofuse"> <a class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://go.microsoft.com/fwlink/?LinkID=206977" data-mscc-ic="false" data-m="{"cN":"Footer_TermsOfUse_nav","id":"n5c8c1c1m1r1a2","sN":5,"aN":"c8c1c1m1r1a2"}">Terms of use</a> </li> <li id="c-uhff-footer_trademarks"> <a class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://go.microsoft.com/fwlink/?linkid=2196228" data-mscc-ic="false" data-m="{"cN":"Footer_Trademarks_nav","id":"n6c8c1c1m1r1a2","sN":6,"aN":"c8c1c1m1r1a2"}">Trademarks</a> </li> <li id="c-uhff-footer_safetyandeco"> <a class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://go.microsoft.com/fwlink/?linkid=2196227" data-mscc-ic="false" data-m="{"cN":"Footer_SafetyAndEco_nav","id":"n7c8c1c1m1r1a2","sN":7,"aN":"c8c1c1m1r1a2"}">Safety & eco</a> </li> <li id="c-uhff-footer_aboutourads"> <a class="custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12" href="https://choice.microsoft.com" data-mscc-ic="false" data-m="{"cN":"Footer_AboutourAds_nav","id":"n8c8c1c1m1r1a2","sN":8,"aN":"c8c1c1m1r1a2"}">About our ads</a> </li> <li>© Microsoft 2024</li> </ul> </nav> </div> </footer></section></article></div></footer></div><script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">{"props":{"pageProps":{"locale":"en-US","tenant":{"id":"o365.prod","enabled":true,"auroraHost":"https://techcommunity.microsoft.com","host":"https://techcommunity.microsoft.com","phase":"prod","community":"gxcuf89792","ssl":true,"basePath":"","liaContextPath":"/t5/s","sameSite":true,"useEncodedIds":false,"publicConfig":{"repoName":"o365","moduleFederationHost":"https://aurora-customization-usw2.lithium.com","mainBranchName":"main","sdkEnabled":false,"auroraAnalyticsEnabled":true,"auroraAuditEnabled":false,"auroraFeaturedWidgetsEnabled":true,"auroraFeaturedContentTopicMessagesLimit":50,"auroraFeaturedPlacesNodesLimit":50,"auroraUnreleasedSettingsEnabled":false,"googleMapsApiKey":"AIzaSyCU2qaVJD5yWJQJannmoRnvql4qTowFcrQ","labelsEnabled":true,"pendoEnabled":false,"pendoApiKey":"16d69dfe-7be6-4eb7-59b7-708c84e89099","reCaptchaV3Enabled":true,"reCaptchaV3ScoreThreshold":0.5,"reCaptchaV3SiteKey":"6LcfUxUcAAAAAH1DBxd4uJIxf5ITF4YwCRUVJHsY","supportedLanguages":["en-US","es-ES","fr-FR","ja-JP","it-IT","nl-NL","pt-BR","pt-PT","ru-RU","pl-PL","de-DE","en-GB","ko-KR","zh-CN"],"trafficVisitorCookieMaxAge":31536000,"videosFileType":[".wmv",".avi",".mov",".moov",".mpg",".mpeg",".m2t",".m2v",".vob",".flv",".mp4",".mpg4",".mkv",".asf",".m4v",".m2p",".3gp",".3g2",".f4v",".mp3",".m4a",".wma",".aac"],"sitemapEnabled":true,"quiltsV2Enabled":true,"multiTemplatesEnabled":true,"localizedQuiltWrapperEnabled":false,"samlEnabled":false,"ssoAllowNormalSignon":false,"ideasEnabled":true,"occasionsEnabled":true,"oidcssEnabled":true,"oidcssPostLogoutEndpointEnabled":false,"jwtSsoEnabled":false,"multiAuthEnabled":false,"multiAuthLocalisation":false,"inviteByEmailForGrouphubsEnabled":true,"switchUserFeatureEnabled":true,"messageStatusEnabled":true,"videoEnabled":false,"externalVideoEnabled":true,"salesforceIntegrationEnabled":false,"casePortalEnabled":false,"resetPermissionsEnabled":false,"closeAccountEnabled":true,"threadSummaryLimit":-1,"maxFeaturedGuestForEvents":10,"auroraEndpointsEnabled":true,"anonymousUserDeletionEnabled":true,"poweredByLogoEnabled":true,"endpointReloadInterval":120000,"maxOpenStreamsForEndpoints":0,"endpointBranchCompareIncludeFilter":"*.js,*.json,*.graphql","showExternalVideoCookieBanner":true,"maxGuidesAndContentLimit":500,"auroraThirdPartyAnalyticsEnabled":true,"contentArchiveEnabled":true,"auroraFirehoseEnabled":false,"auroraFirehoseFilterEventsEnabled":false,"mentionsEnabled":true,"featuredGuideLimit":100,"contentBulkArchiveEnabled":false},"baseUrl":"https://techcommunity.microsoft.com","fresh":true,"useBasicAuth":false},"routeInfo":{"path":"/blog/desenvolvedoresbr/azure-open-ia-acelerando-nossos-caminhos-/4276402","pageName":"BlogMessagePage"},"csrfToken":"68133ac40742bbd9bdd816e6fb6f5daecad97e3e602c1481e882c45d218471a850d5e1ae2b31beec87a17115795224bf0b379aadf30d1f6be7802212046883d8","authToken":{"token":"Bearer X+cH2A/HKmQd4PswY8Xmr6lRTgcHgIJZnOUqpQ0ktXE=","expires":86400,"headerName":"Authorization","providerName":"OAUTH2_CC_None"},"switchUserId":null,"isCrawler":false,"apolloState":{"Community:community:gxcuf89792":{"__typename":"Community","id":"community:gxcuf89792","ssoProperties":{"__typename":"SsoProperties","ssoEnabled":{"__typename":"PolicyResult","failureReason":null},"communitySignUpUrl":"/t5/s/gxcuf89792/auth/oidcss/sso_login_redirect/provider/default","communitySignOnUrl":"/t5/s/gxcuf89792/auth/oidcss/sso_login_redirect/provider/default","communitySignOffUrl":"","khorosSignUpUrl":"","khorosSignOnUrl":"","khorosSignOffUrl":"","samlSignOnUrl":"","samlSignOffUrl":"","oidcssSignOnUrl":"","oidcssSignOffUrl":"","jwtSsoSignOnUrl":null,"jwtSsoSignOffUrl":null,"ssoBounceUrl":"","ssoQsParam":"referer"},"samlProperties":{"__typename":"SamlProperties","samlEnabled":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.feature.saml.enabled.accessDenied","key":"error.lithium.policies.feature.saml.enabled.accessDenied","args":[]}},"registerQueryStringEnabled":false,"registerQueryStringValue":"","registerQueryStringEncodeValueEnabled":false,"loginQueryStringEnabled":false,"loginQueryStringValue":"","loginQueryStringEncodeValueEnabled":false,"idpBindingType":"post","idpOneBindingType":"post","idpTwoBindingType":"post"},"seoProperties":{"__typename":"SeoProperties","customOGSiteName":"TECHCOMMUNITY.MICROSOFT.COM","appendTopicUidInHead":false,"linkCommentToTimeStamp":true,"lowercasePath":true},"languageProperties":{"__typename":"LanguageProperties","language":"en-US"},"cookieProperties":{"__typename":"CookieProperties","cookiePrivacyPolicyUrl":"https://go.microsoft.com/fwlink/?LinkId=521839","isCookieBannerEnabled":false},"searchProperties":{"__typename":"SearchProperties","chatProperties":{"__typename":"ChatProperties","brandMessengerWidgetId":"","brandMessengerCompanyKey":"","brandMessengerScriptSource":"","brandMessengerElementSelector":""}},"knowledgeBaseProperties":{"__typename":"KnowledgeBaseProperties","isGuidesAndChaptersEnabled":true},"communityPolicies":{"__typename":"CommunityPolicies","localizedCategoriesFeatureEnabled":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.feature.localized_categories.enabled.accessDenied","key":"error.lithium.policies.feature.localized_categories.enabled.accessDenied","args":[]}}},"badgeProperties":{"__typename":"BadgeProperties","enabled":{"__typename":"PolicyResult","failureReason":null}},"timezoneProperties":{"__typename":"TimezoneProperties","timezone":"US/Pacific"},"displayId":"gxcuf89792","nodeType":"community","title":"Microsoft Community Hub","seoTitle":null,"description":"","avatar":null,"userContext":{"__typename":"NodeUserContext","canUpdateNode":false},"depth":0,"entityType":"COMMUNITY","shortTitle":"Home"},"ROOT_QUERY":{"__typename":"Query","community":{"__ref":"Community:community:gxcuf89792"},"allowedLanguages":["en-US"],"authProviders":[],"cachedAsset({\"assetId\":\"pages\",\"assetType\":\"pages\",\"lastModified\":\"000\"})":{"__ref":"CachedAsset:pages-1739785329050"},"cachedText({\"locale\":\"en-US\",\"namespaces\":[\"components/context/AppContext/AppContextProvider\"]})":[{"__ref":"CachedAsset:text:en_US-components/context/AppContext/AppContextProvider-0"}],"cachedText({\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/Loading/LoadingDot\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-0"}],"messageArchivalData({\"messageId\":\"message:4276402\"})":{"__typename":"MessageArchivalData","archived":false,"archivedDate":null,"suggestedUrl":null},"self":{"__ref":"User:user:-1"},"theme({\"coreNodeId\":null})":{"__typename":"ThemeResponse","result":{"__ref":"Theme:customTheme1"}},"canAccess":true,"canRegister":true,"componentsLastModified":"1739785400743","quiltLastModified":"1739785326468","pagesLastModified":"1739785329050","pageScriptsLastModified":"1739785407358","textLastModified":"1737115705000","themeLastModified":"1739785328557","fieldDefinitionsLastModified":"1730139072000","entityDefinitionsLastModified":"1730139072000","quiltWrapperLastModified":"1739785271215","coreNode({\"id\":\"board:desenvolvedoresbr\"})":{"__ref":"Blog:board:DesenvolvedoresBR"},"message({\"id\":\"message:4276402\"})":{"__ref":"BlogTopicMessage:message:4276402"},"theme({\"coreNodeId\":\"board:DesenvolvedoresBR\"})":{"__typename":"ThemeResponse","result":{"__ref":"Theme:customTheme1"}},"cachedAsset({\"assetId\":\"pages\",\"assetType\":\"pages\",\"lastModified\":\"1739785329050\"})":{"__ref":"CachedAsset:pages-1739785329050"},"cachedAsset({\"assetId\":\"customTheme1\",\"assetType\":\"theme\",\"lastModified\":\"1739785328557\",\"locale\":null,\"node\":null})":{"__ref":"CachedAsset:theme:customTheme1-1739785328557"},"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/common/EmailVerification\"]})":[{"__ref":"CachedAsset:text:en_US-components/common/EmailVerification-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/Loading/LoadingDot\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"pages/blogs/BlogMessagePage\"]})":[{"__ref":"CachedAsset:text:en_US-pages/blogs/BlogMessagePage-1737115705000"}],"cachedAsset({\"assetId\":\"pages/blogs/BlogMessagePage\",\"assetType\":\"quilt\",\"lastModified\":\"1739785326468\",\"locale\":null,\"node\":\"board:DesenvolvedoresBR\"})":{"__ref":"CachedAsset:quilt:o365.prod:pages/blogs/BlogMessagePage:board:DesenvolvedoresBR-1739785326468"},"cachedAsset({\"assetId\":\"Common\",\"assetType\":\"quiltWrapper\",\"lastModified\":\"1739785271215\",\"locale\":null,\"node\":null})":{"__ref":"CachedAsset:quiltWrapper:o365.prod:Common:1739785271215"},"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/common/ActionFeedback\"]})":[{"__ref":"CachedAsset:text:en_US-components/common/ActionFeedback-1737115705000"}],"cachedAsset({\"assetId\":\"custom.widget.community_banner-en-US\",\"assetType\":\"component\",\"lastModified\":\"1739785400743\",\"locale\":null,\"node\":null})":{"__ref":"CachedAsset:component:custom.widget.community_banner-en-1739785400743"},"cachedAsset({\"assetId\":\"custom.widget.HeroBanner-en-US\",\"assetType\":\"component\",\"lastModified\":\"1739785400743\",\"locale\":null,\"node\":null})":{"__ref":"CachedAsset:component:custom.widget.HeroBanner-en-1739785400743"},"cachedAsset({\"assetId\":\"custom.widget.Social_Sharing-en-US\",\"assetType\":\"component\",\"lastModified\":\"1739785400743\",\"locale\":null,\"node\":null})":{"__ref":"CachedAsset:component:custom.widget.Social_Sharing-en-1739785400743"},"cachedAsset({\"assetId\":\"custom.widget.MicrosoftFooter-en-US\",\"assetType\":\"component\",\"lastModified\":\"1739785400743\",\"locale\":null,\"node\":null})":{"__ref":"CachedAsset:component:custom.widget.MicrosoftFooter-en-1739785400743"},"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/Breadcrumb\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/Breadcrumb-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageBanner\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageBanner-1737115705000"}],"coreNode({\"id\":\"board:DesenvolvedoresBR\"})":{"__ref":"Blog:board:DesenvolvedoresBR"},"coreNodes({\"constraints\":{\"id\":{\"in\":[\"community:gxcuf89792\",\"category:microsoft365\",\"category:MicrosoftTeams\",\"category:Windows\",\"category:microsoft-security\",\"category:Outlook\",\"category:Planner\",\"category:Windows-Server\",\"category:Azure\",\"category:Exchange\",\"category:microsoft-endpoint-manager\",\"category:SQL-Server\",\"category:EducationSector\",\"category:AI\",\"category:ITOpsTalk\",\"category:PartnerCommunity\",\"category:MicrosoftMechanics\",\"category:HealthcareAndLifeSciences\",\"category:PublicSector\",\"category:IoT\",\"category:DrivingAdoption\",\"category:SMB\",\"category:StartupsatMicrosoft\",\"category:MicrosoftLearn\",\"category:MicrosoftLearn\",\"board:MicrosoftLearnBlog\",\"category:Community-Info-Center\"]}},\"first\":27})":{"__typename":"CoreNodeConnection","edges":[{"__typename":"CoreNodeEdge","node":{"__ref":"Community:community:gxcuf89792"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:Exchange"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:Planner"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:Outlook"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:Community-Info-Center"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:EducationSector"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:DrivingAdoption"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:Azure"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:Windows-Server"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:SQL-Server"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:MicrosoftTeams"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:PublicSector"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:microsoft365"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:IoT"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:HealthcareAndLifeSciences"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:SMB"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:ITOpsTalk"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:microsoft-endpoint-manager"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:MicrosoftLearn"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Blog:board:MicrosoftLearnBlog"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:AI"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:MicrosoftMechanics"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:StartupsatMicrosoft"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:PartnerCommunity"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:Windows"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:microsoft-security"}}]},"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/Navbar\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/Navbar-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/NavbarHamburgerDropdown\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/NavbarHamburgerDropdown-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/BrandLogo\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/BrandLogo-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/NavbarTextLinks\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/NavbarTextLinks-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/authentication/AuthenticationLink\"]})":[{"__ref":"CachedAsset:text:en_US-components/authentication/AuthenticationLink-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/nodes/NodeLink\"]})":[{"__ref":"CachedAsset:text:en_US-components/nodes/NodeLink-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/customComponent/CustomComponent\"]})":[{"__ref":"CachedAsset:text:en_US-components/customComponent/CustomComponent-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageView/MessageViewStandard\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageView/MessageViewStandard-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageReplyCallToAction\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageReplyCallToAction-1737115705000"}],"component({\"componentId\":\"custom.widget.Social_Sharing\"})":{"__typename":"Component","render({\"context\":{\"component\":{\"entities\":[],\"props\":{}},\"page\":{\"entities\":[\"board:DesenvolvedoresBR\",\"message:4276402\"],\"name\":\"BlogMessagePage\",\"props\":{},\"url\":\"https://techcommunity.microsoft.com\"}}})":{"__typename":"ComponentRenderResult","html":"\u003cdiv class=\"social-share\"\u003e \u003cul class=\"sharing-options\"\u003e \u003cli\u003e \u003ca class=\"social-share-linkedin social-link\" href=\"https://www.linkedin.com/sharing/share-offsite/?url=page.url\" target=\"_blank\"\u003e \u003cimg alt=\"Share to LinkedIn\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/components/Social_Sharing/assets/social-share-linkedin.svg\" /\u003e \u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca class=\"social-share-facebook social-link\" href=\"https://www.facebook.com/share.php?u=page.url\u0026t=page-name\" target=\"_blank\"\u003e \u003cimg alt=\"Share to Facebook\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/components/Social_Sharing/assets/social-share-facebook.svg\" /\u003e \u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca class=\"social-share-x social-link\" href=\"https://twitter.com/share?text=page-name\u0026url=page.url\" target=\"_blank\"\u003e \u003cimg alt=\"Share to X\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/components/Social_Sharing/assets/social-share-x.svg\" /\u003e \u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca class=\"social-share-reddit social-link\" href=\"https://www.reddit.com/submit?url=page.url\u0026title=page-name\" target=\"_blank\"\u003e \u003cimg alt=\"Share to Reddit\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/components/Social_Sharing/assets/social-share-reddit.svg\" /\u003e \u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca class=\"social-share-email social-link\" href=\"mailto:?body=page.url\" target=\"_blank\"\u003e \u003cimg alt=\"Share to Email\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/components/Social_Sharing/assets/social-share-email.svg\" /\u003e \u003c/a\u003e \u003c/li\u003e \u003cli class=\"social-share-rss\" id=\"RSS\"\u003e \u003ca class=\"social-share-rss\" href=\"/t5/s/gxcuf89792/rss/board?board.id=DesenvolvedoresBR\" target=\"_blank\"\u003e \u003cimg alt=\"Subscribe to RSS\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/components/Social_Sharing/assets/rss.svg\" /\u003e \u003c/a\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/ul\u003e \u003cscript\u003e var currentURL = window.location.href; var strippedURL = currentURL.split('?')[0]; var socialLinks = document.querySelectorAll('.social-link'); var currentTitle = document.title; socialLinks.forEach(function(link) { var currentHref = link.getAttribute('href'); var newHref = currentHref.replace('page.url',encodeURIComponent(strippedURL)).replace('page-name', encodeURIComponent(currentTitle)); link.setAttribute('href',newHref); }); \u003c/script\u003e"}},"component({\"componentId\":\"custom.widget.community_banner\"})":{"__typename":"Component","render({\"context\":{\"component\":{\"entities\":[],\"props\":{}},\"page\":{\"entities\":[\"board:DesenvolvedoresBR\",\"message:4276402\"],\"name\":\"BlogMessagePage\",\"props\":{},\"url\":\"https://techcommunity.microsoft.com\"}}})":{"__typename":"ComponentRenderResult","html":"\u003cdiv class=\"community-banner\"\u003e \u003ca href=\"https://aka.ms/MCAG/IPM/MC25002B\" target=\"_blank\" class=\"top-bar btn\"\u003e Connect with experts and redefine what’s possible at work – join us at the Microsoft 365 Community Conference May 6-8. Learn more \u0026gt\u003c/a\u003e \u003c/div\u003e"}},"component({\"componentId\":\"custom.widget.MicrosoftFooter\"})":{"__typename":"Component","render({\"context\":{\"component\":{\"entities\":[],\"props\":{}},\"page\":{\"entities\":[\"board:DesenvolvedoresBR\",\"message:4276402\"],\"name\":\"BlogMessagePage\",\"props\":{},\"url\":\"https://techcommunity.microsoft.com\"}}})":{"__typename":"ComponentRenderResult","html":"\u003cfooter id=\"uhf-footer\" class=\"c-uhff context-uhf\" data-uhf-mscc-rq=\"false\" data-footer-footprint=\"/MSTechnical/MSTechnicalFooter, fromService: True\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Uhf footer_cont\u0026quot;,\u0026quot;cT\u0026quot;:\u0026quot;Container\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:1,\u0026quot;aN\u0026quot;:\u0026quot;m1r1a2\u0026quot;}\"\u003e \u003cnav class=\"c-uhff-nav\" aria-label=\"Footer Resource links\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer nav_cont\u0026quot;,\u0026quot;cT\u0026quot;:\u0026quot;Container\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:1,\u0026quot;aN\u0026quot;:\u0026quot;c1m1r1a2\u0026quot;}\"\u003e \u003cdiv class=\"c-uhff-nav-row\"\u003e \u003cdiv class=\"c-uhff-nav-group\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;footerNavColumn1_cont\u0026quot;,\u0026quot;cT\u0026quot;:\u0026quot;Container\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;c1c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:1,\u0026quot;aN\u0026quot;:\u0026quot;c1c1m1r1a2\u0026quot;}\"\u003e \u003cdiv class=\"c-heading-4\" role=\"heading\" aria-level=\"2\"\u003eWhat's new\u003c/div\u003e \u003cul class=\"c-list f-bare\"\u003e \u003cli\u003e \u003ca aria-label=\"Surface Pro 9 What's new\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/d/surface-pro-9/93VKD8NP4FVK\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_WhatsNew_NewSurfacePro8_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n1c1c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:1,\u0026quot;aN\u0026quot;:\u0026quot;c1c1c1m1r1a2\u0026quot;}\"\u003eSurface Pro 9\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Surface Laptop 5 What's new\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/d/surface-laptop-5/8XN49V61S1BN\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_WhatsNew_SurfaceLaptop2_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n2c1c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:2,\u0026quot;aN\u0026quot;:\u0026quot;c1c1c1m1r1a2\u0026quot;}\"\u003eSurface Laptop 5\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Surface Studio 2+ What's new\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/d/surface-studio-2plus/8VLFQC3597K4\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_WhatsNew_SurfaceStudio_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n3c1c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:3,\u0026quot;aN\u0026quot;:\u0026quot;c1c1c1m1r1a2\u0026quot;}\"\u003eSurface Studio 2+\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Surface Laptop Go 2 What's new\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/d/surface-laptop-go-2/8PGLPV76MJHN\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_WhatsNew_SurfaceLaptopGo_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n4c1c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:4,\u0026quot;aN\u0026quot;:\u0026quot;c1c1c1m1r1a2\u0026quot;}\"\u003eSurface Laptop Go 2\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Surface Laptop Studio What's new\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/d/surface-laptop-studio/8SRDF62SWKPF\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_WhatsNew_SurfaceLaptopStudio_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n5c1c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:5,\u0026quot;aN\u0026quot;:\u0026quot;c1c1c1m1r1a2\u0026quot;}\"\u003eSurface Laptop Studio\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Surface Duo 2 What's new\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/d/surface-duo-2/9408KGXP4XJL\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_WhatsNew_SurfaceDuo2_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n6c1c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:6,\u0026quot;aN\u0026quot;:\u0026quot;c1c1c1m1r1a2\u0026quot;}\"\u003eSurface Duo 2\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Microsoft 365 What's new\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/microsoft-365\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Whatsnew_Microsoft365_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n7c1c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:7,\u0026quot;aN\u0026quot;:\u0026quot;c1c1c1m1r1a2\u0026quot;}\"\u003eMicrosoft 365\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Windows 11 apps What's new\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/windows/windows-11-apps\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_WhatsNew_Windows_11_apps_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n8c1c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:8,\u0026quot;aN\u0026quot;:\u0026quot;c1c1c1m1r1a2\u0026quot;}\"\u003eWindows 11 apps\u003c/a\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"c-uhff-nav-group\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;footerNavColumn2_cont\u0026quot;,\u0026quot;cT\u0026quot;:\u0026quot;Container\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;c2c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:2,\u0026quot;aN\u0026quot;:\u0026quot;c1c1m1r1a2\u0026quot;}\"\u003e \u003cdiv class=\"c-heading-4\" role=\"heading\" aria-level=\"2\"\u003eMicrosoft Store\u003c/div\u003e \u003cul class=\"c-list f-bare\"\u003e \u003cli\u003e \u003ca aria-label=\"Account profile Microsoft Store\" class=\"c-uhff-link\" href=\"https://account.microsoft.com/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_StoreandSupport_AccountProfile_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n1c2c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:1,\u0026quot;aN\u0026quot;:\u0026quot;c2c1c1m1r1a2\u0026quot;}\"\u003eAccount profile\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Download Center Microsoft Store\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/download\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_StoreandSupport_DownloadCenter_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n2c2c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:2,\u0026quot;aN\u0026quot;:\u0026quot;c2c1c1m1r1a2\u0026quot;}\"\u003eDownload Center\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Microsoft Store support Microsoft Store\" class=\"c-uhff-link\" href=\"https://go.microsoft.com/fwlink/?linkid=2139749\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_StoreandSupport_SalesAndSupport_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n3c2c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:3,\u0026quot;aN\u0026quot;:\u0026quot;c2c1c1m1r1a2\u0026quot;}\"\u003eMicrosoft Store support\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Returns Microsoft Store\" class=\"c-uhff-link\" href=\"https://go.microsoft.com/fwlink/p/?LinkID=824764\u0026amp;clcid=0x409\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;MicrosoftStore_ExtendedHolidayReturns_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n4c2c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:4,\u0026quot;aN\u0026quot;:\u0026quot;c2c1c1m1r1a2\u0026quot;}\"\u003eReturns\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Order tracking Microsoft Store\" class=\"c-uhff-link\" href=\"https://account.microsoft.com/orders\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_StoreandSupport_OrderTracking_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n5c2c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:5,\u0026quot;aN\u0026quot;:\u0026quot;c2c1c1m1r1a2\u0026quot;}\"\u003eOrder tracking\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Virtual workshops and training Microsoft Store\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/store/workshops-training-and-events?icid=vl_uf_932020\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_StoreandSupport_StoreLocations_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n6c2c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:6,\u0026quot;aN\u0026quot;:\u0026quot;c2c1c1m1r1a2\u0026quot;}\"\u003eVirtual workshops and training\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Microsoft Store Promise Microsoft Store\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/store/b/why-microsoft-store?icid=footer_why-msft-store_7102020\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_StoreandSupport_MicrosoftPromise_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n7c2c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:7,\u0026quot;aN\u0026quot;:\u0026quot;c2c1c1m1r1a2\u0026quot;}\"\u003eMicrosoft Store Promise\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Flexible Payments Microsoft Store\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/store/b/payment-financing-options?icid=footer_financing_vcc\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_StoreandSupport_Financing_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n8c2c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:8,\u0026quot;aN\u0026quot;:\u0026quot;c2c1c1m1r1a2\u0026quot;}\"\u003eFlexible Payments\u003c/a\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"c-uhff-nav-group\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;footerNavColumn3_cont\u0026quot;,\u0026quot;cT\u0026quot;:\u0026quot;Container\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;c3c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:3,\u0026quot;aN\u0026quot;:\u0026quot;c1c1m1r1a2\u0026quot;}\"\u003e \u003cdiv class=\"c-heading-4\" role=\"heading\" aria-level=\"2\"\u003eEducation\u003c/div\u003e \u003cul class=\"c-list f-bare\"\u003e \u003cli\u003e \u003ca aria-label=\"Microsoft in education Education\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/education\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Education_MicrosoftInEducation_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n1c3c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:1,\u0026quot;aN\u0026quot;:\u0026quot;c3c1c1m1r1a2\u0026quot;}\"\u003eMicrosoft in education\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Devices for education Education\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/education/devices/overview\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Education_DevicesforEducation_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n2c3c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:2,\u0026quot;aN\u0026quot;:\u0026quot;c3c1c1m1r1a2\u0026quot;}\"\u003eDevices for education\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Microsoft Teams for Education Education\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/education/products/teams\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Education_MicrosoftTeamsforEducation_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n3c3c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:3,\u0026quot;aN\u0026quot;:\u0026quot;c3c1c1m1r1a2\u0026quot;}\"\u003eMicrosoft Teams for Education\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Microsoft 365 Education Education\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/education/buy-license/microsoft365\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Education_Microsoft365Education_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n4c3c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:4,\u0026quot;aN\u0026quot;:\u0026quot;c3c1c1m1r1a2\u0026quot;}\"\u003eMicrosoft 365 Education\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Education consultation appointment Education\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/store/b/business-consultation?tab=educationconsultation\u0026amp;icid=CNavfooter_educationconsultation\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Education_ConsultationAppointment_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n5c3c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:5,\u0026quot;aN\u0026quot;:\u0026quot;c3c1c1m1r1a2\u0026quot;}\"\u003eEducation consultation appointment\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Educator training and development Education\" class=\"c-uhff-link\" href=\"https://education.microsoft.com/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Education_EducatorTrainingDevelopment_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n6c3c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:6,\u0026quot;aN\u0026quot;:\u0026quot;c3c1c1m1r1a2\u0026quot;}\"\u003eEducator training and development\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Deals for students and parents Education\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/store/b/education\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Education_DealsForStudentsandParents_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n7c3c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:7,\u0026quot;aN\u0026quot;:\u0026quot;c3c1c1m1r1a2\u0026quot;}\"\u003eDeals for students and parents\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Azure for students Education\" class=\"c-uhff-link\" href=\"https://azure.microsoft.com/en-us/free/students/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Azureforstudents_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n8c3c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:8,\u0026quot;aN\u0026quot;:\u0026quot;c3c1c1m1r1a2\u0026quot;}\"\u003eAzure for students\u003c/a\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"c-uhff-nav-row\"\u003e \u003cdiv class=\"c-uhff-nav-group\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;footerNavColumn4_cont\u0026quot;,\u0026quot;cT\u0026quot;:\u0026quot;Container\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;c4c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:4,\u0026quot;aN\u0026quot;:\u0026quot;c1c1m1r1a2\u0026quot;}\"\u003e \u003cdiv class=\"c-heading-4\" role=\"heading\" aria-level=\"2\"\u003eBusiness\u003c/div\u003e \u003cul class=\"c-list f-bare\"\u003e \u003cli\u003e \u003ca aria-label=\"Microsoft Cloud Business\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/microsoft-cloud\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Business_Microsoft_Cloud_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n1c4c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:1,\u0026quot;aN\u0026quot;:\u0026quot;c4c1c1m1r1a2\u0026quot;}\"\u003eMicrosoft Cloud\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Microsoft Security Business\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/security\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Business_Microsoft Security_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n2c4c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:2,\u0026quot;aN\u0026quot;:\u0026quot;c4c1c1m1r1a2\u0026quot;}\"\u003eMicrosoft Security\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Dynamics 365 Business\" class=\"c-uhff-link\" href=\"https://dynamics.microsoft.com/en-us/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Business_MicrosoftDynamics365_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n3c4c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:3,\u0026quot;aN\u0026quot;:\u0026quot;c4c1c1m1r1a2\u0026quot;}\"\u003eDynamics 365\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Microsoft 365 Business\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/microsoft-365/business/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;More_Business_Microsoft365_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n4c4c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:4,\u0026quot;aN\u0026quot;:\u0026quot;c4c1c1m1r1a2\u0026quot;}\"\u003eMicrosoft 365\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Microsoft Power Platform Business\" class=\"c-uhff-link\" href=\"https://powerplatform.microsoft.com/en-us/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_DeveloperAndIT_Power Platform_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n5c4c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:5,\u0026quot;aN\u0026quot;:\u0026quot;c4c1c1m1r1a2\u0026quot;}\"\u003eMicrosoft Power Platform\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Microsoft Teams Business\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/microsoft-teams/group-chat-software\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Business_Microsoft365_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n6c4c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:6,\u0026quot;aN\u0026quot;:\u0026quot;c4c1c1m1r1a2\u0026quot;}\"\u003eMicrosoft Teams\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Microsoft Industry Business\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/industry\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Business_MicrosoftIndustry_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n7c4c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:7,\u0026quot;aN\u0026quot;:\u0026quot;c4c1c1m1r1a2\u0026quot;}\"\u003eMicrosoft Industry\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Small Business Business\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/store/b/business?icid=CNavBusinessStore\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Business-SmallBusiness_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n8c4c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:8,\u0026quot;aN\u0026quot;:\u0026quot;c4c1c1m1r1a2\u0026quot;}\"\u003eSmall Business\u003c/a\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"c-uhff-nav-group\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;footerNavColumn5_cont\u0026quot;,\u0026quot;cT\u0026quot;:\u0026quot;Container\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;c5c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:5,\u0026quot;aN\u0026quot;:\u0026quot;c1c1m1r1a2\u0026quot;}\"\u003e \u003cdiv class=\"c-heading-4\" role=\"heading\" aria-level=\"2\"\u003eDeveloper \u0026amp; IT\u003c/div\u003e \u003cul class=\"c-list f-bare\"\u003e \u003cli\u003e \u003ca aria-label=\"Azure Developer \u0026amp; IT\" class=\"c-uhff-link\" href=\"https://azure.microsoft.com/en-us/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Enterprise_MicrosoftAzure_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n1c5c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:1,\u0026quot;aN\u0026quot;:\u0026quot;c5c1c1m1r1a2\u0026quot;}\"\u003eAzure\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Developer Center Developer \u0026amp; IT\" class=\"c-uhff-link\" href=\"https://developer.microsoft.com/en-us/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Developer_DeveloperCenter_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n2c5c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:2,\u0026quot;aN\u0026quot;:\u0026quot;c5c1c1m1r1a2\u0026quot;}\"\u003eDeveloper Center\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Documentation Developer \u0026amp; IT\" class=\"c-uhff-link\" href=\"https://learn.microsoft.com/docs/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_DeveloperAndIT_Documentation_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n3c5c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:3,\u0026quot;aN\u0026quot;:\u0026quot;c5c1c1m1r1a2\u0026quot;}\"\u003eDocumentation\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Microsoft Learn Developer \u0026amp; IT\" class=\"c-uhff-link\" href=\"https://learn.microsoft.com/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_DeveloperAndIT_MicrosoftLearn_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n4c5c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:4,\u0026quot;aN\u0026quot;:\u0026quot;c5c1c1m1r1a2\u0026quot;}\"\u003eMicrosoft Learn\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Microsoft Tech Community Developer \u0026amp; IT\" class=\"c-uhff-link\" href=\"https://techcommunity.microsoft.com/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_DeveloperAndIT_MicrosoftTechCommunity_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n5c5c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:5,\u0026quot;aN\u0026quot;:\u0026quot;c5c1c1m1r1a2\u0026quot;}\"\u003eMicrosoft Tech Community\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Azure Marketplace Developer \u0026amp; IT\" class=\"c-uhff-link\" href=\"https://azuremarketplace.microsoft.com/en-us/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;More_DeveloperAndIT_AzureMarketplace_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n6c5c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:6,\u0026quot;aN\u0026quot;:\u0026quot;c5c1c1m1r1a2\u0026quot;}\"\u003eAzure Marketplace\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"AppSource Developer \u0026amp; IT\" class=\"c-uhff-link\" href=\"https://appsource.microsoft.com/en-us/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_DeveloperAndIT_AppSource_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n7c5c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:7,\u0026quot;aN\u0026quot;:\u0026quot;c5c1c1m1r1a2\u0026quot;}\"\u003eAppSource\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Visual Studio Developer \u0026amp; IT\" class=\"c-uhff-link\" href=\"https://visualstudio.microsoft.com/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Developer_MicrosoftVisualStudio_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n8c5c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:8,\u0026quot;aN\u0026quot;:\u0026quot;c5c1c1m1r1a2\u0026quot;}\"\u003eVisual Studio\u003c/a\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"c-uhff-nav-group\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;footerNavColumn6_cont\u0026quot;,\u0026quot;cT\u0026quot;:\u0026quot;Container\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;c6c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:6,\u0026quot;aN\u0026quot;:\u0026quot;c1c1m1r1a2\u0026quot;}\"\u003e \u003cdiv class=\"c-heading-4\" role=\"heading\" aria-level=\"2\"\u003eCompany\u003c/div\u003e \u003cul class=\"c-list f-bare\"\u003e \u003cli\u003e \u003ca aria-label=\"Careers Company\" class=\"c-uhff-link\" href=\"https://careers.microsoft.com/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Company_Careers_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n1c6c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:1,\u0026quot;aN\u0026quot;:\u0026quot;c6c1c1m1r1a2\u0026quot;}\"\u003eCareers\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"About Microsoft Company\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/about\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Company_AboutMicrosoft_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n2c6c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:2,\u0026quot;aN\u0026quot;:\u0026quot;c6c1c1m1r1a2\u0026quot;}\"\u003eAbout Microsoft\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Company news Company\" class=\"c-uhff-link\" href=\"https://news.microsoft.com/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Company_CompanyNews_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n3c6c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:3,\u0026quot;aN\u0026quot;:\u0026quot;c6c1c1m1r1a2\u0026quot;}\"\u003eCompany news\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Privacy at Microsoft Company\" class=\"c-uhff-link\" href=\"https://privacy.microsoft.com/en-us\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Company_PrivacyAtMicrosoft_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n4c6c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:4,\u0026quot;aN\u0026quot;:\u0026quot;c6c1c1m1r1a2\u0026quot;}\"\u003ePrivacy at Microsoft\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Investors Company\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/investor/default.aspx\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Company_Investors_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n5c6c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:5,\u0026quot;aN\u0026quot;:\u0026quot;c6c1c1m1r1a2\u0026quot;}\"\u003eInvestors\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Diversity and inclusion Company\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/diversity/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Company_DiversityAndInclusion_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n6c6c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:6,\u0026quot;aN\u0026quot;:\u0026quot;c6c1c1m1r1a2\u0026quot;}\"\u003eDiversity and inclusion\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Accessibility Company\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/accessibility\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Company_Accessibility_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n7c6c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:7,\u0026quot;aN\u0026quot;:\u0026quot;c6c1c1m1r1a2\u0026quot;}\"\u003eAccessibility\u003c/a\u003e \u003c/li\u003e \u003cli\u003e \u003ca aria-label=\"Sustainability Company\" class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/sustainability/\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Company_Sustainability_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n8c6c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:8,\u0026quot;aN\u0026quot;:\u0026quot;c6c1c1m1r1a2\u0026quot;}\"\u003eSustainability\u003c/a\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003c/div\u003e \u003c/nav\u003e \u003cdiv class=\"c-uhff-base\"\u003e \u003ca data-m=\"{\u0026quot;id\u0026quot;:\u0026quot;n8c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:8,\u0026quot;aN\u0026quot;:\u0026quot;c1c1m1r1a2\u0026quot;}\" href=\"https://aka.ms/yourcaliforniaprivacychoices\" class=\"c-uhff-link c-uhff-ccpa\"\u003e \u003csvg role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 30 14\" xml:space=\"preserve\" height=\"16\" width=\"43\"\u003e \u003ctitle\u003eCalifornia Consumer Privacy Act (CCPA) Opt-Out Icon\u003c/title\u003e \u003cpath d=\"M7.4 12.8h6.8l3.1-11.6H7.4C4.2 1.2 1.6 3.8 1.6 7s2.6 5.8 5.8 5.8z\" style=\"fill-rule:evenodd;clip-rule:evenodd;fill:#fff\"\u003e\u003c/path\u003e \u003cpath d=\"M22.6 0H7.4c-3.9 0-7 3.1-7 7s3.1 7 7 7h15.2c3.9 0 7-3.1 7-7s-3.2-7-7-7zm-21 7c0-3.2 2.6-5.8 5.8-5.8h9.9l-3.1 11.6H7.4c-3.2 0-5.8-2.6-5.8-5.8z\" style=\"fill-rule:evenodd;clip-rule:evenodd;fill:#06f\"\u003e\u003c/path\u003e \u003cpath d=\"M24.6 4c.2.2.2.6 0 .8L22.5 7l2.2 2.2c.2.2.2.6 0 .8-.2.2-.6.2-.8 0l-2.2-2.2-2.2 2.2c-.2.2-.6.2-.8 0-.2-.2-.2-.6 0-.8L20.8 7l-2.2-2.2c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0l2.2 2.2L23.8 4c.2-.2.6-.2.8 0z\" style=\"fill:#fff\"\u003e\u003c/path\u003e \u003cpath d=\"M12.7 4.1c.2.2.3.6.1.8L8.6 9.8c-.1.1-.2.2-.3.2-.2.1-.5.1-.7-.1L5.4 7.7c-.2-.2-.2-.6 0-.8.2-.2.6-.2.8 0L8 8.6l3.8-4.5c.2-.2.6-.2.9 0z\" style=\"fill:#06f\"\u003e\u003c/path\u003e \u003c/svg\u003e \u003cspan\u003eYour Privacy Choices\u003c/span\u003e \u003c/a\u003e \u003cnav aria-label=\"Microsoft corporate links\"\u003e \u003cul class=\"c-list f-bare\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Corp links_cont\u0026quot;,\u0026quot;cT\u0026quot;:\u0026quot;Container\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;c8c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:8,\u0026quot;aN\u0026quot;:\u0026quot;c1c1m1r1a2\u0026quot;}\"\u003e \u003cli id=\"c-uhff-footer_sitemap\"\u003e \u003ca class=\"c-uhff-link\" href=\"https://www.microsoft.com/en-us/sitemap1.aspx\" data-mscc-ic=\"false\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Sitemap_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n1c8c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:1,\u0026quot;aN\u0026quot;:\u0026quot;c8c1c1m1r1a2\u0026quot;}\"\u003eSitemap\u003c/a\u003e \u003c/li\u003e \u003cli id=\"c-uhff-footer_contactus\"\u003e \u003ca class=\"c-uhff-link\" href=\"https://support.microsoft.com/contactus\" data-mscc-ic=\"false\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_ContactUs_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n2c8c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:2,\u0026quot;aN\u0026quot;:\u0026quot;c8c1c1m1r1a2\u0026quot;}\"\u003eContact Microsoft\u003c/a\u003e \u003c/li\u003e \u003cli id=\"c-uhff-footer_privacyandcookies\"\u003e \u003ca class=\"c-uhff-link\" href=\"https://go.microsoft.com/fwlink/?LinkId=521839\" data-mscc-ic=\"false\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_PrivacyandCookies_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n3c8c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:3,\u0026quot;aN\u0026quot;:\u0026quot;c8c1c1m1r1a2\u0026quot;}\"\u003ePrivacy \u003c/a\u003e \u003c/li\u003e \u003cli class=\"x-hidden\" id=\"c-uhff-footer_managecookies\"\u003e \u003ca class=\"c-uhff-link\" href=\"javascript:manageConsent();\" onClick=\"javascript:manageConsent(); return false;\" data-mscc-ic=\"false\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_ManageCookies_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n4c8c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:4,\u0026quot;aN\u0026quot;:\u0026quot;c8c1c1m1r1a2\u0026quot;}\"\u003eManage cookies\u003c/a\u003e \u003c/li\u003e \u003cli id=\"c-uhff-footer_termsofuse\"\u003e \u003ca class=\"c-uhff-link\" href=\"https://go.microsoft.com/fwlink/?LinkID=206977\" data-mscc-ic=\"false\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_TermsOfUse_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n5c8c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:5,\u0026quot;aN\u0026quot;:\u0026quot;c8c1c1m1r1a2\u0026quot;}\"\u003eTerms of use\u003c/a\u003e \u003c/li\u003e \u003cli id=\"c-uhff-footer_trademarks\"\u003e \u003ca class=\"c-uhff-link\" href=\"https://go.microsoft.com/fwlink/?linkid=2196228\" data-mscc-ic=\"false\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_Trademarks_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n6c8c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:6,\u0026quot;aN\u0026quot;:\u0026quot;c8c1c1m1r1a2\u0026quot;}\"\u003eTrademarks\u003c/a\u003e \u003c/li\u003e \u003cli id=\"c-uhff-footer_safetyandeco\"\u003e \u003ca class=\"c-uhff-link\" href=\"https://go.microsoft.com/fwlink/?linkid=2196227\" data-mscc-ic=\"false\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_SafetyAndEco_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n7c8c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:7,\u0026quot;aN\u0026quot;:\u0026quot;c8c1c1m1r1a2\u0026quot;}\"\u003eSafety \u0026amp; eco\u003c/a\u003e \u003c/li\u003e \u003cli id=\"c-uhff-footer_aboutourads\"\u003e \u003ca class=\"c-uhff-link\" href=\"https://choice.microsoft.com\" data-mscc-ic=\"false\" data-m=\"{\u0026quot;cN\u0026quot;:\u0026quot;Footer_AboutourAds_nav\u0026quot;,\u0026quot;id\u0026quot;:\u0026quot;n8c8c1c1m1r1a2\u0026quot;,\u0026quot;sN\u0026quot;:8,\u0026quot;aN\u0026quot;:\u0026quot;c8c1c1m1r1a2\u0026quot;}\"\u003eAbout our ads\u003c/a\u003e \u003c/li\u003e \u003cli\u003e© Microsoft 2024\u003c/li\u003e \u003c/ul\u003e \u003c/nav\u003e \u003c/div\u003e \u003c/footer\u003e"}},"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/NavbarDropdownToggle\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/QueryHandler\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/QueryHandler-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageCoverImage\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageCoverImage-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeTitle\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeTitle-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageTimeToRead\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageTimeToRead-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageSubject\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageSubject-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserLink\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserLink-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserRank\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserRank-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageTime\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageTime-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageBody\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageBody-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageCustomFields\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageCustomFields-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageRevision\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageRevision-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageReplyButton\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageReplyButton-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageAuthorBio\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageAuthorBio-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserAvatar\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/ranks/UserRankLabel\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/ranks/UserRankLabel-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserRegistrationDate\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserRegistrationDate-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeAvatar\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeAvatar-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeDescription\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeDescription-1737115705000"}],"cachedText({\"lastModified\":\"1737115705000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeIcon\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1737115705000"}]},"CachedAsset:pages-1739785329050":{"__typename":"CachedAsset","id":"pages-1739785329050","value":[{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"BlogViewAllPostsPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId/all-posts/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"CasePortalPage","type":"CASE_PORTAL","urlPath":"/caseportal","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"CreateGroupHubPage","type":"GROUP_HUB","urlPath":"/groups/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"CaseViewPage","type":"CASE_DETAILS","urlPath":"/case/:caseId/:caseNumber","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"InboxPage","type":"COMMUNITY","urlPath":"/inbox","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"HelpFAQPage","type":"COMMUNITY","urlPath":"/help","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"IdeaMessagePage","type":"IDEA_POST","urlPath":"/idea/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"IdeaViewAllIdeasPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/all-ideas/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"LoginPage","type":"USER","urlPath":"/signin","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"BlogPostPage","type":"BLOG","urlPath":"/category/:categoryId/blogs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"UserBlogPermissions.Page","type":"COMMUNITY","urlPath":"/c/user-blog-permissions/page","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"ThemeEditorPage","type":"COMMUNITY","urlPath":"/designer/themes","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"TkbViewAllArticlesPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId/all-articles/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1730142000000,"localOverride":null,"page":{"id":"AllEvents","type":"CUSTOM","urlPath":"/Events","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"OccasionEditPage","type":"EVENT","urlPath":"/event/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"OAuthAuthorizationAllowPage","type":"USER","urlPath":"/auth/authorize/allow","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"PageEditorPage","type":"COMMUNITY","urlPath":"/designer/pages","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"PostPage","type":"COMMUNITY","urlPath":"/category/:categoryId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"ForumBoardPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"TkbBoardPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"EventPostPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"UserBadgesPage","type":"COMMUNITY","urlPath":"/users/:login/:userId/badges","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"GroupHubMembershipAction","type":"GROUP_HUB","urlPath":"/membership/join/:nodeId/:membershipType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"IdeaReplyPage","type":"IDEA_REPLY","urlPath":"/idea/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"UserSettingsPage","type":"USER","urlPath":"/mysettings/:userSettingsTab","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"GroupHubsPage","type":"GROUP_HUB","urlPath":"/groups","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"ForumPostPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"OccasionRsvpActionPage","type":"OCCASION","urlPath":"/event/:boardId/:messageSubject/:messageId/rsvp/:responseType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"VerifyUserEmailPage","type":"USER","urlPath":"/verifyemail/:userId/:verifyEmailToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"AllOccasionsPage","type":"OCCASION","urlPath":"/category/:categoryId/events/:boardId/all-events/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"EventBoardPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"TkbReplyPage","type":"TKB_REPLY","urlPath":"/kb/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"IdeaBoardPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"CommunityGuideLinesPage","type":"COMMUNITY","urlPath":"/communityguidelines","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"CaseCreatePage","type":"SALESFORCE_CASE_CREATION","urlPath":"/caseportal/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"TkbEditPage","type":"TKB","urlPath":"/kb/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"ForgotPasswordPage","type":"USER","urlPath":"/forgotpassword","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"IdeaEditPage","type":"IDEA","urlPath":"/idea/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"TagPage","type":"COMMUNITY","urlPath":"/tag/:tagName","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"BlogBoardPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"OccasionMessagePage","type":"OCCASION_TOPIC","urlPath":"/event/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"ManageContentPage","type":"COMMUNITY","urlPath":"/managecontent","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"ClosedMembershipNodeNonMembersPage","type":"GROUP_HUB","urlPath":"/closedgroup/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"CommunityPage","type":"COMMUNITY","urlPath":"/","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"ForumMessagePage","type":"FORUM_TOPIC","urlPath":"/discussions/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"IdeaPostPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1730142000000,"localOverride":null,"page":{"id":"CommunityHub.Page","type":"CUSTOM","urlPath":"/Directory","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"BlogMessagePage","type":"BLOG_ARTICLE","urlPath":"/blog/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"RegistrationPage","type":"USER","urlPath":"/register","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"EditGroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"ForumEditPage","type":"FORUM","urlPath":"/discussions/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"ResetPasswordPage","type":"USER","urlPath":"/resetpassword/:userId/:resetPasswordToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1730142000000,"localOverride":null,"page":{"id":"AllBlogs.Page","type":"CUSTOM","urlPath":"/blogs","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"TkbMessagePage","type":"TKB_ARTICLE","urlPath":"/kb/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"BlogEditPage","type":"BLOG","urlPath":"/blog/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"ManageUsersPage","type":"USER","urlPath":"/users/manage/:tab?/:manageUsersTab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"ForumReplyPage","type":"FORUM_REPLY","urlPath":"/discussions/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"PrivacyPolicyPage","type":"COMMUNITY","urlPath":"/privacypolicy","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"NotificationPage","type":"COMMUNITY","urlPath":"/notifications","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"UserPage","type":"USER","urlPath":"/users/:login/:userId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"OccasionReplyPage","type":"OCCASION_REPLY","urlPath":"/event/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"ManageMembersPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/manage/:tab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"SearchResultsPage","type":"COMMUNITY","urlPath":"/search","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"BlogReplyPage","type":"BLOG_REPLY","urlPath":"/blog/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"GroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"TermsOfServicePage","type":"COMMUNITY","urlPath":"/termsofservice","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"CategoryPage","type":"CATEGORY","urlPath":"/category/:categoryId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"ForumViewAllTopicsPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/all-topics/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"TkbPostPage","type":"TKB","urlPath":"/category/:categoryId/kbs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1739785329050,"localOverride":null,"page":{"id":"GroupHubPostPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"}],"localOverride":false},"CachedAsset:text:en_US-components/context/AppContext/AppContextProvider-0":{"__typename":"CachedAsset","id":"text:en_US-components/context/AppContext/AppContextProvider-0","value":{"noCommunity":"Cannot find community","noUser":"Cannot find current user","noNode":"Cannot find node with id {nodeId}","noMessage":"Cannot find message with id {messageId}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-0":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-0","value":{"title":"Loading..."},"localOverride":false},"User:user:-1":{"__typename":"User","id":"user:-1","uid":-1,"login":"Deleted","email":"","avatar":null,"rank":null,"kudosWeight":1,"registrationData":{"__typename":"RegistrationData","status":"ANONYMOUS","registrationTime":null,"confirmEmailStatus":false,"registrationAccessLevel":"VIEW","ssoRegistrationFields":[]},"ssoId":null,"profileSettings":{"__typename":"ProfileSettings","dateDisplayStyle":{"__typename":"InheritableStringSettingWithPossibleValues","key":"layout.friendly_dates_enabled","value":"false","localValue":"true","possibleValues":["true","false"]},"dateDisplayFormat":{"__typename":"InheritableStringSetting","key":"layout.format_pattern_date","value":"MMM dd yyyy","localValue":"MM-dd-yyyy"},"language":{"__typename":"InheritableStringSettingWithPossibleValues","key":"profile.language","value":"en-US","localValue":"en","possibleValues":["en-US"]}},"deleted":false},"Theme:customTheme1":{"__typename":"Theme","id":"customTheme1"},"Category:category:RegionalBlogs":{"__typename":"Category","id":"category:RegionalBlogs","entityType":"CATEGORY","displayId":"RegionalBlogs","nodeType":"category","depth":3,"title":"Regional Blogs","shortTitle":"Regional Blogs","parent":{"__ref":"Category:category:solutions"}},"Category:category:top":{"__typename":"Category","id":"category:top","displayId":"top","nodeType":"category","depth":0,"title":"Top","entityType":"CATEGORY","shortTitle":"Top"},"Category:category:communities":{"__typename":"Category","id":"category:communities","displayId":"communities","nodeType":"category","depth":1,"parent":{"__ref":"Category:category:top"},"title":"Communities","entityType":"CATEGORY","shortTitle":"Communities"},"Category:category:solutions":{"__typename":"Category","id":"category:solutions","displayId":"solutions","nodeType":"category","depth":2,"parent":{"__ref":"Category:category:communities"},"title":"Topics","entityType":"CATEGORY","shortTitle":"Topics"},"Blog:board:DesenvolvedoresBR":{"__typename":"Blog","id":"board:DesenvolvedoresBR","entityType":"BLOG","displayId":"DesenvolvedoresBR","nodeType":"board","depth":4,"conversationStyle":"BLOG","title":"Desenvolvedores BR","description":"","avatar":null,"profileSettings":{"__typename":"ProfileSettings","language":null},"parent":{"__ref":"Category:category:RegionalBlogs"},"ancestors":{"__typename":"CoreNodeConnection","edges":[{"__typename":"CoreNodeEdge","node":{"__ref":"Community:community:gxcuf89792"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:communities"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:solutions"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:RegionalBlogs"}}]},"userContext":{"__typename":"NodeUserContext","canAddAttachments":false,"canUpdateNode":false,"canPostMessages":false,"isSubscribed":false},"boardPolicies":{"__typename":"BoardPolicies","canPublishArticleOnCreate":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","key":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","args":[]}}},"shortTitle":"Desenvolvedores BR","repliesProperties":{"__typename":"RepliesProperties","sortOrder":"REVERSE_PUBLISH_TIME","repliesFormat":"threaded"},"tagProperties":{"__typename":"TagNodeProperties","tagsEnabled":{"__typename":"PolicyResult","failureReason":null}},"requireTags":false,"tagType":"PRESET_ONLY"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/cmstNC05WEo0blc\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/cmstNC05WEo0blc","height":512,"width":512,"mimeType":"image/png"},"Rank:rank:4":{"__typename":"Rank","id":"rank:4","position":5,"name":"Microsoft","color":"333333","icon":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/cmstNC05WEo0blc\"}"},"rankStyle":"OUTLINE"},"User:user:1171673":{"__typename":"User","id":"user:1171673","uid":1171673,"login":"wdossantos","deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0xMTcxNjczLTMyNTM2MGkwNjkyMDE1OTQ0RkQ5MTM0"},"rank":{"__ref":"Rank:rank:4"},"email":"","messagesCount":19,"biography":null,"topicsCount":13,"kudosReceivedCount":69,"kudosGivenCount":45,"kudosWeight":1,"registrationData":{"__typename":"RegistrationData","status":null,"registrationTime":"2021-09-30T12:29:41.220-07:00","confirmEmailStatus":null},"followersCount":null,"solutionsCount":0},"BlogTopicMessage:message:4276402":{"__typename":"BlogTopicMessage","uid":4276402,"subject":"Azure Open IA, acelerando nossos caminhos.","id":"message:4276402","revisionNum":5,"repliesCount":0,"author":{"__ref":"User:user:1171673"},"depth":0,"hasGivenKudo":false,"board":{"__ref":"Blog:board:DesenvolvedoresBR"},"conversation":{"__ref":"Conversation:conversation:4276402"},"messagePolicies":{"__typename":"MessagePolicies","canPublishArticleOnEdit":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.forums.policy_can_publish_on_edit_workflow_action.accessDenied","key":"error.lithium.policies.forums.policy_can_publish_on_edit_workflow_action.accessDenied","args":[]}},"canModerateSpamMessage":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.feature.moderation_spam.action.moderate_entity.allowed.accessDenied","key":"error.lithium.policies.feature.moderation_spam.action.moderate_entity.allowed.accessDenied","args":[]}}},"contentWorkflow":{"__typename":"ContentWorkflow","state":"PUBLISH","scheduledPublishTime":null,"scheduledTimezone":null,"userContext":{"__typename":"MessageWorkflowContext","canSubmitForReview":null,"canEdit":false,"canRecall":null,"canSubmitForPublication":null,"canReturnToAuthor":null,"canPublish":null,"canReturnToReview":null,"canSchedule":null},"shortScheduledTimezone":null},"readOnly":false,"editFrozen":false,"moderationData":{"__ref":"ModerationData:moderation_data:4276402"},"teaser":"\u003cP\u003e\u003cSPAN\u003eHá algum tempo temos ouvido falar sobre o OpenAI, que se tornou um dos temas mais requisitados da atualidade. É comum sentirmos o desejo de testar suas funcionalidades, porém, surge a dúvida de por onde começar e como fazê-lo sem comprometer a confidencialidade de nossos dados.\u003c/SPAN\u003e\u003c/P\u003e\n\u003cDIV id=\"lia-teaserTinyMceEditorwdossantos_0\" class=\"mceNonEditable lia-copypaste-placeholder\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-medium\" data-image-alt=\"wdossantos_1-1729596195927.png\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image wdossantos_1-1729596195927.png\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NGk2REU3REY4M0IwOTg3MDYw?image-dimensions=450x450\u0026amp;revision=5\" alt=\"wdossantos_1-1729596195927.png\" /\u003e\u003c/button\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e","body":"\u003cDIV class=\"markdown-heading\" dir=\"auto\"\u003e\n\u003cH1 class=\"heading-element\" dir=\"auto\" data-sourcepos=\"1:1-1:44\" id=\"community-4276402-toc-hId--1216694888\"\u003eAzure Open IA, acelerando nossos caminhos.\u003c/H1\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cA id=\"user-content-azure-open-ia-acelerando-nossos-caminhos\" class=\"anchor\" href=\"https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#azure-open-ia-acelerando-nossos-caminhos\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Permalink: Azure Open IA, acelerando nossos caminhos.\"\u003e\u003c/A\u003e\u003c/DIV\u003e\n\u003cP data-sourcepos=\"3:1-3:284\"\u003eHá algum tempo temos ouvido falar sobre o OpenAI, que se tornou um dos temas mais requisitados da atualidade. É comum sentirmos o desejo de testar suas funcionalidades, porém, surge a dúvida de por onde começar e como fazê-lo sem comprometer a confidencialidade de nossos dados.\u003c/P\u003e\n\u003cP data-sourcepos=\"3:1-3:284\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"5:1-5:615\"\u003eO caminho que vou apresentar aqui envolve o uso de um acelerador do Azure para o OpenAI\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cA href=\"https://github.com/Azure-Samples/azure-search-openai-demo\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eazure-search-openai-demo\u003c/A\u003e, ele nos auxiliará desde a configuração da infraestrutura até a implementação de aplicações de exemplo. Fiquei impressionado com a facilidade de uso, a estratégia de usar o “azd” facilitou muito as coisas, veja como instalar aqui\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cA href=\"https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd?tabs=winget-windows%2Cbrew-mac%2Cscript-linux\u0026amp;pivots=os-windows\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eInstall the Azure Developer CLI | Microsoft Learn\u003c/A\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"7:1-7:175\"\u003eBasta executar alguns comandos e pronto, o ambiente estará todo configurado no Azure. Eu apenas criei uma nova pasta sem clonar nenhum repositório e executei esses comandos.\u003c/P\u003e\n\u003cP data-sourcepos=\"7:1-7:175\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-powershell notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003eazd init \u003cSPAN class=\"pl-k\"\u003e-\u003c/SPAN\u003et azure\u003cSPAN class=\"pl-k\"\u003e-\u003c/SPAN\u003e\u003cSPAN class=\"pl-c1\"\u003esearch-openai\u003c/SPAN\u003e\u003cSPAN class=\"pl-k\"\u003e-\u003c/SPAN\u003edemo \nazd auth login \nazd up\u003c/PRE\u003e\n\u003c/DIV\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e1-)\u0026nbsp;azd init -t azure-search-openai-demo\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"azd init -t azure-search-openai-demo\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image azd init -t azure-search-openai-demo\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NWk5RTk5MkM4REZCOThDQzNB?image-dimensions=750x750\u0026amp;revision=5\" alt=\"azd init -t azure-search-openai-demo\" /\u003e\u003c/button\u003e\u003cspan class=\"lia-media-caption-text\"\u003eazd init -t azure-search-openai-demo\u003c/span\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"17:1-17:36\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"17:1-17:36\"\u003e2-)\u0026nbsp;azd auth login\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"17:1-17:36\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"azd auth login\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image azd auth login\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NmlFN0VGQjFFQ0UzMDg2QjJF?image-dimensions=750x750\u0026amp;revision=5\" alt=\"azd auth login\" /\u003e\u003c/button\u003e\u003cspan class=\"lia-media-caption-text\"\u003eazd auth login\u003c/span\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"21:1-22:94\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"21:1-22:94\"\u003e3-)\u0026nbsp;azd up\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"azd up\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image azd up\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1N2k2OEZBNjIxMEQ1NTY5RThE?image-dimensions=750x750\u0026amp;revision=5\" alt=\"azd up\" /\u003e\u003c/button\u003e\u003cspan class=\"lia-media-caption-text\"\u003eazd up\u003c/span\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"24:1-24:6\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"24:1-24:6\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"26:1-26:82\"\u003eAo fim da execução de mais ou menos 30 minutos, pude ver esses recursos criados:\u003c/P\u003e\n\u003cP data-sourcepos=\"26:1-26:82\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"Lista de recursos criados\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image Lista de recursos criados\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1OGkyQTQyOEM4ODAwODk2OTMx?image-dimensions=750x750\u0026amp;revision=5\" alt=\"Lista de recursos criados\" /\u003e\u003c/button\u003e\u003cspan class=\"lia-media-caption-text\"\u003eLista de recursos criados\u003c/span\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"30:1-30:24\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"30:1-30:24\"\u003eVisualizador de Recursos:\u003c/P\u003e\n\u003cP data-sourcepos=\"30:1-30:24\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"30:1-30:24\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"Mapa dos recursos\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image Mapa dos recursos\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1OWk0MzVGNzQ0RkZDM0I3ODk5?image-dimensions=750x750\u0026amp;revision=5\" alt=\"Mapa dos recursos\" /\u003e\u003c/button\u003e\u003cspan class=\"lia-media-caption-text\"\u003eMapa dos recursos\u003c/span\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"34:1-34:26\"\u003eA aplicação nasce pronta:\u003c/P\u003e\n\u003cP data-sourcepos=\"34:1-34:26\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"Aplicação de exemplo do acelerador\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image Aplicação de exemplo do acelerador\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2MGkyMDc4RjkzQzc5QTM4QkJC?image-dimensions=750x750\u0026amp;revision=5\" alt=\"Aplicação de exemplo do acelerador\" /\u003e\u003c/button\u003e\u003cspan class=\"lia-media-caption-text\"\u003eAplicação de exemplo do acelerador\u003c/span\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"38:1-38:191\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"38:1-38:191\"\u003eArquivos criados ao rodar o comando azd init -t azure-search-openai-demo:\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"Arquivos criados ao rodar o comando azd init -t azure-search-openai-demo\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image Arquivos criados ao rodar o comando azd init -t azure-search-openai-demo\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2MWlCQzQ3MjkyOTg5REFFQkY4?image-dimensions=750x750\u0026amp;revision=5\" alt=\"Arquivos criados ao rodar o comando azd init -t azure-search-openai-demo\" /\u003e\u003c/button\u003e\u003cspan class=\"lia-media-caption-text\"\u003eArquivos criados ao rodar o comando azd init -t azure-search-openai-demo\u003c/span\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"42:1-42:72\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"42:1-42:72\"\u003eBasta fazer as perguntas. Inclusive, uma série de documentos de exemplo foram adicionados à solução, os quais podem ser encontrados na pasta local “data” ou no armazenamento do Azure.\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"wdossantos_33-1729596822623.png\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image wdossantos_33-1729596822623.png\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2Mmk5M0M2QUQ0M0FCQTA1MEQ4?image-dimensions=750x750\u0026amp;revision=5\" alt=\"wdossantos_33-1729596822623.png\" /\u003e\u003c/button\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"46:1-46:647\"\u003eO próximo passo será trabalhar com a ingestão de dados. Existe um guia na própria documentação do acelerador intitulado\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cA href=\"https://github.com/Azure-Samples/azure-search-openai-demo/blob/main/docs/data_ingestion.md\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eIndexing documents for the Chat App\u003c/A\u003e. Para começar, vou fazer o upload de um artigo meu do blog, chamado “\u003cA href=\"https://medium.com/escalando-nodes-e-escalando-pods-s%C3%A3o-dois-conceitos-diferentes-no-contexto-do-aks-b7582b4b209e\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"\u003eEscalando nodes e escalando e pods no AKS. | by Wilson Santos | Medium\u003c/A\u003e”, para isso, basta gerar um PDF e colocar o arquivo dentro da pasta “data” do acelerador, diretamente na sua máquina local.\u003c/P\u003e\n\u003cP data-sourcepos=\"46:1-46:647\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"48:1-48:127\"\u003eApós isso, você irá executar um pequeno script em PowerShell chamado “prepdoc”. O comando para executá-lo é o seguinte\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-powershell notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003e.\\\\scripts\\\\prepdocs.ps1\u003c/PRE\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"54:1-54:73\"\u003eAssim que terminar de rodar podemos fazer perguntas sobre esse conteúdo.\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"wdossantos_34-1729596859679.png\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image wdossantos_34-1729596859679.png\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2M2lDMEU4OEY0MDQ5MzQxMDdG?image-dimensions=750x750\u0026amp;revision=5\" alt=\"wdossantos_34-1729596859679.png\" /\u003e\u003c/button\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"58:1-58:147\"\u003eO acelerador traz uma implementação em React e python e podemos estudar como ela funciona usando esse código que fica na pasta app do acelerador\u003c/P\u003e\n\u003cP data-sourcepos=\"60:1-60:221\"\u003eTemos um front em React e um backend em Python, mas caso você esteja acostumado com C# que é o meu caso, nada melhor que explorar os SDKS do\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eAzure.AI.OpenAI\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003ee o\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eSemanticKernel\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003eque eu estou apresentando a seguir.\u003c/P\u003e\n\u003cP data-sourcepos=\"60:1-60:221\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"markdown-heading\" dir=\"auto\"\u003e\n\u003cH2 class=\"heading-element\" dir=\"auto\" data-sourcepos=\"62:1-62:30\" id=\"community-4276402-toc-hId--526133414\"\u003eNada melhor que “codar” para entender melhor as coisas!\u003c/H2\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cA id=\"user-content-nada-melhor-que-codar\" class=\"anchor\" href=\"https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#nada-melhor-que-codar\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Permalink: Nada melhor que “codar”\"\u003e\u003c/A\u003e\u003c/DIV\u003e\n\u003cP data-sourcepos=\"64:1-64:341\"\u003e\u003cSPAN\u003eAgora, vamos criar um pequeno programa em .NET Core Console que aproveitará toda a infraestrutura criada pelo acelerador. Este programa será capaz de fazer perguntas ao Azure Open AI e, além disso, responderá com base nos documentos que forem atualizados na base de conhecimento. Para isso, utilizaremos o pacote\u0026nbsp;\u003c/SPAN\u003e\u003cCODE\u003eAzure.AI.OpenAI\u003c/CODE\u003e\u003cSPAN\u003e. No meu exemplo, estou utilizando a versão 2.0.0.\u003c/SPAN\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"64:1-64:341\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-powershell notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003e\u003cSPAN class=\"pl-c1\"\u003einstall-package\u003c/SPAN\u003e Azure.AI.OpenAI\u003c/PRE\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"70:1-70:59\"\u003ePrimeiro passo vamos criar um client da classe \u003cSTRONG\u003eAzureOpenAIClient:\u003c/STRONG\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"70:1-70:59\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-powershell notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003eAzureOpenAIClient azureClient = new(endpoint, credential);\u003c/code\u003e\u003c/pre\u003e\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"76:1-76:151\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"76:1-76:151\"\u003ePara as credenciais e o endpoint, utilizamos uma chave do recurso que pode ser obtida na seção “Keys and Endpoint” da instância do Azure OpenAI.\u003c/P\u003e\n\u003cP data-sourcepos=\"76:1-76:151\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"wdossantos_35-1729596914646.png\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image wdossantos_35-1729596914646.png\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2NWlERUYxOEJDNjhEM0FFRkY4?image-dimensions=750x750\u0026amp;revision=5\" alt=\"wdossantos_35-1729596914646.png\" /\u003e\u003c/button\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-powershell notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003e var credential = new AzureKeyCredential(\"...\");\u003c/code\u003e\u003c/pre\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"84:1-84:156\"\u003eDepois, vamos criar uma instancia da classe chamada\u003cSTRONG\u003e SearchClient\u003c/STRONG\u003e. Essa classe ajudará na conexão com o serviço de busca (Search service).\u003c/P\u003e\n\u003cP data-sourcepos=\"84:1-84:156\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"86:1-86:11\"\u003ealgo assim:\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003evar searchEndpoint = new Uri(\"...\");\nvar searchCredential = new AzureKeyCredential(\"...\");\nvar indexName = \"gptkbindex\";\nvar searchClient = new SearchClient(searchEndpoint, indexName, searchCredential);\nvar searchOptions = new SearchOptions\n{\n Size = 5 // Número de documentos a recuperar\n};\nvar searchResults = searchClient.Search\u0026lt;SearchDocument\u0026gt;(text, searchOptions);\nvar retrievedDocuments = searchResults.Value.GetResults().Select(result =\u0026gt; result.Document[\"content\"].ToString());\nvar context = string.Join(\"\\n\", retrievedDocuments);\u003c/code\u003e\u003c/pre\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"99:1-99:197\"\u003eA classe \u003cSTRONG\u003eSearchClient\u003c/STRONG\u003e também requer o uso de uma chave de segurança. Para encontrá-la, acessamos a instância do serviço de busca (Search service) na seção “Keys”\u003c/P\u003e\n\u003cP data-sourcepos=\"99:1-99:197\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"wdossantos_36-1729596964770.png\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image wdossantos_36-1729596964770.png\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2Nmk0MTM3RDdFNjc3OTBDMjNB?image-dimensions=750x750\u0026amp;revision=5\" alt=\"wdossantos_36-1729596964770.png\" /\u003e\u003c/button\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"103:1-103:27\"\u003eo endpoint esta em overview\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"wdossantos_37-1729596995296.png\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image wdossantos_37-1729596995296.png\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2N2lGMUQ1QUE2RUQ5MTQyQTI3?image-dimensions=750x750\u0026amp;revision=5\" alt=\"wdossantos_37-1729596995296.png\" /\u003e\u003c/button\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"107:1-107:383\"\u003eAgora vamos criar uma instancia da classe\u003cSTRONG\u003e ChatClient\u003c/STRONG\u003e, que será responsável por fazer perguntas para o OpenAI, e passar o prompt para o Azure openIA.\u003c/P\u003e\n\u003cP data-sourcepos=\"107:1-107:383\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"107:1-107:383\"\u003eE aqui que está \u003cSTRONG\u003eo grande segredo do RAG\u003c/STRONG\u003e, tudo é prompt, pegamos o resultado da busca do \u003cSTRONG\u003eSearchClient\u0026nbsp;\u003c/STRONG\u003eque está na variável\u0026nbsp;\u003cSTRONG\u003econtext\u003c/STRONG\u003e e juntamos no prompt.\u003c/P\u003e\n\u003cP data-sourcepos=\"107:1-107:383\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003evar prompt = $\"Contexto: {context}\\nPergunta: {text}\";\nChatClient chatClient = await azureClient.CompleteChatAsync(\"gpt-4o\");\nChatCompletion completion = chatClient.CompleteChat(new List\u0026lt;ChatMessage\u0026gt;\n{\nnew SystemChatMessage(\"Você é um assistente atencioso\"),\nnew UserChatMessage(prompt),\n\n});\u003c/code\u003e\u003c/pre\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"130:1-130:265\"\u003ePara obter o valor do campo\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eDeploymentName\u003c/STRONG\u003e, no meu caso o gpt-4o, você pode encontrá-lo na instância do OpenAI. Basta abrir os “Model deployments”, clicar em “Management deployment”. Isso abrirá o \u003cSTRONG\u003eAzure OpenAI Studio\u003c/STRONG\u003e, onde você poderá visualizar os modelos implantados.\u003c/P\u003e\n\u003cP data-sourcepos=\"130:1-130:265\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"wdossantos_0-1730489069431.png\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image wdossantos_0-1730489069431.png\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU1N2lEOTc4NTU3QUM0RjcyQzlC?image-dimensions=750x750\u0026amp;revision=5\" alt=\"wdossantos_0-1730489069431.png\" /\u003e\u003c/button\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"134:1-134:116\"\u003eos pacotes utilizados foram esses:\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-text-xml notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003e\u0026lt;PackageReference Include=\"Azure.AI.OpenAI\" Version=\"2.0.0\" /\u0026gt;\u003cBR /\u003e\u0026lt;PackageReference Include=\"Azure.Identity\" Version=\"1.13.1\" /\u0026gt;\u003cBR /\u003e\u0026lt;PackageReference Include=\"Azure.Search.Documents\" Version=\"11.4.0\" /\u0026gt;\u003c/PRE\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003eo Código final ficou assim:\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003eusing Azure;\nusing Azure.AI.OpenAI;\nusing Azure.Search.Documents;\nusing Azure.Search.Documents.Models;\nusing OpenAI.Chat;\n\n\npublic class Program\n{\n\n static async Task Main(string[] args)\n {\n while (true)\n {\n Console.WriteLine(\"Digite uma Pergunta\");\n var question = Console.ReadLine();\n if (question != null)\n {\n var result = await AskingChatCompletionWithSearchsAsync(question);\n Console.WriteLine(result);\n }\n\n }\n\n }\n\n static async Task\u0026lt;string\u0026gt; AskingChatCompletionWithSearchsAsync(string text)\n {\n\n var endpoint = new Uri(\"https://openiapriv02.openai.azure.com/\");\n var credential = new AzureKeyCredential(\"...\");\n AzureOpenAIClient azureClient = new(endpoint, credential);\n\n\n var searchEndpoint = new Uri(\"https://gptkb-kv4atymcdg6pg.search.windows.net\");\n var searchCredential = new AzureKeyCredential(\"...\");\n var indexName = \"gptkbindex\";\n var searchClient = new SearchClient(searchEndpoint, indexName, searchCredential);\n var searchOptions = new SearchOptions\n {\n Size = 5 // Número de documentos a recuperar\n };\n var searchResults = searchClient.Search\u0026lt;SearchDocument\u0026gt;(text, searchOptions);\n var retrievedDocuments = searchResults.Value.GetResults().Select(result =\u0026gt; result.Document[\"content\"].ToString());\n var context = string.Join(\"\\n\", retrievedDocuments);\n\n\n\n var prompt = $\"Contexto: {context}\\nPergunta: {text}\";\n ChatClient chatClient = azureClient.GetChatClient(\"gpt-4o\");\n ChatCompletion completion = await chatClient.CompleteChatAsync(new List\u0026lt;ChatMessage\u0026gt;\n {\n new SystemChatMessage(\"Você é um assistente atencioso\"),\n new UserChatMessage(prompt),\n\n });\n\n\n var result = $\"{completion.Role}: {completion.Content[0].Text}\";\n return result;\n }\n}\u003c/code\u003e\u003c/pre\u003e\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"179:1-179:86\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"179:1-179:86\"\u003efiz uma pergunta para o assistente com base em um documento que já veio de exemplo no acelerador o\u0026nbsp;Benefit_Options.pdf, perguntei\u0026nbsp;o \u003cSTRONG\u003eque é o programa Northwind Health Plus?.\u0026nbsp;\u003c/STRONG\u003eObserve que a resposta é dada com base nos documentos indexados no\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eSearch service\u003c/STRONG\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"179:1-179:86\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"wdossantos_1-1730489483583.png\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image wdossantos_1-1730489483583.png\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU2MGk3NjREMkRCNjRBODY5Mjg0?image-dimensions=750x750\u0026amp;revision=5\" alt=\"wdossantos_1-1730489483583.png\" /\u003e\u003c/button\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"markdown-heading\" dir=\"auto\"\u003e\n\u003cH2 class=\"heading-element\" dir=\"auto\" data-sourcepos=\"181:1-181:44\" id=\"community-4276402-toc-hId-1961379419\"\u003eMas o que são essas versões de modelos?\u003c/H2\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cA id=\"user-content-mas-o-que-são-essas-versões-de-modelos\" class=\"anchor\" href=\"https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#mas-o-que-s%C3%A3o-essas-vers%C3%B5es-de-modelos\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Permalink: Mas o que são essas versões de modelos?\"\u003e\u003c/A\u003e\u003c/DIV\u003e\n\u003cP data-sourcepos=\"183:1-183:147\"\u003eOs modelos são constantemente atualizados com novas características, as versões de modelo são a maneira de controlar essas mudanças do OpenAI.\u003c/P\u003e\n\u003cP data-sourcepos=\"183:1-183:147\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"185:1-185:604\"\u003eEm particular, os modelos\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eGPT-3.5 Turbo\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003ee\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eGPT-4\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003erecebem atualizações regulares com novos recursos. Por exemplo, as versões 0613 do GPT-3.5 Turbo e GPT-4 introduziram a chamada de função. A chamada de função é um recurso popular que permite ao modelo criar saídas estruturadas que podem ser usadas para chamar ferramentas externas. Fique atento aos modelos disponíveis para sua região quais modelos seu SDK suporta, saiba mais em\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cA href=\"https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/model-versions\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eAzure OpenAI Service model versions — Azure OpenAI | Microsoft Learn\u003c/A\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"185:1-185:604\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"markdown-heading\" dir=\"auto\"\u003e\n\u003cH2 class=\"heading-element\" dir=\"auto\" data-sourcepos=\"187:1-187:18\" id=\"community-4276402-toc-hId-153924956\"\u003eSemantic Kernel\u003c/H2\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cA id=\"user-content-semantic-kernel\" class=\"anchor\" href=\"https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#semantic-kernel\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Permalink: Semantic Kernel\"\u003e\u003c/A\u003e\u003c/DIV\u003e\n\u003cP data-sourcepos=\"189:1-189:568\"\u003eO Semantic Kernel é um SDK de código aberto projetado para integrar com o código existente. Ele suporta várias linguagens de programação, incluindo C#, Python e Java. Através de conectores e plugins, o Semantic Kernel permite adicionar inteligencia aos aplicativos. Sua flexibilidade permite aos desenvolvedores orquestrar o código existente sem se prender a um provedor específico de modelos de IA, proporcionando liberdade na escolha e combinação de serviços conforme as necessidades do projeto.\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cA href=\"https://github.com/microsoft/semantic-kernel\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eSaiba mais\u003c/A\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"189:1-189:568\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"191:1-191:209\"\u003eVamos fazer algumas implementações básicas, a começar por um chat básico sem RAG, é importante lembrar que alguns dos pacotes usados ainda estão em versões alpha não indicados para ambiente produtivo.\u003c/P\u003e\n\u003cP data-sourcepos=\"193:1-193:34\"\u003evamos começar a instalar o pacote\u003c/P\u003e\n\u003cP data-sourcepos=\"193:1-193:34\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-powershell notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003e\u003cSPAN class=\"pl-c1\"\u003einstall-pacakge\u003c/SPAN\u003e Microsoft.SemanticKernel\u003c/PRE\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"199:1-199:168\"\u003eAgora vamos criar uma representação do que o SDK chama de Kernel, essa representação já adiciona a injeção do Chat Completion da nossa instancia do Azure Open IA\u003c/P\u003e\n\u003cP data-sourcepos=\"199:1-199:168\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003e var builder = Kernel.CreateBuilder(); \n \n builder.AddAzureOpenAIChatCompletion( \n \"gpt-4o\", // Azure OpenAI Deployment Name \n \"https://wsopenia.openai.azure.com/\", // Azure OpenAI Endpoint \n \"...\"); // Azure OpenAI Key \n \n \n var kernel = builder.Build();\u003c/code\u003e\u003c/pre\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"213:1-213:516\"\u003eO prompt no Semantic Kernel é um template em formato texto que permite valorar variáveis, chamar funções e extrair valores, para isso usamos as chaves {{…}}. no nosso exemplo temos as variáveis history e input em uma estrutura que mostra para a IA quais informações são a entrada de usuário e quais são apenas instruções. para saber mais sobre prompt\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cA href=\"https://learn.microsoft.com/en-us/semantic-kernel/prompts/prompt-template-syntax\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eUsing the out-of-the-box prompt template language | Microsoft Learn\u003c/A\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"213:1-213:516\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003evar prompt = @\"Chat:{{$history}} User:{{$input}}\";\u003c/code\u003e\u003c/pre\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"219:1-219:131\"\u003eAgora usamos o método\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eCreateFunctionFromPrompt\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003eespecificando as configurações de prompt como\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eMaxTokens, Temperatura \u003c/STRONG\u003eetc\u003cSTRONG\u003e.\u003c/STRONG\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"219:1-219:131\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003e var kf = kernel.CreateFunctionFromPrompt(prompt, executionSettings: new OpenAIPromptExecutionSettings\n {\n MaxTokens = 500,\n ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions\n });\u003c/code\u003e\u003c/pre\u003e\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"227:1-227:73\"\u003ee usando a classe\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eKernelArguments\u003c/STRONG\u003e, passamos os valores das variáveis\u003c/P\u003e\n\u003cP data-sourcepos=\"227:1-227:73\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003evar arguments = new KernelArguments(); \narguments\\[\"input\"\\] = question; \narguments\\[\"history\"\\] = questionHistory;\u003c/code\u003e\u003c/pre\u003e\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"235:1-235:119\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"235:1-235:119\"\u003ea etapa final é chamar as funções \u003cSTRONG\u003eInvokeAsync\u003c/STRONG\u003e passando a instancia de “kf” e passando a instancia dos argumentos\u003c/P\u003e\n\u003cP data-sourcepos=\"235:1-235:119\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003evar result = await kernel.InvokeAsync(kf, arguments);\u003c/code\u003e\u003c/pre\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"241:1-241:37\"\u003eum exemplo de implementação é essa:\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003evar arguments = new KernelArguments();\nvar prompt = @\"Chat:{{$history}} User:{{$input}}\";\nvar kf = kernel.CreateFunctionFromPrompt(prompt, executionSettings: new OpenAIPromptExecutionSettings\n{\n MaxTokens = 500,\n ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions\n});\n\n\nvar questionHistory = \"\";\nwhile (true)\n{\n Console.WriteLine(\"Digite uma Pergunta\");\n\n var question = Console.ReadLine();\n\n\n // Add user input \n arguments[\"input\"] = question;\n\n var result = await kernel.InvokeAsync(kf, arguments);\n\n\n Console.WriteLine(\"result:\" + result);\n //Console.WriteLine(\"history:\" + questionHistory);\n\n questionHistory += \"Chat:\" + result + \"User:\" + question + \"\\n\";\n arguments[\"history\"] = questionHistory;\n}\u003c/code\u003e\u003c/pre\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003eaqui não temos RAG apenas o LLM respondendo a pergunta \"\u003cSTRONG\u003eo que é o Azure OpenIA\"\u003c/STRONG\u003e?\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"wdossantos_41-1729597143650.png\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image wdossantos_41-1729597143650.png\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3MWkyRTI3MEEyM0FFNUE4N0M5?image-dimensions=750x750\u0026amp;revision=5\" alt=\"wdossantos_41-1729597143650.png\" /\u003e\u003c/button\u003e\u003c/span\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cSPAN\u003ePacotes utilizados:\u003c/SPAN\u003e\u003c/P\u003e\n\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"271:1-271:18\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-text-xml notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003e\u0026lt;PackageReference Include=\"Microsoft.SemanticKernel\" Version=\"1.26.0\" /\u0026gt;\u003c/PRE\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cDIV class=\"markdown-heading\" dir=\"auto\"\u003e\n\u003cH2 class=\"heading-element\" dir=\"auto\" data-sourcepos=\"277:1-277:26\" id=\"community-4276402-toc-hId--1653529507\"\u003eSemantic é extensível\u003c/H2\u003e\n\u003cA id=\"user-content-semantic-é-extensível\" class=\"anchor\" href=\"https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#semantic-%C3%A9-extens%C3%ADvel\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Permalink: Semantic é extensível\"\u003e\u003c/A\u003e\u003c/DIV\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"281:1-281:300\"\u003eCom ele podemos usar os plugins para interagir com nosso código existente como por exemplo consultar pedidos em uma base de dados, e podemos usar os conectores para integrar com os serviços de IA, por exemplo o Azure openIA,\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cA href=\"https://learn.microsoft.com/en-us/semantic-kernel/overview/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003esaiba mais\u003c/A\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"283:1-283:60\"\u003eVou mostrar um exemplo de plugin, vou criar uma classe order:\u003c/P\u003e\n\u003cP data-sourcepos=\"283:1-283:60\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003epublic sealed class Order\n{\n [KernelFunction, Description(\"Show order details for number\")]\n public static string Sqrt([Description(\"The number to order details\")] double number1)\n {\n return $\"The detail about order {number1} is your current state is closed.\";\n }\n\n}\u003c/code\u003e\u003c/pre\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"297:1-297:79\"\u003eperceba que descrevemos seu comportamento usando um atributo\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eKernelFunction\u003c/STRONG\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"299:1-299:47\"\u003edepois eu vou adicionar esse plugin dessa forma:\u003c/P\u003e\n\u003cP data-sourcepos=\"299:1-299:47\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003evar builder = Kernel.CreateBuilder(); \nbuilder.Plugins.AddFromType\u0026lt;Order\u0026gt;();\u003c/code\u003e\u003c/pre\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"306:1-306:185\"\u003efeito isso podemos optar pela auto chamada configurando a classe\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eOpenAIPromptExecutionSettings\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003ecom propriedade\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eToolCallBehavior\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003esetada para o valor\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eAutoInvokeKernelFunctions\u003c/STRONG\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"306:1-306:185\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003e // Enable auto function calling \n OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new() \n { \n ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, \n };\u003c/code\u003e\u003c/pre\u003e\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"317:1-317:73\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"317:1-317:73\"\u003eo restante do código é o mesmo mas vou colocar um exemplo completo aqui:\u003c/P\u003e\n\u003cP data-sourcepos=\"317:1-317:73\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003evar builder = Kernel.CreateBuilder(); \n \nbuilder.AddAzureOpenAIChatCompletion( \n \"gpt-4o\", // Azure OpenAI Deployment Name \n \"https://cog-nggxeq6fpjnxg.openai.azure.com/\", // Azure OpenAI Endpoint \n \"...\"); // Azure OpenAI Key \n \nbuilder.Plugins.AddFromType\u0026lt;Order\u0026gt;(); \n \nvar arguments = new KernelArguments(); \nvar prompt = @\"Chat:{{$history}} User:{{$input}}\"; \nvar kf = kernel.CreateFunctionFromPrompt(prompt, executionSettings: new OpenAIPromptExecutionSettings \n{ \n MaxTokens = 500, \n ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions \n}); \n \n \nvar questionHistory = \"\"; \nwhile (true) \n{ \n Console.WriteLine(\"Digite uma Pergunta\"); \n var question = Console.ReadLine(); \n // Add user input \n arguments\\[\"input\"\\] = question; \n var result = await kernel.InvokeAsync(kf, arguments); \n Console.WriteLine(\"result:\" + result); \n \n questionHistory += \"Chat:\" + result + \"User:\" + question + \"\\\\n\"; \n arguments\\[\"history\"\\] = questionHistory; \n}\n\u003c/code\u003e\u003c/pre\u003e\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cSPAN\u003eObservem a mágica deste exemplo: com ele, podemos criar uma classe que controla os mecanismos de busca e, portanto, o conteúdo da resposta. No entanto, é o LLM que decide se a pergunta corresponde à descrição da classe e aciona o mecanismo. Esse recurso é chamado de 'function calling' e está disponível apenas nas versões mais recentes dos modelos, como o GPT-4.\u003c/SPAN\u003e\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"wdossantos_42-1729597207511.png\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image wdossantos_42-1729597207511.png\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3MmkwQzg2NTgxOUY1NDM2NDMw?image-dimensions=750x750\u0026amp;revision=5\" alt=\"wdossantos_42-1729597207511.png\" /\u003e\u003c/button\u003e\u003c/span\u003e\n\u003cP\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSPAN\u003econsole e execução respondendo a pergunta “Show order details for number 10”?\u003c/SPAN\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"356:1-356:18\"\u003epacotes utilizados:\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-text-xml notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003e\u0026nbsp;\u0026lt;PackageReference Include=\"Microsoft.SemanticKernel\" Version=\"1.26.0\" /\u0026gt;\u003c/PRE\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cDIV class=\"markdown-heading\" dir=\"auto\"\u003e\n\u003cH2 class=\"heading-element\" dir=\"auto\" data-sourcepos=\"362:1-362:28\" id=\"community-4276402-toc-hId-833983326\"\u003eMemorias usando IA Search\u003c/H2\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cA id=\"user-content-memorias-usando-ia-search\" class=\"anchor\" href=\"https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#memorias-usando-ia-search\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Permalink: Memorias usando IA Search\"\u003e\u003c/A\u003e\u003c/DIV\u003e\n\u003cP data-sourcepos=\"364:1-364:124\"\u003eAqui temos o uso de um conector e de um plugin, o conector vai adicionar accesso ao IA Search por meio dessa implementação:\u003c/P\u003e\n\u003cP data-sourcepos=\"364:1-364:124\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003evar memoryBuilder = new MemoryBuilder();\nmemoryBuilder.WithMemoryStore(new AzureAISearchMemoryStore(\n \"https://gptkb-nggxeq6fpjnxg.search.windows.net\",\n \"...\")\n);\u003c/code\u003e\u003c/pre\u003e\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cBLOCKQUOTE data-sourcepos=\"374:1-374:194\"\u003e\n\u003cP data-sourcepos=\"374:3-374:194\"\u003eAlem do pacote do\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eMicrosoft.SemanticKernel\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003eainda vamos precisar de mais dois pacotes o\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eMicrosoft.SemanticKernel.Connectors.AzureAISearch\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003ee o\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eMicrosoft.SemanticKernel.Plugins.Memory\u003c/STRONG\u003e\u003c/P\u003e\n\u003c/BLOCKQUOTE\u003e\n\u003cP data-sourcepos=\"376:1-376:114\"\u003eMas também precisamos do plugin\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eTextMemoryPlugin\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003epara acessar as memorias, mas ates de acessar vamos cria-las\u003c/P\u003e\n\u003cP data-sourcepos=\"378:1-378:41\"\u003ePara isso vamos usar essa implementação:\u003c/P\u003e\n\u003cP data-sourcepos=\"378:1-378:41\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003evar memory = memoryBuilder.Build(); \n \nconst string MemoryCollectionName = \"aboutMe\"; \n \nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info1\", text: \"My name is Andrea\"); \nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info2\", text: \"I currently work as a tourist operator\"); \nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info3\", text: \"I currently live in Seattle and have been living there since 2005\"); \nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info4\", text: \"I visited France and Italy five times since 2015\"); \nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info5\", text: \"My family is from New York\");\n\nkernel.ImportPluginFromObject(new TextMemoryPlugin(memory));\u003c/code\u003e\u003c/pre\u003e\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"392:1-392:62\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"392:1-392:62\"\u003eCom isso sera gerado um\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eindex\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003ena IA Search chamado aboutme\u003c/P\u003e\n\u003cP data-sourcepos=\"392:1-392:62\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"wdossantos_43-1729597236226.png\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image wdossantos_43-1729597236226.png\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3M2k4MUQ2MTE4MjU1MEE4MzQ2?image-dimensions=750x750\u0026amp;revision=5\" alt=\"wdossantos_43-1729597236226.png\" /\u003e\u003c/button\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"394:1-395:15\"\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003elista de indexs\u003c/P\u003e\n\u003cP data-sourcepos=\"394:1-395:15\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"wdossantos_44-1729597266492.png\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image wdossantos_44-1729597266492.png\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3NGlGMEY3MEQ1N0Y4NkYxMDgz?image-dimensions=750x750\u0026amp;revision=5\" alt=\"wdossantos_44-1729597266492.png\" /\u003e\u003c/button\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"397:1-398:15\"\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003eSearch explorer\u003c/P\u003e\n\u003cP data-sourcepos=\"397:1-398:15\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-medium\" data-image-alt=\"wdossantos_45-1729597299034.png\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image wdossantos_45-1729597299034.png\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3NmlBRjk0RjAxNDA5MUYyMEI4?image-dimensions=450x450\u0026amp;revision=5\" alt=\"wdossantos_45-1729597299034.png\" /\u003e\u003c/button\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"400:1-401:15\"\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003eCampos do index\u003c/P\u003e\n\u003cP data-sourcepos=\"400:1-401:15\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"403:1-403:121\"\u003eesse index foi gerado usando esse Text Embedding \u003cSTRONG\u003etext-embedding-ada-002\u003c/STRONG\u003e, que é um tipo de algoritmo de vetorização\u003c/P\u003e\n\u003cP data-sourcepos=\"403:1-403:121\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"wdossantos_0-1730492183235.png\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image wdossantos_0-1730492183235.png\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU4OWlEMjI0OTg0QTNDRkNBQTI1?image-dimensions=750x750\u0026amp;revision=5\" alt=\"wdossantos_0-1730492183235.png\" /\u003e\u003c/button\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"405:1-406:31\"\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003eDeployments Azure OpenAI Studio\u003c/P\u003e\n\u003cP data-sourcepos=\"408:1-408:24\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"408:1-408:24\"\u003ecom essa implementação temos a configuração da instancia do Azure openIA que irá fazer o embending das perguntas usando o modelo text-embedding-ada-002 :\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003e memoryBuilder.WithTextEmbeddingGeneration((loggerFactory, httpClient) =\u0026gt; {\n return new AzureOpenAITextEmbeddingGenerationService(\n \"text-embedding-ada-002\", // Embedding generation service name\n \"https://openiapriv02.openai.azure.com/\",\n \"...\",\n httpClient: httpClient,\n loggerFactory: loggerFactory\n );\n });\u003c/code\u003e\u003c/pre\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"417:1-417:193\"\u003epor fim para fazer as perguntas ao chat e receber resposta que vem desse index como se fossem uma lembrança do chat, mas antes precisamos enriquecer o prompt com essas informações algo assim:\u003c/P\u003e\n\u003cP data-sourcepos=\"417:1-417:193\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003e const string skPrompt = @\" \n ChatBot can have a conversation with you about any topic. \n It can give explicit instructions or say 'I don't know' if it does not have an answer. \n \n Information about me, from previous conversations: \n - {{$fact1}} {{recall $fact1}} \n - {{$fact2}} {{recall $fact2}} \n - {{$fact3}} {{recall $fact3}} \n - {{$fact4}} {{recall $fact4}} \n - {{$fact5}} {{recall $fact5}} \n \n Chat: \n {{$history}} \n User: {{$userInput}} \n ChatBot: \";\u003c/code\u003e\u003c/pre\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"437:1-437:50\"\u003eesses valores serão passados pelo KernelArguments:\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003e arguments\\[\"fact1\"\\] = \"What my name?\"; \n arguments\\[\"fact2\"\\] = \"where do I live?\"; \n arguments\\[\"fact3\"\\] = \"where is my family from?\"; \n arguments\\[\"fact4\"\\] = \"where have I travelled?\"; \n arguments\\[\"fact5\"\\] = \"what do I do for work?\";\u003c/code\u003e\u003c/pre\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"447:1-447:31\"\u003eveja a implementação completa:\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cpre class=\"lia-code-sample language-csharp\"\u003e\u003ccode\u003evar builder = Kernel.CreateBuilder();\n\nbuilder.AddAzureOpenAIChatCompletion(\n \"gpt-35-turbo\", // Azure OpenAI Deployment Name\n \"https://cog-nggxeq6fpjnxg.openai.azure.com/\", // Azure OpenAI Endpoint\n \"...\"); // Azure OpenAI Key\n\n\nvar kernel = builder.Build();\n\n#pragma warning disable SKEXP0001, SKEXP0010, SKEXP0050, SKEXP0020\n\nvar memoryBuilder = new MemoryBuilder();\n\n\nmemoryBuilder.WithTextEmbeddingGeneration((loggerFactory, httpClient) =\u0026gt; {\n return new AzureOpenAITextEmbeddingGenerationService(\n \"text-embedding-ada-002\", // Embedding generation service name\n \"https://openiapriv02.openai.azure.com/\",\n \"...\",\n httpClient: httpClient,\n loggerFactory: loggerFactory\n );\n});\n\n\nmemoryBuilder.WithMemoryStore(new AzureAISearchMemoryStore(\n \"https://gptkb-nggxeq6fpjnxg.search.windows.net\",\n \"...\")\n);\n\nvar memory = memoryBuilder.Build();\n\nconst string MemoryCollectionName = \"aboutMe\";\n\nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info1\", text: \"My name is Andrea\");\nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info2\", text: \"I currently work as a tourist operator\");\nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info3\", text: \"I currently live in Seattle and have been living there since 2005\");\nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info4\", text: \"I visited France and Italy five times since 2015\");\nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info5\", text: \"My family is from New York\");\n\nvar questions = new[]\n{\n \"what is my name?\",\n \"where do I live?\",\n \"where is my family from?\",\n \"where have I travelled?\",\n \"what do I do for work?\",\n};\n\n\n#pragma warning disable SKEXP0050\n\n// TextMemoryPlugin provides the \"recall\" function\nkernel.ImportPluginFromObject(new TextMemoryPlugin(memory));\n\n\nconst string skPrompt = @\"\nChatBot can have a conversation with you about any topic.\nIt can give explicit instructions or say 'I don't know' if it does not have an answer.\n\nInformation about me, from previous conversations:\n- {{$fact1}} {{recall $fact1}}\n- {{$fact2}} {{recall $fact2}}\n- {{$fact3}} {{recall $fact3}}\n- {{$fact4}} {{recall $fact4}}\n- {{$fact5}} {{recall $fact5}}\n\nChat:\n{{$history}}\nUser: {{$userInput}}\nChatBot: \";\n\nvar chatFunction = kernel.CreateFunctionFromPrompt(skPrompt, new OpenAIPromptExecutionSettings { MaxTokens = 200, Temperature = 0.8 });\n\n#pragma warning disable SKEXP0050\n\nvar arguments = new KernelArguments();\n\narguments[\"fact1\"] = \"What my name?\";\narguments[\"fact2\"] = \"where do I live?\";\narguments[\"fact3\"] = \"where is my family from?\";\narguments[\"fact4\"] = \"where have I travelled?\";\narguments[\"fact5\"] = \"what do I do for work?\";\n\narguments[TextMemoryPlugin.CollectionParam] = MemoryCollectionName;\narguments[TextMemoryPlugin.LimitParam] = \"2\";\narguments[TextMemoryPlugin.RelevanceParam] = \"0.8\";\n\nvar history = \"\";\narguments[\"history\"] = history;\nFunc\u0026lt;string, Task\u0026gt; Chat = async (string input) =\u0026gt; {\n // Save new message in the kernel arguments\n arguments[\"userInput\"] = input;\n\n // Process the user message and get an answer\n var answer = await chatFunction.InvokeAsync(kernel, arguments);\n\n // Append the new interaction to the chat history\n var result = $\"\\nUser: {input}\\nChatBot: {answer}\\n\";\n\n history += result;\n arguments[\"history\"] = history;\n\n // Show the bot response\n Console.WriteLine(result);\n};\n\n\nwhile (true)\n{\n Console.WriteLine(\"Digite uma Pergunta\");\n var question = Console.ReadLine();\n if (question != null)\n {\n await Chat(question);\n }\n\n}\u003c/code\u003e\u003c/pre\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP\u003e\u003cspan class=\"lia-media-object lia-media-is-inline lia-media-size-large\" data-image-alt=\"wdossantos_47-1729597372637.png\"\u003e\u003cbutton class=\"lia-media-unstyled-btn\" type=\"button\" aria-haspopup=\"true\" aria-label=\"Enlarge Image wdossantos_47-1729597372637.png\"\u003e\u003cimg src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3OWlGODdGNjE4OUNEOUIxQjc3?image-dimensions=750x750\u0026amp;revision=5\" alt=\"wdossantos_47-1729597372637.png\" /\u003e\u003c/button\u003e\u003c/span\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"566:1-567:63\"\u003econsole e execução respondendo a pergunta “What my name”?\u003c/P\u003e\n\u003cP data-sourcepos=\"566:1-567:63\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"569:1-569:18\"\u003ePacotes utilizados:\u003c/P\u003e\n\u003cP data-sourcepos=\"569:1-569:18\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-text-xml notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003e\u0026lt;PackageReference Include=\"Microsoft.SemanticKernel\" Version=\"1.26.0\" /\u0026gt;\u003cBR /\u003e\u0026lt;PackageReference Include=\"Microsoft.SemanticKernel.Connectors.AzureAISearch\" Version=\"1.6.3-alpha\" /\u0026gt;\u003cBR /\u003e\u0026lt;PackageReference Include=\"Microsoft.SemanticKernel.Plugins.Memory\" Version=\"1.6.3-alpha\" /\u0026gt;\u003cBR /\u003e\u0026lt;PackageReference Include=\"System.Linq.Async\" Version=\"6.0.1\" /\u0026gt;\u003c/PRE\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cDIV class=\"markdown-heading\" dir=\"auto\"\u003e\n\u003cH2 class=\"heading-element\" dir=\"auto\" data-sourcepos=\"577:1-577:15\" id=\"community-4276402-toc-hId--973471137\"\u003eReferências\u003c/H2\u003e\n\u003cA id=\"user-content-referências\" class=\"anchor\" href=\"https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#refer%C3%AAncias\" target=\"_blank\" rel=\"noopener noreferrer\" aria-label=\"Permalink: Referências\"\u003e\u003c/A\u003e\u003c/DIV\u003e\n\u003cOL dir=\"auto\" data-sourcepos=\"579:1-590:196\"\u003e\n\u003cLI data-sourcepos=\"579:1-579:88\"\u003e\u003cA href=\"https://github.com/Azure-Samples/azure-search-openai-demo\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eazure-search-openai-demo\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"580:1-580:102\"\u003e\u003cA href=\"https://github.com/Azure-Samples/azure-search-openai-demo-csharp\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eazure-search-openai-demo-csharp\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"581:1-581:178\"\u003e\u003cA href=\"https://github.com/Azure/Vector-Search-AI-Assistant/tree/cognitive-search-vector?tab=readme-ov-file\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eAzure/Vector-Search-AI-Assistant at cognitive-search-vector (github.com)\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"582:1-582:152\"\u003e\u003cA href=\"https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/troubleshoot?tabs=Browser\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eTroubleshoot Azure Developer CLI | Microsoft Learn\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"583:1-583:247\"\u003e\u003cA href=\"https://learn.microsoft.com/pt-br/azure/ai-services/openai/use-your-data-quickstart?tabs=command-line%2Cpython-new\u0026amp;pivots=programming-language-csharp\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eUsar seus próprios dados com o Serviço OpenAI do Azure — Azure OpenAI | Microsoft Learn\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"584:1-584:132\"\u003e\u003cA href=\"https://github.com/Azure-Samples/azure-search-openai-demo/blob/main/docs/data_ingestion.md\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eIndexing documents for the Chat App\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"585:1-585:90\"\u003e\u003cA href=\"https://github.com/FreddyAyala/AzureAIServicesLandingZone\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eAzureAIServicesLandingZone\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"586:1-586:121\"\u003e\u003cA href=\"https://learn.microsoft.com/en-us/semantic-kernel/overview/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eCreate AI agents with Semantic Kernel | Microsoft Learn\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"587:1-587:154\"\u003e\u003cA href=\"https://learn.microsoft.com/en-us/semantic-kernel/prompts/prompt-template-syntax\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eUsing the out-of-the-box prompt template language | Microsoft Learn\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"588:1-588:160\"\u003e\u003cA href=\"https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/model-versions\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eAzure OpenAI Service model versions — Azure OpenAI | Microsoft Learn\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"589:1-589:214\"\u003e\u003cA href=\"https://devblogs.microsoft.com/semantic-kernel/getting-started-with-semantic-kernel-for-langchain-users/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eGUEST POST: Getting Started with Semantic Kernel for LangChain users | Semantic Kernel (microsoft.com)\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"590:1-590:196\"\u003e\u003cA href=\"https://devblogs.microsoft.com/semantic-kernel/introducing-api-manifest-plugins-for-semantic-kernel-2/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eIntroducing API Manifest Plugins for Semantic Kernel | Semantic Kernel (microsoft.com)\u003c/A\u003e\u003c/LI\u003e\n\u003c/OL\u003e","body@stringLength":"52892","rawBody":"\u003cDIV class=\"markdown-heading\" dir=\"auto\"\u003e\n\u003cH1 class=\"heading-element\" dir=\"auto\" data-sourcepos=\"1:1-1:44\"\u003eAzure Open IA, acelerando nossos caminhos.\u003c/H1\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cA id=\"user-content-azure-open-ia-acelerando-nossos-caminhos\" class=\"anchor\" href=\"https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#azure-open-ia-acelerando-nossos-caminhos\" target=\"_blank\" rel=\"noopener\" aria-label=\"Permalink: Azure Open IA, acelerando nossos caminhos.\"\u003e\u003c/A\u003e\u003c/DIV\u003e\n\u003cP data-sourcepos=\"3:1-3:284\"\u003eHá algum tempo temos ouvido falar sobre o OpenAI, que se tornou um dos temas mais requisitados da atualidade. É comum sentirmos o desejo de testar suas funcionalidades, porém, surge a dúvida de por onde começar e como fazê-lo sem comprometer a confidencialidade de nossos dados.\u003c/P\u003e\n\u003cP data-sourcepos=\"3:1-3:284\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"5:1-5:615\"\u003eO caminho que vou apresentar aqui envolve o uso de um acelerador do Azure para o OpenAI\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cA href=\"https://github.com/Azure-Samples/azure-search-openai-demo\" target=\"_blank\" rel=\"noopener\"\u003eazure-search-openai-demo\u003c/A\u003e, ele nos auxiliará desde a configuração da infraestrutura até a implementação de aplicações de exemplo. Fiquei impressionado com a facilidade de uso, a estratégia de usar o “azd” facilitou muito as coisas, veja como instalar aqui\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cA href=\"https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/install-azd?tabs=winget-windows%2Cbrew-mac%2Cscript-linux\u0026amp;pivots=os-windows\" target=\"_blank\" rel=\"nofollow noopener\"\u003eInstall the Azure Developer CLI | Microsoft Learn\u003c/A\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"7:1-7:175\"\u003eBasta executar alguns comandos e pronto, o ambiente estará todo configurado no Azure. Eu apenas criei uma nova pasta sem clonar nenhum repositório e executei esses comandos.\u003c/P\u003e\n\u003cP data-sourcepos=\"7:1-7:175\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-powershell notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003eazd init \u003cSPAN class=\"pl-k\"\u003e-\u003c/SPAN\u003et azure\u003cSPAN class=\"pl-k\"\u003e-\u003c/SPAN\u003e\u003cSPAN class=\"pl-c1\"\u003esearch-openai\u003c/SPAN\u003e\u003cSPAN class=\"pl-k\"\u003e-\u003c/SPAN\u003edemo \nazd auth login \nazd up\u003c/PRE\u003e\n\u003c/DIV\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e1-)\u0026nbsp;azd init -t azure-search-openai-demo\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"331\" alt=\"azd init -t azure-search-openai-demo\" align=\"inline\" id=\"631255i9E992C8DFB98CC3A\" size=\"large\" sourcetype=\"new\" caption=\"azd init -t azure-search-openai-demo\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NWk5RTk5MkM4REZCOThDQzNB?image-dimensions=750x750\u0026amp;revision=5\"\u003eazd init -t azure-search-openai-demo\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"17:1-17:36\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"17:1-17:36\"\u003e2-)\u0026nbsp;azd auth login\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"17:1-17:36\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"867\" height=\"63\" alt=\"azd auth login\" align=\"inline\" id=\"631256iE7EFB1ECE3086B2E\" size=\"large\" sourcetype=\"new\" caption=\"azd auth login\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NmlFN0VGQjFFQ0UzMDg2QjJF?image-dimensions=750x750\u0026amp;revision=5\"\u003eazd auth login\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"21:1-22:94\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"21:1-22:94\"\u003e3-)\u0026nbsp;azd up\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"222\" alt=\"azd up\" align=\"inline\" id=\"631257i68FA6210D5569E8D\" size=\"large\" sourcetype=\"new\" caption=\"azd up\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1N2k2OEZBNjIxMEQ1NTY5RThE?image-dimensions=750x750\u0026amp;revision=5\"\u003eazd up\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"24:1-24:6\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"24:1-24:6\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"26:1-26:82\"\u003eAo fim da execução de mais ou menos 30 minutos, pude ver esses recursos criados:\u003c/P\u003e\n\u003cP data-sourcepos=\"26:1-26:82\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"287\" alt=\"Lista de recursos criados\" align=\"inline\" id=\"631258i2A428C8800896931\" size=\"large\" sourcetype=\"new\" caption=\"Lista de recursos criados\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1OGkyQTQyOEM4ODAwODk2OTMx?image-dimensions=750x750\u0026amp;revision=5\"\u003eLista de recursos criados\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"30:1-30:24\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"30:1-30:24\"\u003eVisualizador de Recursos:\u003c/P\u003e\n\u003cP data-sourcepos=\"30:1-30:24\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"30:1-30:24\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"448\" alt=\"Mapa dos recursos\" align=\"inline\" id=\"631259i435F744FFC3B7899\" size=\"large\" sourcetype=\"new\" caption=\"Mapa dos recursos\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1OWk0MzVGNzQ0RkZDM0I3ODk5?image-dimensions=750x750\u0026amp;revision=5\"\u003eMapa dos recursos\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"34:1-34:26\"\u003eA aplicação nasce pronta:\u003c/P\u003e\n\u003cP data-sourcepos=\"34:1-34:26\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"530\" alt=\"Aplicação de exemplo do acelerador\" align=\"inline\" id=\"631260i2078F93C79A38BBB\" size=\"large\" sourcetype=\"new\" caption=\"Aplica\u0026amp;ccedil;\u0026amp;atilde;o de exemplo do acelerador\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2MGkyMDc4RjkzQzc5QTM4QkJC?image-dimensions=750x750\u0026amp;revision=5\"\u003eAplicação de exemplo do acelerador\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"38:1-38:191\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"38:1-38:191\"\u003eArquivos criados ao rodar o comando azd init -t azure-search-openai-demo:\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"963\" height=\"506\" alt=\"Arquivos criados ao rodar o comando azd init -t azure-search-openai-demo\" align=\"inline\" id=\"631261iBC47292989DAEBF8\" size=\"large\" sourcetype=\"new\" caption=\"Arquivos criados ao rodar o comando azd init -t azure-search-openai-demo\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2MWlCQzQ3MjkyOTg5REFFQkY4?image-dimensions=750x750\u0026amp;revision=5\"\u003eArquivos criados ao rodar o comando azd init -t azure-search-openai-demo\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"42:1-42:72\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"42:1-42:72\"\u003eBasta fazer as perguntas. Inclusive, uma série de documentos de exemplo foram adicionados à solução, os quais podem ser encontrados na pasta local “data” ou no armazenamento do Azure.\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"999\" alt=\"wdossantos_33-1729596822623.png\" align=\"inline\" id=\"631262i93C6AD43ABA050D8\" size=\"large\" resized=\"false\" sourcetype=\"new\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2Mmk5M0M2QUQ0M0FCQTA1MEQ4?image-dimensions=750x750\u0026amp;revision=5\"\u003e\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"46:1-46:647\"\u003eO próximo passo será trabalhar com a ingestão de dados. Existe um guia na própria documentação do acelerador intitulado\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cA href=\"https://github.com/Azure-Samples/azure-search-openai-demo/blob/main/docs/data_ingestion.md\" target=\"_blank\" rel=\"noopener\"\u003eIndexing documents for the Chat App\u003c/A\u003e. Para começar, vou fazer o upload de um artigo meu do blog, chamado “\u003cA href=\"https://medium.com/escalando-nodes-e-escalando-pods-s%C3%A3o-dois-conceitos-diferentes-no-contexto-do-aks-b7582b4b209e\" target=\"_blank\" rel=\"nofollow noopener\"\u003eEscalando nodes e escalando e pods no AKS. | by Wilson Santos | Medium\u003c/A\u003e”, para isso, basta gerar um PDF e colocar o arquivo dentro da pasta “data” do acelerador, diretamente na sua máquina local.\u003c/P\u003e\n\u003cP data-sourcepos=\"46:1-46:647\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"48:1-48:127\"\u003eApós isso, você irá executar um pequeno script em PowerShell chamado “prepdoc”. O comando para executá-lo é o seguinte\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-powershell notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003e.\\\\scripts\\\\prepdocs.ps1\u003c/PRE\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"54:1-54:73\"\u003eAssim que terminar de rodar podemos fazer perguntas sobre esse conteúdo.\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"999\" alt=\"wdossantos_34-1729596859679.png\" align=\"inline\" id=\"631263iC0E88F404934107F\" size=\"large\" resized=\"false\" sourcetype=\"new\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2M2lDMEU4OEY0MDQ5MzQxMDdG?image-dimensions=750x750\u0026amp;revision=5\"\u003e\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"58:1-58:147\"\u003eO acelerador traz uma implementação em React e python e podemos estudar como ela funciona usando esse código que fica na pasta app do acelerador\u003c/P\u003e\n\u003cP data-sourcepos=\"60:1-60:221\"\u003eTemos um front em React e um backend em Python, mas caso você esteja acostumado com C# que é o meu caso, nada melhor que explorar os SDKS do\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eAzure.AI.OpenAI\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003ee o\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eSemanticKernel\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003eque eu estou apresentando a seguir.\u003c/P\u003e\n\u003cP data-sourcepos=\"60:1-60:221\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"markdown-heading\" dir=\"auto\"\u003e\n\u003cH2 class=\"heading-element\" dir=\"auto\" data-sourcepos=\"62:1-62:30\"\u003eNada melhor que “codar” para entender melhor as coisas!\u003c/H2\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cA id=\"user-content-nada-melhor-que-codar\" class=\"anchor\" href=\"https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#nada-melhor-que-codar\" target=\"_blank\" rel=\"noopener\" aria-label=\"Permalink: Nada melhor que “codar”\"\u003e\u003c/A\u003e\u003c/DIV\u003e\n\u003cP data-sourcepos=\"64:1-64:341\"\u003e\u003cSPAN\u003eAgora, vamos criar um pequeno programa em .NET Core Console que aproveitará toda a infraestrutura criada pelo acelerador. Este programa será capaz de fazer perguntas ao Azure Open AI e, além disso, responderá com base nos documentos que forem atualizados na base de conhecimento. Para isso, utilizaremos o pacote\u0026nbsp;\u003c/SPAN\u003e\u003cCODE\u003eAzure.AI.OpenAI\u003c/CODE\u003e\u003cSPAN\u003e. No meu exemplo, estou utilizando a versão 2.0.0.\u003c/SPAN\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"64:1-64:341\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-powershell notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003e\u003cSPAN class=\"pl-c1\"\u003einstall-package\u003c/SPAN\u003e Azure.AI.OpenAI\u003c/PRE\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"70:1-70:59\"\u003ePrimeiro passo vamos criar um client da classe \u003cSTRONG\u003eAzureOpenAIClient:\u003c/STRONG\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"70:1-70:59\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-powershell notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cLI-CODE lang=\"csharp\"\u003eAzureOpenAIClient azureClient = new(endpoint, credential);\u003c/LI-CODE\u003e\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"76:1-76:151\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"76:1-76:151\"\u003ePara as credenciais e o endpoint, utilizamos uma chave do recurso que pode ser obtida na seção “Keys and Endpoint” da instância do Azure OpenAI.\u003c/P\u003e\n\u003cP data-sourcepos=\"76:1-76:151\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"999\" alt=\"wdossantos_35-1729596914646.png\" align=\"inline\" id=\"631265iDEF18BC68D3AEFF8\" size=\"large\" resized=\"false\" sourcetype=\"new\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2NWlERUYxOEJDNjhEM0FFRkY4?image-dimensions=750x750\u0026amp;revision=5\"\u003e\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-powershell notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cLI-CODE lang=\"csharp\"\u003e var credential = new AzureKeyCredential(\"...\");\u003c/LI-CODE\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"84:1-84:156\"\u003eDepois, vamos criar uma instancia da classe chamada\u003cSTRONG\u003e SearchClient\u003c/STRONG\u003e. Essa classe ajudará na conexão com o serviço de busca (Search service).\u003c/P\u003e\n\u003cP data-sourcepos=\"84:1-84:156\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"86:1-86:11\"\u003ealgo assim:\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cLI-CODE lang=\"csharp\"\u003evar searchEndpoint = new Uri(\"...\");\nvar searchCredential = new AzureKeyCredential(\"...\");\nvar indexName = \"gptkbindex\";\nvar searchClient = new SearchClient(searchEndpoint, indexName, searchCredential);\nvar searchOptions = new SearchOptions\n{\n Size = 5 // Número de documentos a recuperar\n};\nvar searchResults = searchClient.Search\u0026lt;SearchDocument\u0026gt;(text, searchOptions);\nvar retrievedDocuments = searchResults.Value.GetResults().Select(result =\u0026gt; result.Document[\"content\"].ToString());\nvar context = string.Join(\"\\n\", retrievedDocuments);\u003c/LI-CODE\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"99:1-99:197\"\u003eA classe \u003cSTRONG\u003eSearchClient\u003c/STRONG\u003e também requer o uso de uma chave de segurança. Para encontrá-la, acessamos a instância do serviço de busca (Search service) na seção “Keys”\u003c/P\u003e\n\u003cP data-sourcepos=\"99:1-99:197\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"999\" alt=\"wdossantos_36-1729596964770.png\" align=\"inline\" id=\"631266i4137D7E67790C23A\" size=\"large\" resized=\"false\" sourcetype=\"new\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2Nmk0MTM3RDdFNjc3OTBDMjNB?image-dimensions=750x750\u0026amp;revision=5\"\u003e\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"103:1-103:27\"\u003eo endpoint esta em overview\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"999\" alt=\"wdossantos_37-1729596995296.png\" align=\"inline\" id=\"631267iF1D5AA6ED9142A27\" size=\"large\" resized=\"false\" sourcetype=\"new\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2N2lGMUQ1QUE2RUQ5MTQyQTI3?image-dimensions=750x750\u0026amp;revision=5\"\u003e\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"107:1-107:383\"\u003eAgora vamos criar uma instancia da classe\u003cSTRONG\u003e ChatClient\u003c/STRONG\u003e, que será responsável por fazer perguntas para o OpenAI, e passar o prompt para o Azure openIA.\u003c/P\u003e\n\u003cP data-sourcepos=\"107:1-107:383\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"107:1-107:383\"\u003eE aqui que está \u003cSTRONG\u003eo grande segredo do RAG\u003c/STRONG\u003e, tudo é prompt, pegamos o resultado da busca do \u003cSTRONG\u003eSearchClient\u0026nbsp;\u003c/STRONG\u003eque está na variável\u0026nbsp;\u003cSTRONG\u003econtext\u003c/STRONG\u003e e juntamos no prompt.\u003c/P\u003e\n\u003cP data-sourcepos=\"107:1-107:383\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cLI-CODE lang=\"csharp\"\u003evar prompt = $\"Contexto: {context}\\nPergunta: {text}\";\nChatClient chatClient = await azureClient.CompleteChatAsync(\"gpt-4o\");\nChatCompletion completion = chatClient.CompleteChat(new List\u0026lt;ChatMessage\u0026gt;\n{\nnew SystemChatMessage(\"Você é um assistente atencioso\"),\nnew UserChatMessage(prompt),\n\n});\u003c/LI-CODE\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"130:1-130:265\"\u003ePara obter o valor do campo\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eDeploymentName\u003c/STRONG\u003e, no meu caso o gpt-4o, você pode encontrá-lo na instância do OpenAI. Basta abrir os “Model deployments”, clicar em “Management deployment”. Isso abrirá o \u003cSTRONG\u003eAzure OpenAI Studio\u003c/STRONG\u003e, onde você poderá visualizar os modelos implantados.\u003c/P\u003e\n\u003cP data-sourcepos=\"130:1-130:265\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"999\" alt=\"wdossantos_0-1730489069431.png\" align=\"inline\" id=\"634557iD978557AC4F72C9B\" size=\"large\" resized=\"false\" sourcetype=\"new\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU1N2lEOTc4NTU3QUM0RjcyQzlC?image-dimensions=750x750\u0026amp;revision=5\"\u003e\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"134:1-134:116\"\u003eos pacotes utilizados foram esses:\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-text-xml notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003e\u0026lt;PackageReference Include=\"Azure.AI.OpenAI\" Version=\"2.0.0\" /\u0026gt;\u003cBR /\u003e\u0026lt;PackageReference Include=\"Azure.Identity\" Version=\"1.13.1\" /\u0026gt;\u003cBR /\u003e\u0026lt;PackageReference Include=\"Azure.Search.Documents\" Version=\"11.4.0\" /\u0026gt;\u003c/PRE\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003eo Código final ficou assim:\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cLI-CODE lang=\"csharp\"\u003eusing Azure;\nusing Azure.AI.OpenAI;\nusing Azure.Search.Documents;\nusing Azure.Search.Documents.Models;\nusing OpenAI.Chat;\n\n\npublic class Program\n{\n\n static async Task Main(string[] args)\n {\n while (true)\n {\n Console.WriteLine(\"Digite uma Pergunta\");\n var question = Console.ReadLine();\n if (question != null)\n {\n var result = await AskingChatCompletionWithSearchsAsync(question);\n Console.WriteLine(result);\n }\n\n }\n\n }\n\n static async Task\u0026lt;string\u0026gt; AskingChatCompletionWithSearchsAsync(string text)\n {\n\n var endpoint = new Uri(\"https://openiapriv02.openai.azure.com/\");\n var credential = new AzureKeyCredential(\"...\");\n AzureOpenAIClient azureClient = new(endpoint, credential);\n\n\n var searchEndpoint = new Uri(\"https://gptkb-kv4atymcdg6pg.search.windows.net\");\n var searchCredential = new AzureKeyCredential(\"...\");\n var indexName = \"gptkbindex\";\n var searchClient = new SearchClient(searchEndpoint, indexName, searchCredential);\n var searchOptions = new SearchOptions\n {\n Size = 5 // Número de documentos a recuperar\n };\n var searchResults = searchClient.Search\u0026lt;SearchDocument\u0026gt;(text, searchOptions);\n var retrievedDocuments = searchResults.Value.GetResults().Select(result =\u0026gt; result.Document[\"content\"].ToString());\n var context = string.Join(\"\\n\", retrievedDocuments);\n\n\n\n var prompt = $\"Contexto: {context}\\nPergunta: {text}\";\n ChatClient chatClient = azureClient.GetChatClient(\"gpt-4o\");\n ChatCompletion completion = await chatClient.CompleteChatAsync(new List\u0026lt;ChatMessage\u0026gt;\n {\n new SystemChatMessage(\"Você é um assistente atencioso\"),\n new UserChatMessage(prompt),\n\n });\n\n\n var result = $\"{completion.Role}: {completion.Content[0].Text}\";\n return result;\n }\n}\u003c/LI-CODE\u003e\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"179:1-179:86\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"179:1-179:86\"\u003efiz uma pergunta para o assistente com base em um documento que já veio de exemplo no acelerador o\u0026nbsp;Benefit_Options.pdf, perguntei\u0026nbsp;o \u003cSTRONG\u003eque é o programa Northwind Health Plus?.\u0026nbsp;\u003c/STRONG\u003eObserve que a resposta é dada com base nos documentos indexados no\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eSearch service\u003c/STRONG\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"179:1-179:86\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"999\" alt=\"wdossantos_1-1730489483583.png\" align=\"inline\" id=\"634560i764D2DB64A869284\" size=\"large\" resized=\"false\" sourcetype=\"new\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU2MGk3NjREMkRCNjRBODY5Mjg0?image-dimensions=750x750\u0026amp;revision=5\"\u003e\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"markdown-heading\" dir=\"auto\"\u003e\n\u003cH2 class=\"heading-element\" dir=\"auto\" data-sourcepos=\"181:1-181:44\"\u003eMas o que são essas versões de modelos?\u003c/H2\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cA id=\"user-content-mas-o-que-são-essas-versões-de-modelos\" class=\"anchor\" href=\"https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#mas-o-que-s%C3%A3o-essas-vers%C3%B5es-de-modelos\" target=\"_blank\" rel=\"noopener\" aria-label=\"Permalink: Mas o que são essas versões de modelos?\"\u003e\u003c/A\u003e\u003c/DIV\u003e\n\u003cP data-sourcepos=\"183:1-183:147\"\u003eOs modelos são constantemente atualizados com novas características, as versões de modelo são a maneira de controlar essas mudanças do OpenAI.\u003c/P\u003e\n\u003cP data-sourcepos=\"183:1-183:147\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"185:1-185:604\"\u003eEm particular, os modelos\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eGPT-3.5 Turbo\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003ee\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eGPT-4\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003erecebem atualizações regulares com novos recursos. Por exemplo, as versões 0613 do GPT-3.5 Turbo e GPT-4 introduziram a chamada de função. A chamada de função é um recurso popular que permite ao modelo criar saídas estruturadas que podem ser usadas para chamar ferramentas externas. Fique atento aos modelos disponíveis para sua região quais modelos seu SDK suporta, saiba mais em\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cA href=\"https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/model-versions\" target=\"_blank\" rel=\"nofollow noopener\"\u003eAzure OpenAI Service model versions — Azure OpenAI | Microsoft Learn\u003c/A\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"185:1-185:604\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"markdown-heading\" dir=\"auto\"\u003e\n\u003cH2 class=\"heading-element\" dir=\"auto\" data-sourcepos=\"187:1-187:18\"\u003eSemantic Kernel\u003c/H2\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cA id=\"user-content-semantic-kernel\" class=\"anchor\" href=\"https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#semantic-kernel\" target=\"_blank\" rel=\"noopener\" aria-label=\"Permalink: Semantic Kernel\"\u003e\u003c/A\u003e\u003c/DIV\u003e\n\u003cP data-sourcepos=\"189:1-189:568\"\u003eO Semantic Kernel é um SDK de código aberto projetado para integrar com o código existente. Ele suporta várias linguagens de programação, incluindo C#, Python e Java. Através de conectores e plugins, o Semantic Kernel permite adicionar inteligencia aos aplicativos. Sua flexibilidade permite aos desenvolvedores orquestrar o código existente sem se prender a um provedor específico de modelos de IA, proporcionando liberdade na escolha e combinação de serviços conforme as necessidades do projeto.\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cA href=\"https://github.com/microsoft/semantic-kernel\" target=\"_blank\" rel=\"noopener\"\u003eSaiba mais\u003c/A\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"189:1-189:568\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"191:1-191:209\"\u003eVamos fazer algumas implementações básicas, a começar por um chat básico sem RAG, é importante lembrar que alguns dos pacotes usados ainda estão em versões alpha não indicados para ambiente produtivo.\u003c/P\u003e\n\u003cP data-sourcepos=\"193:1-193:34\"\u003evamos começar a instalar o pacote\u003c/P\u003e\n\u003cP data-sourcepos=\"193:1-193:34\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-powershell notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003e\u003cSPAN class=\"pl-c1\"\u003einstall-pacakge\u003c/SPAN\u003e Microsoft.SemanticKernel\u003c/PRE\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"199:1-199:168\"\u003eAgora vamos criar uma representação do que o SDK chama de Kernel, essa representação já adiciona a injeção do Chat Completion da nossa instancia do Azure Open IA\u003c/P\u003e\n\u003cP data-sourcepos=\"199:1-199:168\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cLI-CODE lang=\"csharp\"\u003e var builder = Kernel.CreateBuilder(); \n \n builder.AddAzureOpenAIChatCompletion( \n \"gpt-4o\", // Azure OpenAI Deployment Name \n \"https://wsopenia.openai.azure.com/\", // Azure OpenAI Endpoint \n \"...\"); // Azure OpenAI Key \n \n \n var kernel = builder.Build();\u003c/LI-CODE\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"213:1-213:516\"\u003eO prompt no Semantic Kernel é um template em formato texto que permite valorar variáveis, chamar funções e extrair valores, para isso usamos as chaves {{…}}. no nosso exemplo temos as variáveis history e input em uma estrutura que mostra para a IA quais informações são a entrada de usuário e quais são apenas instruções. para saber mais sobre prompt\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cA href=\"https://learn.microsoft.com/en-us/semantic-kernel/prompts/prompt-template-syntax\" target=\"_blank\" rel=\"nofollow noopener\"\u003eUsing the out-of-the-box prompt template language | Microsoft Learn\u003c/A\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"213:1-213:516\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cLI-CODE lang=\"csharp\"\u003evar prompt = @\"Chat:{{$history}} User:{{$input}}\";\u003c/LI-CODE\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"219:1-219:131\"\u003eAgora usamos o método\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eCreateFunctionFromPrompt\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003eespecificando as configurações de prompt como\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eMaxTokens, Temperatura \u003c/STRONG\u003eetc\u003cSTRONG\u003e.\u003c/STRONG\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"219:1-219:131\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cLI-CODE lang=\"csharp\"\u003e var kf = kernel.CreateFunctionFromPrompt(prompt, executionSettings: new OpenAIPromptExecutionSettings\n {\n MaxTokens = 500,\n ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions\n });\u003c/LI-CODE\u003e\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"227:1-227:73\"\u003ee usando a classe\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eKernelArguments\u003c/STRONG\u003e, passamos os valores das variáveis\u003c/P\u003e\n\u003cP data-sourcepos=\"227:1-227:73\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cLI-CODE lang=\"csharp\"\u003evar arguments = new KernelArguments(); \narguments\\[\"input\"\\] = question; \narguments\\[\"history\"\\] = questionHistory;\u003c/LI-CODE\u003e\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"235:1-235:119\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"235:1-235:119\"\u003ea etapa final é chamar as funções \u003cSTRONG\u003eInvokeAsync\u003c/STRONG\u003e passando a instancia de “kf” e passando a instancia dos argumentos\u003c/P\u003e\n\u003cP data-sourcepos=\"235:1-235:119\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cLI-CODE lang=\"csharp\"\u003evar result = await kernel.InvokeAsync(kf, arguments);\u003c/LI-CODE\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"241:1-241:37\"\u003eum exemplo de implementação é essa:\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cLI-CODE lang=\"csharp\"\u003evar arguments = new KernelArguments();\nvar prompt = @\"Chat:{{$history}} User:{{$input}}\";\nvar kf = kernel.CreateFunctionFromPrompt(prompt, executionSettings: new OpenAIPromptExecutionSettings\n{\n MaxTokens = 500,\n ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions\n});\n\n\nvar questionHistory = \"\";\nwhile (true)\n{\n Console.WriteLine(\"Digite uma Pergunta\");\n\n var question = Console.ReadLine();\n\n\n // Add user input \n arguments[\"input\"] = question;\n\n var result = await kernel.InvokeAsync(kf, arguments);\n\n\n Console.WriteLine(\"result:\" + result);\n //Console.WriteLine(\"history:\" + questionHistory);\n\n questionHistory += \"Chat:\" + result + \"User:\" + question + \"\\n\";\n arguments[\"history\"] = questionHistory;\n}\u003c/LI-CODE\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003eaqui não temos RAG apenas o LLM respondendo a pergunta \"\u003cSTRONG\u003eo que é o Azure OpenIA\"\u003c/STRONG\u003e?\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cLI-IMAGE width=\"999\" height=\"999\" alt=\"wdossantos_41-1729597143650.png\" align=\"inline\" id=\"631271i2E270A23AE5A87C9\" size=\"large\" resized=\"false\" sourcetype=\"new\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3MWkyRTI3MEEyM0FFNUE4N0M5?image-dimensions=750x750\u0026amp;revision=5\"\u003e\u003c/LI-IMAGE\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cSPAN\u003ePacotes utilizados:\u003c/SPAN\u003e\u003c/P\u003e\n\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"271:1-271:18\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-text-xml notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003e\u0026lt;PackageReference Include=\"Microsoft.SemanticKernel\" Version=\"1.26.0\" /\u0026gt;\u003c/PRE\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cDIV class=\"markdown-heading\" dir=\"auto\"\u003e\n\u003cH2 class=\"heading-element\" dir=\"auto\" data-sourcepos=\"277:1-277:26\"\u003eSemantic é extensível\u003c/H2\u003e\n\u003cA id=\"user-content-semantic-é-extensível\" class=\"anchor\" href=\"https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#semantic-%C3%A9-extens%C3%ADvel\" target=\"_blank\" rel=\"noopener\" aria-label=\"Permalink: Semantic é extensível\"\u003e\u003c/A\u003e\u003c/DIV\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"281:1-281:300\"\u003eCom ele podemos usar os plugins para interagir com nosso código existente como por exemplo consultar pedidos em uma base de dados, e podemos usar os conectores para integrar com os serviços de IA, por exemplo o Azure openIA,\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cA href=\"https://learn.microsoft.com/en-us/semantic-kernel/overview/\" target=\"_blank\" rel=\"nofollow noopener\"\u003esaiba mais\u003c/A\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"283:1-283:60\"\u003eVou mostrar um exemplo de plugin, vou criar uma classe order:\u003c/P\u003e\n\u003cP data-sourcepos=\"283:1-283:60\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cLI-CODE lang=\"csharp\"\u003epublic sealed class Order\n{\n [KernelFunction, Description(\"Show order details for number\")]\n public static string Sqrt([Description(\"The number to order details\")] double number1)\n {\n return $\"The detail about order {number1} is your current state is closed.\";\n }\n\n}\u003c/LI-CODE\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"297:1-297:79\"\u003eperceba que descrevemos seu comportamento usando um atributo\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eKernelFunction\u003c/STRONG\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"299:1-299:47\"\u003edepois eu vou adicionar esse plugin dessa forma:\u003c/P\u003e\n\u003cP data-sourcepos=\"299:1-299:47\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cLI-CODE lang=\"csharp\"\u003evar builder = Kernel.CreateBuilder(); \nbuilder.Plugins.AddFromType\u0026lt;Order\u0026gt;();\u003c/LI-CODE\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"306:1-306:185\"\u003efeito isso podemos optar pela auto chamada configurando a classe\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eOpenAIPromptExecutionSettings\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003ecom propriedade\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eToolCallBehavior\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003esetada para o valor\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eAutoInvokeKernelFunctions\u003c/STRONG\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"306:1-306:185\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cLI-CODE lang=\"csharp\"\u003e // Enable auto function calling \n OpenAIPromptExecutionSettings openAIPromptExecutionSettings = new() \n { \n ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions, \n };\u003c/LI-CODE\u003e\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"317:1-317:73\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"317:1-317:73\"\u003eo restante do código é o mesmo mas vou colocar um exemplo completo aqui:\u003c/P\u003e\n\u003cP data-sourcepos=\"317:1-317:73\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cLI-CODE lang=\"csharp\"\u003evar builder = Kernel.CreateBuilder(); \n \nbuilder.AddAzureOpenAIChatCompletion( \n \"gpt-4o\", // Azure OpenAI Deployment Name \n \"https://cog-nggxeq6fpjnxg.openai.azure.com/\", // Azure OpenAI Endpoint \n \"...\"); // Azure OpenAI Key \n \nbuilder.Plugins.AddFromType\u0026lt;Order\u0026gt;(); \n \nvar arguments = new KernelArguments(); \nvar prompt = @\"Chat:{{$history}} User:{{$input}}\"; \nvar kf = kernel.CreateFunctionFromPrompt(prompt, executionSettings: new OpenAIPromptExecutionSettings \n{ \n MaxTokens = 500, \n ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions \n}); \n \n \nvar questionHistory = \"\"; \nwhile (true) \n{ \n Console.WriteLine(\"Digite uma Pergunta\"); \n var question = Console.ReadLine(); \n // Add user input \n arguments\\[\"input\"\\] = question; \n var result = await kernel.InvokeAsync(kf, arguments); \n Console.WriteLine(\"result:\" + result); \n \n questionHistory += \"Chat:\" + result + \"User:\" + question + \"\\\\n\"; \n arguments\\[\"history\"\\] = questionHistory; \n}\n\u003c/LI-CODE\u003e\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cSPAN\u003eObservem a mágica deste exemplo: com ele, podemos criar uma classe que controla os mecanismos de busca e, portanto, o conteúdo da resposta. No entanto, é o LLM que decide se a pergunta corresponde à descrição da classe e aciona o mecanismo. Esse recurso é chamado de 'function calling' e está disponível apenas nas versões mais recentes dos modelos, como o GPT-4.\u003c/SPAN\u003e\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cLI-IMAGE width=\"999\" height=\"999\" alt=\"wdossantos_42-1729597207511.png\" align=\"inline\" id=\"631272i0C865819F5436430\" size=\"large\" resized=\"false\" sourcetype=\"new\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3MmkwQzg2NTgxOUY1NDM2NDMw?image-dimensions=750x750\u0026amp;revision=5\"\u003e\u003c/LI-IMAGE\u003e\n\u003cP\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSPAN\u003econsole e execução respondendo a pergunta “Show order details for number 10”?\u003c/SPAN\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"356:1-356:18\"\u003epacotes utilizados:\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-text-xml notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003e\u0026nbsp;\u0026lt;PackageReference Include=\"Microsoft.SemanticKernel\" Version=\"1.26.0\" /\u0026gt;\u003c/PRE\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cDIV class=\"markdown-heading\" dir=\"auto\"\u003e\n\u003cH2 class=\"heading-element\" dir=\"auto\" data-sourcepos=\"362:1-362:28\"\u003eMemorias usando IA Search\u003c/H2\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cA id=\"user-content-memorias-usando-ia-search\" class=\"anchor\" href=\"https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#memorias-usando-ia-search\" target=\"_blank\" rel=\"noopener\" aria-label=\"Permalink: Memorias usando IA Search\"\u003e\u003c/A\u003e\u003c/DIV\u003e\n\u003cP data-sourcepos=\"364:1-364:124\"\u003eAqui temos o uso de um conector e de um plugin, o conector vai adicionar accesso ao IA Search por meio dessa implementação:\u003c/P\u003e\n\u003cP data-sourcepos=\"364:1-364:124\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cLI-CODE lang=\"csharp\"\u003evar memoryBuilder = new MemoryBuilder();\nmemoryBuilder.WithMemoryStore(new AzureAISearchMemoryStore(\n \"https://gptkb-nggxeq6fpjnxg.search.windows.net\",\n \"...\")\n);\u003c/LI-CODE\u003e\u003c/DIV\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cBLOCKQUOTE data-sourcepos=\"374:1-374:194\"\u003e\n\u003cP data-sourcepos=\"374:3-374:194\"\u003eAlem do pacote do\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eMicrosoft.SemanticKernel\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003eainda vamos precisar de mais dois pacotes o\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eMicrosoft.SemanticKernel.Connectors.AzureAISearch\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003ee o\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eMicrosoft.SemanticKernel.Plugins.Memory\u003c/STRONG\u003e\u003c/P\u003e\n\u003c/BLOCKQUOTE\u003e\n\u003cP data-sourcepos=\"376:1-376:114\"\u003eMas também precisamos do plugin\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eTextMemoryPlugin\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003epara acessar as memorias, mas ates de acessar vamos cria-las\u003c/P\u003e\n\u003cP data-sourcepos=\"378:1-378:41\"\u003ePara isso vamos usar essa implementação:\u003c/P\u003e\n\u003cP data-sourcepos=\"378:1-378:41\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u003cLI-CODE lang=\"csharp\"\u003evar memory = memoryBuilder.Build(); \n \nconst string MemoryCollectionName = \"aboutMe\"; \n \nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info1\", text: \"My name is Andrea\"); \nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info2\", text: \"I currently work as a tourist operator\"); \nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info3\", text: \"I currently live in Seattle and have been living there since 2005\"); \nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info4\", text: \"I visited France and Italy five times since 2015\"); \nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info5\", text: \"My family is from New York\");\n\nkernel.ImportPluginFromObject(new TextMemoryPlugin(memory));\u003c/LI-CODE\u003e\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"392:1-392:62\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"392:1-392:62\"\u003eCom isso sera gerado um\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003e\u003cSTRONG\u003eindex\u003c/STRONG\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003ena IA Search chamado aboutme\u003c/P\u003e\n\u003cP data-sourcepos=\"392:1-392:62\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"999\" alt=\"wdossantos_43-1729597236226.png\" align=\"inline\" id=\"631273i81D61182550A8346\" size=\"large\" resized=\"false\" sourcetype=\"new\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3M2k4MUQ2MTE4MjU1MEE4MzQ2?image-dimensions=750x750\u0026amp;revision=5\"\u003e\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"394:1-395:15\"\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003elista de indexs\u003c/P\u003e\n\u003cP data-sourcepos=\"394:1-395:15\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"999\" alt=\"wdossantos_44-1729597266492.png\" align=\"inline\" id=\"631274iF0F70D57F86F1083\" size=\"large\" resized=\"false\" sourcetype=\"new\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3NGlGMEY3MEQ1N0Y4NkYxMDgz?image-dimensions=750x750\u0026amp;revision=5\"\u003e\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"397:1-398:15\"\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003eSearch explorer\u003c/P\u003e\n\u003cP data-sourcepos=\"397:1-398:15\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"400\" height=\"400\" alt=\"wdossantos_45-1729597299034.png\" align=\"inline\" id=\"631276iAF94F014091F20B8\" size=\"medium\" resized=\"false\" sourcetype=\"new\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3NmlBRjk0RjAxNDA5MUYyMEI4?image-dimensions=750x750\u0026amp;revision=5\"\u003e\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"400:1-401:15\"\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003eCampos do index\u003c/P\u003e\n\u003cP data-sourcepos=\"400:1-401:15\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"403:1-403:121\"\u003eesse index foi gerado usando esse Text Embedding \u003cSTRONG\u003etext-embedding-ada-002\u003c/STRONG\u003e, que é um tipo de algoritmo de vetorização\u003c/P\u003e\n\u003cP data-sourcepos=\"403:1-403:121\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"999\" alt=\"wdossantos_0-1730492183235.png\" align=\"inline\" id=\"634589iD224984A3CFCAA25\" size=\"large\" resized=\"false\" sourcetype=\"new\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU4OWlEMjI0OTg0QTNDRkNBQTI1?image-dimensions=750x750\u0026amp;revision=5\"\u003e\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"405:1-406:31\"\u003e\u003cSPAN\u003e\u0026nbsp;\u003c/SPAN\u003eDeployments Azure OpenAI Studio\u003c/P\u003e\n\u003cP data-sourcepos=\"408:1-408:24\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"408:1-408:24\"\u003ecom essa implementação temos a configuração da instancia do Azure openIA que irá fazer o embending das perguntas usando o modelo text-embedding-ada-002 :\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cLI-CODE lang=\"csharp\"\u003e memoryBuilder.WithTextEmbeddingGeneration((loggerFactory, httpClient) =\u0026gt; {\n return new AzureOpenAITextEmbeddingGenerationService(\n \"text-embedding-ada-002\", // Embedding generation service name\n \"https://openiapriv02.openai.azure.com/\",\n \"...\",\n httpClient: httpClient,\n loggerFactory: loggerFactory\n );\n });\u003c/LI-CODE\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cP data-sourcepos=\"417:1-417:193\"\u003epor fim para fazer as perguntas ao chat e receber resposta que vem desse index como se fossem uma lembrança do chat, mas antes precisamos enriquecer o prompt com essas informações algo assim:\u003c/P\u003e\n\u003cP data-sourcepos=\"417:1-417:193\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cLI-CODE lang=\"csharp\"\u003e const string skPrompt = @\" \n ChatBot can have a conversation with you about any topic. \n It can give explicit instructions or say 'I don't know' if it does not have an answer. \n \n Information about me, from previous conversations: \n - {{$fact1}} {{recall $fact1}} \n - {{$fact2}} {{recall $fact2}} \n - {{$fact3}} {{recall $fact3}} \n - {{$fact4}} {{recall $fact4}} \n - {{$fact5}} {{recall $fact5}} \n \n Chat: \n {{$history}} \n User: {{$userInput}} \n ChatBot: \";\u003c/LI-CODE\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"437:1-437:50\"\u003eesses valores serão passados pelo KernelArguments:\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cLI-CODE lang=\"csharp\"\u003e arguments\\[\"fact1\"\\] = \"What my name?\"; \n arguments\\[\"fact2\"\\] = \"where do I live?\"; \n arguments\\[\"fact3\"\\] = \"where is my family from?\"; \n arguments\\[\"fact4\"\\] = \"where have I travelled?\"; \n arguments\\[\"fact5\"\\] = \"what do I do for work?\";\u003c/LI-CODE\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP data-sourcepos=\"447:1-447:31\"\u003eveja a implementação completa:\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cLI-CODE lang=\"csharp\"\u003evar builder = Kernel.CreateBuilder();\n\nbuilder.AddAzureOpenAIChatCompletion(\n \"gpt-35-turbo\", // Azure OpenAI Deployment Name\n \"https://cog-nggxeq6fpjnxg.openai.azure.com/\", // Azure OpenAI Endpoint\n \"...\"); // Azure OpenAI Key\n\n\nvar kernel = builder.Build();\n\n#pragma warning disable SKEXP0001, SKEXP0010, SKEXP0050, SKEXP0020\n\nvar memoryBuilder = new MemoryBuilder();\n\n\nmemoryBuilder.WithTextEmbeddingGeneration((loggerFactory, httpClient) =\u0026gt; {\n return new AzureOpenAITextEmbeddingGenerationService(\n \"text-embedding-ada-002\", // Embedding generation service name\n \"https://openiapriv02.openai.azure.com/\",\n \"...\",\n httpClient: httpClient,\n loggerFactory: loggerFactory\n );\n});\n\n\nmemoryBuilder.WithMemoryStore(new AzureAISearchMemoryStore(\n \"https://gptkb-nggxeq6fpjnxg.search.windows.net\",\n \"...\")\n);\n\nvar memory = memoryBuilder.Build();\n\nconst string MemoryCollectionName = \"aboutMe\";\n\nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info1\", text: \"My name is Andrea\");\nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info2\", text: \"I currently work as a tourist operator\");\nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info3\", text: \"I currently live in Seattle and have been living there since 2005\");\nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info4\", text: \"I visited France and Italy five times since 2015\");\nawait memory.SaveInformationAsync(MemoryCollectionName, id: \"info5\", text: \"My family is from New York\");\n\nvar questions = new[]\n{\n \"what is my name?\",\n \"where do I live?\",\n \"where is my family from?\",\n \"where have I travelled?\",\n \"what do I do for work?\",\n};\n\n\n#pragma warning disable SKEXP0050\n\n// TextMemoryPlugin provides the \"recall\" function\nkernel.ImportPluginFromObject(new TextMemoryPlugin(memory));\n\n\nconst string skPrompt = @\"\nChatBot can have a conversation with you about any topic.\nIt can give explicit instructions or say 'I don't know' if it does not have an answer.\n\nInformation about me, from previous conversations:\n- {{$fact1}} {{recall $fact1}}\n- {{$fact2}} {{recall $fact2}}\n- {{$fact3}} {{recall $fact3}}\n- {{$fact4}} {{recall $fact4}}\n- {{$fact5}} {{recall $fact5}}\n\nChat:\n{{$history}}\nUser: {{$userInput}}\nChatBot: \";\n\nvar chatFunction = kernel.CreateFunctionFromPrompt(skPrompt, new OpenAIPromptExecutionSettings { MaxTokens = 200, Temperature = 0.8 });\n\n#pragma warning disable SKEXP0050\n\nvar arguments = new KernelArguments();\n\narguments[\"fact1\"] = \"What my name?\";\narguments[\"fact2\"] = \"where do I live?\";\narguments[\"fact3\"] = \"where is my family from?\";\narguments[\"fact4\"] = \"where have I travelled?\";\narguments[\"fact5\"] = \"what do I do for work?\";\n\narguments[TextMemoryPlugin.CollectionParam] = MemoryCollectionName;\narguments[TextMemoryPlugin.LimitParam] = \"2\";\narguments[TextMemoryPlugin.RelevanceParam] = \"0.8\";\n\nvar history = \"\";\narguments[\"history\"] = history;\nFunc\u0026lt;string, Task\u0026gt; Chat = async (string input) =\u0026gt; {\n // Save new message in the kernel arguments\n arguments[\"userInput\"] = input;\n\n // Process the user message and get an answer\n var answer = await chatFunction.InvokeAsync(kernel, arguments);\n\n // Append the new interaction to the chat history\n var result = $\"\\nUser: {input}\\nChatBot: {answer}\\n\";\n\n history += result;\n arguments[\"history\"] = history;\n\n // Show the bot response\n Console.WriteLine(result);\n};\n\n\nwhile (true)\n{\n Console.WriteLine(\"Digite uma Pergunta\");\n var question = Console.ReadLine();\n if (question != null)\n {\n await Chat(question);\n }\n\n}\u003c/LI-CODE\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"999\" height=\"999\" alt=\"wdossantos_47-1729597372637.png\" align=\"inline\" id=\"631279iF87F6189CD9B1B77\" size=\"large\" resized=\"false\" sourcetype=\"new\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3OWlGODdGNjE4OUNEOUIxQjc3?image-dimensions=750x750\u0026amp;revision=5\"\u003e\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP data-sourcepos=\"566:1-567:63\"\u003econsole e execução respondendo a pergunta “What my name”?\u003c/P\u003e\n\u003cP data-sourcepos=\"566:1-567:63\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cP data-sourcepos=\"569:1-569:18\"\u003ePacotes utilizados:\u003c/P\u003e\n\u003cP data-sourcepos=\"569:1-569:18\"\u003e\u0026nbsp;\u003c/P\u003e\n\u003cDIV class=\"highlight highlight-text-xml notranslate position-relative overflow-auto\" dir=\"auto\"\u003e\n\u003cPRE\u003e\u0026lt;PackageReference Include=\"Microsoft.SemanticKernel\" Version=\"1.26.0\" /\u0026gt;\u003cBR /\u003e\u0026lt;PackageReference Include=\"Microsoft.SemanticKernel.Connectors.AzureAISearch\" Version=\"1.6.3-alpha\" /\u0026gt;\u003cBR /\u003e\u0026lt;PackageReference Include=\"Microsoft.SemanticKernel.Plugins.Memory\" Version=\"1.6.3-alpha\" /\u0026gt;\u003cBR /\u003e\u0026lt;PackageReference Include=\"System.Linq.Async\" Version=\"6.0.1\" /\u0026gt;\u003c/PRE\u003e\n\u003cDIV class=\"zeroclipboard-container position-absolute right-0 top-0\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003c/DIV\u003e\n\u003cDIV class=\"markdown-heading\" dir=\"auto\"\u003e\n\u003cH2 class=\"heading-element\" dir=\"auto\" data-sourcepos=\"577:1-577:15\"\u003eReferências\u003c/H2\u003e\n\u003cA id=\"user-content-referências\" class=\"anchor\" href=\"https://github.com/DesenvolvedoresBR/blog/edit/main/drafts/acelerando-nossos-caminhos-azure-open-ia.md#refer%C3%AAncias\" target=\"_blank\" rel=\"noopener\" aria-label=\"Permalink: Referências\"\u003e\u003c/A\u003e\u003c/DIV\u003e\n\u003cOL dir=\"auto\" data-sourcepos=\"579:1-590:196\"\u003e\n\u003cLI data-sourcepos=\"579:1-579:88\"\u003e\u003cA href=\"https://github.com/Azure-Samples/azure-search-openai-demo\" target=\"_blank\" rel=\"noopener\"\u003eazure-search-openai-demo\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"580:1-580:102\"\u003e\u003cA href=\"https://github.com/Azure-Samples/azure-search-openai-demo-csharp\" target=\"_blank\" rel=\"noopener\"\u003eazure-search-openai-demo-csharp\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"581:1-581:178\"\u003e\u003cA href=\"https://github.com/Azure/Vector-Search-AI-Assistant/tree/cognitive-search-vector?tab=readme-ov-file\" target=\"_blank\" rel=\"noopener\"\u003eAzure/Vector-Search-AI-Assistant at cognitive-search-vector (github.com)\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"582:1-582:152\"\u003e\u003cA href=\"https://learn.microsoft.com/en-us/azure/developer/azure-developer-cli/troubleshoot?tabs=Browser\" target=\"_blank\" rel=\"nofollow noopener\"\u003eTroubleshoot Azure Developer CLI | Microsoft Learn\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"583:1-583:247\"\u003e\u003cA href=\"https://learn.microsoft.com/pt-br/azure/ai-services/openai/use-your-data-quickstart?tabs=command-line%2Cpython-new\u0026amp;pivots=programming-language-csharp\" target=\"_blank\" rel=\"nofollow noopener\"\u003eUsar seus próprios dados com o Serviço OpenAI do Azure — Azure OpenAI | Microsoft Learn\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"584:1-584:132\"\u003e\u003cA href=\"https://github.com/Azure-Samples/azure-search-openai-demo/blob/main/docs/data_ingestion.md\" target=\"_blank\" rel=\"noopener\"\u003eIndexing documents for the Chat App\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"585:1-585:90\"\u003e\u003cA href=\"https://github.com/FreddyAyala/AzureAIServicesLandingZone\" target=\"_blank\" rel=\"noopener\"\u003eAzureAIServicesLandingZone\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"586:1-586:121\"\u003e\u003cA href=\"https://learn.microsoft.com/en-us/semantic-kernel/overview/\" target=\"_blank\" rel=\"nofollow noopener\"\u003eCreate AI agents with Semantic Kernel | Microsoft Learn\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"587:1-587:154\"\u003e\u003cA href=\"https://learn.microsoft.com/en-us/semantic-kernel/prompts/prompt-template-syntax\" target=\"_blank\" rel=\"nofollow noopener\"\u003eUsing the out-of-the-box prompt template language | Microsoft Learn\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"588:1-588:160\"\u003e\u003cA href=\"https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/model-versions\" target=\"_blank\" rel=\"nofollow noopener\"\u003eAzure OpenAI Service model versions — Azure OpenAI | Microsoft Learn\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"589:1-589:214\"\u003e\u003cA href=\"https://devblogs.microsoft.com/semantic-kernel/getting-started-with-semantic-kernel-for-langchain-users/\" target=\"_blank\" rel=\"nofollow noopener\"\u003eGUEST POST: Getting Started with Semantic Kernel for LangChain users | Semantic Kernel (microsoft.com)\u003c/A\u003e\u003c/LI\u003e\n\u003cLI data-sourcepos=\"590:1-590:196\"\u003e\u003cA href=\"https://devblogs.microsoft.com/semantic-kernel/introducing-api-manifest-plugins-for-semantic-kernel-2/\" target=\"_blank\" rel=\"nofollow noopener\"\u003eIntroducing API Manifest Plugins for Semantic Kernel | Semantic Kernel (microsoft.com)\u003c/A\u003e\u003c/LI\u003e\n\u003c/OL\u003e","kudosSumWeight":1,"postTime":"2024-11-01T13:23:44.575-07:00","images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wx","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NGk2REU3REY4M0IwOTg3MDYw?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wy","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NWk5RTk5MkM4REZCOThDQzNB?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wz","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NmlFN0VGQjFFQ0UzMDg2QjJF?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3w0","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1N2k2OEZBNjIxMEQ1NTY5RThE?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3w1","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1OGkyQTQyOEM4ODAwODk2OTMx?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3w2","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1OWk0MzVGNzQ0RkZDM0I3ODk5?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3w3","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2MGkyMDc4RjkzQzc5QTM4QkJC?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3w4","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2MWlCQzQ3MjkyOTg5REFFQkY4?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3w5","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2Mmk5M0M2QUQ0M0FCQTA1MEQ4?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wxMA","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2M2lDMEU4OEY0MDQ5MzQxMDdG?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wxMQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2NWlERUYxOEJDNjhEM0FFRkY4?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wxMg","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2Nmk0MTM3RDdFNjc3OTBDMjNB?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wxMw","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2N2lGMUQ1QUE2RUQ5MTQyQTI3?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wxNA","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU1N2lEOTc4NTU3QUM0RjcyQzlC?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wxNQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU2MGk3NjREMkRCNjRBODY5Mjg0?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wxNg","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3MWkyRTI3MEEyM0FFNUE4N0M5?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wxNw","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3MmkwQzg2NTgxOUY1NDM2NDMw?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wxOA","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3M2k4MUQ2MTE4MjU1MEE4MzQ2?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wxOQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3NGlGMEY3MEQ1N0Y4NkYxMDgz?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wyMA","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3NmlBRjk0RjAxNDA5MUYyMEI4?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wyMQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU4OWlEMjI0OTg0QTNDRkNBQTI1?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjQuMTF8Mi4xfG98MjV8X05WX3wyMg","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3OWlGODdGNjE4OUNEOUIxQjc3?revision=5\"}"}}],"totalCount":22,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"attachments":{"__typename":"AttachmentConnection","pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null},"edges":[]},"tags":{"__typename":"TagConnection","pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null},"edges":[]},"timeToRead":13,"rawTeaser":"\u003cP\u003e\u003cSPAN\u003eHá algum tempo temos ouvido falar sobre o OpenAI, que se tornou um dos temas mais requisitados da atualidade. É comum sentirmos o desejo de testar suas funcionalidades, porém, surge a dúvida de por onde começar e como fazê-lo sem comprometer a confidencialidade de nossos dados.\u003c/SPAN\u003e\u003c/P\u003e\n\u003cDIV id=\"lia-teaserTinyMceEditorwdossantos_0\" class=\"mceNonEditable lia-copypaste-placeholder\"\u003e\u0026nbsp;\u003c/DIV\u003e\n\u003cP\u003e\u003cLI-IMAGE width=\"400\" height=\"400\" alt=\"wdossantos_1-1729596195927.png\" align=\"inline\" id=\"631254i6DE7DF83B0987060\" size=\"medium\" resized=\"false\" sourcetype=\"new\" src=\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NGk2REU3REY4M0IwOTg3MDYw?image-dimensions=750x750\u0026amp;revision=5\"\u003e\u003c/LI-IMAGE\u003e\u003c/P\u003e\n\u003cP\u003e\u0026nbsp;\u003c/P\u003e","introduction":"","coverImage":null,"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""},"currentRevision":{"__ref":"Revision:revision:4276402_5"},"latestVersion":{"__typename":"FriendlyVersion","major":"1","minor":"0"},"metrics":{"__typename":"MessageMetrics","views":3705},"visibilityScope":"PUBLIC","canonicalUrl":null,"seoTitle":null,"seoDescription":null,"placeholder":false,"originalMessageForPlaceholder":null,"contributors":{"__typename":"UserConnection","edges":[]},"nonCoAuthorContributors":{"__typename":"UserConnection","edges":[]},"coAuthors":{"__typename":"UserConnection","edges":[]},"blogMessagePolicies":{"__typename":"BlogMessagePolicies","canDoAuthoringActionsOnBlog":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.blog.action_can_do_authoring_action.accessDenied","key":"error.lithium.policies.blog.action_can_do_authoring_action.accessDenied","args":[]}}},"archivalData":null,"customFields":[],"revisions({\"constraints\":{\"isPublished\":{\"eq\":true}},\"first\":1})":{"__typename":"RevisionConnection","totalCount":5}},"Conversation:conversation:4276402":{"__typename":"Conversation","id":"conversation:4276402","solved":false,"topic":{"__ref":"BlogTopicMessage:message:4276402"},"lastPostingActivityTime":"2024-11-01T13:23:44.575-07:00","lastPostTime":"2024-11-01T13:23:44.575-07:00","unreadReplyCount":0,"isSubscribed":false},"ModerationData:moderation_data:4276402":{"__typename":"ModerationData","id":"moderation_data:4276402","status":"APPROVED","rejectReason":null,"isReportedAbuse":false,"rejectUser":null,"rejectTime":null,"rejectActorType":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NGk2REU3REY4M0IwOTg3MDYw?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NGk2REU3REY4M0IwOTg3MDYw?revision=5","title":"wdossantos_1-1729596195927.png","associationType":"TEASER","width":1364,"height":674,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NWk5RTk5MkM4REZCOThDQzNB?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NWk5RTk5MkM4REZCOThDQzNB?revision=5","title":"wdossantos_26-1729596516306.png","associationType":"BODY","width":1070,"height":354,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NmlFN0VGQjFFQ0UzMDg2QjJF?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1NmlFN0VGQjFFQ0UzMDg2QjJF?revision=5","title":"wdossantos_27-1729596606976.png","associationType":"BODY","width":867,"height":63,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1N2k2OEZBNjIxMEQ1NTY5RThE?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1N2k2OEZBNjIxMEQ1NTY5RThE?revision=5","title":"wdossantos_28-1729596630653.png","associationType":"BODY","width":1395,"height":310,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1OGkyQTQyOEM4ODAwODk2OTMx?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1OGkyQTQyOEM4ODAwODk2OTMx?revision=5","title":"wdossantos_29-1729596659165.png","associationType":"BODY","width":1405,"height":404,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1OWk0MzVGNzQ0RkZDM0I3ODk5?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI1OWk0MzVGNzQ0RkZDM0I3ODk5?revision=5","title":"wdossantos_30-1729596715267.png","associationType":"BODY","width":1391,"height":624,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2MGkyMDc4RjkzQzc5QTM4QkJC?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2MGkyMDc4RjkzQzc5QTM4QkJC?revision=5","title":"wdossantos_31-1729596746648.png","associationType":"BODY","width":1360,"height":721,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2MWlCQzQ3MjkyOTg5REFFQkY4?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2MWlCQzQ3MjkyOTg5REFFQkY4?revision=5","title":"wdossantos_32-1729596778721.png","associationType":"BODY","width":963,"height":506,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2Mmk5M0M2QUQ0M0FCQTA1MEQ4?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2Mmk5M0M2QUQ0M0FCQTA1MEQ4?revision=5","title":"wdossantos_33-1729596822623.png","associationType":"BODY","width":1356,"height":726,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2M2lDMEU4OEY0MDQ5MzQxMDdG?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2M2lDMEU4OEY0MDQ5MzQxMDdG?revision=5","title":"wdossantos_34-1729596859679.png","associationType":"BODY","width":1363,"height":721,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2NWlERUYxOEJDNjhEM0FFRkY4?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2NWlERUYxOEJDNjhEM0FFRkY4?revision=5","title":"wdossantos_35-1729596914646.png","associationType":"BODY","width":1360,"height":666,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2Nmk0MTM3RDdFNjc3OTBDMjNB?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2Nmk0MTM3RDdFNjc3OTBDMjNB?revision=5","title":"wdossantos_36-1729596964770.png","associationType":"BODY","width":879,"height":447,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2N2lGMUQ1QUE2RUQ5MTQyQTI3?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI2N2lGMUQ1QUE2RUQ5MTQyQTI3?revision=5","title":"wdossantos_37-1729596995296.png","associationType":"BODY","width":1186,"height":280,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU1N2lEOTc4NTU3QUM0RjcyQzlC?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU1N2lEOTc4NTU3QUM0RjcyQzlC?revision=5","title":"wdossantos_0-1730489069431.png","associationType":"BODY","width":1887,"height":1037,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU2MGk3NjREMkRCNjRBODY5Mjg0?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU2MGk3NjREMkRCNjRBODY5Mjg0?revision=5","title":"wdossantos_1-1730489483583.png","associationType":"BODY","width":1115,"height":628,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3MWkyRTI3MEEyM0FFNUE4N0M5?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3MWkyRTI3MEEyM0FFNUE4N0M5?revision=5","title":"wdossantos_41-1729597143650.png","associationType":"BODY","width":1104,"height":558,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3MmkwQzg2NTgxOUY1NDM2NDMw?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3MmkwQzg2NTgxOUY1NDM2NDMw?revision=5","title":"wdossantos_42-1729597207511.png","associationType":"BODY","width":1111,"height":632,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3M2k4MUQ2MTE4MjU1MEE4MzQ2?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3M2k4MUQ2MTE4MjU1MEE4MzQ2?revision=5","title":"wdossantos_43-1729597236226.png","associationType":"BODY","width":1366,"height":651,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3NGlGMEY3MEQ1N0Y4NkYxMDgz?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3NGlGMEY3MEQ1N0Y4NkYxMDgz?revision=5","title":"wdossantos_44-1729597266492.png","associationType":"BODY","width":762,"height":379,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3NmlBRjk0RjAxNDA5MUYyMEI4?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3NmlBRjk0RjAxNDA5MUYyMEI4?revision=5","title":"wdossantos_45-1729597299034.png","associationType":"BODY","width":1361,"height":667,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU4OWlEMjI0OTg0QTNDRkNBQTI1?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzNDU4OWlEMjI0OTg0QTNDRkNBQTI1?revision=5","title":"wdossantos_0-1730492183235.png","associationType":"BODY","width":999,"height":549,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3OWlGODdGNjE4OUNEOUIxQjc3?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjc2NDAyLTYzMTI3OWlGODdGNjE4OUNEOUIxQjc3?revision=5","title":"wdossantos_47-1729597372637.png","associationType":"BODY","width":1108,"height":615,"altText":null},"Revision:revision:4276402_5":{"__typename":"Revision","id":"revision:4276402_5","lastEditTime":"2024-11-01T13:21:06.388-07:00"},"CachedAsset:theme:customTheme1-1739785328557":{"__typename":"CachedAsset","id":"theme:customTheme1-1739785328557","value":{"id":"customTheme1","animation":{"fast":"150ms","normal":"250ms","slow":"500ms","slowest":"750ms","function":"cubic-bezier(0.07, 0.91, 0.51, 1)","__typename":"AnimationThemeSettings"},"avatar":{"borderRadius":"50%","collections":["default"],"__typename":"AvatarThemeSettings"},"basics":{"browserIcon":{"imageAssetName":"favicon-1730836283320.png","imageLastModified":"1730836286415","__typename":"ThemeAsset"},"customerLogo":{"imageAssetName":"favicon-1730836271365.png","imageLastModified":"1730836274203","__typename":"ThemeAsset"},"maximumWidthOfPageContent":"1300px","oneColumnNarrowWidth":"800px","gridGutterWidthMd":"30px","gridGutterWidthXs":"10px","pageWidthStyle":"WIDTH_OF_BROWSER","__typename":"BasicsThemeSettings"},"buttons":{"borderRadiusSm":"3px","borderRadius":"3px","borderRadiusLg":"5px","paddingY":"5px","paddingYLg":"7px","paddingYHero":"var(--lia-bs-btn-padding-y-lg)","paddingX":"12px","paddingXLg":"16px","paddingXHero":"60px","fontStyle":"NORMAL","fontWeight":"700","textTransform":"NONE","disabledOpacity":0.5,"primaryTextColor":"var(--lia-bs-white)","primaryTextHoverColor":"var(--lia-bs-white)","primaryTextActiveColor":"var(--lia-bs-white)","primaryBgColor":"var(--lia-bs-primary)","primaryBgHoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.85))","primaryBgActiveColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.7))","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","primaryBorderActive":"1px solid transparent","primaryBorderFocus":"1px solid var(--lia-bs-white)","primaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","secondaryTextColor":"var(--lia-bs-gray-900)","secondaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","secondaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","secondaryBgColor":"var(--lia-bs-gray-200)","secondaryBgHoverColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.96))","secondaryBgActiveColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.92))","secondaryBorder":"1px solid transparent","secondaryBorderHover":"1px solid transparent","secondaryBorderActive":"1px solid transparent","secondaryBorderFocus":"1px solid transparent","secondaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","tertiaryTextColor":"var(--lia-bs-gray-900)","tertiaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","tertiaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","tertiaryBgColor":"transparent","tertiaryBgHoverColor":"transparent","tertiaryBgActiveColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.04)","tertiaryBorder":"1px solid transparent","tertiaryBorderHover":"1px solid hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","tertiaryBorderActive":"1px solid transparent","tertiaryBorderFocus":"1px solid transparent","tertiaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","destructiveTextColor":"var(--lia-bs-danger)","destructiveTextHoverColor":"hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.95))","destructiveTextActiveColor":"hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.9))","destructiveBgColor":"var(--lia-bs-gray-200)","destructiveBgHoverColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.96))","destructiveBgActiveColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.92))","destructiveBorder":"1px solid transparent","destructiveBorderHover":"1px solid transparent","destructiveBorderActive":"1px solid transparent","destructiveBorderFocus":"1px solid transparent","destructiveBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","__typename":"ButtonsThemeSettings"},"border":{"color":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","mainContent":"NONE","sideContent":"LIGHT","radiusSm":"3px","radius":"5px","radiusLg":"9px","radius50":"100vw","__typename":"BorderThemeSettings"},"boxShadow":{"xs":"0 0 0 1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.08), 0 3px 0 -1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.16)","sm":"0 2px 4px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.12)","md":"0 5px 15px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3)","lg":"0 10px 30px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3)","__typename":"BoxShadowThemeSettings"},"cards":{"bgColor":"var(--lia-panel-bg-color)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":"var(--lia-box-shadow-xs)","__typename":"CardsThemeSettings"},"chip":{"maxWidth":"300px","height":"30px","__typename":"ChipThemeSettings"},"coreTypes":{"defaultMessageLinkColor":"var(--lia-bs-link-color)","defaultMessageLinkDecoration":"none","defaultMessageLinkFontStyle":"NORMAL","defaultMessageLinkFontWeight":"400","defaultMessageFontStyle":"NORMAL","defaultMessageFontWeight":"400","forumColor":"#4099E2","forumFontFamily":"var(--lia-bs-font-family-base)","forumFontWeight":"var(--lia-default-message-font-weight)","forumLineHeight":"var(--lia-bs-line-height-base)","forumFontStyle":"var(--lia-default-message-font-style)","forumMessageLinkColor":"var(--lia-default-message-link-color)","forumMessageLinkDecoration":"var(--lia-default-message-link-decoration)","forumMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","forumMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","forumSolvedColor":"#148563","blogColor":"#1CBAA0","blogFontFamily":"var(--lia-bs-font-family-base)","blogFontWeight":"var(--lia-default-message-font-weight)","blogLineHeight":"1.75","blogFontStyle":"var(--lia-default-message-font-style)","blogMessageLinkColor":"var(--lia-default-message-link-color)","blogMessageLinkDecoration":"var(--lia-default-message-link-decoration)","blogMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","blogMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","tkbColor":"#4C6B90","tkbFontFamily":"var(--lia-bs-font-family-base)","tkbFontWeight":"var(--lia-default-message-font-weight)","tkbLineHeight":"1.75","tkbFontStyle":"var(--lia-default-message-font-style)","tkbMessageLinkColor":"var(--lia-default-message-link-color)","tkbMessageLinkDecoration":"var(--lia-default-message-link-decoration)","tkbMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","tkbMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaColor":"#4099E2","qandaFontFamily":"var(--lia-bs-font-family-base)","qandaFontWeight":"var(--lia-default-message-font-weight)","qandaLineHeight":"var(--lia-bs-line-height-base)","qandaFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkColor":"var(--lia-default-message-link-color)","qandaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","qandaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaSolvedColor":"#3FA023","ideaColor":"#FF8000","ideaFontFamily":"var(--lia-bs-font-family-base)","ideaFontWeight":"var(--lia-default-message-font-weight)","ideaLineHeight":"var(--lia-bs-line-height-base)","ideaFontStyle":"var(--lia-default-message-font-style)","ideaMessageLinkColor":"var(--lia-default-message-link-color)","ideaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","ideaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","ideaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","contestColor":"#FCC845","contestFontFamily":"var(--lia-bs-font-family-base)","contestFontWeight":"var(--lia-default-message-font-weight)","contestLineHeight":"var(--lia-bs-line-height-base)","contestFontStyle":"var(--lia-default-message-link-font-style)","contestMessageLinkColor":"var(--lia-default-message-link-color)","contestMessageLinkDecoration":"var(--lia-default-message-link-decoration)","contestMessageLinkFontStyle":"ITALIC","contestMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","occasionColor":"#D13A1F","occasionFontFamily":"var(--lia-bs-font-family-base)","occasionFontWeight":"var(--lia-default-message-font-weight)","occasionLineHeight":"var(--lia-bs-line-height-base)","occasionFontStyle":"var(--lia-default-message-font-style)","occasionMessageLinkColor":"var(--lia-default-message-link-color)","occasionMessageLinkDecoration":"var(--lia-default-message-link-decoration)","occasionMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","occasionMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","grouphubColor":"#333333","categoryColor":"#949494","communityColor":"#FFFFFF","productColor":"#949494","__typename":"CoreTypesThemeSettings"},"colors":{"black":"#000000","white":"#FFFFFF","gray100":"#F7F7F7","gray200":"#F7F7F7","gray300":"#E8E8E8","gray400":"#D9D9D9","gray500":"#CCCCCC","gray600":"#717171","gray700":"#707070","gray800":"#545454","gray900":"#333333","dark":"#545454","light":"#F7F7F7","primary":"#0069D4","secondary":"#333333","bodyText":"#333333","bodyBg":"#FFFFFF","info":"#409AE2","success":"#41C5AE","warning":"#FCC844","danger":"#BC341B","alertSystem":"#FF6600","textMuted":"#707070","highlight":"#FFFCAD","outline":"var(--lia-bs-primary)","custom":["#D3F5A4","#243A5E"],"__typename":"ColorsThemeSettings"},"divider":{"size":"3px","marginLeft":"4px","marginRight":"4px","borderRadius":"50%","bgColor":"var(--lia-bs-gray-600)","bgColorActive":"var(--lia-bs-gray-600)","__typename":"DividerThemeSettings"},"dropdown":{"fontSize":"var(--lia-bs-font-size-sm)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius-sm)","dividerBg":"var(--lia-bs-gray-300)","itemPaddingY":"5px","itemPaddingX":"20px","headerColor":"var(--lia-bs-gray-700)","__typename":"DropdownThemeSettings"},"email":{"link":{"color":"#0069D4","hoverColor":"#0061c2","decoration":"none","hoverDecoration":"underline","__typename":"EmailLinkSettings"},"border":{"color":"#e4e4e4","__typename":"EmailBorderSettings"},"buttons":{"borderRadiusLg":"5px","paddingXLg":"16px","paddingYLg":"7px","fontWeight":"700","primaryTextColor":"#ffffff","primaryTextHoverColor":"#ffffff","primaryBgColor":"#0069D4","primaryBgHoverColor":"#005cb8","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","__typename":"EmailButtonsSettings"},"panel":{"borderRadius":"5px","borderColor":"#e4e4e4","__typename":"EmailPanelSettings"},"__typename":"EmailThemeSettings"},"emoji":{"skinToneDefault":"#ffcd43","skinToneLight":"#fae3c5","skinToneMediumLight":"#e2cfa5","skinToneMedium":"#daa478","skinToneMediumDark":"#a78058","skinToneDark":"#5e4d43","__typename":"EmojiThemeSettings"},"heading":{"color":"var(--lia-bs-body-color)","fontFamily":"Segoe UI","fontStyle":"NORMAL","fontWeight":"400","h1FontSize":"34px","h2FontSize":"32px","h3FontSize":"28px","h4FontSize":"24px","h5FontSize":"20px","h6FontSize":"16px","lineHeight":"1.3","subHeaderFontSize":"11px","subHeaderFontWeight":"500","h1LetterSpacing":"normal","h2LetterSpacing":"normal","h3LetterSpacing":"normal","h4LetterSpacing":"normal","h5LetterSpacing":"normal","h6LetterSpacing":"normal","subHeaderLetterSpacing":"2px","h1FontWeight":"var(--lia-bs-headings-font-weight)","h2FontWeight":"var(--lia-bs-headings-font-weight)","h3FontWeight":"var(--lia-bs-headings-font-weight)","h4FontWeight":"var(--lia-bs-headings-font-weight)","h5FontWeight":"var(--lia-bs-headings-font-weight)","h6FontWeight":"var(--lia-bs-headings-font-weight)","__typename":"HeadingThemeSettings"},"icons":{"size10":"10px","size12":"12px","size14":"14px","size16":"16px","size20":"20px","size24":"24px","size30":"30px","size40":"40px","size50":"50px","size60":"60px","size80":"80px","size120":"120px","size160":"160px","__typename":"IconsThemeSettings"},"imagePreview":{"bgColor":"var(--lia-bs-gray-900)","titleColor":"var(--lia-bs-white)","controlColor":"var(--lia-bs-white)","controlBgColor":"var(--lia-bs-gray-800)","__typename":"ImagePreviewThemeSettings"},"input":{"borderColor":"var(--lia-bs-gray-600)","disabledColor":"var(--lia-bs-gray-600)","focusBorderColor":"var(--lia-bs-primary)","labelMarginBottom":"10px","btnFontSize":"var(--lia-bs-font-size-sm)","focusBoxShadow":"0 0 0 3px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","checkLabelMarginBottom":"2px","checkboxBorderRadius":"3px","borderRadiusSm":"var(--lia-bs-border-radius-sm)","borderRadius":"var(--lia-bs-border-radius)","borderRadiusLg":"var(--lia-bs-border-radius-lg)","formTextMarginTop":"4px","textAreaBorderRadius":"var(--lia-bs-border-radius)","activeFillColor":"var(--lia-bs-primary)","__typename":"InputThemeSettings"},"loading":{"dotDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.2)","dotLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.5)","barDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.06)","barLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.4)","__typename":"LoadingThemeSettings"},"link":{"color":"var(--lia-bs-primary)","hoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) - 10%))","decoration":"none","hoverDecoration":"underline","__typename":"LinkThemeSettings"},"listGroup":{"itemPaddingY":"15px","itemPaddingX":"15px","borderColor":"var(--lia-bs-gray-300)","__typename":"ListGroupThemeSettings"},"modal":{"contentTextColor":"var(--lia-bs-body-color)","contentBg":"var(--lia-bs-white)","backgroundBg":"var(--lia-bs-black)","smSize":"440px","mdSize":"760px","lgSize":"1080px","backdropOpacity":0.3,"contentBoxShadowXs":"var(--lia-bs-box-shadow-sm)","contentBoxShadow":"var(--lia-bs-box-shadow)","headerFontWeight":"700","__typename":"ModalThemeSettings"},"navbar":{"position":"FIXED","background":{"attachment":null,"clip":null,"color":"var(--lia-bs-white)","imageAssetName":"","imageLastModified":"0","origin":null,"position":"CENTER_CENTER","repeat":"NO_REPEAT","size":"COVER","__typename":"BackgroundProps"},"backgroundOpacity":0.8,"paddingTop":"15px","paddingBottom":"15px","borderBottom":"1px solid var(--lia-bs-border-color)","boxShadow":"var(--lia-bs-box-shadow-sm)","brandMarginRight":"30px","brandMarginRightSm":"10px","brandLogoHeight":"30px","linkGap":"10px","linkJustifyContent":"flex-start","linkPaddingY":"5px","linkPaddingX":"10px","linkDropdownPaddingY":"9px","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkColor":"var(--lia-bs-body-color)","linkHoverColor":"var(--lia-bs-primary)","linkFontSize":"var(--lia-bs-font-size-sm)","linkFontStyle":"NORMAL","linkFontWeight":"400","linkTextTransform":"NONE","linkLetterSpacing":"normal","linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkBgColor":"transparent","linkBgHoverColor":"transparent","linkBorder":"none","linkBorderHover":"none","linkBoxShadow":"none","linkBoxShadowHover":"none","linkTextBorderBottom":"none","linkTextBorderBottomHover":"none","dropdownPaddingTop":"10px","dropdownPaddingBottom":"15px","dropdownPaddingX":"10px","dropdownMenuOffset":"2px","dropdownDividerMarginTop":"10px","dropdownDividerMarginBottom":"10px","dropdownBorderColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1)","controllerIconColor":"var(--lia-bs-body-color)","controllerIconHoverColor":"var(--lia-bs-body-color)","controllerTextColor":"var(--lia-nav-controller-icon-color)","controllerTextHoverColor":"var(--lia-nav-controller-icon-hover-color)","controllerHighlightColor":"hsla(30, 100%, 50%)","controllerHighlightTextColor":"var(--lia-yiq-light)","controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerColor":"var(--lia-nav-controller-icon-color)","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","hamburgerBgColor":"transparent","hamburgerBgHoverColor":"transparent","hamburgerBorder":"none","hamburgerBorderHover":"none","collapseMenuMarginLeft":"20px","collapseMenuDividerBg":"var(--lia-nav-link-color)","collapseMenuDividerOpacity":0.16,"__typename":"NavbarThemeSettings"},"pager":{"textColor":"var(--lia-bs-link-color)","textFontWeight":"var(--lia-font-weight-md)","textFontSize":"var(--lia-bs-font-size-sm)","__typename":"PagerThemeSettings"},"panel":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-bs-border-radius)","borderColor":"var(--lia-bs-border-color)","boxShadow":"none","__typename":"PanelThemeSettings"},"popover":{"arrowHeight":"8px","arrowWidth":"16px","maxWidth":"300px","minWidth":"100px","headerBg":"var(--lia-bs-white)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius)","boxShadow":"0 0.5rem 1rem hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.15)","__typename":"PopoverThemeSettings"},"prism":{"color":"#000000","bgColor":"#f5f2f0","fontFamily":"var(--font-family-monospace)","fontSize":"var(--lia-bs-font-size-base)","fontWeightBold":"var(--lia-bs-font-weight-bold)","fontStyleItalic":"italic","tabSize":2,"highlightColor":"#b3d4fc","commentColor":"#62707e","punctuationColor":"#6f6f6f","namespaceOpacity":"0.7","propColor":"#990055","selectorColor":"#517a00","operatorColor":"#906736","operatorBgColor":"hsla(0, 0%, 100%, 0.5)","keywordColor":"#0076a9","functionColor":"#d3284b","variableColor":"#c14700","__typename":"PrismThemeSettings"},"rte":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":" var(--lia-panel-box-shadow)","customColor1":"#bfedd2","customColor2":"#fbeeb8","customColor3":"#f8cac6","customColor4":"#eccafa","customColor5":"#c2e0f4","customColor6":"#2dc26b","customColor7":"#f1c40f","customColor8":"#e03e2d","customColor9":"#b96ad9","customColor10":"#3598db","customColor11":"#169179","customColor12":"#e67e23","customColor13":"#ba372a","customColor14":"#843fa1","customColor15":"#236fa1","customColor16":"#ecf0f1","customColor17":"#ced4d9","customColor18":"#95a5a6","customColor19":"#7e8c8d","customColor20":"#34495e","customColor21":"#000000","customColor22":"#ffffff","defaultMessageHeaderMarginTop":"40px","defaultMessageHeaderMarginBottom":"20px","defaultMessageItemMarginTop":"0","defaultMessageItemMarginBottom":"10px","diffAddedColor":"hsla(170, 53%, 51%, 0.4)","diffChangedColor":"hsla(43, 97%, 63%, 0.4)","diffNoneColor":"hsla(0, 0%, 80%, 0.4)","diffRemovedColor":"hsla(9, 74%, 47%, 0.4)","specialMessageHeaderMarginTop":"40px","specialMessageHeaderMarginBottom":"20px","specialMessageItemMarginTop":"0","specialMessageItemMarginBottom":"10px","__typename":"RteThemeSettings"},"tags":{"bgColor":"var(--lia-bs-gray-200)","bgHoverColor":"var(--lia-bs-gray-400)","borderRadius":"var(--lia-bs-border-radius-sm)","color":"var(--lia-bs-body-color)","hoverColor":"var(--lia-bs-body-color)","fontWeight":"var(--lia-font-weight-md)","fontSize":"var(--lia-font-size-xxs)","textTransform":"UPPERCASE","letterSpacing":"0.5px","__typename":"TagsThemeSettings"},"toasts":{"borderRadius":"var(--lia-bs-border-radius)","paddingX":"12px","__typename":"ToastsThemeSettings"},"typography":{"fontFamilyBase":"Segoe UI","fontStyleBase":"NORMAL","fontWeightBase":"400","fontWeightLight":"300","fontWeightNormal":"400","fontWeightMd":"500","fontWeightBold":"700","letterSpacingSm":"normal","letterSpacingXs":"normal","lineHeightBase":"1.5","fontSizeBase":"16px","fontSizeXxs":"11px","fontSizeXs":"12px","fontSizeSm":"14px","fontSizeLg":"20px","fontSizeXl":"24px","smallFontSize":"14px","customFonts":[{"source":"SERVER","name":"Segoe UI","styles":[{"style":"NORMAL","weight":"400","__typename":"FontStyleData"},{"style":"NORMAL","weight":"300","__typename":"FontStyleData"},{"style":"NORMAL","weight":"600","__typename":"FontStyleData"},{"style":"NORMAL","weight":"700","__typename":"FontStyleData"},{"style":"ITALIC","weight":"400","__typename":"FontStyleData"}],"assetNames":["SegoeUI-normal-400.woff2","SegoeUI-normal-300.woff2","SegoeUI-normal-600.woff2","SegoeUI-normal-700.woff2","SegoeUI-italic-400.woff2"],"__typename":"CustomFont"},{"source":"SERVER","name":"MWF Fluent Icons","styles":[{"style":"NORMAL","weight":"400","__typename":"FontStyleData"}],"assetNames":["MWFFluentIcons-normal-400.woff2"],"__typename":"CustomFont"}],"__typename":"TypographyThemeSettings"},"unstyledListItem":{"marginBottomSm":"5px","marginBottomMd":"10px","marginBottomLg":"15px","marginBottomXl":"20px","marginBottomXxl":"25px","__typename":"UnstyledListItemThemeSettings"},"yiq":{"light":"#ffffff","dark":"#000000","__typename":"YiqThemeSettings"},"colorLightness":{"primaryDark":0.36,"primaryLight":0.74,"primaryLighter":0.89,"primaryLightest":0.95,"infoDark":0.39,"infoLight":0.72,"infoLighter":0.85,"infoLightest":0.93,"successDark":0.24,"successLight":0.62,"successLighter":0.8,"successLightest":0.91,"warningDark":0.39,"warningLight":0.68,"warningLighter":0.84,"warningLightest":0.93,"dangerDark":0.41,"dangerLight":0.72,"dangerLighter":0.89,"dangerLightest":0.95,"__typename":"ColorLightnessThemeSettings"},"localOverride":false,"__typename":"Theme"},"localOverride":false},"CachedAsset:text:en_US-components/common/EmailVerification-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/common/EmailVerification-1737115705000","value":{"email.verification.title":"Email Verification Required","email.verification.message.update.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. To change your email, visit \u003clink\u003eMy Settings\u003c/link\u003e.","email.verification.message.resend.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. \u003clink\u003eResend email\u003c/link\u003e."},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-1737115705000","value":{"title":"Loading..."},"localOverride":false},"CachedAsset:text:en_US-pages/blogs/BlogMessagePage-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-pages/blogs/BlogMessagePage-1737115705000","value":{"title":"{contextMessageSubject} | {communityTitle}","errorMissing":"This blog post cannot be found","name":"Blog Message Page","section.blog-article.title":"Blog Post","archivedMessageTitle":"This Content Has Been Archived","section.section-1729184836777.title":"","section.section-1729184836777.description":"","section.CncIde.title":"Blog Post","section.tifEmD.description":"","section.tifEmD.title":""},"localOverride":false},"CachedAsset:quilt:o365.prod:pages/blogs/BlogMessagePage:board:DesenvolvedoresBR-1739785326468":{"__typename":"CachedAsset","id":"quilt:o365.prod:pages/blogs/BlogMessagePage:board:DesenvolvedoresBR-1739785326468","value":{"id":"BlogMessagePage","container":{"id":"Common","headerProps":{"backgroundImageProps":null,"backgroundColor":null,"addComponents":null,"removeComponents":["community.widget.bannerWidget"],"componentOrder":null,"__typename":"QuiltContainerSectionProps"},"headerComponentProps":{"community.widget.breadcrumbWidget":{"disableLastCrumbForDesktop":false}},"footerProps":null,"footerComponentProps":null,"items":[{"id":"blog-article","layout":"ONE_COLUMN","bgColor":null,"showTitle":null,"showDescription":null,"textPosition":null,"textColor":null,"sectionEditLevel":"LOCKED","bgImage":null,"disableSpacing":null,"edgeToEdgeDisplay":null,"fullHeight":null,"showBorder":null,"__typename":"OneColumnQuiltSection","columnMap":{"main":[{"id":"blogs.widget.blogArticleWidget","className":"lia-blog-container","props":null,"__typename":"QuiltComponent"}],"__typename":"OneSectionColumns"}},{"id":"section-1729184836777","layout":"MAIN_SIDE","bgColor":"transparent","showTitle":false,"showDescription":false,"textPosition":"CENTER","textColor":"var(--lia-bs-body-color)","sectionEditLevel":null,"bgImage":null,"disableSpacing":null,"edgeToEdgeDisplay":null,"fullHeight":null,"showBorder":null,"__typename":"MainSideQuiltSection","columnMap":{"main":[],"side":[{"id":"custom.widget.Social_Sharing","className":null,"props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":true,"title":"Share","lazyLoad":false},"__typename":"QuiltComponent"}],"__typename":"MainSideSectionColumns"}}],"__typename":"QuiltContainer"},"__typename":"Quilt","localOverride":false},"localOverride":false},"CachedAsset:quiltWrapper:o365.prod:Common:1739785271215":{"__typename":"CachedAsset","id":"quiltWrapper:o365.prod:Common:1739785271215","value":{"id":"Common","header":{"backgroundImageProps":{"assetName":null,"backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"CENTER_CENTER","lastModified":null,"__typename":"BackgroundImageProps"},"backgroundColor":"transparent","items":[{"id":"community.widget.navbarWidget","props":{"showUserName":true,"showRegisterLink":true,"useIconLanguagePicker":true,"useLabelLanguagePicker":true,"className":"QuiltComponent_lia-component-edit-mode__0nCcm","links":{"sideLinks":[],"mainLinks":[{"children":[],"linkType":"INTERNAL","id":"gxcuf89792","params":{},"routeName":"CommunityPage"},{"children":[],"linkType":"EXTERNAL","id":"external-link","url":"/Directory","target":"SELF"},{"children":[{"linkType":"INTERNAL","id":"microsoft365","params":{"categoryId":"microsoft365"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-teams","params":{"categoryId":"MicrosoftTeams"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"windows","params":{"categoryId":"Windows"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-securityand-compliance","params":{"categoryId":"microsoft-security"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"outlook","params":{"categoryId":"Outlook"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"planner","params":{"categoryId":"Planner"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"windows-server","params":{"categoryId":"Windows-Server"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"azure","params":{"categoryId":"Azure"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"exchange","params":{"categoryId":"Exchange"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-endpoint-manager","params":{"categoryId":"microsoft-endpoint-manager"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"s-q-l-server","params":{"categoryId":"SQL-Server"},"routeName":"CategoryPage"},{"linkType":"EXTERNAL","id":"external-link-2","url":"/Directory","target":"SELF"}],"linkType":"EXTERNAL","id":"communities","url":"/","target":"BLANK"},{"children":[{"linkType":"INTERNAL","id":"education-sector","params":{"categoryId":"EducationSector"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"a-i","params":{"categoryId":"AI"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"i-t-ops-talk","params":{"categoryId":"ITOpsTalk"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"partner-community","params":{"categoryId":"PartnerCommunity"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-mechanics","params":{"categoryId":"MicrosoftMechanics"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"healthcare-and-life-sciences","params":{"categoryId":"HealthcareAndLifeSciences"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"public-sector","params":{"categoryId":"PublicSector"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"io-t","params":{"categoryId":"IoT"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"driving-adoption","params":{"categoryId":"DrivingAdoption"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"s-m-b","params":{"categoryId":"SMB"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"startupsat-microsoft","params":{"categoryId":"StartupsatMicrosoft"},"routeName":"CategoryPage"},{"linkType":"EXTERNAL","id":"external-link-1","url":"/Directory","target":"SELF"}],"linkType":"EXTERNAL","id":"communities-1","url":"/","target":"SELF"},{"children":[],"linkType":"EXTERNAL","id":"external","url":"/Blogs","target":"SELF"},{"children":[],"linkType":"EXTERNAL","id":"external-1","url":"/Events","target":"SELF"},{"children":[{"linkType":"INTERNAL","id":"microsoft-learn-1","params":{"categoryId":"MicrosoftLearn"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-learn-blog","params":{"boardId":"MicrosoftLearnBlog","categoryId":"MicrosoftLearn"},"routeName":"BlogBoardPage"},{"linkType":"EXTERNAL","id":"external-10","url":"https://learningroomdirectory.microsoft.com/","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-3","url":"https://docs.microsoft.com/learn/dynamics365/?WT.mc_id=techcom_header-webpage-m365","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-4","url":"https://docs.microsoft.com/learn/m365/?wt.mc_id=techcom_header-webpage-m365","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-5","url":"https://docs.microsoft.com/learn/topics/sci/?wt.mc_id=techcom_header-webpage-m365","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-6","url":"https://docs.microsoft.com/learn/powerplatform/?wt.mc_id=techcom_header-webpage-powerplatform","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-7","url":"https://docs.microsoft.com/learn/github/?wt.mc_id=techcom_header-webpage-github","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-8","url":"https://docs.microsoft.com/learn/teams/?wt.mc_id=techcom_header-webpage-teams","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-9","url":"https://docs.microsoft.com/learn/dotnet/?wt.mc_id=techcom_header-webpage-dotnet","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-2","url":"https://docs.microsoft.com/learn/azure/?WT.mc_id=techcom_header-webpage-m365","target":"BLANK"}],"linkType":"INTERNAL","id":"microsoft-learn","params":{"categoryId":"MicrosoftLearn"},"routeName":"CategoryPage"},{"children":[],"linkType":"INTERNAL","id":"community-info-center","params":{"categoryId":"Community-Info-Center"},"routeName":"CategoryPage"}]},"style":{"boxShadow":"var(--lia-bs-box-shadow-sm)","controllerHighlightColor":"hsla(30, 100%, 50%)","linkFontWeight":"400","dropdownDividerMarginBottom":"10px","hamburgerBorderHover":"none","linkBoxShadowHover":"none","linkFontSize":"14px","backgroundOpacity":0.8,"controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerBgColor":"transparent","hamburgerColor":"var(--lia-nav-controller-icon-color)","linkTextBorderBottom":"none","brandLogoHeight":"30px","linkBgHoverColor":"transparent","linkLetterSpacing":"normal","collapseMenuDividerOpacity":0.16,"dropdownPaddingBottom":"15px","paddingBottom":"15px","dropdownMenuOffset":"2px","hamburgerBgHoverColor":"transparent","borderBottom":"1px solid var(--lia-bs-border-color)","hamburgerBorder":"none","dropdownPaddingX":"10px","brandMarginRightSm":"10px","linkBoxShadow":"none","collapseMenuDividerBg":"var(--lia-nav-link-color)","linkColor":"var(--lia-bs-body-color)","linkJustifyContent":"flex-start","dropdownPaddingTop":"10px","controllerHighlightTextColor":"var(--lia-yiq-dark)","controllerTextColor":"var(--lia-nav-controller-icon-color)","background":{"imageAssetName":"","color":"var(--lia-bs-white)","size":"COVER","repeat":"NO_REPEAT","position":"CENTER_CENTER","imageLastModified":""},"linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkHoverColor":"var(--lia-bs-body-color)","position":"FIXED","linkBorder":"none","linkTextBorderBottomHover":"2px solid var(--lia-bs-body-color)","brandMarginRight":"30px","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","linkBorderHover":"none","collapseMenuMarginLeft":"20px","linkFontStyle":"NORMAL","controllerTextHoverColor":"var(--lia-nav-controller-icon-hover-color)","linkPaddingX":"10px","linkPaddingY":"5px","paddingTop":"15px","linkTextTransform":"NONE","dropdownBorderColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1)","linkBgColor":"transparent","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkDropdownPaddingY":"9px","controllerIconColor":"var(--lia-bs-body-color)","dropdownDividerMarginTop":"10px","linkGap":"10px","controllerIconHoverColor":"var(--lia-bs-body-color)"},"showSearchIcon":false,"languagePickerStyle":"iconAndLabel"},"__typename":"QuiltComponent"},{"id":"community.widget.breadcrumbWidget","props":{"backgroundColor":"transparent","linkHighlightColor":"var(--lia-bs-primary)","visualEffects":{"showBottomBorder":true},"linkTextColor":"var(--lia-bs-gray-700)"},"__typename":"QuiltComponent"},{"id":"custom.widget.community_banner","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"usePageWidth":false,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"},{"id":"custom.widget.HeroBanner","props":{"widgetVisibility":"signedInOrAnonymous","usePageWidth":false,"useTitle":true,"cMax_items":3,"useBackground":false,"title":"","lazyLoad":false,"widgetChooser":"custom.widget.HeroBanner"},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"footer":{"backgroundImageProps":{"assetName":null,"backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"CENTER_CENTER","lastModified":null,"__typename":"BackgroundImageProps"},"backgroundColor":"transparent","items":[{"id":"custom.widget.MicrosoftFooter","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"__typename":"QuiltWrapper","localOverride":false},"localOverride":false},"CachedAsset:text:en_US-components/common/ActionFeedback-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/common/ActionFeedback-1737115705000","value":{"joinedGroupHub.title":"Welcome","joinedGroupHub.message":"You are now a member of this group and are subscribed to updates.","groupHubInviteNotFound.title":"Invitation Not Found","groupHubInviteNotFound.message":"Sorry, we could not find your invitation to the group. The owner may have canceled the invite.","groupHubNotFound.title":"Group Not Found","groupHubNotFound.message":"The grouphub you tried to join does not exist. It may have been deleted.","existingGroupHubMember.title":"Already Joined","existingGroupHubMember.message":"You are already a member of this group.","accountLocked.title":"Account Locked","accountLocked.message":"Your account has been locked due to multiple failed attempts. Try again in {lockoutTime} minutes.","editedGroupHub.title":"Changes Saved","editedGroupHub.message":"Your group has been updated.","leftGroupHub.title":"Goodbye","leftGroupHub.message":"You are no longer a member of this group and will not receive future updates.","deletedGroupHub.title":"Deleted","deletedGroupHub.message":"The group has been deleted.","groupHubCreated.title":"Group Created","groupHubCreated.message":"{groupHubName} is ready to use","accountClosed.title":"Account Closed","accountClosed.message":"The account has been closed and you will now be redirected to the homepage","resetTokenExpired.title":"Reset Password Link has Expired","resetTokenExpired.message":"Try resetting your password again","invalidUrl.title":"Invalid URL","invalidUrl.message":"The URL you're using is not recognized. Verify your URL and try again.","accountClosedForUser.title":"Account Closed","accountClosedForUser.message":"{userName}'s account is closed","inviteTokenInvalid.title":"Invitation Invalid","inviteTokenInvalid.message":"Your invitation to the community has been canceled or expired.","inviteTokenError.title":"Invitation Verification Failed","inviteTokenError.message":"The url you are utilizing is not recognized. Verify your URL and try again","pageNotFound.title":"Access Denied","pageNotFound.message":"You do not have access to this area of the community or it doesn't exist","eventAttending.title":"Responded as Attending","eventAttending.message":"You'll be notified when there's new activity and reminded as the event approaches","eventInterested.title":"Responded as Interested","eventInterested.message":"You'll be notified when there's new activity and reminded as the event approaches","eventNotFound.title":"Event Not Found","eventNotFound.message":"The event you tried to respond to does not exist.","redirectToRelatedPage.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.message":"The content you are trying to access is archived","redirectToRelatedPage.message":"The content you are trying to access is archived","relatedUrl.archivalLink.flyoutMessage":"The content you are trying to access is archived \u003clink\u003eView Archived Content\u003c/link\u003e"},"localOverride":false},"CachedAsset:component:custom.widget.community_banner-en-1739785400743":{"__typename":"CachedAsset","id":"component:custom.widget.community_banner-en-1739785400743","value":{"component":{"id":"custom.widget.community_banner","template":{"id":"community_banner","markupLanguage":"HANDLEBARS","style":".community-banner {\n a.top-bar.btn {\n top: 0px;\n width: 100%;\n z-index: 999;\n text-align: center;\n left: 0px;\n background: #0068b8;\n color: white;\n padding: 10px 0px;\n display:block;\n box-shadow:none !important;\n border: none !important;\n border-radius: none !important;\n margin: 0px !important;\n font-size:14px;\n }\n}","texts":null,"defaults":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"community announcement text","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.community_banner","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"community announcement text","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":{"css":".custom_widget_community_banner_community-banner_1a5zb_1 {\n a.custom_widget_community_banner_top-bar_1a5zb_2.custom_widget_community_banner_btn_1a5zb_2 {\n top: 0;\n width: 100%;\n z-index: 999;\n text-align: center;\n left: 0;\n background: #0068b8;\n color: white;\n padding: 0.625rem 0;\n display:block;\n box-shadow:none !important;\n border: none !important;\n border-radius: none !important;\n margin: 0 !important;\n font-size:0.875rem;\n }\n}","tokens":{"community-banner":"custom_widget_community_banner_community-banner_1a5zb_1","top-bar":"custom_widget_community_banner_top-bar_1a5zb_2","btn":"custom_widget_community_banner_btn_1a5zb_2"}},"form":null},"localOverride":false},"CachedAsset:component:custom.widget.HeroBanner-en-1739785400743":{"__typename":"CachedAsset","id":"component:custom.widget.HeroBanner-en-1739785400743","value":{"component":{"id":"custom.widget.HeroBanner","template":{"id":"HeroBanner","markupLanguage":"REACT","style":null,"texts":{"searchPlaceholderText":"Search this community","followActionText":"Follow","unfollowActionText":"Following","searchOnHoverText":"Please enter your search term(s) and then press return key to complete a search."},"defaults":{"config":{"applicablePages":[],"dynamicByCoreNode":null,"description":null,"fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[{"id":"max_items","dataType":"NUMBER","list":false,"defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"control":"INPUT","__typename":"PropDefinition"}],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.HeroBanner","form":{"fields":[{"id":"widgetChooser","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"title","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useTitle","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useBackground","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"widgetVisibility","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"moreOptions","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"cMax_items","validation":null,"noValidation":null,"dataType":"NUMBER","list":false,"control":"INPUT","defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"__typename":"FormField"}],"layout":{"rows":[{"id":"widgetChooserGroup","type":"fieldset","as":null,"items":[{"id":"widgetChooser","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"titleGroup","type":"fieldset","as":null,"items":[{"id":"title","className":null,"__typename":"FormFieldRef"},{"id":"useTitle","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"useBackground","type":"fieldset","as":null,"items":[{"id":"useBackground","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"widgetVisibility","type":"fieldset","as":null,"items":[{"id":"widgetVisibility","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"moreOptionsGroup","type":"fieldset","as":null,"items":[{"id":"moreOptions","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"componentPropsGroup","type":"fieldset","as":null,"items":[{"id":"cMax_items","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"}],"actionButtons":null,"className":"custom_widget_HeroBanner_form","formGroupFieldSeparator":"divider","__typename":"FormLayout"},"__typename":"Form"},"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"dynamicByCoreNode":null,"description":null,"fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[{"id":"max_items","dataType":"NUMBER","list":false,"defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"control":"INPUT","__typename":"PropDefinition"}],"__typename":"ComponentProperties"},"form":{"fields":[{"id":"widgetChooser","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"title","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useTitle","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useBackground","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"widgetVisibility","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"moreOptions","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"cMax_items","validation":null,"noValidation":null,"dataType":"NUMBER","list":false,"control":"INPUT","defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"__typename":"FormField"}],"layout":{"rows":[{"id":"widgetChooserGroup","type":"fieldset","as":null,"items":[{"id":"widgetChooser","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"titleGroup","type":"fieldset","as":null,"items":[{"id":"title","className":null,"__typename":"FormFieldRef"},{"id":"useTitle","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"useBackground","type":"fieldset","as":null,"items":[{"id":"useBackground","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"widgetVisibility","type":"fieldset","as":null,"items":[{"id":"widgetVisibility","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"moreOptionsGroup","type":"fieldset","as":null,"items":[{"id":"moreOptions","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"componentPropsGroup","type":"fieldset","as":null,"items":[{"id":"cMax_items","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"}],"actionButtons":null,"className":"custom_widget_HeroBanner_form","formGroupFieldSeparator":"divider","__typename":"FormLayout"},"__typename":"Form"},"__typename":"Component","localOverride":false},"globalCss":null,"form":{"fields":[{"id":"widgetChooser","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"title","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useTitle","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useBackground","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"widgetVisibility","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"moreOptions","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"cMax_items","validation":null,"noValidation":null,"dataType":"NUMBER","list":false,"control":"INPUT","defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"__typename":"FormField"}],"layout":{"rows":[{"id":"widgetChooserGroup","type":"fieldset","as":null,"items":[{"id":"widgetChooser","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"titleGroup","type":"fieldset","as":null,"items":[{"id":"title","className":null,"__typename":"FormFieldRef"},{"id":"useTitle","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"useBackground","type":"fieldset","as":null,"items":[{"id":"useBackground","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"widgetVisibility","type":"fieldset","as":null,"items":[{"id":"widgetVisibility","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"moreOptionsGroup","type":"fieldset","as":null,"items":[{"id":"moreOptions","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"componentPropsGroup","type":"fieldset","as":null,"items":[{"id":"cMax_items","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"}],"actionButtons":null,"className":"custom_widget_HeroBanner_form","formGroupFieldSeparator":"divider","__typename":"FormLayout"},"__typename":"Form"}},"localOverride":false},"CachedAsset:component:custom.widget.Social_Sharing-en-1739785400743":{"__typename":"CachedAsset","id":"component:custom.widget.Social_Sharing-en-1739785400743","value":{"component":{"id":"custom.widget.Social_Sharing","template":{"id":"Social_Sharing","markupLanguage":"HANDLEBARS","style":".social-share {\n .sharing-options {\n position: relative;\n margin: 0;\n padding: 0;\n line-height: 10px;\n display: flex;\n justify-content: left;\n gap: 5px;\n list-style-type: none;\n li {\n text-align: left;\n a {\n min-width: 30px;\n min-height: 30px;\n display: block;\n padding: 1px;\n .social-share-linkedin {\n img {\n background-color: rgb(0, 119, 181);\n }\n }\n .social-share-facebook {\n img {\n background-color: rgb(59, 89, 152);\n }\n }\n .social-share-x {\n img {\n background-color: rgb(0, 0, 0);\n }\n }\n .social-share-rss {\n img {\n background-color: rgb(0, 0, 0);\n }\n }\n .social-share-reddit {\n img {\n background-color: rgb(255, 69, 0);\n }\n }\n .social-share-email {\n img {\n background-color: rgb(132, 132, 132);\n }\n }\n }\n a {\n img {\n height: 2rem;\n }\n }\n }\n }\n}\n","texts":null,"defaults":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"Adds buttons to share to various social media websites","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.Social_Sharing","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"Adds buttons to share to various social media websites","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":{"css":".custom_widget_Social_Sharing_social-share_c7xxz_1 {\n .custom_widget_Social_Sharing_sharing-options_c7xxz_2 {\n position: relative;\n margin: 0;\n padding: 0;\n line-height: 0.625rem;\n display: flex;\n justify-content: left;\n gap: 0.3125rem;\n list-style-type: none;\n li {\n text-align: left;\n a {\n min-width: 1.875rem;\n min-height: 1.875rem;\n display: block;\n padding: 0.0625rem;\n .custom_widget_Social_Sharing_social-share-linkedin_c7xxz_18 {\n img {\n background-color: rgb(0, 119, 181);\n }\n }\n .custom_widget_Social_Sharing_social-share-facebook_c7xxz_23 {\n img {\n background-color: rgb(59, 89, 152);\n }\n }\n .custom_widget_Social_Sharing_social-share-x_c7xxz_28 {\n img {\n background-color: rgb(0, 0, 0);\n }\n }\n .custom_widget_Social_Sharing_social-share-rss_c7xxz_33 {\n img {\n background-color: rgb(0, 0, 0);\n }\n }\n .custom_widget_Social_Sharing_social-share-reddit_c7xxz_38 {\n img {\n background-color: rgb(255, 69, 0);\n }\n }\n .custom_widget_Social_Sharing_social-share-email_c7xxz_43 {\n img {\n background-color: rgb(132, 132, 132);\n }\n }\n }\n a {\n img {\n height: 2rem;\n }\n }\n }\n }\n}\n","tokens":{"social-share":"custom_widget_Social_Sharing_social-share_c7xxz_1","sharing-options":"custom_widget_Social_Sharing_sharing-options_c7xxz_2","social-share-linkedin":"custom_widget_Social_Sharing_social-share-linkedin_c7xxz_18","social-share-facebook":"custom_widget_Social_Sharing_social-share-facebook_c7xxz_23","social-share-x":"custom_widget_Social_Sharing_social-share-x_c7xxz_28","social-share-rss":"custom_widget_Social_Sharing_social-share-rss_c7xxz_33","social-share-reddit":"custom_widget_Social_Sharing_social-share-reddit_c7xxz_38","social-share-email":"custom_widget_Social_Sharing_social-share-email_c7xxz_43"}},"form":null},"localOverride":false},"CachedAsset:component:custom.widget.MicrosoftFooter-en-1739785400743":{"__typename":"CachedAsset","id":"component:custom.widget.MicrosoftFooter-en-1739785400743","value":{"component":{"id":"custom.widget.MicrosoftFooter","template":{"id":"MicrosoftFooter","markupLanguage":"HANDLEBARS","style":".context-uhf {\n min-width: 280px;\n font-size: 15px;\n box-sizing: border-box;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n \u0026 *,\n \u0026 *:before,\n \u0026 *:after {\n box-sizing: inherit;\n }\n a.c-uhff-link {\n color: #616161;\n word-break: break-word;\n text-decoration: none;\n }\n \u0026a:link,\n \u0026a:focus,\n \u0026a:hover,\n \u0026a:active,\n \u0026a:visited {\n text-decoration: none;\n color: inherit;\n }\n \u0026 div {\n font-family: 'Segoe UI', SegoeUI, 'Helvetica Neue', Helvetica, Arial, sans-serif;\n }\n}\n.c-uhff {\n background: #f2f2f2;\n margin: -1.5625;\n width: auto;\n height: auto;\n}\n.c-uhff-nav {\n margin: 0 auto;\n max-width: calc(1600px + 10%);\n padding: 0 5%;\n box-sizing: inherit;\n \u0026:before,\n \u0026:after {\n content: ' ';\n display: table;\n clear: left;\n }\n @media only screen and (max-width: 1083px) {\n padding-left: 12px;\n }\n .c-heading-4 {\n color: #616161;\n word-break: break-word;\n font-size: 15px;\n line-height: 20px;\n padding: 36px 0 4px;\n font-weight: 600;\n }\n .c-uhff-nav-row {\n .c-uhff-nav-group {\n display: block;\n float: left;\n min-height: 1px;\n vertical-align: text-top;\n padding: 0 12px;\n width: 100%;\n zoom: 1;\n \u0026:first-child {\n padding-left: 0;\n @media only screen and (max-width: 1083px) {\n padding-left: 12px;\n }\n }\n @media only screen and (min-width: 540px) and (max-width: 1082px) {\n width: 33.33333%;\n }\n @media only screen and (min-width: 1083px) {\n width: 16.6666666667%;\n }\n ul.c-list.f-bare {\n font-size: 11px;\n line-height: 16px;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 0;\n list-style-type: none;\n li {\n word-break: break-word;\n padding: 8px 0;\n margin: 0;\n }\n }\n }\n }\n}\n.c-uhff-base {\n background: #f2f2f2;\n margin: 0 auto;\n max-width: calc(1600px + 10%);\n padding: 30px 5% 16px;\n \u0026:before,\n \u0026:after {\n content: ' ';\n display: table;\n }\n \u0026:after {\n clear: both;\n }\n a.c-uhff-ccpa {\n font-size: 11px;\n line-height: 16px;\n float: left;\n margin: 3px 0;\n }\n a.c-uhff-ccpa:hover {\n text-decoration: underline;\n }\n ul.c-list {\n font-size: 11px;\n line-height: 16px;\n float: right;\n margin: 3px 0;\n color: #616161;\n li {\n padding: 0 24px 4px 0;\n display: inline-block;\n }\n }\n .c-list.f-bare {\n padding-left: 0;\n list-style-type: none;\n }\n @media only screen and (max-width: 1083px) {\n display: flex;\n flex-wrap: wrap;\n padding: 30px 24px 16px;\n }\n}\n","texts":{"New tab":"What's New","New 1":"Surface Laptop Studio 2","New 2":"Surface Laptop Go 3","New 3":"Surface Pro 9","New 4":"Surface Laptop 5","New 5":"Surface Studio 2+","New 6":"Copilot in Windows","New 7":"Microsoft 365","New 8":"Windows 11 apps","Store tab":"Microsoft Store","Store 1":"Account Profile","Store 2":"Download Center","Store 3":"Microsoft Store Support","Store 4":"Returns","Store 5":"Order tracking","Store 6":"Certified Refurbished","Store 7":"Microsoft Store Promise","Store 8":"Flexible Payments","Education tab":"Education","Edu 1":"Microsoft in education","Edu 2":"Devices for education","Edu 3":"Microsoft Teams for Education","Edu 4":"Microsoft 365 Education","Edu 5":"How to buy for your school","Edu 6":"Educator Training and development","Edu 7":"Deals for students and parents","Edu 8":"Azure for students","Business tab":"Business","Bus 1":"Microsoft Cloud","Bus 2":"Microsoft Security","Bus 3":"Dynamics 365","Bus 4":"Microsoft 365","Bus 5":"Microsoft Power Platform","Bus 6":"Microsoft Teams","Bus 7":"Microsoft Industry","Bus 8":"Small Business","Developer tab":"Developer \u0026 IT","Dev 1":"Azure","Dev 2":"Developer Center","Dev 3":"Documentation","Dev 4":"Microsoft Learn","Dev 5":"Microsoft Tech Community","Dev 6":"Azure Marketplace","Dev 7":"AppSource","Dev 8":"Visual Studio","Company tab":"Company","Com 1":"Careers","Com 2":"About Microsoft","Com 3":"Company News","Com 4":"Privacy at Microsoft","Com 5":"Investors","Com 6":"Diversity and inclusion","Com 7":"Accessiblity","Com 8":"Sustainibility"},"defaults":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"The Microsoft Footer","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.MicrosoftFooter","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"dynamicByCoreNode":false,"description":"The Microsoft Footer","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":{"css":".custom_widget_MicrosoftFooter_context-uhf_f95yq_1 {\n min-width: 17.5rem;\n font-size: 0.9375rem;\n box-sizing: border-box;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n \u0026 *,\n \u0026 *:before,\n \u0026 *:after {\n box-sizing: inherit;\n }\n a.custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12 {\n color: #616161;\n word-break: break-word;\n text-decoration: none;\n }\n \u0026a:link,\n \u0026a:focus,\n \u0026a:hover,\n \u0026a:active,\n \u0026a:visited {\n text-decoration: none;\n color: inherit;\n }\n \u0026 div {\n font-family: 'Segoe UI', SegoeUI, 'Helvetica Neue', Helvetica, Arial, sans-serif;\n }\n}\n.custom_widget_MicrosoftFooter_c-uhff_f95yq_12 {\n background: #f2f2f2;\n margin: -1.5625;\n width: auto;\n height: auto;\n}\n.custom_widget_MicrosoftFooter_c-uhff-nav_f95yq_35 {\n margin: 0 auto;\n max-width: calc(100rem + 10%);\n padding: 0 5%;\n box-sizing: inherit;\n \u0026:before,\n \u0026:after {\n content: ' ';\n display: table;\n clear: left;\n }\n @media only screen and (max-width: 1083px) {\n padding-left: 0.75rem;\n }\n .custom_widget_MicrosoftFooter_c-heading-4_f95yq_49 {\n color: #616161;\n word-break: break-word;\n font-size: 0.9375rem;\n line-height: 1.25rem;\n padding: 2.25rem 0 0.25rem;\n font-weight: 600;\n }\n .custom_widget_MicrosoftFooter_c-uhff-nav-row_f95yq_57 {\n .custom_widget_MicrosoftFooter_c-uhff-nav-group_f95yq_58 {\n display: block;\n float: left;\n min-height: 0.0625rem;\n vertical-align: text-top;\n padding: 0 0.75rem;\n width: 100%;\n zoom: 1;\n \u0026:first-child {\n padding-left: 0;\n @media only screen and (max-width: 1083px) {\n padding-left: 0.75rem;\n }\n }\n @media only screen and (min-width: 540px) and (max-width: 1082px) {\n width: 33.33333%;\n }\n @media only screen and (min-width: 1083px) {\n width: 16.6666666667%;\n }\n ul.custom_widget_MicrosoftFooter_c-list_f95yq_78.custom_widget_MicrosoftFooter_f-bare_f95yq_78 {\n font-size: 0.6875rem;\n line-height: 1rem;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 0;\n list-style-type: none;\n li {\n word-break: break-word;\n padding: 0.5rem 0;\n margin: 0;\n }\n }\n }\n }\n}\n.custom_widget_MicrosoftFooter_c-uhff-base_f95yq_94 {\n background: #f2f2f2;\n margin: 0 auto;\n max-width: calc(100rem + 10%);\n padding: 1.875rem 5% 1rem;\n \u0026:before,\n \u0026:after {\n content: ' ';\n display: table;\n }\n \u0026:after {\n clear: both;\n }\n a.custom_widget_MicrosoftFooter_c-uhff-ccpa_f95yq_107 {\n font-size: 0.6875rem;\n line-height: 1rem;\n float: left;\n margin: 0.1875rem 0;\n }\n a.custom_widget_MicrosoftFooter_c-uhff-ccpa_f95yq_107:hover {\n text-decoration: underline;\n }\n ul.custom_widget_MicrosoftFooter_c-list_f95yq_78 {\n font-size: 0.6875rem;\n line-height: 1rem;\n float: right;\n margin: 0.1875rem 0;\n color: #616161;\n li {\n padding: 0 1.5rem 0.25rem 0;\n display: inline-block;\n }\n }\n .custom_widget_MicrosoftFooter_c-list_f95yq_78.custom_widget_MicrosoftFooter_f-bare_f95yq_78 {\n padding-left: 0;\n list-style-type: none;\n }\n @media only screen and (max-width: 1083px) {\n display: flex;\n flex-wrap: wrap;\n padding: 1.875rem 1.5rem 1rem;\n }\n}\n","tokens":{"context-uhf":"custom_widget_MicrosoftFooter_context-uhf_f95yq_1","c-uhff-link":"custom_widget_MicrosoftFooter_c-uhff-link_f95yq_12","c-uhff":"custom_widget_MicrosoftFooter_c-uhff_f95yq_12","c-uhff-nav":"custom_widget_MicrosoftFooter_c-uhff-nav_f95yq_35","c-heading-4":"custom_widget_MicrosoftFooter_c-heading-4_f95yq_49","c-uhff-nav-row":"custom_widget_MicrosoftFooter_c-uhff-nav-row_f95yq_57","c-uhff-nav-group":"custom_widget_MicrosoftFooter_c-uhff-nav-group_f95yq_58","c-list":"custom_widget_MicrosoftFooter_c-list_f95yq_78","f-bare":"custom_widget_MicrosoftFooter_f-bare_f95yq_78","c-uhff-base":"custom_widget_MicrosoftFooter_c-uhff-base_f95yq_94","c-uhff-ccpa":"custom_widget_MicrosoftFooter_c-uhff-ccpa_f95yq_107"}},"form":null},"localOverride":false},"CachedAsset:text:en_US-components/community/Breadcrumb-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/community/Breadcrumb-1737115705000","value":{"navLabel":"Breadcrumbs","dropdown":"Additional parent page navigation"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBanner-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBanner-1737115705000","value":{"messageMarkedAsSpam":"This post has been marked as spam","messageMarkedAsSpam@board:TKB":"This article has been marked as spam","messageMarkedAsSpam@board:BLOG":"This post has been marked as spam","messageMarkedAsSpam@board:FORUM":"This discussion has been marked as spam","messageMarkedAsSpam@board:OCCASION":"This event has been marked as spam","messageMarkedAsSpam@board:IDEA":"This idea has been marked as spam","manageSpam":"Manage Spam","messageMarkedAsAbuse":"This post has been marked as abuse","messageMarkedAsAbuse@board:TKB":"This article has been marked as abuse","messageMarkedAsAbuse@board:BLOG":"This post has been marked as abuse","messageMarkedAsAbuse@board:FORUM":"This discussion has been marked as abuse","messageMarkedAsAbuse@board:OCCASION":"This event has been marked as abuse","messageMarkedAsAbuse@board:IDEA":"This idea has been marked as abuse","preModCommentAuthorText":"This comment will be published as soon as it is approved","preModCommentModeratorText":"This comment is awaiting moderation","messageMarkedAsOther":"This post has been rejected due to other reasons","messageMarkedAsOther@board:TKB":"This article has been rejected due to other reasons","messageMarkedAsOther@board:BLOG":"This post has been rejected due to other reasons","messageMarkedAsOther@board:FORUM":"This discussion has been rejected due to other reasons","messageMarkedAsOther@board:OCCASION":"This event has been rejected due to other reasons","messageMarkedAsOther@board:IDEA":"This idea has been rejected due to other reasons","messageArchived":"This post was archived on {date}","relatedUrl":"View Related Content","relatedContentText":"Showing related content","archivedContentLink":"View Archived Content"},"localOverride":false},"Category:category:Exchange":{"__typename":"Category","id":"category:Exchange","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Planner":{"__typename":"Category","id":"category:Planner","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Outlook":{"__typename":"Category","id":"category:Outlook","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Community-Info-Center":{"__typename":"Category","id":"category:Community-Info-Center","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:EducationSector":{"__typename":"Category","id":"category:EducationSector","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:DrivingAdoption":{"__typename":"Category","id":"category:DrivingAdoption","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Azure":{"__typename":"Category","id":"category:Azure","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Windows-Server":{"__typename":"Category","id":"category:Windows-Server","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:SQL-Server":{"__typename":"Category","id":"category:SQL-Server","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftTeams":{"__typename":"Category","id":"category:MicrosoftTeams","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:PublicSector":{"__typename":"Category","id":"category:PublicSector","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:microsoft365":{"__typename":"Category","id":"category:microsoft365","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:IoT":{"__typename":"Category","id":"category:IoT","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:HealthcareAndLifeSciences":{"__typename":"Category","id":"category:HealthcareAndLifeSciences","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:SMB":{"__typename":"Category","id":"category:SMB","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:ITOpsTalk":{"__typename":"Category","id":"category:ITOpsTalk","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:microsoft-endpoint-manager":{"__typename":"Category","id":"category:microsoft-endpoint-manager","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftLearn":{"__typename":"Category","id":"category:MicrosoftLearn","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Blog:board:MicrosoftLearnBlog":{"__typename":"Blog","id":"board:MicrosoftLearnBlog","blogPolicies":{"__typename":"BlogPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:AI":{"__typename":"Category","id":"category:AI","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftMechanics":{"__typename":"Category","id":"category:MicrosoftMechanics","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:StartupsatMicrosoft":{"__typename":"Category","id":"category:StartupsatMicrosoft","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:PartnerCommunity":{"__typename":"Category","id":"category:PartnerCommunity","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Windows":{"__typename":"Category","id":"category:Windows","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:microsoft-security":{"__typename":"Category","id":"category:microsoft-security","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"CachedAsset:text:en_US-components/community/Navbar-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/community/Navbar-1737115705000","value":{"community":"Community Home","inbox":"Inbox","manageContent":"Manage Content","tos":"Terms of Service","forgotPassword":"Forgot Password","themeEditor":"Theme Editor","edit":"Edit Navigation Bar","skipContent":"Skip to content","gxcuf89792":"Tech Community","external-1":"Events","s-m-b":"Small and Medium Businesses","windows-server":"Windows Server","education-sector":"Education Sector","driving-adoption":"Driving Adoption","microsoft-learn":"Microsoft Learn","s-q-l-server":"SQL Server","partner-community":"Microsoft Partner Community","microsoft365":"Microsoft 365","external-9":".NET","external-8":"Teams","external-7":"Github","products-services":"Products","external-6":"Power Platform","communities-1":"Topics","external-5":"Microsoft Security","planner":"Planner","external-4":"Microsoft 365","external-3":"Dynamics 365","azure":"Azure","healthcare-and-life-sciences":"Healthcare and Life Sciences","external-2":"Azure","microsoft-mechanics":"Microsoft Mechanics","microsoft-learn-1":"Community","external-10":"Learning Room Directory","microsoft-learn-blog":"Blog","windows":"Windows","i-t-ops-talk":"ITOps Talk","external-link-1":"View All","microsoft-securityand-compliance":"Microsoft Security","public-sector":"Public Sector","community-info-center":"Lounge","external-link-2":"View All","microsoft-teams":"Microsoft Teams","external":"Blogs","microsoft-endpoint-manager":"Microsoft Intune and Configuration Manager","startupsat-microsoft":"Startups at Microsoft","exchange":"Exchange","a-i":"AI and Machine Learning","io-t":"Internet of Things (IoT)","outlook":"Outlook","external-link":"Community Hubs","communities":"Products"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarHamburgerDropdown-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarHamburgerDropdown-1737115705000","value":{"hamburgerLabel":"Side Menu"},"localOverride":false},"CachedAsset:text:en_US-components/community/BrandLogo-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/community/BrandLogo-1737115705000","value":{"logoAlt":"Khoros","themeLogoAlt":"Brand Logo"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarTextLinks-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarTextLinks-1737115705000","value":{"more":"More"},"localOverride":false},"CachedAsset:text:en_US-components/authentication/AuthenticationLink-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/authentication/AuthenticationLink-1737115705000","value":{"title.login":"Sign In","title.registration":"Register","title.forgotPassword":"Forgot Password","title.multiAuthLogin":"Sign In"},"localOverride":false},"CachedAsset:text:en_US-components/nodes/NodeLink-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeLink-1737115705000","value":{"place":"Place {name}"},"localOverride":false},"CachedAsset:text:en_US-components/customComponent/CustomComponent-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/customComponent/CustomComponent-1737115705000","value":{"errorMessage":"Error rendering component id: {customComponentId}","bannerTitle":"Video provider requires cookies to play the video. Accept to continue or {url} it directly on the provider's site.","buttonTitle":"Accept","urlText":"watch"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageView/MessageViewStandard-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageView/MessageViewStandard-1737115705000","value":{"anonymous":"Anonymous","author":"\u003ca\u003e{messageAuthorLogin}\u003c/a\u003e","authorBy":"\u003ca\u003e{messageAuthorLogin}\u003c/a\u003e","board":"\u003ca\u003e{messageBoardTitle}\u003c/a\u003e","replyToUser":" to {parentAuthor}","showMoreReplies":"Show More","replyText":"Reply","repliesText":"Replies","markedAsSolved":"Marked as Solved","movedMessagePlaceholder.BLOG":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholder.TKB":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholder.FORUM":"{count, plural, =0 {This reply has been} other {These replies have been} }","movedMessagePlaceholder.IDEA":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholder.OCCASION":"{count, plural, =0 {This comment has been} other {These comments have been} }","movedMessagePlaceholderUrlText":"moved.","messageStatus":"Status: ","statusChanged":"Status changed: {previousStatus} to {currentStatus}","statusAdded":"Status added: {status}","statusRemoved":"Status removed: {status}","labelExpand":"expand replies","labelCollapse":"collapse replies","unhelpfulReason.reason1":"Content is outdated","unhelpfulReason.reason2":"Article is missing information","unhelpfulReason.reason3":"Content is for a different Product","unhelpfulReason.reason4":"Doesn't match what I was searching for"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageReplyCallToAction-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageReplyCallToAction-1737115705000","value":{"leaveReply":"Leave a reply...","leaveReply@board:BLOG@message:root":"Leave a comment...","leaveReply@board:TKB@message:root":"Leave a comment...","leaveReply@board:IDEA@message:root":"Leave a comment...","leaveReply@board:OCCASION@message:root":"Leave a comment...","repliesTurnedOff.FORUM":"Replies are turned off for this topic","repliesTurnedOff.BLOG":"Comments are turned off for this topic","repliesTurnedOff.TKB":"Comments are turned off for this topic","repliesTurnedOff.IDEA":"Comments are turned off for this topic","repliesTurnedOff.OCCASION":"Comments are turned off for this topic","infoText":"Stop poking me!"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarDropdownToggle-1737115705000","value":{"ariaLabelClosed":"Press the down arrow to open the menu"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/QueryHandler-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/QueryHandler-1737115705000","value":{"title":"Query Handler"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageCoverImage-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageCoverImage-1737115705000","value":{"coverImageTitle":"Cover Image"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeTitle-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeTitle-1737115705000","value":{"nodeTitle":"{nodeTitle, select, community {Community} other {{nodeTitle}}} "},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageTimeToRead-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageTimeToRead-1737115705000","value":{"minReadText":"{min} MIN READ"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageSubject-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageSubject-1737115705000","value":{"noSubject":"(no subject)"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserLink-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserLink-1737115705000","value":{"authorName":"View Profile: {author}","anonymous":"Anonymous"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserRank-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserRank-1737115705000","value":{"rankName":"{rankName}","userRank":"Author rank {rankName}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageTime-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageTime-1737115705000","value":{"postTime":"Published: {time}","lastPublishTime":"Last Update: {time}","conversation.lastPostingActivityTime":"Last posting activity time: {time}","conversation.lastPostTime":"Last post time: {time}","moderationData.rejectTime":"Rejected time: {time}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBody-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBody-1737115705000","value":{"showMessageBody":"Show More","mentionsErrorTitle":"{mentionsType, select, board {Board} user {User} message {Message} other {}} No Longer Available","mentionsErrorMessage":"The {mentionsType} you are trying to view has been removed from the community.","videoProcessing":"Video is being processed. Please try again in a few minutes.","bannerTitle":"Video provider requires cookies to play the video. Accept to continue or {url} it directly on the provider's site.","buttonTitle":"Accept","urlText":"watch"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageCustomFields-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageCustomFields-1737115705000","value":{"CustomField.default.label":"Value of {name}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageRevision-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageRevision-1737115705000","value":{"lastUpdatedDatePublished":"{publishCount, plural, one{Published} other{Updated}} {date}","lastUpdatedDateDraft":"Created {date}","version":"Version {major}.{minor}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageReplyButton-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageReplyButton-1737115705000","value":{"repliesCount":"{count}","title":"Reply","title@board:BLOG@message:root":"Comment","title@board:TKB@message:root":"Comment","title@board:IDEA@message:root":"Comment","title@board:OCCASION@message:root":"Comment"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageAuthorBio-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageAuthorBio-1737115705000","value":{"sendMessage":"Send Message","actionMessage":"Follow this blog board to get notified when there's new activity","coAuthor":"CO-PUBLISHER","contributor":"CONTRIBUTOR","userProfile":"View Profile","iconlink":"Go to {name} {type}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserAvatar-1737115705000","value":{"altText":"{login}'s avatar","altTextGeneric":"User's avatar"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/ranks/UserRankLabel-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/ranks/UserRankLabel-1737115705000","value":{"altTitle":"Icon for {rankName} rank"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserRegistrationDate-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserRegistrationDate-1737115705000","value":{"noPrefix":"{date}","withPrefix":"Joined {date}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeAvatar-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeAvatar-1737115705000","value":{"altTitle":"Node avatar for {nodeTitle}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeDescription-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeDescription-1737115705000","value":{"description":"{description}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1737115705000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeIcon-1737115705000","value":{"contentType":"Content Type {style, select, FORUM {Forum} BLOG {Blog} TKB {Knowledge Base} IDEA {Ideas} OCCASION {Events} other {}} icon"},"localOverride":false}}}},"page":"/blogs/BlogMessagePage/BlogMessagePage","query":{"boardId":"desenvolvedoresbr","messageSubject":"azure-open-ia-acelerando-nossos-caminhos-","messageId":"4276402"},"buildId":"fgNKhcnISUB1E49u99qsx","runtimeConfig":{"buildInformationVisible":false,"logLevelApp":"info","logLevelMetrics":"info","openTelemetryClientEnabled":false,"openTelemetryConfigName":"o365","openTelemetryServiceVersion":"24.11.0","openTelemetryUniverse":"prod","openTelemetryCollector":"http://localhost:4318","openTelemetryRouteChangeAllowedTime":"5000","apolloDevToolsEnabled":false},"isFallback":false,"isExperimentalCompile":false,"dynamicIds":["LiUyRmNvbXBvbmVudHMlMkZjb21tdW5pdHklMkZOYXZiYXIlMkZOYXZiYXJXaWRnZXQudHN4","LiUyRmNvbXBvbmVudHMlMkZjb21tdW5pdHklMkZCcmVhZGNydW1iJTJGQnJlYWRjcnVtYldpZGdldC50c3g=","LiUyRmNvbXBvbmVudHMlMkZjdXN0b21Db21wb25lbnQlMkZDdXN0b21Db21wb25lbnQlMkZDdXN0b21Db21wb25lbnQudHN4","LiUyRmNvbXBvbmVudHMlMkZibG9ncyUyRkJsb2dBcnRpY2xlV2lkZ2V0JTJGQmxvZ0FydGljbGVXaWRnZXQudHN4","LiUyRmNvbXBvbmVudHMlMkZleHRlcm5hbCUyRmNvbXBvbmVudHMlMkZFeHRlcm5hbENvbXBvbmVudC50c3g=","LiUyRmNvbXBvbmVudHMlMkZtZXNzYWdlcyUyRk1lc3NhZ2VWaWV3JTJGTWVzc2FnZVZpZXdTdGFuZGFyZCUyRk1lc3NhZ2VWaWV3U3RhbmRhcmQudHN4"],"appGip":true,"scriptLoader":[{"id":"analytics","src":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/pagescripts/1729284608000/analytics.js?page.id=BlogMessagePage\u0026entity.id=board%3Adesenvolvedoresbr\u0026entity.id=message%3A4276402","strategy":"afterInteractive"}]}</script><script lang="javascript" type="text/javascript"> const nextDataScript = document.getElementById("__NEXT_DATA__"); if (nextDataScript) { const nextData = JSON.parse(nextDataScript.textContent || '{}'); if (nextData.dynamicIds) { nextData.dynamicIds = nextData.dynamicIds.map(id => { const encodedString = atob(id); return decodeURIComponent(encodedString); }); nextDataScript.textContent = JSON.stringify(nextData); } } </script></body></html>