Construire un agent AI polyvalent

Ces dernières années, il y a eu une révolution significative dans la façon dont nous utilisons les applications, transformant la façon dont nous interagissons avec la technologie et l'expérience globale de l'utilisateur.

· Dev Rishi Khare

Un guide pour les débutants sur le développement de modèles de langage large personnalisables pour résoudre des cas d'utilisation simples

Auteur : Rachel Martinez | Fonction : Développeur | Étiquette : AI Agents


Introduction

Bienvenue sur notre blog technique, où nous rendons les concepts complexes accessibles à tous, quel que soit leur contexte. Aujourd'hui, nous sommes plongés dans un projet passionnant: développer un agent de modèle linguistique grand (LLM) qui peut s'adapter à diverses tâches.

Nous allons créer une solide infrastructure de récupération, d'augmentation et de génération (RAG) pour nous aider à sélectionner le LLM le plus approprié pour chaque tâche. Des entreprises comme H2O et HuggingFace ont déjà lancé des systèmes similaires, et nous avons reçu de l'intérêt de startups désireuses d'intégrer notre technologie AI dans leurs applications.

Notre cas d'utilisation particulier nécessite la possibilité de demander à la LLM en utilisant une seule entrée (une prise) ou en reliant plusieurs demandes. Cela nécessite la création de modules LLM personnalisables et conviviaux pour divers scénarios.

Restez à l'écoute pendant que nous entreprenons ce voyage, en décomposant chaque étape de manière simple et engageante.

Cas d'utilisation actuel

Dans notre cas d'utilisation actuel, nous améliorons le contenu du CV d'un utilisateur par un processus en deux étapes:

  1. Input: L'utilisateur entre dans le système les sections Professional Summary et Experience de son CV et demande au LLM de générer une version plus polissée du texte.
  2. Review: L'utilisateur passe en revue le contenu généré par LLM et fournit des instructions ou des conseils supplémentaires pour affiner et personnaliser la sortie, en s'assurant qu'elle s'aligne sur ses compétences et expériences uniques.

En suivant cette approche, les utilisateurs peuvent tirer parti du pouvoir du LLM pour créer un CV convaincant qui se démarque des employeurs potentiels.

Cible

Nous visons à construire un module LLM entièrement personnalisable qui prend en charge notre cas d'utilisation et automatique au moins partiellement le processus de création de CV.

Mise en œuvre

Étape 1: Choisir le LLM

Lors du choix du bon LLM pour vos besoins, il y a deux catégories principales à considérer: LLM open source et LLM propriétaire. Nous allons discuter des options populaires des deux groupes, en nous concentrant sur les avantages du choix des LLM open source.

Les LLM open source

Exemples: Mistral AI, Phi 3, LLaMa 3.

Avantages:

Les LLM de propriété

Exemples: GPT-4.

Avantages: performances impressionnantes et caractéristiques uniques.

Limitations:

En conclusion, alors que les LLM open source et propriétaires ont leurs avantages et leurs inconvénients, les LLM open source comme Mistral AI, Phi 3 et LLaMa 3 offrent une accessibilité, une personnalisation et une transparence qui peuvent être très bénéfiques pour un large éventail d'utilisateurs.

Étape 2: Découvrez les coûts et les caractéristiques

Les LLM open source sont généralement rentables car ils peuvent être hébergés sur vos propres serveurs ou auprès de fournisseurs comme Azure ou AWS avec un modèle pay-as-you-go. Voici un résumé des coûts et caractéristiques de l'hébergement de divers LLM:

LLMDétailsLongueur du contexteCoût
Le mélangeur 8x7BMoE LLM par Mistral AFormés: 8192 jetonsLes jetons $0.7/1M (ce sont des jetons)
Le mélangeur 8x22BSuccesseur de MixtralFormés: 32768 jetonsTokens de 2 millions de dollars (disponible)
LLaMa 3 70BModèle non-MoE de la société MetFormés: 2048 jetonsLes jetons $0.02/1K (Azu)
- Je suis en train de faire une demande.- Multimodal-SLM par moiFormation et nombre total: 3Les jetons $0.002/1K (Az)
GPT-4 TurboPropriétaire LLM par O16K par défaut, plus élevéPas disponible sur AWS

Étape 3: Test à l'aide d'API publiques conformes à OpenRouter

La sélection et le test du meilleur LLM nécessitent une méthode rationalisée pour accéder et évaluer les différents modèles. OpenRouter, une norme open source API, permet de passer en douceur entre différents modèles et services AI. Nous avons choisi Fireworks AI comme fournisseur parce que:

