Partilhar via


AI: Azure OpenAI em seus dados

A integração do Processamento de Linguagem Natural (NLP) do Azure OpenAI e os recursos de conclusão oferecem um potencial significativo para melhorar a produtividade do usuário. Ao aproveitar prompts e regras apropriados, um assistente de IA pode gerar de forma eficiente várias formas de comunicação, como mensagens de e-mail, mensagens SMS e muito mais. Essa funcionalidade leva a uma maior eficiência do usuário e fluxos de trabalho simplificados.

Embora esse recurso seja bastante poderoso por si só, pode haver casos em que os usuários precisem gerar finalizações com base nos dados personalizados da sua empresa. Por exemplo, você pode ter uma coleção de manuais de produtos que podem ser difíceis para os usuários navegarem quando estão ajudando os clientes com problemas de instalação. Como alternativa, você pode manter um conjunto abrangente de Perguntas Frequentes (FAQs) relacionadas aos benefícios de saúde que podem ser difíceis para os usuários lerem e obterem as respostas de que precisam. Nesses casos e em muitos outros, o Serviço OpenAI do Azure permite que você aproveite seus próprios dados para gerar conclusão, garantindo uma resposta mais personalizada e contextualmente precisa às perguntas dos usuários.

Aqui está uma visão geral rápida de como o recurso "traga seus próprios dados" funciona na documentação do Azure OpenAI.

Observação

Um dos principais recursos do Azure OpenAI em seus dados é sua capacidade de recuperar e utilizar dados de uma forma que aprimora a saída do modelo. O Azure OpenAI em seus dados, juntamente com o Azure AI Search, determina quais dados recuperar da fonte de dados designada com base na entrada do usuário e no histórico de conversas fornecido. Esses dados são então aumentados e reenviados como um prompt para o modelo OpenAI, com as informações recuperadas sendo anexadas ao prompt original. Embora os dados recuperados estejam sendo anexados ao prompt, a entrada resultante ainda é processada pelo modelo como qualquer outro prompt. Depois que os dados forem recuperados e o prompt for enviado ao modelo, o modelo usará essas informações para fornecer uma conclusão.

Neste exercício, você irá:

  • Crie uma fonte de dados personalizada usando o portal do Azure AI Foundry.
  • Implante um modelo de incorporação usando o portal do Azure AI Foundry.
  • Carregue documentos personalizados.
  • Inicie uma sessão de bate-papo no playground de bate-papo para experimentar gerar conclusões com base em seus próprios dados.
  • Explore o código que usa o Azure AI Search e o Azure OpenAI para gerar conclusões com base em seus próprios dados.

Vamos começar implantando um modelo de incorporação e adicionando uma fonte de dados personalizada no Azure AI Foundry.

