Skip to content

Erster KI-Assistent mit LlamaIndex und Azure AI

In der heutigen digitalen Ära nutzen viele Menschen persönliche KI-Assistenten, um ihre täglichen Aufgaben zu vereinfachen, kreative Ideen zu erhalten oder auf Informationen zuzugreifen.

Wenn Sie Daten haben, die nicht öffentlich im Internet verfügbar sind, können Sie Ihren persönlichen KI-Assistenten nicht danach fragen, ohne den Kontext im Prompt bereitzustellen. Dies ist jedoch auch nicht möglich, wenn Sie große Datenmengen haben, da die Kontextgröße von LLMs begrenzt ist.

Um diese Herausforderung zu bewältigen, zeigen wir Ihnen, wie Sie einen einfachen persönlichen KI-Assistenten mit einem Retrieval-Augmented-Generation (RAG) System mithilfe von LlamaIndex erstellen können, das die leistungsstarken Fähigkeiten von LLMs mit Ihren privaten Daten kombiniert.

Die Anwendung nutzt verschiedene Azure AI-Komponenten, um das LLM zu betreiben und die Datenabrufung zu verwalten.

Dieser Artikel hilft Ihnen, die folgenden Punkte zu verstehen und umzusetzen:

  1. Konfiguration und Initialisierung: Einrichten von API-Schlüsseln, Endpunkten und Versionen für Azure OpenAI und Azure Search.
  2. Initialisierung von Azure AI-Komponenten: Initialisierung des Sprachmodells und des Einbettungsmodells mit AzureOpenAI.
  3. Einrichtung des Azure Search Vector Store: Initialisierung eines Clients zur Interaktion mit dem Azure AI Search Index und Einrichtung des Vektor-Speichers.
  4. Datenladen und -indizierung: Erstellen einer Funktion zum Laden und Indizieren von Daten aus einem angegebenen Verzeichnis.
  5. Einrichten der Chat-Engine: Aufbau einer Chat-Engine aus den indizierten Daten und Aktivieren verschiedener Chat-Modi für die Benutzerinteraktion.

Wichtige Azure-Komponenten, die in dieser Anwendung verwendet werden:

  • Azure OpenAI: Wird für das Sprachmodell genutzt.
  • Azure Search: Wird für die Datenindizierung und -abrufung verwendet.
  • Azure AI Services: Für Texteinbettungen und verwandte Operationen.

1.  Installation

Installieren Sie die notwendigen Bibliotheken mit pip mit den folgenden Befehlen:
 
pip install llama-index

pip install llama-index-vector-stores-azureaisearch
pip install azure-search-documents
pip install llama-index-embeddings-azure-openai
pip install llama-index-llms-azure-openai
 
Importiere die installierten Bibliotheken:
 
from llama_index.llms.azure_openai import AzureOpenAI
from llama_index.embeddings.azure_openai import AzureOpenAIEmbedding
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, StorageContext
from llama_index.core.settings import Settings
from llama_index.core.node_parser import SentenceSplitter
from azure.search.documents.indexes import SearchIndexClient
from azure.core.credentials import AzureKeyCredential
from azure.search.documents import SearchClient as LISearchClient 
from llama_index.vector_stores.azureaisearch import AzureAISearchVectorStore
from llama_index.vector_stores.azureaisearch import (
    IndexManagement,
)
 
 

2.  Konfiguration und Initialisierung

Zuerst müssen Sie Azure OpenAI konfigurieren, indem Sie Ihren API-Schlüssel, den Endpunkt und die Version festlegen. Dieser Schritt stellt sicher, dass Ihre Anwendung mit den Azure OpenAI-Diensten kommunizieren kann.

# Configuration for Azure OpenAI
api_key = "your_azure_openai_api_key_here"
azure_endpoint = "your_azure_openai_endpoint_here"
api_version="2024-02-15-preview"
 
Konfigurieren Sie Azure Search auf ähnliche Weise, indem Sie den API-Schlüssel und den Endpunkt festlegen. Diese Konfiguration ermöglicht es Ihrer Anwendung, mit Azure Search zur Indizierung und Abruf von Daten zu interagieren.
 