Voici une fonction d'échantillon pour invoquer les réponses du modèle et les résultats de latence en utilisant le même matériel:

import json

def get_sanitized_json_response(user_input, guardrail):
    final = chain.invoke({"text": f"Sanitize {user_input}. Guardrail: {guardrail}"})
    final = chain.invoke({"text": final.content})
    return json.loads(final.content.replace("<json>", "").replace("</json>", "").replace("\n",""))
ModèleLa latenceCommentaires
Le mélangeur 8x7B2.1sModèle le plus léger, perf
Le mélangeur 8x22B5.3sModèle successeur, sim
LLaMa 3 70B2,6sUne réponse décente mais
- Je suis en train de faire une demande.1.5 minModèle multimodal

Une barrière de protection et une entrée très simples ont été utilisées pour tester les éléments ci-dessus:

guardrail = """Format details as bullets and use the XYZ method to format the relevant detail.
            For example:
            - I did X boosting Y percent resulting in Z.
"""

Nous avons reçu la réponse désinfectée suivante après son appel:

get_sanitized_json_response("""I served as Junior as a Software Engineer at TechCorp in Sydney in January 2011 and worked there until December 2018. During my tenure,

                            J'ai dirigé l'équipe qui a développé des outils d'analyse financière avancés basés sur AI pour traiter des centaines de millions de dossiers en une seule année.
                            Il a également créé la version initiale du pipeline de données propriétaires de la société. Dans mon rôle, j'étais responsable de
                            la conception de solutions et la mise en œuvre de multiples API. "L'année dernière, j'ai dirigé une équipe axée sur les solutions blockchain.

"Expérience": "Instructeur en logiciel",
                "société": "TechCorp",
                "emplacement": "Sydney",
                "start_date": "2011-01",
                "date de fin": "2018-12",
                "Highlights": ['- Systèmes de base de données évolutifs conçus pour un projet majeur qui ont amélioré la vitesse de traitement des données client de 40%.',
                              " - A la tête d'une équipe axée sur les solutions AI".,
                              " - Des outils d'analyse financière AI développés pour traiter plus de 100 millions de documents dans des environnements distribués. "
                              "- Pipeline de données propriétaires de la société créée".,
                              " - Équipe gérée sur les solutions blockchain en dernière année. "

In conclusion, since the response quality was fairly comparable among all these models, it came down to latency and cost. The experiment was run 3 times achieving very similar results. So we chose Mistral AI’s Mixtral 8x7B due to its favorable balance of latency and cost.

Step 4: Building an Orchestration Layer

Managing and coordinating multiple large-scale language models or a single model across various applications is crucial for optimal performance and adaptability. Instead of building from scratch using vanilla PyTorch, employing an orchestration framework is more practical and efficient. Here are three options:

Langchain

Advantages: Vast array of integrations, supports Python and JavaScript, extensive community support.

Drawbacks: Introduces an additional dependency, potential learning curve.

LlamaIndex

Advantages: Backed by Meta, offers interoperability with Langchain.

Drawbacks: Less developer-friendly syntax.

Haystack

Advantages: User-friendly syntax, supported by prominent tech corporations.

Drawbacks: Limited integrations as it’s still maturing.

Using an orchestration framework simplifies development, improves scalability, and provides access to a supportive community, making it a more favorable choice for our project.

Design and Data Flow

The following image shows the design diagram:

The data flow within our AI-driven system is an essential aspect of ensuring a seamless and efficient user experience. While the design diagram provides a visual representation of the process, a detailed explanation can help clarify the steps involved:

  1. User Input: The journey begins when the user enters their details, such as the “about” and “experience” sections of their resume, into the system.
  2. Prompt Generation: The user’s input is then processed and transformed into one or more prompts, which will be used to query the Large Language Model (LLM) for a more polished and impressive version of the text.
  3. LLM Integration via Langchain: The generated prompts are passed to Langchain, our chosen orchestrator framework, which facilitates the interaction with the LLM client. Langchain leverages a Pydantic schema in the form of a class to parse and validate the data using kor, ensuring that it adheres to the required format.
  4. JSONResponse Generation: Once the data is validated, it is converted into a final JSONResponse, a structured and easy-to-work-with data format that simplifies further processing and manipulation.
  5. Content Extraction and Indexing: The content part of the JSONResponse is extracted using kor and indexed by computing embeddings, which are mathematical representations of the text. These embeddings are then stored in a vector database, such as Qdrant, for efficient retrieval and comparison during subsequent queries.
  6. Caching for Context Module: The entire JSONResponse is cached for the context module to function correctly. This ensures that the system can maintain the context of the user’s input and the LLM’s output during follow-up queries.
  7. Follow-up Queries: When the user provides additional input or requests further refinement of the generated text, the cached JSONResponse is modified according to the new context and chained to the updated prompt. This modified prompt then goes through the entire process again, from LLM integration to content extraction and indexing, to provide the user with a tailored and accurate response.

By understanding the data flow within our system, we can appreciate the importance of each step and the role of the orchestrator framework in streamlining the process, ultimately resulting in an efficient and user-friendly AI-driven solution.

Construction rapide et chaîne à l'aide de LCEL

Il s'agit d'un exemple d'échantillon PromptTemplate:

from langchain.core.output_parsers import PydanticOutputParser
prompt = PromptTemplate(
    template="Please extract the following information from the given text and format it as a JSON object according to the schema:\n\n{format_instructions}\n{query}\n",
    input_variables=["query"],
    partial_variables={"format_instructions": output_parser.get_format_instructions()},
)

chain = prompt | chat_model | output_parser

Un modèle typique se compose de deux arguments principaux (il en existe d'autres mais qui ne relèvent pas du champ d'application de ce blog) qui sont input_variables et template. Le premier argument accepte une liste de chaînes qui seraient injectées dans le modèle de prompt à l'heure d'exécution. Cette variable agit généralement comme celle des chaînes Jinja2Template ou f. Le chat_model ici serait le LLM que nous utilisons et est enchaîné à l'interrupteur. L'opérateur `` (pipe) similaire à l'opérateur BASH ``` représente une chaîne. Il s'agit d'un court-métrage pratique donné par la spécification LCEL (LangChain Language of Expression). Cela nous permettrait de relier la réponse d'un prompt à une entrée d'un autre. Il prend également en charge l'appel à la fonction, en d'autres termes, on peut chaîner des expressions lambda ou certaines fonctions pour désinfecter généralement la sortie. Cela réduit la complexité du code en écrivant simplement des chaînes au lieu de grandes fonctions.

Étape 5: Utilisation de VectorDBs

Les bases de données vectorielles (VectorDBs) stockent, gèrent et recherchent efficacement des vecteurs haute dimension, tels que les intégrations de texte générées par les LLM. Voici une comparaison des options les plus populaires:

D'autres produits

Avantages: haute performance, intégration facile, communauté active.

Aucune signification.

Le Milvus

Avantages: Mesures de distance multiples, outil de visualisation des données.

Retour en arrière: courbe d'apprentissage plus rapide.

Le chrome

Avantages: facile à utiliser Python API, conception modulaire.

Résultats de révision: Un soutien communautaire relativement nouveau et moins étendu.

PGVector

Avantages: Leur utilisation des capacités de PostgreSQLs, des requêtes basées sur SQL.

Retours de vue: moins performant pour la recherche vectorielle haute dimension.

FAISS

Avantages: recherche à haute performance, support GPU.

Résultats de la recherche: nécessite une intégration avec d'autres bases de données.

L'évolutivité, la facilité d'intégration et le développement actif de Qdrant® en font un choix adapté pour notre solution AI.

Leur utilisation de VectorDBs comme solution robuste de IR

La création d'une solution de récupération d'informations (IR) à l'aide de VectorDBs implique:

  1. ** Pré-traitement du texte**: Nettoyer et pré-traiter les données de texte brut.
  2. Génération d'intégration de texte: Convertir le texte préprocessé en vecteurs haute dimension à l'aide d'un LLM.
  3. Embeddings stockés dans VectorDB: Embeddings d'index pour une recherche efficace.
  4. ** Traitement des requêtes**: Préprocesser et convertir les requêtes utilisateur en intégrations.
  5. Réservation de similitude: effectuer une recherche de similitude dans VectorDB pour trouver des emblèmes pertinents.
  6. Ranking et affichage Results: Rangoir les emblèmes récupérés et les convertir à nouveau en texte pour affichage.

En suivant ce processus et en utilisant VectorDBs, nous pouvons construire un système IR efficace et efficace.

Prêt à recruter avec précision ?

Commencez gratuitement, invitez toute votre équipe et voyez votre premier candidat noté en 15 minutes.

fr