Adicionando uma fonte de dados personalizada ao Azure AI Foundry

  1. Navegue até o Azure OpenAI Studio e entre com credenciais que têm acesso ao seu recurso do Azure OpenAI.

  2. Selecione Implantações no menu de navegação.

  3. Selecione Selecionar Implantar modelo -->Implantar modelo base na barra de ferramentas.

  4. Selecione o modelo text-embedding-ada-002 na lista de modelos e selecione Confirmar.

  5. Selecione as seguintes opções:

    • Nome da implantação: text-embedding-ada-002
    • Versão do modelo: Padrão
    • Tipo de implantação: Padrão
    • Defina o valor de Limite de Taxa de Tokens por Minuto (milhares) para 120K
    • Filtro de conteúdo: DefaultV2
    • Ativar cotação dinâmica: Ativado
  6. Selecione o botão Implantar .

  7. Depois que o modelo for criado, selecione Início no menu de navegação para ir para a tela de boas-vindas.

  8. Localize o bloco Traga seus próprios dados na tela de boas-vindas e selecione Experimente agora.

    Azure OpenAI Studio traga seus próprios dados

  9. Selecione Adicionar seus dados seguido de Adicionar uma fonte de dados.

  10. Na lista suspensa Selecionar fonte de dados , selecione Carregar arquivos.

  11. Na lista suspensa Selecionar recurso de armazenamento de Blob do Azure , selecione Criar um novo recurso de armazenamento de Blob do Azure.

  12. Selecione sua assinatura do Azure na lista suspensa Assinatura .

  13. Na lista suspensa Selecionar recurso de armazenamento de Blob do Azure , selecione Criar um novo recurso de armazenamento de Blob do Azure.

  14. Isso o levará ao portal do Azure, onde poderá executar as seguintes tarefas:

    • Insira um nome exclusivo para a conta de armazenamento, como byodstorage[Seu sobrenome].
    • Selecione uma região próxima da sua localização.
    • Selecione Revisão seguida de Criar.
  15. Depois que o recurso de armazenamento de blob for criado, volte para a caixa de diálogo Azure AI Foundry e selecione seu recurso de armazenamento de blob recém-criado na lista suspensaSelecionar recurso de armazenamento de Blob do Azure. Se você não vê-lo listado, selecione o ícone de atualização ao lado da lista suspensa.

  16. O compartilhamento de recursos entre origens (CORS) precisa ser ativado para que sua conta de armazenamento seja acessada. Selecione Ativar CORS na caixa de diálogo Azure AI Foundry.

    Azure OpenAI Studio Traga seus próprios dados Ative o CORS

  17. Na lista suspensa Selecionar recurso do Azure AI Search , selecione Criar um novo recurso do Azure AI Search.

  18. Isso o levará de volta ao portal do Azure, onde poderá executar as seguintes tarefas:

    • Insira um nome exclusivo para o recurso AI Search, como byodsearch-[Your Last Name].
    • Selecione uma região próxima da sua localização.
    • Na seção Nível de preço , selecione Alterar nível de preço e selecione Básico seguido de Selecionar. A camada gratuita não é suportada, então você limpará o recurso AI Search no final deste tutorial.
    • Selecione Revisão seguida de Criar.
  19. Depois que o recurso AI Search for criado, vá para a página Visão geral do recurso e copie o valor Url para um arquivo local.

    Azure OpenAI Studio AI Search Url

  20. Selecione Configurações -->Teclas no menu de navegação.

  21. Na página Controle de acesso à API , selecione Ambos para permitir que o serviço seja acessado usando a Identidade Gerenciada ou uma chave. Selecione Sim quando solicitado.

    Observação

    Embora usemos uma chave de API neste exercício, uma vez que adicionar atribuições de função pode levar até 10 minutos, com um pouco de esforço adicional você pode habilitar uma identidade gerenciada atribuída ao sistema para acessar o serviço com mais segurança.

  22. Selecione Teclas no menu de navegação esquerdo e copie o valor da chave de administração primária para um arquivo local. Você precisará da URL e dos valores-chave mais adiante no exercício.

  23. Selecione Configurações -->Classificação semântica no menu de navegação e verifique se Gratuito está selecionado.

    Observação

    Para verificar se o classificador semântico está disponível em uma região específica, verifique a página Produtos disponíveis por região no site do Azure para ver se sua região está listada.

  24. Volte para a caixa de diálogo Azure AI Foundry Add Data e selecione seu recurso de pesquisa recém-criado na lista suspensa Selecionar recurso Azure AI Search. Se você não vê-lo listado, selecione o ícone de atualização ao lado da lista suspensa.

  25. Insira um valor de byod-search-index para o valor Enter the index name .

  26. Marque a caixa de seleção Adicionar pesquisa vetorial a este recurso de pesquisa .

  27. Na lista suspensa Selecione um modelo de incorporação , selecione o modelo text-embedding-ada-002 criado anteriormente.

  28. Na caixa de diálogo Carregar ficheiros , selecione Procurar um ficheiro.

  29. Navegue até a pasta de documentos do cliente do projeto (localizada na raiz do projeto) e selecione os seguintes arquivos:

    • Relógio A102 Instalação Instructions.docx
    • FAQs.docxda empresa

    Observação

    Atualmente, esse recurso suporta os seguintes formatos de arquivo para criação de índice local: .txt, .md, .html, .pdf, .docx e .pptx.

  30. Selecione Carregar arquivos. Os arquivos serão carregados em um contêiner fileupload-byod-search-index no recurso de armazenamento de blob criado anteriormente.

  31. Selecione Avançar para ir para a caixa de diálogo Gerenciamento de dados .

  32. Na lista suspensa Tipo de pesquisa , selecione Híbrido + semântico.

    Observação

    Esta opção fornece suporte para pesquisa de palavras-chave e vetoriais. Uma vez que os resultados são retornados, um processo de classificação secundária é aplicado ao conjunto de resultados usando modelos de aprendizagem profunda que melhoram a relevância da pesquisa para o usuário. Para saber mais sobre a pesquisa semântica, consulte a Pesquisa semântica na documentação do Azure AI Search .

  33. Verifique se o valor Selecionar um tamanho está definido como 1024.

  34. Selecione Seguinte.

  35. Para o tipo de autenticação de recurso do Azure, selecione Chave de API. Saiba mais sobre como selecionar o tipo de autenticação correto na documentação de autenticação do Azure AI Search.

  36. Selecione Seguinte.

  37. Reveja os detalhes e selecione Guardar e fechar.

  38. Agora que seus dados personalizados foram carregados, os dados serão indexados e estarão disponíveis para uso no Chat playground. Este processo poderá demorar alguns minutos. Depois de concluído, continue para a próxima seção.

