Série pratique ! Créez des applications RAG à l'aide de Zilliz Cloud et AWS Bedrock

Retrieval Augmented Generation (RAG) est un framework d'IA qui améliore la génération de texte en combinant les capacités de récupération d'informations et de traitement du langage naturel (NLP). Plus précisément, le modèle de langage du système RAG interroge et recherche une base de connaissances ou une base de données externe via un mécanisme de récupération qui intègre les dernières informations dans la réponse générée, rendant le résultat final plus précis et contenant plus de contexte.

Zilliz Cloud ( https://zilliz.com.cn/cloud) est construit sur la base de données vectorielles Milvus ( https://milvus.io/) et fournit des solutions de stockage et de traitement de données vectorisées à grande échelle, qui peuvent être utilisées pour gestion et analyse efficaces et récupération des données. Les développeurs peuvent utiliser la fonction de base de données vectorielles de Zilliz Cloud pour stocker et rechercher des vecteurs d'intégration massifs, améliorant ainsi les capacités du module de récupération dans les applications RAG.

Le service cloud AWS Bedrock ( https://aws.amazon.com/cn/bedrock/) fournit une variété de modèles de base pré-entraînés qui peuvent être utilisés pour déployer et développer des solutions NLP. Les développeurs peuvent intégrer des modèles de génération, de compréhension et de traduction de langage dans les applications d'IA via AWS Bedrock. De plus, AWS Bedrock peut générer des réponses pertinentes et riches en contexte au texte, augmentant ainsi encore les capacités des applications RAG.

01. Utilisez Zilliz Cloud et AWS Bedrock pour créer des applications RAG

Nous montrerons comment utiliser Zilliz Cloud avec AWS Bedrock pour créer des applications RAG. Le processus de base est illustré à la figure 1 :

Figure 1. Processus de base de création d'une application RAG à l'aide de Zilliz Cloud et AWS Bedrock

#download the packages then import them
! pip install --upgrade --quiet  langchain langchain-core langchain-text-splitters langchain-community langchain-aws bs4 boto3

# For example
import bs4
import boto3

Connectez-vous à AWS Bedrock et Zilliz Cloud

Ensuite, définissez les variables d'environnement requises pour vous connecter aux services AWS et Zilliz Cloud. Vous devez fournir la région de service AWS, la clé d'accès, ainsi que l'URI du point de terminaison et la clé API de Zilliz Cloud pour vous connecter aux services AWS Bedrock et Zilliz Cloud.

# Set the AWS region and access key environment variables
REGION_NAME = "us-east-1"
AWS_ACCESS_KEY_ID = os.getenv("AWS_ACCESS_KEY_ID")
AWS_SECRET_ACCESS_KEY = os.getenv("AWS_SECRET_ACCESS_KEY")

# Set ZILLIZ cloud environment variables
ZILLIZ_CLOUD_URI = os.getenv("ZILLIZ_CLOUD_URI")
ZILLIZ_CLOUD_API_KEY = os.getenv("ZILLIZ_CLOUD_API_KEY")

Avec les informations d'identification d'accès fournies ci-dessus, nous avons créé un client boto3 ( https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) pour nous connecter au service AWS Bedrock Runtime et intégrer le modèle de langage AWS Bedrock dans . Ensuite, nous initialisons une instance ChatBedrock ( https://python.langchain.com/v0.1/docs/integrations/chat/bedrock/), nous connectons au client et spécifions le modèle de langage à utiliser. Le modèle que nous utilisons dans ce tutoriel anthropic.claude-3-sonnet-20240229-v1:0 . Cette étape nous aide à mettre en place l'infrastructure pour générer des réponses textuelles, et configure également les paramètres de température du modèle pour contrôler la diversité des réponses générées. Les instances BedrockEmbeddings peuvent être utilisées pour convertir des données non structurées telles que du texte ( https://zilliz.com.cn/glossary/%E9%9D%9E%E7%BB%93%E6%9E%84%E5%8C%96% E6 %95%B0%E6%8D%AE) dans un vecteur.

# Create a boto3 client with the specified credentials
client = boto3.client(
    "bedrock-runtime",
    region_name=REGION_NAME,
    aws_access_key_id=AWS_ACCESS_KEY_ID,
    aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
)

# Initialize the ChatBedrock instance for language model operations
llm = ChatBedrock(
    client=client,
    model_id="anthropic.claude-3-sonnet-20240229-v1:0",
    region_name=REGION_NAME,
    model_kwargs={"temperature": 0.1},
)

# Initialize the BedrockEmbeddings instance for handling text embeddings
embeddings = BedrockEmbeddings(client=client, region_name=REGION_NAME)

Collecter et traiter les informations

Une fois le modèle d’intégration initialisé avec succès, l’étape suivante consiste à charger les données à partir d’une source externe. Créez une instance WebBaseLoader ( https://python.langchain.com/v0.1/docs/integrations/document_loaders/web_base/) pour explorer le contenu de la source Web spécifiée.

Dans ce didacticiel, nous chargerons le contenu des articles liés aux agents IA. Le chargeur utilise SoupStrainer de BeautifulSoup (https://www.crummy.com/software/BeautifulSoup/bs4/doc/) pour analyser des parties spécifiques de la page Web - notamment avec "post-content", "post-title" et " post" -header" pour garantir que seul le contenu pertinent est récupéré. Le chargeur récupère ensuite le document à partir de la source réseau spécifiée, fournissant une liste de contenu associé pour un traitement ultérieur. Ensuite, nous utilisons l'instance RecursiveCharacterTextSplitter ( https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/recursive_text_splitter/) pour diviser le document récupéré en morceaux de texte plus petits. Cela peut rendre le contenu plus gérable et peut également transmettre ces blocs de texte à d'autres composants, tels que l'intégration de texte ou des modules de génération de langage.

# Create a WebBaseLoader instance to load documents from web sources
loader = WebBaseLoader(
    web_paths=("https://lilianweng.github.io/posts/2023-06-23-agent/",),
    bs_kwargs=dict(
        parse_only=bs4.SoupStrainer(
            class_=("post-content", "post-title", "post-header")
        )
    ),
)
# Load documents from web sources using the loader
documents = loader.load()
# Initialize a RecursiveCharacterTextSplitter for splitting text into chunks
text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=200)


# Split the documents into chunks using the text_splitter
docs = text_splitter.split_documents(documents)

Générer une réponse

Le modèle d'invite prédéfinit la structure de chaque réponse, ce qui peut guider l'IA à utiliser des statistiques et des chiffres lorsque cela est possible et à éviter d'inventer des réponses lorsque les connaissances pertinentes font défaut.

# Define the prompt template for generating AI responses
PROMPT_TEMPLATE = """
Human: You are a financial advisor AI system, and provides answers to questions by using fact based and statistical information when possible.
Use the following pieces of information to provide a concise answer to the question enclosed in <question> tags.
If you don't know the answer, just say that you don't know, don't try to make up an answer.
<context>
{context}
</context>

<question>
{question}
</question>

The response should be specific and use statistics or numbers when possible.

Assistant:"""
# Create a PromptTemplate instance with the defined template and input variables
prompt = PromptTemplate(
    template=PROMPT_TEMPLATE, input_variables=["context", "question"]
)

Initialisez le magasin de vecteurs Zilliz et connectez-vous à la plateforme Zilliz Cloud. Le magasin de vecteurs est chargé de convertir les documents en vecteurs pour une récupération ultérieure rapide et efficace des documents. Les documents récupérés sont ensuite formatés et organisés en texte cohérent, et l'IA intègre les informations pertinentes dans les réponses, fournissant finalement des réponses très précises et pertinentes.

# Initialize Zilliz vector store from the loaded documents and embeddings
vectorstore = Zilliz.from_documents(
    documents=docs,
    embedding=embeddings,
    connection_args={
        "uri": ZILLIZ_CLOUD_URI,
        "token": ZILLIZ_CLOUD_API_KEY,
        "secure": True,
    },
    auto_id=True,
    drop_old=True,
)

# Create a retriever for document retrieval and generation
retriever = vectorstore.as_retriever()

# Define a function to format the retrieved documents
def format_docs(docs):
    return "\n\n".join(doc.page_content for doc in docs)

Enfin, nous créons un lien RAG complet pour générer des réponses IA. Ce lien récupère d'abord les documents liés à la requête de l'utilisateur à partir du magasin de vecteurs, les récupère et les formate, puis les transmet au modèle d'invite ( https://python.langchain.com/v0.1/docs/modules/model_io/ prompts /) pour générer une structure de réponse. Cette entrée structurée est ensuite transmise à un modèle de langage pour générer une réponse cohérente, qui est finalement analysée sous forme de chaîne et présentée à l'utilisateur, fournissant une réponse précise et riche en contexte.

# Define the RAG (Retrieval-Augmented Generation) chain for AI response generation
rag_chain = (
    {"context": retriever | format_docs, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

# rag_chain.get_graph().print_ascii()

# Invoke the RAG chain with a specific question and retrieve the response
res = rag_chain.invoke("What is self-reflection of an AI Agent?")
print(res)

Voici un exemple de résultat de réponse :

Self-reflection is a vital capability that allows autonomous AI agents to improve iteratively by analyzing and refining their past actions, decisions, and mistakes. Some key aspects of self-reflection for AI agents include:
1. Evaluating the efficiency and effectiveness of past reasoning trajectories and action sequences to identify potential issues like inefficient planning or hallucinations (generating consecutive identical actions without progress).
2. Synthesizing observations and memories from past experiences into higher-level inferences or summaries to guide future behavior.

02. Avantages de l'utilisation de Zilliz Cloud et AWS Bedrock

Comme le montre le tableau 1, Zilliz Cloud peut être intégré de manière transparente à AWS Bedrock pour améliorer l'efficacité, l'évolutivité et la précision des applications RAG. Les développeurs peuvent utiliser ces deux services pour développer des solutions complètes qui traitent des ensembles de données massifs, simplifient les processus d'application RAG et améliorent la précision des réponses générées par RAG.

Tableau 1. Avantages de l'utilisation de Zilliz Cloud et AWS Bedrock

03. Résumé

Cet article explique principalement comment utiliser Zilliz Cloud et AWS Bedrock pour créer des applications RAG.

Zilliz Cloud, une base de données vectorielle construite sur Milvus, fournit des solutions de stockage et de récupération évolutives pour les vecteurs d'intégration, tandis qu'AWS Bedrock fournit un puissant modèle pré-entraîné pour la génération de langage. Grâce à un exemple de code, nous montrons comment se connecter à Zilliz Cloud et AWS Bedrock, charger des données à partir de sources externes, traiter et diviser les données, et enfin créer un lien RAG complet. L'application RAG construite dans cet article peut minimiser la probabilité que LLM produise des hallucinations et fournisse des réponses inexactes, faisant ainsi jouer pleinement la synergie entre les modèles PNL modernes et les bases de données vectorielles. Nous espérons que ce didacticiel inspirera d'autres personnes à utiliser des techniques similaires pour créer des applications RAG.

Les lycéens créent leur propre langage de programmation open source en guise de cérémonie de passage à l'âge adulte - commentaires acerbes des internautes : S'appuyant sur la défense, Apple a publié la puce M4 RustDesk. Les services nationaux ont été suspendus en raison d'une fraude généralisée. À l'avenir, il envisage de produire un jeu indépendant sur la plateforme Windows Taobao (taobao.com) Redémarrer le travail d'optimisation de la version Web, destination des programmeurs, Visual Studio Code 1.89 publie Java 17, la version Java LTS la plus couramment utilisée, Windows 10 a un part de marché de 70 %, Windows 11 continue de décliner Open Source Daily | Google soutient Hongmeng pour prendre le relais ; l'anxiété et les ambitions de Microsoft ont fermé la plate-forme ouverte ;
{{o.name}}
{{m.nom}}

Je suppose que tu aimes

Origine my.oschina.net/u/4209276/blog/11105831
conseillé
Classement