# Configuration for Azure Search Service
search_service_api_key = "your_azure_search_service_admin_key_here"
search_service_endpoint= "your_azure_search_service_endpoint_here"
search_creds = AzureKeyCredential(search_service_api_key)
 
 

Download AI Readiness Checkliste

Sind Sie bereit, die Kraft der KI in Ihrem Unternehmen zu nutzen? Verschaffen Sie sich einen Vorsprung mit unserer 𝗞𝗢𝗦𝗧𝗘𝗡𝗟𝗢𝗦𝗘𝗡 𝗠𝗶𝗰𝗿𝗼𝘀𝗼𝗳𝘁 𝗖𝗼𝗽𝗶𝗹𝗼𝘁 𝘂𝗻𝗱 𝗔𝗜 𝗥𝗲𝗮𝗱𝗶𝗻𝗲𝘀𝘀 𝗖𝗵𝗲𝗰𝗸𝗹𝗶𝘀𝘁𝗲!

Checkliste herunterladen

3. Initialisierung der Azure AI-Komponenten

Initialisieren Sie das Sprachmodell und das Einbettungsmodell mit den angegebenen Konfigurationen. Wir verwenden das Modell gpt-35-turbo von AzureOpenAI, um Antworten zu generieren, und text-embedding-ada-002 von AzureOpenAIEmbedding, um Text in numerische Repräsentationen umzuwandeln. Zusätzlich stellen wir unseren zuvor definierten API-Schlüssel, den Azure-Endpunkt und die API-Version bereit.

# Initialize the AzureOpenAI language model
llm = AzureOpenAI(
    model="gpt-35-turbo",
    api_key=api_key,
    azure_endpoint=azure_endpoint,
    api_version=api_version
)

# Initialize the embedding model
embed_model = AzureOpenAIEmbedding(
    model="text-embedding-ada-002",
    api_key=api_key,
    azure_endpoint=azure_endpoint,
    api_version=api_version
)

 

4. Azure Search Vector Store Setup

Initialisierung eines Clients zum Zugriff auf einen Azure AI-Suchindex: SearchIndexClient wird mit den angegebenen Konfigurationen initialisiert. Dieser Client ermöglicht es Ihnen, Ihren Suchindex zu verwalten und Abfragen durchzuführen.

Initialisierung des Azure Search Vector Store: Richtet den Azure AI Search Vector Store ein und konfiguriert verschiedene Parameter wie Feldschlüssel, Dimensionalität und Sucheinstellungen. index_name ist der Name des Suchindex, mit dem der Client interagiert. Dieser Store ist für die Verwaltung der Speicherung und Abrufung von Vektoreinbettungen in Ihrem Suchindex verantwortlich.

index_client = SearchIndexClient(
    endpoint=search_service_endpoint,
    credential=search_creds
)    

index_name = "llamaindex-vector-demo"

vector_store = AzureAISearchVectorStore(
    search_or_index_client=index_client,
    index_name=index_name,
    index_management=IndexManagement.CREATE_IF_NOT_EXISTS,
    id_field_key="id",
    chunk_field_key="chunk",
    embedding_field_key="embedding",
    embedding_dimensionality=1536,
    metadata_string_field_key="metadata",
    doc_id_field_key="doc_id",
    language_analyzer="en.lucene",
    vector_algorithm_type="exhaustiveKnn",
)

 

Globale Einstellungen definieren

Bevor wir die Daten laden, definieren wir unsere globalen Einstellungen. LlamaIndex v0.10 führte das Settings-Objekt ein, das nur einmal definiert werden muss und global in unserem nachgelagerten Code verwendet werden kann. Hier konfigurieren wir unser LLM, das auf Aufforderungen und Anfragen reagiert, und unser Einbettungsmodell, das für die Umwandlung von Text in numerische Darstellungen verantwortlich ist.

Settings.llm = llm
Settings.embed_model = embed_model

 

5. Datenladen und Indizierung

 

Die Funktion load_and_index_data(path) nimmt einen Pfad als Eingabe entgegen. Standardmäßig wird der Pfad zu einem Verzeichnis namens "data" verwendet, das sich im gleichen Pfad wie das Skript befindet. Sie können alle Dokumente, die Sie für die Suche verwenden möchten, in ein Verzeichnis legen und den Pfad dazu mit dieser Funktion angeben.