Usando sua fonte de dados personalizada no Chat Playground

  1. Localize a seção Sessão de bate-papo da página no Azure OpenAI Studio e insira a seguinte consulta de usuário:

    What safety rules are required to install a clock?
    
  2. Depois de enviar a consulta do usuário, você verá um resultado semelhante ao seguinte exibido:

    Sessão de Chat do Azure OpenAI Studio - Regras de Segurança de Instalação de Relógio

  3. Expanda a seção 1 referências na resposta do bate-papo e observe que o arquivo de Instructions.docxde instalação do Clock A102 está listado e que você pode selecioná-lo para exibir o documento.

  4. Digite a seguinte mensagem de usuário:

    What should I do to mount the clock on the wall?
    
  5. Você verá um resultado semelhante ao seguinte exibido:

    Sessão de Chat do Azure OpenAI Studio - Instruções de Montagem do Relógio

  6. Agora vamos experimentar o documento de perguntas frequentes da empresa. Insira o seguinte texto no campo Consulta do usuário :

    What is the company's policy on vacation time?
    
  7. Você deve ver que nenhuma informação foi encontrada para essa solicitação.

  8. Insira o seguinte texto no campo Consulta do usuário :

    How should I handle refund requests?
    
  9. Você verá um resultado semelhante ao seguinte exibido:

    Sessão de Chat do Azure OpenAI Studio - Resultados das Perguntas Frequentes

  10. Expanda a seção 1 referências na resposta do bate-papo e observe que o arquivo de FAQs.docxda empresa está listado e que você pode selecioná-lo para visualizar o documento.

  11. Selecione Exibir código na barra de ferramentas do Chat playground.

    Sessão de Chat do Azure OpenAI Studio - Ver Código

  12. Observe que você pode alternar entre idiomas diferentes, exibir o ponto de extremidade e acessar a chave do ponto de extremidade. Feche a janela de diálogo Código de exemplo .

    Sessão de Chat do Azure OpenAI Studio - Código de Exemplo

  13. Ative a alternância Mostrar JSON bruto acima das mensagens de chat. Observe que a sessão de bate-papo começa com uma mensagem semelhante à seguinte:

    {
        "role": "system",
        "content": "You are an AI assistant that helps people find information."
    }
    
  14. Agora que você criou uma fonte de dados personalizada e a experimentou no Chat playground, vamos ver como você pode usá-la no aplicativo do projeto.

