Fermer

décembre 13, 2023

Création d’une application de recherche conversationnelle avec la recherche cognitive Azure et l’intégration OpenAI / Blogs / Perficient

Création d’une application de recherche conversationnelle avec la recherche cognitive Azure et l’intégration OpenAI / Blogs / Perficient


Introduction

Dans ce blog, nous allons vous montrer comment créer une application de recherche conversationnelle capable d’interagir avec la Recherche cognitive Azure (ACS) et de récupérer le contenu pertinent à partir d’un index Web en posant des questions en langage naturel, en demandant des informations récapitulatives et en utilisant la recherche vectorielle. . L’application utilisera également les intégrations OpenAI, qui sont des modèles pré-entraînés capables d’intégrer des requêtes et des documents dans des vecteurs, et Azure Chat OpenAI, qui est un service capable de générer des réponses en langage naturel à l’aide de modèles OpenAI.

La recherche de vecteurs est une technique qui utilise des modèles d’apprentissage profond pour représenter des requêtes et des documents sous forme de vecteurs dans un espace de grande dimension. Ces vecteurs capturent la signification sémantique et le contexte des requêtes et des documents, et peuvent être comparés à l’aide d’une mesure de similarité, telle que la similarité cosinus, pour trouver les correspondances les plus pertinentes. La recherche vectorielle vous permet d’effectuer une recherche sémantique, qui peut comprendre l’intention et la signification de la requête de l’utilisateur, plutôt que de simplement faire correspondre des mots-clés.

  • Recherche cognitive Azure: Un service basé sur le cloud qui fournit un riche ensemble de fonctionnalités pour indexer, interroger et analyser des données structurées et non structurées. Nous utiliserons ACS pour créer et gérer notre index récupéré sur le Web, ainsi que pour effectuer une recherche vectorielle à l’aide de la fonction de classement sémantique intégrée.
  • OpenAI: Un organisme de recherche qui développe et donne accès à des modèles et outils d’intelligence artificielle de pointe. Nous utiliserons OpenAI pour créer et déployer un modèle de langage personnalisé capable de générer des réponses en langage naturel basées sur les résultats de recherche, ainsi que pour condenser les questions de suivi en questions autonomes.
  • Chaîne de récupération conversationnelle: Une classe Python qui implémente un pipeline de récupération conversationnelle utilisant un grand modèle de langage (LLM) et un récupérateur basé sur des vecteurs. Nous utiliserons cette classe pour orchestrer l’interaction entre ACS et OpenAI, et pour gérer les entrées et sorties utilisateur.

Conditions préalables

Pour suivre cet article de blog, vous aurez besoin des éléments suivants :

  • Un abonnement Azure
  • Un service de recherche cognitive Azure
  • Un index de recherche cognitive Azure avec quelques données. Vous pouvez utiliser n’importe quelle source de données de votre choix, mais pour cet exemple, j’utiliserai un index de blog récupéré qui contient des articles de blog provenant de divers sites Web. Vous pouvez trouver les instructions sur la façon de créer et de remplir cet index [here].
  • Azure OpenAI service: Vous en aurez besoin pour accéder aux intégrations OpenAI et aux services Azure Chat OpenAI..

Application de recherche conversationnelle

