Serie zum Anfassen! Erstellen Sie RAG-Anwendungen mit Zilliz Cloud und AWS Bedrock

Retrieval Augmented Generation (RAG) ist ein KI-Framework, das die Textgenerierung durch die Kombination von Informationsabruf- und NLP-Funktionen (Natural Language Processing) verbessert. Insbesondere fragt und durchsucht das Sprachmodell im RAG-System eine Wissensdatenbank oder eine externe Datenbank über einen Abrufmechanismus, der die neuesten Informationen in die generierte Antwort integriert, wodurch die endgültige Ausgabe genauer wird und mehr Kontext enthält.

Zilliz Cloud ( https://zilliz.com.cn/cloud) basiert auf der Vektordatenbank Milvus ( https://milvus.io/) und bietet Lösungen für die Speicherung und Verarbeitung großer vektorisierter Daten, die für verwendet werden können effiziente Verwaltung und Analyse und Abrufen von Daten. Entwickler können die Vektordatenbankfunktion von Zilliz Cloud nutzen, um umfangreiche Einbettungsvektoren zu speichern und zu durchsuchen und so die Abrufmodulfunktionen in RAG-Anwendungen weiter zu verbessern.

Der Cloud-Service AWS Bedrock ( https://aws.amazon.com/cn/bedrock/) bietet eine Vielzahl vorab trainierter Grundmodelle, die zum Bereitstellen und Erweitern von NLP-Lösungen verwendet werden können. Entwickler können über AWS Bedrock Modelle der Sprachgenerierung, des Sprachverständnisses und der Übersetzung in KI-Anwendungen integrieren. Darüber hinaus kann AWS Bedrock relevante und kontextreiche Antworten auf Text generieren und so die Fähigkeiten von RAG-Anwendungen weiter steigern.

01. Verwenden Sie Zilliz Cloud und AWS Bedrock, um RAG-Anwendungen zu erstellen

Wir zeigen, wie man Zilliz Cloud mit AWS Bedrock verwendet, um RAG-Anwendungen zu erstellen. Der grundlegende Prozess ist in Abbildung 1 dargestellt:

Abbildung 1. Grundlegender Prozess zum Erstellen einer RAG-Anwendung mit Zilliz Cloud und 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

Stellen Sie eine Verbindung zu AWS Bedrock und Zilliz Cloud her

Legen Sie als Nächstes die Umgebungsvariablen fest, die für die Verbindung mit AWS- und Zilliz-Cloud-Diensten erforderlich sind. Sie müssen die AWS-Serviceregion, den Zugriffsschlüssel sowie den Endpunkt-URI und API-Schlüssel von Zilliz Cloud angeben, um eine Verbindung zu den AWS Bedrock- und Zilliz Cloud-Diensten herzustellen.

# 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")

Mit den oben angegebenen Zugangsdaten haben wir einen boto3-Client ( https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) für die Verbindung zum AWS Bedrock Runtime-Service und die Integration des AWS Bedrock-Sprachmodells erstellt . Als Nächstes initialisieren wir eine ChatBedrock-Instanz ( https://python.langchain.com/v0.1/docs/integrations/chat/bedrock/), stellen eine Verbindung zum Client her und geben das zu verwendende Sprachmodell an. Das Modell , das wir in diesem Tutorial verwenden anthropic.claude-3-sonnet-20240229-v1:0 . Dieser Schritt hilft uns beim Einrichten der Infrastruktur zum Generieren von Textantworten und konfiguriert außerdem die Temperaturparameter des Modells, um die Vielfalt der generierten Antworten zu steuern. BedrockEmbeddings-Instanzen können zum Konvertieren unstrukturierter Daten wie Text verwendet werden ( https://zilliz.com.cn/glossary/%E9%9D%9E%E7%BB%93%E6%9E%84%E5%8C%96% E6 %95%B0%E6%8D%AE) in einen Vektor.

# 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)

Informationen sammeln und verarbeiten

Nachdem das Einbettungsmodell erfolgreich initialisiert wurde, besteht der nächste Schritt darin, Daten aus einer externen Quelle zu laden. Erstellen Sie eine WebBaseLoader-Instanz ( https://python.langchain.com/v0.1/docs/integrations/document_loaders/web_base/), um Inhalte aus der angegebenen Webquelle zu crawlen.

In diesem Tutorial laden wir Inhalte aus Artikeln zu KI-Agenten. Der Loader verwendet SoupStrainer von BeautifulSoup (https://www.crummy.com/software/BeautifulSoup/bs4/doc/), um bestimmte Teile der Webseite zu analysieren – nämlich mit „Beitragsinhalt“, „Beitragstitel“ und „ post" -header"-Abschnitt, um sicherzustellen, dass nur relevante Inhalte abgerufen werden. Anschließend ruft der Loader das Dokument von der angegebenen Netzwerkquelle ab und stellt eine Liste verwandter Inhalte für die anschließende Verarbeitung bereit. Als Nächstes verwenden wir die RecursiveCharacterTextSplitter-Instanz ( https://python.langchain.com/v0.1/docs/modules/data_connection/document_transformers/recursive_text_splitter/), um das abgerufene Dokument in kleinere Textblöcke aufzuteilen. Dadurch kann der Inhalt besser verwaltet werden und diese Textblöcke können auch an andere Komponenten übergeben werden, z. B. Texteinbettungs- oder Sprachgenerierungsmodule.

# 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)

Antwort generieren

Die Eingabeaufforderungsvorlage definiert die Struktur jeder Antwort vor, was die KI anleiten kann, nach Möglichkeit Statistiken und Zahlen zu verwenden und zu vermeiden, Antworten zu erfinden, wenn relevantes Wissen fehlt.

# 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"]
)

Initialisieren Sie den Zilliz-Vektorspeicher und stellen Sie eine Verbindung zur Zilliz-Cloud-Plattform her. Der Vektorspeicher ist für die Konvertierung von Dokumenten in Vektoren verantwortlich, um sie anschließend schnell und effizient abrufen zu können. Die abgerufenen Dokumente werden dann formatiert und in kohärentem Text organisiert, und die KI integriert relevante Informationen in Antworten und liefert letztendlich äußerst genaue und relevante Antworten.

# 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)

Abschließend erstellen wir einen vollständigen RAG-Link zur Generierung von KI-Antworten. Dieser Link ruft zunächst Dokumente im Zusammenhang mit der Benutzerabfrage aus dem Vektorspeicher ab, ruft sie ab, formatiert sie und übergibt sie dann an die Eingabeaufforderungsvorlage ( https://python.langchain.com/v0.1/docs/modules/model_io/ prompts /), um eine Antwortstruktur zu generieren. Diese strukturierte Eingabe wird dann an ein Sprachmodell übergeben, um eine kohärente Antwort zu generieren, die schließlich in ein String-Format geparst und dem Benutzer präsentiert wird, um eine genaue, kontextreiche Antwort zu liefern.

# 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)

Das Folgende ist ein Beispiel für ein Antwortergebnis:

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. Vorteile der Verwendung von Zilliz Cloud und AWS Bedrock

Wie in Tabelle 1 gezeigt, kann Zilliz Cloud nahtlos in AWS Bedrock integriert werden, um die Effizienz, Skalierbarkeit und Genauigkeit von RAG-Anwendungen zu verbessern. Entwickler können diese beiden Dienste nutzen, um umfassende Lösungen zu entwickeln, die riesige Datensätze verarbeiten, RAG-Anwendungsprozesse vereinfachen und die Genauigkeit von RAG-generierten Antworten verbessern.

Tabelle 1. Vorteile der Verwendung von Zilliz Cloud und AWS Bedrock

03. Zusammenfassung

In diesem Artikel wird hauptsächlich die Verwendung von Zilliz Cloud und AWS Bedrock zum Erstellen von RAG-Anwendungen vorgestellt.

Zilliz Cloud, eine auf Milvus basierende Vektordatenbank, bietet skalierbare Speicher- und Abruflösungen zum Einbetten von Vektoren, während AWS Bedrock ein leistungsstarkes vorab trainiertes Modell für die Sprachgenerierung bereitstellt. Anhand von Beispielcode zeigen wir, wie man eine Verbindung zu Zilliz Cloud und AWS Bedrock herstellt, Daten aus externen Quellen lädt, die Daten verarbeitet und aufteilt und schließlich eine vollständige RAG-Verbindung erstellt. Die in diesem Artikel integrierte RAG-Anwendung kann die Wahrscheinlichkeit minimieren, dass LLM Halluzinationen hervorruft und ungenaue Antworten liefert, wodurch die Synergie zwischen modernen NLP-Modellen und Vektordatenbanken voll ausgeschöpft wird. Wir hoffen, dass dieses Tutorial andere dazu inspiriert, ähnliche Techniken beim Erstellen von RAG-Anwendungen zu verwenden.

High-School-Schüler erstellen ihre eigene Open-Source-Programmiersprache als Coming-of-Age-Zeremonie – scharfe Kommentare von Internetnutzern: Unter Berufung auf die Verteidigung hat Apple den M4-Chip RustDesk veröffentlicht. Inländische Dienste wurden wegen grassierenden Betrugs eingestellt . In Zukunft plant er, ein unabhängiges Spiel auf der Windows-Plattform Taobao (taobao.com) zu produzieren. Webversionsoptimierungsarbeiten neu starten, Ziel für Programmierer, Visual Studio Code 1.89 veröffentlicht Java 17, die am häufigsten verwendete Java LTS-Version, Windows 10 hat eine Marktanteil von 70 %, Windows 11 geht weiter zurück ; Google unterstützt Hongmeng bei der Übernahme von Open-Source-Rabbit-R1;
{{o.name}}
{{m.name}}

Ich denke du magst

Origin my.oschina.net/u/4209276/blog/11105831
Empfohlen
Rangfolge