Usando o recurso Traga seus próprios dados no aplicativo

  1. Volte para o projeto no VS Code e abra o arquivo .env . Atualize os valores a seguir com o endpoint, a chave e o nome do índice do AI Services. Você copiou o ponto de extremidade e a chave para um arquivo local anteriormente neste exercício.

    AZURE_AI_SEARCH_ENDPOINT=<AI_SERVICES_ENDPOINT_VALUE>
    AZURE_AI_SEARCH_KEY=<AI_SERVICES_KEY_VALUE>
    AZURE_AI_SEARCH_INDEX=byod-search-index
    
  2. Em um exercício anterior , você iniciou o banco de dados, as APIs e o aplicativo. Você também atualizou o .env arquivo. Se você não concluiu essas etapas, siga as instruções no final do exercício anterior antes de continuar.

  3. Depois que o aplicativo for carregado no navegador, selecione o ícone Ajuda do bate-papo no canto superior direito do aplicativo.

    Ícone da Ajuda do Chat

  4. O seguinte texto deve aparecer na caixa de diálogo do chat:

    How should I handle a company refund request?
    
  5. Selecione o botão Obter Ajuda . Você deve ver os resultados retornados do documento do FAQs.docxda Empresa que você carregou anteriormente no Azure OpenAI Studio. Se você quiser ler o documento, você pode encontrá-lo na pasta de documentos do cliente na raiz do projeto.

  6. Altere o texto para o seguinte e selecione o botão Obter Ajuda :

    What safety rules are required to install a clock?
    
  7. Você deve ver os resultados retornados do documento do Instructions.docxde Instalação do Relógio A102 que você carregou anteriormente no Azure OpenAI Studio. Este documento também está disponível na pasta de documentos do cliente na raiz do projeto.

Explorando o código

Sugestão

Se você estiver usando o Visual Studio Code, poderá abrir arquivos diretamente selecionando:

  • Windows/Linux: Ctrl + P
  • Mac: Cmd + P