docs = SimpleDirectoryReader(input_dir=path, recursive=True).load_data(): Liest das Verzeichnis im angegebenen "Pfad" ein.

recursive=True ermöglicht das Lesen aus Unterverzeichnissen. Schließlich werden die Dokumente in die Variable docs geladen. Der SimpleDirectoryReader unterstützt viele Dateitypen wie csv, docx, ipynb, md, mp3, pdf, png und viele mehr.

Der StorageContext wird mit dem initialisierten Vektorspeicher eingerichtet.

Schließlich erstellen wir einen Vektorspeicher mit dem storage_context und den geladenen Dokumenten.

def load_and_index_data(path="./data"):
    docs = SimpleDirectoryReader(input_dir=path, recursive=True).load_data()
    storage_context = StorageContext.from_defaults(vector_store=vector_store)
    index = VectorStoreIndex.from_documents(docs, storage_context=storage_context)
    return index

 

Download AI Readiness Checkliste

Sind Sie bereit, die Kraft der KI in Ihrem Unternehmen zu nutzen? Verschaffen Sie sich einen Vorsprung mit unserer 𝗞𝗢𝗦𝗧𝗘𝗡𝗟𝗢𝗦𝗘𝗡 𝗠𝗶𝗰𝗿𝗼𝘀𝗼𝗳𝘁 𝗖𝗼𝗽𝗶𝗹𝗼𝘁 𝘂𝗻𝗱 𝗔𝗜 𝗥𝗲𝗮𝗱𝗶𝗻𝗲𝘀𝘀 𝗖𝗵𝗲𝗰𝗸𝗹𝗶𝘀𝘁𝗲!

Checkliste herunterladen

6. Einrichten der Chat-Engine

Hier rufen wir die Funktion load_and_index_data() auf, die wir gerade implementiert haben, um einen Vektorindex zu erstellen. Anschließend bauen wir eine Chat-Engine aus dem Index und setzen den Chat-Modus auf "condense_question". Dieser Modus generiert eine eigenständige Frage aus dem Gesprächskontext und der letzten Nachricht und fragt dann die Query-Engine mit der generierten Frage ab.

index = load_and_index_data()