Voici les étapes à suivrevoir le Chaîne de récupération conversationnelle pour récupérer des données à partir de la Recherche cognitive Azure et générer des réponses à l’aide d’OpenAI Modèles ADA :

  1. Importez les modules et classes nécessaires à partir de Conversational AI Toolkit et d’autres bibliothèques.

    from langchain.chains  import ConversationalRetrievalChain  
    from langchain.vectorstores.azuresearch import AzureSearch 
    from langchain.chat_models import AzureChatOpenAI 
    from langchain.embeddings.openai import OpenAIEmbeddings 
    from langchain.prompts  import PromptTemplate
  2. Importez les modules et classes nécessaires à partir de Conversational AI Toolkit et d’autres bibliothèques.

    • déploiement: le nom du déploiement qui héberge le modèle.
    • modèle: le nom du modèle qui génère les intégrations.
    • openai_api_base : l’URL de base de l’API OpenAI.
    • openai_api_type : le type de l’API OpenAI (soit sketch, soit moteur).
    • taille_morceau : le nombre de phrases à traiter à la fois.
      embeddings=OpenAIEmbeddings(deployment= “ada_embedding_deployment_name”, 
                                      model=” text-embedding-ada-model-name”, 
                                     openai_api_base=” https://abc.openai.azure.com/”, 
                                      openai_api_type=” azure”, 
                                      chunk_size=1)
  3. Mettre en place le Recherche Azure classe, qui accédera aux données dans Azure Cognitive Search. Vous devez fournir les paramètres suivants pour le service Recherche cognitive Azure :

    • Azure_search_endpoint : le point de terminaison du service Recherche cognitive Azure.
    • clé_azure_search : la clé pour s’authentifier auprès du service Azure Cognitive Search.
    • nom_index : le nom de l’index qui contient les données.
    • fonction_d’intégration : la fonction d’intégration est la même que celle que nous avons créée à l’étape 2 à l’aide de la classe OpenAIEmbeddings, nous pouvons donc utiliser l’objet embeddings que nous avons déjà.
      vector_store: AzureSearch = AzureSearch( 
              azure_search_endpoint="https://domain.windows.net", 
              azure_search_key="your_password", 
              index_name="scrapped-blog-index", 
              embedding_function=embeddings.embed_query)
  4. Configurez le AzureChatOpenAI classe, qui sera utilisée pour générer des réponses en langage naturel à l’aide du modèle OpenAI Ada. Vous devez fournir les paramètres suivants pour le modèle OpenAI Ada :

    • nom_deploiement : le nom du déploiement qui héberge le modèle.
    • nom du modèle: le nom du modèle qui génère les réponses.
    • openai_api_base : l’URL de base de l’API OpenAI.
    • openai_api_version : la version de l’API OpenAI.
    • openai_api_key : la clé pour s’authentifier avec l’API OpenAI.
    • openai_api_type : le type de l’API OpenAI (soit sketch, soit moteur).
      llm = llm = AzureChatOpenAI(deployment_name="ada_embedding_deployment_name", 
                                model_name= "open_gpt_model-name", 
                                openai_api_base="https://model.openai.azure.com/", 
                                openai_api_version= "2023-07-01-preview", 
                                openai_api_key=OPENAI_API_KEY, 
                                openai_api_type= "azure")
  5. Définir la Modèle d’invite classe, qui sera utilisée pour reformuler les questions de suivi de l’utilisateur en questions autonomes. Vous devez fournir un modèle qui prend l’historique des discussions et la question de suivi comme entrées et sorties d’une question autonome.

    CONDENSE_QUESTION_PROMPT = PromptTemplate.from_template("""Given the following conversation and a follow up question, rephrase the follow up question to be a standalone question. 
        Chat History: 
        {chat_history} 
        Follow Up Input: {question} 
        Standalone question:""")

    Construisez la classe ConversationalRetrievalChain, qui sera utilisée pour générer des réponses basées sur les questions de l’utilisateur et les données dans Azure Cognitive Search. Vous devez fournir les paramètres suivants pour cette classe :

    • llm: le modèle de langage qui génère les réponses en langage naturel
    • retriever: le récupérateur qui récupère les documents pertinents du service Azure Cognitive Search.
    • condense_question_prompt: le modèle d’invite qui reformule les questions de suivi de l’utilisateur pour en faire des questions autonomes.
    • return_source_documents: la possibilité de renvoyer les documents sources avec les réponses. –verbeux: la possibilité d’imprimer les étapes intermédiaires et les résultats.
      qa = ConversationalRetrievalChain.from_llm(llm=llm, 
                                                  retriever=vector_store.as_retriever(), 
                                                  condense_question_prompt=CONDENSE_QUESTION_PROMPT, 
                                                  return_source_documents=True, 
                                                  verbose=False)
  6. Définissez une fonction appelée recherche, qui prendra la saisie de l’utilisateur comme paramètre et renverra une réponse.

    def search(user_input): 
        query = user_input[-1]['content'] 
        history = [] 
        if len(user_input) == 1: 
            chat_history = "" 
            result = qa({"question": query, "chat_history": chat_history})   
            response = result["answer"] 
        else:  
            for item in user_input[:-1]: 
                history.append(item["content"]) 
            chat_history = [(history[i], history[i+1]) for i in range(0, len(history), 2)] 
            result = qa({"question": query, "chat_history": chat_history})   
            response = result["answer"] 
        return response
  7. Testez la fonction avec quelques exemples d’entrées et voyez les sorties dans le cahier.
    user_input = [{"content": "Tell me about Perficient’s blog posts about Generative AI"}] 
    response = search(user_input) 
    print(response)

    HVoici la capture d’écran pour plus de référence :
    Gènes

Conclusion

Dans ce blog, nous avons démontré comment créer une application de recherche conversationnelle capable de tirer parti de la puissance de la recherche cognitive Azure et des intégrations OpenAI pour fournir des réponses pertinentes et naturelles aux requêtes des utilisateurs.

En utilisant des composants – Azure Cognitive Search, OpenAI et ConversationalRetrievalChain, nous avons pu créer une application de recherche conversationnelle capable de comprendre l’intention et la signification de la requête de l’utilisateur, plutôt que de simplement faire correspondre des mots-clés. Nous espérons que vous avez apprécié ce blog et appris quelque chose de nouveau. Si vous avez des questions ou des commentaires, n’hésitez pas à laisser un commentaire ci-dessous. Merci pour la lecture!

Références supplémentaires






Source link

décembre 13, 2023