Em seguida, digite o nome do arquivo que deseja abrir.

  1. Volte para o código-fonte do projeto no Visual Studio Code.

  2. Abra o arquivo server/apiRoutes.ts e localize a completeBYOD rota. Essa API é chamada quando o botão Obter Ajuda é selecionado na caixa de diálogo Ajuda do Chat. Ele recupera o prompt do usuário do corpo da solicitação e o passa para a completeBYOD() função no arquivo servidor/openAI.ts . Os resultados são então devolvidos ao cliente.

    router.post('/completeBYOD', async (req, res) => {
        const { prompt } = req.body;
    
        if (!prompt) {
            return res.status(400).json({ 
                status: false, 
                error: 'The prompt parameter must be provided.' 
            });
        }
    
        let result;
        try {
            // Call OpenAI to get custom "bring your own data" completion
        result = await completeBYOD(prompt);
        }
        catch (e: unknown) {
            console.error('Error parsing JSON:', e);
        }
    
        res.json(result);
    });
    
  3. Abra o arquivo server/openAI.ts e localize a completeBYOD() função.

    async function completeBYOD(userPrompt: string): Promise<string> {
        const systemPrompt = 'You are an AI assistant that helps people find information in documents.';
        return await callOpenAI(systemPrompt, userPrompt, 0, true);
    }
    

    Esta função tem as seguintes características:

    • O userPrompt parâmetro contém as informações que o usuário digitou na caixa de diálogo de ajuda do chat.
    • a systemPrompt variável define que um assistente de IA projetado para ajudar as pessoas a encontrar informações será usado.
    • callOpenAI() é usado para chamar a API OpenAI do Azure e retornar os resultados. Ele passa os systemPrompt valores e userPrompt bem como os seguintes parâmetros:
      • temperature - A quantidade de criatividade a incluir na resposta. O usuário precisa de respostas consistentes (menos criativas) neste caso, então o valor é definido como 0.
      • useBYOD - Um valor booleano que indica se deve ou não usar a Pesquisa de IA junto com o Azure OpenAI. Neste caso, está configurado para que a true funcionalidade AI Search seja usada.
  4. A callOpenAI() função aceita um useBYOD parâmetro que é usado para determinar qual função OpenAI chamar. Neste caso, ele define useBYOD para true que a getAzureOpenAIBYODCompletion() função será chamada.

    function callOpenAI(systemPrompt: string, userPrompt: string, temperature = 0, useBYOD = false) {
        const isAzureOpenAI = OPENAI_API_KEY && OPENAI_ENDPOINT && OPENAI_MODEL;
    
        if (isAzureOpenAI) {
            if (useBYOD) {
                return getAzureOpenAIBYODCompletion(systemPrompt, userPrompt, temperature);
            }
            return getAzureOpenAICompletion(systemPrompt, userPrompt, temperature);
        }
    
        return getOpenAICompletion(systemPrompt, userPrompt, temperature);
    }
    
  5. Localize a getAzureOpenAIBYODCompletion() função no servidor/openAI.ts. É bastante semelhante à getAzureOpenAICompletion() função que você examinou anteriormente, mas é mostrada como uma função separada para destacar algumas diferenças importantes que são exclusivas para o cenário "Azure OpenAI em seus dados" disponível no Azure OpenAI.

    async function getAzureOpenAIBYODCompletion(systemPrompt: string, userPrompt: string, temperature: number): Promise<string> {
        const dataSources = [
            {
                type: 'azure_search',
                parameters: {
                    authentication: {
                        type: 'api_key',
                        key: AZURE_AI_SEARCH_KEY
                    },
                    endpoint: AZURE_AI_SEARCH_ENDPOINT,
                    index_name: AZURE_AI_SEARCH_INDEX
                }
            }
        ];
    
        const completion = await createAzureOpenAICompletion(systemPrompt, userPrompt, temperature, dataSources) as AzureOpenAIYourDataResponse;
        console.log('Azure OpenAI Add Your Own Data Output: \n', completion.choices[0]?.message);
        for (let citation of completion.choices[0]?.message?.context?.citations ?? []) {
            console.log('Citation Path:', citation.filepath);
        }
        return completion.choices[0]?.message?.content?.trim() ?? '';
    }
    

    Observe a seguinte funcionalidade na getAzureOpenAIBYODCompletion() função:

    • É criada uma dataSources propriedade que contém os valores do recurso keyAI Search , endpointe index_name que foram adicionados ao .env arquivo anteriormente neste exercício
    • A createAzureOpenAICompletion() função é chamada com os systemPromptvalores , userPrompt, temperature, e dataSources . Essa função é usada para chamar a API OpenAI do Azure e retornar os resultados.
    • Assim que a resposta é retornada, as citações do documento são registradas no console. O conteúdo da mensagem de conclusão é então devolvido ao chamador.
  6. Alguns pontos finais a considerar antes de passar para o próximo exercício:

    • O aplicativo de exemplo usa um único índice no Azure AI Search. Você pode usar vários índices e fontes de dados com o Azure OpenAI. A dataSources propriedade na função pode ser atualizada para incluir várias fontes de dados, getAzureOpenAIBYODCompletion() conforme necessário.
    • A segurança deve ser cuidadosamente avaliada com este tipo de cenário. Os usuários não devem ser capazes de fazer perguntas e obter resultados de documentos que eles não são capazes de acessar.
  7. Agora que você aprendeu sobre o Azure OpenAI, prompts, finalizações e como você pode usar seus próprios dados, vamos para o próximo exercício para saber como os recursos de comunicação podem ser usados para aprimorar o aplicativo. Se quiser saber mais sobre o Azure OpenAI, veja o conteúdo de formação Introdução ao Serviço OpenAI do Azure . Informações adicionais sobre como usar seus próprios dados com o Azure OpenAI podem ser encontradas no Azure OpenAI em sua documentação de dados .

Próximo Passo