chat_engine = index.as_chat_engine(chat_mode="condense_question", verbose=True

 

Sie können auch andere Chat-Modi ausprobieren:

  • Der "context"-Modus ist ein einfacher Chat-Modus, der auf einem Retriever basiert. Bei jeder Interaktion ruft er Text aus dem Index ab, indem er die Eingabe verwendet, und setzt den abgerufenen Text als Kontext im System-Prompt. Schließlich gibt er dem Benutzer eine Antwort.

  • "condense_plus_context" ist ein mehrstufiger Chat-Modus, der auf einem Retriever basiert und den Modus "condense_question" mit dem Kontextmodus kombiniert. Bei jeder Interaktion generiert er eine eigenständige Frage aus dem Gespräch und der neuesten Benutzernachricht. Anschließend baut er einen Kontext für die eigenständige Frage auf und übergibt diesen zusammen mit dem Prompt und der Benutzereingabe an das LLM, um eine Antwort zu generieren.

7. CLI-Interaktion

Zu guter Letzt beginnen wir eine Gesprächsschleife, in der der Benutzer Anfragen eingeben kann und der Chatbot entsprechend antwortet, bis der Benutzer den Vorgang beendet.

while True:
    prompt = input("User: ")
    if prompt == "exit":
        break
    response = chat_engine.chat(prompt)
    print(f"Chatbot: {response}")                    

 

Sie sollten jetzt in der Lage sein, die Anwendung auszuführen und mit den bereitgestellten Daten zu kommunizieren. Die Anwendung wird weiterhin nach Ihrer Eingabe fragen, bis Sie "exit" eingeben, um den Vorgang zu beenden.

Download AI Readiness Checkliste

Sind Sie bereit, die Kraft der KI in Ihrem Unternehmen zu nutzen? Verschaffen Sie sich einen Vorsprung mit unserer 𝗞𝗢𝗦𝗧𝗘𝗡𝗟𝗢𝗦𝗘𝗡 𝗠𝗶𝗰𝗿𝗼𝘀𝗼𝗳𝘁 𝗖𝗼𝗽𝗶𝗹𝗼𝘁 𝘂𝗻𝗱 𝗔𝗜 𝗥𝗲𝗮𝗱𝗶𝗻𝗲𝘀𝘀 𝗖𝗵𝗲𝗰𝗸𝗹𝗶𝘀𝘁𝗲!

Checkliste herunterladen

Beispiele

Um unsere Anwendung zu testen, haben wir zwei PDF-Dateien im Datenordner abgelegt, die Informationen über Kaffee und Tee enthalten und die wir von Wikipedia heruntergeladen haben. Nachdem wir die Anwendung gestartet und eine Weile gewartet haben, bis alles eingerichtet war, konnten wir beginnen, Fragen über die CLI-Schnittstelle zu stellen. Hier sind einige Beispiele mit den jeweiligen Antworten des Chatbots. Das LLM verarbeitet auch die Benutzereingaben für Abfragen, wie wir unter "Querying with:"-Ausgabe sehen können.

Beispiel 1:

LlamaIndex Example 1

Beispiel 2:

Hier können wir die Vorteile des condense_question-Modus sehen. Das LLM erinnert sich an die letzte Frage und kombiniert die Eingabe der letzten Frage mit der aktuellen Frage, um eine Abfrage zu generieren und eine Antwort zurückzugeben.

LlamaIndex Example 2

Beispiel 3:

LlamaIndex Example 3

Beispiel 4:

LlamaIndex Example 4

 

Download AI Readiness Checkliste

Sind Sie bereit, die Kraft der KI in Ihrem Unternehmen zu nutzen? Verschaffen Sie sich einen Vorsprung mit unserer 𝗞𝗢𝗦𝗧𝗘𝗡𝗟𝗢𝗦𝗘𝗡 𝗠𝗶𝗰𝗿𝗼𝘀𝗼𝗳𝘁 𝗖𝗼𝗽𝗶𝗹𝗼𝘁 𝘂𝗻𝗱 𝗔𝗜 𝗥𝗲𝗮𝗱𝗶𝗻𝗲𝘀𝘀 𝗖𝗵𝗲𝗰𝗸𝗹𝗶𝘀𝘁𝗲!

Checkliste herunterladen
 
AI Readiness Checklist Valprovia

Fazit

Indem Sie den in diesem Artikel beschriebenen Schritten folgen, haben Sie gelernt, wie Sie Azure OpenAI und Azure Search konfigurieren und initialisieren, einen Azure Search Vector Store einrichten, Ihre Daten einbetten und indexieren, sie in einem Vektorspeicher speichern und eine Chat-Engine erstellen.

Diese Schritte ermöglichen es Ihnen, einen Chatbot zu erstellen, der große Mengen privater Daten effizient verarbeiten kann, indem verschiedene Azure AI-Komponenten genutzt werden.

Zu den in dieser Anwendung verwendeten Schlüsselkomponenten gehören Azure OpenAI für das Sprachmodell, Azure Search für die Datenindizierung und -abfrage sowie Azure AI Services für Texteinbettungen und verwandte Operationen. Durch die Installation der erforderlichen Bibliotheken und die Konfiguration der Azure-Dienste können Sie ein robustes System für die Erstellung eines intelligenten Chatbots einrichten.

Durch die Implementierung dieses RAG-basierten Chatbot-Systems können Sie LLMs nutzen, um effizient mit Ihren privaten Daten zu interagieren, die Einschränkungen der Kontextgröße zu überwinden und die Fähigkeiten des Chatbots zu erweitern. Diese Grundlage öffnet die Tür für weitere Anpassungen und Verbesserungen, um spezifische Bedürfnisse und Anwendungsfälle zu erfüllen und Ihren Chatbot zu einem leistungsstarken Werkzeug für verschiedene Anwendungen zu machen.

Mit diesen Erkenntnissen und praktischen Schritten sind Sie nun in der Lage, Ihren eigenen Chatbot mit LlamaIndex und Azure AI zu erstellen und bereitzustellen, sodass Sie das volle Potenzial moderner KI-Technologien ausschöpfen können.