La génération augmentée (RAG) de la récupération améliore considérablement la précision et la fiabilité du modèle de langue grande (LLM) en incorporant des données externes. Cela contextualise les réponses et permet des mises à jour sans recyclage. Cependant, le chiffon n'est pas universellement efficace. Cet article détaille la construction de pipelines de chiffons robustes, explore les limitations et propose des solutions.
Openai Fundamentals (brève mention, pas besoin de développer)
En savoir plus sur l'utilisation de l'API OpenAI. Démarrez maintenant
Comment fonctionne le chiffon:
(image de la documentation Llamaindex)
Un pipeline de chiffon comprend trois étapes: indexation, récupération et génération.
Indexation: Les données (différents formats) sont nettoyées, converties en texte brut, en morceaux en morceaux gérables et transformés en vecteurs numériques (intégres) en utilisant un modèle d'incorporation. Ces intérêts et morceaux sont indexés pour une recherche efficace.
RETRAITE: Les requêtes utilisateur sont vectorisées à l'aide du même modèle d'intégration. Le système calcule les scores de similitude entre le vecteur de requête et les vecteurs de morceaux indexés, récupérant les k supérieurs les plus similaires.
Génération: La requête et les morceaux récupérés sont formatés en une invite et alimentés au LLM pour la génération de réponses.
Limitations de chiffon:
Les défis existent à chaque étape:
Améliorer les performances des chiffons:
Trois stratégies clés abordent ces limites: le cordage, le reconstitution et les transformations de requête. Ce qui suit démontre ces derniers à l'aide de Llamaindex et de l'API OpenAI pour répondre aux questions sur les entrées de Wikipedia (Emma Stone, Ryan Gosling, La La Land).
Système de chiffon de base:
Installez les packages nécessaires:
!pip install llama-index openai wikipedia
Définissez votre clé API OpenAI:
import os os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_API_KEY"
Chargez les données Wikipedia et créez l'index:
from llama_index.core import (VectorStoreIndex, ServiceContext, download_loader) WikipediaReader = download_loader("WikipediaReader") loader = WikipediaReader() pages = ['Emma_Stone', 'La_La_Land', 'Ryan_Gosling'] documents = loader.load_data(pages=pages, auto_suggest=False, redirect=False) from llama_index.llms import OpenAI from llama_index.embeddings import OpenAIEmbedding, OpenAIEmbeddingModelType gpt3 = OpenAI(temperature=0, model="gpt-3.5-turbo-instruct", api_key=os.environ["OPENAI_API_KEY"]) embed_model = OpenAIEmbedding(model=OpenAIEmbeddingModelType.TEXT_EMBED_ADA_002, api_key=os.environ["OPENAI_API_KEY"]) service_context_gpt3 = ServiceContext.from_defaults(llm=gpt3, chunk_size=256, chunk_overlap=0, embed_model=embed_model) index = VectorStoreIndex.from_documents(documents, service_context=service_context_gpt3) retriever = index.as_retriever(similarity_top_k=3)
Créez un modèle d'invite pour garantir les réponses contextuelles:
from llama_index.core.prompts import PromptTemplate template = ( "We have provided context information below. \n" "---------------------\n" "{context_str}" "\n---------------------\n" "Given this information, please answer the question: {query_str}\n" "Don't give an answer unless it is supported by the context above.\n" ) qa_template = PromptTemplate(template)
(Les requêtes initiales et les réponses sous-filiales sont omises pour la concision. L'accent est mis sur les stratégies d'amélioration.)
Amélioration avec le bunking:
ajuster chunk_size
et chunk_overlap
dans service_context_gpt3
pour optimiser la récupération.
Amélioration avec le reconstitution:
(Des exemples de code pour FlakeMeddingReranker et RankGpTreRank sont omis pour la concision, mais les descriptions demeurent)
FlakeMeddingReranker: utilise un modèle de rediffusion de visage étreint (par exemple, BAAI/bge-reranker-base
) pour améliorer la pertinence du morceau. Nécessite un jeton d'accès au visage étreint.
RANKGPTRERANK: utilise un LLM (par exemple, gpt-3.5-turbo-0125
) pour ré-classement des morceaux basés sur la compréhension sémantique.
Amélioration avec les transformations de requête:
(des exemples de code pour les transformations de requête Hyde et en plusieurs étapes sont omis pour la concision, mais les descriptions demeurent)
Hyde (Hypothétique Document Embeddings): génère une réponse hypothétique, crée des incorporations pour la requête et la réponse hypothétique, et récupére les documents les plus proches de ces intérêts.
Transformations de requête en plusieurs étapes: décompose les requêtes complexes en sous-questions plus simples pour un traitement plus efficace.
Conclusion:
Cet article a présenté plusieurs techniques pour améliorer les performances des chiffons. L'approche optimale dépend de l'application spécifique et des résultats souhaités. Une exploration plus approfondie de RAG peut être trouvée dans [Lien vers des vidéos de code-along ici].
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!